From d5f7a914f8193332a3c4f5d0b7758fcf81ebcbb1 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Thu, 28 Nov 2019 08:25:00 +0100 Subject: [PATCH] working on prebob. --- src/test/kc/complex/prebob/prebob.kc | 68 +- src/test/ref/complex/prebob/prebob.asm | 303 +- src/test/ref/complex/prebob/prebob.cfg | 394 +- src/test/ref/complex/prebob/prebob.log | 5567 ++++++++++++++++-------- src/test/ref/complex/prebob/prebob.sym | 217 +- 5 files changed, 4416 insertions(+), 2133 deletions(-) diff --git a/src/test/kc/complex/prebob/prebob.kc b/src/test/kc/complex/prebob/prebob.kc index c7f120865..9a66f159e 100644 --- a/src/test/kc/complex/prebob/prebob.kc +++ b/src/test/kc/complex/prebob/prebob.kc @@ -1,6 +1,9 @@ // Pre-calculated bobs inside a charset (pre-mpved to all x/y-combinations) import "c64" import "string" +import "keyboard" +import "time" +import "print" // The prototype BOB (a 3x3 char image with a bob image in the upper 2x2 chars) // The chars are layout as follows with data in chars 0, 1, 3, 4 initially @@ -19,10 +22,14 @@ const char[0x200] SIN_X_TAB = kickasm {{ .fill $200, 75.5+75.5*sin(i*2*PI/256) } // Sine used for the Y-coordinate const char[0x200] SIN_Y_TAB = kickasm {{ .fill $200, 91.5+91.5*sin(i*2*PI/256) }}; +// The BASIC screen +const char* SCREEN_BASIC = 0x0400; +// The BASIC charset +const char* CHARSET_BASIC = 0x1000; // The screen -const char* SCREEN = 0x4000; +const char* BOB_SCREEN = 0x4800; // The charset that will receive the shifted bobs -const char* BOB_CHARSET = 0x6000; +const char* BOB_CHARSET = 0x4000; // Tables containing the char to use for a specific cell of a shifted BOB. // char_id = BOB_TABLES[cell*BOB_SUBTABLE_SIZE + shift_y*BOB_SHIFTS_X + shift_x]; @@ -36,55 +43,50 @@ const char BOB_SUBTABLE_SIZE = BOB_SHIFTS_X*BOB_SHIFTS_Y; void main() { prepareBobs(); - vicSelectGfxBank(SCREEN); - *D018 = toD018(SCREEN, BOB_CHARSET); + vicSelectGfxBank(BOB_SCREEN); + *D018 = toD018(BOB_SCREEN, BOB_CHARSET); // Clear screen - memset(SCREEN, 0x00, 1000); - /* - // Display some BOBs - char* screen = SCREEN; - char bob_table_idx = 0; - for(char i:0..7) { - for(char j:0..3) { - screen[0] = (BOB_TABLES+0*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[40] = (BOB_TABLES+1*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[80] = (BOB_TABLES+2*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[1] = (BOB_TABLES+3*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[41] = (BOB_TABLES+4*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[81] = (BOB_TABLES+5*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[2] = (BOB_TABLES+6*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[42] = (BOB_TABLES+7*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[82] = (BOB_TABLES+8*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen += 120; - bob_table_idx++; - } - screen -= (120*4)-3; - } - */ + memset(BOB_SCREEN, 0x00, 1000); + // Display a BOB grid + for( char x: 0..7) + for(char y: 0..3) + renderBob(x*12+y, y*24+x); + // Wait for space + while(!keyboard_key_pressed(KEY_SPACE)) {} + while(keyboard_key_pressed(KEY_SPACE)) {} + // Clear screen + memset(BOB_SCREEN, 0x00, 1000); + // Render sine BOBs char sin_x_idx = 0; char sin_y_idx = 73; while(true) { - do { } while (*RASTER!=$ff); - //kickasm {{ .break }} + do { } while (*RASTER<$f8); (*BORDERCOL)++; - renderBob((SIN_X_TAB)[sin_x_idx], (SIN_Y_TAB)[sin_y_idx]); - renderBob((SIN_X_TAB+15)[sin_x_idx], (SIN_Y_TAB+11)[sin_y_idx]); - renderBob((SIN_X_TAB+22)[sin_x_idx], (SIN_Y_TAB+30)[sin_y_idx]); + renderBob((SIN_X_TAB+21*4)[sin_x_idx], (SIN_Y_TAB+13*0)[sin_y_idx]); + renderBob((SIN_X_TAB+19*3)[sin_x_idx], (SIN_Y_TAB+15*1)[sin_y_idx]); + renderBob((SIN_X_TAB+17*2)[sin_x_idx], (SIN_Y_TAB+17*2)[sin_y_idx]); + renderBob((SIN_X_TAB+15*1)[sin_x_idx], (SIN_Y_TAB+19*3)[sin_y_idx]); + renderBob((SIN_X_TAB+13*0)[sin_x_idx], (SIN_Y_TAB+21*4)[sin_y_idx]); sin_x_idx++; sin_y_idx++; (*BORDERCOL)--; + if(keyboard_key_pressed(KEY_SPACE)) { + break; + } } + // Return to BASIC + vicSelectGfxBank(SCREEN_BASIC); + *D018 = toD018(SCREEN_BASIC, CHARSET_BASIC); } // Render a single BOB at a given x/y-position // X-position is 0-151. Each x-position is 2 pixels wide. // Y-position is 0-183. Each y-position is 1 pixel high. void renderBob(char xpos, char ypos) { - //kickasm {{ .break }} char x_char_offset = xpos/BOB_SHIFTS_X; char y_char_offset = ypos/BOB_SHIFTS_Y; unsigned int y_offset = (unsigned int)y_char_offset*40; - char* screen = SCREEN+y_offset+x_char_offset; + char* screen = BOB_SCREEN+y_offset+x_char_offset; char bob_table_idx = (ypos&7)*BOB_SHIFTS_X+(xpos&3); screen[0] = (BOB_TABLES+0*BOB_SUBTABLE_SIZE)[bob_table_idx]; screen[40] = (BOB_TABLES+1*BOB_SUBTABLE_SIZE)[bob_table_idx]; diff --git a/src/test/ref/complex/prebob/prebob.asm b/src/test/ref/complex/prebob/prebob.asm index c14f61726..5d9941162 100644 --- a/src/test/ref/complex/prebob/prebob.asm +++ b/src/test/ref/complex/prebob/prebob.asm @@ -5,14 +5,23 @@ .label RASTER = $d012 .label BORDERCOL = $d020 .label D018 = $d018 + // CIA#1 Port A: keyboard matrix columns and joystick #2 + .label CIA1_PORT_A = $dc00 + // CIA#1 Port B: keyboard matrix rows and joystick #1. + .label CIA1_PORT_B = $dc01 // CIA#2 Port A: Serial bus, RS-232, VIC memory bank .label CIA2_PORT_A = $dd00 // CIA #2 Port A data direction register. .label CIA2_PORT_A_DDR = $dd02 + .const KEY_SPACE = $3c + // The BASIC screen + .label SCREEN_BASIC = $400 + // The BASIC charset + .label CHARSET_BASIC = $1000 // The screen - .label SCREEN = $4000 + .label BOB_SCREEN = $4800 // The charset that will receive the shifted bobs - .label BOB_CHARSET = $6000 + .label BOB_CHARSET = $4000 // The number of different X-shifts .const BOB_SHIFTS_X = 4 // The number of different Y-shifts @@ -20,33 +29,15 @@ // The size of a sub-table of BOB_TABLES .const BOB_SUBTABLE_SIZE = BOB_SHIFTS_X*BOB_SHIFTS_Y // BOB charset ID of the next glyph to be added - .label bob_charset_next_id = $e + .label bob_charset_next_id = 9 main: { - .const vicSelectGfxBank1_toDd001_return = 3^(>SCREEN)/$40 - .const toD0181_return = (>BOB_CHARSET)/4&$f - /* - // Display some BOBs - char* screen = SCREEN; - char bob_table_idx = 0; - for(char i:0..7) { - for(char j:0..3) { - screen[0] = (BOB_TABLES+0*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[40] = (BOB_TABLES+1*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[80] = (BOB_TABLES+2*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[1] = (BOB_TABLES+3*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[41] = (BOB_TABLES+4*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[81] = (BOB_TABLES+5*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[2] = (BOB_TABLES+6*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[42] = (BOB_TABLES+7*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[82] = (BOB_TABLES+8*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen += 120; - bob_table_idx++; - } - screen -= (120*4)-3; - } - */ - .label sin_x_idx = 2 - .label sin_y_idx = 3 + .const vicSelectGfxBank1_toDd001_return = 3^(>BOB_SCREEN)/$40 + .const vicSelectGfxBank2_toDd001_return = 3 + .const toD0181_return = >(BOB_SCREEN&$3fff)*4 + .const toD0182_return = (>(SCREEN_BASIC&$3fff)*4)|(>CHARSET_BASIC)/4&$f + .label x = 2 + // Render sine BOBs + .label sin_x_idx = 3 jsr prepareBobs lda #3 sta CIA2_PORT_A_DDR @@ -54,57 +45,152 @@ main: { sta CIA2_PORT_A lda #toD0181_return sta D018 + lda #BOB_SCREEN + sta.z memset.str+1 jsr memset - lda #$49 - sta.z sin_y_idx + lda #0 + sta.z x + // Display a BOB grid + __b1: + ldx #0 + __b2: + lda.z x + asl + clc + adc.z x + asl + asl + stx.z $ff + clc + adc.z $ff + sta.z renderBob.xpos + txa + asl + stx.z $ff + clc + adc.z $ff + asl + asl + asl + clc + adc.z x + tay + jsr renderBob + inx + cpx #4 + bne __b2 + inc.z x + lda #8 + cmp.z x + bne __b1 + b1: + // Wait for space + jsr keyboard_key_pressed + cmp #0 + beq b1 + __b5: + jsr keyboard_key_pressed + cmp #0 + bne __b5 + lda #BOB_SCREEN + sta.z memset.str+1 + jsr memset + ldx #$49 lda #0 sta.z sin_x_idx - __b2: - lda #$ff - cmp RASTER - bne __b2 + __b8: + lda RASTER + cmp #$f8 + bcc __b8 inc BORDERCOL ldy.z sin_x_idx + lda SIN_X_TAB+$15*4,y + sta.z renderBob.xpos + ldy SIN_Y_TAB,x + jsr renderBob + ldy.z sin_x_idx + lda SIN_X_TAB+$13*3,y + sta.z renderBob.xpos + ldy SIN_Y_TAB+$f*1,x + jsr renderBob + ldy.z sin_x_idx + lda SIN_X_TAB+$11*2,y + sta.z renderBob.xpos + ldy SIN_Y_TAB+$11*2,x + jsr renderBob + ldy.z sin_x_idx + lda SIN_X_TAB+$f*1,y + sta.z renderBob.xpos + ldy SIN_Y_TAB+$13*3,x + jsr renderBob + ldy.z sin_x_idx lda SIN_X_TAB,y sta.z renderBob.xpos - ldy.z sin_y_idx - ldx SIN_Y_TAB,y - jsr renderBob - ldy.z sin_x_idx - lda SIN_X_TAB+$f,y - sta.z renderBob.xpos - ldy.z sin_y_idx - ldx SIN_Y_TAB+$b,y - jsr renderBob - ldy.z sin_x_idx - lda SIN_X_TAB+$16,y - sta.z renderBob.xpos - ldy.z sin_y_idx - ldx SIN_Y_TAB+$1e,y + ldy SIN_Y_TAB+$15*4,x jsr renderBob inc.z sin_x_idx - inc.z sin_y_idx + inx dec BORDERCOL - jmp __b2 + jsr keyboard_key_pressed + cmp #0 + bne vicSelectGfxBank2 + jmp __b8 + vicSelectGfxBank2: + lda #3 + sta CIA2_PORT_A_DDR + lda #vicSelectGfxBank2_toDd001_return + sta CIA2_PORT_A + lda #toD0182_return + sta D018 + rts +} +// Determines whether a specific key is currently pressed by accessing the matrix directly +// 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 +keyboard_key_pressed: { + .const colidx = KEY_SPACE&7 + .label rowidx = KEY_SPACE>>3 + jsr keyboard_matrix_read + and keyboard_matrix_col_bitmask+colidx + rts +} +// 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. +// Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write +// leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. +keyboard_matrix_read: { + lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx + sta CIA1_PORT_A + lda CIA1_PORT_B + eor #$ff + rts } // Render a single BOB at a given x/y-position // X-position is 0-151. Each x-position is 2 pixels wide. // Y-position is 0-183. Each y-position is 1 pixel high. -// renderBob(byte zeropage(4) xpos, byte register(X) ypos) +// renderBob(byte zeropage(4) xpos, byte register(Y) ypos) renderBob: { - .label __2 = $a - .label __4 = $a - .label __7 = $e + .label __2 = $d + .label __4 = $d + .label __7 = $c .label xpos = 4 - .label y_offset = $a - .label screen = $a - .label __10 = $c - .label __11 = $a + .label x_char_offset = 9 + .label y_offset = $d + .label screen = $d + .label bob_table_idx = $c + .label __10 = $a + .label __11 = $d lda.z xpos lsr lsr - tay - txa + sta.z x_char_offset + tya lsr lsr lsr @@ -134,19 +220,19 @@ renderBob: { rol.z y_offset+1 clc lda.z __4 - adc #SCREEN + adc #>BOB_SCREEN sta.z __4+1 - tya + lda.z x_char_offset clc adc.z screen sta.z screen bcc !+ inc.z screen+1 !: - txa + tya and #7 asl asl @@ -154,74 +240,85 @@ renderBob: { lda #3 and.z xpos clc - adc.z __7 - tax - lda BOB_TABLES,x + adc.z bob_table_idx + sta.z bob_table_idx + tay + lda BOB_TABLES,y ldy #0 sta (screen),y - lda BOB_TABLES+1*BOB_SUBTABLE_SIZE,x + ldy.z bob_table_idx + lda BOB_TABLES+1*BOB_SUBTABLE_SIZE,y ldy #$28 sta (screen),y - lda BOB_TABLES+2*BOB_SUBTABLE_SIZE,x + ldy.z bob_table_idx + lda BOB_TABLES+2*BOB_SUBTABLE_SIZE,y ldy #$50 sta (screen),y - lda BOB_TABLES+3*BOB_SUBTABLE_SIZE,x + ldy.z bob_table_idx + lda BOB_TABLES+3*BOB_SUBTABLE_SIZE,y ldy #1 sta (screen),y - lda BOB_TABLES+4*BOB_SUBTABLE_SIZE,x + ldy.z bob_table_idx + lda BOB_TABLES+4*BOB_SUBTABLE_SIZE,y ldy #$29 sta (screen),y - lda BOB_TABLES+5*BOB_SUBTABLE_SIZE,x + ldy.z bob_table_idx + lda BOB_TABLES+5*BOB_SUBTABLE_SIZE,y ldy #$51 sta (screen),y - lda BOB_TABLES+6*BOB_SUBTABLE_SIZE,x + ldy.z bob_table_idx + lda BOB_TABLES+6*BOB_SUBTABLE_SIZE,y ldy #2 sta (screen),y - lda BOB_TABLES+7*BOB_SUBTABLE_SIZE,x + ldy.z bob_table_idx + lda BOB_TABLES+7*BOB_SUBTABLE_SIZE,y ldy #$2a sta (screen),y - lda BOB_TABLES+8*BOB_SUBTABLE_SIZE,x + ldy.z bob_table_idx + lda BOB_TABLES+8*BOB_SUBTABLE_SIZE,y ldy #$52 sta (screen),y rts } // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +// memset(void* zeropage(5) str) memset: { - .label str = SCREEN - .const c = 0 - .const num = $3e8 - .label end = str+num + .label end = $d .label dst = 5 - lda #str - sta.z dst+1 - __b1: - lda.z dst+1 - cmp #>end - bne __b2 - lda.z dst - cmp #$3e8 + sta.z end+1 __b2: - lda #c - ldy #0 + lda.z dst+1 + cmp.z end+1 + bne __b3 + lda.z dst + cmp.z end + bne __b3 + rts + __b3: + lda #0 + tay sta (dst),y inc.z dst bne !+ inc.z dst+1 !: - jmp __b1 + jmp __b2 } // Creates the pre-shifted bobs into BOB_CHARSET and populates the BOB_TABLES // Modifies PROTO_BOB by shifting it around prepareBobs: { - .label bob_table = $a + .label bob_table = $d .label shift_y = 2 // Populate charset and tables .label bob_glyph = 5 - .label cell = 8 + .label cell = 7 .label bob_table_idx = 3 .label shift_x = 4 lda #BOB_CHARSET @@ -367,8 +464,8 @@ bobCharsetFindOrAddGlyph: { } // Shift PROTO_BOB right one X pixel shiftProtoBobRight: { - .label carry = 9 - .label i = 8 + .label carry = 8 + .label i = 7 ldy #0 ldx #0 txa @@ -432,6 +529,10 @@ shiftProtoBobDown: { dex jmp __b1 } + // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) + keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f + // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) + keyboard_matrix_col_bitmask: .byte 1, 2, 4, 8, $10, $20, $40, $80 // The prototype BOB (a 3x3 char image with a bob image in the upper 2x2 chars) // The chars are layout as follows with data in chars 0, 1, 3, 4 initially // 0 3 6 diff --git a/src/test/ref/complex/prebob/prebob.cfg b/src/test/ref/complex/prebob/prebob.cfg index e232d6e11..3253a9a2d 100644 --- a/src/test/ref/complex/prebob/prebob.cfg +++ b/src/test/ref/complex/prebob/prebob.cfg @@ -24,249 +24,355 @@ main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 to:main::toD0181 main::toD0181: scope:[main] from main::vicSelectGfxBank1_@1 [9] phi() - to:main::@4 -main::@4: scope:[main] from main::toD0181 + to:main::@10 +main::@10: scope:[main] from main::toD0181 [10] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [11] call memset to:main::@1 -main::@1: scope:[main] from main::@4 main::@7 - [12] (byte) main::sin_y_idx#7 ← phi( main::@4/(byte) $49 main::@7/(byte) main::sin_y_idx#1 ) - [12] (byte) main::sin_x_idx#7 ← phi( main::@4/(byte) 0 main::@7/(byte) main::sin_x_idx#1 ) +main::@1: scope:[main] from main::@10 main::@3 + [12] (byte) main::x#4 ← phi( main::@3/(byte) main::x#1 main::@10/(byte) 0 ) to:main::@2 -main::@2: scope:[main] from main::@1 main::@2 - [13] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 +main::@2: scope:[main] from main::@1 main::@12 + [13] (byte) main::y#2 ← phi( main::@1/(byte) 0 main::@12/(byte) main::y#1 ) + [14] (byte~) main::$30 ← (byte) main::x#4 << (byte) 1 + [15] (byte~) main::$31 ← (byte~) main::$30 + (byte) main::x#4 + [16] (byte~) main::$7 ← (byte~) main::$31 << (byte) 2 + [17] (byte) renderBob::xpos#0 ← (byte~) main::$7 + (byte) main::y#2 + [18] (byte~) main::$33 ← (byte) main::y#2 << (byte) 1 + [19] (byte~) main::$34 ← (byte~) main::$33 + (byte) main::y#2 + [20] (byte~) main::$9 ← (byte~) main::$34 << (byte) 3 + [21] (byte) renderBob::ypos#0 ← (byte~) main::$9 + (byte) main::x#4 + [22] call renderBob + to:main::@12 +main::@12: scope:[main] from main::@2 + [23] (byte) main::y#1 ← ++ (byte) main::y#2 + [24] if((byte) main::y#1!=(byte) 4) goto main::@2 to:main::@3 -main::@3: scope:[main] from main::@2 - [14] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) - [15] (byte) renderBob::xpos#0 ← *((const byte*) SIN_X_TAB + (byte) main::sin_x_idx#7) - [16] (byte) renderBob::ypos#0 ← *((const byte*) SIN_Y_TAB + (byte) main::sin_y_idx#7) - [17] call renderBob +main::@3: scope:[main] from main::@12 + [25] (byte) main::x#1 ← ++ (byte) main::x#4 + [26] if((byte) main::x#1!=(byte) 8) goto main::@1 + to:main::@4 +main::@4: scope:[main] from main::@13 main::@3 + [27] phi() + [28] call keyboard_key_pressed + [29] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + to:main::@13 +main::@13: scope:[main] from main::@4 + [30] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 + [31] if((byte) 0==(byte~) main::$14) goto main::@4 to:main::@5 -main::@5: scope:[main] from main::@3 - [18] (byte) renderBob::xpos#1 ← *((const byte*) SIN_X_TAB+(byte) $f + (byte) main::sin_x_idx#7) - [19] (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB+(byte) $b + (byte) main::sin_y_idx#7) - [20] call renderBob +main::@5: scope:[main] from main::@13 main::@14 + [32] phi() + [33] call keyboard_key_pressed + [34] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 + to:main::@14 +main::@14: scope:[main] from main::@5 + [35] (byte~) main::$16 ← (byte) keyboard_key_pressed::return#3 + [36] if((byte) 0!=(byte~) main::$16) goto main::@5 to:main::@6 -main::@6: scope:[main] from main::@5 - [21] (byte) renderBob::xpos#2 ← *((const byte*) SIN_X_TAB+(byte) $16 + (byte) main::sin_x_idx#7) - [22] (byte) renderBob::ypos#2 ← *((const byte*) SIN_Y_TAB+(byte) $1e + (byte) main::sin_y_idx#7) - [23] call renderBob +main::@6: scope:[main] from main::@14 + [37] phi() + [38] call memset to:main::@7 -main::@7: scope:[main] from main::@6 - [24] (byte) main::sin_x_idx#1 ← ++ (byte) main::sin_x_idx#7 - [25] (byte) main::sin_y_idx#1 ← ++ (byte) main::sin_y_idx#7 - [26] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) - to:main::@1 +main::@7: scope:[main] from main::@20 main::@6 + [39] (byte) main::sin_y_idx#9 ← phi( main::@6/(byte) $49 main::@20/(byte) main::sin_y_idx#1 ) + [39] (byte) main::sin_x_idx#9 ← phi( main::@6/(byte) 0 main::@20/(byte) main::sin_x_idx#1 ) + to:main::@8 +main::@8: scope:[main] from main::@7 main::@8 + [40] if(*((const byte*) RASTER)<(byte) $f8) goto main::@8 + to:main::@9 +main::@9: scope:[main] from main::@8 + [41] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) + [42] (byte) renderBob::xpos#1 ← *((const byte*) SIN_X_TAB+(byte)(number) $15*(number) 4 + (byte) main::sin_x_idx#9) + [43] (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB + (byte) main::sin_y_idx#9) + [44] call renderBob + to:main::@15 +main::@15: scope:[main] from main::@9 + [45] (byte) renderBob::xpos#2 ← *((const byte*) SIN_X_TAB+(byte)(number) $13*(number) 3 + (byte) main::sin_x_idx#9) + [46] (byte) renderBob::ypos#2 ← *((const byte*) SIN_Y_TAB+(byte)(number) $f*(number) 1 + (byte) main::sin_y_idx#9) + [47] call renderBob + to:main::@16 +main::@16: scope:[main] from main::@15 + [48] (byte) renderBob::xpos#3 ← *((const byte*) SIN_X_TAB+(byte)(number) $11*(number) 2 + (byte) main::sin_x_idx#9) + [49] (byte) renderBob::ypos#3 ← *((const byte*) SIN_Y_TAB+(byte)(number) $11*(number) 2 + (byte) main::sin_y_idx#9) + [50] call renderBob + to:main::@17 +main::@17: scope:[main] from main::@16 + [51] (byte) renderBob::xpos#4 ← *((const byte*) SIN_X_TAB+(byte)(number) $f*(number) 1 + (byte) main::sin_x_idx#9) + [52] (byte) renderBob::ypos#4 ← *((const byte*) SIN_Y_TAB+(byte)(number) $13*(number) 3 + (byte) main::sin_y_idx#9) + [53] call renderBob + to:main::@18 +main::@18: scope:[main] from main::@17 + [54] (byte) renderBob::xpos#5 ← *((const byte*) SIN_X_TAB + (byte) main::sin_x_idx#9) + [55] (byte) renderBob::ypos#5 ← *((const byte*) SIN_Y_TAB+(byte)(number) $15*(number) 4 + (byte) main::sin_y_idx#9) + [56] call renderBob + to:main::@19 +main::@19: scope:[main] from main::@18 + [57] (byte) main::sin_x_idx#1 ← ++ (byte) main::sin_x_idx#9 + [58] (byte) main::sin_y_idx#1 ← ++ (byte) main::sin_y_idx#9 + [59] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) + [60] call keyboard_key_pressed + [61] (byte) keyboard_key_pressed::return#4 ← (byte) keyboard_key_pressed::return#0 + to:main::@20 +main::@20: scope:[main] from main::@19 + [62] (byte~) main::$25 ← (byte) keyboard_key_pressed::return#4 + [63] if((byte) 0!=(byte~) main::$25) goto main::vicSelectGfxBank2 + to:main::@7 +main::vicSelectGfxBank2: scope:[main] from main::@20 + [64] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 + to:main::vicSelectGfxBank2_toDd001 +main::vicSelectGfxBank2_toDd001: scope:[main] from main::vicSelectGfxBank2 + [65] phi() + to:main::vicSelectGfxBank2_@1 +main::vicSelectGfxBank2_@1: scope:[main] from main::vicSelectGfxBank2_toDd001 + [66] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 + to:main::toD0182 +main::toD0182: scope:[main] from main::vicSelectGfxBank2_@1 + [67] phi() + to:main::@11 +main::@11: scope:[main] from main::toD0182 + [68] *((const byte*) D018) ← (const byte) main::toD0182_return#0 + to:main::@return +main::@return: scope:[main] from main::@11 + [69] return + to:@return + +(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) +keyboard_key_pressed: scope:[keyboard_key_pressed] from main::@19 main::@4 main::@5 + [70] phi() + [71] call keyboard_matrix_read + [72] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + to:keyboard_key_pressed::@1 +keyboard_key_pressed::@1: scope:[keyboard_key_pressed] from keyboard_key_pressed + [73] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 + [74] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask+(const byte) keyboard_key_pressed::colidx#0) + to:keyboard_key_pressed::@return +keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_pressed::@1 + [75] return + to:@return + +(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) +keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed + [76] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [77] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) + to:keyboard_matrix_read::@return +keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read + [78] return + to:@return (void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos) -renderBob: scope:[renderBob] from main::@3 main::@5 main::@6 - [27] (byte) renderBob::ypos#3 ← phi( main::@5/(byte) renderBob::ypos#1 main::@6/(byte) renderBob::ypos#2 main::@3/(byte) renderBob::ypos#0 ) - [27] (byte) renderBob::xpos#3 ← phi( main::@5/(byte) renderBob::xpos#1 main::@6/(byte) renderBob::xpos#2 main::@3/(byte) renderBob::xpos#0 ) - [28] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#3 >> (byte) 2 - [29] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#3 >> (byte) 3 - [30] (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 - [31] (word~) renderBob::$10 ← (word~) renderBob::$2 << (byte) 2 - [32] (word~) renderBob::$11 ← (word~) renderBob::$10 + (word~) renderBob::$2 - [33] (word) renderBob::y_offset#0 ← (word~) renderBob::$11 << (byte) 3 - [34] (byte*~) renderBob::$4 ← (const byte*) SCREEN + (word) renderBob::y_offset#0 - [35] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 - [36] (byte~) renderBob::$6 ← (byte) renderBob::ypos#3 & (byte) 7 - [37] (byte~) renderBob::$7 ← (byte~) renderBob::$6 << (byte) 2 - [38] (byte~) renderBob::$8 ← (byte) renderBob::xpos#3 & (byte) 3 - [39] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 - [40] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) - [41] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [42] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [43] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [44] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [45] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [46] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [47] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [48] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) +renderBob: scope:[renderBob] from main::@15 main::@16 main::@17 main::@18 main::@2 main::@9 + [79] (byte) renderBob::ypos#6 ← phi( main::@2/(byte) renderBob::ypos#0 main::@9/(byte) renderBob::ypos#1 main::@15/(byte) renderBob::ypos#2 main::@16/(byte) renderBob::ypos#3 main::@17/(byte) renderBob::ypos#4 main::@18/(byte) renderBob::ypos#5 ) + [79] (byte) renderBob::xpos#6 ← phi( main::@2/(byte) renderBob::xpos#0 main::@9/(byte) renderBob::xpos#1 main::@15/(byte) renderBob::xpos#2 main::@16/(byte) renderBob::xpos#3 main::@17/(byte) renderBob::xpos#4 main::@18/(byte) renderBob::xpos#5 ) + [80] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#6 >> (byte) 2 + [81] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#6 >> (byte) 3 + [82] (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 + [83] (word~) renderBob::$10 ← (word~) renderBob::$2 << (byte) 2 + [84] (word~) renderBob::$11 ← (word~) renderBob::$10 + (word~) renderBob::$2 + [85] (word) renderBob::y_offset#0 ← (word~) renderBob::$11 << (byte) 3 + [86] (byte*~) renderBob::$4 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 + [87] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 + [88] (byte~) renderBob::$6 ← (byte) renderBob::ypos#6 & (byte) 7 + [89] (byte~) renderBob::$7 ← (byte~) renderBob::$6 << (byte) 2 + [90] (byte~) renderBob::$8 ← (byte) renderBob::xpos#6 & (byte) 3 + [91] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 + [92] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) + [93] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [94] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [95] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [96] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [97] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [98] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [99] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [100] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) to:renderBob::@return renderBob::@return: scope:[renderBob] from renderBob - [49] return + [101] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) -memset: scope:[memset] from main::@4 - [50] phi() +memset: scope:[memset] from main::@10 main::@6 + [102] (void*) memset::str#3 ← phi( main::@6/(void*)(const byte*) BOB_SCREEN main::@10/(void*)(const byte*) BOB_SCREEN ) to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [51] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [52] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset + [103] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 + [104] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + to:memset::@2 +memset::@2: scope:[memset] from memset::@1 memset::@3 + [105] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [106] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 to:memset::@return -memset::@return: scope:[memset] from memset::@1 - [53] return +memset::@return: scope:[memset] from memset::@2 + [107] return to:@return -memset::@2: scope:[memset] from memset::@1 - [54] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [55] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 +memset::@3: scope:[memset] from memset::@2 + [108] *((byte*) memset::dst#2) ← (byte) 0 + [109] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + to:memset::@2 (void()) prepareBobs() prepareBobs: scope:[prepareBobs] from main - [56] phi() - [57] call bobCharsetFindOrAddGlyph + [110] phi() + [111] call bobCharsetFindOrAddGlyph to:prepareBobs::@1 prepareBobs::@1: scope:[prepareBobs] from prepareBobs prepareBobs::@8 - [58] (byte) prepareBobs::bob_table_idx#6 ← phi( prepareBobs/(byte) 0 prepareBobs::@8/(byte) prepareBobs::bob_table_idx#12 ) - [58] (byte) bob_charset_next_id#14 ← phi( prepareBobs/(byte) bob_charset_next_id#16 prepareBobs::@8/(byte) bob_charset_next_id#30 ) - [58] (byte) prepareBobs::shift_y#2 ← phi( prepareBobs/(byte) 0 prepareBobs::@8/(byte) prepareBobs::shift_y#1 ) - [59] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 + [112] (byte) prepareBobs::bob_table_idx#6 ← phi( prepareBobs/(byte) 0 prepareBobs::@8/(byte) prepareBobs::bob_table_idx#12 ) + [112] (byte) bob_charset_next_id#14 ← phi( prepareBobs/(byte) bob_charset_next_id#16 prepareBobs::@8/(byte) bob_charset_next_id#29 ) + [112] (byte) prepareBobs::shift_y#2 ← phi( prepareBobs/(byte) 0 prepareBobs::@8/(byte) prepareBobs::shift_y#1 ) + [113] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 to:prepareBobs::@return prepareBobs::@return: scope:[prepareBobs] from prepareBobs::@1 - [60] return + [114] return to:@return prepareBobs::@2: scope:[prepareBobs] from prepareBobs::@1 prepareBobs::@11 - [61] (byte) bob_charset_next_id#30 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#14 prepareBobs::@11/(byte) bob_charset_next_id#21 ) - [61] (byte) prepareBobs::bob_table_idx#12 ← phi( prepareBobs::@1/(byte) prepareBobs::bob_table_idx#6 prepareBobs::@11/(byte) prepareBobs::bob_table_idx#1 ) - [61] (byte) prepareBobs::shift_x#2 ← phi( prepareBobs::@1/(byte) 0 prepareBobs::@11/(byte) prepareBobs::shift_x#1 ) - [62] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 + [115] (byte) bob_charset_next_id#29 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#14 prepareBobs::@11/(byte) bob_charset_next_id#21 ) + [115] (byte) prepareBobs::bob_table_idx#12 ← phi( prepareBobs::@1/(byte) prepareBobs::bob_table_idx#6 prepareBobs::@11/(byte) prepareBobs::bob_table_idx#1 ) + [115] (byte) prepareBobs::shift_x#2 ← phi( prepareBobs::@1/(byte) 0 prepareBobs::@11/(byte) prepareBobs::shift_x#1 ) + [116] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 to:prepareBobs::@4 prepareBobs::@4: scope:[prepareBobs] from prepareBobs::@2 - [63] phi() - [64] call shiftProtoBobDown + [117] phi() + [118] call shiftProtoBobDown to:prepareBobs::@8 prepareBobs::@8: scope:[prepareBobs] from prepareBobs::@4 - [65] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 + [119] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 to:prepareBobs::@1 prepareBobs::@3: scope:[prepareBobs] from prepareBobs::@2 - [66] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 + [120] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 to:prepareBobs::@5 prepareBobs::@5: scope:[prepareBobs] from prepareBobs::@3 prepareBobs::@9 - [67] (byte*) prepareBobs::bob_table#2 ← phi( prepareBobs::@9/(byte*) prepareBobs::bob_table#1 prepareBobs::@3/(byte*) prepareBobs::bob_table#0 ) - [67] (byte) bob_charset_next_id#21 ← phi( prepareBobs::@9/(byte) bob_charset_next_id#16 prepareBobs::@3/(byte) bob_charset_next_id#30 ) - [67] (byte*) prepareBobs::bob_glyph#2 ← phi( prepareBobs::@9/(byte*) prepareBobs::bob_glyph#1 prepareBobs::@3/(const byte*) PROTO_BOB ) - [67] (byte) prepareBobs::cell#2 ← phi( prepareBobs::@9/(byte) prepareBobs::cell#1 prepareBobs::@3/(byte) 0 ) - [68] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 + [121] (byte*) prepareBobs::bob_table#2 ← phi( prepareBobs::@9/(byte*) prepareBobs::bob_table#1 prepareBobs::@3/(byte*) prepareBobs::bob_table#0 ) + [121] (byte) bob_charset_next_id#21 ← phi( prepareBobs::@9/(byte) bob_charset_next_id#16 prepareBobs::@3/(byte) bob_charset_next_id#29 ) + [121] (byte*) prepareBobs::bob_glyph#2 ← phi( prepareBobs::@9/(byte*) prepareBobs::bob_glyph#1 prepareBobs::@3/(const byte*) PROTO_BOB ) + [121] (byte) prepareBobs::cell#2 ← phi( prepareBobs::@9/(byte) prepareBobs::cell#1 prepareBobs::@3/(byte) 0 ) + [122] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 to:prepareBobs::@7 prepareBobs::@7: scope:[prepareBobs] from prepareBobs::@5 - [69] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 - [70] call shiftProtoBobRight + [123] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 + [124] call shiftProtoBobRight to:prepareBobs::@10 prepareBobs::@10: scope:[prepareBobs] from prepareBobs::@7 - [71] phi() - [72] call shiftProtoBobRight + [125] phi() + [126] call shiftProtoBobRight to:prepareBobs::@11 prepareBobs::@11: scope:[prepareBobs] from prepareBobs::@10 - [73] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 + [127] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 to:prepareBobs::@2 prepareBobs::@6: scope:[prepareBobs] from prepareBobs::@5 - [74] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 - [75] call bobCharsetFindOrAddGlyph - [76] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 + [128] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + [129] call bobCharsetFindOrAddGlyph + [130] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 to:prepareBobs::@9 prepareBobs::@9: scope:[prepareBobs] from prepareBobs::@6 - [77] (byte~) prepareBobs::$5 ← (byte) bobCharsetFindOrAddGlyph::return#1 - [78] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$5 - [79] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 - [80] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y - [81] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 + [131] (byte~) prepareBobs::$5 ← (byte) bobCharsetFindOrAddGlyph::return#1 + [132] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$5 + [133] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 + [134] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y + [135] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 to:prepareBobs::@5 (byte()) bobCharsetFindOrAddGlyph((byte*) bobCharsetFindOrAddGlyph::bob_glyph) bobCharsetFindOrAddGlyph: scope:[bobCharsetFindOrAddGlyph] from prepareBobs prepareBobs::@6 - [82] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 ← phi( prepareBobs/(const byte*) PROTO_BOB+(byte) $30 prepareBobs::@6/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ) - [82] (byte) bob_charset_next_id#23 ← phi( prepareBobs/(byte) 0 prepareBobs::@6/(byte) bob_charset_next_id#21 ) + [136] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 ← phi( prepareBobs/(const byte*) PROTO_BOB+(byte) $30 prepareBobs::@6/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ) + [136] (byte) bob_charset_next_id#23 ← phi( prepareBobs/(byte) 0 prepareBobs::@6/(byte) bob_charset_next_id#21 ) to:bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@1: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph bobCharsetFindOrAddGlyph::@6 - [83] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 ← phi( bobCharsetFindOrAddGlyph/(const byte*) BOB_CHARSET bobCharsetFindOrAddGlyph::@6/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ) - [83] (byte) bobCharsetFindOrAddGlyph::glyph_id#11 ← phi( bobCharsetFindOrAddGlyph/(byte) 0 bobCharsetFindOrAddGlyph::@6/(byte) bobCharsetFindOrAddGlyph::glyph_id#1 ) - [84] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 + [137] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 ← phi( bobCharsetFindOrAddGlyph/(const byte*) BOB_CHARSET bobCharsetFindOrAddGlyph::@6/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ) + [137] (byte) bobCharsetFindOrAddGlyph::glyph_id#11 ← phi( bobCharsetFindOrAddGlyph/(byte) 0 bobCharsetFindOrAddGlyph::@6/(byte) bobCharsetFindOrAddGlyph::glyph_id#1 ) + [138] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 to:bobCharsetFindOrAddGlyph::@7 bobCharsetFindOrAddGlyph::@7: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@8 - [85] (byte) bobCharsetFindOrAddGlyph::i1#2 ← phi( bobCharsetFindOrAddGlyph::@8/(byte) bobCharsetFindOrAddGlyph::i1#1 bobCharsetFindOrAddGlyph::@1/(byte) 0 ) - [86] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 + [139] (byte) bobCharsetFindOrAddGlyph::i1#2 ← phi( bobCharsetFindOrAddGlyph::@8/(byte) bobCharsetFindOrAddGlyph::i1#1 bobCharsetFindOrAddGlyph::@1/(byte) 0 ) + [140] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 to:bobCharsetFindOrAddGlyph::@9 bobCharsetFindOrAddGlyph::@9: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@7 - [87] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 + [141] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 to:bobCharsetFindOrAddGlyph::@return bobCharsetFindOrAddGlyph::@return: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 - [88] (byte) bob_charset_next_id#16 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#23 bobCharsetFindOrAddGlyph::@9/(byte) bob_charset_next_id#8 ) - [89] return + [142] (byte) bob_charset_next_id#16 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#23 bobCharsetFindOrAddGlyph::@9/(byte) bob_charset_next_id#8 ) + [143] return to:@return bobCharsetFindOrAddGlyph::@8: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@7 - [90] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) - [91] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 + [144] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) + [145] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 to:bobCharsetFindOrAddGlyph::@7 bobCharsetFindOrAddGlyph::@2: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@4 - [92] (byte) bobCharsetFindOrAddGlyph::i#2 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) 0 bobCharsetFindOrAddGlyph::@4/(byte) bobCharsetFindOrAddGlyph::i#1 ) - [93] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 + [146] (byte) bobCharsetFindOrAddGlyph::i#2 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) 0 bobCharsetFindOrAddGlyph::@4/(byte) bobCharsetFindOrAddGlyph::i#1 ) + [147] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 to:bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@3: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@2 - [94] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 + [148] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 to:bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@5: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@2 bobCharsetFindOrAddGlyph::@3 - [95] (byte) bobCharsetFindOrAddGlyph::found#2 ← phi( bobCharsetFindOrAddGlyph::@3/(byte) 0 bobCharsetFindOrAddGlyph::@2/(byte) 1 ) - [96] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 + [149] (byte) bobCharsetFindOrAddGlyph::found#2 ← phi( bobCharsetFindOrAddGlyph::@3/(byte) 0 bobCharsetFindOrAddGlyph::@2/(byte) 1 ) + [150] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 to:bobCharsetFindOrAddGlyph::@return bobCharsetFindOrAddGlyph::@6: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@5 - [97] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 - [98] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 + [151] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 + [152] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 to:bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@4: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@3 - [99] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 + [153] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 to:bobCharsetFindOrAddGlyph::@2 (void()) shiftProtoBobRight() shiftProtoBobRight: scope:[shiftProtoBobRight] from prepareBobs::@10 prepareBobs::@7 - [100] phi() + [154] phi() to:shiftProtoBobRight::@1 shiftProtoBobRight::@1: scope:[shiftProtoBobRight] from shiftProtoBobRight shiftProtoBobRight::@6 - [101] (byte) shiftProtoBobRight::carry#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::carry#10 ) - [101] (byte) shiftProtoBobRight::j#3 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::j#10 ) - [101] (byte) shiftProtoBobRight::i#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::i#1 ) - [102] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 + [155] (byte) shiftProtoBobRight::carry#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::carry#10 ) + [155] (byte) shiftProtoBobRight::j#3 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::j#10 ) + [155] (byte) shiftProtoBobRight::i#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::i#1 ) + [156] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 to:shiftProtoBobRight::@return shiftProtoBobRight::@return: scope:[shiftProtoBobRight] from shiftProtoBobRight::@1 - [103] return + [157] return to:@return shiftProtoBobRight::@2: scope:[shiftProtoBobRight] from shiftProtoBobRight::@1 - [104] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 - [105] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 + [158] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 + [159] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 to:shiftProtoBobRight::@4 shiftProtoBobRight::@3: scope:[shiftProtoBobRight] from shiftProtoBobRight::@2 - [106] phi() + [160] phi() to:shiftProtoBobRight::@4 shiftProtoBobRight::@4: scope:[shiftProtoBobRight] from shiftProtoBobRight::@2 shiftProtoBobRight::@3 - [107] (byte) shiftProtoBobRight::carry#1 ← phi( shiftProtoBobRight::@3/(byte) $80 shiftProtoBobRight::@2/(byte) 0 ) - [108] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 - [109] (byte~) shiftProtoBobRight::$6 ← (byte~) shiftProtoBobRight::$5 | (byte) shiftProtoBobRight::carry#2 - [110] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 - [111] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 + [161] (byte) shiftProtoBobRight::carry#1 ← phi( shiftProtoBobRight::@3/(byte) $80 shiftProtoBobRight::@2/(byte) 0 ) + [162] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 + [163] (byte~) shiftProtoBobRight::$6 ← (byte~) shiftProtoBobRight::$5 | (byte) shiftProtoBobRight::carry#2 + [164] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 + [165] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 to:shiftProtoBobRight::@7 shiftProtoBobRight::@7: scope:[shiftProtoBobRight] from shiftProtoBobRight::@4 - [112] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 + [166] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 to:shiftProtoBobRight::@6 shiftProtoBobRight::@6: scope:[shiftProtoBobRight] from shiftProtoBobRight::@5 shiftProtoBobRight::@7 - [113] (byte) shiftProtoBobRight::j#10 ← phi( shiftProtoBobRight::@7/(byte) shiftProtoBobRight::j#2 shiftProtoBobRight::@5/(byte) shiftProtoBobRight::j#1 ) - [114] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 - [115] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 + [167] (byte) shiftProtoBobRight::j#10 ← phi( shiftProtoBobRight::@7/(byte) shiftProtoBobRight::j#2 shiftProtoBobRight::@5/(byte) shiftProtoBobRight::j#1 ) + [168] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 + [169] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 to:shiftProtoBobRight::@1 shiftProtoBobRight::@5: scope:[shiftProtoBobRight] from shiftProtoBobRight::@4 - [116] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f + [170] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f to:shiftProtoBobRight::@6 (void()) shiftProtoBobDown() shiftProtoBobDown: scope:[shiftProtoBobDown] from prepareBobs::@4 - [117] phi() + [171] phi() to:shiftProtoBobDown::@1 shiftProtoBobDown::@1: scope:[shiftProtoBobDown] from shiftProtoBobDown shiftProtoBobDown::@2 - [118] (byte) shiftProtoBobDown::i#2 ← phi( shiftProtoBobDown/(byte) $17 shiftProtoBobDown::@2/(byte) shiftProtoBobDown::i#1 ) - [119] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 + [172] (byte) shiftProtoBobDown::i#2 ← phi( shiftProtoBobDown/(byte) $17 shiftProtoBobDown::@2/(byte) shiftProtoBobDown::i#1 ) + [173] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 to:shiftProtoBobDown::@3 shiftProtoBobDown::@3: scope:[shiftProtoBobDown] from shiftProtoBobDown::@1 - [120] *((const byte*) PROTO_BOB) ← (byte) 0 - [121] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 - [122] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 + [174] *((const byte*) PROTO_BOB) ← (byte) 0 + [175] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 + [176] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 to:shiftProtoBobDown::@return shiftProtoBobDown::@return: scope:[shiftProtoBobDown] from shiftProtoBobDown::@3 - [123] return + [177] return to:@return shiftProtoBobDown::@2: scope:[shiftProtoBobDown] from shiftProtoBobDown::@1 - [124] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) - [125] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) - [126] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 - [127] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 + [178] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) + [179] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) + [180] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 + [181] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 to:shiftProtoBobDown::@1 diff --git a/src/test/ref/complex/prebob/prebob.log b/src/test/ref/complex/prebob/prebob.log index 69c769b80..eeaa11edd 100644 --- a/src/test/ref/complex/prebob/prebob.log +++ b/src/test/ref/complex/prebob/prebob.log @@ -1,10 +1,26 @@ Resolved forward reference bob_charset_next_id to (byte) bob_charset_next_id +Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6 +Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1 +Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1 +Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) +Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean condition (byte~) main::$16 Warning! Adding boolean cast to non-boolean condition (number~) shiftProtoBobRight::$1 +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean sub-expression (byte~) main::$14 +Warning! Adding boolean cast to non-boolean sub-expression (byte~) main::$25 Warning! Adding boolean cast to non-boolean sub-expression (byte) bobCharsetFindOrAddGlyph::found +Identified constant variable (byte*) HEAP_TOP Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx -Inlined call call vicSelectGfxBank (const byte*) SCREEN -Inlined call (byte~) main::$2 ← call toD018 (const byte*) SCREEN (const byte*) BOB_CHARSET +Inlined call call vicSelectGfxBank (const byte*) BOB_SCREEN +Inlined call (byte~) main::$2 ← call toD018 (const byte*) BOB_SCREEN (const byte*) BOB_CHARSET +Inlined call call vicSelectGfxBank (const byte*) SCREEN_BASIC +Inlined call (byte~) main::$6 ← call toD018 (const byte*) SCREEN_BASIC (const byte*) CHARSET_BASIC Culled Empty Block (label) @1 Culled Empty Block (label) @2 Culled Empty Block (label) @3 @@ -18,16 +34,75 @@ Culled Empty Block (label) memset::@9 Culled Empty Block (label) memset::@3 Culled Empty Block (label) @7 Culled Empty Block (label) @8 +Culled Empty Block (label) @9 +Culled Empty Block (label) keyboard_matrix_read::@1 +Culled Empty Block (label) @10 +Culled Empty Block (label) keyboard_key_pressed::@1 +Culled Empty Block (label) @11 +Culled Empty Block (label) @12 +Culled Empty Block (label) @13 +Culled Empty Block (label) @14 +Culled Empty Block (label) @15 +Culled Empty Block (label) @16 +Culled Empty Block (label) @17 +Culled Empty Block (label) @18 +Culled Empty Block (label) @19 +Culled Empty Block (label) @20 +Culled Empty Block (label) @21 +Culled Empty Block (label) @22 +Culled Empty Block (label) @23 +Culled Empty Block (label) @24 +Culled Empty Block (label) @25 +Culled Empty Block (label) @26 +Culled Empty Block (label) @27 +Culled Empty Block (label) @28 +Culled Empty Block (label) @29 +Culled Empty Block (label) @30 +Culled Empty Block (label) @31 +Culled Empty Block (label) @32 +Culled Empty Block (label) @33 +Culled Empty Block (label) @34 +Culled Empty Block (label) @35 +Culled Empty Block (label) @36 +Culled Empty Block (label) @37 +Culled Empty Block (label) @38 +Culled Empty Block (label) @39 +Culled Empty Block (label) @40 +Culled Empty Block (label) @41 +Culled Empty Block (label) @42 +Culled Empty Block (label) @43 +Culled Empty Block (label) @44 +Culled Empty Block (label) @45 +Culled Empty Block (label) @46 +Culled Empty Block (label) @47 +Culled Empty Block (label) @48 +Culled Empty Block (label) @49 Culled Empty Block (label) main::vicSelectGfxBank1_toDd001_@1 Culled Empty Block (label) main::vicSelectGfxBank1_@return Culled Empty Block (label) main::toD0181_@1 -Culled Empty Block (label) main::@2 -Culled Empty Block (label) main::@7 -Culled Empty Block (label) main::@3 -Culled Empty Block (label) main::@8 +Culled Empty Block (label) main::@4 Culled Empty Block (label) main::@6 -Culled Empty Block (label) @9 -Culled Empty Block (label) @10 +Culled Empty Block (label) main::@8 +Culled Empty Block (label) main::@7 +Culled Empty Block (label) main::@9 +Culled Empty Block (label) main::@10 +Culled Empty Block (label) main::@12 +Culled Empty Block (label) main::@14 +Culled Empty Block (label) main::@15 +Culled Empty Block (label) main::@16 +Culled Empty Block (label) main::@18 +Culled Empty Block (label) main::@26 +Culled Empty Block (label) main::@19 +Culled Empty Block (label) main::@27 +Culled Empty Block (label) main::@24 +Culled Empty Block (label) main::@22 +Culled Empty Block (label) main::vicSelectGfxBank2_toDd001_@1 +Culled Empty Block (label) main::vicSelectGfxBank2_@return +Culled Empty Block (label) main::toD0182_@1 +Culled Empty Block (label) main::@23 +Culled Empty Block (label) main::@28 +Culled Empty Block (label) @50 +Culled Empty Block (label) @51 Culled Empty Block (label) prepareBobs::@17 Culled Empty Block (label) prepareBobs::@3 Culled Empty Block (label) prepareBobs::@18 @@ -38,7 +113,7 @@ Culled Empty Block (label) prepareBobs::@11 Culled Empty Block (label) prepareBobs::@12 Culled Empty Block (label) prepareBobs::@13 Culled Empty Block (label) prepareBobs::@16 -Culled Empty Block (label) @11 +Culled Empty Block (label) @52 Culled Empty Block (label) shiftProtoBobRight::@9 Culled Empty Block (label) shiftProtoBobRight::@3 Culled Empty Block (label) shiftProtoBobRight::@10 @@ -46,7 +121,7 @@ Culled Empty Block (label) shiftProtoBobRight::@11 Culled Empty Block (label) shiftProtoBobRight::@12 Culled Empty Block (label) shiftProtoBobRight::@14 Culled Empty Block (label) shiftProtoBobRight::@15 -Culled Empty Block (label) @12 +Culled Empty Block (label) @53 Culled Empty Block (label) shiftProtoBobDown::@4 Culled Empty Block (label) shiftProtoBobDown::@5 Culled Empty Block (label) shiftProtoBobDown::@6 @@ -66,70 +141,108 @@ Culled Empty Block (label) bobCharsetFindOrAddGlyph::@26 CONTROL FLOW GRAPH SSA @begin: scope:[] from - to:@13 + to:@54 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) -memset: scope:[memset] from main::@10 - (byte) memset::c#4 ← phi( main::@10/(byte) memset::c#0 ) - (void*) memset::str#3 ← phi( main::@10/(void*) memset::str#0 ) - (word) memset::num#1 ← phi( main::@10/(word) memset::num#0 ) - (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +memset: scope:[memset] from main::@13 main::@30 + (byte) memset::c#5 ← phi( main::@13/(byte) memset::c#1 main::@30/(byte) memset::c#0 ) + (void*) memset::str#4 ← phi( main::@13/(void*) memset::str#1 main::@30/(void*) memset::str#0 ) + (word) memset::num#2 ← phi( main::@13/(word) memset::num#1 main::@30/(word) memset::num#0 ) + (bool~) memset::$0 ← (word) memset::num#2 > (number) 0 (bool~) memset::$1 ← ! (bool~) memset::$0 if((bool~) memset::$1) goto memset::@1 to:memset::@2 memset::@1: scope:[memset] from memset memset::@4 - (void*) memset::str#1 ← phi( memset/(void*) memset::str#3 memset::@4/(void*) memset::str#4 ) - (void*) memset::return#0 ← (void*) memset::str#1 + (void*) memset::str#2 ← phi( memset/(void*) memset::str#4 memset::@4/(void*) memset::str#5 ) + (void*) memset::return#0 ← (void*) memset::str#2 to:memset::@return memset::@2: scope:[memset] from memset - (byte) memset::c#3 ← phi( memset/(byte) memset::c#4 ) - (word) memset::num#2 ← phi( memset/(word) memset::num#1 ) - (void*) memset::str#2 ← phi( memset/(void*) memset::str#3 ) - (byte*~) memset::$2 ← ((byte*)) (void*) memset::str#2 - (byte*~) memset::$3 ← (byte*~) memset::$2 + (word) memset::num#2 + (byte) memset::c#4 ← phi( memset/(byte) memset::c#5 ) + (word) memset::num#3 ← phi( memset/(word) memset::num#2 ) + (void*) memset::str#3 ← phi( memset/(void*) memset::str#4 ) + (byte*~) memset::$2 ← ((byte*)) (void*) memset::str#3 + (byte*~) memset::$3 ← (byte*~) memset::$2 + (word) memset::num#3 (byte*) memset::end#0 ← (byte*~) memset::$3 - (byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#2 + (byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#3 to:memset::@4 memset::@4: scope:[memset] from memset::@2 memset::@5 - (byte) memset::c#2 ← phi( memset::@2/(byte) memset::c#3 memset::@5/(byte) memset::c#1 ) - (void*) memset::str#4 ← phi( memset::@2/(void*) memset::str#2 memset::@5/(void*) memset::str#5 ) + (byte) memset::c#3 ← phi( memset::@2/(byte) memset::c#4 memset::@5/(byte) memset::c#2 ) + (void*) memset::str#5 ← phi( memset::@2/(void*) memset::str#3 memset::@5/(void*) memset::str#6 ) (byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@5/(byte*) memset::end#2 ) (byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@5/(byte*) memset::dst#1 ) (bool~) memset::$4 ← (byte*) memset::dst#2 != (byte*) memset::end#1 if((bool~) memset::$4) goto memset::@5 to:memset::@1 memset::@5: scope:[memset] from memset::@4 - (void*) memset::str#5 ← phi( memset::@4/(void*) memset::str#4 ) + (void*) memset::str#6 ← phi( memset::@4/(void*) memset::str#5 ) (byte*) memset::end#2 ← phi( memset::@4/(byte*) memset::end#1 ) (byte*) memset::dst#3 ← phi( memset::@4/(byte*) memset::dst#2 ) - (byte) memset::c#1 ← phi( memset::@4/(byte) memset::c#2 ) - *((byte*) memset::dst#3) ← (byte) memset::c#1 + (byte) memset::c#2 ← phi( memset::@4/(byte) memset::c#3 ) + *((byte*) memset::dst#3) ← (byte) memset::c#2 (byte*) memset::dst#1 ← ++ (byte*) memset::dst#3 to:memset::@4 memset::@return: scope:[memset] from memset::@1 - (void*) memset::return#3 ← phi( memset::@1/(void*) memset::return#0 ) - (void*) memset::return#1 ← (void*) memset::return#3 + (void*) memset::return#4 ← phi( memset::@1/(void*) memset::return#0 ) + (void*) memset::return#1 ← (void*) memset::return#4 + return + to:@return + +(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) +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 ) + *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) + (byte~) keyboard_matrix_read::$0 ← ~ *((const byte*) CIA1_PORT_B) + (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 + +(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) +keyboard_key_pressed: scope:[keyboard_key_pressed] from main::@11 main::@43 main::@5 + (byte) keyboard_key_pressed::key#3 ← phi( main::@11/(byte) keyboard_key_pressed::key#1 main::@43/(byte) keyboard_key_pressed::key#2 main::@5/(byte) keyboard_key_pressed::key#0 ) + (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#3 & (number) 7 + (byte) keyboard_key_pressed::colidx#0 ← (number~) keyboard_key_pressed::$0 + (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_key_pressed::key#3 >> (number) 3 + (byte) keyboard_key_pressed::rowidx#0 ← (byte~) keyboard_key_pressed::$1 + (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::rowidx#0 + call keyboard_matrix_read + (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::colidx#1 ← phi( keyboard_key_pressed/(byte) keyboard_key_pressed::colidx#0 ) + (byte) keyboard_matrix_read::return#4 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::return#2 ) + (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#4 + (byte~) keyboard_key_pressed::$3 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_key_pressed::colidx#1) + (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#5 ← phi( keyboard_key_pressed::@2/(byte) keyboard_key_pressed::return#0 ) + (byte) keyboard_key_pressed::return#1 ← (byte) keyboard_key_pressed::return#5 return to:@return (void()) main() -main: scope:[main] from @14 - (byte) bob_charset_next_id#19 ← phi( @14/(byte) bob_charset_next_id#27 ) +main: scope:[main] from @55 + (byte) bob_charset_next_id#19 ← phi( @55/(byte) bob_charset_next_id#27 ) call prepareBobs - to:main::@11 -main::@11: scope:[main] from main + to:main::@33 +main::@33: scope:[main] from main (byte) bob_charset_next_id#10 ← phi( main/(byte) bob_charset_next_id#5 ) (byte) bob_charset_next_id#0 ← (byte) bob_charset_next_id#10 - (byte*) main::vicSelectGfxBank1_gfx#0 ← (const byte*) SCREEN + (byte*) main::vicSelectGfxBank1_gfx#0 ← (const byte*) BOB_SCREEN to:main::vicSelectGfxBank1 -main::vicSelectGfxBank1: scope:[main] from main::@11 - (byte) bob_charset_next_id#58 ← phi( main::@11/(byte) bob_charset_next_id#0 ) - (byte*) main::vicSelectGfxBank1_gfx#1 ← phi( main::@11/(byte*) main::vicSelectGfxBank1_gfx#0 ) +main::vicSelectGfxBank1: scope:[main] from main::@33 + (byte) bob_charset_next_id#80 ← phi( main::@33/(byte) bob_charset_next_id#0 ) + (byte*) main::vicSelectGfxBank1_gfx#1 ← phi( main::@33/(byte*) main::vicSelectGfxBank1_gfx#0 ) *((const byte*) CIA2_PORT_A_DDR) ← (number) 3 (byte*) main::vicSelectGfxBank1_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank1_gfx#1 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 - (byte) bob_charset_next_id#57 ← phi( main::vicSelectGfxBank1/(byte) bob_charset_next_id#58 ) + (byte) bob_charset_next_id#79 ← phi( main::vicSelectGfxBank1/(byte) bob_charset_next_id#80 ) (byte*) main::vicSelectGfxBank1_toDd001_gfx#1 ← phi( main::vicSelectGfxBank1/(byte*) main::vicSelectGfxBank1_toDd001_gfx#0 ) (word~) main::vicSelectGfxBank1_toDd001_$0 ← ((word)) (byte*) main::vicSelectGfxBank1_toDd001_gfx#1 (byte~) main::vicSelectGfxBank1_toDd001_$1 ← > (word~) main::vicSelectGfxBank1_toDd001_$0 @@ -138,25 +251,25 @@ main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 (byte) main::vicSelectGfxBank1_toDd001_return#0 ← (number~) main::vicSelectGfxBank1_toDd001_$3 to:main::vicSelectGfxBank1_toDd001_@return main::vicSelectGfxBank1_toDd001_@return: scope:[main] from main::vicSelectGfxBank1_toDd001 - (byte) bob_charset_next_id#56 ← phi( main::vicSelectGfxBank1_toDd001/(byte) bob_charset_next_id#57 ) + (byte) bob_charset_next_id#78 ← phi( main::vicSelectGfxBank1_toDd001/(byte) bob_charset_next_id#79 ) (byte) main::vicSelectGfxBank1_toDd001_return#2 ← phi( main::vicSelectGfxBank1_toDd001/(byte) main::vicSelectGfxBank1_toDd001_return#0 ) (byte) main::vicSelectGfxBank1_toDd001_return#1 ← (byte) main::vicSelectGfxBank1_toDd001_return#2 to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001_@return - (byte) bob_charset_next_id#54 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) bob_charset_next_id#56 ) + (byte) bob_charset_next_id#77 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) bob_charset_next_id#78 ) (byte) main::vicSelectGfxBank1_toDd001_return#3 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) main::vicSelectGfxBank1_toDd001_return#1 ) (byte~) main::vicSelectGfxBank1_$0 ← (byte) main::vicSelectGfxBank1_toDd001_return#3 *((const byte*) CIA2_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 - to:main::@9 -main::@9: scope:[main] from main::vicSelectGfxBank1_@1 - (byte) bob_charset_next_id#51 ← phi( main::vicSelectGfxBank1_@1/(byte) bob_charset_next_id#54 ) - (byte*) main::toD0181_screen#0 ← (const byte*) SCREEN + to:main::@29 +main::@29: scope:[main] from main::vicSelectGfxBank1_@1 + (byte) bob_charset_next_id#76 ← phi( main::vicSelectGfxBank1_@1/(byte) bob_charset_next_id#77 ) + (byte*) main::toD0181_screen#0 ← (const byte*) BOB_SCREEN (byte*) main::toD0181_gfx#0 ← (const byte*) BOB_CHARSET to:main::toD0181 -main::toD0181: scope:[main] from main::@9 - (byte) bob_charset_next_id#47 ← phi( main::@9/(byte) bob_charset_next_id#51 ) - (byte*) main::toD0181_gfx#1 ← phi( main::@9/(byte*) main::toD0181_gfx#0 ) - (byte*) main::toD0181_screen#1 ← phi( main::@9/(byte*) main::toD0181_screen#0 ) +main::toD0181: scope:[main] from main::@29 + (byte) bob_charset_next_id#75 ← phi( main::@29/(byte) bob_charset_next_id#76 ) + (byte*) main::toD0181_gfx#1 ← phi( main::@29/(byte*) main::toD0181_gfx#0 ) + (byte*) main::toD0181_screen#1 ← phi( main::@29/(byte*) main::toD0181_screen#0 ) (word~) main::toD0181_$0 ← ((word)) (byte*) main::toD0181_screen#1 (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (number) $3fff (number~) main::toD0181_$2 ← (number~) main::toD0181_$1 * (number) 4 @@ -169,95 +282,256 @@ main::toD0181: scope:[main] from main::@9 (byte) main::toD0181_return#0 ← (number~) main::toD0181_$8 to:main::toD0181_@return main::toD0181_@return: scope:[main] from main::toD0181 - (byte) bob_charset_next_id#41 ← phi( main::toD0181/(byte) bob_charset_next_id#47 ) + (byte) bob_charset_next_id#74 ← phi( main::toD0181/(byte) bob_charset_next_id#75 ) (byte) main::toD0181_return#2 ← phi( main::toD0181/(byte) main::toD0181_return#0 ) (byte) main::toD0181_return#1 ← (byte) main::toD0181_return#2 - to:main::@10 -main::@10: scope:[main] from main::toD0181_@return - (byte) bob_charset_next_id#35 ← phi( main::toD0181_@return/(byte) bob_charset_next_id#41 ) + to:main::@30 +main::@30: scope:[main] from main::toD0181_@return + (byte) bob_charset_next_id#73 ← phi( main::toD0181_@return/(byte) bob_charset_next_id#74 ) (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 ) (byte~) main::$2 ← (byte) main::toD0181_return#3 *((const byte*) D018) ← (byte~) main::$2 - (void*) memset::str#0 ← (void*)(const byte*) SCREEN + (void*) memset::str#0 ← (void*)(const byte*) BOB_SCREEN (byte) memset::c#0 ← (number) 0 (word) memset::num#0 ← (number) $3e8 call memset (void*) memset::return#2 ← (void*) memset::return#1 - to:main::@12 -main::@12: scope:[main] from main::@10 - (byte) bob_charset_next_id#28 ← phi( main::@10/(byte) bob_charset_next_id#35 ) + to:main::@34 +main::@34: scope:[main] from main::@30 + (byte) bob_charset_next_id#72 ← phi( main::@30/(byte) bob_charset_next_id#73 ) + (byte) main::x#0 ← (byte) 0 + to:main::@1 +main::@1: scope:[main] from main::@3 main::@34 + (byte) bob_charset_next_id#71 ← phi( main::@3/(byte) bob_charset_next_id#67 main::@34/(byte) bob_charset_next_id#72 ) + (byte) main::x#4 ← phi( main::@3/(byte) main::x#1 main::@34/(byte) main::x#0 ) + (byte) main::y#0 ← (byte) 0 + to:main::@2 +main::@2: scope:[main] from main::@1 main::@35 + (byte) bob_charset_next_id#70 ← phi( main::@1/(byte) bob_charset_next_id#71 main::@35/(byte) bob_charset_next_id#69 ) + (byte) main::y#2 ← phi( main::@1/(byte) main::y#0 main::@35/(byte) main::y#1 ) + (byte) main::x#2 ← phi( main::@1/(byte) main::x#4 main::@35/(byte) main::x#5 ) + (number~) main::$7 ← (byte) main::x#2 * (number) $c + (number~) main::$8 ← (number~) main::$7 + (byte) main::y#2 + (number~) main::$9 ← (byte) main::y#2 * (number) $18 + (number~) main::$10 ← (number~) main::$9 + (byte) main::x#2 + (byte) renderBob::xpos#0 ← (number~) main::$8 + (byte) renderBob::ypos#0 ← (number~) main::$10 + call renderBob + to:main::@35 +main::@35: scope:[main] from main::@2 + (byte) bob_charset_next_id#69 ← phi( main::@2/(byte) bob_charset_next_id#70 ) + (byte) main::x#5 ← phi( main::@2/(byte) main::x#2 ) + (byte) main::y#3 ← phi( main::@2/(byte) main::y#2 ) + (byte) main::y#1 ← (byte) main::y#3 + rangenext(0,3) + (bool~) main::$12 ← (byte) main::y#1 != rangelast(0,3) + if((bool~) main::$12) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@35 + (byte) bob_charset_next_id#67 ← phi( main::@35/(byte) bob_charset_next_id#69 ) + (byte) main::x#3 ← phi( main::@35/(byte) main::x#5 ) + (byte) main::x#1 ← (byte) main::x#3 + rangenext(0,7) + (bool~) main::$13 ← (byte) main::x#1 != rangelast(0,7) + if((bool~) main::$13) goto main::@1 + to:main::@5 +main::@5: scope:[main] from main::@3 main::@36 + (byte) bob_charset_next_id#65 ← phi( main::@3/(byte) bob_charset_next_id#67 main::@36/(byte) bob_charset_next_id#63 ) + (byte) keyboard_key_pressed::key#0 ← (const byte) KEY_SPACE + call keyboard_key_pressed + (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#1 + to:main::@36 +main::@36: scope:[main] from main::@5 + (byte) bob_charset_next_id#63 ← phi( main::@5/(byte) bob_charset_next_id#65 ) + (byte) keyboard_key_pressed::return#6 ← phi( main::@5/(byte) keyboard_key_pressed::return#2 ) + (byte~) main::$14 ← (byte) keyboard_key_pressed::return#6 + (bool~) main::$28 ← (number) 0 != (byte~) main::$14 + (bool~) main::$15 ← ! (bool~) main::$28 + if((bool~) main::$15) goto main::@5 + to:main::@11 +main::@11: scope:[main] from main::@36 main::@37 + (byte) bob_charset_next_id#61 ← phi( main::@36/(byte) bob_charset_next_id#63 main::@37/(byte) bob_charset_next_id#59 ) + (byte) keyboard_key_pressed::key#1 ← (const byte) KEY_SPACE + call keyboard_key_pressed + (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#1 + to:main::@37 +main::@37: scope:[main] from main::@11 + (byte) bob_charset_next_id#59 ← phi( main::@11/(byte) bob_charset_next_id#61 ) + (byte) keyboard_key_pressed::return#7 ← phi( main::@11/(byte) keyboard_key_pressed::return#3 ) + (byte~) main::$16 ← (byte) keyboard_key_pressed::return#7 + (bool~) main::$27 ← (number) 0 != (byte~) main::$16 + if((bool~) main::$27) goto main::@11 + to:main::@13 +main::@13: scope:[main] from main::@37 + (byte) bob_charset_next_id#57 ← phi( main::@37/(byte) bob_charset_next_id#59 ) + (void*) memset::str#1 ← (void*)(const byte*) BOB_SCREEN + (byte) memset::c#1 ← (number) 0 + (word) memset::num#1 ← (number) $3e8 + call memset + (void*) memset::return#3 ← (void*) memset::return#1 + to:main::@38 +main::@38: scope:[main] from main::@13 + (byte) bob_charset_next_id#55 ← phi( main::@13/(byte) bob_charset_next_id#57 ) (byte) main::sin_x_idx#0 ← (number) 0 (byte) main::sin_y_idx#0 ← (number) $49 - to:main::@1 -main::@1: scope:[main] from main::@12 main::@15 - (byte) main::sin_y_idx#7 ← phi( main::@12/(byte) main::sin_y_idx#0 main::@15/(byte) main::sin_y_idx#1 ) - (byte) main::sin_x_idx#7 ← phi( main::@12/(byte) main::sin_x_idx#0 main::@15/(byte) main::sin_x_idx#1 ) - (byte) bob_charset_next_id#20 ← phi( main::@12/(byte) bob_charset_next_id#28 main::@15/(byte) bob_charset_next_id#29 ) - if(true) goto main::@4 - to:main::@return -main::@4: scope:[main] from main::@1 main::@4 - (byte) bob_charset_next_id#52 ← phi( main::@1/(byte) bob_charset_next_id#20 main::@4/(byte) bob_charset_next_id#52 ) - (byte) main::sin_y_idx#6 ← phi( main::@1/(byte) main::sin_y_idx#7 main::@4/(byte) main::sin_y_idx#6 ) - (byte) main::sin_x_idx#6 ← phi( main::@1/(byte) main::sin_x_idx#7 main::@4/(byte) main::sin_x_idx#6 ) - (bool~) main::$4 ← *((const byte*) RASTER) != (number) $ff - if((bool~) main::$4) goto main::@4 - to:main::@5 -main::@5: scope:[main] from main::@4 - (byte) bob_charset_next_id#48 ← phi( main::@4/(byte) bob_charset_next_id#52 ) - (byte) main::sin_y_idx#2 ← phi( main::@4/(byte) main::sin_y_idx#6 ) - (byte) main::sin_x_idx#2 ← phi( main::@4/(byte) main::sin_x_idx#6 ) + to:main::@17 +main::@17: scope:[main] from main::@38 main::@44 + (byte) bob_charset_next_id#53 ← phi( main::@38/(byte) bob_charset_next_id#55 main::@44/(byte) bob_charset_next_id#54 ) + (byte) main::sin_y_idx#9 ← phi( main::@38/(byte) main::sin_y_idx#0 main::@44/(byte) main::sin_y_idx#10 ) + (byte) main::sin_x_idx#9 ← phi( main::@38/(byte) main::sin_x_idx#0 main::@44/(byte) main::sin_x_idx#10 ) + if(true) goto main::@20 + to:main::@25 +main::@20: scope:[main] from main::@17 main::@20 + (byte) bob_charset_next_id#68 ← phi( main::@17/(byte) bob_charset_next_id#53 main::@20/(byte) bob_charset_next_id#68 ) + (byte) main::sin_y_idx#8 ← phi( main::@17/(byte) main::sin_y_idx#9 main::@20/(byte) main::sin_y_idx#8 ) + (byte) main::sin_x_idx#8 ← phi( main::@17/(byte) main::sin_x_idx#9 main::@20/(byte) main::sin_x_idx#8 ) + (bool~) main::$17 ← *((const byte*) RASTER) < (number) $f8 + if((bool~) main::$17) goto main::@20 + to:main::@21 +main::@21: scope:[main] from main::@20 + (byte) bob_charset_next_id#66 ← phi( main::@20/(byte) bob_charset_next_id#68 ) + (byte) main::sin_y_idx#2 ← phi( main::@20/(byte) main::sin_y_idx#8 ) + (byte) main::sin_x_idx#2 ← phi( main::@20/(byte) main::sin_x_idx#8 ) *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) - (byte) renderBob::xpos#0 ← *((const byte*) SIN_X_TAB + (byte) main::sin_x_idx#2) - (byte) renderBob::ypos#0 ← *((const byte*) SIN_Y_TAB + (byte) main::sin_y_idx#2) + (byte) renderBob::xpos#1 ← *((const byte*) SIN_X_TAB+(number) $15*(number) 4 + (byte) main::sin_x_idx#2) + (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB+(number) $d*(number) 0 + (byte) main::sin_y_idx#2) call renderBob - to:main::@13 -main::@13: scope:[main] from main::@5 - (byte) bob_charset_next_id#42 ← phi( main::@5/(byte) bob_charset_next_id#48 ) - (byte) main::sin_y_idx#3 ← phi( main::@5/(byte) main::sin_y_idx#2 ) - (byte) main::sin_x_idx#3 ← phi( main::@5/(byte) main::sin_x_idx#2 ) - (byte) renderBob::xpos#1 ← *((const byte*) SIN_X_TAB+(number) $f + (byte) main::sin_x_idx#3) - (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB+(number) $b + (byte) main::sin_y_idx#3) + to:main::@39 +main::@39: scope:[main] from main::@21 + (byte) bob_charset_next_id#64 ← phi( main::@21/(byte) bob_charset_next_id#66 ) + (byte) main::sin_y_idx#3 ← phi( main::@21/(byte) main::sin_y_idx#2 ) + (byte) main::sin_x_idx#3 ← phi( main::@21/(byte) main::sin_x_idx#2 ) + (byte) renderBob::xpos#2 ← *((const byte*) SIN_X_TAB+(number) $13*(number) 3 + (byte) main::sin_x_idx#3) + (byte) renderBob::ypos#2 ← *((const byte*) SIN_Y_TAB+(number) $f*(number) 1 + (byte) main::sin_y_idx#3) call renderBob - to:main::@14 -main::@14: scope:[main] from main::@13 - (byte) bob_charset_next_id#36 ← phi( main::@13/(byte) bob_charset_next_id#42 ) - (byte) main::sin_y_idx#4 ← phi( main::@13/(byte) main::sin_y_idx#3 ) - (byte) main::sin_x_idx#4 ← phi( main::@13/(byte) main::sin_x_idx#3 ) - (byte) renderBob::xpos#2 ← *((const byte*) SIN_X_TAB+(number) $16 + (byte) main::sin_x_idx#4) - (byte) renderBob::ypos#2 ← *((const byte*) SIN_Y_TAB+(number) $1e + (byte) main::sin_y_idx#4) + to:main::@40 +main::@40: scope:[main] from main::@39 + (byte) bob_charset_next_id#62 ← phi( main::@39/(byte) bob_charset_next_id#64 ) + (byte) main::sin_y_idx#4 ← phi( main::@39/(byte) main::sin_y_idx#3 ) + (byte) main::sin_x_idx#4 ← phi( main::@39/(byte) main::sin_x_idx#3 ) + (byte) renderBob::xpos#3 ← *((const byte*) SIN_X_TAB+(number) $11*(number) 2 + (byte) main::sin_x_idx#4) + (byte) renderBob::ypos#3 ← *((const byte*) SIN_Y_TAB+(number) $11*(number) 2 + (byte) main::sin_y_idx#4) call renderBob - to:main::@15 -main::@15: scope:[main] from main::@14 - (byte) bob_charset_next_id#29 ← phi( main::@14/(byte) bob_charset_next_id#36 ) - (byte) main::sin_y_idx#5 ← phi( main::@14/(byte) main::sin_y_idx#4 ) - (byte) main::sin_x_idx#5 ← phi( main::@14/(byte) main::sin_x_idx#4 ) - (byte) main::sin_x_idx#1 ← ++ (byte) main::sin_x_idx#5 - (byte) main::sin_y_idx#1 ← ++ (byte) main::sin_y_idx#5 + to:main::@41 +main::@41: scope:[main] from main::@40 + (byte) bob_charset_next_id#60 ← phi( main::@40/(byte) bob_charset_next_id#62 ) + (byte) main::sin_y_idx#5 ← phi( main::@40/(byte) main::sin_y_idx#4 ) + (byte) main::sin_x_idx#5 ← phi( main::@40/(byte) main::sin_x_idx#4 ) + (byte) renderBob::xpos#4 ← *((const byte*) SIN_X_TAB+(number) $f*(number) 1 + (byte) main::sin_x_idx#5) + (byte) renderBob::ypos#4 ← *((const byte*) SIN_Y_TAB+(number) $13*(number) 3 + (byte) main::sin_y_idx#5) + call renderBob + to:main::@42 +main::@42: scope:[main] from main::@41 + (byte) bob_charset_next_id#58 ← phi( main::@41/(byte) bob_charset_next_id#60 ) + (byte) main::sin_y_idx#6 ← phi( main::@41/(byte) main::sin_y_idx#5 ) + (byte) main::sin_x_idx#6 ← phi( main::@41/(byte) main::sin_x_idx#5 ) + (byte) renderBob::xpos#5 ← *((const byte*) SIN_X_TAB+(number) $d*(number) 0 + (byte) main::sin_x_idx#6) + (byte) renderBob::ypos#5 ← *((const byte*) SIN_Y_TAB+(number) $15*(number) 4 + (byte) main::sin_y_idx#6) + call renderBob + to:main::@43 +main::@43: scope:[main] from main::@42 + (byte) bob_charset_next_id#56 ← phi( main::@42/(byte) bob_charset_next_id#58 ) + (byte) main::sin_y_idx#7 ← phi( main::@42/(byte) main::sin_y_idx#6 ) + (byte) main::sin_x_idx#7 ← phi( main::@42/(byte) main::sin_x_idx#6 ) + (byte) main::sin_x_idx#1 ← ++ (byte) main::sin_x_idx#7 + (byte) main::sin_y_idx#1 ← ++ (byte) main::sin_y_idx#7 *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) - to:main::@1 -main::@return: scope:[main] from main::@1 - (byte) bob_charset_next_id#11 ← phi( main::@1/(byte) bob_charset_next_id#20 ) + (byte) keyboard_key_pressed::key#2 ← (const byte) KEY_SPACE + call keyboard_key_pressed + (byte) keyboard_key_pressed::return#4 ← (byte) keyboard_key_pressed::return#1 + to:main::@44 +main::@44: scope:[main] from main::@43 + (byte) bob_charset_next_id#54 ← phi( main::@43/(byte) bob_charset_next_id#56 ) + (byte) main::sin_y_idx#10 ← phi( main::@43/(byte) main::sin_y_idx#1 ) + (byte) main::sin_x_idx#10 ← phi( main::@43/(byte) main::sin_x_idx#1 ) + (byte) keyboard_key_pressed::return#8 ← phi( main::@43/(byte) keyboard_key_pressed::return#4 ) + (byte~) main::$25 ← (byte) keyboard_key_pressed::return#8 + (bool~) main::$29 ← (number) 0 != (byte~) main::$25 + (bool~) main::$26 ← ! (bool~) main::$29 + if((bool~) main::$26) goto main::@17 + to:main::@25 +main::@25: scope:[main] from main::@17 main::@44 + (byte) bob_charset_next_id#52 ← phi( main::@17/(byte) bob_charset_next_id#53 main::@44/(byte) bob_charset_next_id#54 ) + (byte*) main::vicSelectGfxBank2_gfx#0 ← (const byte*) SCREEN_BASIC + to:main::vicSelectGfxBank2 +main::vicSelectGfxBank2: scope:[main] from main::@25 + (byte) bob_charset_next_id#51 ← phi( main::@25/(byte) bob_charset_next_id#52 ) + (byte*) main::vicSelectGfxBank2_gfx#1 ← phi( main::@25/(byte*) main::vicSelectGfxBank2_gfx#0 ) + *((const byte*) CIA2_PORT_A_DDR) ← (number) 3 + (byte*) main::vicSelectGfxBank2_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank2_gfx#1 + to:main::vicSelectGfxBank2_toDd001 +main::vicSelectGfxBank2_toDd001: scope:[main] from main::vicSelectGfxBank2 + (byte) bob_charset_next_id#49 ← phi( main::vicSelectGfxBank2/(byte) bob_charset_next_id#51 ) + (byte*) main::vicSelectGfxBank2_toDd001_gfx#1 ← phi( main::vicSelectGfxBank2/(byte*) main::vicSelectGfxBank2_toDd001_gfx#0 ) + (word~) main::vicSelectGfxBank2_toDd001_$0 ← ((word)) (byte*) main::vicSelectGfxBank2_toDd001_gfx#1 + (byte~) main::vicSelectGfxBank2_toDd001_$1 ← > (word~) main::vicSelectGfxBank2_toDd001_$0 + (number~) main::vicSelectGfxBank2_toDd001_$2 ← (byte~) main::vicSelectGfxBank2_toDd001_$1 / (number) $40 + (number~) main::vicSelectGfxBank2_toDd001_$3 ← (number) 3 ^ (number~) main::vicSelectGfxBank2_toDd001_$2 + (byte) main::vicSelectGfxBank2_toDd001_return#0 ← (number~) main::vicSelectGfxBank2_toDd001_$3 + to:main::vicSelectGfxBank2_toDd001_@return +main::vicSelectGfxBank2_toDd001_@return: scope:[main] from main::vicSelectGfxBank2_toDd001 + (byte) bob_charset_next_id#47 ← phi( main::vicSelectGfxBank2_toDd001/(byte) bob_charset_next_id#49 ) + (byte) main::vicSelectGfxBank2_toDd001_return#2 ← phi( main::vicSelectGfxBank2_toDd001/(byte) main::vicSelectGfxBank2_toDd001_return#0 ) + (byte) main::vicSelectGfxBank2_toDd001_return#1 ← (byte) main::vicSelectGfxBank2_toDd001_return#2 + to:main::vicSelectGfxBank2_@1 +main::vicSelectGfxBank2_@1: scope:[main] from main::vicSelectGfxBank2_toDd001_@return + (byte) bob_charset_next_id#44 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte) bob_charset_next_id#47 ) + (byte) main::vicSelectGfxBank2_toDd001_return#3 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte) main::vicSelectGfxBank2_toDd001_return#1 ) + (byte~) main::vicSelectGfxBank2_$0 ← (byte) main::vicSelectGfxBank2_toDd001_return#3 + *((const byte*) CIA2_PORT_A) ← (byte~) main::vicSelectGfxBank2_$0 + to:main::@31 +main::@31: scope:[main] from main::vicSelectGfxBank2_@1 + (byte) bob_charset_next_id#39 ← phi( main::vicSelectGfxBank2_@1/(byte) bob_charset_next_id#44 ) + (byte*) main::toD0182_screen#0 ← (const byte*) SCREEN_BASIC + (byte*) main::toD0182_gfx#0 ← (const byte*) CHARSET_BASIC + to:main::toD0182 +main::toD0182: scope:[main] from main::@31 + (byte) bob_charset_next_id#34 ← phi( main::@31/(byte) bob_charset_next_id#39 ) + (byte*) main::toD0182_gfx#1 ← phi( main::@31/(byte*) main::toD0182_gfx#0 ) + (byte*) main::toD0182_screen#1 ← phi( main::@31/(byte*) main::toD0182_screen#0 ) + (word~) main::toD0182_$0 ← ((word)) (byte*) main::toD0182_screen#1 + (number~) main::toD0182_$1 ← (word~) main::toD0182_$0 & (number) $3fff + (number~) main::toD0182_$2 ← (number~) main::toD0182_$1 * (number) 4 + (number~) main::toD0182_$3 ← > (number~) main::toD0182_$2 + (word~) main::toD0182_$4 ← ((word)) (byte*) main::toD0182_gfx#1 + (byte~) main::toD0182_$5 ← > (word~) main::toD0182_$4 + (number~) main::toD0182_$6 ← (byte~) main::toD0182_$5 / (number) 4 + (number~) main::toD0182_$7 ← (number~) main::toD0182_$6 & (number) $f + (number~) main::toD0182_$8 ← (number~) main::toD0182_$3 | (number~) main::toD0182_$7 + (byte) main::toD0182_return#0 ← (number~) main::toD0182_$8 + to:main::toD0182_@return +main::toD0182_@return: scope:[main] from main::toD0182 + (byte) bob_charset_next_id#28 ← phi( main::toD0182/(byte) bob_charset_next_id#34 ) + (byte) main::toD0182_return#2 ← phi( main::toD0182/(byte) main::toD0182_return#0 ) + (byte) main::toD0182_return#1 ← (byte) main::toD0182_return#2 + to:main::@32 +main::@32: scope:[main] from main::toD0182_@return + (byte) bob_charset_next_id#20 ← phi( main::toD0182_@return/(byte) bob_charset_next_id#28 ) + (byte) main::toD0182_return#3 ← phi( main::toD0182_@return/(byte) main::toD0182_return#1 ) + (byte~) main::$6 ← (byte) main::toD0182_return#3 + *((const byte*) D018) ← (byte~) main::$6 + to:main::@return +main::@return: scope:[main] from main::@32 + (byte) bob_charset_next_id#11 ← phi( main::@32/(byte) bob_charset_next_id#20 ) (byte) bob_charset_next_id#1 ← (byte) bob_charset_next_id#11 return to:@return (void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos) -renderBob: scope:[renderBob] from main::@13 main::@14 main::@5 - (byte) renderBob::ypos#3 ← phi( main::@13/(byte) renderBob::ypos#1 main::@14/(byte) renderBob::ypos#2 main::@5/(byte) renderBob::ypos#0 ) - (byte) renderBob::xpos#3 ← phi( main::@13/(byte) renderBob::xpos#1 main::@14/(byte) renderBob::xpos#2 main::@5/(byte) renderBob::xpos#0 ) - (byte~) renderBob::$0 ← (byte) renderBob::xpos#3 / (const byte) BOB_SHIFTS_X +renderBob: scope:[renderBob] from main::@2 main::@21 main::@39 main::@40 main::@41 main::@42 + (byte) renderBob::ypos#6 ← phi( main::@2/(byte) renderBob::ypos#0 main::@21/(byte) renderBob::ypos#1 main::@39/(byte) renderBob::ypos#2 main::@40/(byte) renderBob::ypos#3 main::@41/(byte) renderBob::ypos#4 main::@42/(byte) renderBob::ypos#5 ) + (byte) renderBob::xpos#6 ← phi( main::@2/(byte) renderBob::xpos#0 main::@21/(byte) renderBob::xpos#1 main::@39/(byte) renderBob::xpos#2 main::@40/(byte) renderBob::xpos#3 main::@41/(byte) renderBob::xpos#4 main::@42/(byte) renderBob::xpos#5 ) + (byte~) renderBob::$0 ← (byte) renderBob::xpos#6 / (const byte) BOB_SHIFTS_X (byte) renderBob::x_char_offset#0 ← (byte~) renderBob::$0 - (byte~) renderBob::$1 ← (byte) renderBob::ypos#3 / (const byte) BOB_SHIFTS_Y + (byte~) renderBob::$1 ← (byte) renderBob::ypos#6 / (const byte) BOB_SHIFTS_Y (byte) renderBob::y_char_offset#0 ← (byte~) renderBob::$1 (word~) renderBob::$2 ← ((word)) (byte) renderBob::y_char_offset#0 (number~) renderBob::$3 ← (word~) renderBob::$2 * (number) $28 (word) renderBob::y_offset#0 ← (number~) renderBob::$3 - (byte*~) renderBob::$4 ← (const byte*) SCREEN + (word) renderBob::y_offset#0 + (byte*~) renderBob::$4 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 (byte*~) renderBob::$5 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 (byte*) renderBob::screen#0 ← (byte*~) renderBob::$5 - (number~) renderBob::$6 ← (byte) renderBob::ypos#3 & (number) 7 + (number~) renderBob::$6 ← (byte) renderBob::ypos#6 & (number) 7 (number~) renderBob::$7 ← (number~) renderBob::$6 * (const byte) BOB_SHIFTS_X - (number~) renderBob::$8 ← (byte) renderBob::xpos#3 & (number) 3 + (number~) renderBob::$8 ← (byte) renderBob::xpos#6 & (number) 3 (number~) renderBob::$9 ← (number~) renderBob::$7 + (number~) renderBob::$8 (byte) renderBob::bob_table_idx#0 ← (number~) renderBob::$9 *((byte*) renderBob::screen#0 + (number) 0) ← *((const byte*) BOB_TABLES+(number) 0*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) @@ -289,19 +563,19 @@ prepareBobs::@19: scope:[prepareBobs] from prepareBobs to:prepareBobs::@1 prepareBobs::@1: scope:[prepareBobs] from prepareBobs::@19 prepareBobs::@20 (byte) prepareBobs::bob_table_idx#9 ← phi( prepareBobs::@19/(byte) prepareBobs::bob_table_idx#0 prepareBobs::@20/(byte) prepareBobs::bob_table_idx#12 ) - (byte) bob_charset_next_id#22 ← phi( prepareBobs::@19/(byte) bob_charset_next_id#3 prepareBobs::@20/(byte) bob_charset_next_id#30 ) + (byte) bob_charset_next_id#22 ← phi( prepareBobs::@19/(byte) bob_charset_next_id#3 prepareBobs::@20/(byte) bob_charset_next_id#29 ) (byte) prepareBobs::shift_y#2 ← phi( prepareBobs::@19/(byte) prepareBobs::shift_y#0 prepareBobs::@20/(byte) prepareBobs::shift_y#1 ) (bool~) prepareBobs::$1 ← (byte) prepareBobs::shift_y#2 < (const byte) BOB_SHIFTS_Y if((bool~) prepareBobs::$1) goto prepareBobs::@2 to:prepareBobs::@return prepareBobs::@2: scope:[prepareBobs] from prepareBobs::@1 - (byte) bob_charset_next_id#49 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#22 ) + (byte) bob_charset_next_id#45 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#22 ) (byte) prepareBobs::shift_y#6 ← phi( prepareBobs::@1/(byte) prepareBobs::shift_y#2 ) (byte) prepareBobs::bob_table_idx#6 ← phi( prepareBobs::@1/(byte) prepareBobs::bob_table_idx#9 ) (byte) prepareBobs::shift_x#0 ← (number) 0 to:prepareBobs::@4 prepareBobs::@4: scope:[prepareBobs] from prepareBobs::@2 prepareBobs::@23 - (byte) bob_charset_next_id#43 ← phi( prepareBobs::@2/(byte) bob_charset_next_id#49 prepareBobs::@23/(byte) bob_charset_next_id#50 ) + (byte) bob_charset_next_id#40 ← phi( prepareBobs::@2/(byte) bob_charset_next_id#45 prepareBobs::@23/(byte) bob_charset_next_id#46 ) (byte) prepareBobs::shift_y#5 ← phi( prepareBobs::@2/(byte) prepareBobs::shift_y#6 prepareBobs::@23/(byte) prepareBobs::shift_y#7 ) (byte) prepareBobs::bob_table_idx#4 ← phi( prepareBobs::@2/(byte) prepareBobs::bob_table_idx#6 prepareBobs::@23/(byte) prepareBobs::bob_table_idx#7 ) (byte) prepareBobs::shift_x#2 ← phi( prepareBobs::@2/(byte) prepareBobs::shift_x#0 prepareBobs::@23/(byte) prepareBobs::shift_x#1 ) @@ -311,7 +585,7 @@ prepareBobs::@4: scope:[prepareBobs] from prepareBobs::@2 prepareBobs::@23 prepareBobs::@5: scope:[prepareBobs] from prepareBobs::@4 (byte) prepareBobs::shift_y#12 ← phi( prepareBobs::@4/(byte) prepareBobs::shift_y#5 ) (byte) prepareBobs::shift_x#8 ← phi( prepareBobs::@4/(byte) prepareBobs::shift_x#2 ) - (byte) bob_charset_next_id#38 ← phi( prepareBobs::@4/(byte) bob_charset_next_id#43 ) + (byte) bob_charset_next_id#36 ← phi( prepareBobs::@4/(byte) bob_charset_next_id#40 ) (byte) prepareBobs::bob_table_idx#2 ← phi( prepareBobs::@4/(byte) prepareBobs::bob_table_idx#4 ) (byte*) prepareBobs::bob_glyph#0 ← (const byte*) PROTO_BOB (byte*~) prepareBobs::$3 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#2 @@ -320,13 +594,13 @@ prepareBobs::@5: scope:[prepareBobs] from prepareBobs::@4 to:prepareBobs::@7 prepareBobs::@6: scope:[prepareBobs] from prepareBobs::@4 (byte) prepareBobs::bob_table_idx#13 ← phi( prepareBobs::@4/(byte) prepareBobs::bob_table_idx#4 ) - (byte) bob_charset_next_id#37 ← phi( prepareBobs::@4/(byte) bob_charset_next_id#43 ) + (byte) bob_charset_next_id#35 ← phi( prepareBobs::@4/(byte) bob_charset_next_id#40 ) (byte) prepareBobs::shift_y#4 ← phi( prepareBobs::@4/(byte) prepareBobs::shift_y#5 ) call shiftProtoBobDown to:prepareBobs::@20 prepareBobs::@20: scope:[prepareBobs] from prepareBobs::@6 (byte) prepareBobs::bob_table_idx#12 ← phi( prepareBobs::@6/(byte) prepareBobs::bob_table_idx#13 ) - (byte) bob_charset_next_id#30 ← phi( prepareBobs::@6/(byte) bob_charset_next_id#37 ) + (byte) bob_charset_next_id#29 ← phi( prepareBobs::@6/(byte) bob_charset_next_id#35 ) (byte) prepareBobs::shift_y#3 ← phi( prepareBobs::@6/(byte) prepareBobs::shift_y#4 ) (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#3 to:prepareBobs::@1 @@ -334,7 +608,7 @@ prepareBobs::@7: scope:[prepareBobs] from prepareBobs::@21 prepareBobs::@5 (byte) prepareBobs::shift_y#10 ← phi( prepareBobs::@21/(byte) prepareBobs::shift_y#11 prepareBobs::@5/(byte) prepareBobs::shift_y#12 ) (byte) prepareBobs::shift_x#6 ← phi( prepareBobs::@21/(byte) prepareBobs::shift_x#7 prepareBobs::@5/(byte) prepareBobs::shift_x#8 ) (byte*) prepareBobs::bob_table#4 ← phi( prepareBobs::@21/(byte*) prepareBobs::bob_table#1 prepareBobs::@5/(byte*) prepareBobs::bob_table#0 ) - (byte) bob_charset_next_id#31 ← phi( prepareBobs::@21/(byte) bob_charset_next_id#4 prepareBobs::@5/(byte) bob_charset_next_id#38 ) + (byte) bob_charset_next_id#30 ← phi( prepareBobs::@21/(byte) bob_charset_next_id#4 prepareBobs::@5/(byte) bob_charset_next_id#36 ) (byte) prepareBobs::bob_table_idx#5 ← phi( prepareBobs::@21/(byte) prepareBobs::bob_table_idx#8 prepareBobs::@5/(byte) prepareBobs::bob_table_idx#2 ) (byte*) prepareBobs::bob_glyph#4 ← phi( prepareBobs::@21/(byte*) prepareBobs::bob_glyph#1 prepareBobs::@5/(byte*) prepareBobs::bob_glyph#0 ) (byte) prepareBobs::cell#2 ← phi( prepareBobs::@21/(byte) prepareBobs::cell#1 prepareBobs::@5/(byte) prepareBobs::cell#0 ) @@ -347,7 +621,7 @@ prepareBobs::@8: scope:[prepareBobs] from prepareBobs::@7 (byte) prepareBobs::bob_table_idx#10 ← phi( prepareBobs::@7/(byte) prepareBobs::bob_table_idx#5 ) (byte) prepareBobs::cell#4 ← phi( prepareBobs::@7/(byte) prepareBobs::cell#2 ) (byte*) prepareBobs::bob_table#3 ← phi( prepareBobs::@7/(byte*) prepareBobs::bob_table#4 ) - (byte) bob_charset_next_id#21 ← phi( prepareBobs::@7/(byte) bob_charset_next_id#31 ) + (byte) bob_charset_next_id#21 ← phi( prepareBobs::@7/(byte) bob_charset_next_id#30 ) (byte*) prepareBobs::bob_glyph#2 ← phi( prepareBobs::@7/(byte*) prepareBobs::bob_glyph#4 ) (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 call bobCharsetFindOrAddGlyph @@ -370,7 +644,7 @@ prepareBobs::@21: scope:[prepareBobs] from prepareBobs::@8 (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#3 to:prepareBobs::@7 prepareBobs::@9: scope:[prepareBobs] from prepareBobs::@7 - (byte) bob_charset_next_id#55 ← phi( prepareBobs::@7/(byte) bob_charset_next_id#31 ) + (byte) bob_charset_next_id#50 ← phi( prepareBobs::@7/(byte) bob_charset_next_id#30 ) (byte) prepareBobs::shift_y#9 ← phi( prepareBobs::@7/(byte) prepareBobs::shift_y#10 ) (byte) prepareBobs::shift_x#5 ← phi( prepareBobs::@7/(byte) prepareBobs::shift_x#6 ) (byte) prepareBobs::bob_table_idx#3 ← phi( prepareBobs::@7/(byte) prepareBobs::bob_table_idx#5 ) @@ -378,14 +652,14 @@ prepareBobs::@9: scope:[prepareBobs] from prepareBobs::@7 call shiftProtoBobRight to:prepareBobs::@22 prepareBobs::@22: scope:[prepareBobs] from prepareBobs::@9 - (byte) bob_charset_next_id#53 ← phi( prepareBobs::@9/(byte) bob_charset_next_id#55 ) + (byte) bob_charset_next_id#48 ← phi( prepareBobs::@9/(byte) bob_charset_next_id#50 ) (byte) prepareBobs::shift_y#8 ← phi( prepareBobs::@9/(byte) prepareBobs::shift_y#9 ) (byte) prepareBobs::bob_table_idx#11 ← phi( prepareBobs::@9/(byte) prepareBobs::bob_table_idx#1 ) (byte) prepareBobs::shift_x#4 ← phi( prepareBobs::@9/(byte) prepareBobs::shift_x#5 ) call shiftProtoBobRight to:prepareBobs::@23 prepareBobs::@23: scope:[prepareBobs] from prepareBobs::@22 - (byte) bob_charset_next_id#50 ← phi( prepareBobs::@22/(byte) bob_charset_next_id#53 ) + (byte) bob_charset_next_id#46 ← phi( prepareBobs::@22/(byte) bob_charset_next_id#48 ) (byte) prepareBobs::shift_y#7 ← phi( prepareBobs::@22/(byte) prepareBobs::shift_y#8 ) (byte) prepareBobs::bob_table_idx#7 ← phi( prepareBobs::@22/(byte) prepareBobs::bob_table_idx#11 ) (byte) prepareBobs::shift_x#3 ← phi( prepareBobs::@22/(byte) prepareBobs::shift_x#4 ) @@ -489,9 +763,9 @@ shiftProtoBobDown::@3: scope:[shiftProtoBobDown] from shiftProtoBobDown::@1 shiftProtoBobDown::@return: scope:[shiftProtoBobDown] from shiftProtoBobDown::@3 return to:@return -@13: scope:[] from @begin +@54: scope:[] from @begin (byte) bob_charset_next_id#6 ← (byte) 0 - to:@14 + to:@55 (byte()) bobCharsetFindOrAddGlyph((byte*) bobCharsetFindOrAddGlyph::bob_glyph) bobCharsetFindOrAddGlyph: scope:[bobCharsetFindOrAddGlyph] from prepareBobs prepareBobs::@8 @@ -509,7 +783,7 @@ bobCharsetFindOrAddGlyph::@1: scope:[bobCharsetFindOrAddGlyph] from bobCharsetF if((bool~) bobCharsetFindOrAddGlyph::$0) goto bobCharsetFindOrAddGlyph::@2 to:bobCharsetFindOrAddGlyph::@3 bobCharsetFindOrAddGlyph::@2: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@1 - (byte) bob_charset_next_id#44 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) bob_charset_next_id#15 ) + (byte) bob_charset_next_id#41 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) bob_charset_next_id#15 ) (byte) bobCharsetFindOrAddGlyph::glyph_id#12 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) bobCharsetFindOrAddGlyph::glyph_id#2 ) (byte*) bobCharsetFindOrAddGlyph::bob_glyph#6 ← phi( bobCharsetFindOrAddGlyph::@1/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#9 ) (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#8 ← phi( bobCharsetFindOrAddGlyph::@1/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#12 ) @@ -518,13 +792,13 @@ bobCharsetFindOrAddGlyph::@2: scope:[bobCharsetFindOrAddGlyph] from bobCharsetF to:bobCharsetFindOrAddGlyph::@4 bobCharsetFindOrAddGlyph::@3: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@1 (byte) bobCharsetFindOrAddGlyph::glyph_id#11 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) bobCharsetFindOrAddGlyph::glyph_id#2 ) - (byte) bob_charset_next_id#34 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) bob_charset_next_id#15 ) + (byte) bob_charset_next_id#33 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) bob_charset_next_id#15 ) (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 ← phi( bobCharsetFindOrAddGlyph::@1/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#12 ) (byte*) bobCharsetFindOrAddGlyph::bob_glyph#8 ← phi( bobCharsetFindOrAddGlyph::@1/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#9 ) (byte) bobCharsetFindOrAddGlyph::i1#0 ← (number) 0 to:bobCharsetFindOrAddGlyph::@20 bobCharsetFindOrAddGlyph::@4: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@2 bobCharsetFindOrAddGlyph::@7 - (byte) bob_charset_next_id#40 ← phi( bobCharsetFindOrAddGlyph::@2/(byte) bob_charset_next_id#44 bobCharsetFindOrAddGlyph::@7/(byte) bob_charset_next_id#45 ) + (byte) bob_charset_next_id#38 ← phi( bobCharsetFindOrAddGlyph::@2/(byte) bob_charset_next_id#41 bobCharsetFindOrAddGlyph::@7/(byte) bob_charset_next_id#42 ) (byte) bobCharsetFindOrAddGlyph::glyph_id#9 ← phi( bobCharsetFindOrAddGlyph::@2/(byte) bobCharsetFindOrAddGlyph::glyph_id#12 bobCharsetFindOrAddGlyph::@7/(byte) bobCharsetFindOrAddGlyph::glyph_id#13 ) (byte) bobCharsetFindOrAddGlyph::found#3 ← phi( bobCharsetFindOrAddGlyph::@2/(byte) bobCharsetFindOrAddGlyph::found#0 bobCharsetFindOrAddGlyph::@7/(byte) bobCharsetFindOrAddGlyph::found#4 ) (byte*) bobCharsetFindOrAddGlyph::bob_glyph#4 ← phi( bobCharsetFindOrAddGlyph::@2/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#6 bobCharsetFindOrAddGlyph::@7/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#7 ) @@ -534,7 +808,7 @@ bobCharsetFindOrAddGlyph::@4: scope:[bobCharsetFindOrAddGlyph] from bobCharsetF if((bool~) bobCharsetFindOrAddGlyph::$1) goto bobCharsetFindOrAddGlyph::@5 to:bobCharsetFindOrAddGlyph::@8 bobCharsetFindOrAddGlyph::@5: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@4 - (byte) bob_charset_next_id#46 ← phi( bobCharsetFindOrAddGlyph::@4/(byte) bob_charset_next_id#40 ) + (byte) bob_charset_next_id#43 ← phi( bobCharsetFindOrAddGlyph::@4/(byte) bob_charset_next_id#38 ) (byte) bobCharsetFindOrAddGlyph::glyph_id#14 ← phi( bobCharsetFindOrAddGlyph::@4/(byte) bobCharsetFindOrAddGlyph::glyph_id#9 ) (byte) bobCharsetFindOrAddGlyph::found#5 ← phi( bobCharsetFindOrAddGlyph::@4/(byte) bobCharsetFindOrAddGlyph::found#3 ) (byte*) bobCharsetFindOrAddGlyph::bob_glyph#2 ← phi( bobCharsetFindOrAddGlyph::@4/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#4 ) @@ -545,7 +819,7 @@ bobCharsetFindOrAddGlyph::@5: scope:[bobCharsetFindOrAddGlyph] from bobCharsetF if((bool~) bobCharsetFindOrAddGlyph::$3) goto bobCharsetFindOrAddGlyph::@7 to:bobCharsetFindOrAddGlyph::@11 bobCharsetFindOrAddGlyph::@7: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@5 - (byte) bob_charset_next_id#45 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#46 ) + (byte) bob_charset_next_id#42 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#43 ) (byte) bobCharsetFindOrAddGlyph::glyph_id#13 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bobCharsetFindOrAddGlyph::glyph_id#14 ) (byte) bobCharsetFindOrAddGlyph::found#4 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bobCharsetFindOrAddGlyph::found#5 ) (byte*) bobCharsetFindOrAddGlyph::bob_glyph#7 ← phi( bobCharsetFindOrAddGlyph::@5/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#2 ) @@ -555,14 +829,14 @@ bobCharsetFindOrAddGlyph::@7: scope:[bobCharsetFindOrAddGlyph] from bobCharsetF to:bobCharsetFindOrAddGlyph::@4 bobCharsetFindOrAddGlyph::@11: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@5 (byte*) bobCharsetFindOrAddGlyph::bob_glyph#13 ← phi( bobCharsetFindOrAddGlyph::@5/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#2 ) - (byte) bob_charset_next_id#39 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#46 ) + (byte) bob_charset_next_id#37 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#43 ) (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#10 ← phi( bobCharsetFindOrAddGlyph::@5/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#2 ) (byte) bobCharsetFindOrAddGlyph::glyph_id#8 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bobCharsetFindOrAddGlyph::glyph_id#14 ) (byte) bobCharsetFindOrAddGlyph::found#1 ← (number) 0 to:bobCharsetFindOrAddGlyph::@8 bobCharsetFindOrAddGlyph::@8: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@11 bobCharsetFindOrAddGlyph::@4 (byte*) bobCharsetFindOrAddGlyph::bob_glyph#12 ← phi( bobCharsetFindOrAddGlyph::@11/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#13 bobCharsetFindOrAddGlyph::@4/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#4 ) - (byte) bob_charset_next_id#32 ← phi( bobCharsetFindOrAddGlyph::@11/(byte) bob_charset_next_id#39 bobCharsetFindOrAddGlyph::@4/(byte) bob_charset_next_id#40 ) + (byte) bob_charset_next_id#31 ← phi( bobCharsetFindOrAddGlyph::@11/(byte) bob_charset_next_id#37 bobCharsetFindOrAddGlyph::@4/(byte) bob_charset_next_id#38 ) (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#6 ← phi( bobCharsetFindOrAddGlyph::@11/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#10 bobCharsetFindOrAddGlyph::@4/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#5 ) (byte) bobCharsetFindOrAddGlyph::glyph_id#6 ← phi( bobCharsetFindOrAddGlyph::@11/(byte) bobCharsetFindOrAddGlyph::glyph_id#8 bobCharsetFindOrAddGlyph::@4/(byte) bobCharsetFindOrAddGlyph::glyph_id#9 ) (byte) bobCharsetFindOrAddGlyph::found#2 ← phi( bobCharsetFindOrAddGlyph::@11/(byte) bobCharsetFindOrAddGlyph::found#1 bobCharsetFindOrAddGlyph::@4/(byte) bobCharsetFindOrAddGlyph::found#3 ) @@ -572,14 +846,14 @@ bobCharsetFindOrAddGlyph::@8: scope:[bobCharsetFindOrAddGlyph] from bobCharsetF to:bobCharsetFindOrAddGlyph::@14 bobCharsetFindOrAddGlyph::@16: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@8 (byte*) bobCharsetFindOrAddGlyph::bob_glyph#11 ← phi( bobCharsetFindOrAddGlyph::@8/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#12 ) - (byte) bob_charset_next_id#24 ← phi( bobCharsetFindOrAddGlyph::@8/(byte) bob_charset_next_id#32 ) + (byte) bob_charset_next_id#24 ← phi( bobCharsetFindOrAddGlyph::@8/(byte) bob_charset_next_id#31 ) (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#3 ← phi( bobCharsetFindOrAddGlyph::@8/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#6 ) (byte) bobCharsetFindOrAddGlyph::glyph_id#3 ← phi( bobCharsetFindOrAddGlyph::@8/(byte) bobCharsetFindOrAddGlyph::glyph_id#6 ) (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#3 (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#3 + (number) 8 to:bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@14: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@8 - (byte) bob_charset_next_id#25 ← phi( bobCharsetFindOrAddGlyph::@8/(byte) bob_charset_next_id#32 ) + (byte) bob_charset_next_id#25 ← phi( bobCharsetFindOrAddGlyph::@8/(byte) bob_charset_next_id#31 ) (byte) bobCharsetFindOrAddGlyph::glyph_id#4 ← phi( bobCharsetFindOrAddGlyph::@8/(byte) bobCharsetFindOrAddGlyph::glyph_id#6 ) (byte) bobCharsetFindOrAddGlyph::return#2 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#4 to:bobCharsetFindOrAddGlyph::@return @@ -592,7 +866,7 @@ bobCharsetFindOrAddGlyph::@return: scope:[bobCharsetFindOrAddGlyph] from bobCha to:@return bobCharsetFindOrAddGlyph::@20: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@21 bobCharsetFindOrAddGlyph::@3 (byte) bobCharsetFindOrAddGlyph::glyph_id#7 ← phi( bobCharsetFindOrAddGlyph::@21/(byte) bobCharsetFindOrAddGlyph::glyph_id#10 bobCharsetFindOrAddGlyph::@3/(byte) bobCharsetFindOrAddGlyph::glyph_id#11 ) - (byte) bob_charset_next_id#26 ← phi( bobCharsetFindOrAddGlyph::@21/(byte) bob_charset_next_id#33 bobCharsetFindOrAddGlyph::@3/(byte) bob_charset_next_id#34 ) + (byte) bob_charset_next_id#26 ← phi( bobCharsetFindOrAddGlyph::@21/(byte) bob_charset_next_id#32 bobCharsetFindOrAddGlyph::@3/(byte) bob_charset_next_id#33 ) (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#7 ← phi( bobCharsetFindOrAddGlyph::@21/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#4 bobCharsetFindOrAddGlyph::@3/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 ) (byte*) bobCharsetFindOrAddGlyph::bob_glyph#5 ← phi( bobCharsetFindOrAddGlyph::@21/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#3 bobCharsetFindOrAddGlyph::@3/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#8 ) (byte) bobCharsetFindOrAddGlyph::i1#2 ← phi( bobCharsetFindOrAddGlyph::@21/(byte) bobCharsetFindOrAddGlyph::i1#1 bobCharsetFindOrAddGlyph::@3/(byte) bobCharsetFindOrAddGlyph::i1#0 ) @@ -601,7 +875,7 @@ bobCharsetFindOrAddGlyph::@20: scope:[bobCharsetFindOrAddGlyph] from bobCharset to:bobCharsetFindOrAddGlyph::@22 bobCharsetFindOrAddGlyph::@21: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@20 (byte) bobCharsetFindOrAddGlyph::glyph_id#10 ← phi( bobCharsetFindOrAddGlyph::@20/(byte) bobCharsetFindOrAddGlyph::glyph_id#7 ) - (byte) bob_charset_next_id#33 ← phi( bobCharsetFindOrAddGlyph::@20/(byte) bob_charset_next_id#26 ) + (byte) bob_charset_next_id#32 ← phi( bobCharsetFindOrAddGlyph::@20/(byte) bob_charset_next_id#26 ) (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#4 ← phi( bobCharsetFindOrAddGlyph::@20/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#7 ) (byte) bobCharsetFindOrAddGlyph::i1#3 ← phi( bobCharsetFindOrAddGlyph::@20/(byte) bobCharsetFindOrAddGlyph::i1#2 ) (byte*) bobCharsetFindOrAddGlyph::bob_glyph#3 ← phi( bobCharsetFindOrAddGlyph::@20/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#5 ) @@ -614,38 +888,47 @@ bobCharsetFindOrAddGlyph::@22: scope:[bobCharsetFindOrAddGlyph] from bobCharset (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#17 (byte) bobCharsetFindOrAddGlyph::return#4 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#5 to:bobCharsetFindOrAddGlyph::@return -@14: scope:[] from @13 - (byte) bob_charset_next_id#27 ← phi( @13/(byte) bob_charset_next_id#6 ) +@55: scope:[] from @54 + (byte) bob_charset_next_id#27 ← phi( @54/(byte) bob_charset_next_id#6 ) call main - to:@15 -@15: scope:[] from @14 - (byte) bob_charset_next_id#18 ← phi( @14/(byte) bob_charset_next_id#1 ) + to:@56 +@56: scope:[] from @55 + (byte) bob_charset_next_id#18 ← phi( @55/(byte) bob_charset_next_id#1 ) (byte) bob_charset_next_id#9 ← (byte) bob_charset_next_id#18 to:@end -@end: scope:[] from @15 +@end: scope:[] from @56 SYMBOL TABLE SSA -(label) @13 -(label) @14 -(label) @15 +(label) @54 +(label) @55 +(label) @56 (label) @begin (label) @end -(const byte*) BOB_CHARSET = (byte*)(number) $6000 +(const byte*) BOB_CHARSET = (byte*)(number) $4000 +(const byte*) BOB_SCREEN = (byte*)(number) $4800 (const byte) BOB_SHIFTS_X = (number) 4 (const byte) BOB_SHIFTS_Y = (number) 8 (const byte) BOB_SUBTABLE_SIZE = (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y (const byte*) BOB_TABLES = { fill( 9*8*4, 0) } (const byte*) BORDERCOL = (byte*)(number) $d020 +(const byte*) CHARSET_BASIC = (byte*)(number) $1000 +(const byte*) CIA1_PORT_A = (byte*)(number) $dc00 +(const byte*) CIA1_PORT_B = (byte*)(number) $dc01 (const byte*) CIA2_PORT_A = (byte*)(number) $dd00 (const byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 (const byte*) D018 = (byte*)(number) $d018 +(const byte) KEY_SPACE = (number) $3c (const byte*) PROTO_BOB = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) .for (var x=0;x<3; x++) .for (var y=0; y<24; y++) .byte pic.getSinglecolorByte(x,y) }} +(const byte) RADIX::BINARY = (number) 2 +(const byte) RADIX::DECIMAL = (number) $a +(const byte) RADIX::HEXADECIMAL = (number) $10 +(const byte) RADIX::OCTAL = (number) 8 (const byte*) RASTER = (byte*)(number) $d012 -(const byte*) SCREEN = (byte*)(number) $4000 +(const byte*) SCREEN_BASIC = (byte*)(number) $400 (const byte*) SIN_X_TAB = kickasm {{ .fill $200, 75.5+75.5*sin(i*2*PI/256) }} (const byte*) SIN_Y_TAB = kickasm {{ .fill $200, 91.5+91.5*sin(i*2*PI/256) }} (byte()) bobCharsetFindOrAddGlyph((byte*) bobCharsetFindOrAddGlyph::bob_glyph) @@ -797,42 +1080,144 @@ SYMBOL TABLE SSA (byte) bob_charset_next_id#56 (byte) bob_charset_next_id#57 (byte) bob_charset_next_id#58 +(byte) bob_charset_next_id#59 (byte) bob_charset_next_id#6 +(byte) bob_charset_next_id#60 +(byte) bob_charset_next_id#61 +(byte) bob_charset_next_id#62 +(byte) bob_charset_next_id#63 +(byte) bob_charset_next_id#64 +(byte) bob_charset_next_id#65 +(byte) bob_charset_next_id#66 +(byte) bob_charset_next_id#67 +(byte) bob_charset_next_id#68 +(byte) bob_charset_next_id#69 (byte) bob_charset_next_id#7 +(byte) bob_charset_next_id#70 +(byte) bob_charset_next_id#71 +(byte) bob_charset_next_id#72 +(byte) bob_charset_next_id#73 +(byte) bob_charset_next_id#74 +(byte) bob_charset_next_id#75 +(byte) bob_charset_next_id#76 +(byte) bob_charset_next_id#77 +(byte) bob_charset_next_id#78 +(byte) bob_charset_next_id#79 (byte) bob_charset_next_id#8 +(byte) bob_charset_next_id#80 (byte) bob_charset_next_id#9 +(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) +(number~) 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::colidx +(byte) keyboard_key_pressed::colidx#0 +(byte) keyboard_key_pressed::colidx#1 +(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::return +(byte) keyboard_key_pressed::return#0 +(byte) keyboard_key_pressed::return#1 +(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::rowidx +(byte) keyboard_key_pressed::rowidx#0 +(const byte*) keyboard_matrix_col_bitmask = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 } +(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 +(const byte*) keyboard_matrix_row_bitmask = { (byte)(number) $fe, (byte)(number) $fd, (byte)(number) $fb, (byte)(number) $f7, (byte)(number) $ef, (byte)(number) $df, (byte)(number) $bf, (byte)(number) $7f } (void()) main() +(number~) main::$10 +(bool~) main::$12 +(bool~) main::$13 +(byte~) main::$14 +(bool~) main::$15 +(byte~) main::$16 +(bool~) main::$17 (byte~) main::$2 -(bool~) main::$4 +(byte~) main::$25 +(bool~) main::$26 +(bool~) main::$27 +(bool~) main::$28 +(bool~) main::$29 +(byte~) main::$6 +(number~) main::$7 +(number~) main::$8 +(number~) main::$9 (label) main::@1 -(label) main::@10 (label) main::@11 -(label) main::@12 (label) main::@13 -(label) main::@14 -(label) main::@15 -(label) main::@4 +(label) main::@17 +(label) main::@2 +(label) main::@20 +(label) main::@21 +(label) main::@25 +(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::@38 +(label) main::@39 +(label) main::@40 +(label) main::@41 +(label) main::@42 +(label) main::@43 +(label) main::@44 (label) main::@5 -(label) main::@9 (label) main::@return (byte) main::sin_x_idx (byte) main::sin_x_idx#0 (byte) main::sin_x_idx#1 +(byte) main::sin_x_idx#10 (byte) main::sin_x_idx#2 (byte) main::sin_x_idx#3 (byte) main::sin_x_idx#4 (byte) main::sin_x_idx#5 (byte) main::sin_x_idx#6 (byte) main::sin_x_idx#7 +(byte) main::sin_x_idx#8 +(byte) main::sin_x_idx#9 (byte) main::sin_y_idx (byte) main::sin_y_idx#0 (byte) main::sin_y_idx#1 +(byte) main::sin_y_idx#10 (byte) main::sin_y_idx#2 (byte) main::sin_y_idx#3 (byte) main::sin_y_idx#4 (byte) main::sin_y_idx#5 (byte) main::sin_y_idx#6 (byte) main::sin_y_idx#7 +(byte) main::sin_y_idx#8 +(byte) main::sin_y_idx#9 (label) main::toD0181 (word~) main::toD0181_$0 (number~) main::toD0181_$1 @@ -855,6 +1240,28 @@ SYMBOL TABLE SSA (byte*) main::toD0181_screen (byte*) main::toD0181_screen#0 (byte*) main::toD0181_screen#1 +(label) main::toD0182 +(word~) main::toD0182_$0 +(number~) main::toD0182_$1 +(number~) main::toD0182_$2 +(number~) main::toD0182_$3 +(word~) main::toD0182_$4 +(byte~) main::toD0182_$5 +(number~) main::toD0182_$6 +(number~) main::toD0182_$7 +(number~) main::toD0182_$8 +(label) main::toD0182_@return +(byte*) main::toD0182_gfx +(byte*) main::toD0182_gfx#0 +(byte*) main::toD0182_gfx#1 +(byte) main::toD0182_return +(byte) main::toD0182_return#0 +(byte) main::toD0182_return#1 +(byte) main::toD0182_return#2 +(byte) main::toD0182_return#3 +(byte*) main::toD0182_screen +(byte*) main::toD0182_screen#0 +(byte*) main::toD0182_screen#1 (label) main::vicSelectGfxBank1 (byte~) main::vicSelectGfxBank1_$0 (label) main::vicSelectGfxBank1_@1 @@ -875,6 +1282,38 @@ SYMBOL TABLE SSA (byte) main::vicSelectGfxBank1_toDd001_return#1 (byte) main::vicSelectGfxBank1_toDd001_return#2 (byte) main::vicSelectGfxBank1_toDd001_return#3 +(label) main::vicSelectGfxBank2 +(byte~) main::vicSelectGfxBank2_$0 +(label) main::vicSelectGfxBank2_@1 +(byte*) main::vicSelectGfxBank2_gfx +(byte*) main::vicSelectGfxBank2_gfx#0 +(byte*) main::vicSelectGfxBank2_gfx#1 +(label) main::vicSelectGfxBank2_toDd001 +(word~) main::vicSelectGfxBank2_toDd001_$0 +(byte~) main::vicSelectGfxBank2_toDd001_$1 +(number~) main::vicSelectGfxBank2_toDd001_$2 +(number~) main::vicSelectGfxBank2_toDd001_$3 +(label) main::vicSelectGfxBank2_toDd001_@return +(byte*) main::vicSelectGfxBank2_toDd001_gfx +(byte*) main::vicSelectGfxBank2_toDd001_gfx#0 +(byte*) main::vicSelectGfxBank2_toDd001_gfx#1 +(byte) main::vicSelectGfxBank2_toDd001_return +(byte) main::vicSelectGfxBank2_toDd001_return#0 +(byte) main::vicSelectGfxBank2_toDd001_return#1 +(byte) main::vicSelectGfxBank2_toDd001_return#2 +(byte) main::vicSelectGfxBank2_toDd001_return#3 +(byte) main::x +(byte) main::x#0 +(byte) main::x#1 +(byte) main::x#2 +(byte) main::x#3 +(byte) main::x#4 +(byte) main::x#5 +(byte) main::y +(byte) main::y#0 +(byte) main::y#1 +(byte) main::y#2 +(byte) main::y#3 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (bool~) memset::$0 (bool~) memset::$1 @@ -892,6 +1331,7 @@ SYMBOL TABLE SSA (byte) memset::c#2 (byte) memset::c#3 (byte) memset::c#4 +(byte) memset::c#5 (byte*) memset::dst (byte*) memset::dst#0 (byte*) memset::dst#1 @@ -905,11 +1345,13 @@ SYMBOL TABLE SSA (word) memset::num#0 (word) memset::num#1 (word) memset::num#2 +(word) memset::num#3 (void*) memset::return (void*) memset::return#0 (void*) memset::return#1 (void*) memset::return#2 (void*) memset::return#3 +(void*) memset::return#4 (void*) memset::str (void*) memset::str#0 (void*) memset::str#1 @@ -917,6 +1359,7 @@ SYMBOL TABLE SSA (void*) memset::str#3 (void*) memset::str#4 (void*) memset::str#5 +(void*) memset::str#6 (void()) prepareBobs() (bool~) prepareBobs::$1 (bool~) prepareBobs::$2 @@ -1019,6 +1462,9 @@ SYMBOL TABLE SSA (byte) renderBob::xpos#1 (byte) renderBob::xpos#2 (byte) renderBob::xpos#3 +(byte) renderBob::xpos#4 +(byte) renderBob::xpos#5 +(byte) renderBob::xpos#6 (byte) renderBob::y_char_offset (byte) renderBob::y_char_offset#0 (word) renderBob::y_offset @@ -1028,6 +1474,9 @@ SYMBOL TABLE SSA (byte) renderBob::ypos#1 (byte) renderBob::ypos#2 (byte) renderBob::ypos#3 +(byte) renderBob::ypos#4 +(byte) renderBob::ypos#5 +(byte) renderBob::ypos#6 (void()) shiftProtoBobDown() (bool~) shiftProtoBobDown::$0 (label) shiftProtoBobDown::@1 @@ -1095,7 +1544,10 @@ SYMBOL TABLE SSA (byte) shiftProtoBobRight::new_carry (byte) shiftProtoBobRight::new_carry#0 -Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0 +Adding number conversion cast (unumber) 7 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#3 & (number) 7 +Adding number conversion cast (unumber) keyboard_key_pressed::$0 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#3 & (unumber)(number) 7 +Adding number conversion cast (unumber) 3 in (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_key_pressed::key#3 >> (number) 3 Adding number conversion cast (unumber) 3 in *((const byte*) CIA2_PORT_A_DDR) ← (number) 3 Adding number conversion cast (unumber) $40 in (number~) main::vicSelectGfxBank1_toDd001_$2 ← (byte~) main::vicSelectGfxBank1_toDd001_$1 / (number) $40 Adding number conversion cast (unumber) main::vicSelectGfxBank1_toDd001_$2 in (number~) main::vicSelectGfxBank1_toDd001_$2 ← (byte~) main::vicSelectGfxBank1_toDd001_$1 / (unumber)(number) $40 @@ -1113,20 +1565,52 @@ Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0 Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 Adding number conversion cast (unumber) 0 in (byte) memset::c#0 ← (number) 0 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 +Adding number conversion cast (unumber) $c in (number~) main::$7 ← (byte) main::x#2 * (number) $c +Adding number conversion cast (unumber) main::$7 in (number~) main::$7 ← (byte) main::x#2 * (unumber)(number) $c +Adding number conversion cast (unumber) main::$8 in (number~) main::$8 ← (unumber~) main::$7 + (byte) main::y#2 +Adding number conversion cast (unumber) $18 in (number~) main::$9 ← (byte) main::y#2 * (number) $18 +Adding number conversion cast (unumber) main::$9 in (number~) main::$9 ← (byte) main::y#2 * (unumber)(number) $18 +Adding number conversion cast (unumber) main::$10 in (number~) main::$10 ← (unumber~) main::$9 + (byte) main::x#2 +Adding number conversion cast (unumber) 0 in (bool~) main::$28 ← (number) 0 != (byte~) main::$14 +Adding number conversion cast (unumber) 0 in (bool~) main::$27 ← (number) 0 != (byte~) main::$16 +Adding number conversion cast (unumber) 0 in (byte) memset::c#1 ← (number) 0 +Adding number conversion cast (unumber) $3e8 in (word) memset::num#1 ← (number) $3e8 Adding number conversion cast (unumber) 0 in (byte) main::sin_x_idx#0 ← (number) 0 Adding number conversion cast (unumber) $49 in (byte) main::sin_y_idx#0 ← (number) $49 -Adding number conversion cast (unumber) $ff in (bool~) main::$4 ← *((const byte*) RASTER) != (number) $ff -Adding number conversion cast (unumber) $f in (byte) renderBob::xpos#1 ← *((const byte*) SIN_X_TAB+(number) $f + (byte) main::sin_x_idx#3) -Adding number conversion cast (unumber) $b in (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB+(number) $b + (byte) main::sin_y_idx#3) -Adding number conversion cast (unumber) $16 in (byte) renderBob::xpos#2 ← *((const byte*) SIN_X_TAB+(number) $16 + (byte) main::sin_x_idx#4) -Adding number conversion cast (unumber) $1e in (byte) renderBob::ypos#2 ← *((const byte*) SIN_Y_TAB+(number) $1e + (byte) main::sin_y_idx#4) +Adding number conversion cast (unumber) $f8 in (bool~) main::$17 ← *((const byte*) RASTER) < (number) $f8 +Adding number conversion cast (unumber) $15*4 in (byte) renderBob::xpos#1 ← *((const byte*) SIN_X_TAB+(number) $15*(number) 4 + (byte) main::sin_x_idx#2) +Adding number conversion cast (unumber) $d*0 in (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB+(number) $d*(number) 0 + (byte) main::sin_y_idx#2) +Adding number conversion cast (unumber) $13*3 in (byte) renderBob::xpos#2 ← *((const byte*) SIN_X_TAB+(number) $13*(number) 3 + (byte) main::sin_x_idx#3) +Adding number conversion cast (unumber) $f*1 in (byte) renderBob::ypos#2 ← *((const byte*) SIN_Y_TAB+(number) $f*(number) 1 + (byte) main::sin_y_idx#3) +Adding number conversion cast (unumber) $11*2 in (byte) renderBob::xpos#3 ← *((const byte*) SIN_X_TAB+(number) $11*(number) 2 + (byte) main::sin_x_idx#4) +Adding number conversion cast (unumber) $11*2 in (byte) renderBob::ypos#3 ← *((const byte*) SIN_Y_TAB+(number) $11*(number) 2 + (byte) main::sin_y_idx#4) +Adding number conversion cast (unumber) $f*1 in (byte) renderBob::xpos#4 ← *((const byte*) SIN_X_TAB+(number) $f*(number) 1 + (byte) main::sin_x_idx#5) +Adding number conversion cast (unumber) $13*3 in (byte) renderBob::ypos#4 ← *((const byte*) SIN_Y_TAB+(number) $13*(number) 3 + (byte) main::sin_y_idx#5) +Adding number conversion cast (unumber) $d*0 in (byte) renderBob::xpos#5 ← *((const byte*) SIN_X_TAB+(number) $d*(number) 0 + (byte) main::sin_x_idx#6) +Adding number conversion cast (unumber) $15*4 in (byte) renderBob::ypos#5 ← *((const byte*) SIN_Y_TAB+(number) $15*(number) 4 + (byte) main::sin_y_idx#6) +Adding number conversion cast (unumber) 0 in (bool~) main::$29 ← (number) 0 != (byte~) main::$25 +Adding number conversion cast (unumber) 3 in *((const byte*) CIA2_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) $40 in (number~) main::vicSelectGfxBank2_toDd001_$2 ← (byte~) main::vicSelectGfxBank2_toDd001_$1 / (number) $40 +Adding number conversion cast (unumber) main::vicSelectGfxBank2_toDd001_$2 in (number~) main::vicSelectGfxBank2_toDd001_$2 ← (byte~) main::vicSelectGfxBank2_toDd001_$1 / (unumber)(number) $40 +Adding number conversion cast (unumber) 3 in (number~) main::vicSelectGfxBank2_toDd001_$3 ← (number) 3 ^ (unumber~) main::vicSelectGfxBank2_toDd001_$2 +Adding number conversion cast (unumber) main::vicSelectGfxBank2_toDd001_$3 in (number~) main::vicSelectGfxBank2_toDd001_$3 ← (unumber)(number) 3 ^ (unumber~) main::vicSelectGfxBank2_toDd001_$2 +Adding number conversion cast (unumber) $3fff in (number~) main::toD0182_$1 ← (word~) main::toD0182_$0 & (number) $3fff +Adding number conversion cast (unumber) main::toD0182_$1 in (number~) main::toD0182_$1 ← (word~) main::toD0182_$0 & (unumber)(number) $3fff +Adding number conversion cast (unumber) 4 in (number~) main::toD0182_$2 ← (unumber~) main::toD0182_$1 * (number) 4 +Adding number conversion cast (unumber) main::toD0182_$2 in (number~) main::toD0182_$2 ← (unumber~) main::toD0182_$1 * (unumber)(number) 4 +Adding number conversion cast (unumber) main::toD0182_$3 in (number~) main::toD0182_$3 ← > (unumber~) main::toD0182_$2 +Adding number conversion cast (unumber) 4 in (number~) main::toD0182_$6 ← (byte~) main::toD0182_$5 / (number) 4 +Adding number conversion cast (unumber) main::toD0182_$6 in (number~) main::toD0182_$6 ← (byte~) main::toD0182_$5 / (unumber)(number) 4 +Adding number conversion cast (unumber) $f in (number~) main::toD0182_$7 ← (unumber~) main::toD0182_$6 & (number) $f +Adding number conversion cast (unumber) main::toD0182_$7 in (number~) main::toD0182_$7 ← (unumber~) main::toD0182_$6 & (unumber)(number) $f +Adding number conversion cast (unumber) main::toD0182_$8 in (number~) main::toD0182_$8 ← (unumber~) main::toD0182_$3 | (unumber~) main::toD0182_$7 Adding number conversion cast (unumber) $28 in (number~) renderBob::$3 ← (word~) renderBob::$2 * (number) $28 Adding number conversion cast (unumber) renderBob::$3 in (number~) renderBob::$3 ← (word~) renderBob::$2 * (unumber)(number) $28 -Adding number conversion cast (unumber) 7 in (number~) renderBob::$6 ← (byte) renderBob::ypos#3 & (number) 7 -Adding number conversion cast (unumber) renderBob::$6 in (number~) renderBob::$6 ← (byte) renderBob::ypos#3 & (unumber)(number) 7 +Adding number conversion cast (unumber) 7 in (number~) renderBob::$6 ← (byte) renderBob::ypos#6 & (number) 7 +Adding number conversion cast (unumber) renderBob::$6 in (number~) renderBob::$6 ← (byte) renderBob::ypos#6 & (unumber)(number) 7 Adding number conversion cast (unumber) renderBob::$7 in (number~) renderBob::$7 ← (unumber~) renderBob::$6 * (const byte) BOB_SHIFTS_X -Adding number conversion cast (unumber) 3 in (number~) renderBob::$8 ← (byte) renderBob::xpos#3 & (number) 3 -Adding number conversion cast (unumber) renderBob::$8 in (number~) renderBob::$8 ← (byte) renderBob::xpos#3 & (unumber)(number) 3 +Adding number conversion cast (unumber) 3 in (number~) renderBob::$8 ← (byte) renderBob::xpos#6 & (number) 3 +Adding number conversion cast (unumber) renderBob::$8 in (number~) renderBob::$8 ← (byte) renderBob::xpos#6 & (unumber)(number) 3 Adding number conversion cast (unumber) renderBob::$9 in (number~) renderBob::$9 ← (unumber~) renderBob::$7 + (unumber~) renderBob::$8 Adding number conversion cast (unumber) 0*BOB_SUBTABLE_SIZE in *((byte*) renderBob::screen#0 + (number) 0) ← *((const byte*) BOB_TABLES+(number) 0*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) Adding number conversion cast (unumber) 0 in *((byte*) renderBob::screen#0 + (number) 0) ← *((const byte*) BOB_TABLES+(unumber)(number) 0*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) @@ -1197,16 +1681,22 @@ Adding number conversion cast (unumber) 0 in (bool~) bobCharsetFindOrAddGlyph::$ Adding number conversion cast (unumber) 8 in (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#3 + (number) 8 Adding number conversion cast (unumber) 8 in (bool~) bobCharsetFindOrAddGlyph::$5 ← (byte) bobCharsetFindOrAddGlyph::i1#2 < (number) 8 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2 -Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 +Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 +Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 Inlining cast *((const byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast (word~) main::vicSelectGfxBank1_toDd001_$0 ← (word)(byte*) main::vicSelectGfxBank1_toDd001_gfx#1 Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast (byte) memset::c#0 ← (unumber)(number) 0 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 +Inlining cast (byte) memset::c#1 ← (unumber)(number) 0 +Inlining cast (word) memset::num#1 ← (unumber)(number) $3e8 Inlining cast (byte) main::sin_x_idx#0 ← (unumber)(number) 0 Inlining cast (byte) main::sin_y_idx#0 ← (unumber)(number) $49 +Inlining cast *((const byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast (word~) main::vicSelectGfxBank2_toDd001_$0 ← (word)(byte*) main::vicSelectGfxBank2_toDd001_gfx#1 +Inlining cast (word~) main::toD0182_$0 ← (word)(byte*) main::toD0182_screen#1 +Inlining cast (word~) main::toD0182_$4 ← (word)(byte*) main::toD0182_gfx#1 Inlining cast (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 Inlining cast (byte) bob_charset_next_id#2 ← (unumber)(number) 0 Inlining cast (byte) prepareBobs::bob_table_idx#0 ← (unumber)(number) 0 @@ -1230,11 +1720,33 @@ Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53272 +Simplifying constant pointer cast (byte*) 56320 +Simplifying constant pointer cast (byte*) 56321 Simplifying constant pointer cast (byte*) 56576 Simplifying constant pointer cast (byte*) 56578 +Simplifying constant integer cast $fe +Simplifying constant integer cast $fd +Simplifying constant integer cast $fb +Simplifying constant integer cast $f7 +Simplifying constant integer cast $ef +Simplifying constant integer cast $df +Simplifying constant integer cast $bf +Simplifying constant integer cast $7f +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast 4 +Simplifying constant integer cast 8 +Simplifying constant integer cast $10 +Simplifying constant integer cast $20 +Simplifying constant integer cast $40 +Simplifying constant integer cast $80 +Simplifying constant pointer cast (byte*) 1024 +Simplifying constant pointer cast (byte*) 4096 +Simplifying constant pointer cast (byte*) 18432 Simplifying constant pointer cast (byte*) 16384 -Simplifying constant pointer cast (byte*) 24576 Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 3 Simplifying constant integer cast 3 Simplifying constant integer cast $40 Simplifying constant integer cast 3 @@ -1244,13 +1756,23 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast 0 Simplifying constant integer cast $3e8 +Simplifying constant integer cast $c +Simplifying constant integer cast $18 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 Simplifying constant integer cast $49 -Simplifying constant integer cast $ff +Simplifying constant integer cast $f8 +Simplifying constant integer cast 0 +Simplifying constant integer cast 3 +Simplifying constant integer cast $40 +Simplifying constant integer cast 3 +Simplifying constant integer cast $3fff +Simplifying constant integer cast 4 +Simplifying constant integer cast 4 Simplifying constant integer cast $f -Simplifying constant integer cast $b -Simplifying constant integer cast $16 -Simplifying constant integer cast $1e Simplifying constant integer cast $28 Simplifying constant integer cast 7 Simplifying constant integer cast 3 @@ -1322,6 +1844,8 @@ Simplifying constant integer cast 8 Simplifying constant integer cast 8 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 7 +Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 3 @@ -1331,13 +1855,23 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e8 +Finalized unsigned number type (byte) $c +Finalized unsigned number type (byte) $18 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $49 -Finalized unsigned number type (byte) $ff +Finalized unsigned number type (byte) $f8 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 3 +Finalized unsigned number type (byte) $40 +Finalized unsigned number type (byte) 3 +Finalized unsigned number type (word) $3fff +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) $b -Finalized unsigned number type (byte) $16 -Finalized unsigned number type (byte) $1e Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 3 @@ -1399,6 +1933,7 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 8 Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to byte in (unumber~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#3 & (byte) 7 Inferred type updated to byte in (unumber~) main::vicSelectGfxBank1_toDd001_$2 ← (byte~) main::vicSelectGfxBank1_toDd001_$1 / (byte) $40 Inferred type updated to byte in (unumber~) main::vicSelectGfxBank1_toDd001_$3 ← (byte) 3 ^ (byte~) main::vicSelectGfxBank1_toDd001_$2 Inferred type updated to word in (unumber~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (word) $3fff @@ -1407,35 +1942,71 @@ Inferred type updated to byte in (unumber~) main::toD0181_$3 ← > (word~) main: Inferred type updated to byte in (unumber~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (byte) 4 Inferred type updated to byte in (unumber~) main::toD0181_$7 ← (byte~) main::toD0181_$6 & (byte) $f Inferred type updated to byte in (unumber~) main::toD0181_$8 ← (byte~) main::toD0181_$3 | (byte~) main::toD0181_$7 +Inferred type updated to byte in (unumber~) main::$7 ← (byte) main::x#2 * (byte) $c +Inferred type updated to byte in (unumber~) main::$8 ← (byte~) main::$7 + (byte) main::y#2 +Inferred type updated to byte in (unumber~) main::$9 ← (byte) main::y#2 * (byte) $18 +Inferred type updated to byte in (unumber~) main::$10 ← (byte~) main::$9 + (byte) main::x#2 +Inferred type updated to byte in (unumber~) main::vicSelectGfxBank2_toDd001_$2 ← (byte~) main::vicSelectGfxBank2_toDd001_$1 / (byte) $40 +Inferred type updated to byte in (unumber~) main::vicSelectGfxBank2_toDd001_$3 ← (byte) 3 ^ (byte~) main::vicSelectGfxBank2_toDd001_$2 +Inferred type updated to word in (unumber~) main::toD0182_$1 ← (word~) main::toD0182_$0 & (word) $3fff +Inferred type updated to word in (unumber~) main::toD0182_$2 ← (word~) main::toD0182_$1 * (byte) 4 +Inferred type updated to byte in (unumber~) main::toD0182_$3 ← > (word~) main::toD0182_$2 +Inferred type updated to byte in (unumber~) main::toD0182_$6 ← (byte~) main::toD0182_$5 / (byte) 4 +Inferred type updated to byte in (unumber~) main::toD0182_$7 ← (byte~) main::toD0182_$6 & (byte) $f +Inferred type updated to byte in (unumber~) main::toD0182_$8 ← (byte~) main::toD0182_$3 | (byte~) main::toD0182_$7 Inferred type updated to word in (unumber~) renderBob::$3 ← (word~) renderBob::$2 * (byte) $28 -Inferred type updated to byte in (unumber~) renderBob::$6 ← (byte) renderBob::ypos#3 & (byte) 7 +Inferred type updated to byte in (unumber~) renderBob::$6 ← (byte) renderBob::ypos#6 & (byte) 7 Inferred type updated to byte in (unumber~) renderBob::$7 ← (byte~) renderBob::$6 * (const byte) BOB_SHIFTS_X -Inferred type updated to byte in (unumber~) renderBob::$8 ← (byte) renderBob::xpos#3 & (byte) 3 +Inferred type updated to byte in (unumber~) renderBob::$8 ← (byte) renderBob::xpos#6 & (byte) 3 Inferred type updated to byte in (unumber~) renderBob::$9 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 Inferred type updated to byte in (unumber~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 -Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0 -Inversing boolean not [225] (bool~) bobCharsetFindOrAddGlyph::$3 ← *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#2 + (byte) bobCharsetFindOrAddGlyph::i#3) == *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#2 + (byte) bobCharsetFindOrAddGlyph::i#3) from [224] (bool~) bobCharsetFindOrAddGlyph::$2 ← *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#2 + (byte) bobCharsetFindOrAddGlyph::i#3) != *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#2 + (byte) bobCharsetFindOrAddGlyph::i#3) -Inversing boolean not [233] (bool~) bobCharsetFindOrAddGlyph::$4 ← (byte) 0 == (byte) bobCharsetFindOrAddGlyph::found#2 from [232] (bool~) bobCharsetFindOrAddGlyph::$6 ← (byte) 0 != (byte) bobCharsetFindOrAddGlyph::found#2 +Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#2 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#2 > (byte) 0 +Inversing boolean not [113] (bool~) main::$15 ← (byte) 0 == (byte~) main::$14 from [112] (bool~) main::$28 ← (byte) 0 != (byte~) main::$14 +Inversing boolean not [168] (bool~) main::$26 ← (byte) 0 == (byte~) main::$25 from [167] (bool~) main::$29 ← (byte) 0 != (byte~) main::$25 +Inversing boolean not [342] (bool~) bobCharsetFindOrAddGlyph::$3 ← *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#2 + (byte) bobCharsetFindOrAddGlyph::i#3) == *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#2 + (byte) bobCharsetFindOrAddGlyph::i#3) from [341] (bool~) bobCharsetFindOrAddGlyph::$2 ← *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#2 + (byte) bobCharsetFindOrAddGlyph::i#3) != *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#2 + (byte) bobCharsetFindOrAddGlyph::i#3) +Inversing boolean not [350] (bool~) bobCharsetFindOrAddGlyph::$4 ← (byte) 0 == (byte) bobCharsetFindOrAddGlyph::found#2 from [349] (bool~) bobCharsetFindOrAddGlyph::$6 ← (byte) 0 != (byte) bobCharsetFindOrAddGlyph::found#2 Successful SSA optimization Pass2UnaryNotSimplification -Alias (void*) memset::return#0 = (void*) memset::str#1 (void*) memset::return#3 (void*) memset::return#1 -Alias (void*) memset::str#2 = (void*) memset::str#3 -Alias (word) memset::num#1 = (word) memset::num#2 -Alias (byte) memset::c#3 = (byte) memset::c#4 +Alias (void*) memset::return#0 = (void*) memset::str#2 (void*) memset::return#4 (void*) memset::return#1 +Alias (void*) memset::str#3 = (void*) memset::str#4 +Alias (word) memset::num#2 = (word) memset::num#3 +Alias (byte) memset::c#4 = (byte) memset::c#5 Alias (byte*) memset::end#0 = (byte*~) memset::$3 -Alias (byte) memset::c#1 = (byte) memset::c#2 +Alias (byte) memset::c#2 = (byte) memset::c#3 Alias (byte*) memset::dst#2 = (byte*) memset::dst#3 Alias (byte*) memset::end#1 = (byte*) memset::end#2 -Alias (void*) memset::str#4 = (void*) memset::str#5 -Alias (byte) bob_charset_next_id#0 = (byte) bob_charset_next_id#10 (byte) bob_charset_next_id#58 (byte) bob_charset_next_id#57 (byte) bob_charset_next_id#56 (byte) bob_charset_next_id#54 (byte) bob_charset_next_id#51 (byte) bob_charset_next_id#47 (byte) bob_charset_next_id#41 (byte) bob_charset_next_id#35 (byte) bob_charset_next_id#28 +Alias (void*) memset::str#5 = (void*) memset::str#6 +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_key_pressed::colidx#0 = (byte~) keyboard_key_pressed::$0 (byte) keyboard_key_pressed::colidx#1 +Alias (byte) keyboard_key_pressed::rowidx#0 = (byte~) keyboard_key_pressed::$1 +Alias (byte) keyboard_matrix_read::return#2 = (byte) keyboard_matrix_read::return#4 +Alias (byte) keyboard_key_pressed::return#0 = (byte~) keyboard_key_pressed::$3 (byte) keyboard_key_pressed::return#5 (byte) keyboard_key_pressed::return#1 +Alias (byte) bob_charset_next_id#0 = (byte) bob_charset_next_id#10 (byte) bob_charset_next_id#80 (byte) bob_charset_next_id#79 (byte) bob_charset_next_id#78 (byte) bob_charset_next_id#77 (byte) bob_charset_next_id#76 (byte) bob_charset_next_id#75 (byte) bob_charset_next_id#74 (byte) bob_charset_next_id#73 (byte) bob_charset_next_id#72 Alias (byte*) main::vicSelectGfxBank1_gfx#0 = (byte*) main::vicSelectGfxBank1_gfx#1 (byte*) main::vicSelectGfxBank1_toDd001_gfx#0 (byte*) main::vicSelectGfxBank1_toDd001_gfx#1 Alias (byte) main::vicSelectGfxBank1_toDd001_return#0 = (byte~) main::vicSelectGfxBank1_toDd001_$3 (byte) main::vicSelectGfxBank1_toDd001_return#2 (byte) main::vicSelectGfxBank1_toDd001_return#1 (byte) main::vicSelectGfxBank1_toDd001_return#3 (byte~) main::vicSelectGfxBank1_$0 Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1 Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 Alias (byte) main::toD0181_return#0 = (byte~) main::toD0181_$8 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$2 -Alias (byte) main::sin_x_idx#2 = (byte) main::sin_x_idx#6 (byte) main::sin_x_idx#3 (byte) main::sin_x_idx#4 (byte) main::sin_x_idx#5 -Alias (byte) main::sin_y_idx#2 = (byte) main::sin_y_idx#6 (byte) main::sin_y_idx#3 (byte) main::sin_y_idx#4 (byte) main::sin_y_idx#5 -Alias (byte) bob_charset_next_id#29 = (byte) bob_charset_next_id#48 (byte) bob_charset_next_id#52 (byte) bob_charset_next_id#42 (byte) bob_charset_next_id#36 -Alias (byte) bob_charset_next_id#1 = (byte) bob_charset_next_id#11 (byte) bob_charset_next_id#20 +Alias (byte) renderBob::xpos#0 = (byte~) main::$8 +Alias (byte) renderBob::ypos#0 = (byte~) main::$10 +Alias (byte) main::y#2 = (byte) main::y#3 +Alias (byte) main::x#2 = (byte) main::x#5 (byte) main::x#3 +Alias (byte) bob_charset_next_id#67 = (byte) bob_charset_next_id#69 (byte) bob_charset_next_id#70 +Alias (byte) keyboard_key_pressed::return#2 = (byte) keyboard_key_pressed::return#6 +Alias (byte) bob_charset_next_id#63 = (byte) bob_charset_next_id#65 +Alias (byte) keyboard_key_pressed::return#3 = (byte) keyboard_key_pressed::return#7 +Alias (byte) bob_charset_next_id#55 = (byte) bob_charset_next_id#59 (byte) bob_charset_next_id#61 (byte) bob_charset_next_id#57 +Alias (byte) main::sin_x_idx#2 = (byte) main::sin_x_idx#8 (byte) main::sin_x_idx#3 (byte) main::sin_x_idx#4 (byte) main::sin_x_idx#5 (byte) main::sin_x_idx#6 (byte) main::sin_x_idx#7 +Alias (byte) main::sin_y_idx#2 = (byte) main::sin_y_idx#8 (byte) main::sin_y_idx#3 (byte) main::sin_y_idx#4 (byte) main::sin_y_idx#5 (byte) main::sin_y_idx#6 (byte) main::sin_y_idx#7 +Alias (byte) bob_charset_next_id#54 = (byte) bob_charset_next_id#66 (byte) bob_charset_next_id#68 (byte) bob_charset_next_id#64 (byte) bob_charset_next_id#62 (byte) bob_charset_next_id#60 (byte) bob_charset_next_id#58 (byte) bob_charset_next_id#56 +Alias (byte) keyboard_key_pressed::return#4 = (byte) keyboard_key_pressed::return#8 +Alias (byte) main::sin_x_idx#1 = (byte) main::sin_x_idx#10 +Alias (byte) main::sin_y_idx#1 = (byte) main::sin_y_idx#10 +Alias (byte*) main::vicSelectGfxBank2_gfx#0 = (byte*) main::vicSelectGfxBank2_gfx#1 (byte*) main::vicSelectGfxBank2_toDd001_gfx#0 (byte*) main::vicSelectGfxBank2_toDd001_gfx#1 +Alias (byte) bob_charset_next_id#1 = (byte) bob_charset_next_id#51 (byte) bob_charset_next_id#52 (byte) bob_charset_next_id#49 (byte) bob_charset_next_id#47 (byte) bob_charset_next_id#44 (byte) bob_charset_next_id#39 (byte) bob_charset_next_id#34 (byte) bob_charset_next_id#28 (byte) bob_charset_next_id#20 (byte) bob_charset_next_id#11 +Alias (byte) main::vicSelectGfxBank2_toDd001_return#0 = (byte~) main::vicSelectGfxBank2_toDd001_$3 (byte) main::vicSelectGfxBank2_toDd001_return#2 (byte) main::vicSelectGfxBank2_toDd001_return#1 (byte) main::vicSelectGfxBank2_toDd001_return#3 (byte~) main::vicSelectGfxBank2_$0 +Alias (byte*) main::toD0182_screen#0 = (byte*) main::toD0182_screen#1 +Alias (byte*) main::toD0182_gfx#0 = (byte*) main::toD0182_gfx#1 +Alias (byte) main::toD0182_return#0 = (byte~) main::toD0182_$8 (byte) main::toD0182_return#2 (byte) main::toD0182_return#1 (byte) main::toD0182_return#3 (byte~) main::$6 Alias (byte) renderBob::x_char_offset#0 = (byte~) renderBob::$0 Alias (byte) renderBob::y_char_offset#0 = (byte~) renderBob::$1 Alias (word) renderBob::y_offset#0 = (word~) renderBob::$3 @@ -1444,14 +2015,14 @@ Alias (byte) renderBob::bob_table_idx#0 = (byte~) renderBob::$9 Alias (byte) bob_charset_next_id#12 = (byte) bob_charset_next_id#3 Alias (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#9 Alias (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#6 -Alias (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#49 (byte) bob_charset_next_id#22 (byte) bob_charset_next_id#5 +Alias (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#45 (byte) bob_charset_next_id#22 (byte) bob_charset_next_id#5 Alias (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#2 (byte) prepareBobs::bob_table_idx#4 (byte) prepareBobs::bob_table_idx#13 -Alias (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#38 (byte) bob_charset_next_id#43 (byte) bob_charset_next_id#37 +Alias (byte) bob_charset_next_id#29 = (byte) bob_charset_next_id#36 (byte) bob_charset_next_id#40 (byte) bob_charset_next_id#35 Alias (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#8 Alias (byte) prepareBobs::shift_y#12 = (byte) prepareBobs::shift_y#5 (byte) prepareBobs::shift_y#4 (byte) prepareBobs::shift_y#3 Alias (byte*) prepareBobs::bob_table#0 = (byte*~) prepareBobs::$3 Alias (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#4 (byte*) prepareBobs::bob_glyph#3 -Alias (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#31 (byte) bob_charset_next_id#55 (byte) bob_charset_next_id#53 (byte) bob_charset_next_id#50 +Alias (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#30 (byte) bob_charset_next_id#50 (byte) bob_charset_next_id#48 (byte) bob_charset_next_id#46 Alias (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#3 (byte*) prepareBobs::bob_table#4 Alias (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#4 (byte) prepareBobs::cell#3 Alias (byte) prepareBobs::bob_table_idx#10 = (byte) prepareBobs::bob_table_idx#5 (byte) prepareBobs::bob_table_idx#8 (byte) prepareBobs::bob_table_idx#3 @@ -1470,23 +2041,23 @@ Alias (byte) shiftProtoBobDown::i#2 = (byte) shiftProtoBobDown::i#3 Alias (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#8 (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#12 Alias (byte*) bobCharsetFindOrAddGlyph::bob_glyph#6 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#9 (byte*) bobCharsetFindOrAddGlyph::bob_glyph#8 Alias (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) bobCharsetFindOrAddGlyph::glyph_id#12 (byte) bobCharsetFindOrAddGlyph::glyph_id#2 -Alias (byte) bob_charset_next_id#15 = (byte) bob_charset_next_id#44 (byte) bob_charset_next_id#34 +Alias (byte) bob_charset_next_id#15 = (byte) bob_charset_next_id#41 (byte) bob_charset_next_id#33 Alias (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#10 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#2 (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#5 (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#9 Alias (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) bobCharsetFindOrAddGlyph::i#3 (byte) bobCharsetFindOrAddGlyph::i#4 Alias (byte*) bobCharsetFindOrAddGlyph::bob_glyph#13 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#2 (byte*) bobCharsetFindOrAddGlyph::bob_glyph#4 (byte*) bobCharsetFindOrAddGlyph::bob_glyph#7 Alias (byte) bobCharsetFindOrAddGlyph::found#3 = (byte) bobCharsetFindOrAddGlyph::found#5 (byte) bobCharsetFindOrAddGlyph::found#4 Alias (byte) bobCharsetFindOrAddGlyph::glyph_id#13 = (byte) bobCharsetFindOrAddGlyph::glyph_id#14 (byte) bobCharsetFindOrAddGlyph::glyph_id#9 (byte) bobCharsetFindOrAddGlyph::glyph_id#8 -Alias (byte) bob_charset_next_id#39 = (byte) bob_charset_next_id#46 (byte) bob_charset_next_id#40 (byte) bob_charset_next_id#45 +Alias (byte) bob_charset_next_id#37 = (byte) bob_charset_next_id#43 (byte) bob_charset_next_id#38 (byte) bob_charset_next_id#42 Alias (byte) bobCharsetFindOrAddGlyph::glyph_id#3 = (byte) bobCharsetFindOrAddGlyph::glyph_id#6 (byte) bobCharsetFindOrAddGlyph::glyph_id#4 (byte) bobCharsetFindOrAddGlyph::return#2 Alias (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#3 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#6 -Alias (byte) bob_charset_next_id#24 = (byte) bob_charset_next_id#32 (byte) bob_charset_next_id#25 +Alias (byte) bob_charset_next_id#24 = (byte) bob_charset_next_id#31 (byte) bob_charset_next_id#25 Alias (byte*) bobCharsetFindOrAddGlyph::bob_glyph#11 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#12 Alias (byte) bobCharsetFindOrAddGlyph::return#3 = (byte) bobCharsetFindOrAddGlyph::return#6 Alias (byte) bob_charset_next_id#16 = (byte) bob_charset_next_id#7 Alias (byte*) bobCharsetFindOrAddGlyph::bob_glyph#3 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#5 Alias (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) bobCharsetFindOrAddGlyph::i1#3 Alias (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#4 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#7 -Alias (byte) bob_charset_next_id#17 = (byte) bob_charset_next_id#33 (byte) bob_charset_next_id#26 +Alias (byte) bob_charset_next_id#17 = (byte) bob_charset_next_id#32 (byte) bob_charset_next_id#26 Alias (byte) bobCharsetFindOrAddGlyph::glyph_id#10 = (byte) bobCharsetFindOrAddGlyph::glyph_id#7 (byte) bobCharsetFindOrAddGlyph::glyph_id#5 (byte) bobCharsetFindOrAddGlyph::return#4 Alias (byte) bob_charset_next_id#27 = (byte) bob_charset_next_id#6 Alias (byte) bob_charset_next_id#18 = (byte) bob_charset_next_id#9 @@ -1497,20 +2068,22 @@ Alias (byte) shiftProtoBobRight::i#2 = (byte) shiftProtoBobRight::i#4 (byte) shi Alias (byte) shiftProtoBobRight::carry#1 = (byte) shiftProtoBobRight::carry#7 Alias (byte) bobCharsetFindOrAddGlyph::glyph_id#13 = (byte) bobCharsetFindOrAddGlyph::glyph_id#3 Alias (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#10 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#3 -Alias (byte) bob_charset_next_id#24 = (byte) bob_charset_next_id#39 +Alias (byte) bob_charset_next_id#24 = (byte) bob_charset_next_id#37 Alias (byte*) bobCharsetFindOrAddGlyph::bob_glyph#11 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#13 Successful SSA optimization Pass2AliasElimination -Identical Phi Values (word) memset::num#1 (word) memset::num#0 -Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 -Identical Phi Values (byte) memset::c#3 (byte) memset::c#0 Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0 -Identical Phi Values (void*) memset::str#4 (void*) memset::str#2 -Identical Phi Values (byte) memset::c#1 (byte) memset::c#3 +Identical Phi Values (void*) memset::str#5 (void*) memset::str#3 +Identical Phi Values (byte) memset::c#2 (byte) memset::c#4 +Identical Phi Values (byte) keyboard_matrix_read::rowid#1 (byte) keyboard_matrix_read::rowid#0 Identical Phi Values (byte) bob_charset_next_id#19 (byte) bob_charset_next_id#27 Identical Phi Values (byte) bob_charset_next_id#0 (byte) bob_charset_next_id#14 -Identical Phi Values (byte) main::sin_x_idx#2 (byte) main::sin_x_idx#7 -Identical Phi Values (byte) main::sin_y_idx#2 (byte) main::sin_y_idx#7 -Identical Phi Values (byte) bob_charset_next_id#29 (byte) bob_charset_next_id#1 +Identical Phi Values (byte) main::x#2 (byte) main::x#4 +Identical Phi Values (byte) bob_charset_next_id#67 (byte) bob_charset_next_id#71 +Identical Phi Values (byte) bob_charset_next_id#63 (byte) bob_charset_next_id#67 +Identical Phi Values (byte) bob_charset_next_id#55 (byte) bob_charset_next_id#63 +Identical Phi Values (byte) main::sin_x_idx#2 (byte) main::sin_x_idx#9 +Identical Phi Values (byte) main::sin_y_idx#2 (byte) main::sin_y_idx#9 +Identical Phi Values (byte) bob_charset_next_id#54 (byte) bob_charset_next_id#53 Identical Phi Values (byte) bob_charset_next_id#12 (byte) bob_charset_next_id#16 Identical Phi Values (byte) prepareBobs::bob_table_idx#10 (byte) prepareBobs::bob_table_idx#12 Identical Phi Values (byte) prepareBobs::shift_x#3 (byte) prepareBobs::shift_x#2 @@ -1527,37 +2100,57 @@ Identical Phi Values (byte) bob_charset_next_id#17 (byte) bob_charset_next_id#15 Identical Phi Values (byte) bobCharsetFindOrAddGlyph::glyph_id#10 (byte) bobCharsetFindOrAddGlyph::glyph_id#11 Identical Phi Values (byte) bob_charset_next_id#18 (byte) bob_charset_next_id#1 Successful SSA optimization Pass2IdenticalPhiElimination -Identical Phi Values (void*) memset::return#0 (void*) memset::str#0 -Identical Phi Values (byte) bob_charset_next_id#1 (byte) bob_charset_next_id#14 +Identical Phi Values (void*) memset::return#0 (void*) memset::str#3 +Identical Phi Values (byte) bob_charset_next_id#71 (byte) bob_charset_next_id#14 +Identical Phi Values (byte) bob_charset_next_id#53 (byte) bob_charset_next_id#71 +Identical Phi Values (byte) bob_charset_next_id#1 (byte) bob_charset_next_id#53 Identical Phi Values (byte) prepareBobs::shift_y#12 (byte) prepareBobs::shift_y#2 Identical Phi Values (byte) bob_charset_next_id#15 (byte) bob_charset_next_id#23 Identical Phi Values (byte*) bobCharsetFindOrAddGlyph::bob_glyph#6 (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 Identical Phi Values (byte) bobCharsetFindOrAddGlyph::return#3 (byte) bobCharsetFindOrAddGlyph::glyph_id#11 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 +Simple Condition (bool~) memset::$1 [3] if((word) memset::num#2<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) main::$4 [70] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@4 -Simple Condition (bool~) prepareBobs::$1 [127] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 -Simple Condition (bool~) prepareBobs::$2 [132] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@5 -Simple Condition (bool~) prepareBobs::$4 [144] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@8 -Simple Condition (bool~) shiftProtoBobRight::$0 [171] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 -Simple Condition (bool~) shiftProtoBobRight::$8 [175] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@4 -Simple Condition (bool~) shiftProtoBobRight::$7 [187] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@7 -Simple Condition (bool~) shiftProtoBobDown::$0 [198] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 -Simple Condition (bool~) bobCharsetFindOrAddGlyph::$0 [214] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 -Simple Condition (bool~) bobCharsetFindOrAddGlyph::$1 [222] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@5 -Simple Condition (bool~) bobCharsetFindOrAddGlyph::$3 [226] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@7 -Simple Condition (bool~) bobCharsetFindOrAddGlyph::$4 [234] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@16 -Simple Condition (bool~) bobCharsetFindOrAddGlyph::$5 [246] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@21 +Simple Condition (bool~) main::$12 [101] if((byte) main::y#1!=rangelast(0,3)) goto main::@2 +Simple Condition (bool~) main::$13 [105] if((byte) main::x#1!=rangelast(0,7)) goto main::@1 +Simple Condition (bool~) main::$15 [114] if((byte) 0==(byte~) main::$14) goto main::@5 +Simple Condition (bool~) main::$27 [122] if((byte) 0!=(byte~) main::$16) goto main::@11 +Simple Condition (bool~) main::$17 [136] if(*((const byte*) RASTER)<(byte) $f8) goto main::@20 +Simple Condition (bool~) main::$26 [169] if((byte) 0==(byte~) main::$25) goto main::@17 +Simple Condition (bool~) prepareBobs::$1 [244] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 +Simple Condition (bool~) prepareBobs::$2 [249] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@5 +Simple Condition (bool~) prepareBobs::$4 [261] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@8 +Simple Condition (bool~) shiftProtoBobRight::$0 [288] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 +Simple Condition (bool~) shiftProtoBobRight::$8 [292] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@4 +Simple Condition (bool~) shiftProtoBobRight::$7 [304] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@7 +Simple Condition (bool~) shiftProtoBobDown::$0 [315] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 +Simple Condition (bool~) bobCharsetFindOrAddGlyph::$0 [331] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 +Simple Condition (bool~) bobCharsetFindOrAddGlyph::$1 [339] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@5 +Simple Condition (bool~) bobCharsetFindOrAddGlyph::$3 [343] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@7 +Simple Condition (bool~) bobCharsetFindOrAddGlyph::$4 [351] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@16 +Simple Condition (bool~) bobCharsetFindOrAddGlyph::$5 [363] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@21 Successful SSA optimization Pass2ConditionalJumpSimplification -Constant (const byte*) main::vicSelectGfxBank1_gfx#0 = SCREEN -Constant (const byte*) main::toD0181_screen#0 = SCREEN +Negating conditional jump and destination [169] if((byte) 0!=(byte~) main::$25) goto main::@25 +Successful SSA optimization Pass2ConditionalJumpSequenceImprovement +Constant (const byte*) main::vicSelectGfxBank1_gfx#0 = BOB_SCREEN +Constant (const byte*) main::toD0181_screen#0 = BOB_SCREEN Constant (const byte*) main::toD0181_gfx#0 = BOB_CHARSET -Constant (const void*) memset::str#0 = (void*)SCREEN +Constant (const void*) memset::str#0 = (void*)BOB_SCREEN Constant (const byte) memset::c#0 = 0 Constant (const word) memset::num#0 = $3e8 +Constant (const byte) main::x#0 = 0 +Constant (const byte) main::y#0 = 0 +Constant (const byte) keyboard_key_pressed::key#0 = KEY_SPACE +Constant (const byte) keyboard_key_pressed::key#1 = KEY_SPACE +Constant (const void*) memset::str#1 = (void*)BOB_SCREEN +Constant (const byte) memset::c#1 = 0 +Constant (const word) memset::num#1 = $3e8 Constant (const byte) main::sin_x_idx#0 = 0 Constant (const byte) main::sin_y_idx#0 = $49 +Constant (const byte) keyboard_key_pressed::key#2 = KEY_SPACE +Constant (const byte*) main::vicSelectGfxBank2_gfx#0 = SCREEN_BASIC +Constant (const byte*) main::toD0182_screen#0 = SCREEN_BASIC +Constant (const byte*) main::toD0182_gfx#0 = CHARSET_BASIC Constant (const byte) bob_charset_next_id#2 = 0 Constant (const byte*) bobCharsetFindOrAddGlyph::bob_glyph#0 = PROTO_BOB+$30 Constant (const byte) prepareBobs::bob_table_idx#0 = 0 @@ -1579,79 +2172,134 @@ Constant (const byte) bobCharsetFindOrAddGlyph::i#0 = 0 Constant (const byte) bobCharsetFindOrAddGlyph::i1#0 = 0 Constant (const byte) bobCharsetFindOrAddGlyph::found#1 = 0 Successful SSA optimization Pass2ConstantIdentification -Constant (const byte*) memset::$2 = (byte*)memset::str#0 -Constant (const byte*) memset::dst#0 = (byte*)memset::str#0 Constant (const word) main::vicSelectGfxBank1_toDd001_$0 = (word)main::vicSelectGfxBank1_gfx#0 Constant (const word) main::toD0181_$0 = (word)main::toD0181_screen#0 Constant (const word) main::toD0181_$4 = (word)main::toD0181_gfx#0 -Constant (const void*) memset::return#2 = memset::str#0 +Constant (const word) main::vicSelectGfxBank2_toDd001_$0 = (word)main::vicSelectGfxBank2_gfx#0 +Constant (const word) main::toD0182_$0 = (word)main::toD0182_screen#0 +Constant (const word) main::toD0182_$4 = (word)main::toD0182_gfx#0 Successful SSA optimization Pass2ConstantIdentification -if() condition always false - eliminating [3] if((const word) memset::num#0<=(byte) 0) goto memset::@1 -if() condition always true - replacing block destination [67] if(true) goto main::@4 +if() condition always true - replacing block destination [133] if(true) goto main::@20 Successful SSA optimization Pass2ConstantIfs -Simplifying constant evaluating to zero (byte) 0*(const byte) BOB_SUBTABLE_SIZE in [107] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES+(byte) 0*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) +Resolved ranged next value [99] main::y#1 ← ++ main::y#2 to ++ +Resolved ranged comparison value [101] if(main::y#1!=rangelast(0,3)) goto main::@2 to (number) 4 +Resolved ranged next value [103] main::x#1 ← ++ main::x#4 to ++ +Resolved ranged comparison value [105] if(main::x#1!=rangelast(0,7)) goto main::@1 to (number) 8 +Simplifying constant evaluating to zero (byte)(number) $d*(number) 0 in [140] (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB+(byte)(number) $d*(number) 0 + (byte) main::sin_y_idx#9) +Simplifying constant evaluating to zero (byte)(number) $d*(number) 0 in [155] (byte) renderBob::xpos#5 ← *((const byte*) SIN_X_TAB+(byte)(number) $d*(number) 0 + (byte) main::sin_x_idx#9) +Simplifying constant evaluating to zero (byte) 0*(const byte) BOB_SUBTABLE_SIZE in [224] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES+(byte) 0*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero BOB_TABLES in [107] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES+(byte) 0 + (byte) renderBob::bob_table_idx#0) -Simplifying expression containing zero renderBob::screen#0 in [107] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -Simplifying expression containing zero PROTO_BOB in [204] *((const byte*) PROTO_BOB + (byte) 0) ← (byte) 0 +Simplifying expression containing zero SIN_Y_TAB in [140] (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB+(byte) 0 + (byte) main::sin_y_idx#9) +Simplifying expression containing zero SIN_X_TAB in [155] (byte) renderBob::xpos#5 ← *((const byte*) SIN_X_TAB+(byte) 0 + (byte) main::sin_x_idx#9) +Simplifying expression containing zero BOB_TABLES in [224] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES+(byte) 0 + (byte) renderBob::bob_table_idx#0) +Simplifying expression containing zero renderBob::screen#0 in [224] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) +Simplifying expression containing zero PROTO_BOB in [321] *((const byte*) PROTO_BOB + (byte) 0) ← (byte) 0 Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused variable (byte) bobCharsetFindOrAddGlyph::return#0 and assignment [59] (byte) bobCharsetFindOrAddGlyph::return#0 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -Eliminating unused constant (const void*) memset::return#2 +Eliminating unused variable (void*) memset::return#2 and assignment [37] (void*) memset::return#2 ← (void*) memset::str#3 +Eliminating unused variable (void*) memset::return#3 and assignment [58] (void*) memset::return#3 ← (void*) memset::str#3 +Eliminating unused variable (byte) bobCharsetFindOrAddGlyph::return#0 and assignment [120] (byte) bobCharsetFindOrAddGlyph::return#0 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 Eliminating unused constant (const byte) bob_charset_next_id#27 Successful SSA optimization PassNEliminateUnusedVars -Removing unused block main::@return -Successful SSA optimization Pass2EliminateUnusedBlocks -Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 -Constant right-side identified [8] (byte~) main::vicSelectGfxBank1_toDd001_$1 ← > (const word) main::vicSelectGfxBank1_toDd001_$0 -Constant right-side identified [12] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff -Constant right-side identified [15] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 +Adding number conversion cast (unumber) 4 in if((byte) main::y#1!=(number) 4) goto main::@2 +Adding number conversion cast (unumber) 8 in if((byte) main::x#1!=(number) 8) goto main::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 4 +Simplifying constant integer cast 8 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 8 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Constant right-side identified [24] (byte~) main::vicSelectGfxBank1_toDd001_$1 ← > (const word) main::vicSelectGfxBank1_toDd001_$0 +Constant right-side identified [28] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff +Constant right-side identified [31] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 +Constant right-side identified [83] (byte~) main::vicSelectGfxBank2_toDd001_$1 ← > (const word) main::vicSelectGfxBank2_toDd001_$0 +Constant right-side identified [87] (word~) main::toD0182_$1 ← (const word) main::toD0182_$0 & (word) $3fff +Constant right-side identified [90] (byte~) main::toD0182_$5 ← > (const word) main::toD0182_$4 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 Constant (const byte) main::vicSelectGfxBank1_toDd001_$1 = >main::vicSelectGfxBank1_toDd001_$0 Constant (const word) main::toD0181_$1 = main::toD0181_$0&$3fff Constant (const byte) main::toD0181_$5 = >main::toD0181_$4 +Constant (const byte) main::vicSelectGfxBank2_toDd001_$1 = >main::vicSelectGfxBank2_toDd001_$0 +Constant (const word) main::toD0182_$1 = main::toD0182_$0&$3fff +Constant (const byte) main::toD0182_$5 = >main::toD0182_$4 Successful SSA optimization Pass2ConstantIdentification -Simplifying constant evaluating to zero (const word) main::toD0181_$0&(word) $3fff in -Successful SSA optimization PassNSimplifyConstantZero -Eliminating unused constant (const word) main::toD0181_$0 -Successful SSA optimization PassNEliminateUnusedVars -Eliminating unused constant (const byte*) main::toD0181_screen#0 -Successful SSA optimization PassNEliminateUnusedVars -Constant right-side identified [7] (byte~) main::vicSelectGfxBank1_toDd001_$2 ← (const byte) main::vicSelectGfxBank1_toDd001_$1 / (byte) $40 -Constant right-side identified [10] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4 -Constant right-side identified [12] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4 +Constant right-side identified [24] (byte~) main::vicSelectGfxBank1_toDd001_$2 ← (const byte) main::vicSelectGfxBank1_toDd001_$1 / (byte) $40 +Constant right-side identified [27] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4 +Constant right-side identified [29] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4 +Constant right-side identified [80] (byte~) main::vicSelectGfxBank2_toDd001_$2 ← (const byte) main::vicSelectGfxBank2_toDd001_$1 / (byte) $40 +Constant right-side identified [83] (word~) main::toD0182_$2 ← (const word) main::toD0182_$1 * (byte) 4 +Constant right-side identified [85] (byte~) main::toD0182_$6 ← (const byte) main::toD0182_$5 / (byte) 4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::vicSelectGfxBank1_toDd001_$2 = main::vicSelectGfxBank1_toDd001_$1/$40 Constant (const word) main::toD0181_$2 = main::toD0181_$1*4 Constant (const byte) main::toD0181_$6 = main::toD0181_$5/4 +Constant (const byte) main::vicSelectGfxBank2_toDd001_$2 = main::vicSelectGfxBank2_toDd001_$1/$40 +Constant (const word) main::toD0182_$2 = main::toD0182_$1*4 +Constant (const byte) main::toD0182_$6 = main::toD0182_$5/4 Successful SSA optimization Pass2ConstantIdentification -Simplifying constant evaluating to zero (const word) main::toD0181_$1*(byte) 4 in +Simplifying constant evaluating to zero (const byte) main::vicSelectGfxBank2_toDd001_$1/(byte) $40 in Successful SSA optimization PassNSimplifyConstantZero -Eliminating unused constant (const word) main::toD0181_$1 +Simplifying expression containing zero 3 in [81] (byte) main::vicSelectGfxBank2_toDd001_return#0 ← (byte) 3 ^ (const byte) main::vicSelectGfxBank2_toDd001_$2 +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant (const byte) main::vicSelectGfxBank2_toDd001_$1 +Eliminating unused constant (const byte) main::vicSelectGfxBank2_toDd001_$2 Successful SSA optimization PassNEliminateUnusedVars -Constant right-side identified [7] (byte) main::vicSelectGfxBank1_toDd001_return#0 ← (byte) 3 ^ (const byte) main::vicSelectGfxBank1_toDd001_$2 -Constant right-side identified [9] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2 -Constant right-side identified [10] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f +Eliminating unused constant (const word) main::vicSelectGfxBank2_toDd001_$0 +Successful SSA optimization PassNEliminateUnusedVars +Eliminating unused constant (const byte*) main::vicSelectGfxBank2_gfx#0 +Successful SSA optimization PassNEliminateUnusedVars +Constant right-side identified [24] (byte) main::vicSelectGfxBank1_toDd001_return#0 ← (byte) 3 ^ (const byte) main::vicSelectGfxBank1_toDd001_$2 +Constant right-side identified [26] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2 +Constant right-side identified [27] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f +Constant right-side identified [79] (byte~) main::toD0182_$3 ← > (const word) main::toD0182_$2 +Constant right-side identified [80] (byte~) main::toD0182_$7 ← (const byte) main::toD0182_$6 & (byte) $f Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::vicSelectGfxBank1_toDd001_return#0 = 3^main::vicSelectGfxBank1_toDd001_$2 Constant (const byte) main::toD0181_$3 = >main::toD0181_$2 Constant (const byte) main::toD0181_$7 = main::toD0181_$6&$f +Constant (const byte) main::vicSelectGfxBank2_toDd001_return#0 = 3 +Constant (const byte) main::toD0182_$3 = >main::toD0182_$2 +Constant (const byte) main::toD0182_$7 = main::toD0182_$6&$f Successful SSA optimization Pass2ConstantIdentification -Simplifying constant evaluating to zero >(const word) main::toD0181_$2 in +Simplifying constant evaluating to zero (const byte) main::toD0181_$6&(byte) $f in Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero main::toD0181_$7 in [11] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7 +Simplifying expression containing zero main::toD0181_$3 in [28] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7 Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused constant (const word) main::toD0181_$2 -Eliminating unused constant (const byte) main::toD0181_$3 +Eliminating unused constant (const byte) main::toD0181_$6 +Eliminating unused constant (const byte) main::toD0181_$7 Successful SSA optimization PassNEliminateUnusedVars -Constant (const byte) main::toD0181_return#0 = main::toD0181_$7 +Eliminating unused constant (const byte) main::toD0181_$5 +Successful SSA optimization PassNEliminateUnusedVars +Eliminating unused constant (const word) main::toD0181_$4 +Successful SSA optimization PassNEliminateUnusedVars +Eliminating unused constant (const byte*) main::toD0181_gfx#0 +Successful SSA optimization PassNEliminateUnusedVars +Constant right-side identified [75] (byte) main::toD0182_return#0 ← (const byte) main::toD0182_$3 | (const byte) main::toD0182_$7 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) main::toD0181_return#0 = main::toD0181_$3 +Constant (const byte) main::toD0182_return#0 = main::toD0182_$3|main::toD0182_$7 Successful SSA optimization Pass2ConstantIdentification -Rewriting division to use shift [26] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#3 / (const byte) BOB_SHIFTS_X -Rewriting division to use shift [27] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#3 / (const byte) BOB_SHIFTS_Y -Rewriting multiplication to use shift and addition[29] (word) renderBob::y_offset#0 ← (word~) renderBob::$2 * (byte) $28 -Rewriting multiplication to use shift [33] (byte~) renderBob::$7 ← (byte~) renderBob::$6 * (const byte) BOB_SHIFTS_X +Inlining Noop Cast [2] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 keeping memset::str#3 +Inlining Noop Cast [4] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 +Successful SSA optimization Pass2NopCastInlining +Rewriting multiplication to use shift and addition[29] (byte~) main::$7 ← (byte) main::x#4 * (byte) $c +Rewriting multiplication to use shift and addition[31] (byte~) main::$9 ← (byte) main::y#2 * (byte) $18 +Rewriting division to use shift [77] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#6 / (const byte) BOB_SHIFTS_X +Rewriting division to use shift [78] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#6 / (const byte) BOB_SHIFTS_Y +Rewriting multiplication to use shift and addition[80] (word) renderBob::y_offset#0 ← (word~) renderBob::$2 * (byte) $28 +Rewriting multiplication to use shift [84] (byte~) renderBob::$7 ← (byte~) renderBob::$6 * (const byte) BOB_SHIFTS_X Successful SSA optimization Pass2MultiplyToShiftRewriting -Inlining constant with var siblings (const byte*) memset::dst#0 +Inlining constant with var siblings (const void*) memset::str#0 +Inlining constant with var siblings (const byte) memset::c#0 +Inlining constant with var siblings (const word) memset::num#0 +Inlining constant with var siblings (const void*) memset::str#1 +Inlining constant with var siblings (const byte) memset::c#1 +Inlining constant with var siblings (const word) memset::num#1 +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#2 +Inlining constant with var siblings (const byte) main::x#0 +Inlining constant with var siblings (const byte) main::y#0 Inlining constant with var siblings (const byte) main::sin_x_idx#0 Inlining constant with var siblings (const byte) main::sin_y_idx#0 Inlining constant with var siblings (const byte) prepareBobs::bob_table_idx#0 @@ -1671,59 +2319,111 @@ Inlining constant with var siblings (const byte) bobCharsetFindOrAddGlyph::i#0 Inlining constant with var siblings (const byte) bobCharsetFindOrAddGlyph::i1#0 Inlining constant with var siblings (const byte) bobCharsetFindOrAddGlyph::found#1 Inlining constant with var siblings (const byte) bob_charset_next_id#2 -Constant inlined main::toD0181_gfx#0 = (const byte*) BOB_CHARSET -Constant inlined bobCharsetFindOrAddGlyph::glyph_cursor#0 = (const byte*) BOB_CHARSET Constant inlined prepareBobs::bob_table_idx#0 = (byte) 0 Constant inlined shiftProtoBobRight::i#0 = (byte) 0 -Constant inlined shiftProtoBobRight::j#0 = (byte) 0 Constant inlined main::sin_x_idx#0 = (byte) 0 +Constant inlined main::toD0182_$4 = (word)(const byte*) CHARSET_BASIC +Constant inlined main::toD0182_$5 = >(word)(const byte*) CHARSET_BASIC +Constant inlined main::toD0182_$6 = >(word)(const byte*) CHARSET_BASIC/(byte) 4 +Constant inlined memset::num#1 = (word) $3e8 +Constant inlined main::toD0182_$7 = >(word)(const byte*) CHARSET_BASIC/(byte) 4&(byte) $f +Constant inlined memset::num#0 = (word) $3e8 +Constant inlined main::toD0182_$0 = (word)(const byte*) SCREEN_BASIC +Constant inlined main::toD0182_$1 = (word)(const byte*) SCREEN_BASIC&(word) $3fff Constant inlined bobCharsetFindOrAddGlyph::found#1 = (byte) 0 +Constant inlined main::toD0182_$2 = (word)(const byte*) SCREEN_BASIC&(word) $3fff*(byte) 4 Constant inlined bobCharsetFindOrAddGlyph::found#0 = (byte) 1 Constant inlined bobCharsetFindOrAddGlyph::i#0 = (byte) 0 +Constant inlined main::toD0182_$3 = >(word)(const byte*) SCREEN_BASIC&(word) $3fff*(byte) 4 Constant inlined bobCharsetFindOrAddGlyph::glyph_id#0 = (byte) 0 -Constant inlined memset::$2 = (byte*)(const void*) memset::str#0 Constant inlined bob_charset_next_id#2 = (byte) 0 -Constant inlined prepareBobs::bob_glyph#0 = (const byte*) PROTO_BOB -Constant inlined shiftProtoBobRight::$2 = (byte) 0 Constant inlined shiftProtoBobDown::i#0 = (byte) $17 -Constant inlined shiftProtoBobRight::$3 = (byte) $80 -Constant inlined prepareBobs::shift_y#0 = (byte) 0 -Constant inlined main::toD0181_$7 = >(word)(const byte*) BOB_CHARSET/(byte) 4&(byte) $f +Constant inlined keyboard_key_pressed::key#0 = (const byte) KEY_SPACE +Constant inlined keyboard_key_pressed::key#1 = (const byte) KEY_SPACE +Constant inlined main::toD0182_gfx#0 = (const byte*) CHARSET_BASIC +Constant inlined keyboard_key_pressed::key#2 = (const byte) KEY_SPACE Constant inlined prepareBobs::shift_x#0 = (byte) 0 +Constant inlined main::toD0181_$2 = (word)(const byte*) BOB_SCREEN&(word) $3fff*(byte) 4 +Constant inlined main::toD0181_$1 = (word)(const byte*) BOB_SCREEN&(word) $3fff +Constant inlined main::toD0181_$0 = (word)(const byte*) BOB_SCREEN +Constant inlined main::y#0 = (byte) 0 Constant inlined shiftProtoBobRight::carry#0 = (byte) 0 -Constant inlined main::vicSelectGfxBank1_toDd001_$0 = (word)(const byte*) SCREEN -Constant inlined main::toD0181_$6 = >(word)(const byte*) BOB_CHARSET/(byte) 4 -Constant inlined main::toD0181_$5 = >(word)(const byte*) BOB_CHARSET -Constant inlined main::toD0181_$4 = (word)(const byte*) BOB_CHARSET -Constant inlined main::vicSelectGfxBank1_toDd001_$2 = >(word)(const byte*) SCREEN/(byte) $40 -Constant inlined main::vicSelectGfxBank1_toDd001_$1 = >(word)(const byte*) SCREEN -Constant inlined main::sin_y_idx#0 = (byte) $49 +Constant inlined main::toD0181_$3 = >(word)(const byte*) BOB_SCREEN&(word) $3fff*(byte) 4 Constant inlined bobCharsetFindOrAddGlyph::bob_glyph#0 = (const byte*) PROTO_BOB+(byte) $30 Constant inlined prepareBobs::cell#0 = (byte) 0 -Constant inlined main::vicSelectGfxBank1_gfx#0 = (const byte*) SCREEN -Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 +Constant inlined memset::c#0 = (byte) 0 +Constant inlined memset::c#1 = (byte) 0 +Constant inlined main::toD0181_screen#0 = (const byte*) BOB_SCREEN +Constant inlined bobCharsetFindOrAddGlyph::glyph_cursor#0 = (const byte*) BOB_CHARSET +Constant inlined shiftProtoBobRight::j#0 = (byte) 0 +Constant inlined prepareBobs::bob_glyph#0 = (const byte*) PROTO_BOB +Constant inlined shiftProtoBobRight::$2 = (byte) 0 +Constant inlined shiftProtoBobRight::$3 = (byte) $80 +Constant inlined memset::str#1 = (void*)(const byte*) BOB_SCREEN +Constant inlined prepareBobs::shift_y#0 = (byte) 0 +Constant inlined memset::str#0 = (void*)(const byte*) BOB_SCREEN +Constant inlined main::x#0 = (byte) 0 +Constant inlined main::vicSelectGfxBank1_toDd001_$0 = (word)(const byte*) BOB_SCREEN +Constant inlined main::vicSelectGfxBank1_toDd001_$2 = >(word)(const byte*) BOB_SCREEN/(byte) $40 +Constant inlined main::vicSelectGfxBank1_toDd001_$1 = >(word)(const byte*) BOB_SCREEN +Constant inlined main::sin_y_idx#0 = (byte) $49 +Constant inlined main::toD0182_screen#0 = (const byte*) SCREEN_BASIC +Constant inlined main::vicSelectGfxBank1_gfx#0 = (const byte*) BOB_SCREEN Constant inlined bobCharsetFindOrAddGlyph::i1#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in *(PROTO_BOB+$18) Consolidated array index constant in *(PROTO_BOB+$30) Successful SSA optimization Pass2ConstantAdditionElimination +Alias (byte~) main::$7 = (byte~) main::$32 +Alias (byte~) main::$9 = (byte~) main::$35 Alias (word) renderBob::y_offset#0 = (word~) renderBob::$12 Successful SSA optimization Pass2AliasElimination +Identical Phi Values (word) memset::num#2 (word) $3e8 +Identical Phi Values (byte) memset::c#4 (byte) 0 +Identical Phi Values (byte) keyboard_key_pressed::key#3 (const byte) KEY_SPACE +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [12] (byte) keyboard_key_pressed::colidx#0 ← (const byte) KEY_SPACE & (byte) 7 +Constant right-side identified [13] (byte) keyboard_key_pressed::rowidx#0 ← (const byte) KEY_SPACE >> (byte) 3 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) keyboard_key_pressed::colidx#0 = KEY_SPACE&7 +Constant (const byte) keyboard_key_pressed::rowidx#0 = KEY_SPACE>>3 +Successful SSA optimization Pass2ConstantIdentification +Constant (const byte) keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 +Successful SSA optimization Pass2ConstantIdentification +if() condition always false - eliminating [1] if((word) $3e8<=(byte) 0) goto memset::@1 +Successful SSA optimization Pass2ConstantIfs +Constant inlined keyboard_matrix_read::rowid#0 = (const byte) keyboard_key_pressed::rowidx#0 +Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) +Consolidated array index constant in *(keyboard_matrix_col_bitmask+keyboard_key_pressed::colidx#0) +Successful SSA optimization Pass2ConstantAdditionElimination +Added new block during phi lifting main::@45(between main::@3 and main::@1) +Added new block during phi lifting main::@46(between main::@35 and main::@2) +Added new block during phi lifting main::@47(between main::@44 and main::@17) Adding NOP phi() at start of @begin -Adding NOP phi() at start of @13 -Adding NOP phi() at start of @14 -Adding NOP phi() at start of @15 +Adding NOP phi() at start of @54 +Adding NOP phi() at start of @55 +Adding NOP phi() at start of @56 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of main::@11 +Adding NOP phi() at start of main::@33 Adding NOP phi() at start of main::vicSelectGfxBank1_toDd001 Adding NOP phi() at start of main::vicSelectGfxBank1_toDd001_@return -Adding NOP phi() at start of main::@9 +Adding NOP phi() at start of main::@29 Adding NOP phi() at start of main::toD0181 Adding NOP phi() at start of main::toD0181_@return -Adding NOP phi() at start of main::@12 -Adding NOP phi() at start of memset -Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of main::@34 +Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@11 +Adding NOP phi() at start of main::@13 +Adding NOP phi() at start of main::@38 +Adding NOP phi() at start of main::@25 +Adding NOP phi() at start of main::vicSelectGfxBank2_toDd001 +Adding NOP phi() at start of main::vicSelectGfxBank2_toDd001_@return +Adding NOP phi() at start of main::@31 +Adding NOP phi() at start of main::toD0182 +Adding NOP phi() at start of main::toD0182_@return +Adding NOP phi() at start of keyboard_key_pressed Adding NOP phi() at start of memset::@1 Adding NOP phi() at start of prepareBobs Adding NOP phi() at start of prepareBobs::@6 @@ -1737,57 +2437,73 @@ Adding NOP phi() at start of shiftProtoBobRight::@4 Adding NOP phi() at start of shiftProtoBobDown CALL GRAPH Calls in [] to main:3 -Calls in [main] to prepareBobs:7 memset:17 renderBob:26 renderBob:31 renderBob:36 -Calls in [prepareBobs] to bobCharsetFindOrAddGlyph:75 shiftProtoBobDown:85 shiftProtoBobRight:96 shiftProtoBobRight:98 bobCharsetFindOrAddGlyph:106 +Calls in [main] to prepareBobs:7 memset:17 renderBob:31 keyboard_key_pressed:37 keyboard_key_pressed:42 memset:47 renderBob:56 renderBob:61 renderBob:66 renderBob:71 renderBob:76 keyboard_key_pressed:80 +Calls in [keyboard_key_pressed] to keyboard_matrix_read:99 +Calls in [prepareBobs] to bobCharsetFindOrAddGlyph:141 shiftProtoBobDown:151 shiftProtoBobRight:162 shiftProtoBobRight:164 bobCharsetFindOrAddGlyph:172 -Created 29 initial phi equivalence classes -Coalesced [24] renderBob::xpos#6 ← renderBob::xpos#0 -Coalesced [25] renderBob::ypos#6 ← renderBob::ypos#0 -Coalesced [29] renderBob::xpos#4 ← renderBob::xpos#1 -Coalesced [30] renderBob::ypos#4 ← renderBob::ypos#1 -Coalesced [34] renderBob::xpos#5 ← renderBob::xpos#2 -Coalesced [35] renderBob::ypos#5 ← renderBob::ypos#2 -Coalesced [40] main::sin_x_idx#8 ← main::sin_x_idx#1 -Coalesced [41] main::sin_y_idx#8 ← main::sin_y_idx#1 -Coalesced [73] memset::dst#4 ← memset::dst#1 -Coalesced [76] bob_charset_next_id#59 ← bob_charset_next_id#16 -Coalesced [80] prepareBobs::bob_table_idx#15 ← prepareBobs::bob_table_idx#6 -Coalesced [81] bob_charset_next_id#61 ← bob_charset_next_id#14 -Coalesced [87] prepareBobs::shift_y#14 ← prepareBobs::shift_y#1 -Coalesced (already) [88] bob_charset_next_id#60 ← bob_charset_next_id#30 -Coalesced (already) [89] prepareBobs::bob_table_idx#14 ← prepareBobs::bob_table_idx#12 -Coalesced [91] bob_charset_next_id#64 ← bob_charset_next_id#30 -Coalesced [92] prepareBobs::bob_table#6 ← prepareBobs::bob_table#0 -Coalesced [100] prepareBobs::shift_x#10 ← prepareBobs::shift_x#1 -Coalesced [101] prepareBobs::bob_table_idx#16 ← prepareBobs::bob_table_idx#1 -Coalesced (already) [102] bob_charset_next_id#62 ← bob_charset_next_id#21 -Coalesced [104] bob_charset_next_id#65 ← bob_charset_next_id#21 -Coalesced [105] bobCharsetFindOrAddGlyph::bob_glyph#14 ← bobCharsetFindOrAddGlyph::bob_glyph#1 -Coalesced [113] prepareBobs::cell#5 ← prepareBobs::cell#1 -Coalesced [114] prepareBobs::bob_glyph#5 ← prepareBobs::bob_glyph#1 -Coalesced (already) [115] bob_charset_next_id#63 ← bob_charset_next_id#16 -Coalesced [116] prepareBobs::bob_table#5 ← prepareBobs::bob_table#1 -Coalesced [124] bob_charset_next_id#67 ← bob_charset_next_id#8 -Coalesced [129] bobCharsetFindOrAddGlyph::i1#4 ← bobCharsetFindOrAddGlyph::i1#1 -Coalesced (already) [135] bob_charset_next_id#66 ← bob_charset_next_id#23 -Coalesced [138] bobCharsetFindOrAddGlyph::glyph_id#15 ← bobCharsetFindOrAddGlyph::glyph_id#1 -Coalesced [139] bobCharsetFindOrAddGlyph::glyph_cursor#13 ← bobCharsetFindOrAddGlyph::glyph_cursor#1 -Coalesced [143] bobCharsetFindOrAddGlyph::i#5 ← bobCharsetFindOrAddGlyph::i#1 -Coalesced [157] shiftProtoBobRight::j#12 ← shiftProtoBobRight::j#2 -Coalesced [160] shiftProtoBobRight::i#10 ← shiftProtoBobRight::i#1 -Coalesced [161] shiftProtoBobRight::j#11 ← shiftProtoBobRight::j#10 -Not coalescing [162] shiftProtoBobRight::carry#10 ← shiftProtoBobRight::carry#1 -Coalesced [164] shiftProtoBobRight::j#13 ← shiftProtoBobRight::j#1 -Coalesced [177] shiftProtoBobDown::i#4 ← shiftProtoBobDown::i#1 -Coalesced down to 23 phi equivalence classes -Culled Empty Block (label) @13 -Culled Empty Block (label) @15 -Culled Empty Block (label) main::@11 +Created 32 initial phi equivalence classes +Coalesced [29] renderBob::xpos#7 ← renderBob::xpos#0 +Coalesced [30] renderBob::ypos#7 ← renderBob::ypos#0 +Coalesced [54] renderBob::xpos#8 ← renderBob::xpos#1 +Coalesced [55] renderBob::ypos#8 ← renderBob::ypos#1 +Coalesced [59] renderBob::xpos#9 ← renderBob::xpos#2 +Coalesced [60] renderBob::ypos#9 ← renderBob::ypos#2 +Coalesced [64] renderBob::xpos#10 ← renderBob::xpos#3 +Coalesced [65] renderBob::ypos#10 ← renderBob::ypos#3 +Coalesced [69] renderBob::xpos#11 ← renderBob::xpos#4 +Coalesced [70] renderBob::ypos#11 ← renderBob::ypos#4 +Coalesced [74] renderBob::xpos#12 ← renderBob::xpos#5 +Coalesced [75] renderBob::ypos#12 ← renderBob::ypos#5 +Coalesced [84] main::sin_x_idx#11 ← main::sin_x_idx#1 +Coalesced [85] main::sin_y_idx#11 ← main::sin_y_idx#1 +Coalesced [96] main::x#6 ← main::x#1 +Coalesced [97] main::y#4 ← main::y#1 +Coalesced [139] memset::dst#5 ← memset::dst#1 +Coalesced [142] bob_charset_next_id#81 ← bob_charset_next_id#16 +Coalesced [146] prepareBobs::bob_table_idx#15 ← prepareBobs::bob_table_idx#6 +Coalesced [147] bob_charset_next_id#83 ← bob_charset_next_id#14 +Coalesced [153] prepareBobs::shift_y#14 ← prepareBobs::shift_y#1 +Coalesced (already) [154] bob_charset_next_id#82 ← bob_charset_next_id#29 +Coalesced (already) [155] prepareBobs::bob_table_idx#14 ← prepareBobs::bob_table_idx#12 +Coalesced [157] bob_charset_next_id#86 ← bob_charset_next_id#29 +Coalesced [158] prepareBobs::bob_table#6 ← prepareBobs::bob_table#0 +Coalesced [166] prepareBobs::shift_x#10 ← prepareBobs::shift_x#1 +Coalesced [167] prepareBobs::bob_table_idx#16 ← prepareBobs::bob_table_idx#1 +Coalesced (already) [168] bob_charset_next_id#84 ← bob_charset_next_id#21 +Coalesced [170] bob_charset_next_id#87 ← bob_charset_next_id#21 +Coalesced [171] bobCharsetFindOrAddGlyph::bob_glyph#14 ← bobCharsetFindOrAddGlyph::bob_glyph#1 +Coalesced [179] prepareBobs::cell#5 ← prepareBobs::cell#1 +Coalesced [180] prepareBobs::bob_glyph#5 ← prepareBobs::bob_glyph#1 +Coalesced (already) [181] bob_charset_next_id#85 ← bob_charset_next_id#16 +Coalesced [182] prepareBobs::bob_table#5 ← prepareBobs::bob_table#1 +Coalesced [190] bob_charset_next_id#89 ← bob_charset_next_id#8 +Coalesced [195] bobCharsetFindOrAddGlyph::i1#4 ← bobCharsetFindOrAddGlyph::i1#1 +Coalesced (already) [201] bob_charset_next_id#88 ← bob_charset_next_id#23 +Coalesced [204] bobCharsetFindOrAddGlyph::glyph_id#15 ← bobCharsetFindOrAddGlyph::glyph_id#1 +Coalesced [205] bobCharsetFindOrAddGlyph::glyph_cursor#13 ← bobCharsetFindOrAddGlyph::glyph_cursor#1 +Coalesced [209] bobCharsetFindOrAddGlyph::i#5 ← bobCharsetFindOrAddGlyph::i#1 +Coalesced [223] shiftProtoBobRight::j#12 ← shiftProtoBobRight::j#2 +Coalesced [226] shiftProtoBobRight::i#10 ← shiftProtoBobRight::i#1 +Coalesced [227] shiftProtoBobRight::j#11 ← shiftProtoBobRight::j#10 +Not coalescing [228] shiftProtoBobRight::carry#10 ← shiftProtoBobRight::carry#1 +Coalesced [230] shiftProtoBobRight::j#13 ← shiftProtoBobRight::j#1 +Coalesced [243] shiftProtoBobDown::i#4 ← shiftProtoBobDown::i#1 +Coalesced down to 26 phi equivalence classes +Culled Empty Block (label) @54 +Culled Empty Block (label) @56 +Culled Empty Block (label) main::@33 Culled Empty Block (label) main::vicSelectGfxBank1_toDd001_@return -Culled Empty Block (label) main::@9 +Culled Empty Block (label) main::@29 Culled Empty Block (label) main::toD0181_@return -Culled Empty Block (label) main::@12 -Culled Empty Block (label) memset::@2 +Culled Empty Block (label) main::@34 +Culled Empty Block (label) main::@38 +Culled Empty Block (label) main::@47 +Culled Empty Block (label) main::@25 +Culled Empty Block (label) main::vicSelectGfxBank2_toDd001_@return +Culled Empty Block (label) main::@31 +Culled Empty Block (label) main::toD0182_@return +Culled Empty Block (label) main::@45 +Culled Empty Block (label) main::@46 Culled Empty Block (label) memset::@1 Culled Empty Block (label) prepareBobs::@19 Culled Empty Block (label) prepareBobs::@2 @@ -1796,15 +2512,28 @@ Culled Empty Block (label) bobCharsetFindOrAddGlyph::@2 Culled Empty Block (label) bobCharsetFindOrAddGlyph::@14 Culled Empty Block (label) bobCharsetFindOrAddGlyph::@11 Culled Empty Block (label) shiftProtoBobRight::@5 -Renumbering block @14 to @1 -Renumbering block memset::@4 to memset::@1 -Renumbering block memset::@5 to memset::@2 -Renumbering block main::@4 to main::@2 -Renumbering block main::@5 to main::@3 -Renumbering block main::@10 to main::@4 -Renumbering block main::@13 to main::@5 -Renumbering block main::@14 to main::@6 -Renumbering block main::@15 to main::@7 +Renumbering block @55 to @1 +Renumbering block memset::@2 to memset::@1 +Renumbering block memset::@4 to memset::@2 +Renumbering block memset::@5 to memset::@3 +Renumbering block keyboard_key_pressed::@2 to keyboard_key_pressed::@1 +Renumbering block main::@5 to main::@4 +Renumbering block main::@11 to main::@5 +Renumbering block main::@13 to main::@6 +Renumbering block main::@17 to main::@7 +Renumbering block main::@20 to main::@8 +Renumbering block main::@21 to main::@9 +Renumbering block main::@30 to main::@10 +Renumbering block main::@32 to main::@11 +Renumbering block main::@35 to main::@12 +Renumbering block main::@36 to main::@13 +Renumbering block main::@37 to main::@14 +Renumbering block main::@39 to main::@15 +Renumbering block main::@40 to main::@16 +Renumbering block main::@41 to main::@17 +Renumbering block main::@42 to main::@18 +Renumbering block main::@43 to main::@19 +Renumbering block main::@44 to main::@20 Renumbering block prepareBobs::@4 to prepareBobs::@2 Renumbering block prepareBobs::@5 to prepareBobs::@3 Renumbering block prepareBobs::@6 to prepareBobs::@4 @@ -1834,7 +2563,12 @@ Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::vicSelectGfxBank1_toDd001 Adding NOP phi() at start of main::toD0181 -Adding NOP phi() at start of memset +Adding NOP phi() at start of main::@4 +Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@6 +Adding NOP phi() at start of main::vicSelectGfxBank2_toDd001 +Adding NOP phi() at start of main::toD0182 +Adding NOP phi() at start of keyboard_key_pressed Adding NOP phi() at start of prepareBobs Adding NOP phi() at start of prepareBobs::@4 Adding NOP phi() at start of prepareBobs::@10 @@ -1869,251 +2603,357 @@ main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 to:main::toD0181 main::toD0181: scope:[main] from main::vicSelectGfxBank1_@1 [9] phi() - to:main::@4 -main::@4: scope:[main] from main::toD0181 + to:main::@10 +main::@10: scope:[main] from main::toD0181 [10] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [11] call memset to:main::@1 -main::@1: scope:[main] from main::@4 main::@7 - [12] (byte) main::sin_y_idx#7 ← phi( main::@4/(byte) $49 main::@7/(byte) main::sin_y_idx#1 ) - [12] (byte) main::sin_x_idx#7 ← phi( main::@4/(byte) 0 main::@7/(byte) main::sin_x_idx#1 ) +main::@1: scope:[main] from main::@10 main::@3 + [12] (byte) main::x#4 ← phi( main::@3/(byte) main::x#1 main::@10/(byte) 0 ) to:main::@2 -main::@2: scope:[main] from main::@1 main::@2 - [13] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 +main::@2: scope:[main] from main::@1 main::@12 + [13] (byte) main::y#2 ← phi( main::@1/(byte) 0 main::@12/(byte) main::y#1 ) + [14] (byte~) main::$30 ← (byte) main::x#4 << (byte) 1 + [15] (byte~) main::$31 ← (byte~) main::$30 + (byte) main::x#4 + [16] (byte~) main::$7 ← (byte~) main::$31 << (byte) 2 + [17] (byte) renderBob::xpos#0 ← (byte~) main::$7 + (byte) main::y#2 + [18] (byte~) main::$33 ← (byte) main::y#2 << (byte) 1 + [19] (byte~) main::$34 ← (byte~) main::$33 + (byte) main::y#2 + [20] (byte~) main::$9 ← (byte~) main::$34 << (byte) 3 + [21] (byte) renderBob::ypos#0 ← (byte~) main::$9 + (byte) main::x#4 + [22] call renderBob + to:main::@12 +main::@12: scope:[main] from main::@2 + [23] (byte) main::y#1 ← ++ (byte) main::y#2 + [24] if((byte) main::y#1!=(byte) 4) goto main::@2 to:main::@3 -main::@3: scope:[main] from main::@2 - [14] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) - [15] (byte) renderBob::xpos#0 ← *((const byte*) SIN_X_TAB + (byte) main::sin_x_idx#7) - [16] (byte) renderBob::ypos#0 ← *((const byte*) SIN_Y_TAB + (byte) main::sin_y_idx#7) - [17] call renderBob +main::@3: scope:[main] from main::@12 + [25] (byte) main::x#1 ← ++ (byte) main::x#4 + [26] if((byte) main::x#1!=(byte) 8) goto main::@1 + to:main::@4 +main::@4: scope:[main] from main::@13 main::@3 + [27] phi() + [28] call keyboard_key_pressed + [29] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + to:main::@13 +main::@13: scope:[main] from main::@4 + [30] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 + [31] if((byte) 0==(byte~) main::$14) goto main::@4 to:main::@5 -main::@5: scope:[main] from main::@3 - [18] (byte) renderBob::xpos#1 ← *((const byte*) SIN_X_TAB+(byte) $f + (byte) main::sin_x_idx#7) - [19] (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB+(byte) $b + (byte) main::sin_y_idx#7) - [20] call renderBob +main::@5: scope:[main] from main::@13 main::@14 + [32] phi() + [33] call keyboard_key_pressed + [34] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 + to:main::@14 +main::@14: scope:[main] from main::@5 + [35] (byte~) main::$16 ← (byte) keyboard_key_pressed::return#3 + [36] if((byte) 0!=(byte~) main::$16) goto main::@5 to:main::@6 -main::@6: scope:[main] from main::@5 - [21] (byte) renderBob::xpos#2 ← *((const byte*) SIN_X_TAB+(byte) $16 + (byte) main::sin_x_idx#7) - [22] (byte) renderBob::ypos#2 ← *((const byte*) SIN_Y_TAB+(byte) $1e + (byte) main::sin_y_idx#7) - [23] call renderBob +main::@6: scope:[main] from main::@14 + [37] phi() + [38] call memset to:main::@7 -main::@7: scope:[main] from main::@6 - [24] (byte) main::sin_x_idx#1 ← ++ (byte) main::sin_x_idx#7 - [25] (byte) main::sin_y_idx#1 ← ++ (byte) main::sin_y_idx#7 - [26] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) - to:main::@1 +main::@7: scope:[main] from main::@20 main::@6 + [39] (byte) main::sin_y_idx#9 ← phi( main::@6/(byte) $49 main::@20/(byte) main::sin_y_idx#1 ) + [39] (byte) main::sin_x_idx#9 ← phi( main::@6/(byte) 0 main::@20/(byte) main::sin_x_idx#1 ) + to:main::@8 +main::@8: scope:[main] from main::@7 main::@8 + [40] if(*((const byte*) RASTER)<(byte) $f8) goto main::@8 + to:main::@9 +main::@9: scope:[main] from main::@8 + [41] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) + [42] (byte) renderBob::xpos#1 ← *((const byte*) SIN_X_TAB+(byte)(number) $15*(number) 4 + (byte) main::sin_x_idx#9) + [43] (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB + (byte) main::sin_y_idx#9) + [44] call renderBob + to:main::@15 +main::@15: scope:[main] from main::@9 + [45] (byte) renderBob::xpos#2 ← *((const byte*) SIN_X_TAB+(byte)(number) $13*(number) 3 + (byte) main::sin_x_idx#9) + [46] (byte) renderBob::ypos#2 ← *((const byte*) SIN_Y_TAB+(byte)(number) $f*(number) 1 + (byte) main::sin_y_idx#9) + [47] call renderBob + to:main::@16 +main::@16: scope:[main] from main::@15 + [48] (byte) renderBob::xpos#3 ← *((const byte*) SIN_X_TAB+(byte)(number) $11*(number) 2 + (byte) main::sin_x_idx#9) + [49] (byte) renderBob::ypos#3 ← *((const byte*) SIN_Y_TAB+(byte)(number) $11*(number) 2 + (byte) main::sin_y_idx#9) + [50] call renderBob + to:main::@17 +main::@17: scope:[main] from main::@16 + [51] (byte) renderBob::xpos#4 ← *((const byte*) SIN_X_TAB+(byte)(number) $f*(number) 1 + (byte) main::sin_x_idx#9) + [52] (byte) renderBob::ypos#4 ← *((const byte*) SIN_Y_TAB+(byte)(number) $13*(number) 3 + (byte) main::sin_y_idx#9) + [53] call renderBob + to:main::@18 +main::@18: scope:[main] from main::@17 + [54] (byte) renderBob::xpos#5 ← *((const byte*) SIN_X_TAB + (byte) main::sin_x_idx#9) + [55] (byte) renderBob::ypos#5 ← *((const byte*) SIN_Y_TAB+(byte)(number) $15*(number) 4 + (byte) main::sin_y_idx#9) + [56] call renderBob + to:main::@19 +main::@19: scope:[main] from main::@18 + [57] (byte) main::sin_x_idx#1 ← ++ (byte) main::sin_x_idx#9 + [58] (byte) main::sin_y_idx#1 ← ++ (byte) main::sin_y_idx#9 + [59] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) + [60] call keyboard_key_pressed + [61] (byte) keyboard_key_pressed::return#4 ← (byte) keyboard_key_pressed::return#0 + to:main::@20 +main::@20: scope:[main] from main::@19 + [62] (byte~) main::$25 ← (byte) keyboard_key_pressed::return#4 + [63] if((byte) 0!=(byte~) main::$25) goto main::vicSelectGfxBank2 + to:main::@7 +main::vicSelectGfxBank2: scope:[main] from main::@20 + [64] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 + to:main::vicSelectGfxBank2_toDd001 +main::vicSelectGfxBank2_toDd001: scope:[main] from main::vicSelectGfxBank2 + [65] phi() + to:main::vicSelectGfxBank2_@1 +main::vicSelectGfxBank2_@1: scope:[main] from main::vicSelectGfxBank2_toDd001 + [66] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 + to:main::toD0182 +main::toD0182: scope:[main] from main::vicSelectGfxBank2_@1 + [67] phi() + to:main::@11 +main::@11: scope:[main] from main::toD0182 + [68] *((const byte*) D018) ← (const byte) main::toD0182_return#0 + to:main::@return +main::@return: scope:[main] from main::@11 + [69] return + to:@return + +(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) +keyboard_key_pressed: scope:[keyboard_key_pressed] from main::@19 main::@4 main::@5 + [70] phi() + [71] call keyboard_matrix_read + [72] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + to:keyboard_key_pressed::@1 +keyboard_key_pressed::@1: scope:[keyboard_key_pressed] from keyboard_key_pressed + [73] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 + [74] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask+(const byte) keyboard_key_pressed::colidx#0) + to:keyboard_key_pressed::@return +keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_pressed::@1 + [75] return + to:@return + +(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) +keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed + [76] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [77] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) + to:keyboard_matrix_read::@return +keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read + [78] return + to:@return (void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos) -renderBob: scope:[renderBob] from main::@3 main::@5 main::@6 - [27] (byte) renderBob::ypos#3 ← phi( main::@5/(byte) renderBob::ypos#1 main::@6/(byte) renderBob::ypos#2 main::@3/(byte) renderBob::ypos#0 ) - [27] (byte) renderBob::xpos#3 ← phi( main::@5/(byte) renderBob::xpos#1 main::@6/(byte) renderBob::xpos#2 main::@3/(byte) renderBob::xpos#0 ) - [28] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#3 >> (byte) 2 - [29] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#3 >> (byte) 3 - [30] (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 - [31] (word~) renderBob::$10 ← (word~) renderBob::$2 << (byte) 2 - [32] (word~) renderBob::$11 ← (word~) renderBob::$10 + (word~) renderBob::$2 - [33] (word) renderBob::y_offset#0 ← (word~) renderBob::$11 << (byte) 3 - [34] (byte*~) renderBob::$4 ← (const byte*) SCREEN + (word) renderBob::y_offset#0 - [35] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 - [36] (byte~) renderBob::$6 ← (byte) renderBob::ypos#3 & (byte) 7 - [37] (byte~) renderBob::$7 ← (byte~) renderBob::$6 << (byte) 2 - [38] (byte~) renderBob::$8 ← (byte) renderBob::xpos#3 & (byte) 3 - [39] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 - [40] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) - [41] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [42] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [43] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [44] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [45] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [46] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [47] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [48] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) +renderBob: scope:[renderBob] from main::@15 main::@16 main::@17 main::@18 main::@2 main::@9 + [79] (byte) renderBob::ypos#6 ← phi( main::@2/(byte) renderBob::ypos#0 main::@9/(byte) renderBob::ypos#1 main::@15/(byte) renderBob::ypos#2 main::@16/(byte) renderBob::ypos#3 main::@17/(byte) renderBob::ypos#4 main::@18/(byte) renderBob::ypos#5 ) + [79] (byte) renderBob::xpos#6 ← phi( main::@2/(byte) renderBob::xpos#0 main::@9/(byte) renderBob::xpos#1 main::@15/(byte) renderBob::xpos#2 main::@16/(byte) renderBob::xpos#3 main::@17/(byte) renderBob::xpos#4 main::@18/(byte) renderBob::xpos#5 ) + [80] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#6 >> (byte) 2 + [81] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#6 >> (byte) 3 + [82] (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 + [83] (word~) renderBob::$10 ← (word~) renderBob::$2 << (byte) 2 + [84] (word~) renderBob::$11 ← (word~) renderBob::$10 + (word~) renderBob::$2 + [85] (word) renderBob::y_offset#0 ← (word~) renderBob::$11 << (byte) 3 + [86] (byte*~) renderBob::$4 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 + [87] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 + [88] (byte~) renderBob::$6 ← (byte) renderBob::ypos#6 & (byte) 7 + [89] (byte~) renderBob::$7 ← (byte~) renderBob::$6 << (byte) 2 + [90] (byte~) renderBob::$8 ← (byte) renderBob::xpos#6 & (byte) 3 + [91] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 + [92] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) + [93] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [94] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [95] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [96] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [97] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [98] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [99] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [100] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) to:renderBob::@return renderBob::@return: scope:[renderBob] from renderBob - [49] return + [101] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) -memset: scope:[memset] from main::@4 - [50] phi() +memset: scope:[memset] from main::@10 main::@6 + [102] (void*) memset::str#3 ← phi( main::@6/(void*)(const byte*) BOB_SCREEN main::@10/(void*)(const byte*) BOB_SCREEN ) to:memset::@1 -memset::@1: scope:[memset] from memset memset::@2 - [51] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [52] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 +memset::@1: scope:[memset] from memset + [103] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 + [104] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + to:memset::@2 +memset::@2: scope:[memset] from memset::@1 memset::@3 + [105] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [106] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 to:memset::@return -memset::@return: scope:[memset] from memset::@1 - [53] return +memset::@return: scope:[memset] from memset::@2 + [107] return to:@return -memset::@2: scope:[memset] from memset::@1 - [54] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [55] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@1 +memset::@3: scope:[memset] from memset::@2 + [108] *((byte*) memset::dst#2) ← (byte) 0 + [109] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + to:memset::@2 (void()) prepareBobs() prepareBobs: scope:[prepareBobs] from main - [56] phi() - [57] call bobCharsetFindOrAddGlyph + [110] phi() + [111] call bobCharsetFindOrAddGlyph to:prepareBobs::@1 prepareBobs::@1: scope:[prepareBobs] from prepareBobs prepareBobs::@8 - [58] (byte) prepareBobs::bob_table_idx#6 ← phi( prepareBobs/(byte) 0 prepareBobs::@8/(byte) prepareBobs::bob_table_idx#12 ) - [58] (byte) bob_charset_next_id#14 ← phi( prepareBobs/(byte) bob_charset_next_id#16 prepareBobs::@8/(byte) bob_charset_next_id#30 ) - [58] (byte) prepareBobs::shift_y#2 ← phi( prepareBobs/(byte) 0 prepareBobs::@8/(byte) prepareBobs::shift_y#1 ) - [59] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 + [112] (byte) prepareBobs::bob_table_idx#6 ← phi( prepareBobs/(byte) 0 prepareBobs::@8/(byte) prepareBobs::bob_table_idx#12 ) + [112] (byte) bob_charset_next_id#14 ← phi( prepareBobs/(byte) bob_charset_next_id#16 prepareBobs::@8/(byte) bob_charset_next_id#29 ) + [112] (byte) prepareBobs::shift_y#2 ← phi( prepareBobs/(byte) 0 prepareBobs::@8/(byte) prepareBobs::shift_y#1 ) + [113] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 to:prepareBobs::@return prepareBobs::@return: scope:[prepareBobs] from prepareBobs::@1 - [60] return + [114] return to:@return prepareBobs::@2: scope:[prepareBobs] from prepareBobs::@1 prepareBobs::@11 - [61] (byte) bob_charset_next_id#30 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#14 prepareBobs::@11/(byte) bob_charset_next_id#21 ) - [61] (byte) prepareBobs::bob_table_idx#12 ← phi( prepareBobs::@1/(byte) prepareBobs::bob_table_idx#6 prepareBobs::@11/(byte) prepareBobs::bob_table_idx#1 ) - [61] (byte) prepareBobs::shift_x#2 ← phi( prepareBobs::@1/(byte) 0 prepareBobs::@11/(byte) prepareBobs::shift_x#1 ) - [62] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 + [115] (byte) bob_charset_next_id#29 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#14 prepareBobs::@11/(byte) bob_charset_next_id#21 ) + [115] (byte) prepareBobs::bob_table_idx#12 ← phi( prepareBobs::@1/(byte) prepareBobs::bob_table_idx#6 prepareBobs::@11/(byte) prepareBobs::bob_table_idx#1 ) + [115] (byte) prepareBobs::shift_x#2 ← phi( prepareBobs::@1/(byte) 0 prepareBobs::@11/(byte) prepareBobs::shift_x#1 ) + [116] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 to:prepareBobs::@4 prepareBobs::@4: scope:[prepareBobs] from prepareBobs::@2 - [63] phi() - [64] call shiftProtoBobDown + [117] phi() + [118] call shiftProtoBobDown to:prepareBobs::@8 prepareBobs::@8: scope:[prepareBobs] from prepareBobs::@4 - [65] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 + [119] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 to:prepareBobs::@1 prepareBobs::@3: scope:[prepareBobs] from prepareBobs::@2 - [66] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 + [120] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 to:prepareBobs::@5 prepareBobs::@5: scope:[prepareBobs] from prepareBobs::@3 prepareBobs::@9 - [67] (byte*) prepareBobs::bob_table#2 ← phi( prepareBobs::@9/(byte*) prepareBobs::bob_table#1 prepareBobs::@3/(byte*) prepareBobs::bob_table#0 ) - [67] (byte) bob_charset_next_id#21 ← phi( prepareBobs::@9/(byte) bob_charset_next_id#16 prepareBobs::@3/(byte) bob_charset_next_id#30 ) - [67] (byte*) prepareBobs::bob_glyph#2 ← phi( prepareBobs::@9/(byte*) prepareBobs::bob_glyph#1 prepareBobs::@3/(const byte*) PROTO_BOB ) - [67] (byte) prepareBobs::cell#2 ← phi( prepareBobs::@9/(byte) prepareBobs::cell#1 prepareBobs::@3/(byte) 0 ) - [68] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 + [121] (byte*) prepareBobs::bob_table#2 ← phi( prepareBobs::@9/(byte*) prepareBobs::bob_table#1 prepareBobs::@3/(byte*) prepareBobs::bob_table#0 ) + [121] (byte) bob_charset_next_id#21 ← phi( prepareBobs::@9/(byte) bob_charset_next_id#16 prepareBobs::@3/(byte) bob_charset_next_id#29 ) + [121] (byte*) prepareBobs::bob_glyph#2 ← phi( prepareBobs::@9/(byte*) prepareBobs::bob_glyph#1 prepareBobs::@3/(const byte*) PROTO_BOB ) + [121] (byte) prepareBobs::cell#2 ← phi( prepareBobs::@9/(byte) prepareBobs::cell#1 prepareBobs::@3/(byte) 0 ) + [122] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 to:prepareBobs::@7 prepareBobs::@7: scope:[prepareBobs] from prepareBobs::@5 - [69] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 - [70] call shiftProtoBobRight + [123] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 + [124] call shiftProtoBobRight to:prepareBobs::@10 prepareBobs::@10: scope:[prepareBobs] from prepareBobs::@7 - [71] phi() - [72] call shiftProtoBobRight + [125] phi() + [126] call shiftProtoBobRight to:prepareBobs::@11 prepareBobs::@11: scope:[prepareBobs] from prepareBobs::@10 - [73] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 + [127] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 to:prepareBobs::@2 prepareBobs::@6: scope:[prepareBobs] from prepareBobs::@5 - [74] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 - [75] call bobCharsetFindOrAddGlyph - [76] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 + [128] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + [129] call bobCharsetFindOrAddGlyph + [130] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 to:prepareBobs::@9 prepareBobs::@9: scope:[prepareBobs] from prepareBobs::@6 - [77] (byte~) prepareBobs::$5 ← (byte) bobCharsetFindOrAddGlyph::return#1 - [78] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$5 - [79] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 - [80] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y - [81] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 + [131] (byte~) prepareBobs::$5 ← (byte) bobCharsetFindOrAddGlyph::return#1 + [132] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$5 + [133] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 + [134] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y + [135] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 to:prepareBobs::@5 (byte()) bobCharsetFindOrAddGlyph((byte*) bobCharsetFindOrAddGlyph::bob_glyph) bobCharsetFindOrAddGlyph: scope:[bobCharsetFindOrAddGlyph] from prepareBobs prepareBobs::@6 - [82] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 ← phi( prepareBobs/(const byte*) PROTO_BOB+(byte) $30 prepareBobs::@6/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ) - [82] (byte) bob_charset_next_id#23 ← phi( prepareBobs/(byte) 0 prepareBobs::@6/(byte) bob_charset_next_id#21 ) + [136] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 ← phi( prepareBobs/(const byte*) PROTO_BOB+(byte) $30 prepareBobs::@6/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ) + [136] (byte) bob_charset_next_id#23 ← phi( prepareBobs/(byte) 0 prepareBobs::@6/(byte) bob_charset_next_id#21 ) to:bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@1: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph bobCharsetFindOrAddGlyph::@6 - [83] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 ← phi( bobCharsetFindOrAddGlyph/(const byte*) BOB_CHARSET bobCharsetFindOrAddGlyph::@6/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ) - [83] (byte) bobCharsetFindOrAddGlyph::glyph_id#11 ← phi( bobCharsetFindOrAddGlyph/(byte) 0 bobCharsetFindOrAddGlyph::@6/(byte) bobCharsetFindOrAddGlyph::glyph_id#1 ) - [84] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 + [137] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 ← phi( bobCharsetFindOrAddGlyph/(const byte*) BOB_CHARSET bobCharsetFindOrAddGlyph::@6/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ) + [137] (byte) bobCharsetFindOrAddGlyph::glyph_id#11 ← phi( bobCharsetFindOrAddGlyph/(byte) 0 bobCharsetFindOrAddGlyph::@6/(byte) bobCharsetFindOrAddGlyph::glyph_id#1 ) + [138] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 to:bobCharsetFindOrAddGlyph::@7 bobCharsetFindOrAddGlyph::@7: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@8 - [85] (byte) bobCharsetFindOrAddGlyph::i1#2 ← phi( bobCharsetFindOrAddGlyph::@8/(byte) bobCharsetFindOrAddGlyph::i1#1 bobCharsetFindOrAddGlyph::@1/(byte) 0 ) - [86] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 + [139] (byte) bobCharsetFindOrAddGlyph::i1#2 ← phi( bobCharsetFindOrAddGlyph::@8/(byte) bobCharsetFindOrAddGlyph::i1#1 bobCharsetFindOrAddGlyph::@1/(byte) 0 ) + [140] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 to:bobCharsetFindOrAddGlyph::@9 bobCharsetFindOrAddGlyph::@9: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@7 - [87] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 + [141] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 to:bobCharsetFindOrAddGlyph::@return bobCharsetFindOrAddGlyph::@return: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 - [88] (byte) bob_charset_next_id#16 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#23 bobCharsetFindOrAddGlyph::@9/(byte) bob_charset_next_id#8 ) - [89] return + [142] (byte) bob_charset_next_id#16 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#23 bobCharsetFindOrAddGlyph::@9/(byte) bob_charset_next_id#8 ) + [143] return to:@return bobCharsetFindOrAddGlyph::@8: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@7 - [90] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) - [91] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 + [144] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) + [145] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 to:bobCharsetFindOrAddGlyph::@7 bobCharsetFindOrAddGlyph::@2: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@4 - [92] (byte) bobCharsetFindOrAddGlyph::i#2 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) 0 bobCharsetFindOrAddGlyph::@4/(byte) bobCharsetFindOrAddGlyph::i#1 ) - [93] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 + [146] (byte) bobCharsetFindOrAddGlyph::i#2 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) 0 bobCharsetFindOrAddGlyph::@4/(byte) bobCharsetFindOrAddGlyph::i#1 ) + [147] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 to:bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@3: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@2 - [94] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 + [148] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 to:bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@5: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@2 bobCharsetFindOrAddGlyph::@3 - [95] (byte) bobCharsetFindOrAddGlyph::found#2 ← phi( bobCharsetFindOrAddGlyph::@3/(byte) 0 bobCharsetFindOrAddGlyph::@2/(byte) 1 ) - [96] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 + [149] (byte) bobCharsetFindOrAddGlyph::found#2 ← phi( bobCharsetFindOrAddGlyph::@3/(byte) 0 bobCharsetFindOrAddGlyph::@2/(byte) 1 ) + [150] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 to:bobCharsetFindOrAddGlyph::@return bobCharsetFindOrAddGlyph::@6: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@5 - [97] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 - [98] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 + [151] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 + [152] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 to:bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@4: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@3 - [99] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 + [153] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 to:bobCharsetFindOrAddGlyph::@2 (void()) shiftProtoBobRight() shiftProtoBobRight: scope:[shiftProtoBobRight] from prepareBobs::@10 prepareBobs::@7 - [100] phi() + [154] phi() to:shiftProtoBobRight::@1 shiftProtoBobRight::@1: scope:[shiftProtoBobRight] from shiftProtoBobRight shiftProtoBobRight::@6 - [101] (byte) shiftProtoBobRight::carry#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::carry#10 ) - [101] (byte) shiftProtoBobRight::j#3 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::j#10 ) - [101] (byte) shiftProtoBobRight::i#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::i#1 ) - [102] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 + [155] (byte) shiftProtoBobRight::carry#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::carry#10 ) + [155] (byte) shiftProtoBobRight::j#3 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::j#10 ) + [155] (byte) shiftProtoBobRight::i#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::i#1 ) + [156] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 to:shiftProtoBobRight::@return shiftProtoBobRight::@return: scope:[shiftProtoBobRight] from shiftProtoBobRight::@1 - [103] return + [157] return to:@return shiftProtoBobRight::@2: scope:[shiftProtoBobRight] from shiftProtoBobRight::@1 - [104] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 - [105] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 + [158] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 + [159] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 to:shiftProtoBobRight::@4 shiftProtoBobRight::@3: scope:[shiftProtoBobRight] from shiftProtoBobRight::@2 - [106] phi() + [160] phi() to:shiftProtoBobRight::@4 shiftProtoBobRight::@4: scope:[shiftProtoBobRight] from shiftProtoBobRight::@2 shiftProtoBobRight::@3 - [107] (byte) shiftProtoBobRight::carry#1 ← phi( shiftProtoBobRight::@3/(byte) $80 shiftProtoBobRight::@2/(byte) 0 ) - [108] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 - [109] (byte~) shiftProtoBobRight::$6 ← (byte~) shiftProtoBobRight::$5 | (byte) shiftProtoBobRight::carry#2 - [110] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 - [111] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 + [161] (byte) shiftProtoBobRight::carry#1 ← phi( shiftProtoBobRight::@3/(byte) $80 shiftProtoBobRight::@2/(byte) 0 ) + [162] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 + [163] (byte~) shiftProtoBobRight::$6 ← (byte~) shiftProtoBobRight::$5 | (byte) shiftProtoBobRight::carry#2 + [164] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 + [165] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 to:shiftProtoBobRight::@7 shiftProtoBobRight::@7: scope:[shiftProtoBobRight] from shiftProtoBobRight::@4 - [112] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 + [166] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 to:shiftProtoBobRight::@6 shiftProtoBobRight::@6: scope:[shiftProtoBobRight] from shiftProtoBobRight::@5 shiftProtoBobRight::@7 - [113] (byte) shiftProtoBobRight::j#10 ← phi( shiftProtoBobRight::@7/(byte) shiftProtoBobRight::j#2 shiftProtoBobRight::@5/(byte) shiftProtoBobRight::j#1 ) - [114] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 - [115] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 + [167] (byte) shiftProtoBobRight::j#10 ← phi( shiftProtoBobRight::@7/(byte) shiftProtoBobRight::j#2 shiftProtoBobRight::@5/(byte) shiftProtoBobRight::j#1 ) + [168] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 + [169] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 to:shiftProtoBobRight::@1 shiftProtoBobRight::@5: scope:[shiftProtoBobRight] from shiftProtoBobRight::@4 - [116] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f + [170] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f to:shiftProtoBobRight::@6 (void()) shiftProtoBobDown() shiftProtoBobDown: scope:[shiftProtoBobDown] from prepareBobs::@4 - [117] phi() + [171] phi() to:shiftProtoBobDown::@1 shiftProtoBobDown::@1: scope:[shiftProtoBobDown] from shiftProtoBobDown shiftProtoBobDown::@2 - [118] (byte) shiftProtoBobDown::i#2 ← phi( shiftProtoBobDown/(byte) $17 shiftProtoBobDown::@2/(byte) shiftProtoBobDown::i#1 ) - [119] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 + [172] (byte) shiftProtoBobDown::i#2 ← phi( shiftProtoBobDown/(byte) $17 shiftProtoBobDown::@2/(byte) shiftProtoBobDown::i#1 ) + [173] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 to:shiftProtoBobDown::@3 shiftProtoBobDown::@3: scope:[shiftProtoBobDown] from shiftProtoBobDown::@1 - [120] *((const byte*) PROTO_BOB) ← (byte) 0 - [121] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 - [122] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 + [174] *((const byte*) PROTO_BOB) ← (byte) 0 + [175] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 + [176] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 to:shiftProtoBobDown::@return shiftProtoBobDown::@return: scope:[shiftProtoBobDown] from shiftProtoBobDown::@3 - [123] return + [177] return to:@return shiftProtoBobDown::@2: scope:[shiftProtoBobDown] from shiftProtoBobDown::@1 - [124] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) - [125] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) - [126] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 - [127] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 + [178] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) + [179] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) + [180] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 + [181] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 to:shiftProtoBobDown::@1 @@ -2143,30 +2983,70 @@ VARIABLE REGISTER WEIGHTS (byte) bob_charset_next_id#16 1100.6000000000001 (byte) bob_charset_next_id#21 275.5 (byte) bob_charset_next_id#23 1400.3333333333335 -(byte) bob_charset_next_id#30 37.33333333333333 +(byte) bob_charset_next_id#29 37.33333333333333 (byte) bob_charset_next_id#8 4.0 +(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) +(byte~) keyboard_key_pressed::$2 4.0 +(byte) keyboard_key_pressed::colidx +(byte) keyboard_key_pressed::key +(byte) keyboard_key_pressed::return +(byte) keyboard_key_pressed::return#0 7.000000000000001 +(byte) keyboard_key_pressed::return#2 22.0 +(byte) keyboard_key_pressed::return#3 22.0 +(byte) keyboard_key_pressed::return#4 22.0 +(byte) keyboard_key_pressed::rowidx +(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 (void()) main() +(byte~) main::$14 22.0 +(byte~) main::$16 22.0 +(byte~) main::$25 22.0 +(byte~) main::$30 202.0 +(byte~) main::$31 202.0 +(byte~) main::$33 202.0 +(byte~) main::$34 202.0 +(byte~) main::$7 202.0 +(byte~) main::$9 202.0 (byte) main::sin_x_idx -(byte) main::sin_x_idx#1 7.333333333333333 -(byte) main::sin_x_idx#7 4.583333333333333 +(byte) main::sin_x_idx#1 3.142857142857143 +(byte) main::sin_x_idx#9 4.277777777777779 (byte) main::sin_y_idx -(byte) main::sin_y_idx#1 11.0 -(byte) main::sin_y_idx#7 4.230769230769231 +(byte) main::sin_y_idx#1 3.6666666666666665 +(byte) main::sin_y_idx#9 4.052631578947368 (byte*) main::toD0181_gfx (byte) main::toD0181_return (byte*) main::toD0181_screen +(byte*) main::toD0182_gfx +(byte) main::toD0182_return +(byte*) main::toD0182_screen (byte*) main::vicSelectGfxBank1_gfx (byte*) main::vicSelectGfxBank1_toDd001_gfx (byte) main::vicSelectGfxBank1_toDd001_return +(byte*) main::vicSelectGfxBank2_gfx +(byte*) main::vicSelectGfxBank2_toDd001_gfx +(byte) main::vicSelectGfxBank2_toDd001_return +(byte) main::x +(byte) main::x#1 16.5 +(byte) main::x#4 25.0 +(byte) main::y +(byte) main::y#1 151.5 +(byte) main::y#2 50.5 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst (byte*) memset::dst#1 22.0 -(byte*) memset::dst#2 14.666666666666666 +(byte*) memset::dst#2 15.333333333333332 +(byte*) memset::dst#4 4.0 (byte*) memset::end +(byte*) memset::end#0 2.1666666666666665 (word) memset::num (void*) memset::return (void*) memset::str +(void*) memset::str#3 (void()) prepareBobs() (byte~) prepareBobs::$5 2002.0 (byte*) prepareBobs::bob_glyph @@ -2204,19 +3084,25 @@ VARIABLE REGISTER WEIGHTS (byte) renderBob::x_char_offset (byte) renderBob::x_char_offset#0 0.5714285714285714 (byte) renderBob::xpos -(byte) renderBob::xpos#0 11.0 +(byte) renderBob::xpos#0 40.4 (byte) renderBob::xpos#1 11.0 (byte) renderBob::xpos#2 11.0 -(byte) renderBob::xpos#3 3.3636363636363633 +(byte) renderBob::xpos#3 11.0 +(byte) renderBob::xpos#4 11.0 +(byte) renderBob::xpos#5 11.0 +(byte) renderBob::xpos#6 14.545454545454545 (byte) renderBob::y_char_offset (byte) renderBob::y_char_offset#0 2.0 (word) renderBob::y_offset (word) renderBob::y_offset#0 4.0 (byte) renderBob::ypos -(byte) renderBob::ypos#0 22.0 +(byte) renderBob::ypos#0 202.0 (byte) renderBob::ypos#1 22.0 (byte) renderBob::ypos#2 22.0 -(byte) renderBob::ypos#3 4.111111111111112 +(byte) renderBob::ypos#3 22.0 +(byte) renderBob::ypos#4 22.0 +(byte) renderBob::ypos#5 22.0 +(byte) renderBob::ypos#6 17.77777777777777 (void()) shiftProtoBobDown() (byte) shiftProtoBobDown::i (byte) shiftProtoBobDown::i#1 202.0 @@ -2240,18 +3126,21 @@ VARIABLE REGISTER WEIGHTS (byte) shiftProtoBobRight::new_carry Initial phi equivalence classes -[ main::sin_x_idx#7 main::sin_x_idx#1 ] -[ main::sin_y_idx#7 main::sin_y_idx#1 ] -[ renderBob::xpos#3 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#0 ] -[ renderBob::ypos#3 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#0 ] -[ memset::dst#2 memset::dst#1 ] +[ main::x#4 main::x#1 ] +[ main::y#2 main::y#1 ] +[ main::sin_x_idx#9 main::sin_x_idx#1 ] +[ main::sin_y_idx#9 main::sin_y_idx#1 ] +[ renderBob::xpos#6 renderBob::xpos#0 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#3 renderBob::xpos#4 renderBob::xpos#5 ] +[ renderBob::ypos#6 renderBob::ypos#0 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#3 renderBob::ypos#4 renderBob::ypos#5 ] +[ memset::str#3 ] +[ memset::dst#2 memset::dst#4 memset::dst#1 ] [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] [ prepareBobs::cell#2 prepareBobs::cell#1 ] [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] -[ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] +[ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] @@ -2263,6 +3152,22 @@ Initial phi equivalence classes [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] [ shiftProtoBobRight::carry#1 ] [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] +Added variable main::$30 to zero page equivalence class [ main::$30 ] +Added variable main::$31 to zero page equivalence class [ main::$31 ] +Added variable main::$7 to zero page equivalence class [ main::$7 ] +Added variable main::$33 to zero page equivalence class [ main::$33 ] +Added variable main::$34 to zero page equivalence class [ main::$34 ] +Added variable main::$9 to zero page equivalence class [ main::$9 ] +Added variable keyboard_key_pressed::return#2 to zero page equivalence class [ keyboard_key_pressed::return#2 ] +Added variable main::$14 to zero page equivalence class [ main::$14 ] +Added variable keyboard_key_pressed::return#3 to zero page equivalence class [ keyboard_key_pressed::return#3 ] +Added variable main::$16 to zero page equivalence class [ main::$16 ] +Added variable keyboard_key_pressed::return#4 to zero page equivalence class [ keyboard_key_pressed::return#4 ] +Added variable main::$25 to zero page equivalence class [ main::$25 ] +Added variable keyboard_matrix_read::return#2 to zero page equivalence class [ keyboard_matrix_read::return#2 ] +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 renderBob::x_char_offset#0 to zero page equivalence class [ renderBob::x_char_offset#0 ] Added variable renderBob::y_char_offset#0 to zero page equivalence class [ renderBob::y_char_offset#0 ] Added variable renderBob::$2 to zero page equivalence class [ renderBob::$2 ] @@ -2275,24 +3180,28 @@ Added variable renderBob::$6 to zero page equivalence class [ renderBob::$6 ] Added variable renderBob::$7 to zero page equivalence class [ renderBob::$7 ] Added variable renderBob::$8 to zero page equivalence class [ renderBob::$8 ] Added variable renderBob::bob_table_idx#0 to zero page equivalence class [ renderBob::bob_table_idx#0 ] +Added variable memset::end#0 to zero page equivalence class [ memset::end#0 ] Added variable bobCharsetFindOrAddGlyph::return#1 to zero page equivalence class [ bobCharsetFindOrAddGlyph::return#1 ] Added variable prepareBobs::$5 to zero page equivalence class [ prepareBobs::$5 ] Added variable shiftProtoBobRight::$1 to zero page equivalence class [ shiftProtoBobRight::$1 ] Added variable shiftProtoBobRight::$5 to zero page equivalence class [ shiftProtoBobRight::$5 ] Added variable shiftProtoBobRight::$6 to zero page equivalence class [ shiftProtoBobRight::$6 ] Complete equivalence classes -[ main::sin_x_idx#7 main::sin_x_idx#1 ] -[ main::sin_y_idx#7 main::sin_y_idx#1 ] -[ renderBob::xpos#3 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#0 ] -[ renderBob::ypos#3 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#0 ] -[ memset::dst#2 memset::dst#1 ] +[ main::x#4 main::x#1 ] +[ main::y#2 main::y#1 ] +[ main::sin_x_idx#9 main::sin_x_idx#1 ] +[ main::sin_y_idx#9 main::sin_y_idx#1 ] +[ renderBob::xpos#6 renderBob::xpos#0 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#3 renderBob::xpos#4 renderBob::xpos#5 ] +[ renderBob::ypos#6 renderBob::ypos#0 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#3 renderBob::ypos#4 renderBob::ypos#5 ] +[ memset::str#3 ] +[ memset::dst#2 memset::dst#4 memset::dst#1 ] [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] [ prepareBobs::cell#2 prepareBobs::cell#1 ] [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] -[ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] +[ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] @@ -2304,6 +3213,22 @@ Complete equivalence classes [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] [ shiftProtoBobRight::carry#1 ] [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] +[ main::$30 ] +[ main::$31 ] +[ main::$7 ] +[ main::$33 ] +[ main::$34 ] +[ main::$9 ] +[ keyboard_key_pressed::return#2 ] +[ main::$14 ] +[ keyboard_key_pressed::return#3 ] +[ main::$16 ] +[ keyboard_key_pressed::return#4 ] +[ main::$25 ] +[ keyboard_matrix_read::return#2 ] +[ keyboard_key_pressed::$2 ] +[ keyboard_key_pressed::return#0 ] +[ keyboard_matrix_read::return#0 ] [ renderBob::x_char_offset#0 ] [ renderBob::y_char_offset#0 ] [ renderBob::$2 ] @@ -2316,51 +3241,72 @@ Complete equivalence classes [ renderBob::$7 ] [ renderBob::$8 ] [ renderBob::bob_table_idx#0 ] +[ memset::end#0 ] [ bobCharsetFindOrAddGlyph::return#1 ] [ prepareBobs::$5 ] [ shiftProtoBobRight::$1 ] [ shiftProtoBobRight::$5 ] [ shiftProtoBobRight::$6 ] -Allocated zp[1]:2 [ main::sin_x_idx#7 main::sin_x_idx#1 ] -Allocated zp[1]:3 [ main::sin_y_idx#7 main::sin_y_idx#1 ] -Allocated zp[1]:4 [ renderBob::xpos#3 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#0 ] -Allocated zp[1]:5 [ renderBob::ypos#3 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#0 ] -Allocated zp[2]:6 [ memset::dst#2 memset::dst#1 ] -Allocated zp[1]:8 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Allocated zp[1]:9 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] -Allocated zp[1]:10 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] -Allocated zp[1]:11 [ prepareBobs::cell#2 prepareBobs::cell#1 ] -Allocated zp[2]:12 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] -Allocated zp[2]:14 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] -Allocated zp[1]:16 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] -Allocated zp[2]:17 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] -Allocated zp[1]:19 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] -Allocated zp[2]:20 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] -Allocated zp[1]:22 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] -Allocated zp[1]:23 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -Allocated zp[1]:24 [ bobCharsetFindOrAddGlyph::found#2 ] -Allocated zp[1]:25 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] -Allocated zp[1]:26 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] -Allocated zp[1]:27 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] -Allocated zp[1]:28 [ shiftProtoBobRight::carry#1 ] -Allocated zp[1]:29 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] -Allocated zp[1]:30 [ renderBob::x_char_offset#0 ] -Allocated zp[1]:31 [ renderBob::y_char_offset#0 ] -Allocated zp[2]:32 [ renderBob::$2 ] -Allocated zp[2]:34 [ renderBob::$10 ] -Allocated zp[2]:36 [ renderBob::$11 ] -Allocated zp[2]:38 [ renderBob::y_offset#0 ] -Allocated zp[2]:40 [ renderBob::$4 ] -Allocated zp[2]:42 [ renderBob::screen#0 ] -Allocated zp[1]:44 [ renderBob::$6 ] -Allocated zp[1]:45 [ renderBob::$7 ] -Allocated zp[1]:46 [ renderBob::$8 ] -Allocated zp[1]:47 [ renderBob::bob_table_idx#0 ] -Allocated zp[1]:48 [ bobCharsetFindOrAddGlyph::return#1 ] -Allocated zp[1]:49 [ prepareBobs::$5 ] -Allocated zp[1]:50 [ shiftProtoBobRight::$1 ] -Allocated zp[1]:51 [ shiftProtoBobRight::$5 ] -Allocated zp[1]:52 [ shiftProtoBobRight::$6 ] +Allocated zp[1]:2 [ main::x#4 main::x#1 ] +Allocated zp[1]:3 [ main::y#2 main::y#1 ] +Allocated zp[1]:4 [ main::sin_x_idx#9 main::sin_x_idx#1 ] +Allocated zp[1]:5 [ main::sin_y_idx#9 main::sin_y_idx#1 ] +Allocated zp[1]:6 [ renderBob::xpos#6 renderBob::xpos#0 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#3 renderBob::xpos#4 renderBob::xpos#5 ] +Allocated zp[1]:7 [ renderBob::ypos#6 renderBob::ypos#0 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#3 renderBob::ypos#4 renderBob::ypos#5 ] +Allocated zp[2]:8 [ memset::str#3 ] +Allocated zp[2]:10 [ memset::dst#2 memset::dst#4 memset::dst#1 ] +Allocated zp[1]:12 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Allocated zp[1]:13 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] +Allocated zp[1]:14 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] +Allocated zp[1]:15 [ prepareBobs::cell#2 prepareBobs::cell#1 ] +Allocated zp[2]:16 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] +Allocated zp[2]:18 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] +Allocated zp[1]:20 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] +Allocated zp[2]:21 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] +Allocated zp[1]:23 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +Allocated zp[2]:24 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] +Allocated zp[1]:26 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] +Allocated zp[1]:27 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +Allocated zp[1]:28 [ bobCharsetFindOrAddGlyph::found#2 ] +Allocated zp[1]:29 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] +Allocated zp[1]:30 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] +Allocated zp[1]:31 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] +Allocated zp[1]:32 [ shiftProtoBobRight::carry#1 ] +Allocated zp[1]:33 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] +Allocated zp[1]:34 [ main::$30 ] +Allocated zp[1]:35 [ main::$31 ] +Allocated zp[1]:36 [ main::$7 ] +Allocated zp[1]:37 [ main::$33 ] +Allocated zp[1]:38 [ main::$34 ] +Allocated zp[1]:39 [ main::$9 ] +Allocated zp[1]:40 [ keyboard_key_pressed::return#2 ] +Allocated zp[1]:41 [ main::$14 ] +Allocated zp[1]:42 [ keyboard_key_pressed::return#3 ] +Allocated zp[1]:43 [ main::$16 ] +Allocated zp[1]:44 [ keyboard_key_pressed::return#4 ] +Allocated zp[1]:45 [ main::$25 ] +Allocated zp[1]:46 [ keyboard_matrix_read::return#2 ] +Allocated zp[1]:47 [ keyboard_key_pressed::$2 ] +Allocated zp[1]:48 [ keyboard_key_pressed::return#0 ] +Allocated zp[1]:49 [ keyboard_matrix_read::return#0 ] +Allocated zp[1]:50 [ renderBob::x_char_offset#0 ] +Allocated zp[1]:51 [ renderBob::y_char_offset#0 ] +Allocated zp[2]:52 [ renderBob::$2 ] +Allocated zp[2]:54 [ renderBob::$10 ] +Allocated zp[2]:56 [ renderBob::$11 ] +Allocated zp[2]:58 [ renderBob::y_offset#0 ] +Allocated zp[2]:60 [ renderBob::$4 ] +Allocated zp[2]:62 [ renderBob::screen#0 ] +Allocated zp[1]:64 [ renderBob::$6 ] +Allocated zp[1]:65 [ renderBob::$7 ] +Allocated zp[1]:66 [ renderBob::$8 ] +Allocated zp[1]:67 [ renderBob::bob_table_idx#0 ] +Allocated zp[2]:68 [ memset::end#0 ] +Allocated zp[1]:70 [ bobCharsetFindOrAddGlyph::return#1 ] +Allocated zp[1]:71 [ prepareBobs::$5 ] +Allocated zp[1]:72 [ shiftProtoBobRight::$1 ] +Allocated zp[1]:73 [ shiftProtoBobRight::$5 ] +Allocated zp[1]:74 [ shiftProtoBobRight::$6 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -2374,14 +3320,23 @@ Target platform is c64basic / MOS6502X .label RASTER = $d012 .label BORDERCOL = $d020 .label D018 = $d018 + // CIA#1 Port A: keyboard matrix columns and joystick #2 + .label CIA1_PORT_A = $dc00 + // CIA#1 Port B: keyboard matrix rows and joystick #1. + .label CIA1_PORT_B = $dc01 // CIA#2 Port A: Serial bus, RS-232, VIC memory bank .label CIA2_PORT_A = $dd00 // CIA #2 Port A data direction register. .label CIA2_PORT_A_DDR = $dd02 + .const KEY_SPACE = $3c + // The BASIC screen + .label SCREEN_BASIC = $400 + // The BASIC charset + .label CHARSET_BASIC = $1000 // The screen - .label SCREEN = $4000 + .label BOB_SCREEN = $4800 // The charset that will receive the shifted bobs - .label BOB_CHARSET = $6000 + .label BOB_CHARSET = $4000 // The number of different X-shifts .const BOB_SHIFTS_X = 4 // The number of different Y-shifts @@ -2389,7 +3344,7 @@ Target platform is c64basic / MOS6502X // The size of a sub-table of BOB_TABLES .const BOB_SUBTABLE_SIZE = BOB_SHIFTS_X*BOB_SHIFTS_Y // BOB charset ID of the next glyph to be added - .label bob_charset_next_id = $10 + .label bob_charset_next_id = $14 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -2408,33 +3363,26 @@ __bend_from___b1: __bend: // main main: { - .const vicSelectGfxBank1_toDd001_return = 3^(>SCREEN)/$40 - .const toD0181_return = (>BOB_CHARSET)/4&$f - /* - // Display some BOBs - char* screen = SCREEN; - char bob_table_idx = 0; - for(char i:0..7) { - for(char j:0..3) { - screen[0] = (BOB_TABLES+0*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[40] = (BOB_TABLES+1*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[80] = (BOB_TABLES+2*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[1] = (BOB_TABLES+3*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[41] = (BOB_TABLES+4*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[81] = (BOB_TABLES+5*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[2] = (BOB_TABLES+6*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[42] = (BOB_TABLES+7*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[82] = (BOB_TABLES+8*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen += 120; - bob_table_idx++; - } - screen -= (120*4)-3; - } - */ - .label sin_x_idx = 2 - .label sin_y_idx = 3 + .const vicSelectGfxBank1_toDd001_return = 3^(>BOB_SCREEN)/$40 + .const vicSelectGfxBank2_toDd001_return = 3 + .const toD0181_return = >(BOB_SCREEN&$3fff)*4 + .const toD0182_return = (>(SCREEN_BASIC&$3fff)*4)|(>CHARSET_BASIC)/4&$f + .label __7 = $24 + .label __9 = $27 + .label __14 = $29 + .label __16 = $2b + .label __25 = $2d + .label y = 3 + .label x = 2 + // Render sine BOBs + .label sin_x_idx = 4 + .label sin_y_idx = 5 + .label __30 = $22 + .label __31 = $23 + .label __33 = $25 + .label __34 = $26 // [5] call prepareBobs - // [56] phi from main to prepareBobs [phi:main->prepareBobs] + // [110] phi from main to prepareBobs [phi:main->prepareBobs] prepareBobs_from_main: jsr prepareBobs jmp vicSelectGfxBank1 @@ -2459,139 +3407,432 @@ main: { jmp toD0181 // main::toD0181 toD0181: - jmp __b4 - // main::@4 - __b4: + jmp __b10 + // main::@10 + __b10: // [10] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 // [11] call memset - // [50] phi from main::@4 to memset [phi:main::@4->memset] - memset_from___b4: + // [102] phi from main::@10 to memset [phi:main::@10->memset] + memset_from___b10: + // [102] phi (void*) memset::str#3 = (void*)(const byte*) BOB_SCREEN [phi:main::@10->memset#0] -- pvoz1=pvoc1 + lda #BOB_SCREEN + sta.z memset.str+1 jsr memset - // [12] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - __b1_from___b4: - // [12] phi (byte) main::sin_y_idx#7 = (byte) $49 [phi:main::@4->main::@1#0] -- vbuz1=vbuc1 - lda #$49 - sta.z sin_y_idx - // [12] phi (byte) main::sin_x_idx#7 = (byte) 0 [phi:main::@4->main::@1#1] -- vbuz1=vbuc1 + // [12] phi from main::@10 to main::@1 [phi:main::@10->main::@1] + __b1_from___b10: + // [12] phi (byte) main::x#4 = (byte) 0 [phi:main::@10->main::@1#0] -- vbuz1=vbuc1 lda #0 - sta.z sin_x_idx + sta.z x + jmp __b1 + // Display a BOB grid + // [12] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + __b1_from___b3: + // [12] phi (byte) main::x#4 = (byte) main::x#1 [phi:main::@3->main::@1#0] -- register_copy jmp __b1 // main::@1 __b1: + // [13] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + __b2_from___b1: + // [13] phi (byte) main::y#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1 + lda #0 + sta.z y + jmp __b2 + // [13] phi from main::@12 to main::@2 [phi:main::@12->main::@2] + __b2_from___b12: + // [13] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@12->main::@2#0] -- register_copy jmp __b2 // main::@2 __b2: - // [13] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 - lda #$ff - cmp RASTER - bne __b2 + // [14] (byte~) main::$30 ← (byte) main::x#4 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z x + asl + sta.z __30 + // [15] (byte~) main::$31 ← (byte~) main::$30 + (byte) main::x#4 -- vbuz1=vbuz2_plus_vbuz3 + lda.z __30 + clc + adc.z x + sta.z __31 + // [16] (byte~) main::$7 ← (byte~) main::$31 << (byte) 2 -- vbuz1=vbuz2_rol_2 + lda.z __31 + asl + asl + sta.z __7 + // [17] (byte) renderBob::xpos#0 ← (byte~) main::$7 + (byte) main::y#2 -- vbuz1=vbuz2_plus_vbuz3 + lda.z __7 + clc + adc.z y + sta.z renderBob.xpos + // [18] (byte~) main::$33 ← (byte) main::y#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z y + asl + sta.z __33 + // [19] (byte~) main::$34 ← (byte~) main::$33 + (byte) main::y#2 -- vbuz1=vbuz2_plus_vbuz3 + lda.z __33 + clc + adc.z y + sta.z __34 + // [20] (byte~) main::$9 ← (byte~) main::$34 << (byte) 3 -- vbuz1=vbuz2_rol_3 + lda.z __34 + asl + asl + asl + sta.z __9 + // [21] (byte) renderBob::ypos#0 ← (byte~) main::$9 + (byte) main::x#4 -- vbuz1=vbuz2_plus_vbuz3 + lda.z __9 + clc + adc.z x + sta.z renderBob.ypos + // [22] call renderBob + // [79] phi from main::@2 to renderBob [phi:main::@2->renderBob] + renderBob_from___b2: + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#0 [phi:main::@2->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#0 [phi:main::@2->renderBob#1] -- register_copy + jsr renderBob + jmp __b12 + // main::@12 + __b12: + // [23] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuz1=_inc_vbuz1 + inc.z y + // [24] if((byte) main::y#1!=(byte) 4) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #4 + cmp.z y + bne __b2_from___b12 jmp __b3 // main::@3 __b3: - // [14] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 - inc BORDERCOL - // [15] (byte) renderBob::xpos#0 ← *((const byte*) SIN_X_TAB + (byte) main::sin_x_idx#7) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z sin_x_idx - lda SIN_X_TAB,y - sta.z renderBob.xpos - // [16] (byte) renderBob::ypos#0 ← *((const byte*) SIN_Y_TAB + (byte) main::sin_y_idx#7) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z sin_y_idx - lda SIN_Y_TAB,y - sta.z renderBob.ypos - // [17] call renderBob - // [27] phi from main::@3 to renderBob [phi:main::@3->renderBob] - renderBob_from___b3: - // [27] phi (byte) renderBob::ypos#3 = (byte) renderBob::ypos#0 [phi:main::@3->renderBob#0] -- register_copy - // [27] phi (byte) renderBob::xpos#3 = (byte) renderBob::xpos#0 [phi:main::@3->renderBob#1] -- register_copy - jsr renderBob + // [25] (byte) main::x#1 ← ++ (byte) main::x#4 -- vbuz1=_inc_vbuz1 + inc.z x + // [26] if((byte) main::x#1!=(byte) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #8 + cmp.z x + bne __b1_from___b3 + // [27] phi from main::@13 main::@3 to main::@4 [phi:main::@13/main::@3->main::@4] + __b4_from___b13: + __b4_from___b3: + jmp __b4 + // Wait for space + // main::@4 + __b4: + // [28] call keyboard_key_pressed + // [70] phi from main::@4 to keyboard_key_pressed [phi:main::@4->keyboard_key_pressed] + keyboard_key_pressed_from___b4: + jsr keyboard_key_pressed + // [29] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + lda.z keyboard_key_pressed.return + sta.z keyboard_key_pressed.return_1 + jmp __b13 + // main::@13 + __b13: + // [30] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 -- vbuz1=vbuz2 + lda.z keyboard_key_pressed.return_1 + sta.z __14 + // [31] if((byte) 0==(byte~) main::$14) goto main::@4 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp.z __14 + beq __b4_from___b13 + // [32] phi from main::@13 main::@14 to main::@5 [phi:main::@13/main::@14->main::@5] + __b5_from___b13: + __b5_from___b14: jmp __b5 // main::@5 __b5: - // [18] (byte) renderBob::xpos#1 ← *((const byte*) SIN_X_TAB+(byte) $f + (byte) main::sin_x_idx#7) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z sin_x_idx - lda SIN_X_TAB+$f,y - sta.z renderBob.xpos - // [19] (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB+(byte) $b + (byte) main::sin_y_idx#7) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z sin_y_idx - lda SIN_Y_TAB+$b,y - sta.z renderBob.ypos - // [20] call renderBob - // [27] phi from main::@5 to renderBob [phi:main::@5->renderBob] - renderBob_from___b5: - // [27] phi (byte) renderBob::ypos#3 = (byte) renderBob::ypos#1 [phi:main::@5->renderBob#0] -- register_copy - // [27] phi (byte) renderBob::xpos#3 = (byte) renderBob::xpos#1 [phi:main::@5->renderBob#1] -- register_copy - jsr renderBob + // [33] call keyboard_key_pressed + // [70] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] + keyboard_key_pressed_from___b5: + jsr keyboard_key_pressed + // [34] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + lda.z keyboard_key_pressed.return + sta.z keyboard_key_pressed.return_2 + jmp __b14 + // main::@14 + __b14: + // [35] (byte~) main::$16 ← (byte) keyboard_key_pressed::return#3 -- vbuz1=vbuz2 + lda.z keyboard_key_pressed.return_2 + sta.z __16 + // [36] if((byte) 0!=(byte~) main::$16) goto main::@5 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp.z __16 + bne __b5_from___b14 + // [37] phi from main::@14 to main::@6 [phi:main::@14->main::@6] + __b6_from___b14: jmp __b6 // main::@6 __b6: - // [21] (byte) renderBob::xpos#2 ← *((const byte*) SIN_X_TAB+(byte) $16 + (byte) main::sin_x_idx#7) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z sin_x_idx - lda SIN_X_TAB+$16,y - sta.z renderBob.xpos - // [22] (byte) renderBob::ypos#2 ← *((const byte*) SIN_Y_TAB+(byte) $1e + (byte) main::sin_y_idx#7) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z sin_y_idx - lda SIN_Y_TAB+$1e,y - sta.z renderBob.ypos - // [23] call renderBob - // [27] phi from main::@6 to renderBob [phi:main::@6->renderBob] - renderBob_from___b6: - // [27] phi (byte) renderBob::ypos#3 = (byte) renderBob::ypos#2 [phi:main::@6->renderBob#0] -- register_copy - // [27] phi (byte) renderBob::xpos#3 = (byte) renderBob::xpos#2 [phi:main::@6->renderBob#1] -- register_copy - jsr renderBob + // [38] call memset + // [102] phi from main::@6 to memset [phi:main::@6->memset] + memset_from___b6: + // [102] phi (void*) memset::str#3 = (void*)(const byte*) BOB_SCREEN [phi:main::@6->memset#0] -- pvoz1=pvoc1 + lda #BOB_SCREEN + sta.z memset.str+1 + jsr memset + // [39] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + __b7_from___b6: + // [39] phi (byte) main::sin_y_idx#9 = (byte) $49 [phi:main::@6->main::@7#0] -- vbuz1=vbuc1 + lda #$49 + sta.z sin_y_idx + // [39] phi (byte) main::sin_x_idx#9 = (byte) 0 [phi:main::@6->main::@7#1] -- vbuz1=vbuc1 + lda #0 + sta.z sin_x_idx jmp __b7 // main::@7 __b7: - // [24] (byte) main::sin_x_idx#1 ← ++ (byte) main::sin_x_idx#7 -- vbuz1=_inc_vbuz1 + jmp __b8 + // main::@8 + __b8: + // [40] if(*((const byte*) RASTER)<(byte) $f8) goto main::@8 -- _deref_pbuc1_lt_vbuc2_then_la1 + lda RASTER + cmp #$f8 + bcc __b8 + jmp __b9 + // main::@9 + __b9: + // [41] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + // [42] (byte) renderBob::xpos#1 ← *((const byte*) SIN_X_TAB+(byte)(number) $15*(number) 4 + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_x_idx + lda SIN_X_TAB+$15*4,y + sta.z renderBob.xpos + // [43] (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB + (byte) main::sin_y_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_y_idx + lda SIN_Y_TAB,y + sta.z renderBob.ypos + // [44] call renderBob + // [79] phi from main::@9 to renderBob [phi:main::@9->renderBob] + renderBob_from___b9: + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#1 [phi:main::@9->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#1 [phi:main::@9->renderBob#1] -- register_copy + jsr renderBob + jmp __b15 + // main::@15 + __b15: + // [45] (byte) renderBob::xpos#2 ← *((const byte*) SIN_X_TAB+(byte)(number) $13*(number) 3 + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_x_idx + lda SIN_X_TAB+$13*3,y + sta.z renderBob.xpos + // [46] (byte) renderBob::ypos#2 ← *((const byte*) SIN_Y_TAB+(byte)(number) $f*(number) 1 + (byte) main::sin_y_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_y_idx + lda SIN_Y_TAB+$f*1,y + sta.z renderBob.ypos + // [47] call renderBob + // [79] phi from main::@15 to renderBob [phi:main::@15->renderBob] + renderBob_from___b15: + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#2 [phi:main::@15->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#2 [phi:main::@15->renderBob#1] -- register_copy + jsr renderBob + jmp __b16 + // main::@16 + __b16: + // [48] (byte) renderBob::xpos#3 ← *((const byte*) SIN_X_TAB+(byte)(number) $11*(number) 2 + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_x_idx + lda SIN_X_TAB+$11*2,y + sta.z renderBob.xpos + // [49] (byte) renderBob::ypos#3 ← *((const byte*) SIN_Y_TAB+(byte)(number) $11*(number) 2 + (byte) main::sin_y_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_y_idx + lda SIN_Y_TAB+$11*2,y + sta.z renderBob.ypos + // [50] call renderBob + // [79] phi from main::@16 to renderBob [phi:main::@16->renderBob] + renderBob_from___b16: + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#3 [phi:main::@16->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#3 [phi:main::@16->renderBob#1] -- register_copy + jsr renderBob + jmp __b17 + // main::@17 + __b17: + // [51] (byte) renderBob::xpos#4 ← *((const byte*) SIN_X_TAB+(byte)(number) $f*(number) 1 + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_x_idx + lda SIN_X_TAB+$f*1,y + sta.z renderBob.xpos + // [52] (byte) renderBob::ypos#4 ← *((const byte*) SIN_Y_TAB+(byte)(number) $13*(number) 3 + (byte) main::sin_y_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_y_idx + lda SIN_Y_TAB+$13*3,y + sta.z renderBob.ypos + // [53] call renderBob + // [79] phi from main::@17 to renderBob [phi:main::@17->renderBob] + renderBob_from___b17: + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#4 [phi:main::@17->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#4 [phi:main::@17->renderBob#1] -- register_copy + jsr renderBob + jmp __b18 + // main::@18 + __b18: + // [54] (byte) renderBob::xpos#5 ← *((const byte*) SIN_X_TAB + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_x_idx + lda SIN_X_TAB,y + sta.z renderBob.xpos + // [55] (byte) renderBob::ypos#5 ← *((const byte*) SIN_Y_TAB+(byte)(number) $15*(number) 4 + (byte) main::sin_y_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_y_idx + lda SIN_Y_TAB+$15*4,y + sta.z renderBob.ypos + // [56] call renderBob + // [79] phi from main::@18 to renderBob [phi:main::@18->renderBob] + renderBob_from___b18: + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#5 [phi:main::@18->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#5 [phi:main::@18->renderBob#1] -- register_copy + jsr renderBob + jmp __b19 + // main::@19 + __b19: + // [57] (byte) main::sin_x_idx#1 ← ++ (byte) main::sin_x_idx#9 -- vbuz1=_inc_vbuz1 inc.z sin_x_idx - // [25] (byte) main::sin_y_idx#1 ← ++ (byte) main::sin_y_idx#7 -- vbuz1=_inc_vbuz1 + // [58] (byte) main::sin_y_idx#1 ← ++ (byte) main::sin_y_idx#9 -- vbuz1=_inc_vbuz1 inc.z sin_y_idx - // [26] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 + // [59] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [12] phi from main::@7 to main::@1 [phi:main::@7->main::@1] - __b1_from___b7: - // [12] phi (byte) main::sin_y_idx#7 = (byte) main::sin_y_idx#1 [phi:main::@7->main::@1#0] -- register_copy - // [12] phi (byte) main::sin_x_idx#7 = (byte) main::sin_x_idx#1 [phi:main::@7->main::@1#1] -- register_copy + // [60] call keyboard_key_pressed + // [70] phi from main::@19 to keyboard_key_pressed [phi:main::@19->keyboard_key_pressed] + keyboard_key_pressed_from___b19: + jsr keyboard_key_pressed + // [61] (byte) keyboard_key_pressed::return#4 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + lda.z keyboard_key_pressed.return + sta.z keyboard_key_pressed.return_3 + jmp __b20 + // main::@20 + __b20: + // [62] (byte~) main::$25 ← (byte) keyboard_key_pressed::return#4 -- vbuz1=vbuz2 + lda.z keyboard_key_pressed.return_3 + sta.z __25 + // [63] if((byte) 0!=(byte~) main::$25) goto main::vicSelectGfxBank2 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp.z __25 + bne vicSelectGfxBank2 + // [39] phi from main::@20 to main::@7 [phi:main::@20->main::@7] + __b7_from___b20: + // [39] phi (byte) main::sin_y_idx#9 = (byte) main::sin_y_idx#1 [phi:main::@20->main::@7#0] -- register_copy + // [39] phi (byte) main::sin_x_idx#9 = (byte) main::sin_x_idx#1 [phi:main::@20->main::@7#1] -- register_copy + jmp __b7 + // main::vicSelectGfxBank2 + vicSelectGfxBank2: + // [64] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + lda #3 + sta CIA2_PORT_A_DDR + // [65] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001] + vicSelectGfxBank2_toDd001_from_vicSelectGfxBank2: + jmp vicSelectGfxBank2_toDd001 + // main::vicSelectGfxBank2_toDd001 + vicSelectGfxBank2_toDd001: + jmp vicSelectGfxBank2___b1 + // main::vicSelectGfxBank2_@1 + vicSelectGfxBank2___b1: + // [66] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 + lda #vicSelectGfxBank2_toDd001_return + sta CIA2_PORT_A + // [67] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] + toD0182_from_vicSelectGfxBank2___b1: + jmp toD0182 + // main::toD0182 + toD0182: + jmp __b11 + // main::@11 + __b11: + // [68] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 + lda #toD0182_return + sta D018 + jmp __breturn + // main::@return + __breturn: + // [69] return + rts +} + // keyboard_key_pressed +// Determines whether a specific key is currently pressed by accessing the matrix directly +// 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 +keyboard_key_pressed: { + .const colidx = KEY_SPACE&7 + .label rowidx = KEY_SPACE>>3 + .label __2 = $2f + .label return = $30 + .label return_1 = $28 + .label return_2 = $2a + .label return_3 = $2c + // [71] call keyboard_matrix_read + jsr keyboard_matrix_read + // [72] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 -- vbuz1=vbuz2 + lda.z keyboard_matrix_read.return + sta.z keyboard_matrix_read.return_1 jmp __b1 + // keyboard_key_pressed::@1 + __b1: + // [73] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuz2 + lda.z keyboard_matrix_read.return_1 + sta.z __2 + // [74] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask+(const byte) keyboard_key_pressed::colidx#0) -- vbuz1=vbuz2_band__deref_pbuc1 + lda keyboard_matrix_col_bitmask+colidx + and.z __2 + sta.z return + jmp __breturn + // keyboard_key_pressed::@return + __breturn: + // [75] return + rts +} + // keyboard_matrix_read +// 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. +// Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write +// leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. +keyboard_matrix_read: { + .label return = $31 + .label return_1 = $2e + // [76] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx + sta CIA1_PORT_A + // [77] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 + lda CIA1_PORT_B + eor #$ff + sta.z return + jmp __breturn + // keyboard_matrix_read::@return + __breturn: + // [78] return + rts } // renderBob // Render a single BOB at a given x/y-position // X-position is 0-151. Each x-position is 2 pixels wide. // Y-position is 0-183. Each y-position is 1 pixel high. -// renderBob(byte zeropage(4) xpos, byte zeropage(5) ypos) +// renderBob(byte zeropage(6) xpos, byte zeropage(7) ypos) renderBob: { - .label __2 = $20 - .label __4 = $28 - .label __6 = $2c - .label __7 = $2d - .label __8 = $2e - .label xpos = 4 - .label ypos = 5 - .label x_char_offset = $1e - .label y_char_offset = $1f - .label y_offset = $26 - .label screen = $2a - .label bob_table_idx = $2f - .label __10 = $22 - .label __11 = $24 - // [28] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#3 >> (byte) 2 -- vbuz1=vbuz2_ror_2 + .label __2 = $34 + .label __4 = $3c + .label __6 = $40 + .label __7 = $41 + .label __8 = $42 + .label xpos = 6 + .label ypos = 7 + .label x_char_offset = $32 + .label y_char_offset = $33 + .label y_offset = $3a + .label screen = $3e + .label bob_table_idx = $43 + .label __10 = $36 + .label __11 = $38 + // [80] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#6 >> (byte) 2 -- vbuz1=vbuz2_ror_2 lda.z xpos lsr lsr sta.z x_char_offset - // [29] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#3 >> (byte) 3 -- vbuz1=vbuz2_ror_3 + // [81] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#6 >> (byte) 3 -- vbuz1=vbuz2_ror_3 lda.z ypos lsr lsr lsr sta.z y_char_offset - // [30] (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 -- vwuz1=_word_vbuz2 + // [82] (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 -- vwuz1=_word_vbuz2 lda.z y_char_offset sta.z __2 lda #0 sta.z __2+1 - // [31] (word~) renderBob::$10 ← (word~) renderBob::$2 << (byte) 2 -- vwuz1=vwuz2_rol_2 + // [83] (word~) renderBob::$10 ← (word~) renderBob::$2 << (byte) 2 -- vwuz1=vwuz2_rol_2 lda.z __2 asl sta.z __10 @@ -2600,7 +3841,7 @@ renderBob: { sta.z __10+1 asl.z __10 rol.z __10+1 - // [32] (word~) renderBob::$11 ← (word~) renderBob::$10 + (word~) renderBob::$2 -- vwuz1=vwuz2_plus_vwuz3 + // [84] (word~) renderBob::$11 ← (word~) renderBob::$10 + (word~) renderBob::$2 -- vwuz1=vwuz2_plus_vwuz3 lda.z __10 clc adc.z __2 @@ -2608,7 +3849,7 @@ renderBob: { lda.z __10+1 adc.z __2+1 sta.z __11+1 - // [33] (word) renderBob::y_offset#0 ← (word~) renderBob::$11 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [85] (word) renderBob::y_offset#0 ← (word~) renderBob::$11 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z __11 asl sta.z y_offset @@ -2619,15 +3860,15 @@ renderBob: { rol.z y_offset+1 asl.z y_offset rol.z y_offset+1 - // [34] (byte*~) renderBob::$4 ← (const byte*) SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [86] (byte*~) renderBob::$4 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z y_offset clc - adc #SCREEN + adc #>BOB_SCREEN sta.z __4+1 - // [35] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz2_plus_vbuz3 + // [87] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz2_plus_vbuz3 lda.z x_char_offset clc adc.z __4 @@ -2635,65 +3876,65 @@ renderBob: { lda #0 adc.z __4+1 sta.z screen+1 - // [36] (byte~) renderBob::$6 ← (byte) renderBob::ypos#3 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + // [88] (byte~) renderBob::$6 ← (byte) renderBob::ypos#6 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 lda #7 and.z ypos sta.z __6 - // [37] (byte~) renderBob::$7 ← (byte~) renderBob::$6 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [89] (byte~) renderBob::$7 ← (byte~) renderBob::$6 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda.z __6 asl asl sta.z __7 - // [38] (byte~) renderBob::$8 ← (byte) renderBob::xpos#3 & (byte) 3 -- vbuz1=vbuz2_band_vbuc1 + // [90] (byte~) renderBob::$8 ← (byte) renderBob::xpos#6 & (byte) 3 -- vbuz1=vbuz2_band_vbuc1 lda #3 and.z xpos sta.z __8 - // [39] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 -- vbuz1=vbuz2_plus_vbuz3 + // [91] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 -- vbuz1=vbuz2_plus_vbuz3 lda.z __7 clc adc.z __8 sta.z bob_table_idx - // [40] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [92] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z bob_table_idx lda BOB_TABLES,y ldy #0 sta (screen),y - // [41] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + // [93] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 ldy.z bob_table_idx lda BOB_TABLES+1*BOB_SUBTABLE_SIZE,y ldy #$28 sta (screen),y - // [42] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + // [94] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 ldy.z bob_table_idx lda BOB_TABLES+2*BOB_SUBTABLE_SIZE,y ldy #$50 sta (screen),y - // [43] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + // [95] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 ldy.z bob_table_idx lda BOB_TABLES+3*BOB_SUBTABLE_SIZE,y ldy #1 sta (screen),y - // [44] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + // [96] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 ldy.z bob_table_idx lda BOB_TABLES+4*BOB_SUBTABLE_SIZE,y ldy #$29 sta (screen),y - // [45] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + // [97] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 ldy.z bob_table_idx lda BOB_TABLES+5*BOB_SUBTABLE_SIZE,y ldy #$51 sta (screen),y - // [46] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + // [98] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 ldy.z bob_table_idx lda BOB_TABLES+6*BOB_SUBTABLE_SIZE,y ldy #2 sta (screen),y - // [47] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + // [99] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 ldy.z bob_table_idx lda BOB_TABLES+7*BOB_SUBTABLE_SIZE,y ldy #$2a sta (screen),y - // [48] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + // [100] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 ldy.z bob_table_idx lda BOB_TABLES+8*BOB_SUBTABLE_SIZE,y ldy #$52 @@ -2701,137 +3942,146 @@ renderBob: { jmp __breturn // renderBob::@return __breturn: - // [49] return + // [101] return rts } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +// memset(void* zeropage(8) str) memset: { - .label str = SCREEN - .const c = 0 - .const num = $3e8 - .label end = str+num - .label dst = 6 - // [51] phi from memset to memset::@1 [phi:memset->memset::@1] - __b1_from_memset: - // [51] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 - lda #str - sta.z dst+1 + .label end = $44 + .label dst = $a + .label str = 8 jmp __b1 // memset::@1 __b1: - // [52] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [103] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 -- pbuz1=pbuz2_plus_vwuc1 + lda.z str + clc + adc #<$3e8 + sta.z end + lda.z str+1 + adc #>$3e8 + sta.z end+1 + // [104] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 + lda.z str + sta.z dst + lda.z str+1 + sta.z dst+1 + // [105] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + __b2_from___b1: + __b2_from___b3: + // [105] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + jmp __b2 + // memset::@2 + __b2: + // [106] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 - cmp #>end - bne __b2 + cmp.z end+1 + bne __b3 lda.z dst - cmp #memset::@1] - __b1_from___b2: - // [51] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp __b1 + jmp __b2_from___b3 } // prepareBobs // Creates the pre-shifted bobs into BOB_CHARSET and populates the BOB_TABLES // Modifies PROTO_BOB by shifting it around prepareBobs: { - .label __5 = $31 - .label bob_table = $e - .label shift_y = 8 + .label __5 = $47 + .label bob_table = $12 + .label shift_y = $c // Populate charset and tables - .label bob_glyph = $c - .label cell = $b - .label bob_table_idx = 9 - .label shift_x = $a - // [57] call bobCharsetFindOrAddGlyph - // [82] phi from prepareBobs to bobCharsetFindOrAddGlyph [phi:prepareBobs->bobCharsetFindOrAddGlyph] + .label bob_glyph = $10 + .label cell = $f + .label bob_table_idx = $d + .label shift_x = $e + // [111] call bobCharsetFindOrAddGlyph + // [136] phi from prepareBobs to bobCharsetFindOrAddGlyph [phi:prepareBobs->bobCharsetFindOrAddGlyph] bobCharsetFindOrAddGlyph_from_prepareBobs: - // [82] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs->bobCharsetFindOrAddGlyph#0] -- pbuz1=pbuc1 + // [136] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs->bobCharsetFindOrAddGlyph#0] -- pbuz1=pbuc1 lda #PROTO_BOB+$30 sta.z bobCharsetFindOrAddGlyph.bob_glyph+1 - // [82] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs->bobCharsetFindOrAddGlyph#1] -- vbuz1=vbuc1 + // [136] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs->bobCharsetFindOrAddGlyph#1] -- vbuz1=vbuc1 lda #0 sta.z bob_charset_next_id jsr bobCharsetFindOrAddGlyph - // [58] phi from prepareBobs to prepareBobs::@1 [phi:prepareBobs->prepareBobs::@1] + // [112] phi from prepareBobs to prepareBobs::@1 [phi:prepareBobs->prepareBobs::@1] __b1_from_prepareBobs: - // [58] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs->prepareBobs::@1#0] -- vbuz1=vbuc1 + // [112] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs->prepareBobs::@1#0] -- vbuz1=vbuc1 lda #0 sta.z bob_table_idx - // [58] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs->prepareBobs::@1#1] -- register_copy - // [58] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs->prepareBobs::@1#2] -- vbuz1=vbuc1 + // [112] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs->prepareBobs::@1#1] -- register_copy + // [112] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs->prepareBobs::@1#2] -- vbuz1=vbuc1 lda #0 sta.z shift_y jmp __b1 // prepareBobs::@1 __b1: - // [59] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 -- vbuz1_lt_vbuc1_then_la1 + // [113] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z shift_y cmp #BOB_SHIFTS_Y bcc __b2_from___b1 jmp __breturn // prepareBobs::@return __breturn: - // [60] return + // [114] return rts - // [61] phi from prepareBobs::@1 to prepareBobs::@2 [phi:prepareBobs::@1->prepareBobs::@2] + // [115] phi from prepareBobs::@1 to prepareBobs::@2 [phi:prepareBobs::@1->prepareBobs::@2] __b2_from___b1: - // [61] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy - // [61] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy - // [61] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#2] -- vbuz1=vbuc1 + // [115] phi (byte) bob_charset_next_id#29 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy + // [115] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy + // [115] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#2] -- vbuz1=vbuc1 lda #0 sta.z shift_x jmp __b2 // prepareBobs::@2 __b2: - // [62] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 -- vbuz1_lt_vbuc1_then_la1 + // [116] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z shift_x cmp #BOB_SHIFTS_X bcc __b3 - // [63] phi from prepareBobs::@2 to prepareBobs::@4 [phi:prepareBobs::@2->prepareBobs::@4] + // [117] phi from prepareBobs::@2 to prepareBobs::@4 [phi:prepareBobs::@2->prepareBobs::@4] __b4_from___b2: jmp __b4 // prepareBobs::@4 __b4: - // [64] call shiftProtoBobDown - // [117] phi from prepareBobs::@4 to shiftProtoBobDown [phi:prepareBobs::@4->shiftProtoBobDown] + // [118] call shiftProtoBobDown + // [171] phi from prepareBobs::@4 to shiftProtoBobDown [phi:prepareBobs::@4->shiftProtoBobDown] shiftProtoBobDown_from___b4: jsr shiftProtoBobDown jmp __b8 // prepareBobs::@8 __b8: - // [65] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 -- vbuz1=_inc_vbuz1 + // [119] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 -- vbuz1=_inc_vbuz1 inc.z shift_y - // [58] phi from prepareBobs::@8 to prepareBobs::@1 [phi:prepareBobs::@8->prepareBobs::@1] + // [112] phi from prepareBobs::@8 to prepareBobs::@1 [phi:prepareBobs::@8->prepareBobs::@1] __b1_from___b8: - // [58] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@8->prepareBobs::@1#0] -- register_copy - // [58] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy - // [58] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@8->prepareBobs::@1#2] -- register_copy + // [112] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@8->prepareBobs::@1#0] -- register_copy + // [112] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#29 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy + // [112] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@8->prepareBobs::@1#2] -- register_copy jmp __b1 // prepareBobs::@3 __b3: - // [66] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 -- pbuz1=pbuc1_plus_vbuz2 + // [120] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 -- pbuz1=pbuc1_plus_vbuz2 lda.z bob_table_idx clc adc #BOB_TABLES adc #0 sta.z bob_table+1 - // [67] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5] + // [121] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5] __b5_from___b3: - // [67] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy - // [67] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy - // [67] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#2] -- pbuz1=pbuc1 + // [121] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy + // [121] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#29 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy + // [121] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#2] -- pbuz1=pbuc1 lda #PROTO_BOB sta.z bob_glyph+1 - // [67] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#3] -- vbuz1=vbuc1 + // [121] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#3] -- vbuz1=vbuc1 lda #0 sta.z cell jmp __b5 // prepareBobs::@5 __b5: - // [68] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 -- vbuz1_lt_vbuc1_then_la1 + // [122] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 -- vbuz1_lt_vbuc1_then_la1 lda.z cell cmp #9 bcc __b6 jmp __b7 // prepareBobs::@7 __b7: - // [69] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 + // [123] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 inc.z bob_table_idx - // [70] call shiftProtoBobRight - // [100] phi from prepareBobs::@7 to shiftProtoBobRight [phi:prepareBobs::@7->shiftProtoBobRight] + // [124] call shiftProtoBobRight + // [154] phi from prepareBobs::@7 to shiftProtoBobRight [phi:prepareBobs::@7->shiftProtoBobRight] shiftProtoBobRight_from___b7: jsr shiftProtoBobRight - // [71] phi from prepareBobs::@7 to prepareBobs::@10 [phi:prepareBobs::@7->prepareBobs::@10] + // [125] phi from prepareBobs::@7 to prepareBobs::@10 [phi:prepareBobs::@7->prepareBobs::@10] __b10_from___b7: jmp __b10 // prepareBobs::@10 __b10: - // [72] call shiftProtoBobRight - // [100] phi from prepareBobs::@10 to shiftProtoBobRight [phi:prepareBobs::@10->shiftProtoBobRight] + // [126] call shiftProtoBobRight + // [154] phi from prepareBobs::@10 to shiftProtoBobRight [phi:prepareBobs::@10->shiftProtoBobRight] shiftProtoBobRight_from___b10: jsr shiftProtoBobRight jmp __b11 // prepareBobs::@11 __b11: - // [73] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 -- vbuz1=_inc_vbuz1 + // [127] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 -- vbuz1=_inc_vbuz1 inc.z shift_x - // [61] phi from prepareBobs::@11 to prepareBobs::@2 [phi:prepareBobs::@11->prepareBobs::@2] + // [115] phi from prepareBobs::@11 to prepareBobs::@2 [phi:prepareBobs::@11->prepareBobs::@2] __b2_from___b11: - // [61] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@11->prepareBobs::@2#0] -- register_copy - // [61] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@11->prepareBobs::@2#1] -- register_copy - // [61] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@11->prepareBobs::@2#2] -- register_copy + // [115] phi (byte) bob_charset_next_id#29 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@11->prepareBobs::@2#0] -- register_copy + // [115] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@11->prepareBobs::@2#1] -- register_copy + // [115] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@11->prepareBobs::@2#2] -- register_copy jmp __b2 // prepareBobs::@6 __b6: - // [74] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 -- pbuz1=pbuz2 + // [128] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 -- pbuz1=pbuz2 lda.z bob_glyph sta.z bobCharsetFindOrAddGlyph.bob_glyph lda.z bob_glyph+1 sta.z bobCharsetFindOrAddGlyph.bob_glyph+1 - // [75] call bobCharsetFindOrAddGlyph - // [82] phi from prepareBobs::@6 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph] + // [129] call bobCharsetFindOrAddGlyph + // [136] phi from prepareBobs::@6 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph] bobCharsetFindOrAddGlyph_from___b6: - // [82] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#0] -- register_copy - // [82] phi (byte) bob_charset_next_id#23 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#1] -- register_copy + // [136] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#0] -- register_copy + // [136] phi (byte) bob_charset_next_id#23 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#1] -- register_copy jsr bobCharsetFindOrAddGlyph - // [76] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=vbuz2 + // [130] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=vbuz2 lda.z bobCharsetFindOrAddGlyph.glyph_id sta.z bobCharsetFindOrAddGlyph.return jmp __b9 // prepareBobs::@9 __b9: - // [77] (byte~) prepareBobs::$5 ← (byte) bobCharsetFindOrAddGlyph::return#1 -- vbuz1=vbuz2 + // [131] (byte~) prepareBobs::$5 ← (byte) bobCharsetFindOrAddGlyph::return#1 -- vbuz1=vbuz2 lda.z bobCharsetFindOrAddGlyph.return sta.z __5 - // [78] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$5 -- _deref_pbuz1=vbuz2 + // [132] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$5 -- _deref_pbuz1=vbuz2 // Look for an existing char in BOB_CHARSET lda.z __5 ldy #0 sta (bob_table),y - // [79] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [133] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 // Move to the next glyph lda #8 clc @@ -2923,7 +4173,7 @@ prepareBobs: { bcc !+ inc.z bob_glyph+1 !: - // [80] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y -- pbuz1=pbuz1_plus_vbuc1 + // [134] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y -- pbuz1=pbuz1_plus_vbuc1 // Move to the next sub-table lda #BOB_SHIFTS_X*BOB_SHIFTS_Y clc @@ -2932,106 +4182,106 @@ prepareBobs: { bcc !+ inc.z bob_table+1 !: - // [81] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 + // [135] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 inc.z cell - // [67] phi from prepareBobs::@9 to prepareBobs::@5 [phi:prepareBobs::@9->prepareBobs::@5] + // [121] phi from prepareBobs::@9 to prepareBobs::@5 [phi:prepareBobs::@9->prepareBobs::@5] __b5_from___b9: - // [67] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@9->prepareBobs::@5#0] -- register_copy - // [67] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@9->prepareBobs::@5#1] -- register_copy - // [67] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@9->prepareBobs::@5#2] -- register_copy - // [67] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@9->prepareBobs::@5#3] -- register_copy + // [121] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@9->prepareBobs::@5#0] -- register_copy + // [121] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@9->prepareBobs::@5#1] -- register_copy + // [121] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@9->prepareBobs::@5#2] -- register_copy + // [121] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@9->prepareBobs::@5#3] -- register_copy jmp __b5 } // bobCharsetFindOrAddGlyph // Looks through BOB_CHARSET to find the passed bob glyph if present. // If not present it is added // Returns the glyph ID -// bobCharsetFindOrAddGlyph(byte* zeropage($11) bob_glyph) +// bobCharsetFindOrAddGlyph(byte* zeropage($15) bob_glyph) bobCharsetFindOrAddGlyph: { - .label bob_glyph = $11 - .label return = $30 - .label i = $17 - .label glyph_id = $13 - .label glyph_cursor = $14 - .label i1 = $16 - .label found = $18 - // [83] phi from bobCharsetFindOrAddGlyph to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1] + .label bob_glyph = $15 + .label return = $46 + .label i = $1b + .label glyph_id = $17 + .label glyph_cursor = $18 + .label i1 = $1a + .label found = $1c + // [137] phi from bobCharsetFindOrAddGlyph to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1] __b1_from_bobCharsetFindOrAddGlyph: - // [83] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (const byte*) BOB_CHARSET [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#0] -- pbuz1=pbuc1 + // [137] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (const byte*) BOB_CHARSET [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#0] -- pbuz1=pbuc1 lda #BOB_CHARSET sta.z glyph_cursor+1 - // [83] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) 0 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#1] -- vbuz1=vbuc1 + // [137] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) 0 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#1] -- vbuz1=vbuc1 lda #0 sta.z glyph_id jmp __b1 // bobCharsetFindOrAddGlyph::@1 __b1: - // [84] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 -- vbuz1_neq_vbuz2_then_la1 + // [138] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 -- vbuz1_neq_vbuz2_then_la1 lda.z glyph_id cmp.z bob_charset_next_id bne __b2_from___b1 - // [85] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7] + // [139] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7] __b7_from___b1: - // [85] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7#0] -- vbuz1=vbuc1 + // [139] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7#0] -- vbuz1=vbuc1 lda #0 sta.z i1 jmp __b7 // Not found - add it // bobCharsetFindOrAddGlyph::@7 __b7: - // [86] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 -- vbuz1_lt_vbuc1_then_la1 + // [140] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 -- vbuz1_lt_vbuc1_then_la1 lda.z i1 cmp #8 bcc __b8 jmp __b9 // bobCharsetFindOrAddGlyph::@9 __b9: - // [87] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 + // [141] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 inc.z bob_charset_next_id - // [88] phi from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 to bobCharsetFindOrAddGlyph::@return [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return] + // [142] phi from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 to bobCharsetFindOrAddGlyph::@return [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return] __breturn_from___b5: __breturn_from___b9: - // [88] phi (byte) bob_charset_next_id#16 = (byte) bob_charset_next_id#23 [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return#0] -- register_copy + // [142] phi (byte) bob_charset_next_id#16 = (byte) bob_charset_next_id#23 [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return#0] -- register_copy jmp __breturn // bobCharsetFindOrAddGlyph::@return __breturn: - // [89] return + // [143] return rts // bobCharsetFindOrAddGlyph::@8 __b8: - // [90] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz2 + // [144] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz2 ldy.z i1 lda (bob_glyph),y sta (glyph_cursor),y - // [91] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 -- vbuz1=_inc_vbuz1 + // [145] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 -- vbuz1=_inc_vbuz1 inc.z i1 - // [85] phi from bobCharsetFindOrAddGlyph::@8 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7] + // [139] phi from bobCharsetFindOrAddGlyph::@8 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7] __b7_from___b8: - // [85] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) bobCharsetFindOrAddGlyph::i1#1 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7#0] -- register_copy + // [139] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) bobCharsetFindOrAddGlyph::i1#1 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7#0] -- register_copy jmp __b7 - // [92] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2] + // [146] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2] __b2_from___b1: - // [92] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2#0] -- vbuz1=vbuc1 + // [146] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2#0] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b2 // bobCharsetFindOrAddGlyph::@2 __b2: - // [93] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 -- vbuz1_lt_vbuc1_then_la1 + // [147] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #8 bcc __b3 - // [95] phi from bobCharsetFindOrAddGlyph::@2 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5] + // [149] phi from bobCharsetFindOrAddGlyph::@2 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5] __b5_from___b2: - // [95] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 1 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5#0] -- vbuz1=vbuc1 + // [149] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 1 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5#0] -- vbuz1=vbuc1 lda #1 sta.z found jmp __b5 // bobCharsetFindOrAddGlyph::@3 __b3: - // [94] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 -- pbuz1_derefidx_vbuz2_eq_pbuz3_derefidx_vbuz2_then_la1 + // [148] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 -- pbuz1_derefidx_vbuz2_eq_pbuz3_derefidx_vbuz2_then_la1 ldy.z i lda (glyph_cursor),y tax @@ -3040,24 +4290,24 @@ bobCharsetFindOrAddGlyph: { sty.z $ff cpx.z $ff beq __b4 - // [95] phi from bobCharsetFindOrAddGlyph::@3 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5] + // [149] phi from bobCharsetFindOrAddGlyph::@3 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5] __b5_from___b3: - // [95] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5#0] -- vbuz1=vbuc1 + // [149] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5#0] -- vbuz1=vbuc1 lda #0 sta.z found jmp __b5 // bobCharsetFindOrAddGlyph::@5 __b5: - // [96] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 -- vbuc1_eq_vbuz1_then_la1 + // [150] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z found beq __b6 jmp __breturn_from___b5 // bobCharsetFindOrAddGlyph::@6 __b6: - // [97] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=_inc_vbuz1 + // [151] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=_inc_vbuz1 inc.z glyph_id - // [98] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [152] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z glyph_cursor @@ -3065,98 +4315,98 @@ bobCharsetFindOrAddGlyph: { bcc !+ inc.z glyph_cursor+1 !: - // [83] phi from bobCharsetFindOrAddGlyph::@6 to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1] + // [137] phi from bobCharsetFindOrAddGlyph::@6 to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1] __b1_from___b6: - // [83] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#0] -- register_copy - // [83] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) bobCharsetFindOrAddGlyph::glyph_id#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#1] -- register_copy + // [137] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#0] -- register_copy + // [137] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) bobCharsetFindOrAddGlyph::glyph_id#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#1] -- register_copy jmp __b1 // bobCharsetFindOrAddGlyph::@4 __b4: - // [99] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 -- vbuz1=_inc_vbuz1 + // [153] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [92] phi from bobCharsetFindOrAddGlyph::@4 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2] + // [146] phi from bobCharsetFindOrAddGlyph::@4 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2] __b2_from___b4: - // [92] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) bobCharsetFindOrAddGlyph::i#1 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2#0] -- register_copy + // [146] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) bobCharsetFindOrAddGlyph::i#1 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2#0] -- register_copy jmp __b2 } // shiftProtoBobRight // Shift PROTO_BOB right one X pixel shiftProtoBobRight: { - .label __1 = $32 - .label __5 = $33 - .label __6 = $34 - .label carry = $1c - .label j = $1a - .label i = $19 - .label carry_1 = $1b - // [101] phi from shiftProtoBobRight to shiftProtoBobRight::@1 [phi:shiftProtoBobRight->shiftProtoBobRight::@1] + .label __1 = $48 + .label __5 = $49 + .label __6 = $4a + .label carry = $20 + .label j = $1e + .label i = $1d + .label carry_1 = $1f + // [155] phi from shiftProtoBobRight to shiftProtoBobRight::@1 [phi:shiftProtoBobRight->shiftProtoBobRight::@1] __b1_from_shiftProtoBobRight: - // [101] phi (byte) shiftProtoBobRight::carry#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#0] -- vbuz1=vbuc1 + // [155] phi (byte) shiftProtoBobRight::carry#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#0] -- vbuz1=vbuc1 lda #0 sta.z carry_1 - // [101] phi (byte) shiftProtoBobRight::j#3 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#1] -- vbuz1=vbuc1 + // [155] phi (byte) shiftProtoBobRight::j#3 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#1] -- vbuz1=vbuc1 lda #0 sta.z j - // [101] phi (byte) shiftProtoBobRight::i#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#2] -- vbuz1=vbuc1 + // [155] phi (byte) shiftProtoBobRight::i#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#2] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b1 // shiftProtoBobRight::@1 __b1: - // [102] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 -- vbuz1_lt_vbuc1_then_la1 + // [156] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #3*3*8 bcc __b2 jmp __breturn // shiftProtoBobRight::@return __breturn: - // [103] return + // [157] return rts // shiftProtoBobRight::@2 __b2: - // [104] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 -- vbuz1=pbuc1_derefidx_vbuz2_band_vbuc2 + // [158] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 -- vbuz1=pbuc1_derefidx_vbuz2_band_vbuc2 lda #1 ldy.z j and PROTO_BOB,y sta.z __1 - // [105] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 -- vbuc1_neq_vbuz1_then_la1 + // [159] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp.z __1 bne __b3_from___b2 - // [107] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4] + // [161] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4] __b4_from___b2: - // [107] phi (byte) shiftProtoBobRight::carry#1 = (byte) 0 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 + // [161] phi (byte) shiftProtoBobRight::carry#1 = (byte) 0 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 lda #0 sta.z carry jmp __b4 - // [106] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@3 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@3] + // [160] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@3 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@3] __b3_from___b2: jmp __b3 // shiftProtoBobRight::@3 __b3: - // [107] phi from shiftProtoBobRight::@3 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4] + // [161] phi from shiftProtoBobRight::@3 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4] __b4_from___b3: - // [107] phi (byte) shiftProtoBobRight::carry#1 = (byte) $80 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 + // [161] phi (byte) shiftProtoBobRight::carry#1 = (byte) $80 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 lda #$80 sta.z carry jmp __b4 // shiftProtoBobRight::@4 __b4: - // [108] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 -- vbuz1=pbuc1_derefidx_vbuz2_ror_1 + // [162] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 -- vbuz1=pbuc1_derefidx_vbuz2_ror_1 ldy.z j lda PROTO_BOB,y lsr sta.z __5 - // [109] (byte~) shiftProtoBobRight::$6 ← (byte~) shiftProtoBobRight::$5 | (byte) shiftProtoBobRight::carry#2 -- vbuz1=vbuz2_bor_vbuz3 + // [163] (byte~) shiftProtoBobRight::$6 ← (byte~) shiftProtoBobRight::$5 | (byte) shiftProtoBobRight::carry#2 -- vbuz1=vbuz2_bor_vbuz3 lda.z __5 ora.z carry_1 sta.z __6 - // [110] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 -- pbuc1_derefidx_vbuz1=vbuz2 + // [164] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 -- pbuc1_derefidx_vbuz1=vbuz2 // Shift value and add old carry lda.z __6 ldy.z j sta PROTO_BOB,y - // [111] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 -- vbuz1_ge_vbuc1_then_la1 + // [165] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 -- vbuz1_ge_vbuc1_then_la1 // Increment j to iterate over the PROTO_BOB left-to-right, top-to-bottom (0, 24, 48, 1, 25, 49, ...) lda.z j cmp #$30 @@ -3164,31 +4414,31 @@ shiftProtoBobRight: { jmp __b7 // shiftProtoBobRight::@7 __b7: - // [112] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 + // [166] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 lax.z j axs #-[$18] stx.z j - // [113] phi from shiftProtoBobRight::@5 shiftProtoBobRight::@7 to shiftProtoBobRight::@6 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6] + // [167] phi from shiftProtoBobRight::@5 shiftProtoBobRight::@7 to shiftProtoBobRight::@6 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6] __b6_from___b5: __b6_from___b7: - // [113] phi (byte) shiftProtoBobRight::j#10 = (byte) shiftProtoBobRight::j#1 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6#0] -- register_copy + // [167] phi (byte) shiftProtoBobRight::j#10 = (byte) shiftProtoBobRight::j#1 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6#0] -- register_copy jmp __b6 // shiftProtoBobRight::@6 __b6: - // [114] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 -- vbuz1=_inc_vbuz1 + // [168] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [115] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 -- vbuz1=vbuz2 + // [169] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 -- vbuz1=vbuz2 lda.z carry sta.z carry_1 - // [101] phi from shiftProtoBobRight::@6 to shiftProtoBobRight::@1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1] + // [155] phi from shiftProtoBobRight::@6 to shiftProtoBobRight::@1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1] __b1_from___b6: - // [101] phi (byte) shiftProtoBobRight::carry#2 = (byte) shiftProtoBobRight::carry#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#0] -- register_copy - // [101] phi (byte) shiftProtoBobRight::j#3 = (byte) shiftProtoBobRight::j#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#1] -- register_copy - // [101] phi (byte) shiftProtoBobRight::i#2 = (byte) shiftProtoBobRight::i#1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#2] -- register_copy + // [155] phi (byte) shiftProtoBobRight::carry#2 = (byte) shiftProtoBobRight::carry#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#0] -- register_copy + // [155] phi (byte) shiftProtoBobRight::j#3 = (byte) shiftProtoBobRight::j#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#1] -- register_copy + // [155] phi (byte) shiftProtoBobRight::i#2 = (byte) shiftProtoBobRight::i#1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#2] -- register_copy jmp __b1 // shiftProtoBobRight::@5 __b5: - // [116] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f -- vbuz1=vbuz1_minus_vbuc1 + // [170] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f -- vbuz1=vbuz1_minus_vbuc1 lax.z j axs #$2f stx.z j @@ -3198,57 +4448,61 @@ shiftProtoBobRight: { // Shift PROTO_BOB down one Y pixel // At the same time restore PROTO_BOB X by shifting 8 pixels left shiftProtoBobDown: { - .label i = $1d - // [118] phi from shiftProtoBobDown to shiftProtoBobDown::@1 [phi:shiftProtoBobDown->shiftProtoBobDown::@1] + .label i = $21 + // [172] phi from shiftProtoBobDown to shiftProtoBobDown::@1 [phi:shiftProtoBobDown->shiftProtoBobDown::@1] __b1_from_shiftProtoBobDown: - // [118] phi (byte) shiftProtoBobDown::i#2 = (byte) $17 [phi:shiftProtoBobDown->shiftProtoBobDown::@1#0] -- vbuz1=vbuc1 + // [172] phi (byte) shiftProtoBobDown::i#2 = (byte) $17 [phi:shiftProtoBobDown->shiftProtoBobDown::@1#0] -- vbuz1=vbuc1 lda #$17 sta.z i jmp __b1 // shiftProtoBobDown::@1 __b1: - // [119] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 -- vbuz1_gt_0_then_la1 + // [173] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 -- vbuz1_gt_0_then_la1 lda.z i bne __b2 jmp __b3 // shiftProtoBobDown::@3 __b3: - // [120] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [174] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PROTO_BOB - // [121] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [175] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PROTO_BOB+$18 - // [122] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [176] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PROTO_BOB+$30 jmp __breturn // shiftProtoBobDown::@return __breturn: - // [123] return + // [177] return rts // shiftProtoBobDown::@2 __b2: - // [124] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + // [178] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 ldy.z i lda PROTO_BOB+$17,y sta PROTO_BOB,y - // [125] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + // [179] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 ldy.z i lda PROTO_BOB+$2f,y sta PROTO_BOB+$18,y - // [126] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // [180] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 lda #0 ldy.z i sta PROTO_BOB+$30,y - // [127] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 -- vbuz1=_dec_vbuz1 + // [181] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 -- vbuz1=_dec_vbuz1 dec.z i - // [118] phi from shiftProtoBobDown::@2 to shiftProtoBobDown::@1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1] + // [172] phi from shiftProtoBobDown::@2 to shiftProtoBobDown::@1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1] __b1_from___b2: - // [118] phi (byte) shiftProtoBobDown::i#2 = (byte) shiftProtoBobDown::i#1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1#0] -- register_copy + // [172] phi (byte) shiftProtoBobDown::i#2 = (byte) shiftProtoBobDown::i#1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1#0] -- register_copy jmp __b1 } // File Data + // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) + keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f + // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) + keyboard_matrix_col_bitmask: .byte 1, 2, 4, 8, $10, $20, $40, $80 // The prototype BOB (a 3x3 char image with a bob image in the upper 2x2 chars) // The chars are layout as follows with data in chars 0, 1, 3, 4 initially // 0 3 6 @@ -3274,254 +4528,336 @@ REGISTER UPLIFT POTENTIAL REGISTERS Statement [6] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [8] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [10] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [13] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ main::sin_x_idx#7 main::sin_y_idx#7 ] ( main:2 [ main::sin_x_idx#7 main::sin_y_idx#7 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::sin_x_idx#7 main::sin_x_idx#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::sin_y_idx#7 main::sin_y_idx#1 ] -Statement [28] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#3 >> (byte) 2 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:4 [ renderBob::xpos#3 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:5 [ renderBob::ypos#3 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#0 ] -Statement [29] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#3 >> (byte) 3 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:30 [ renderBob::x_char_offset#0 ] -Statement [30] (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 ] ) always clobbers reg byte a -Statement [31] (word~) renderBob::$10 ← (word~) renderBob::$2 << (byte) 2 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] ) always clobbers reg byte a -Statement [32] (word~) renderBob::$11 ← (word~) renderBob::$10 + (word~) renderBob::$2 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$11 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$11 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$11 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$11 ] ) always clobbers reg byte a -Statement [33] (word) renderBob::y_offset#0 ← (word~) renderBob::$11 << (byte) 3 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_offset#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_offset#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ) always clobbers reg byte a -Statement [34] (byte*~) renderBob::$4 ← (const byte*) SCREEN + (word) renderBob::y_offset#0 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$4 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$4 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$4 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$4 ] ) always clobbers reg byte a -Statement [35] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::screen#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::screen#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::screen#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::screen#0 ] ) always clobbers reg byte a -Statement [36] (byte~) renderBob::$6 ← (byte) renderBob::ypos#3 & (byte) 7 [ renderBob::xpos#3 renderBob::screen#0 renderBob::$6 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::screen#0 renderBob::$6 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::screen#0 renderBob::$6 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::screen#0 renderBob::$6 ] ) always clobbers reg byte a -Statement [37] (byte~) renderBob::$7 ← (byte~) renderBob::$6 << (byte) 2 [ renderBob::xpos#3 renderBob::screen#0 renderBob::$7 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::screen#0 renderBob::$7 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::screen#0 renderBob::$7 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::screen#0 renderBob::$7 ] ) always clobbers reg byte a -Statement [38] (byte~) renderBob::$8 ← (byte) renderBob::xpos#3 & (byte) 3 [ renderBob::screen#0 renderBob::$7 renderBob::$8 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::$7 renderBob::$8 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::$7 renderBob::$8 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::$7 renderBob::$8 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:45 [ renderBob::$7 ] -Statement [39] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a -Statement [40] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::sin_x_idx#7 main::sin_x_idx#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::sin_y_idx#7 main::sin_y_idx#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:47 [ renderBob::bob_table_idx#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:47 [ renderBob::bob_table_idx#0 ] -Statement [41] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [42] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [43] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [44] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [45] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [46] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [47] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [48] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 ] ) always clobbers reg byte a reg byte y -Statement [52] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::memset:11 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [54] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::memset:11 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [66] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:8 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:16 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] -Removing always clobbered register reg byte a as potential for zp[1]:9 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:10 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] -Statement [74] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:11 [ prepareBobs::cell#2 prepareBobs::cell#1 ] -Statement [78] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:8 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:16 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] -Removing always clobbered register reg byte y as potential for zp[1]:9 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:10 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:11 [ prepareBobs::cell#2 prepareBobs::cell#1 ] -Statement [79] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ) always clobbers reg byte a -Statement [80] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ) always clobbers reg byte a -Statement [90] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:57 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:75 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:19 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:22 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] -Statement [94] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:57 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:75 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] ) always clobbers reg byte a reg byte x reg byte y -Removing always clobbered register reg byte x as potential for zp[1]:19 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:19 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:16 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] -Removing always clobbered register reg byte a as potential for zp[1]:23 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:23 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:23 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:8 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:9 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:10 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:11 [ prepareBobs::cell#2 prepareBobs::cell#1 ] -Statement [98] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 [ bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:57 [ bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:75 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] ) always clobbers reg byte a -Statement [104] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 [ shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] ( main:2::prepareBobs:5::shiftProtoBobRight:70 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] main:2::prepareBobs:5::shiftProtoBobRight:72 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:25 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:26 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:27 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] -Statement [108] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 [ shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] ( main:2::prepareBobs:5::shiftProtoBobRight:70 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] main:2::prepareBobs:5::shiftProtoBobRight:72 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:28 [ shiftProtoBobRight::carry#1 ] -Statement [112] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ( main:2::prepareBobs:5::shiftProtoBobRight:70 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] main:2::prepareBobs:5::shiftProtoBobRight:72 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ) always clobbers reg byte a -Statement [116] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ( main:2::prepareBobs:5::shiftProtoBobRight:70 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] main:2::prepareBobs:5::shiftProtoBobRight:72 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ) always clobbers reg byte a -Statement [120] *((const byte*) PROTO_BOB) ← (byte) 0 [ ] ( main:2::prepareBobs:5::shiftProtoBobDown:64 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [121] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 [ ] ( main:2::prepareBobs:5::shiftProtoBobDown:64 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [122] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 [ ] ( main:2::prepareBobs:5::shiftProtoBobDown:64 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [124] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:2::prepareBobs:5::shiftProtoBobDown:64 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:29 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] -Statement [125] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:2::prepareBobs:5::shiftProtoBobDown:64 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a -Statement [126] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 [ shiftProtoBobDown::i#2 ] ( main:2::prepareBobs:5::shiftProtoBobDown:64 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a +Statement [14] (byte~) main::$30 ← (byte) main::x#4 << (byte) 1 [ main::x#4 main::y#2 main::$30 ] ( main:2 [ main::x#4 main::y#2 main::$30 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::x#4 main::x#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::y#2 main::y#1 ] +Statement [15] (byte~) main::$31 ← (byte~) main::$30 + (byte) main::x#4 [ main::x#4 main::y#2 main::$31 ] ( main:2 [ main::x#4 main::y#2 main::$31 ] ) always clobbers reg byte a +Statement [16] (byte~) main::$7 ← (byte~) main::$31 << (byte) 2 [ main::x#4 main::y#2 main::$7 ] ( main:2 [ main::x#4 main::y#2 main::$7 ] ) always clobbers reg byte a +Statement [17] (byte) renderBob::xpos#0 ← (byte~) main::$7 + (byte) main::y#2 [ main::x#4 main::y#2 renderBob::xpos#0 ] ( main:2 [ main::x#4 main::y#2 renderBob::xpos#0 ] ) always clobbers reg byte a +Statement [18] (byte~) main::$33 ← (byte) main::y#2 << (byte) 1 [ main::x#4 main::y#2 renderBob::xpos#0 main::$33 ] ( main:2 [ main::x#4 main::y#2 renderBob::xpos#0 main::$33 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:6 [ renderBob::xpos#6 renderBob::xpos#0 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#3 renderBob::xpos#4 renderBob::xpos#5 ] +Statement [19] (byte~) main::$34 ← (byte~) main::$33 + (byte) main::y#2 [ main::x#4 main::y#2 renderBob::xpos#0 main::$34 ] ( main:2 [ main::x#4 main::y#2 renderBob::xpos#0 main::$34 ] ) always clobbers reg byte a +Statement [20] (byte~) main::$9 ← (byte~) main::$34 << (byte) 3 [ main::x#4 main::y#2 renderBob::xpos#0 main::$9 ] ( main:2 [ main::x#4 main::y#2 renderBob::xpos#0 main::$9 ] ) always clobbers reg byte a +Statement [21] (byte) renderBob::ypos#0 ← (byte~) main::$9 + (byte) main::x#4 [ main::x#4 main::y#2 renderBob::xpos#0 renderBob::ypos#0 ] ( main:2 [ main::x#4 main::y#2 renderBob::xpos#0 renderBob::ypos#0 ] ) always clobbers reg byte a +Statement [40] if(*((const byte*) RASTER)<(byte) $f8) goto main::@8 [ main::sin_x_idx#9 main::sin_y_idx#9 ] ( main:2 [ main::sin_x_idx#9 main::sin_y_idx#9 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::sin_x_idx#9 main::sin_x_idx#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::sin_y_idx#9 main::sin_y_idx#1 ] +Statement [64] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [66] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [68] *((const byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [76] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:28::keyboard_matrix_read:71 [ ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:71 [ ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:71 [ main::sin_x_idx#1 main::sin_y_idx#1 ] ) always clobbers reg byte a +Statement [77] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:28::keyboard_matrix_read:71 [ keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:71 [ keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:71 [ main::sin_x_idx#1 main::sin_y_idx#1 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [80] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#6 >> (byte) 2 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:7 [ renderBob::ypos#6 renderBob::ypos#0 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#3 renderBob::ypos#4 renderBob::ypos#5 ] +Statement [81] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#6 >> (byte) 3 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:50 [ renderBob::x_char_offset#0 ] +Statement [82] (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 ] ) always clobbers reg byte a +Statement [83] (word~) renderBob::$10 ← (word~) renderBob::$2 << (byte) 2 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] ) always clobbers reg byte a +Statement [84] (word~) renderBob::$11 ← (word~) renderBob::$10 + (word~) renderBob::$2 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$11 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$11 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$11 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$11 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$11 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$11 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$11 ] ) always clobbers reg byte a +Statement [85] (word) renderBob::y_offset#0 ← (word~) renderBob::$11 << (byte) 3 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_offset#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_offset#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_offset#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_offset#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_offset#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ) always clobbers reg byte a +Statement [86] (byte*~) renderBob::$4 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$4 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$4 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$4 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$4 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$4 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$4 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$4 ] ) always clobbers reg byte a +Statement [87] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::screen#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::screen#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::screen#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::screen#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::screen#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::screen#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::screen#0 ] ) always clobbers reg byte a +Statement [88] (byte~) renderBob::$6 ← (byte) renderBob::ypos#6 & (byte) 7 [ renderBob::xpos#6 renderBob::screen#0 renderBob::$6 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::screen#0 renderBob::$6 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$6 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$6 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$6 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$6 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$6 ] ) always clobbers reg byte a +Statement [89] (byte~) renderBob::$7 ← (byte~) renderBob::$6 << (byte) 2 [ renderBob::xpos#6 renderBob::screen#0 renderBob::$7 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::screen#0 renderBob::$7 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$7 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$7 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$7 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$7 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$7 ] ) always clobbers reg byte a +Statement [90] (byte~) renderBob::$8 ← (byte) renderBob::xpos#6 & (byte) 3 [ renderBob::screen#0 renderBob::$7 renderBob::$8 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::$7 renderBob::$8 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::$7 renderBob::$8 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::$7 renderBob::$8 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::$7 renderBob::$8 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::$7 renderBob::$8 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::$7 renderBob::$8 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:65 [ renderBob::$7 ] +Statement [91] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a +Statement [92] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::x#4 main::x#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::y#2 main::y#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:67 [ renderBob::bob_table_idx#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:67 [ renderBob::bob_table_idx#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::sin_x_idx#9 main::sin_x_idx#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:5 [ main::sin_y_idx#9 main::sin_y_idx#1 ] +Statement [93] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [94] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [95] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [96] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [97] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [98] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [99] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [100] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ ] ( main:2::renderBob:22 [ main::x#4 main::y#2 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 ] ) always clobbers reg byte a reg byte y +Statement [103] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::end#0 ] ( main:2::memset:11 [ memset::str#3 memset::end#0 ] main:2::memset:38 [ memset::str#3 memset::end#0 ] ) always clobbers reg byte a +Statement [104] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::end#0 memset::dst#4 ] ( main:2::memset:11 [ memset::end#0 memset::dst#4 ] main:2::memset:38 [ memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [106] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::end#0 memset::dst#2 ] ( main:2::memset:11 [ memset::end#0 memset::dst#2 ] main:2::memset:38 [ memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [108] *((byte*) memset::dst#2) ← (byte) 0 [ memset::end#0 memset::dst#2 ] ( main:2::memset:11 [ memset::end#0 memset::dst#2 ] main:2::memset:38 [ memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [120] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:20 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] +Removing always clobbered register reg byte a as potential for zp[1]:13 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:14 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] +Statement [128] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:15 [ prepareBobs::cell#2 prepareBobs::cell#1 ] +Statement [132] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:12 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:20 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] +Removing always clobbered register reg byte y as potential for zp[1]:13 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:14 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:15 [ prepareBobs::cell#2 prepareBobs::cell#1 ] +Statement [133] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ) always clobbers reg byte a +Statement [134] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ) always clobbers reg byte a +Statement [144] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:111 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:129 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:23 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:26 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] +Statement [148] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:111 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:129 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] ) always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte x as potential for zp[1]:23 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:23 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:20 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] +Removing always clobbered register reg byte a as potential for zp[1]:27 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:27 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:27 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:12 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:13 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:14 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:15 [ prepareBobs::cell#2 prepareBobs::cell#1 ] +Statement [152] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 [ bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:111 [ bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:129 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] ) always clobbers reg byte a +Statement [158] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 [ shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] ( main:2::prepareBobs:5::shiftProtoBobRight:124 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] main:2::prepareBobs:5::shiftProtoBobRight:126 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:29 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:30 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:31 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] +Statement [162] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 [ shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] ( main:2::prepareBobs:5::shiftProtoBobRight:124 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] main:2::prepareBobs:5::shiftProtoBobRight:126 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:32 [ shiftProtoBobRight::carry#1 ] +Statement [166] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ( main:2::prepareBobs:5::shiftProtoBobRight:124 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] main:2::prepareBobs:5::shiftProtoBobRight:126 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ) always clobbers reg byte a +Statement [170] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ( main:2::prepareBobs:5::shiftProtoBobRight:124 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] main:2::prepareBobs:5::shiftProtoBobRight:126 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ) always clobbers reg byte a +Statement [174] *((const byte*) PROTO_BOB) ← (byte) 0 [ ] ( main:2::prepareBobs:5::shiftProtoBobDown:118 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [175] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 [ ] ( main:2::prepareBobs:5::shiftProtoBobDown:118 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [176] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 [ ] ( main:2::prepareBobs:5::shiftProtoBobDown:118 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [178] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:2::prepareBobs:5::shiftProtoBobDown:118 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:33 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] +Statement [179] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:2::prepareBobs:5::shiftProtoBobDown:118 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a +Statement [180] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 [ shiftProtoBobDown::i#2 ] ( main:2::prepareBobs:5::shiftProtoBobDown:118 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a Statement [6] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [8] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [10] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [13] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ main::sin_x_idx#7 main::sin_y_idx#7 ] ( main:2 [ main::sin_x_idx#7 main::sin_y_idx#7 ] ) always clobbers reg byte a -Statement [28] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#3 >> (byte) 2 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 ] ) always clobbers reg byte a -Statement [29] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#3 >> (byte) 3 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ) always clobbers reg byte a -Statement [30] (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 ] ) always clobbers reg byte a -Statement [31] (word~) renderBob::$10 ← (word~) renderBob::$2 << (byte) 2 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] ) always clobbers reg byte a -Statement [32] (word~) renderBob::$11 ← (word~) renderBob::$10 + (word~) renderBob::$2 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$11 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$11 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$11 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$11 ] ) always clobbers reg byte a -Statement [33] (word) renderBob::y_offset#0 ← (word~) renderBob::$11 << (byte) 3 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_offset#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_offset#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ) always clobbers reg byte a -Statement [34] (byte*~) renderBob::$4 ← (const byte*) SCREEN + (word) renderBob::y_offset#0 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$4 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$4 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$4 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::x_char_offset#0 renderBob::$4 ] ) always clobbers reg byte a -Statement [35] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 [ renderBob::xpos#3 renderBob::ypos#3 renderBob::screen#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::screen#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::screen#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::ypos#3 renderBob::screen#0 ] ) always clobbers reg byte a -Statement [36] (byte~) renderBob::$6 ← (byte) renderBob::ypos#3 & (byte) 7 [ renderBob::xpos#3 renderBob::screen#0 renderBob::$6 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::screen#0 renderBob::$6 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::screen#0 renderBob::$6 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::screen#0 renderBob::$6 ] ) always clobbers reg byte a -Statement [37] (byte~) renderBob::$7 ← (byte~) renderBob::$6 << (byte) 2 [ renderBob::xpos#3 renderBob::screen#0 renderBob::$7 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::screen#0 renderBob::$7 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::screen#0 renderBob::$7 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::xpos#3 renderBob::screen#0 renderBob::$7 ] ) always clobbers reg byte a -Statement [38] (byte~) renderBob::$8 ← (byte) renderBob::xpos#3 & (byte) 3 [ renderBob::screen#0 renderBob::$7 renderBob::$8 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::$7 renderBob::$8 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::$7 renderBob::$8 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::$7 renderBob::$8 ] ) always clobbers reg byte a -Statement [39] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a -Statement [40] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [41] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [42] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [43] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [44] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [45] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [46] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [47] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [48] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ ] ( main:2::renderBob:17 [ main::sin_x_idx#7 main::sin_y_idx#7 ] main:2::renderBob:20 [ main::sin_x_idx#7 main::sin_y_idx#7 ] main:2::renderBob:23 [ main::sin_x_idx#7 main::sin_y_idx#7 ] ) always clobbers reg byte a reg byte y -Statement [52] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::memset:11 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [54] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::memset:11 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [59] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 [ prepareBobs::shift_y#2 bob_charset_next_id#14 prepareBobs::bob_table_idx#6 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#14 prepareBobs::bob_table_idx#6 ] ) always clobbers reg byte a -Statement [62] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 ] ) always clobbers reg byte a -Statement [66] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ) always clobbers reg byte a -Statement [68] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte a -Statement [74] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ) always clobbers reg byte a -Statement [78] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte y -Statement [79] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ) always clobbers reg byte a -Statement [80] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ) always clobbers reg byte a -Statement [84] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:57 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:75 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 ] ) always clobbers reg byte a -Statement [90] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:57 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:75 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] ) always clobbers reg byte a -Statement [93] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:57 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:75 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] ) always clobbers reg byte a -Statement [94] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:57 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:75 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] ) always clobbers reg byte a reg byte x reg byte y -Statement [98] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 [ bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:57 [ bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:75 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] ) always clobbers reg byte a -Statement [104] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 [ shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] ( main:2::prepareBobs:5::shiftProtoBobRight:70 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] main:2::prepareBobs:5::shiftProtoBobRight:72 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] ) always clobbers reg byte a -Statement [108] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 [ shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] ( main:2::prepareBobs:5::shiftProtoBobRight:70 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] main:2::prepareBobs:5::shiftProtoBobRight:72 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] ) always clobbers reg byte a -Statement [112] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ( main:2::prepareBobs:5::shiftProtoBobRight:70 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] main:2::prepareBobs:5::shiftProtoBobRight:72 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ) always clobbers reg byte a -Statement [116] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ( main:2::prepareBobs:5::shiftProtoBobRight:70 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] main:2::prepareBobs:5::shiftProtoBobRight:72 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ) always clobbers reg byte a -Statement [120] *((const byte*) PROTO_BOB) ← (byte) 0 [ ] ( main:2::prepareBobs:5::shiftProtoBobDown:64 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [121] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 [ ] ( main:2::prepareBobs:5::shiftProtoBobDown:64 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [122] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 [ ] ( main:2::prepareBobs:5::shiftProtoBobDown:64 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [124] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:2::prepareBobs:5::shiftProtoBobDown:64 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a -Statement [125] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:2::prepareBobs:5::shiftProtoBobDown:64 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a -Statement [126] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 [ shiftProtoBobDown::i#2 ] ( main:2::prepareBobs:5::shiftProtoBobDown:64 [ prepareBobs::shift_y#2 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a -Potential registers zp[1]:2 [ main::sin_x_idx#7 main::sin_x_idx#1 ] : zp[1]:2 , reg byte x , -Potential registers zp[1]:3 [ main::sin_y_idx#7 main::sin_y_idx#1 ] : zp[1]:3 , reg byte x , -Potential registers zp[1]:4 [ renderBob::xpos#3 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#0 ] : zp[1]:4 , reg byte x , reg byte y , -Potential registers zp[1]:5 [ renderBob::ypos#3 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#0 ] : zp[1]:5 , reg byte x , reg byte y , -Potential registers zp[2]:6 [ memset::dst#2 memset::dst#1 ] : zp[2]:6 , -Potential registers zp[1]:8 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] : zp[1]:8 , -Potential registers zp[1]:9 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] : zp[1]:9 , -Potential registers zp[1]:10 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] : zp[1]:10 , -Potential registers zp[1]:11 [ prepareBobs::cell#2 prepareBobs::cell#1 ] : zp[1]:11 , -Potential registers zp[2]:12 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] : zp[2]:12 , -Potential registers zp[2]:14 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] : zp[2]:14 , -Potential registers zp[1]:16 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] : zp[1]:16 , -Potential registers zp[2]:17 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] : zp[2]:17 , -Potential registers zp[1]:19 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] : zp[1]:19 , -Potential registers zp[2]:20 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] : zp[2]:20 , -Potential registers zp[1]:22 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] : zp[1]:22 , reg byte x , reg byte y , -Potential registers zp[1]:23 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] : zp[1]:23 , -Potential registers zp[1]:24 [ bobCharsetFindOrAddGlyph::found#2 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:25 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] : zp[1]:25 , reg byte x , reg byte y , -Potential registers zp[1]:26 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] : zp[1]:26 , reg byte x , reg byte y , -Potential registers zp[1]:27 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] : zp[1]:27 , reg byte x , reg byte y , -Potential registers zp[1]:28 [ shiftProtoBobRight::carry#1 ] : zp[1]:28 , reg byte x , reg byte y , -Potential registers zp[1]:29 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] : zp[1]:29 , reg byte x , reg byte y , -Potential registers zp[1]:30 [ renderBob::x_char_offset#0 ] : zp[1]:30 , reg byte x , reg byte y , -Potential registers zp[1]:31 [ renderBob::y_char_offset#0 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:32 [ renderBob::$2 ] : zp[2]:32 , -Potential registers zp[2]:34 [ renderBob::$10 ] : zp[2]:34 , -Potential registers zp[2]:36 [ renderBob::$11 ] : zp[2]:36 , -Potential registers zp[2]:38 [ renderBob::y_offset#0 ] : zp[2]:38 , -Potential registers zp[2]:40 [ renderBob::$4 ] : zp[2]:40 , -Potential registers zp[2]:42 [ renderBob::screen#0 ] : zp[2]:42 , -Potential registers zp[1]:44 [ renderBob::$6 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:45 [ renderBob::$7 ] : zp[1]:45 , reg byte x , reg byte y , -Potential registers zp[1]:46 [ renderBob::$8 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:47 [ renderBob::bob_table_idx#0 ] : zp[1]:47 , reg byte x , -Potential registers zp[1]:48 [ bobCharsetFindOrAddGlyph::return#1 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:49 [ prepareBobs::$5 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:50 [ shiftProtoBobRight::$1 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:51 [ shiftProtoBobRight::$5 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:52 [ shiftProtoBobRight::$6 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , +Statement [14] (byte~) main::$30 ← (byte) main::x#4 << (byte) 1 [ main::x#4 main::y#2 main::$30 ] ( main:2 [ main::x#4 main::y#2 main::$30 ] ) always clobbers reg byte a +Statement [15] (byte~) main::$31 ← (byte~) main::$30 + (byte) main::x#4 [ main::x#4 main::y#2 main::$31 ] ( main:2 [ main::x#4 main::y#2 main::$31 ] ) always clobbers reg byte a +Statement [16] (byte~) main::$7 ← (byte~) main::$31 << (byte) 2 [ main::x#4 main::y#2 main::$7 ] ( main:2 [ main::x#4 main::y#2 main::$7 ] ) always clobbers reg byte a +Statement [17] (byte) renderBob::xpos#0 ← (byte~) main::$7 + (byte) main::y#2 [ main::x#4 main::y#2 renderBob::xpos#0 ] ( main:2 [ main::x#4 main::y#2 renderBob::xpos#0 ] ) always clobbers reg byte a +Statement [18] (byte~) main::$33 ← (byte) main::y#2 << (byte) 1 [ main::x#4 main::y#2 renderBob::xpos#0 main::$33 ] ( main:2 [ main::x#4 main::y#2 renderBob::xpos#0 main::$33 ] ) always clobbers reg byte a +Statement [19] (byte~) main::$34 ← (byte~) main::$33 + (byte) main::y#2 [ main::x#4 main::y#2 renderBob::xpos#0 main::$34 ] ( main:2 [ main::x#4 main::y#2 renderBob::xpos#0 main::$34 ] ) always clobbers reg byte a +Statement [20] (byte~) main::$9 ← (byte~) main::$34 << (byte) 3 [ main::x#4 main::y#2 renderBob::xpos#0 main::$9 ] ( main:2 [ main::x#4 main::y#2 renderBob::xpos#0 main::$9 ] ) always clobbers reg byte a +Statement [21] (byte) renderBob::ypos#0 ← (byte~) main::$9 + (byte) main::x#4 [ main::x#4 main::y#2 renderBob::xpos#0 renderBob::ypos#0 ] ( main:2 [ main::x#4 main::y#2 renderBob::xpos#0 renderBob::ypos#0 ] ) always clobbers reg byte a +Statement [40] if(*((const byte*) RASTER)<(byte) $f8) goto main::@8 [ main::sin_x_idx#9 main::sin_y_idx#9 ] ( main:2 [ main::sin_x_idx#9 main::sin_y_idx#9 ] ) always clobbers reg byte a +Statement [64] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [66] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [68] *((const byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [76] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:28::keyboard_matrix_read:71 [ ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:71 [ ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:71 [ main::sin_x_idx#1 main::sin_y_idx#1 ] ) always clobbers reg byte a +Statement [77] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:28::keyboard_matrix_read:71 [ keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:71 [ keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:71 [ main::sin_x_idx#1 main::sin_y_idx#1 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [80] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#6 >> (byte) 2 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 ] ) always clobbers reg byte a +Statement [81] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#6 >> (byte) 3 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ) always clobbers reg byte a +Statement [82] (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 ] ) always clobbers reg byte a +Statement [83] (word~) renderBob::$10 ← (word~) renderBob::$2 << (byte) 2 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$2 renderBob::$10 ] ) always clobbers reg byte a +Statement [84] (word~) renderBob::$11 ← (word~) renderBob::$10 + (word~) renderBob::$2 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$11 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$11 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$11 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$11 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$11 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$11 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$11 ] ) always clobbers reg byte a +Statement [85] (word) renderBob::y_offset#0 ← (word~) renderBob::$11 << (byte) 3 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_offset#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_offset#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_offset#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_offset#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_offset#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ) always clobbers reg byte a +Statement [86] (byte*~) renderBob::$4 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$4 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$4 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$4 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$4 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$4 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$4 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::x_char_offset#0 renderBob::$4 ] ) always clobbers reg byte a +Statement [87] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 [ renderBob::xpos#6 renderBob::ypos#6 renderBob::screen#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::ypos#6 renderBob::screen#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::screen#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::screen#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::screen#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::screen#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::ypos#6 renderBob::screen#0 ] ) always clobbers reg byte a +Statement [88] (byte~) renderBob::$6 ← (byte) renderBob::ypos#6 & (byte) 7 [ renderBob::xpos#6 renderBob::screen#0 renderBob::$6 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::screen#0 renderBob::$6 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$6 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$6 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$6 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$6 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$6 ] ) always clobbers reg byte a +Statement [89] (byte~) renderBob::$7 ← (byte~) renderBob::$6 << (byte) 2 [ renderBob::xpos#6 renderBob::screen#0 renderBob::$7 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::xpos#6 renderBob::screen#0 renderBob::$7 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$7 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$7 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$7 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$7 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::xpos#6 renderBob::screen#0 renderBob::$7 ] ) always clobbers reg byte a +Statement [90] (byte~) renderBob::$8 ← (byte) renderBob::xpos#6 & (byte) 3 [ renderBob::screen#0 renderBob::$7 renderBob::$8 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::$7 renderBob::$8 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::$7 renderBob::$8 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::$7 renderBob::$8 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::$7 renderBob::$8 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::$7 renderBob::$8 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::$7 renderBob::$8 ] ) always clobbers reg byte a +Statement [91] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a +Statement [92] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [93] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [94] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [95] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [96] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [97] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [98] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [99] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:22 [ main::x#4 main::y#2 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [100] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ ] ( main:2::renderBob:22 [ main::x#4 main::y#2 ] main:2::renderBob:44 [ main::sin_x_idx#9 main::sin_y_idx#9 ] main:2::renderBob:47 [ main::sin_x_idx#9 main::sin_y_idx#9 ] main:2::renderBob:50 [ main::sin_x_idx#9 main::sin_y_idx#9 ] main:2::renderBob:53 [ main::sin_x_idx#9 main::sin_y_idx#9 ] main:2::renderBob:56 [ main::sin_x_idx#9 main::sin_y_idx#9 ] ) always clobbers reg byte a reg byte y +Statement [103] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::end#0 ] ( main:2::memset:11 [ memset::str#3 memset::end#0 ] main:2::memset:38 [ memset::str#3 memset::end#0 ] ) always clobbers reg byte a +Statement [104] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::end#0 memset::dst#4 ] ( main:2::memset:11 [ memset::end#0 memset::dst#4 ] main:2::memset:38 [ memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [106] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::end#0 memset::dst#2 ] ( main:2::memset:11 [ memset::end#0 memset::dst#2 ] main:2::memset:38 [ memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [108] *((byte*) memset::dst#2) ← (byte) 0 [ memset::end#0 memset::dst#2 ] ( main:2::memset:11 [ memset::end#0 memset::dst#2 ] main:2::memset:38 [ memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [113] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 [ prepareBobs::shift_y#2 bob_charset_next_id#14 prepareBobs::bob_table_idx#6 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#14 prepareBobs::bob_table_idx#6 ] ) always clobbers reg byte a +Statement [116] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 ] ) always clobbers reg byte a +Statement [120] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ) always clobbers reg byte a +Statement [122] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte a +Statement [128] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ) always clobbers reg byte a +Statement [132] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte y +Statement [133] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ) always clobbers reg byte a +Statement [134] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ( main:2::prepareBobs:5 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ) always clobbers reg byte a +Statement [138] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:111 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:129 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 ] ) always clobbers reg byte a +Statement [144] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:111 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:129 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] ) always clobbers reg byte a +Statement [147] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:111 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:129 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] ) always clobbers reg byte a +Statement [148] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:111 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:129 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] ) always clobbers reg byte a reg byte x reg byte y +Statement [152] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 [ bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] ( main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:111 [ bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] main:2::prepareBobs:5::bobCharsetFindOrAddGlyph:129 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] ) always clobbers reg byte a +Statement [158] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 [ shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] ( main:2::prepareBobs:5::shiftProtoBobRight:124 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] main:2::prepareBobs:5::shiftProtoBobRight:126 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] ) always clobbers reg byte a +Statement [162] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 [ shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] ( main:2::prepareBobs:5::shiftProtoBobRight:124 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] main:2::prepareBobs:5::shiftProtoBobRight:126 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] ) always clobbers reg byte a +Statement [166] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ( main:2::prepareBobs:5::shiftProtoBobRight:124 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] main:2::prepareBobs:5::shiftProtoBobRight:126 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ) always clobbers reg byte a +Statement [170] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ( main:2::prepareBobs:5::shiftProtoBobRight:124 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] main:2::prepareBobs:5::shiftProtoBobRight:126 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ) always clobbers reg byte a +Statement [174] *((const byte*) PROTO_BOB) ← (byte) 0 [ ] ( main:2::prepareBobs:5::shiftProtoBobDown:118 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [175] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 [ ] ( main:2::prepareBobs:5::shiftProtoBobDown:118 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [176] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 [ ] ( main:2::prepareBobs:5::shiftProtoBobDown:118 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [178] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:2::prepareBobs:5::shiftProtoBobDown:118 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a +Statement [179] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:2::prepareBobs:5::shiftProtoBobDown:118 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a +Statement [180] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 [ shiftProtoBobDown::i#2 ] ( main:2::prepareBobs:5::shiftProtoBobDown:118 [ prepareBobs::shift_y#2 bob_charset_next_id#29 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a +Potential registers zp[1]:2 [ main::x#4 main::x#1 ] : zp[1]:2 , reg byte x , +Potential registers zp[1]:3 [ main::y#2 main::y#1 ] : zp[1]:3 , reg byte x , +Potential registers zp[1]:4 [ main::sin_x_idx#9 main::sin_x_idx#1 ] : zp[1]:4 , reg byte x , +Potential registers zp[1]:5 [ main::sin_y_idx#9 main::sin_y_idx#1 ] : zp[1]:5 , reg byte x , +Potential registers zp[1]:6 [ renderBob::xpos#6 renderBob::xpos#0 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#3 renderBob::xpos#4 renderBob::xpos#5 ] : zp[1]:6 , reg byte x , reg byte y , +Potential registers zp[1]:7 [ renderBob::ypos#6 renderBob::ypos#0 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#3 renderBob::ypos#4 renderBob::ypos#5 ] : zp[1]:7 , reg byte x , reg byte y , +Potential registers zp[2]:8 [ memset::str#3 ] : zp[2]:8 , +Potential registers zp[2]:10 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:10 , +Potential registers zp[1]:12 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] : zp[1]:12 , +Potential registers zp[1]:13 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] : zp[1]:13 , +Potential registers zp[1]:14 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] : zp[1]:14 , +Potential registers zp[1]:15 [ prepareBobs::cell#2 prepareBobs::cell#1 ] : zp[1]:15 , +Potential registers zp[2]:16 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] : zp[2]:16 , +Potential registers zp[2]:18 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] : zp[2]:18 , +Potential registers zp[1]:20 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] : zp[1]:20 , +Potential registers zp[2]:21 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] : zp[2]:21 , +Potential registers zp[1]:23 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] : zp[1]:23 , +Potential registers zp[2]:24 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] : zp[2]:24 , +Potential registers zp[1]:26 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] : zp[1]:26 , reg byte x , reg byte y , +Potential registers zp[1]:27 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] : zp[1]:27 , +Potential registers zp[1]:28 [ bobCharsetFindOrAddGlyph::found#2 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:29 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] : zp[1]:29 , reg byte x , reg byte y , +Potential registers zp[1]:30 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] : zp[1]:30 , reg byte x , reg byte y , +Potential registers zp[1]:31 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] : zp[1]:31 , reg byte x , reg byte y , +Potential registers zp[1]:32 [ shiftProtoBobRight::carry#1 ] : zp[1]:32 , reg byte x , reg byte y , +Potential registers zp[1]:33 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] : zp[1]:33 , reg byte x , reg byte y , +Potential registers zp[1]:34 [ main::$30 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:35 [ main::$31 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:36 [ main::$7 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:37 [ main::$33 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:38 [ main::$34 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:39 [ main::$9 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:40 [ keyboard_key_pressed::return#2 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:41 [ main::$14 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:42 [ keyboard_key_pressed::return#3 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:43 [ main::$16 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:44 [ keyboard_key_pressed::return#4 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:45 [ main::$25 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:46 [ keyboard_matrix_read::return#2 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:47 [ keyboard_key_pressed::$2 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:48 [ keyboard_key_pressed::return#0 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:49 [ keyboard_matrix_read::return#0 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:50 [ renderBob::x_char_offset#0 ] : zp[1]:50 , reg byte x , reg byte y , +Potential registers zp[1]:51 [ renderBob::y_char_offset#0 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:52 [ renderBob::$2 ] : zp[2]:52 , +Potential registers zp[2]:54 [ renderBob::$10 ] : zp[2]:54 , +Potential registers zp[2]:56 [ renderBob::$11 ] : zp[2]:56 , +Potential registers zp[2]:58 [ renderBob::y_offset#0 ] : zp[2]:58 , +Potential registers zp[2]:60 [ renderBob::$4 ] : zp[2]:60 , +Potential registers zp[2]:62 [ renderBob::screen#0 ] : zp[2]:62 , +Potential registers zp[1]:64 [ renderBob::$6 ] : zp[1]:64 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:65 [ renderBob::$7 ] : zp[1]:65 , reg byte x , reg byte y , +Potential registers zp[1]:66 [ renderBob::$8 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:67 [ renderBob::bob_table_idx#0 ] : zp[1]:67 , reg byte x , +Potential registers zp[2]:68 [ memset::end#0 ] : zp[2]:68 , +Potential registers zp[1]:70 [ bobCharsetFindOrAddGlyph::return#1 ] : zp[1]:70 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:71 [ prepareBobs::$5 ] : zp[1]:71 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:72 [ shiftProtoBobRight::$1 ] : zp[1]:72 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:73 [ shiftProtoBobRight::$5 ] : zp[1]:73 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:74 [ shiftProtoBobRight::$6 ] : zp[1]:74 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [bobCharsetFindOrAddGlyph] 366,670.33: zp[1]:23 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] 36,670.33: zp[1]:22 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] 30,002.31: zp[2]:20 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] 11,938.75: zp[1]:19 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] 10,001: zp[1]:24 [ bobCharsetFindOrAddGlyph::found#2 ] 9,402.2: zp[2]:17 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] 2,002: zp[1]:48 [ bobCharsetFindOrAddGlyph::return#1 ] -Uplift Scope [shiftProtoBobRight] 5,705.7: zp[1]:26 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] 2,288: zp[1]:27 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] 2,002: zp[1]:50 [ shiftProtoBobRight::$1 ] 2,002: zp[1]:51 [ shiftProtoBobRight::$5 ] 2,002: zp[1]:52 [ shiftProtoBobRight::$6 ] 1,232: zp[1]:25 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] 111.22: zp[1]:28 [ shiftProtoBobRight::carry#1 ] -Uplift Scope [prepareBobs] 2,335.67: zp[1]:11 [ prepareBobs::cell#2 prepareBobs::cell#1 ] 2,002: zp[1]:49 [ prepareBobs::$5 ] 1,591: zp[2]:14 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] 1,096.33: zp[2]:12 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] 219.82: zp[1]:10 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] 71.71: zp[1]:9 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] 23.5: zp[1]:8 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Uplift Scope [] 2,829.77: zp[1]:16 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] -Uplift Scope [shiftProtoBobDown] 363.6: zp[1]:29 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] -Uplift Scope [renderBob] 70.11: zp[1]:5 [ renderBob::ypos#3 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#0 ] 36.36: zp[1]:4 [ renderBob::xpos#3 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#0 ] 4: zp[2]:34 [ renderBob::$10 ] 4: zp[2]:36 [ renderBob::$11 ] 4: zp[2]:38 [ renderBob::y_offset#0 ] 4: zp[2]:40 [ renderBob::$4 ] 4: zp[1]:44 [ renderBob::$6 ] 4: zp[1]:46 [ renderBob::$8 ] 3: zp[2]:32 [ renderBob::$2 ] 2.22: zp[1]:47 [ renderBob::bob_table_idx#0 ] 2: zp[1]:31 [ renderBob::y_char_offset#0 ] 2: zp[1]:45 [ renderBob::$7 ] 1.54: zp[2]:42 [ renderBob::screen#0 ] 0.57: zp[1]:30 [ renderBob::x_char_offset#0 ] -Uplift Scope [memset] 36.67: zp[2]:6 [ memset::dst#2 memset::dst#1 ] -Uplift Scope [main] 15.23: zp[1]:3 [ main::sin_y_idx#7 main::sin_y_idx#1 ] 11.92: zp[1]:2 [ main::sin_x_idx#7 main::sin_x_idx#1 ] +Uplift Scope [bobCharsetFindOrAddGlyph] 366,670.33: zp[1]:27 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] 36,670.33: zp[1]:26 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] 30,002.31: zp[2]:24 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] 11,938.75: zp[1]:23 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] 10,001: zp[1]:28 [ bobCharsetFindOrAddGlyph::found#2 ] 9,402.2: zp[2]:21 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] 2,002: zp[1]:70 [ bobCharsetFindOrAddGlyph::return#1 ] +Uplift Scope [shiftProtoBobRight] 5,705.7: zp[1]:30 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] 2,288: zp[1]:31 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] 2,002: zp[1]:72 [ shiftProtoBobRight::$1 ] 2,002: zp[1]:73 [ shiftProtoBobRight::$5 ] 2,002: zp[1]:74 [ shiftProtoBobRight::$6 ] 1,232: zp[1]:29 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] 111.22: zp[1]:32 [ shiftProtoBobRight::carry#1 ] +Uplift Scope [prepareBobs] 2,335.67: zp[1]:15 [ prepareBobs::cell#2 prepareBobs::cell#1 ] 2,002: zp[1]:71 [ prepareBobs::$5 ] 1,591: zp[2]:18 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] 1,096.33: zp[2]:16 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] 219.82: zp[1]:14 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] 71.71: zp[1]:13 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] 23.5: zp[1]:12 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Uplift Scope [] 2,829.77: zp[1]:20 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] +Uplift Scope [main] 202: zp[1]:3 [ main::y#2 main::y#1 ] 202: zp[1]:34 [ main::$30 ] 202: zp[1]:35 [ main::$31 ] 202: zp[1]:36 [ main::$7 ] 202: zp[1]:37 [ main::$33 ] 202: zp[1]:38 [ main::$34 ] 202: zp[1]:39 [ main::$9 ] 41.5: zp[1]:2 [ main::x#4 main::x#1 ] 22: zp[1]:41 [ main::$14 ] 22: zp[1]:43 [ main::$16 ] 22: zp[1]:45 [ main::$25 ] 7.72: zp[1]:5 [ main::sin_y_idx#9 main::sin_y_idx#1 ] 7.42: zp[1]:4 [ main::sin_x_idx#9 main::sin_x_idx#1 ] +Uplift Scope [renderBob] 329.78: zp[1]:7 [ renderBob::ypos#6 renderBob::ypos#0 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#3 renderBob::ypos#4 renderBob::ypos#5 ] 109.95: zp[1]:6 [ renderBob::xpos#6 renderBob::xpos#0 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#3 renderBob::xpos#4 renderBob::xpos#5 ] 4: zp[2]:54 [ renderBob::$10 ] 4: zp[2]:56 [ renderBob::$11 ] 4: zp[2]:58 [ renderBob::y_offset#0 ] 4: zp[2]:60 [ renderBob::$4 ] 4: zp[1]:64 [ renderBob::$6 ] 4: zp[1]:66 [ renderBob::$8 ] 3: zp[2]:52 [ renderBob::$2 ] 2.22: zp[1]:67 [ renderBob::bob_table_idx#0 ] 2: zp[1]:51 [ renderBob::y_char_offset#0 ] 2: zp[1]:65 [ renderBob::$7 ] 1.54: zp[2]:62 [ renderBob::screen#0 ] 0.57: zp[1]:50 [ renderBob::x_char_offset#0 ] +Uplift Scope [shiftProtoBobDown] 363.6: zp[1]:33 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] +Uplift Scope [keyboard_key_pressed] 22: zp[1]:40 [ keyboard_key_pressed::return#2 ] 22: zp[1]:42 [ keyboard_key_pressed::return#3 ] 22: zp[1]:44 [ keyboard_key_pressed::return#4 ] 7: zp[1]:48 [ keyboard_key_pressed::return#0 ] 4: zp[1]:47 [ keyboard_key_pressed::$2 ] +Uplift Scope [memset] 41.33: zp[2]:10 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp[2]:68 [ memset::end#0 ] 0: zp[2]:8 [ memset::str#3 ] +Uplift Scope [keyboard_matrix_read] 4: zp[1]:46 [ keyboard_matrix_read::return#2 ] 1.33: zp[1]:49 [ keyboard_matrix_read::return#0 ] +Uplift Scope [RADIX] -Uplifting [bobCharsetFindOrAddGlyph] best 6249481 combination zp[1]:23 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] reg byte y [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] zp[2]:20 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] zp[1]:19 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] reg byte a [ bobCharsetFindOrAddGlyph::found#2 ] zp[2]:17 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] reg byte a [ bobCharsetFindOrAddGlyph::return#1 ] -Uplifting [shiftProtoBobRight] best 6211481 combination reg byte x [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] reg byte y [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] reg byte a [ shiftProtoBobRight::$1 ] reg byte a [ shiftProtoBobRight::$5 ] zp[1]:52 [ shiftProtoBobRight::$6 ] zp[1]:25 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] zp[1]:28 [ shiftProtoBobRight::carry#1 ] +Uplifting [bobCharsetFindOrAddGlyph] best 6261934 combination zp[1]:27 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] reg byte y [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] zp[2]:24 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] zp[1]:23 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] reg byte a [ bobCharsetFindOrAddGlyph::found#2 ] zp[2]:21 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] reg byte a [ bobCharsetFindOrAddGlyph::return#1 ] +Uplifting [shiftProtoBobRight] best 6223934 combination reg byte x [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] reg byte y [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] reg byte a [ shiftProtoBobRight::$1 ] reg byte a [ shiftProtoBobRight::$5 ] zp[1]:74 [ shiftProtoBobRight::$6 ] zp[1]:29 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] zp[1]:32 [ shiftProtoBobRight::carry#1 ] Limited combination testing to 100 combinations of 5184 possible. -Uplifting [prepareBobs] best 6205481 combination zp[1]:11 [ prepareBobs::cell#2 prepareBobs::cell#1 ] reg byte a [ prepareBobs::$5 ] zp[2]:14 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] zp[2]:12 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] zp[1]:10 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] zp[1]:9 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] zp[1]:8 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Uplifting [] best 6205481 combination zp[1]:16 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] -Uplifting [shiftProtoBobDown] best 6203881 combination reg byte x [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] -Uplifting [renderBob] best 6203777 combination reg byte x [ renderBob::ypos#3 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#0 ] zp[1]:4 [ renderBob::xpos#3 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#0 ] zp[2]:34 [ renderBob::$10 ] zp[2]:36 [ renderBob::$11 ] zp[2]:38 [ renderBob::y_offset#0 ] zp[2]:40 [ renderBob::$4 ] reg byte a [ renderBob::$6 ] reg byte a [ renderBob::$8 ] zp[2]:32 [ renderBob::$2 ] zp[1]:47 [ renderBob::bob_table_idx#0 ] zp[1]:31 [ renderBob::y_char_offset#0 ] zp[1]:45 [ renderBob::$7 ] zp[2]:42 [ renderBob::screen#0 ] zp[1]:30 [ renderBob::x_char_offset#0 ] +Uplifting [prepareBobs] best 6217934 combination zp[1]:15 [ prepareBobs::cell#2 prepareBobs::cell#1 ] reg byte a [ prepareBobs::$5 ] zp[2]:18 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] zp[2]:16 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] zp[1]:14 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] zp[1]:13 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] zp[1]:12 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Uplifting [] best 6217934 combination zp[1]:20 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] +Uplifting [main] best 6215334 combination reg byte x [ main::y#2 main::y#1 ] reg byte a [ main::$30 ] reg byte a [ main::$31 ] reg byte a [ main::$7 ] zp[1]:37 [ main::$33 ] zp[1]:38 [ main::$34 ] zp[1]:39 [ main::$9 ] zp[1]:2 [ main::x#4 main::x#1 ] zp[1]:41 [ main::$14 ] zp[1]:43 [ main::$16 ] zp[1]:45 [ main::$25 ] zp[1]:5 [ main::sin_y_idx#9 main::sin_y_idx#1 ] zp[1]:4 [ main::sin_x_idx#9 main::sin_x_idx#1 ] +Limited combination testing to 100 combinations of 4194304 possible. +Uplifting [renderBob] best 6215070 combination reg byte y [ renderBob::ypos#6 renderBob::ypos#0 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#3 renderBob::ypos#4 renderBob::ypos#5 ] zp[1]:6 [ renderBob::xpos#6 renderBob::xpos#0 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#3 renderBob::xpos#4 renderBob::xpos#5 ] zp[2]:54 [ renderBob::$10 ] zp[2]:56 [ renderBob::$11 ] zp[2]:58 [ renderBob::y_offset#0 ] zp[2]:60 [ renderBob::$4 ] reg byte a [ renderBob::$6 ] reg byte a [ renderBob::$8 ] zp[2]:52 [ renderBob::$2 ] zp[1]:67 [ renderBob::bob_table_idx#0 ] zp[1]:51 [ renderBob::y_char_offset#0 ] zp[1]:65 [ renderBob::$7 ] zp[2]:62 [ renderBob::screen#0 ] zp[1]:50 [ renderBob::x_char_offset#0 ] Limited combination testing to 100 combinations of 10368 possible. -Uplifting [memset] best 6203777 combination zp[2]:6 [ memset::dst#2 memset::dst#1 ] -Uplifting [main] best 6203777 combination zp[1]:3 [ main::sin_y_idx#7 main::sin_y_idx#1 ] zp[1]:2 [ main::sin_x_idx#7 main::sin_x_idx#1 ] -Attempting to uplift remaining variables inzp[1]:23 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -Uplifting [bobCharsetFindOrAddGlyph] best 6203777 combination zp[1]:23 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -Attempting to uplift remaining variables inzp[1]:19 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] -Uplifting [bobCharsetFindOrAddGlyph] best 6203777 combination zp[1]:19 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] -Attempting to uplift remaining variables inzp[1]:16 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] -Uplifting [] best 6203777 combination zp[1]:16 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] -Attempting to uplift remaining variables inzp[1]:11 [ prepareBobs::cell#2 prepareBobs::cell#1 ] -Uplifting [prepareBobs] best 6203777 combination zp[1]:11 [ prepareBobs::cell#2 prepareBobs::cell#1 ] -Attempting to uplift remaining variables inzp[1]:52 [ shiftProtoBobRight::$6 ] -Uplifting [shiftProtoBobRight] best 6197777 combination reg byte a [ shiftProtoBobRight::$6 ] -Attempting to uplift remaining variables inzp[1]:25 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] -Uplifting [shiftProtoBobRight] best 6197777 combination zp[1]:25 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] -Attempting to uplift remaining variables inzp[1]:10 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] -Uplifting [prepareBobs] best 6197777 combination zp[1]:10 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] -Attempting to uplift remaining variables inzp[1]:28 [ shiftProtoBobRight::carry#1 ] -Uplifting [shiftProtoBobRight] best 6197777 combination zp[1]:28 [ shiftProtoBobRight::carry#1 ] -Attempting to uplift remaining variables inzp[1]:9 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] -Uplifting [prepareBobs] best 6197777 combination zp[1]:9 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] -Attempting to uplift remaining variables inzp[1]:4 [ renderBob::xpos#3 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#0 ] -Uplifting [renderBob] best 6197777 combination zp[1]:4 [ renderBob::xpos#3 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#0 ] -Attempting to uplift remaining variables inzp[1]:8 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Uplifting [prepareBobs] best 6197777 combination zp[1]:8 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Attempting to uplift remaining variables inzp[1]:3 [ main::sin_y_idx#7 main::sin_y_idx#1 ] -Uplifting [main] best 6197777 combination zp[1]:3 [ main::sin_y_idx#7 main::sin_y_idx#1 ] -Attempting to uplift remaining variables inzp[1]:2 [ main::sin_x_idx#7 main::sin_x_idx#1 ] -Uplifting [main] best 6197777 combination zp[1]:2 [ main::sin_x_idx#7 main::sin_x_idx#1 ] -Attempting to uplift remaining variables inzp[1]:47 [ renderBob::bob_table_idx#0 ] -Uplifting [renderBob] best 6197749 combination reg byte x [ renderBob::bob_table_idx#0 ] -Attempting to uplift remaining variables inzp[1]:31 [ renderBob::y_char_offset#0 ] -Uplifting [renderBob] best 6197743 combination reg byte a [ renderBob::y_char_offset#0 ] -Attempting to uplift remaining variables inzp[1]:45 [ renderBob::$7 ] -Uplifting [renderBob] best 6197743 combination zp[1]:45 [ renderBob::$7 ] -Attempting to uplift remaining variables inzp[1]:30 [ renderBob::x_char_offset#0 ] -Uplifting [renderBob] best 6197741 combination reg byte y [ renderBob::x_char_offset#0 ] -Coalescing zero page register [ zp[2]:12 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] ] with [ zp[2]:17 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:32 [ renderBob::$2 ] ] with [ zp[2]:36 [ renderBob::$11 ] ] - score: 1 -Coalescing zero page register [ zp[2]:38 [ renderBob::y_offset#0 ] ] with [ zp[2]:40 [ renderBob::$4 ] ] - score: 1 -Coalescing zero page register [ zp[2]:32 [ renderBob::$2 renderBob::$11 ] ] with [ zp[2]:38 [ renderBob::y_offset#0 renderBob::$4 ] ] - score: 1 -Coalescing zero page register [ zp[2]:32 [ renderBob::$2 renderBob::$11 renderBob::y_offset#0 renderBob::$4 ] ] with [ zp[2]:42 [ renderBob::screen#0 ] ] - score: 1 -Coalescing zero page register [ zp[1]:8 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] ] with [ zp[1]:2 [ main::sin_x_idx#7 main::sin_x_idx#1 ] ] -Coalescing zero page register [ zp[1]:9 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] ] with [ zp[1]:3 [ main::sin_y_idx#7 main::sin_y_idx#1 ] ] -Coalescing zero page register [ zp[1]:10 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] ] with [ zp[1]:4 [ renderBob::xpos#3 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#0 ] ] -Coalescing zero page register [ zp[2]:12 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ] with [ zp[2]:6 [ memset::dst#2 memset::dst#1 ] ] -Coalescing zero page register [ zp[1]:25 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] ] with [ zp[1]:11 [ prepareBobs::cell#2 prepareBobs::cell#1 ] ] -Coalescing zero page register [ zp[1]:28 [ shiftProtoBobRight::carry#1 ] ] with [ zp[1]:19 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] ] -Coalescing zero page register [ zp[2]:32 [ renderBob::$2 renderBob::$11 renderBob::y_offset#0 renderBob::$4 renderBob::screen#0 ] ] with [ zp[2]:14 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] ] -Coalescing zero page register [ zp[2]:34 [ renderBob::$10 ] ] with [ zp[2]:20 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] ] -Coalescing zero page register [ zp[1]:45 [ renderBob::$7 ] ] with [ zp[1]:16 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] ] -Allocated (was zp[1]:8) zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::sin_x_idx#7 main::sin_x_idx#1 ] -Allocated (was zp[1]:9) zp[1]:3 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 main::sin_y_idx#7 main::sin_y_idx#1 ] -Allocated (was zp[1]:10) zp[1]:4 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 renderBob::xpos#3 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#0 ] -Allocated (was zp[2]:12) zp[2]:5 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 memset::dst#2 memset::dst#1 ] -Allocated (was zp[1]:23) zp[1]:7 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -Allocated (was zp[1]:25) zp[1]:8 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] -Allocated (was zp[1]:28) zp[1]:9 [ shiftProtoBobRight::carry#1 bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] -Allocated (was zp[2]:32) zp[2]:10 [ renderBob::$2 renderBob::$11 renderBob::y_offset#0 renderBob::$4 renderBob::screen#0 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] -Allocated (was zp[2]:34) zp[2]:12 [ renderBob::$10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] -Allocated (was zp[1]:45) zp[1]:14 [ renderBob::$7 bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] +Uplifting [shiftProtoBobDown] best 6213470 combination reg byte x [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] +Uplifting [keyboard_key_pressed] best 6213197 combination reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#3 ] reg byte a [ keyboard_key_pressed::return#4 ] reg byte a [ keyboard_key_pressed::return#0 ] zp[1]:47 [ keyboard_key_pressed::$2 ] +Limited combination testing to 100 combinations of 1024 possible. +Uplifting [memset] best 6213197 combination zp[2]:10 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:68 [ memset::end#0 ] zp[2]:8 [ memset::str#3 ] +Uplifting [keyboard_matrix_read] best 6213185 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte a [ keyboard_matrix_read::return#0 ] +Uplifting [RADIX] best 6213185 combination +Attempting to uplift remaining variables inzp[1]:27 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +Uplifting [bobCharsetFindOrAddGlyph] best 6213185 combination zp[1]:27 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +Attempting to uplift remaining variables inzp[1]:23 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +Uplifting [bobCharsetFindOrAddGlyph] best 6213185 combination zp[1]:23 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +Attempting to uplift remaining variables inzp[1]:20 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] +Uplifting [] best 6213185 combination zp[1]:20 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] +Attempting to uplift remaining variables inzp[1]:15 [ prepareBobs::cell#2 prepareBobs::cell#1 ] +Uplifting [prepareBobs] best 6213185 combination zp[1]:15 [ prepareBobs::cell#2 prepareBobs::cell#1 ] +Attempting to uplift remaining variables inzp[1]:74 [ shiftProtoBobRight::$6 ] +Uplifting [shiftProtoBobRight] best 6207185 combination reg byte a [ shiftProtoBobRight::$6 ] +Attempting to uplift remaining variables inzp[1]:29 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] +Uplifting [shiftProtoBobRight] best 6207185 combination zp[1]:29 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] +Attempting to uplift remaining variables inzp[1]:14 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] +Uplifting [prepareBobs] best 6207185 combination zp[1]:14 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] +Attempting to uplift remaining variables inzp[1]:37 [ main::$33 ] +Uplifting [main] best 6206985 combination reg byte a [ main::$33 ] +Attempting to uplift remaining variables inzp[1]:38 [ main::$34 ] +Uplifting [main] best 6206385 combination reg byte a [ main::$34 ] +Attempting to uplift remaining variables inzp[1]:39 [ main::$9 ] +Uplifting [main] best 6205785 combination reg byte a [ main::$9 ] +Attempting to uplift remaining variables inzp[1]:32 [ shiftProtoBobRight::carry#1 ] +Uplifting [shiftProtoBobRight] best 6205785 combination zp[1]:32 [ shiftProtoBobRight::carry#1 ] +Attempting to uplift remaining variables inzp[1]:6 [ renderBob::xpos#6 renderBob::xpos#0 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#3 renderBob::xpos#4 renderBob::xpos#5 ] +Uplifting [renderBob] best 6205785 combination zp[1]:6 [ renderBob::xpos#6 renderBob::xpos#0 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#3 renderBob::xpos#4 renderBob::xpos#5 ] +Attempting to uplift remaining variables inzp[1]:13 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] +Uplifting [prepareBobs] best 6205785 combination zp[1]:13 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] +Attempting to uplift remaining variables inzp[1]:2 [ main::x#4 main::x#1 ] +Uplifting [main] best 6205785 combination zp[1]:2 [ main::x#4 main::x#1 ] +Attempting to uplift remaining variables inzp[1]:12 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Uplifting [prepareBobs] best 6205785 combination zp[1]:12 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Attempting to uplift remaining variables inzp[1]:41 [ main::$14 ] +Uplifting [main] best 6205725 combination reg byte a [ main::$14 ] +Attempting to uplift remaining variables inzp[1]:43 [ main::$16 ] +Uplifting [main] best 6205665 combination reg byte a [ main::$16 ] +Attempting to uplift remaining variables inzp[1]:45 [ main::$25 ] +Uplifting [main] best 6205605 combination reg byte a [ main::$25 ] +Attempting to uplift remaining variables inzp[1]:5 [ main::sin_y_idx#9 main::sin_y_idx#1 ] +Uplifting [main] best 6205395 combination reg byte x [ main::sin_y_idx#9 main::sin_y_idx#1 ] +Attempting to uplift remaining variables inzp[1]:4 [ main::sin_x_idx#9 main::sin_x_idx#1 ] +Uplifting [main] best 6205395 combination zp[1]:4 [ main::sin_x_idx#9 main::sin_x_idx#1 ] +Attempting to uplift remaining variables inzp[1]:47 [ keyboard_key_pressed::$2 ] +Uplifting [keyboard_key_pressed] best 6205389 combination reg byte a [ keyboard_key_pressed::$2 ] +Attempting to uplift remaining variables inzp[1]:67 [ renderBob::bob_table_idx#0 ] +Uplifting [renderBob] best 6205389 combination zp[1]:67 [ renderBob::bob_table_idx#0 ] +Attempting to uplift remaining variables inzp[1]:51 [ renderBob::y_char_offset#0 ] +Uplifting [renderBob] best 6205383 combination reg byte a [ renderBob::y_char_offset#0 ] +Attempting to uplift remaining variables inzp[1]:65 [ renderBob::$7 ] +Uplifting [renderBob] best 6205383 combination zp[1]:65 [ renderBob::$7 ] +Attempting to uplift remaining variables inzp[1]:50 [ renderBob::x_char_offset#0 ] +Uplifting [renderBob] best 6205383 combination zp[1]:50 [ renderBob::x_char_offset#0 ] +Coalescing zero page register [ zp[2]:8 [ memset::str#3 ] ] with [ zp[2]:10 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:16 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] ] with [ zp[2]:21 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:52 [ renderBob::$2 ] ] with [ zp[2]:56 [ renderBob::$11 ] ] - score: 1 +Coalescing zero page register [ zp[2]:58 [ renderBob::y_offset#0 ] ] with [ zp[2]:60 [ renderBob::$4 ] ] - score: 1 +Coalescing zero page register [ zp[1]:65 [ renderBob::$7 ] ] with [ zp[1]:67 [ renderBob::bob_table_idx#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:52 [ renderBob::$2 renderBob::$11 ] ] with [ zp[2]:58 [ renderBob::y_offset#0 renderBob::$4 ] ] - score: 1 +Coalescing zero page register [ zp[2]:52 [ renderBob::$2 renderBob::$11 renderBob::y_offset#0 renderBob::$4 ] ] with [ zp[2]:62 [ renderBob::screen#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:12 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] ] with [ zp[1]:2 [ main::x#4 main::x#1 ] ] +Coalescing zero page register [ zp[1]:13 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] ] with [ zp[1]:4 [ main::sin_x_idx#9 main::sin_x_idx#1 ] ] +Coalescing zero page register [ zp[1]:14 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] ] with [ zp[1]:6 [ renderBob::xpos#6 renderBob::xpos#0 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#3 renderBob::xpos#4 renderBob::xpos#5 ] ] +Coalescing zero page register [ zp[2]:16 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ] with [ zp[2]:8 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] +Coalescing zero page register [ zp[1]:29 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] ] with [ zp[1]:15 [ prepareBobs::cell#2 prepareBobs::cell#1 ] ] +Coalescing zero page register [ zp[1]:32 [ shiftProtoBobRight::carry#1 ] ] with [ zp[1]:23 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] ] +Coalescing zero page register [ zp[1]:50 [ renderBob::x_char_offset#0 ] ] with [ zp[1]:20 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] ] +Coalescing zero page register [ zp[2]:52 [ renderBob::$2 renderBob::$11 renderBob::y_offset#0 renderBob::$4 renderBob::screen#0 ] ] with [ zp[2]:18 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] ] +Coalescing zero page register [ zp[2]:54 [ renderBob::$10 ] ] with [ zp[2]:24 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] ] +Coalescing zero page register [ zp[1]:65 [ renderBob::$7 renderBob::bob_table_idx#0 ] ] with [ zp[1]:27 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] ] +Coalescing zero page register [ zp[2]:68 [ memset::end#0 ] ] with [ zp[2]:52 [ renderBob::$2 renderBob::$11 renderBob::y_offset#0 renderBob::$4 renderBob::screen#0 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] ] +Allocated (was zp[1]:12) zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::x#4 main::x#1 ] +Allocated (was zp[1]:13) zp[1]:3 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 main::sin_x_idx#9 main::sin_x_idx#1 ] +Allocated (was zp[1]:14) zp[1]:4 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 renderBob::xpos#6 renderBob::xpos#0 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#3 renderBob::xpos#4 renderBob::xpos#5 ] +Allocated (was zp[2]:16) zp[2]:5 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] +Allocated (was zp[1]:29) zp[1]:7 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] +Allocated (was zp[1]:32) zp[1]:8 [ shiftProtoBobRight::carry#1 bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +Allocated (was zp[1]:50) zp[1]:9 [ renderBob::x_char_offset#0 bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] +Allocated (was zp[2]:54) zp[2]:10 [ renderBob::$10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] +Allocated (was zp[1]:65) zp[1]:12 [ renderBob::$7 renderBob::bob_table_idx#0 bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +Allocated (was zp[2]:68) zp[2]:13 [ memset::end#0 renderBob::$2 renderBob::$11 renderBob::y_offset#0 renderBob::$4 renderBob::screen#0 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -3534,14 +4870,23 @@ ASSEMBLER BEFORE OPTIMIZATION .label RASTER = $d012 .label BORDERCOL = $d020 .label D018 = $d018 + // CIA#1 Port A: keyboard matrix columns and joystick #2 + .label CIA1_PORT_A = $dc00 + // CIA#1 Port B: keyboard matrix rows and joystick #1. + .label CIA1_PORT_B = $dc01 // CIA#2 Port A: Serial bus, RS-232, VIC memory bank .label CIA2_PORT_A = $dd00 // CIA #2 Port A data direction register. .label CIA2_PORT_A_DDR = $dd02 + .const KEY_SPACE = $3c + // The BASIC screen + .label SCREEN_BASIC = $400 + // The BASIC charset + .label CHARSET_BASIC = $1000 // The screen - .label SCREEN = $4000 + .label BOB_SCREEN = $4800 // The charset that will receive the shifted bobs - .label BOB_CHARSET = $6000 + .label BOB_CHARSET = $4000 // The number of different X-shifts .const BOB_SHIFTS_X = 4 // The number of different Y-shifts @@ -3549,7 +4894,7 @@ ASSEMBLER BEFORE OPTIMIZATION // The size of a sub-table of BOB_TABLES .const BOB_SUBTABLE_SIZE = BOB_SHIFTS_X*BOB_SHIFTS_Y // BOB charset ID of the next glyph to be added - .label bob_charset_next_id = $e + .label bob_charset_next_id = 9 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -3568,33 +4913,15 @@ __bend_from___b1: __bend: // main main: { - .const vicSelectGfxBank1_toDd001_return = 3^(>SCREEN)/$40 - .const toD0181_return = (>BOB_CHARSET)/4&$f - /* - // Display some BOBs - char* screen = SCREEN; - char bob_table_idx = 0; - for(char i:0..7) { - for(char j:0..3) { - screen[0] = (BOB_TABLES+0*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[40] = (BOB_TABLES+1*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[80] = (BOB_TABLES+2*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[1] = (BOB_TABLES+3*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[41] = (BOB_TABLES+4*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[81] = (BOB_TABLES+5*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[2] = (BOB_TABLES+6*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[42] = (BOB_TABLES+7*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[82] = (BOB_TABLES+8*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen += 120; - bob_table_idx++; - } - screen -= (120*4)-3; - } - */ - .label sin_x_idx = 2 - .label sin_y_idx = 3 + .const vicSelectGfxBank1_toDd001_return = 3^(>BOB_SCREEN)/$40 + .const vicSelectGfxBank2_toDd001_return = 3 + .const toD0181_return = >(BOB_SCREEN&$3fff)*4 + .const toD0182_return = (>(SCREEN_BASIC&$3fff)*4)|(>CHARSET_BASIC)/4&$f + .label x = 2 + // Render sine BOBs + .label sin_x_idx = 3 // [5] call prepareBobs - // [56] phi from main to prepareBobs [phi:main->prepareBobs] + // [110] phi from main to prepareBobs [phi:main->prepareBobs] prepareBobs_from_main: jsr prepareBobs jmp vicSelectGfxBank1 @@ -3619,128 +4946,374 @@ main: { jmp toD0181 // main::toD0181 toD0181: - jmp __b4 - // main::@4 - __b4: + jmp __b10 + // main::@10 + __b10: // [10] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 // [11] call memset - // [50] phi from main::@4 to memset [phi:main::@4->memset] - memset_from___b4: + // [102] phi from main::@10 to memset [phi:main::@10->memset] + memset_from___b10: + // [102] phi (void*) memset::str#3 = (void*)(const byte*) BOB_SCREEN [phi:main::@10->memset#0] -- pvoz1=pvoc1 + lda #BOB_SCREEN + sta.z memset.str+1 jsr memset - // [12] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - __b1_from___b4: - // [12] phi (byte) main::sin_y_idx#7 = (byte) $49 [phi:main::@4->main::@1#0] -- vbuz1=vbuc1 - lda #$49 - sta.z sin_y_idx - // [12] phi (byte) main::sin_x_idx#7 = (byte) 0 [phi:main::@4->main::@1#1] -- vbuz1=vbuc1 + // [12] phi from main::@10 to main::@1 [phi:main::@10->main::@1] + __b1_from___b10: + // [12] phi (byte) main::x#4 = (byte) 0 [phi:main::@10->main::@1#0] -- vbuz1=vbuc1 lda #0 - sta.z sin_x_idx + sta.z x + jmp __b1 + // Display a BOB grid + // [12] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + __b1_from___b3: + // [12] phi (byte) main::x#4 = (byte) main::x#1 [phi:main::@3->main::@1#0] -- register_copy jmp __b1 // main::@1 __b1: + // [13] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + __b2_from___b1: + // [13] phi (byte) main::y#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 + ldx #0 + jmp __b2 + // [13] phi from main::@12 to main::@2 [phi:main::@12->main::@2] + __b2_from___b12: + // [13] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@12->main::@2#0] -- register_copy jmp __b2 // main::@2 __b2: - // [13] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 - lda #$ff - cmp RASTER - bne __b2 + // [14] (byte~) main::$30 ← (byte) main::x#4 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z x + asl + // [15] (byte~) main::$31 ← (byte~) main::$30 + (byte) main::x#4 -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z x + // [16] (byte~) main::$7 ← (byte~) main::$31 << (byte) 2 -- vbuaa=vbuaa_rol_2 + asl + asl + // [17] (byte) renderBob::xpos#0 ← (byte~) main::$7 + (byte) main::y#2 -- vbuz1=vbuaa_plus_vbuxx + stx.z $ff + clc + adc.z $ff + sta.z renderBob.xpos + // [18] (byte~) main::$33 ← (byte) main::y#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + txa + asl + // [19] (byte~) main::$34 ← (byte~) main::$33 + (byte) main::y#2 -- vbuaa=vbuaa_plus_vbuxx + stx.z $ff + clc + adc.z $ff + // [20] (byte~) main::$9 ← (byte~) main::$34 << (byte) 3 -- vbuaa=vbuaa_rol_3 + asl + asl + asl + // [21] (byte) renderBob::ypos#0 ← (byte~) main::$9 + (byte) main::x#4 -- vbuyy=vbuaa_plus_vbuz1 + clc + adc.z x + tay + // [22] call renderBob + // [79] phi from main::@2 to renderBob [phi:main::@2->renderBob] + renderBob_from___b2: + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#0 [phi:main::@2->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#0 [phi:main::@2->renderBob#1] -- register_copy + jsr renderBob + jmp __b12 + // main::@12 + __b12: + // [23] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuxx=_inc_vbuxx + inx + // [24] if((byte) main::y#1!=(byte) 4) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 + cpx #4 + bne __b2_from___b12 jmp __b3 // main::@3 __b3: - // [14] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 - inc BORDERCOL - // [15] (byte) renderBob::xpos#0 ← *((const byte*) SIN_X_TAB + (byte) main::sin_x_idx#7) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z sin_x_idx - lda SIN_X_TAB,y - sta.z renderBob.xpos - // [16] (byte) renderBob::ypos#0 ← *((const byte*) SIN_Y_TAB + (byte) main::sin_y_idx#7) -- vbuxx=pbuc1_derefidx_vbuz1 - ldy.z sin_y_idx - ldx SIN_Y_TAB,y - // [17] call renderBob - // [27] phi from main::@3 to renderBob [phi:main::@3->renderBob] - renderBob_from___b3: - // [27] phi (byte) renderBob::ypos#3 = (byte) renderBob::ypos#0 [phi:main::@3->renderBob#0] -- register_copy - // [27] phi (byte) renderBob::xpos#3 = (byte) renderBob::xpos#0 [phi:main::@3->renderBob#1] -- register_copy - jsr renderBob + // [25] (byte) main::x#1 ← ++ (byte) main::x#4 -- vbuz1=_inc_vbuz1 + inc.z x + // [26] if((byte) main::x#1!=(byte) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #8 + cmp.z x + bne __b1_from___b3 + // [27] phi from main::@13 main::@3 to main::@4 [phi:main::@13/main::@3->main::@4] + __b4_from___b13: + __b4_from___b3: + jmp __b4 + // Wait for space + // main::@4 + __b4: + // [28] call keyboard_key_pressed + // [70] phi from main::@4 to keyboard_key_pressed [phi:main::@4->keyboard_key_pressed] + keyboard_key_pressed_from___b4: + jsr keyboard_key_pressed + // [29] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + jmp __b13 + // main::@13 + __b13: + // [30] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 + // [31] if((byte) 0==(byte~) main::$14) goto main::@4 -- vbuc1_eq_vbuaa_then_la1 + cmp #0 + beq __b4_from___b13 + // [32] phi from main::@13 main::@14 to main::@5 [phi:main::@13/main::@14->main::@5] + __b5_from___b13: + __b5_from___b14: jmp __b5 // main::@5 __b5: - // [18] (byte) renderBob::xpos#1 ← *((const byte*) SIN_X_TAB+(byte) $f + (byte) main::sin_x_idx#7) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z sin_x_idx - lda SIN_X_TAB+$f,y - sta.z renderBob.xpos - // [19] (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB+(byte) $b + (byte) main::sin_y_idx#7) -- vbuxx=pbuc1_derefidx_vbuz1 - ldy.z sin_y_idx - ldx SIN_Y_TAB+$b,y - // [20] call renderBob - // [27] phi from main::@5 to renderBob [phi:main::@5->renderBob] - renderBob_from___b5: - // [27] phi (byte) renderBob::ypos#3 = (byte) renderBob::ypos#1 [phi:main::@5->renderBob#0] -- register_copy - // [27] phi (byte) renderBob::xpos#3 = (byte) renderBob::xpos#1 [phi:main::@5->renderBob#1] -- register_copy - jsr renderBob + // [33] call keyboard_key_pressed + // [70] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] + keyboard_key_pressed_from___b5: + jsr keyboard_key_pressed + // [34] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 + jmp __b14 + // main::@14 + __b14: + // [35] (byte~) main::$16 ← (byte) keyboard_key_pressed::return#3 + // [36] if((byte) 0!=(byte~) main::$16) goto main::@5 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne __b5_from___b14 + // [37] phi from main::@14 to main::@6 [phi:main::@14->main::@6] + __b6_from___b14: jmp __b6 // main::@6 __b6: - // [21] (byte) renderBob::xpos#2 ← *((const byte*) SIN_X_TAB+(byte) $16 + (byte) main::sin_x_idx#7) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z sin_x_idx - lda SIN_X_TAB+$16,y - sta.z renderBob.xpos - // [22] (byte) renderBob::ypos#2 ← *((const byte*) SIN_Y_TAB+(byte) $1e + (byte) main::sin_y_idx#7) -- vbuxx=pbuc1_derefidx_vbuz1 - ldy.z sin_y_idx - ldx SIN_Y_TAB+$1e,y - // [23] call renderBob - // [27] phi from main::@6 to renderBob [phi:main::@6->renderBob] - renderBob_from___b6: - // [27] phi (byte) renderBob::ypos#3 = (byte) renderBob::ypos#2 [phi:main::@6->renderBob#0] -- register_copy - // [27] phi (byte) renderBob::xpos#3 = (byte) renderBob::xpos#2 [phi:main::@6->renderBob#1] -- register_copy - jsr renderBob + // [38] call memset + // [102] phi from main::@6 to memset [phi:main::@6->memset] + memset_from___b6: + // [102] phi (void*) memset::str#3 = (void*)(const byte*) BOB_SCREEN [phi:main::@6->memset#0] -- pvoz1=pvoc1 + lda #BOB_SCREEN + sta.z memset.str+1 + jsr memset + // [39] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + __b7_from___b6: + // [39] phi (byte) main::sin_y_idx#9 = (byte) $49 [phi:main::@6->main::@7#0] -- vbuxx=vbuc1 + ldx #$49 + // [39] phi (byte) main::sin_x_idx#9 = (byte) 0 [phi:main::@6->main::@7#1] -- vbuz1=vbuc1 + lda #0 + sta.z sin_x_idx jmp __b7 // main::@7 __b7: - // [24] (byte) main::sin_x_idx#1 ← ++ (byte) main::sin_x_idx#7 -- vbuz1=_inc_vbuz1 + jmp __b8 + // main::@8 + __b8: + // [40] if(*((const byte*) RASTER)<(byte) $f8) goto main::@8 -- _deref_pbuc1_lt_vbuc2_then_la1 + lda RASTER + cmp #$f8 + bcc __b8 + jmp __b9 + // main::@9 + __b9: + // [41] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + // [42] (byte) renderBob::xpos#1 ← *((const byte*) SIN_X_TAB+(byte)(number) $15*(number) 4 + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_x_idx + lda SIN_X_TAB+$15*4,y + sta.z renderBob.xpos + // [43] (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB + (byte) main::sin_y_idx#9) -- vbuyy=pbuc1_derefidx_vbuxx + ldy SIN_Y_TAB,x + // [44] call renderBob + // [79] phi from main::@9 to renderBob [phi:main::@9->renderBob] + renderBob_from___b9: + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#1 [phi:main::@9->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#1 [phi:main::@9->renderBob#1] -- register_copy + jsr renderBob + jmp __b15 + // main::@15 + __b15: + // [45] (byte) renderBob::xpos#2 ← *((const byte*) SIN_X_TAB+(byte)(number) $13*(number) 3 + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_x_idx + lda SIN_X_TAB+$13*3,y + sta.z renderBob.xpos + // [46] (byte) renderBob::ypos#2 ← *((const byte*) SIN_Y_TAB+(byte)(number) $f*(number) 1 + (byte) main::sin_y_idx#9) -- vbuyy=pbuc1_derefidx_vbuxx + ldy SIN_Y_TAB+$f*1,x + // [47] call renderBob + // [79] phi from main::@15 to renderBob [phi:main::@15->renderBob] + renderBob_from___b15: + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#2 [phi:main::@15->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#2 [phi:main::@15->renderBob#1] -- register_copy + jsr renderBob + jmp __b16 + // main::@16 + __b16: + // [48] (byte) renderBob::xpos#3 ← *((const byte*) SIN_X_TAB+(byte)(number) $11*(number) 2 + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_x_idx + lda SIN_X_TAB+$11*2,y + sta.z renderBob.xpos + // [49] (byte) renderBob::ypos#3 ← *((const byte*) SIN_Y_TAB+(byte)(number) $11*(number) 2 + (byte) main::sin_y_idx#9) -- vbuyy=pbuc1_derefidx_vbuxx + ldy SIN_Y_TAB+$11*2,x + // [50] call renderBob + // [79] phi from main::@16 to renderBob [phi:main::@16->renderBob] + renderBob_from___b16: + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#3 [phi:main::@16->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#3 [phi:main::@16->renderBob#1] -- register_copy + jsr renderBob + jmp __b17 + // main::@17 + __b17: + // [51] (byte) renderBob::xpos#4 ← *((const byte*) SIN_X_TAB+(byte)(number) $f*(number) 1 + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_x_idx + lda SIN_X_TAB+$f*1,y + sta.z renderBob.xpos + // [52] (byte) renderBob::ypos#4 ← *((const byte*) SIN_Y_TAB+(byte)(number) $13*(number) 3 + (byte) main::sin_y_idx#9) -- vbuyy=pbuc1_derefidx_vbuxx + ldy SIN_Y_TAB+$13*3,x + // [53] call renderBob + // [79] phi from main::@17 to renderBob [phi:main::@17->renderBob] + renderBob_from___b17: + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#4 [phi:main::@17->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#4 [phi:main::@17->renderBob#1] -- register_copy + jsr renderBob + jmp __b18 + // main::@18 + __b18: + // [54] (byte) renderBob::xpos#5 ← *((const byte*) SIN_X_TAB + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_x_idx + lda SIN_X_TAB,y + sta.z renderBob.xpos + // [55] (byte) renderBob::ypos#5 ← *((const byte*) SIN_Y_TAB+(byte)(number) $15*(number) 4 + (byte) main::sin_y_idx#9) -- vbuyy=pbuc1_derefidx_vbuxx + ldy SIN_Y_TAB+$15*4,x + // [56] call renderBob + // [79] phi from main::@18 to renderBob [phi:main::@18->renderBob] + renderBob_from___b18: + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#5 [phi:main::@18->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#5 [phi:main::@18->renderBob#1] -- register_copy + jsr renderBob + jmp __b19 + // main::@19 + __b19: + // [57] (byte) main::sin_x_idx#1 ← ++ (byte) main::sin_x_idx#9 -- vbuz1=_inc_vbuz1 inc.z sin_x_idx - // [25] (byte) main::sin_y_idx#1 ← ++ (byte) main::sin_y_idx#7 -- vbuz1=_inc_vbuz1 - inc.z sin_y_idx - // [26] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 + // [58] (byte) main::sin_y_idx#1 ← ++ (byte) main::sin_y_idx#9 -- vbuxx=_inc_vbuxx + inx + // [59] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [12] phi from main::@7 to main::@1 [phi:main::@7->main::@1] - __b1_from___b7: - // [12] phi (byte) main::sin_y_idx#7 = (byte) main::sin_y_idx#1 [phi:main::@7->main::@1#0] -- register_copy - // [12] phi (byte) main::sin_x_idx#7 = (byte) main::sin_x_idx#1 [phi:main::@7->main::@1#1] -- register_copy + // [60] call keyboard_key_pressed + // [70] phi from main::@19 to keyboard_key_pressed [phi:main::@19->keyboard_key_pressed] + keyboard_key_pressed_from___b19: + jsr keyboard_key_pressed + // [61] (byte) keyboard_key_pressed::return#4 ← (byte) keyboard_key_pressed::return#0 + jmp __b20 + // main::@20 + __b20: + // [62] (byte~) main::$25 ← (byte) keyboard_key_pressed::return#4 + // [63] if((byte) 0!=(byte~) main::$25) goto main::vicSelectGfxBank2 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne vicSelectGfxBank2 + // [39] phi from main::@20 to main::@7 [phi:main::@20->main::@7] + __b7_from___b20: + // [39] phi (byte) main::sin_y_idx#9 = (byte) main::sin_y_idx#1 [phi:main::@20->main::@7#0] -- register_copy + // [39] phi (byte) main::sin_x_idx#9 = (byte) main::sin_x_idx#1 [phi:main::@20->main::@7#1] -- register_copy + jmp __b7 + // main::vicSelectGfxBank2 + vicSelectGfxBank2: + // [64] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + lda #3 + sta CIA2_PORT_A_DDR + // [65] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001] + vicSelectGfxBank2_toDd001_from_vicSelectGfxBank2: + jmp vicSelectGfxBank2_toDd001 + // main::vicSelectGfxBank2_toDd001 + vicSelectGfxBank2_toDd001: + jmp vicSelectGfxBank2___b1 + // main::vicSelectGfxBank2_@1 + vicSelectGfxBank2___b1: + // [66] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 + lda #vicSelectGfxBank2_toDd001_return + sta CIA2_PORT_A + // [67] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] + toD0182_from_vicSelectGfxBank2___b1: + jmp toD0182 + // main::toD0182 + toD0182: + jmp __b11 + // main::@11 + __b11: + // [68] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 + lda #toD0182_return + sta D018 + jmp __breturn + // main::@return + __breturn: + // [69] return + rts +} + // keyboard_key_pressed +// Determines whether a specific key is currently pressed by accessing the matrix directly +// 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 +keyboard_key_pressed: { + .const colidx = KEY_SPACE&7 + .label rowidx = KEY_SPACE>>3 + // [71] call keyboard_matrix_read + jsr keyboard_matrix_read + // [72] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 jmp __b1 + // keyboard_key_pressed::@1 + __b1: + // [73] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 + // [74] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask+(const byte) keyboard_key_pressed::colidx#0) -- vbuaa=vbuaa_band__deref_pbuc1 + and keyboard_matrix_col_bitmask+colidx + jmp __breturn + // keyboard_key_pressed::@return + __breturn: + // [75] return + rts +} + // keyboard_matrix_read +// 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. +// Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write +// leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. +keyboard_matrix_read: { + // [76] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx + sta CIA1_PORT_A + // [77] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1_PORT_B + eor #$ff + jmp __breturn + // keyboard_matrix_read::@return + __breturn: + // [78] return + rts } // renderBob // Render a single BOB at a given x/y-position // X-position is 0-151. Each x-position is 2 pixels wide. // Y-position is 0-183. Each y-position is 1 pixel high. -// renderBob(byte zeropage(4) xpos, byte register(X) ypos) +// renderBob(byte zeropage(4) xpos, byte register(Y) ypos) renderBob: { - .label __2 = $a - .label __4 = $a - .label __7 = $e + .label __2 = $d + .label __4 = $d + .label __7 = $c .label xpos = 4 - .label y_offset = $a - .label screen = $a - .label __10 = $c - .label __11 = $a - // [28] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#3 >> (byte) 2 -- vbuyy=vbuz1_ror_2 + .label x_char_offset = 9 + .label y_offset = $d + .label screen = $d + .label bob_table_idx = $c + .label __10 = $a + .label __11 = $d + // [80] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#6 >> (byte) 2 -- vbuz1=vbuz2_ror_2 lda.z xpos lsr lsr - tay - // [29] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#3 >> (byte) 3 -- vbuaa=vbuxx_ror_3 - txa + sta.z x_char_offset + // [81] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#6 >> (byte) 3 -- vbuaa=vbuyy_ror_3 + tya lsr lsr lsr - // [30] (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 -- vwuz1=_word_vbuaa + // [82] (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 -- vwuz1=_word_vbuaa sta.z __2 lda #0 sta.z __2+1 - // [31] (word~) renderBob::$10 ← (word~) renderBob::$2 << (byte) 2 -- vwuz1=vwuz2_rol_2 + // [83] (word~) renderBob::$10 ← (word~) renderBob::$2 << (byte) 2 -- vwuz1=vwuz2_rol_2 lda.z __2 asl sta.z __10 @@ -3749,7 +5322,7 @@ renderBob: { sta.z __10+1 asl.z __10 rol.z __10+1 - // [32] (word~) renderBob::$11 ← (word~) renderBob::$10 + (word~) renderBob::$2 -- vwuz1=vwuz2_plus_vwuz1 + // [84] (word~) renderBob::$11 ← (word~) renderBob::$10 + (word~) renderBob::$2 -- vwuz1=vwuz2_plus_vwuz1 lda.z __11 clc adc.z __10 @@ -3757,212 +5330,226 @@ renderBob: { lda.z __11+1 adc.z __10+1 sta.z __11+1 - // [33] (word) renderBob::y_offset#0 ← (word~) renderBob::$11 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [85] (word) renderBob::y_offset#0 ← (word~) renderBob::$11 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z y_offset rol.z y_offset+1 asl.z y_offset rol.z y_offset+1 asl.z y_offset rol.z y_offset+1 - // [34] (byte*~) renderBob::$4 ← (const byte*) SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz1 + // [86] (byte*~) renderBob::$4 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __4 - adc #SCREEN + adc #>BOB_SCREEN sta.z __4+1 - // [35] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz1_plus_vbuyy - tya + // [87] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz1_plus_vbuz2 + lda.z x_char_offset clc adc.z screen sta.z screen bcc !+ inc.z screen+1 !: - // [36] (byte~) renderBob::$6 ← (byte) renderBob::ypos#3 & (byte) 7 -- vbuaa=vbuxx_band_vbuc1 - txa + // [88] (byte~) renderBob::$6 ← (byte) renderBob::ypos#6 & (byte) 7 -- vbuaa=vbuyy_band_vbuc1 + tya and #7 - // [37] (byte~) renderBob::$7 ← (byte~) renderBob::$6 << (byte) 2 -- vbuz1=vbuaa_rol_2 + // [89] (byte~) renderBob::$7 ← (byte~) renderBob::$6 << (byte) 2 -- vbuz1=vbuaa_rol_2 asl asl sta.z __7 - // [38] (byte~) renderBob::$8 ← (byte) renderBob::xpos#3 & (byte) 3 -- vbuaa=vbuz1_band_vbuc1 + // [90] (byte~) renderBob::$8 ← (byte) renderBob::xpos#6 & (byte) 3 -- vbuaa=vbuz1_band_vbuc1 lda #3 and.z xpos - // [39] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 -- vbuxx=vbuz1_plus_vbuaa + // [91] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 -- vbuz1=vbuz1_plus_vbuaa clc - adc.z __7 - tax - // [40] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -- _deref_pbuz1=pbuc1_derefidx_vbuxx - lda BOB_TABLES,x + adc.z bob_table_idx + sta.z bob_table_idx + // [92] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES,y ldy #0 sta (screen),y - // [41] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+1*BOB_SUBTABLE_SIZE,x + // [93] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+1*BOB_SUBTABLE_SIZE,y ldy #$28 sta (screen),y - // [42] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+2*BOB_SUBTABLE_SIZE,x + // [94] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+2*BOB_SUBTABLE_SIZE,y ldy #$50 sta (screen),y - // [43] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+3*BOB_SUBTABLE_SIZE,x + // [95] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+3*BOB_SUBTABLE_SIZE,y ldy #1 sta (screen),y - // [44] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+4*BOB_SUBTABLE_SIZE,x + // [96] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+4*BOB_SUBTABLE_SIZE,y ldy #$29 sta (screen),y - // [45] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+5*BOB_SUBTABLE_SIZE,x + // [97] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+5*BOB_SUBTABLE_SIZE,y ldy #$51 sta (screen),y - // [46] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+6*BOB_SUBTABLE_SIZE,x + // [98] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+6*BOB_SUBTABLE_SIZE,y ldy #2 sta (screen),y - // [47] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+7*BOB_SUBTABLE_SIZE,x + // [99] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+7*BOB_SUBTABLE_SIZE,y ldy #$2a sta (screen),y - // [48] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+8*BOB_SUBTABLE_SIZE,x + // [100] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+8*BOB_SUBTABLE_SIZE,y ldy #$52 sta (screen),y jmp __breturn // renderBob::@return __breturn: - // [49] return + // [101] return rts } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +// memset(void* zeropage(5) str) memset: { - .label str = SCREEN - .const c = 0 - .const num = $3e8 - .label end = str+num + .label end = $d .label dst = 5 - // [51] phi from memset to memset::@1 [phi:memset->memset::@1] - __b1_from_memset: - // [51] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 - lda #str - sta.z dst+1 + .label str = 5 jmp __b1 // memset::@1 __b1: - // [52] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [103] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 -- pbuz1=pbuz2_plus_vwuc1 + lda.z str + clc + adc #<$3e8 + sta.z end + lda.z str+1 + adc #>$3e8 + sta.z end+1 + // [104] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [105] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + __b2_from___b1: + __b2_from___b3: + // [105] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + jmp __b2 + // memset::@2 + __b2: + // [106] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 - cmp #>end - bne __b2 + cmp.z end+1 + bne __b3 lda.z dst - cmp #memset::@1] - __b1_from___b2: - // [51] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp __b1 + jmp __b2_from___b3 } // prepareBobs // Creates the pre-shifted bobs into BOB_CHARSET and populates the BOB_TABLES // Modifies PROTO_BOB by shifting it around prepareBobs: { - .label bob_table = $a + .label bob_table = $d .label shift_y = 2 // Populate charset and tables .label bob_glyph = 5 - .label cell = 8 + .label cell = 7 .label bob_table_idx = 3 .label shift_x = 4 - // [57] call bobCharsetFindOrAddGlyph - // [82] phi from prepareBobs to bobCharsetFindOrAddGlyph [phi:prepareBobs->bobCharsetFindOrAddGlyph] + // [111] call bobCharsetFindOrAddGlyph + // [136] phi from prepareBobs to bobCharsetFindOrAddGlyph [phi:prepareBobs->bobCharsetFindOrAddGlyph] bobCharsetFindOrAddGlyph_from_prepareBobs: - // [82] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs->bobCharsetFindOrAddGlyph#0] -- pbuz1=pbuc1 + // [136] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs->bobCharsetFindOrAddGlyph#0] -- pbuz1=pbuc1 lda #PROTO_BOB+$30 sta.z bobCharsetFindOrAddGlyph.bob_glyph+1 - // [82] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs->bobCharsetFindOrAddGlyph#1] -- vbuz1=vbuc1 + // [136] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs->bobCharsetFindOrAddGlyph#1] -- vbuz1=vbuc1 lda #0 sta.z bob_charset_next_id jsr bobCharsetFindOrAddGlyph - // [58] phi from prepareBobs to prepareBobs::@1 [phi:prepareBobs->prepareBobs::@1] + // [112] phi from prepareBobs to prepareBobs::@1 [phi:prepareBobs->prepareBobs::@1] __b1_from_prepareBobs: - // [58] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs->prepareBobs::@1#0] -- vbuz1=vbuc1 + // [112] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs->prepareBobs::@1#0] -- vbuz1=vbuc1 lda #0 sta.z bob_table_idx - // [58] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs->prepareBobs::@1#1] -- register_copy - // [58] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs->prepareBobs::@1#2] -- vbuz1=vbuc1 + // [112] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs->prepareBobs::@1#1] -- register_copy + // [112] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs->prepareBobs::@1#2] -- vbuz1=vbuc1 lda #0 sta.z shift_y jmp __b1 // prepareBobs::@1 __b1: - // [59] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 -- vbuz1_lt_vbuc1_then_la1 + // [113] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z shift_y cmp #BOB_SHIFTS_Y bcc __b2_from___b1 jmp __breturn // prepareBobs::@return __breturn: - // [60] return + // [114] return rts - // [61] phi from prepareBobs::@1 to prepareBobs::@2 [phi:prepareBobs::@1->prepareBobs::@2] + // [115] phi from prepareBobs::@1 to prepareBobs::@2 [phi:prepareBobs::@1->prepareBobs::@2] __b2_from___b1: - // [61] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy - // [61] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy - // [61] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#2] -- vbuz1=vbuc1 + // [115] phi (byte) bob_charset_next_id#29 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy + // [115] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy + // [115] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#2] -- vbuz1=vbuc1 lda #0 sta.z shift_x jmp __b2 // prepareBobs::@2 __b2: - // [62] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 -- vbuz1_lt_vbuc1_then_la1 + // [116] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z shift_x cmp #BOB_SHIFTS_X bcc __b3 - // [63] phi from prepareBobs::@2 to prepareBobs::@4 [phi:prepareBobs::@2->prepareBobs::@4] + // [117] phi from prepareBobs::@2 to prepareBobs::@4 [phi:prepareBobs::@2->prepareBobs::@4] __b4_from___b2: jmp __b4 // prepareBobs::@4 __b4: - // [64] call shiftProtoBobDown - // [117] phi from prepareBobs::@4 to shiftProtoBobDown [phi:prepareBobs::@4->shiftProtoBobDown] + // [118] call shiftProtoBobDown + // [171] phi from prepareBobs::@4 to shiftProtoBobDown [phi:prepareBobs::@4->shiftProtoBobDown] shiftProtoBobDown_from___b4: jsr shiftProtoBobDown jmp __b8 // prepareBobs::@8 __b8: - // [65] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 -- vbuz1=_inc_vbuz1 + // [119] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 -- vbuz1=_inc_vbuz1 inc.z shift_y - // [58] phi from prepareBobs::@8 to prepareBobs::@1 [phi:prepareBobs::@8->prepareBobs::@1] + // [112] phi from prepareBobs::@8 to prepareBobs::@1 [phi:prepareBobs::@8->prepareBobs::@1] __b1_from___b8: - // [58] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@8->prepareBobs::@1#0] -- register_copy - // [58] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy - // [58] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@8->prepareBobs::@1#2] -- register_copy + // [112] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@8->prepareBobs::@1#0] -- register_copy + // [112] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#29 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy + // [112] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@8->prepareBobs::@1#2] -- register_copy jmp __b1 // prepareBobs::@3 __b3: - // [66] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 -- pbuz1=pbuc1_plus_vbuz2 + // [120] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 -- pbuz1=pbuc1_plus_vbuz2 lda.z bob_table_idx clc adc #BOB_TABLES adc #0 sta.z bob_table+1 - // [67] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5] + // [121] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5] __b5_from___b3: - // [67] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy - // [67] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy - // [67] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#2] -- pbuz1=pbuc1 + // [121] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy + // [121] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#29 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy + // [121] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#2] -- pbuz1=pbuc1 lda #PROTO_BOB sta.z bob_glyph+1 - // [67] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#3] -- vbuz1=vbuc1 + // [121] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#3] -- vbuz1=vbuc1 lda #0 sta.z cell jmp __b5 // prepareBobs::@5 __b5: - // [68] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 -- vbuz1_lt_vbuc1_then_la1 + // [122] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 -- vbuz1_lt_vbuc1_then_la1 lda.z cell cmp #9 bcc __b6 jmp __b7 // prepareBobs::@7 __b7: - // [69] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 + // [123] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 inc.z bob_table_idx - // [70] call shiftProtoBobRight - // [100] phi from prepareBobs::@7 to shiftProtoBobRight [phi:prepareBobs::@7->shiftProtoBobRight] + // [124] call shiftProtoBobRight + // [154] phi from prepareBobs::@7 to shiftProtoBobRight [phi:prepareBobs::@7->shiftProtoBobRight] shiftProtoBobRight_from___b7: jsr shiftProtoBobRight - // [71] phi from prepareBobs::@7 to prepareBobs::@10 [phi:prepareBobs::@7->prepareBobs::@10] + // [125] phi from prepareBobs::@7 to prepareBobs::@10 [phi:prepareBobs::@7->prepareBobs::@10] __b10_from___b7: jmp __b10 // prepareBobs::@10 __b10: - // [72] call shiftProtoBobRight - // [100] phi from prepareBobs::@10 to shiftProtoBobRight [phi:prepareBobs::@10->shiftProtoBobRight] + // [126] call shiftProtoBobRight + // [154] phi from prepareBobs::@10 to shiftProtoBobRight [phi:prepareBobs::@10->shiftProtoBobRight] shiftProtoBobRight_from___b10: jsr shiftProtoBobRight jmp __b11 // prepareBobs::@11 __b11: - // [73] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 -- vbuz1=_inc_vbuz1 + // [127] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 -- vbuz1=_inc_vbuz1 inc.z shift_x - // [61] phi from prepareBobs::@11 to prepareBobs::@2 [phi:prepareBobs::@11->prepareBobs::@2] + // [115] phi from prepareBobs::@11 to prepareBobs::@2 [phi:prepareBobs::@11->prepareBobs::@2] __b2_from___b11: - // [61] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@11->prepareBobs::@2#0] -- register_copy - // [61] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@11->prepareBobs::@2#1] -- register_copy - // [61] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@11->prepareBobs::@2#2] -- register_copy + // [115] phi (byte) bob_charset_next_id#29 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@11->prepareBobs::@2#0] -- register_copy + // [115] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@11->prepareBobs::@2#1] -- register_copy + // [115] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@11->prepareBobs::@2#2] -- register_copy jmp __b2 // prepareBobs::@6 __b6: - // [74] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 - // [75] call bobCharsetFindOrAddGlyph - // [82] phi from prepareBobs::@6 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph] + // [128] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + // [129] call bobCharsetFindOrAddGlyph + // [136] phi from prepareBobs::@6 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph] bobCharsetFindOrAddGlyph_from___b6: - // [82] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#0] -- register_copy - // [82] phi (byte) bob_charset_next_id#23 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#1] -- register_copy + // [136] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#0] -- register_copy + // [136] phi (byte) bob_charset_next_id#23 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#1] -- register_copy jsr bobCharsetFindOrAddGlyph - // [76] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuaa=vbuz1 + // [130] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuaa=vbuz1 lda.z bobCharsetFindOrAddGlyph.glyph_id jmp __b9 // prepareBobs::@9 __b9: - // [77] (byte~) prepareBobs::$5 ← (byte) bobCharsetFindOrAddGlyph::return#1 - // [78] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$5 -- _deref_pbuz1=vbuaa + // [131] (byte~) prepareBobs::$5 ← (byte) bobCharsetFindOrAddGlyph::return#1 + // [132] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$5 -- _deref_pbuz1=vbuaa // Look for an existing char in BOB_CHARSET ldy #0 sta (bob_table),y - // [79] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [133] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 // Move to the next glyph lda #8 clc @@ -4046,7 +5633,7 @@ prepareBobs: { bcc !+ inc.z bob_glyph+1 !: - // [80] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y -- pbuz1=pbuz1_plus_vbuc1 + // [134] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y -- pbuz1=pbuz1_plus_vbuc1 // Move to the next sub-table lda #BOB_SHIFTS_X*BOB_SHIFTS_Y clc @@ -4055,14 +5642,14 @@ prepareBobs: { bcc !+ inc.z bob_table+1 !: - // [81] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 + // [135] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 inc.z cell - // [67] phi from prepareBobs::@9 to prepareBobs::@5 [phi:prepareBobs::@9->prepareBobs::@5] + // [121] phi from prepareBobs::@9 to prepareBobs::@5 [phi:prepareBobs::@9->prepareBobs::@5] __b5_from___b9: - // [67] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@9->prepareBobs::@5#0] -- register_copy - // [67] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@9->prepareBobs::@5#1] -- register_copy - // [67] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@9->prepareBobs::@5#2] -- register_copy - // [67] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@9->prepareBobs::@5#3] -- register_copy + // [121] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@9->prepareBobs::@5#0] -- register_copy + // [121] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@9->prepareBobs::@5#1] -- register_copy + // [121] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@9->prepareBobs::@5#2] -- register_copy + // [121] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@9->prepareBobs::@5#3] -- register_copy jmp __b5 } // bobCharsetFindOrAddGlyph @@ -4072,82 +5659,82 @@ prepareBobs: { // bobCharsetFindOrAddGlyph(byte* zeropage(5) bob_glyph) bobCharsetFindOrAddGlyph: { .label bob_glyph = 5 - .label i = 7 - .label glyph_id = 9 - .label glyph_cursor = $c - // [83] phi from bobCharsetFindOrAddGlyph to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1] + .label i = $c + .label glyph_id = 8 + .label glyph_cursor = $a + // [137] phi from bobCharsetFindOrAddGlyph to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1] __b1_from_bobCharsetFindOrAddGlyph: - // [83] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (const byte*) BOB_CHARSET [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#0] -- pbuz1=pbuc1 + // [137] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (const byte*) BOB_CHARSET [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#0] -- pbuz1=pbuc1 lda #BOB_CHARSET sta.z glyph_cursor+1 - // [83] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) 0 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#1] -- vbuz1=vbuc1 + // [137] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) 0 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#1] -- vbuz1=vbuc1 lda #0 sta.z glyph_id jmp __b1 // bobCharsetFindOrAddGlyph::@1 __b1: - // [84] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 -- vbuz1_neq_vbuz2_then_la1 + // [138] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 -- vbuz1_neq_vbuz2_then_la1 lda.z glyph_id cmp.z bob_charset_next_id bne __b2_from___b1 - // [85] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7] + // [139] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7] __b7_from___b1: - // [85] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7#0] -- vbuyy=vbuc1 + // [139] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7#0] -- vbuyy=vbuc1 ldy #0 jmp __b7 // Not found - add it // bobCharsetFindOrAddGlyph::@7 __b7: - // [86] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 -- vbuyy_lt_vbuc1_then_la1 + // [140] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 -- vbuyy_lt_vbuc1_then_la1 cpy #8 bcc __b8 jmp __b9 // bobCharsetFindOrAddGlyph::@9 __b9: - // [87] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 + // [141] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 inc.z bob_charset_next_id - // [88] phi from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 to bobCharsetFindOrAddGlyph::@return [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return] + // [142] phi from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 to bobCharsetFindOrAddGlyph::@return [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return] __breturn_from___b5: __breturn_from___b9: - // [88] phi (byte) bob_charset_next_id#16 = (byte) bob_charset_next_id#23 [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return#0] -- register_copy + // [142] phi (byte) bob_charset_next_id#16 = (byte) bob_charset_next_id#23 [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return#0] -- register_copy jmp __breturn // bobCharsetFindOrAddGlyph::@return __breturn: - // [89] return + // [143] return rts // bobCharsetFindOrAddGlyph::@8 __b8: - // [90] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) -- pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy + // [144] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) -- pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy lda (bob_glyph),y sta (glyph_cursor),y - // [91] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 -- vbuyy=_inc_vbuyy + // [145] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 -- vbuyy=_inc_vbuyy iny - // [85] phi from bobCharsetFindOrAddGlyph::@8 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7] + // [139] phi from bobCharsetFindOrAddGlyph::@8 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7] __b7_from___b8: - // [85] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) bobCharsetFindOrAddGlyph::i1#1 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7#0] -- register_copy + // [139] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) bobCharsetFindOrAddGlyph::i1#1 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7#0] -- register_copy jmp __b7 - // [92] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2] + // [146] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2] __b2_from___b1: - // [92] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2#0] -- vbuz1=vbuc1 + // [146] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2#0] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b2 // bobCharsetFindOrAddGlyph::@2 __b2: - // [93] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 -- vbuz1_lt_vbuc1_then_la1 + // [147] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #8 bcc __b3 - // [95] phi from bobCharsetFindOrAddGlyph::@2 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5] + // [149] phi from bobCharsetFindOrAddGlyph::@2 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5] __b5_from___b2: - // [95] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 1 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 + // [149] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 1 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 lda #1 jmp __b5 // bobCharsetFindOrAddGlyph::@3 __b3: - // [94] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 -- pbuz1_derefidx_vbuz2_eq_pbuz3_derefidx_vbuz2_then_la1 + // [148] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 -- pbuz1_derefidx_vbuz2_eq_pbuz3_derefidx_vbuz2_then_la1 ldy.z i lda (glyph_cursor),y tax @@ -4156,22 +5743,22 @@ bobCharsetFindOrAddGlyph: { sty.z $ff cpx.z $ff beq __b4 - // [95] phi from bobCharsetFindOrAddGlyph::@3 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5] + // [149] phi from bobCharsetFindOrAddGlyph::@3 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5] __b5_from___b3: - // [95] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 + // [149] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 lda #0 jmp __b5 // bobCharsetFindOrAddGlyph::@5 __b5: - // [96] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 -- vbuc1_eq_vbuaa_then_la1 + // [150] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 -- vbuc1_eq_vbuaa_then_la1 cmp #0 beq __b6 jmp __breturn_from___b5 // bobCharsetFindOrAddGlyph::@6 __b6: - // [97] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=_inc_vbuz1 + // [151] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=_inc_vbuz1 inc.z glyph_id - // [98] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [152] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z glyph_cursor @@ -4179,112 +5766,112 @@ bobCharsetFindOrAddGlyph: { bcc !+ inc.z glyph_cursor+1 !: - // [83] phi from bobCharsetFindOrAddGlyph::@6 to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1] + // [137] phi from bobCharsetFindOrAddGlyph::@6 to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1] __b1_from___b6: - // [83] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#0] -- register_copy - // [83] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) bobCharsetFindOrAddGlyph::glyph_id#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#1] -- register_copy + // [137] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#0] -- register_copy + // [137] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) bobCharsetFindOrAddGlyph::glyph_id#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#1] -- register_copy jmp __b1 // bobCharsetFindOrAddGlyph::@4 __b4: - // [99] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 -- vbuz1=_inc_vbuz1 + // [153] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [92] phi from bobCharsetFindOrAddGlyph::@4 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2] + // [146] phi from bobCharsetFindOrAddGlyph::@4 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2] __b2_from___b4: - // [92] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) bobCharsetFindOrAddGlyph::i#1 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2#0] -- register_copy + // [146] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) bobCharsetFindOrAddGlyph::i#1 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2#0] -- register_copy jmp __b2 } // shiftProtoBobRight // Shift PROTO_BOB right one X pixel shiftProtoBobRight: { - .label carry = 9 - .label i = 8 - // [101] phi from shiftProtoBobRight to shiftProtoBobRight::@1 [phi:shiftProtoBobRight->shiftProtoBobRight::@1] + .label carry = 8 + .label i = 7 + // [155] phi from shiftProtoBobRight to shiftProtoBobRight::@1 [phi:shiftProtoBobRight->shiftProtoBobRight::@1] __b1_from_shiftProtoBobRight: - // [101] phi (byte) shiftProtoBobRight::carry#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#0] -- vbuyy=vbuc1 + // [155] phi (byte) shiftProtoBobRight::carry#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#0] -- vbuyy=vbuc1 ldy #0 - // [101] phi (byte) shiftProtoBobRight::j#3 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#1] -- vbuxx=vbuc1 + // [155] phi (byte) shiftProtoBobRight::j#3 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#1] -- vbuxx=vbuc1 ldx #0 - // [101] phi (byte) shiftProtoBobRight::i#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#2] -- vbuz1=vbuc1 + // [155] phi (byte) shiftProtoBobRight::i#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#2] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b1 // shiftProtoBobRight::@1 __b1: - // [102] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 -- vbuz1_lt_vbuc1_then_la1 + // [156] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #3*3*8 bcc __b2 jmp __breturn // shiftProtoBobRight::@return __breturn: - // [103] return + // [157] return rts // shiftProtoBobRight::@2 __b2: - // [104] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_band_vbuc2 + // [158] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_band_vbuc2 lda #1 and PROTO_BOB,x - // [105] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 -- vbuc1_neq_vbuaa_then_la1 + // [159] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne __b3_from___b2 - // [107] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4] + // [161] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4] __b4_from___b2: - // [107] phi (byte) shiftProtoBobRight::carry#1 = (byte) 0 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 + // [161] phi (byte) shiftProtoBobRight::carry#1 = (byte) 0 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 lda #0 sta.z carry jmp __b4 - // [106] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@3 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@3] + // [160] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@3 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@3] __b3_from___b2: jmp __b3 // shiftProtoBobRight::@3 __b3: - // [107] phi from shiftProtoBobRight::@3 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4] + // [161] phi from shiftProtoBobRight::@3 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4] __b4_from___b3: - // [107] phi (byte) shiftProtoBobRight::carry#1 = (byte) $80 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 + // [161] phi (byte) shiftProtoBobRight::carry#1 = (byte) $80 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 lda #$80 sta.z carry jmp __b4 // shiftProtoBobRight::@4 __b4: - // [108] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1 + // [162] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1 lda PROTO_BOB,x lsr - // [109] (byte~) shiftProtoBobRight::$6 ← (byte~) shiftProtoBobRight::$5 | (byte) shiftProtoBobRight::carry#2 -- vbuaa=vbuaa_bor_vbuyy + // [163] (byte~) shiftProtoBobRight::$6 ← (byte~) shiftProtoBobRight::$5 | (byte) shiftProtoBobRight::carry#2 -- vbuaa=vbuaa_bor_vbuyy sty.z $ff ora.z $ff - // [110] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 -- pbuc1_derefidx_vbuxx=vbuaa + // [164] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 -- pbuc1_derefidx_vbuxx=vbuaa // Shift value and add old carry sta PROTO_BOB,x - // [111] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 -- vbuxx_ge_vbuc1_then_la1 + // [165] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 -- vbuxx_ge_vbuc1_then_la1 // Increment j to iterate over the PROTO_BOB left-to-right, top-to-bottom (0, 24, 48, 1, 25, 49, ...) cpx #$30 bcs __b5 jmp __b7 // shiftProtoBobRight::@7 __b7: - // [112] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 -- vbuxx=vbuxx_plus_vbuc1 + // [166] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 -- vbuxx=vbuxx_plus_vbuc1 txa axs #-[$18] - // [113] phi from shiftProtoBobRight::@5 shiftProtoBobRight::@7 to shiftProtoBobRight::@6 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6] + // [167] phi from shiftProtoBobRight::@5 shiftProtoBobRight::@7 to shiftProtoBobRight::@6 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6] __b6_from___b5: __b6_from___b7: - // [113] phi (byte) shiftProtoBobRight::j#10 = (byte) shiftProtoBobRight::j#1 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6#0] -- register_copy + // [167] phi (byte) shiftProtoBobRight::j#10 = (byte) shiftProtoBobRight::j#1 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6#0] -- register_copy jmp __b6 // shiftProtoBobRight::@6 __b6: - // [114] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 -- vbuz1=_inc_vbuz1 + // [168] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [115] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 -- vbuyy=vbuz1 + // [169] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 -- vbuyy=vbuz1 ldy.z carry - // [101] phi from shiftProtoBobRight::@6 to shiftProtoBobRight::@1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1] + // [155] phi from shiftProtoBobRight::@6 to shiftProtoBobRight::@1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1] __b1_from___b6: - // [101] phi (byte) shiftProtoBobRight::carry#2 = (byte) shiftProtoBobRight::carry#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#0] -- register_copy - // [101] phi (byte) shiftProtoBobRight::j#3 = (byte) shiftProtoBobRight::j#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#1] -- register_copy - // [101] phi (byte) shiftProtoBobRight::i#2 = (byte) shiftProtoBobRight::i#1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#2] -- register_copy + // [155] phi (byte) shiftProtoBobRight::carry#2 = (byte) shiftProtoBobRight::carry#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#0] -- register_copy + // [155] phi (byte) shiftProtoBobRight::j#3 = (byte) shiftProtoBobRight::j#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#1] -- register_copy + // [155] phi (byte) shiftProtoBobRight::i#2 = (byte) shiftProtoBobRight::i#1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#2] -- register_copy jmp __b1 // shiftProtoBobRight::@5 __b5: - // [116] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f -- vbuxx=vbuxx_minus_vbuc1 + // [170] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f -- vbuxx=vbuxx_minus_vbuc1 txa axs #$2f jmp __b6_from___b5 @@ -4293,52 +5880,56 @@ shiftProtoBobRight: { // Shift PROTO_BOB down one Y pixel // At the same time restore PROTO_BOB X by shifting 8 pixels left shiftProtoBobDown: { - // [118] phi from shiftProtoBobDown to shiftProtoBobDown::@1 [phi:shiftProtoBobDown->shiftProtoBobDown::@1] + // [172] phi from shiftProtoBobDown to shiftProtoBobDown::@1 [phi:shiftProtoBobDown->shiftProtoBobDown::@1] __b1_from_shiftProtoBobDown: - // [118] phi (byte) shiftProtoBobDown::i#2 = (byte) $17 [phi:shiftProtoBobDown->shiftProtoBobDown::@1#0] -- vbuxx=vbuc1 + // [172] phi (byte) shiftProtoBobDown::i#2 = (byte) $17 [phi:shiftProtoBobDown->shiftProtoBobDown::@1#0] -- vbuxx=vbuc1 ldx #$17 jmp __b1 // shiftProtoBobDown::@1 __b1: - // [119] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 -- vbuxx_gt_0_then_la1 + // [173] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 -- vbuxx_gt_0_then_la1 cpx #0 bne __b2 jmp __b3 // shiftProtoBobDown::@3 __b3: - // [120] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [174] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PROTO_BOB - // [121] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [175] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PROTO_BOB+$18 - // [122] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [176] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PROTO_BOB+$30 jmp __breturn // shiftProtoBobDown::@return __breturn: - // [123] return + // [177] return rts // shiftProtoBobDown::@2 __b2: - // [124] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [178] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda PROTO_BOB+$17,x sta PROTO_BOB,x - // [125] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [179] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda PROTO_BOB+$2f,x sta PROTO_BOB+$18,x - // [126] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [180] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta PROTO_BOB+$30,x - // [127] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 -- vbuxx=_dec_vbuxx + // [181] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 -- vbuxx=_dec_vbuxx dex - // [118] phi from shiftProtoBobDown::@2 to shiftProtoBobDown::@1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1] + // [172] phi from shiftProtoBobDown::@2 to shiftProtoBobDown::@1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1] __b1_from___b2: - // [118] phi (byte) shiftProtoBobDown::i#2 = (byte) shiftProtoBobDown::i#1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1#0] -- register_copy + // [172] phi (byte) shiftProtoBobDown::i#2 = (byte) shiftProtoBobDown::i#1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1#0] -- register_copy jmp __b1 } // File Data + // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) + keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f + // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) + keyboard_matrix_col_bitmask: .byte 1, 2, 4, 8, $10, $20, $40, $80 // The prototype BOB (a 3x3 char image with a bob image in the upper 2x2 chars) // The chars are layout as follows with data in chars 0, 1, 3, 4 initially // 0 3 6 @@ -4367,16 +5958,37 @@ Removing instruction jmp vicSelectGfxBank1 Removing instruction jmp vicSelectGfxBank1_toDd001 Removing instruction jmp vicSelectGfxBank1___b1 Removing instruction jmp toD0181 -Removing instruction jmp __b4 +Removing instruction jmp __b10 Removing instruction jmp __b1 Removing instruction jmp __b2 +Removing instruction jmp __b12 Removing instruction jmp __b3 +Removing instruction jmp __b4 +Removing instruction jmp __b13 Removing instruction jmp __b5 +Removing instruction jmp __b14 Removing instruction jmp __b6 Removing instruction jmp __b7 +Removing instruction jmp __b8 +Removing instruction jmp __b9 +Removing instruction jmp __b15 +Removing instruction jmp __b16 +Removing instruction jmp __b17 +Removing instruction jmp __b18 +Removing instruction jmp __b19 +Removing instruction jmp __b20 +Removing instruction jmp vicSelectGfxBank2_toDd001 +Removing instruction jmp vicSelectGfxBank2___b1 +Removing instruction jmp toD0182 +Removing instruction jmp __b11 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b2 @@ -4403,13 +6015,20 @@ Removing instruction jmp __b1 Removing instruction jmp __b3 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing instruction ldy.z bob_table_idx with TAY +Replacing instruction ldy #0 with TAY Removing instruction lda #0 Replacing instruction lda #0 with TXA Removing instruction lda #0 Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __bbegin with __b1 -Replacing label __b1 with __b2 +Replacing label __b2_from___b12 with __b2 +Replacing label __b1_from___b3 with __b1 +Replacing label __b4_from___b13 with __b4_from___b3 +Replacing label __b5_from___b14 with __b5 +Replacing label __b7 with __b8 +Replacing label __b2_from___b3 with __b2 Replacing label __breturn_from___b5 with __breturn Replacing label __b3_from___b2 with __b3 Replacing label __b6_from___b5 with __b6 @@ -4421,7 +6040,23 @@ Removing instruction vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: Removing instruction vicSelectGfxBank1_toDd001: Removing instruction toD0181_from_vicSelectGfxBank1___b1: Removing instruction toD0181: -Removing instruction __b1: +Removing instruction __b1_from___b3: +Removing instruction __b2_from___b1: +Removing instruction __b2_from___b12: +Removing instruction __b4_from___b13: +Removing instruction keyboard_key_pressed_from___b4: +Removing instruction __b5_from___b13: +Removing instruction __b5_from___b14: +Removing instruction keyboard_key_pressed_from___b5: +Removing instruction __b6_from___b14: +Removing instruction memset_from___b6: +Removing instruction __b7: +Removing instruction vicSelectGfxBank2_toDd001_from_vicSelectGfxBank2: +Removing instruction vicSelectGfxBank2_toDd001: +Removing instruction toD0182_from_vicSelectGfxBank2___b1: +Removing instruction toD0182: +Removing instruction __b2_from___b1: +Removing instruction __b2_from___b3: Removing instruction __b4_from___b2: Removing instruction shiftProtoBobDown_from___b4: Removing instruction __b10_from___b7: @@ -4438,21 +6073,40 @@ Removing instruction __bend: Removing instruction prepareBobs_from_main: Removing instruction vicSelectGfxBank1: Removing instruction vicSelectGfxBank1___b1: -Removing instruction __b4: -Removing instruction memset_from___b4: -Removing instruction __b1_from___b4: +Removing instruction __b10: +Removing instruction memset_from___b10: +Removing instruction __b1_from___b10: +Removing instruction renderBob_from___b2: +Removing instruction __b12: Removing instruction __b3: -Removing instruction renderBob_from___b3: -Removing instruction __b5: -Removing instruction renderBob_from___b5: +Removing instruction __b4: +Removing instruction __b13: +Removing instruction __b14: Removing instruction __b6: -Removing instruction renderBob_from___b6: -Removing instruction __b7: -Removing instruction __b1_from___b7: +Removing instruction __b7_from___b6: +Removing instruction __b9: +Removing instruction renderBob_from___b9: +Removing instruction __b15: +Removing instruction renderBob_from___b15: +Removing instruction __b16: +Removing instruction renderBob_from___b16: +Removing instruction __b17: +Removing instruction renderBob_from___b17: +Removing instruction __b18: +Removing instruction renderBob_from___b18: +Removing instruction __b19: +Removing instruction keyboard_key_pressed_from___b19: +Removing instruction __b20: +Removing instruction __b7_from___b20: +Removing instruction vicSelectGfxBank2___b1: +Removing instruction __b11: Removing instruction __breturn: -Removing instruction __b1_from_memset: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1: Removing instruction __breturn: -Removing instruction __b1_from___b2: Removing instruction bobCharsetFindOrAddGlyph_from_prepareBobs: Removing instruction __b1_from_prepareBobs: Removing instruction __breturn: @@ -4490,9 +6144,13 @@ Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin Replacing jump to rts with rts in jmp __breturn Succesful ASM optimization Pass5DoubleJumpElimination +Relabelling long label __b4_from___b3 to b1 Relabelling long label __b2_from___b1 to b1 Relabelling long label __b2_from___b1 to b1 Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction __b1: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination @@ -4501,22 +6159,31 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const byte*) BOB_CHARSET = (byte*) 24576 +(const byte*) BOB_CHARSET = (byte*) 16384 +(const byte*) BOB_SCREEN = (byte*) 18432 (const byte) BOB_SHIFTS_X = (number) 4 (const byte) BOB_SHIFTS_Y = (number) 8 (const byte) BOB_SUBTABLE_SIZE = (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y (const byte*) BOB_TABLES = { fill( 9*8*4, 0) } (const byte*) BORDERCOL = (byte*) 53280 +(const byte*) CHARSET_BASIC = (byte*) 4096 +(const byte*) CIA1_PORT_A = (byte*) 56320 +(const byte*) CIA1_PORT_B = (byte*) 56321 (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 (const byte*) D018 = (byte*) 53272 +(const byte) KEY_SPACE = (number) $3c (const byte*) PROTO_BOB = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) .for (var x=0;x<3; x++) .for (var y=0; y<24; y++) .byte pic.getSinglecolorByte(x,y) }} +(const byte) RADIX::BINARY = (number) 2 +(const byte) RADIX::DECIMAL = (number) $a +(const byte) RADIX::HEXADECIMAL = (number) $10 +(const byte) RADIX::OCTAL = (number) 8 (const byte*) RASTER = (byte*) 53266 -(const byte*) SCREEN = (byte*) 16384 +(const byte*) SCREEN_BASIC = (byte*) 1024 (const byte*) SIN_X_TAB = kickasm {{ .fill $200, 75.5+75.5*sin(i*2*PI/256) }} (const byte*) SIN_Y_TAB = kickasm {{ .fill $200, 91.5+91.5*sin(i*2*PI/256) }} (byte()) bobCharsetFindOrAddGlyph((byte*) bobCharsetFindOrAddGlyph::bob_glyph) @@ -4536,68 +6203,132 @@ FINAL SYMBOL TABLE (byte) bobCharsetFindOrAddGlyph::found (byte) bobCharsetFindOrAddGlyph::found#2 reg byte a 10001.0 (byte*) bobCharsetFindOrAddGlyph::glyph_cursor -(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 glyph_cursor zp[2]:12 20002.0 -(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 glyph_cursor zp[2]:12 10000.307692307691 +(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 glyph_cursor zp[2]:10 20002.0 +(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 glyph_cursor zp[2]:10 10000.307692307691 (byte) bobCharsetFindOrAddGlyph::glyph_id -(byte) bobCharsetFindOrAddGlyph::glyph_id#1 glyph_id zp[1]:9 10001.0 -(byte) bobCharsetFindOrAddGlyph::glyph_id#11 glyph_id zp[1]:9 1937.75 +(byte) bobCharsetFindOrAddGlyph::glyph_id#1 glyph_id zp[1]:8 10001.0 +(byte) bobCharsetFindOrAddGlyph::glyph_id#11 glyph_id zp[1]:8 1937.75 (byte) bobCharsetFindOrAddGlyph::i -(byte) bobCharsetFindOrAddGlyph::i#1 i zp[1]:7 200002.0 -(byte) bobCharsetFindOrAddGlyph::i#2 i zp[1]:7 166668.3333333333 +(byte) bobCharsetFindOrAddGlyph::i#1 i zp[1]:12 200002.0 +(byte) bobCharsetFindOrAddGlyph::i#2 i zp[1]:12 166668.3333333333 (byte) bobCharsetFindOrAddGlyph::i1 (byte) bobCharsetFindOrAddGlyph::i1#1 reg byte y 20002.0 (byte) bobCharsetFindOrAddGlyph::i1#2 reg byte y 16668.333333333332 (byte) bobCharsetFindOrAddGlyph::return (byte) bobCharsetFindOrAddGlyph::return#1 reg byte a 2002.0 (byte) bob_charset_next_id -(byte) bob_charset_next_id#14 bob_charset_next_id zp[1]:14 12.0 -(byte) bob_charset_next_id#16 bob_charset_next_id zp[1]:14 1100.6000000000001 -(byte) bob_charset_next_id#21 bob_charset_next_id zp[1]:14 275.5 -(byte) bob_charset_next_id#23 bob_charset_next_id zp[1]:14 1400.3333333333335 -(byte) bob_charset_next_id#30 bob_charset_next_id zp[1]:14 37.33333333333333 -(byte) bob_charset_next_id#8 bob_charset_next_id zp[1]:14 4.0 +(byte) bob_charset_next_id#14 bob_charset_next_id zp[1]:9 12.0 +(byte) bob_charset_next_id#16 bob_charset_next_id zp[1]:9 1100.6000000000001 +(byte) bob_charset_next_id#21 bob_charset_next_id zp[1]:9 275.5 +(byte) bob_charset_next_id#23 bob_charset_next_id zp[1]:9 1400.3333333333335 +(byte) bob_charset_next_id#29 bob_charset_next_id zp[1]:9 37.33333333333333 +(byte) bob_charset_next_id#8 bob_charset_next_id zp[1]:9 4.0 +(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) +(byte~) keyboard_key_pressed::$2 reg byte a 4.0 +(label) keyboard_key_pressed::@1 +(label) keyboard_key_pressed::@return +(byte) keyboard_key_pressed::colidx +(const byte) keyboard_key_pressed::colidx#0 colidx = (const byte) KEY_SPACE&(byte) 7 +(byte) keyboard_key_pressed::key +(byte) keyboard_key_pressed::return +(byte) keyboard_key_pressed::return#0 reg byte a 7.000000000000001 +(byte) keyboard_key_pressed::return#2 reg byte a 22.0 +(byte) keyboard_key_pressed::return#3 reg byte a 22.0 +(byte) keyboard_key_pressed::return#4 reg byte a 22.0 +(byte) keyboard_key_pressed::rowidx +(const byte) keyboard_key_pressed::rowidx#0 rowidx = (const byte) KEY_SPACE>>(byte) 3 +(const byte*) keyboard_matrix_col_bitmask = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } +(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 +(const byte*) keyboard_matrix_row_bitmask = { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f } (void()) main() +(byte~) main::$14 reg byte a 22.0 +(byte~) main::$16 reg byte a 22.0 +(byte~) main::$25 reg byte a 22.0 +(byte~) main::$30 reg byte a 202.0 +(byte~) main::$31 reg byte a 202.0 +(byte~) main::$33 reg byte a 202.0 +(byte~) main::$34 reg byte a 202.0 +(byte~) main::$7 reg byte a 202.0 +(byte~) main::$9 reg byte a 202.0 (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::@20 (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::sin_x_idx -(byte) main::sin_x_idx#1 sin_x_idx zp[1]:2 7.333333333333333 -(byte) main::sin_x_idx#7 sin_x_idx zp[1]:2 4.583333333333333 +(byte) main::sin_x_idx#1 sin_x_idx zp[1]:3 3.142857142857143 +(byte) main::sin_x_idx#9 sin_x_idx zp[1]:3 4.277777777777779 (byte) main::sin_y_idx -(byte) main::sin_y_idx#1 sin_y_idx zp[1]:3 11.0 -(byte) main::sin_y_idx#7 sin_y_idx zp[1]:3 4.230769230769231 +(byte) main::sin_y_idx#1 reg byte x 3.6666666666666665 +(byte) main::sin_y_idx#9 reg byte x 4.052631578947368 (label) main::toD0181 (byte*) main::toD0181_gfx (byte) main::toD0181_return -(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) BOB_CHARSET/(byte) 4&(byte) $f +(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) BOB_SCREEN&(word) $3fff*(byte) 4 (byte*) main::toD0181_screen +(label) main::toD0182 +(byte*) main::toD0182_gfx +(byte) main::toD0182_return +(const byte) main::toD0182_return#0 toD0182_return = >(word)(const byte*) SCREEN_BASIC&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET_BASIC/(byte) 4&(byte) $f +(byte*) main::toD0182_screen (label) main::vicSelectGfxBank1 (label) main::vicSelectGfxBank1_@1 (byte*) main::vicSelectGfxBank1_gfx (label) main::vicSelectGfxBank1_toDd001 (byte*) main::vicSelectGfxBank1_toDd001_gfx (byte) main::vicSelectGfxBank1_toDd001_return -(const byte) main::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte) 3^>(word)(const byte*) SCREEN/(byte) $40 +(const byte) main::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte) 3^>(word)(const byte*) BOB_SCREEN/(byte) $40 +(label) main::vicSelectGfxBank2 +(label) main::vicSelectGfxBank2_@1 +(byte*) main::vicSelectGfxBank2_gfx +(label) main::vicSelectGfxBank2_toDd001 +(byte*) main::vicSelectGfxBank2_toDd001_gfx +(byte) main::vicSelectGfxBank2_toDd001_return +(const byte) main::vicSelectGfxBank2_toDd001_return#0 vicSelectGfxBank2_toDd001_return = (byte) 3 +(byte) main::x +(byte) main::x#1 x zp[1]:2 16.5 +(byte) main::x#4 x zp[1]:2 25.0 +(byte) main::y +(byte) main::y#1 reg byte x 151.5 +(byte) main::y#2 reg byte x 50.5 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 +(label) memset::@3 (label) memset::@return (byte) memset::c -(const byte) memset::c#0 c = (byte) 0 (byte*) memset::dst (byte*) memset::dst#1 dst zp[2]:5 22.0 -(byte*) memset::dst#2 dst zp[2]:5 14.666666666666666 +(byte*) memset::dst#2 dst zp[2]:5 15.333333333333332 +(byte*) memset::dst#4 dst zp[2]:5 4.0 (byte*) memset::end -(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 +(byte*) memset::end#0 end zp[2]:13 2.1666666666666665 (word) memset::num -(const word) memset::num#0 num = (word) $3e8 (void*) memset::return (void*) memset::str -(const void*) memset::str#0 str = (void*)(const byte*) SCREEN +(void*) memset::str#3 str zp[2]:5 (void()) prepareBobs() (byte~) prepareBobs::$5 reg byte a 2002.0 (label) prepareBobs::@1 @@ -4616,16 +6347,16 @@ FINAL SYMBOL TABLE (byte*) prepareBobs::bob_glyph#1 bob_glyph zp[2]:5 667.3333333333334 (byte*) prepareBobs::bob_glyph#2 bob_glyph zp[2]:5 429.0 (byte*) prepareBobs::bob_table -(byte*) prepareBobs::bob_table#0 bob_table zp[2]:10 202.0 -(byte*) prepareBobs::bob_table#1 bob_table zp[2]:10 1001.0 -(byte*) prepareBobs::bob_table#2 bob_table zp[2]:10 388.0 +(byte*) prepareBobs::bob_table#0 bob_table zp[2]:13 202.0 +(byte*) prepareBobs::bob_table#1 bob_table zp[2]:13 1001.0 +(byte*) prepareBobs::bob_table#2 bob_table zp[2]:13 388.0 (byte) prepareBobs::bob_table_idx (byte) prepareBobs::bob_table_idx#1 bob_table_idx zp[1]:3 40.4 (byte) prepareBobs::bob_table_idx#12 bob_table_idx zp[1]:3 20.3125 (byte) prepareBobs::bob_table_idx#6 bob_table_idx zp[1]:3 11.0 (byte) prepareBobs::cell -(byte) prepareBobs::cell#1 cell zp[1]:8 2002.0 -(byte) prepareBobs::cell#2 cell zp[1]:8 333.6666666666667 +(byte) prepareBobs::cell#1 cell zp[1]:7 2002.0 +(byte) prepareBobs::cell#2 cell zp[1]:7 333.6666666666667 (byte) prepareBobs::shift_x (byte) prepareBobs::shift_x#1 shift_x zp[1]:4 202.0 (byte) prepareBobs::shift_x#2 shift_x zp[1]:4 17.823529411764707 @@ -4633,34 +6364,40 @@ FINAL SYMBOL TABLE (byte) prepareBobs::shift_y#1 shift_y zp[1]:2 22.0 (byte) prepareBobs::shift_y#2 shift_y zp[1]:2 1.5 (void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos) -(word~) renderBob::$10 zp[2]:12 4.0 -(word~) renderBob::$11 zp[2]:10 4.0 -(word~) renderBob::$2 zp[2]:10 3.0 -(byte*~) renderBob::$4 zp[2]:10 4.0 +(word~) renderBob::$10 zp[2]:10 4.0 +(word~) renderBob::$11 zp[2]:13 4.0 +(word~) renderBob::$2 zp[2]:13 3.0 +(byte*~) renderBob::$4 zp[2]:13 4.0 (byte~) renderBob::$6 reg byte a 4.0 -(byte~) renderBob::$7 zp[1]:14 2.0 +(byte~) renderBob::$7 zp[1]:12 2.0 (byte~) renderBob::$8 reg byte a 4.0 (label) renderBob::@return (byte) renderBob::bob_table_idx -(byte) renderBob::bob_table_idx#0 reg byte x 2.2222222222222228 +(byte) renderBob::bob_table_idx#0 bob_table_idx zp[1]:12 2.2222222222222228 (byte*) renderBob::screen -(byte*) renderBob::screen#0 screen zp[2]:10 1.5384615384615383 +(byte*) renderBob::screen#0 screen zp[2]:13 1.5384615384615383 (byte) renderBob::x_char_offset -(byte) renderBob::x_char_offset#0 reg byte y 0.5714285714285714 +(byte) renderBob::x_char_offset#0 x_char_offset zp[1]:9 0.5714285714285714 (byte) renderBob::xpos -(byte) renderBob::xpos#0 xpos zp[1]:4 11.0 +(byte) renderBob::xpos#0 xpos zp[1]:4 40.4 (byte) renderBob::xpos#1 xpos zp[1]:4 11.0 (byte) renderBob::xpos#2 xpos zp[1]:4 11.0 -(byte) renderBob::xpos#3 xpos zp[1]:4 3.3636363636363633 +(byte) renderBob::xpos#3 xpos zp[1]:4 11.0 +(byte) renderBob::xpos#4 xpos zp[1]:4 11.0 +(byte) renderBob::xpos#5 xpos zp[1]:4 11.0 +(byte) renderBob::xpos#6 xpos zp[1]:4 14.545454545454545 (byte) renderBob::y_char_offset (byte) renderBob::y_char_offset#0 reg byte a 2.0 (word) renderBob::y_offset -(word) renderBob::y_offset#0 y_offset zp[2]:10 4.0 +(word) renderBob::y_offset#0 y_offset zp[2]:13 4.0 (byte) renderBob::ypos -(byte) renderBob::ypos#0 reg byte x 22.0 -(byte) renderBob::ypos#1 reg byte x 22.0 -(byte) renderBob::ypos#2 reg byte x 22.0 -(byte) renderBob::ypos#3 reg byte x 4.111111111111112 +(byte) renderBob::ypos#0 reg byte y 202.0 +(byte) renderBob::ypos#1 reg byte y 22.0 +(byte) renderBob::ypos#2 reg byte y 22.0 +(byte) renderBob::ypos#3 reg byte y 22.0 +(byte) renderBob::ypos#4 reg byte y 22.0 +(byte) renderBob::ypos#5 reg byte y 22.0 +(byte) renderBob::ypos#6 reg byte y 17.77777777777777 (void()) shiftProtoBobDown() (label) shiftProtoBobDown::@1 (label) shiftProtoBobDown::@2 @@ -4682,12 +6419,12 @@ FINAL SYMBOL TABLE (label) shiftProtoBobRight::@7 (label) shiftProtoBobRight::@return (byte) shiftProtoBobRight::carry -(byte) shiftProtoBobRight::carry#1 carry zp[1]:9 111.22222222222223 +(byte) shiftProtoBobRight::carry#1 carry zp[1]:8 111.22222222222223 (byte) shiftProtoBobRight::carry#10 reg byte y 2002.0 (byte) shiftProtoBobRight::carry#2 reg byte y 286.0 (byte) shiftProtoBobRight::i -(byte) shiftProtoBobRight::i#1 i zp[1]:8 1001.0 -(byte) shiftProtoBobRight::i#2 i zp[1]:8 231.0 +(byte) shiftProtoBobRight::i#1 i zp[1]:7 1001.0 +(byte) shiftProtoBobRight::i#2 i zp[1]:7 231.0 (byte) shiftProtoBobRight::j (byte) shiftProtoBobRight::j#1 reg byte x 2002.0 (byte) shiftProtoBobRight::j#10 reg byte x 1001.0 @@ -4695,27 +6432,43 @@ FINAL SYMBOL TABLE (byte) shiftProtoBobRight::j#3 reg byte x 700.7 (byte) shiftProtoBobRight::new_carry -reg byte x [ renderBob::ypos#3 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#0 ] -zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::sin_x_idx#7 main::sin_x_idx#1 ] -zp[1]:3 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 main::sin_y_idx#7 main::sin_y_idx#1 ] -zp[1]:4 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 renderBob::xpos#3 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#0 ] -zp[2]:5 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 memset::dst#2 memset::dst#1 ] +reg byte x [ main::y#2 main::y#1 ] +reg byte x [ main::sin_y_idx#9 main::sin_y_idx#1 ] +reg byte y [ renderBob::ypos#6 renderBob::ypos#0 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#3 renderBob::ypos#4 renderBob::ypos#5 ] +zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::x#4 main::x#1 ] +zp[1]:3 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 main::sin_x_idx#9 main::sin_x_idx#1 ] +zp[1]:4 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 renderBob::xpos#6 renderBob::xpos#0 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#3 renderBob::xpos#4 renderBob::xpos#5 ] +zp[2]:5 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] reg byte y [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] -zp[1]:7 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] reg byte a [ bobCharsetFindOrAddGlyph::found#2 ] -zp[1]:8 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] +zp[1]:7 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] reg byte x [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] reg byte y [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] -zp[1]:9 [ shiftProtoBobRight::carry#1 bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +zp[1]:8 [ shiftProtoBobRight::carry#1 bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] reg byte x [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] -reg byte y [ renderBob::x_char_offset#0 ] +reg byte a [ main::$30 ] +reg byte a [ main::$31 ] +reg byte a [ main::$7 ] +reg byte a [ main::$33 ] +reg byte a [ main::$34 ] +reg byte a [ main::$9 ] +reg byte a [ keyboard_key_pressed::return#2 ] +reg byte a [ main::$14 ] +reg byte a [ keyboard_key_pressed::return#3 ] +reg byte a [ main::$16 ] +reg byte a [ keyboard_key_pressed::return#4 ] +reg byte a [ main::$25 ] +reg byte a [ keyboard_matrix_read::return#2 ] +reg byte a [ keyboard_key_pressed::$2 ] +reg byte a [ keyboard_key_pressed::return#0 ] +reg byte a [ keyboard_matrix_read::return#0 ] +zp[1]:9 [ renderBob::x_char_offset#0 bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] reg byte a [ renderBob::y_char_offset#0 ] -zp[2]:10 [ renderBob::$2 renderBob::$11 renderBob::y_offset#0 renderBob::$4 renderBob::screen#0 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] -zp[2]:12 [ renderBob::$10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] +zp[2]:10 [ renderBob::$10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] reg byte a [ renderBob::$6 ] -zp[1]:14 [ renderBob::$7 bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] +zp[1]:12 [ renderBob::$7 renderBob::bob_table_idx#0 bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] reg byte a [ renderBob::$8 ] -reg byte x [ renderBob::bob_table_idx#0 ] +zp[2]:13 [ memset::end#0 renderBob::$2 renderBob::$11 renderBob::y_offset#0 renderBob::$4 renderBob::screen#0 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] reg byte a [ bobCharsetFindOrAddGlyph::return#1 ] reg byte a [ prepareBobs::$5 ] reg byte a [ shiftProtoBobRight::$1 ] @@ -4724,7 +6477,7 @@ reg byte a [ shiftProtoBobRight::$6 ] FINAL ASSEMBLER -Score: 5766895 +Score: 5773294 // File Comments // Pre-calculated bobs inside a charset (pre-mpved to all x/y-combinations) @@ -4736,14 +6489,23 @@ Score: 5766895 .label RASTER = $d012 .label BORDERCOL = $d020 .label D018 = $d018 + // CIA#1 Port A: keyboard matrix columns and joystick #2 + .label CIA1_PORT_A = $dc00 + // CIA#1 Port B: keyboard matrix rows and joystick #1. + .label CIA1_PORT_B = $dc01 // CIA#2 Port A: Serial bus, RS-232, VIC memory bank .label CIA2_PORT_A = $dd00 // CIA #2 Port A data direction register. .label CIA2_PORT_A_DDR = $dd02 + .const KEY_SPACE = $3c + // The BASIC screen + .label SCREEN_BASIC = $400 + // The BASIC charset + .label CHARSET_BASIC = $1000 // The screen - .label SCREEN = $4000 + .label BOB_SCREEN = $4800 // The charset that will receive the shifted bobs - .label BOB_CHARSET = $6000 + .label BOB_CHARSET = $4000 // The number of different X-shifts .const BOB_SHIFTS_X = 4 // The number of different Y-shifts @@ -4751,7 +6513,7 @@ Score: 5766895 // The size of a sub-table of BOB_TABLES .const BOB_SUBTABLE_SIZE = BOB_SHIFTS_X*BOB_SHIFTS_Y // BOB charset ID of the next glyph to be added - .label bob_charset_next_id = $e + .label bob_charset_next_id = 9 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -4761,34 +6523,16 @@ Score: 5766895 // @end // main main: { - .const vicSelectGfxBank1_toDd001_return = 3^(>SCREEN)/$40 - .const toD0181_return = (>BOB_CHARSET)/4&$f - /* - // Display some BOBs - char* screen = SCREEN; - char bob_table_idx = 0; - for(char i:0..7) { - for(char j:0..3) { - screen[0] = (BOB_TABLES+0*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[40] = (BOB_TABLES+1*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[80] = (BOB_TABLES+2*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[1] = (BOB_TABLES+3*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[41] = (BOB_TABLES+4*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[81] = (BOB_TABLES+5*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[2] = (BOB_TABLES+6*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[42] = (BOB_TABLES+7*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen[82] = (BOB_TABLES+8*BOB_SUBTABLE_SIZE)[bob_table_idx]; - screen += 120; - bob_table_idx++; - } - screen -= (120*4)-3; - } - */ - .label sin_x_idx = 2 - .label sin_y_idx = 3 + .const vicSelectGfxBank1_toDd001_return = 3^(>BOB_SCREEN)/$40 + .const vicSelectGfxBank2_toDd001_return = 3 + .const toD0181_return = >(BOB_SCREEN&$3fff)*4 + .const toD0182_return = (>(SCREEN_BASIC&$3fff)*4)|(>CHARSET_BASIC)/4&$f + .label x = 2 + // Render sine BOBs + .label sin_x_idx = 3 // prepareBobs() // [5] call prepareBobs - // [56] phi from main to prepareBobs [phi:main->prepareBobs] + // [110] phi from main to prepareBobs [phi:main->prepareBobs] jsr prepareBobs // main::vicSelectGfxBank1 // *CIA2_PORT_A_DDR = %00000011 @@ -4804,123 +6548,341 @@ main: { sta CIA2_PORT_A // [9] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] // main::toD0181 - // main::@4 - // *D018 = toD018(SCREEN, BOB_CHARSET) + // main::@10 + // *D018 = toD018(BOB_SCREEN, BOB_CHARSET) // [10] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 - // memset(SCREEN, 0x00, 1000) + // memset(BOB_SCREEN, 0x00, 1000) // [11] call memset - // [50] phi from main::@4 to memset [phi:main::@4->memset] + // [102] phi from main::@10 to memset [phi:main::@10->memset] + // [102] phi (void*) memset::str#3 = (void*)(const byte*) BOB_SCREEN [phi:main::@10->memset#0] -- pvoz1=pvoc1 + lda #BOB_SCREEN + sta.z memset.str+1 jsr memset - // [12] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - // [12] phi (byte) main::sin_y_idx#7 = (byte) $49 [phi:main::@4->main::@1#0] -- vbuz1=vbuc1 - lda #$49 - sta.z sin_y_idx - // [12] phi (byte) main::sin_x_idx#7 = (byte) 0 [phi:main::@4->main::@1#1] -- vbuz1=vbuc1 + // [12] phi from main::@10 to main::@1 [phi:main::@10->main::@1] + // [12] phi (byte) main::x#4 = (byte) 0 [phi:main::@10->main::@1#0] -- vbuz1=vbuc1 lda #0 - sta.z sin_x_idx + sta.z x + // Display a BOB grid + // [12] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + // [12] phi (byte) main::x#4 = (byte) main::x#1 [phi:main::@3->main::@1#0] -- register_copy // main::@1 + __b1: + // [13] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [13] phi (byte) main::y#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 + ldx #0 + // [13] phi from main::@12 to main::@2 [phi:main::@12->main::@2] + // [13] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@12->main::@2#0] -- register_copy // main::@2 __b2: - // while (*RASTER!=$ff) - // [13] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 - lda #$ff - cmp RASTER + // x*12 + // [14] (byte~) main::$30 ← (byte) main::x#4 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z x + asl + // [15] (byte~) main::$31 ← (byte~) main::$30 + (byte) main::x#4 -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z x + // [16] (byte~) main::$7 ← (byte~) main::$31 << (byte) 2 -- vbuaa=vbuaa_rol_2 + asl + asl + // renderBob(x*12+y, y*24+x) + // [17] (byte) renderBob::xpos#0 ← (byte~) main::$7 + (byte) main::y#2 -- vbuz1=vbuaa_plus_vbuxx + stx.z $ff + clc + adc.z $ff + sta.z renderBob.xpos + // y*24 + // [18] (byte~) main::$33 ← (byte) main::y#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + txa + asl + // [19] (byte~) main::$34 ← (byte~) main::$33 + (byte) main::y#2 -- vbuaa=vbuaa_plus_vbuxx + stx.z $ff + clc + adc.z $ff + // [20] (byte~) main::$9 ← (byte~) main::$34 << (byte) 3 -- vbuaa=vbuaa_rol_3 + asl + asl + asl + // renderBob(x*12+y, y*24+x) + // [21] (byte) renderBob::ypos#0 ← (byte~) main::$9 + (byte) main::x#4 -- vbuyy=vbuaa_plus_vbuz1 + clc + adc.z x + tay + // [22] call renderBob + // [79] phi from main::@2 to renderBob [phi:main::@2->renderBob] + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#0 [phi:main::@2->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#0 [phi:main::@2->renderBob#1] -- register_copy + jsr renderBob + // main::@12 + // for(char y: 0..3) + // [23] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuxx=_inc_vbuxx + inx + // [24] if((byte) main::y#1!=(byte) 4) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 + cpx #4 bne __b2 // main::@3 + // for( char x: 0..7) + // [25] (byte) main::x#1 ← ++ (byte) main::x#4 -- vbuz1=_inc_vbuz1 + inc.z x + // [26] if((byte) main::x#1!=(byte) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #8 + cmp.z x + bne __b1 + // [27] phi from main::@13 main::@3 to main::@4 [phi:main::@13/main::@3->main::@4] + b1: + // Wait for space + // main::@4 + // keyboard_key_pressed(KEY_SPACE) + // [28] call keyboard_key_pressed + // [70] phi from main::@4 to keyboard_key_pressed [phi:main::@4->keyboard_key_pressed] + jsr keyboard_key_pressed + // keyboard_key_pressed(KEY_SPACE) + // [29] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + // main::@13 + // [30] (byte~) main::$14 ← (byte) keyboard_key_pressed::return#2 + // while(!keyboard_key_pressed(KEY_SPACE)) + // [31] if((byte) 0==(byte~) main::$14) goto main::@4 -- vbuc1_eq_vbuaa_then_la1 + cmp #0 + beq b1 + // [32] phi from main::@13 main::@14 to main::@5 [phi:main::@13/main::@14->main::@5] + // main::@5 + __b5: + // keyboard_key_pressed(KEY_SPACE) + // [33] call keyboard_key_pressed + // [70] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] + jsr keyboard_key_pressed + // keyboard_key_pressed(KEY_SPACE) + // [34] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 + // main::@14 + // [35] (byte~) main::$16 ← (byte) keyboard_key_pressed::return#3 + // while(keyboard_key_pressed(KEY_SPACE)) + // [36] if((byte) 0!=(byte~) main::$16) goto main::@5 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne __b5 + // [37] phi from main::@14 to main::@6 [phi:main::@14->main::@6] + // main::@6 + // memset(BOB_SCREEN, 0x00, 1000) + // [38] call memset + // [102] phi from main::@6 to memset [phi:main::@6->memset] + // [102] phi (void*) memset::str#3 = (void*)(const byte*) BOB_SCREEN [phi:main::@6->memset#0] -- pvoz1=pvoc1 + lda #BOB_SCREEN + sta.z memset.str+1 + jsr memset + // [39] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + // [39] phi (byte) main::sin_y_idx#9 = (byte) $49 [phi:main::@6->main::@7#0] -- vbuxx=vbuc1 + ldx #$49 + // [39] phi (byte) main::sin_x_idx#9 = (byte) 0 [phi:main::@6->main::@7#1] -- vbuz1=vbuc1 + lda #0 + sta.z sin_x_idx + // main::@7 + // main::@8 + __b8: + // while (*RASTER<$f8) + // [40] if(*((const byte*) RASTER)<(byte) $f8) goto main::@8 -- _deref_pbuc1_lt_vbuc2_then_la1 + lda RASTER + cmp #$f8 + bcc __b8 + // main::@9 // (*BORDERCOL)++; - // [14] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 + // [41] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDERCOL - // renderBob((SIN_X_TAB)[sin_x_idx], (SIN_Y_TAB)[sin_y_idx]) - // [15] (byte) renderBob::xpos#0 ← *((const byte*) SIN_X_TAB + (byte) main::sin_x_idx#7) -- vbuz1=pbuc1_derefidx_vbuz2 + // renderBob((SIN_X_TAB+21*4)[sin_x_idx], (SIN_Y_TAB+13*0)[sin_y_idx]) + // [42] (byte) renderBob::xpos#1 ← *((const byte*) SIN_X_TAB+(byte)(number) $15*(number) 4 + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_x_idx + lda SIN_X_TAB+$15*4,y + sta.z renderBob.xpos + // [43] (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB + (byte) main::sin_y_idx#9) -- vbuyy=pbuc1_derefidx_vbuxx + ldy SIN_Y_TAB,x + // [44] call renderBob + // [79] phi from main::@9 to renderBob [phi:main::@9->renderBob] + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#1 [phi:main::@9->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#1 [phi:main::@9->renderBob#1] -- register_copy + jsr renderBob + // main::@15 + // renderBob((SIN_X_TAB+19*3)[sin_x_idx], (SIN_Y_TAB+15*1)[sin_y_idx]) + // [45] (byte) renderBob::xpos#2 ← *((const byte*) SIN_X_TAB+(byte)(number) $13*(number) 3 + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_x_idx + lda SIN_X_TAB+$13*3,y + sta.z renderBob.xpos + // [46] (byte) renderBob::ypos#2 ← *((const byte*) SIN_Y_TAB+(byte)(number) $f*(number) 1 + (byte) main::sin_y_idx#9) -- vbuyy=pbuc1_derefidx_vbuxx + ldy SIN_Y_TAB+$f*1,x + // [47] call renderBob + // [79] phi from main::@15 to renderBob [phi:main::@15->renderBob] + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#2 [phi:main::@15->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#2 [phi:main::@15->renderBob#1] -- register_copy + jsr renderBob + // main::@16 + // renderBob((SIN_X_TAB+17*2)[sin_x_idx], (SIN_Y_TAB+17*2)[sin_y_idx]) + // [48] (byte) renderBob::xpos#3 ← *((const byte*) SIN_X_TAB+(byte)(number) $11*(number) 2 + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_x_idx + lda SIN_X_TAB+$11*2,y + sta.z renderBob.xpos + // [49] (byte) renderBob::ypos#3 ← *((const byte*) SIN_Y_TAB+(byte)(number) $11*(number) 2 + (byte) main::sin_y_idx#9) -- vbuyy=pbuc1_derefidx_vbuxx + ldy SIN_Y_TAB+$11*2,x + // [50] call renderBob + // [79] phi from main::@16 to renderBob [phi:main::@16->renderBob] + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#3 [phi:main::@16->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#3 [phi:main::@16->renderBob#1] -- register_copy + jsr renderBob + // main::@17 + // renderBob((SIN_X_TAB+15*1)[sin_x_idx], (SIN_Y_TAB+19*3)[sin_y_idx]) + // [51] (byte) renderBob::xpos#4 ← *((const byte*) SIN_X_TAB+(byte)(number) $f*(number) 1 + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z sin_x_idx + lda SIN_X_TAB+$f*1,y + sta.z renderBob.xpos + // [52] (byte) renderBob::ypos#4 ← *((const byte*) SIN_Y_TAB+(byte)(number) $13*(number) 3 + (byte) main::sin_y_idx#9) -- vbuyy=pbuc1_derefidx_vbuxx + ldy SIN_Y_TAB+$13*3,x + // [53] call renderBob + // [79] phi from main::@17 to renderBob [phi:main::@17->renderBob] + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#4 [phi:main::@17->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#4 [phi:main::@17->renderBob#1] -- register_copy + jsr renderBob + // main::@18 + // renderBob((SIN_X_TAB+13*0)[sin_x_idx], (SIN_Y_TAB+21*4)[sin_y_idx]) + // [54] (byte) renderBob::xpos#5 ← *((const byte*) SIN_X_TAB + (byte) main::sin_x_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z sin_x_idx lda SIN_X_TAB,y sta.z renderBob.xpos - // [16] (byte) renderBob::ypos#0 ← *((const byte*) SIN_Y_TAB + (byte) main::sin_y_idx#7) -- vbuxx=pbuc1_derefidx_vbuz1 - ldy.z sin_y_idx - ldx SIN_Y_TAB,y - // [17] call renderBob - // [27] phi from main::@3 to renderBob [phi:main::@3->renderBob] - // [27] phi (byte) renderBob::ypos#3 = (byte) renderBob::ypos#0 [phi:main::@3->renderBob#0] -- register_copy - // [27] phi (byte) renderBob::xpos#3 = (byte) renderBob::xpos#0 [phi:main::@3->renderBob#1] -- register_copy + // [55] (byte) renderBob::ypos#5 ← *((const byte*) SIN_Y_TAB+(byte)(number) $15*(number) 4 + (byte) main::sin_y_idx#9) -- vbuyy=pbuc1_derefidx_vbuxx + ldy SIN_Y_TAB+$15*4,x + // [56] call renderBob + // [79] phi from main::@18 to renderBob [phi:main::@18->renderBob] + // [79] phi (byte) renderBob::ypos#6 = (byte) renderBob::ypos#5 [phi:main::@18->renderBob#0] -- register_copy + // [79] phi (byte) renderBob::xpos#6 = (byte) renderBob::xpos#5 [phi:main::@18->renderBob#1] -- register_copy jsr renderBob - // main::@5 - // renderBob((SIN_X_TAB+15)[sin_x_idx], (SIN_Y_TAB+11)[sin_y_idx]) - // [18] (byte) renderBob::xpos#1 ← *((const byte*) SIN_X_TAB+(byte) $f + (byte) main::sin_x_idx#7) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z sin_x_idx - lda SIN_X_TAB+$f,y - sta.z renderBob.xpos - // [19] (byte) renderBob::ypos#1 ← *((const byte*) SIN_Y_TAB+(byte) $b + (byte) main::sin_y_idx#7) -- vbuxx=pbuc1_derefidx_vbuz1 - ldy.z sin_y_idx - ldx SIN_Y_TAB+$b,y - // [20] call renderBob - // [27] phi from main::@5 to renderBob [phi:main::@5->renderBob] - // [27] phi (byte) renderBob::ypos#3 = (byte) renderBob::ypos#1 [phi:main::@5->renderBob#0] -- register_copy - // [27] phi (byte) renderBob::xpos#3 = (byte) renderBob::xpos#1 [phi:main::@5->renderBob#1] -- register_copy - jsr renderBob - // main::@6 - // renderBob((SIN_X_TAB+22)[sin_x_idx], (SIN_Y_TAB+30)[sin_y_idx]) - // [21] (byte) renderBob::xpos#2 ← *((const byte*) SIN_X_TAB+(byte) $16 + (byte) main::sin_x_idx#7) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z sin_x_idx - lda SIN_X_TAB+$16,y - sta.z renderBob.xpos - // [22] (byte) renderBob::ypos#2 ← *((const byte*) SIN_Y_TAB+(byte) $1e + (byte) main::sin_y_idx#7) -- vbuxx=pbuc1_derefidx_vbuz1 - ldy.z sin_y_idx - ldx SIN_Y_TAB+$1e,y - // [23] call renderBob - // [27] phi from main::@6 to renderBob [phi:main::@6->renderBob] - // [27] phi (byte) renderBob::ypos#3 = (byte) renderBob::ypos#2 [phi:main::@6->renderBob#0] -- register_copy - // [27] phi (byte) renderBob::xpos#3 = (byte) renderBob::xpos#2 [phi:main::@6->renderBob#1] -- register_copy - jsr renderBob - // main::@7 + // main::@19 // sin_x_idx++; - // [24] (byte) main::sin_x_idx#1 ← ++ (byte) main::sin_x_idx#7 -- vbuz1=_inc_vbuz1 + // [57] (byte) main::sin_x_idx#1 ← ++ (byte) main::sin_x_idx#9 -- vbuz1=_inc_vbuz1 inc.z sin_x_idx // sin_y_idx++; - // [25] (byte) main::sin_y_idx#1 ← ++ (byte) main::sin_y_idx#7 -- vbuz1=_inc_vbuz1 - inc.z sin_y_idx + // [58] (byte) main::sin_y_idx#1 ← ++ (byte) main::sin_y_idx#9 -- vbuxx=_inc_vbuxx + inx // (*BORDERCOL)--; - // [26] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 + // [59] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [12] phi from main::@7 to main::@1 [phi:main::@7->main::@1] - // [12] phi (byte) main::sin_y_idx#7 = (byte) main::sin_y_idx#1 [phi:main::@7->main::@1#0] -- register_copy - // [12] phi (byte) main::sin_x_idx#7 = (byte) main::sin_x_idx#1 [phi:main::@7->main::@1#1] -- register_copy - jmp __b2 + // keyboard_key_pressed(KEY_SPACE) + // [60] call keyboard_key_pressed + // [70] phi from main::@19 to keyboard_key_pressed [phi:main::@19->keyboard_key_pressed] + jsr keyboard_key_pressed + // keyboard_key_pressed(KEY_SPACE) + // [61] (byte) keyboard_key_pressed::return#4 ← (byte) keyboard_key_pressed::return#0 + // main::@20 + // [62] (byte~) main::$25 ← (byte) keyboard_key_pressed::return#4 + // if(keyboard_key_pressed(KEY_SPACE)) + // [63] if((byte) 0!=(byte~) main::$25) goto main::vicSelectGfxBank2 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne vicSelectGfxBank2 + // [39] phi from main::@20 to main::@7 [phi:main::@20->main::@7] + // [39] phi (byte) main::sin_y_idx#9 = (byte) main::sin_y_idx#1 [phi:main::@20->main::@7#0] -- register_copy + // [39] phi (byte) main::sin_x_idx#9 = (byte) main::sin_x_idx#1 [phi:main::@20->main::@7#1] -- register_copy + jmp __b8 + // main::vicSelectGfxBank2 + vicSelectGfxBank2: + // *CIA2_PORT_A_DDR = %00000011 + // [64] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + lda #3 + sta CIA2_PORT_A_DDR + // [65] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001] + // main::vicSelectGfxBank2_toDd001 + // main::vicSelectGfxBank2_@1 + // *CIA2_PORT_A = toDd00(gfx) + // [66] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 + lda #vicSelectGfxBank2_toDd001_return + sta CIA2_PORT_A + // [67] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] + // main::toD0182 + // main::@11 + // *D018 = toD018(SCREEN_BASIC, CHARSET_BASIC) + // [68] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 + lda #toD0182_return + sta D018 + // main::@return + // } + // [69] return + rts +} + // keyboard_key_pressed +// Determines whether a specific key is currently pressed by accessing the matrix directly +// 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 +keyboard_key_pressed: { + .const colidx = KEY_SPACE&7 + .label rowidx = KEY_SPACE>>3 + // keyboard_matrix_read(rowidx) + // [71] call keyboard_matrix_read + jsr keyboard_matrix_read + // [72] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + // keyboard_key_pressed::@1 + // [73] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 + // keyboard_matrix_read(rowidx) & keyboard_matrix_col_bitmask[colidx] + // [74] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask+(const byte) keyboard_key_pressed::colidx#0) -- vbuaa=vbuaa_band__deref_pbuc1 + and keyboard_matrix_col_bitmask+colidx + // keyboard_key_pressed::@return + // } + // [75] return + rts +} + // keyboard_matrix_read +// 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. +// Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write +// leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. +keyboard_matrix_read: { + // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] + // [76] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx + sta CIA1_PORT_A + // ~*CIA1_PORT_B + // [77] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1_PORT_B + eor #$ff + // keyboard_matrix_read::@return + // } + // [78] return + rts } // renderBob // Render a single BOB at a given x/y-position // X-position is 0-151. Each x-position is 2 pixels wide. // Y-position is 0-183. Each y-position is 1 pixel high. -// renderBob(byte zeropage(4) xpos, byte register(X) ypos) +// renderBob(byte zeropage(4) xpos, byte register(Y) ypos) renderBob: { - .label __2 = $a - .label __4 = $a - .label __7 = $e + .label __2 = $d + .label __4 = $d + .label __7 = $c .label xpos = 4 - .label y_offset = $a - .label screen = $a - .label __10 = $c - .label __11 = $a + .label x_char_offset = 9 + .label y_offset = $d + .label screen = $d + .label bob_table_idx = $c + .label __10 = $a + .label __11 = $d // x_char_offset = xpos/BOB_SHIFTS_X - // [28] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#3 >> (byte) 2 -- vbuyy=vbuz1_ror_2 + // [80] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#6 >> (byte) 2 -- vbuz1=vbuz2_ror_2 lda.z xpos lsr lsr - tay + sta.z x_char_offset // y_char_offset = ypos/BOB_SHIFTS_Y - // [29] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#3 >> (byte) 3 -- vbuaa=vbuxx_ror_3 - txa + // [81] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#6 >> (byte) 3 -- vbuaa=vbuyy_ror_3 + tya lsr lsr lsr // (unsigned int)y_char_offset - // [30] (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 -- vwuz1=_word_vbuaa + // [82] (word~) renderBob::$2 ← (word)(byte) renderBob::y_char_offset#0 -- vwuz1=_word_vbuaa sta.z __2 lda #0 sta.z __2+1 // y_offset = (unsigned int)y_char_offset*40 - // [31] (word~) renderBob::$10 ← (word~) renderBob::$2 << (byte) 2 -- vwuz1=vwuz2_rol_2 + // [83] (word~) renderBob::$10 ← (word~) renderBob::$2 << (byte) 2 -- vwuz1=vwuz2_rol_2 lda.z __2 asl sta.z __10 @@ -4929,7 +6891,7 @@ renderBob: { sta.z __10+1 asl.z __10 rol.z __10+1 - // [32] (word~) renderBob::$11 ← (word~) renderBob::$10 + (word~) renderBob::$2 -- vwuz1=vwuz2_plus_vwuz1 + // [84] (word~) renderBob::$11 ← (word~) renderBob::$10 + (word~) renderBob::$2 -- vwuz1=vwuz2_plus_vwuz1 lda.z __11 clc adc.z __10 @@ -4937,25 +6899,25 @@ renderBob: { lda.z __11+1 adc.z __10+1 sta.z __11+1 - // [33] (word) renderBob::y_offset#0 ← (word~) renderBob::$11 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [85] (word) renderBob::y_offset#0 ← (word~) renderBob::$11 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z y_offset rol.z y_offset+1 asl.z y_offset rol.z y_offset+1 asl.z y_offset rol.z y_offset+1 - // SCREEN+y_offset - // [34] (byte*~) renderBob::$4 ← (const byte*) SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz1 + // BOB_SCREEN+y_offset + // [86] (byte*~) renderBob::$4 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __4 - adc #SCREEN + adc #>BOB_SCREEN sta.z __4+1 - // screen = SCREEN+y_offset+x_char_offset - // [35] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz1_plus_vbuyy - tya + // screen = BOB_SCREEN+y_offset+x_char_offset + // [87] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$4 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz1_plus_vbuz2 + lda.z x_char_offset clc adc.z screen sta.z screen @@ -4963,192 +6925,205 @@ renderBob: { inc.z screen+1 !: // ypos&7 - // [36] (byte~) renderBob::$6 ← (byte) renderBob::ypos#3 & (byte) 7 -- vbuaa=vbuxx_band_vbuc1 - txa + // [88] (byte~) renderBob::$6 ← (byte) renderBob::ypos#6 & (byte) 7 -- vbuaa=vbuyy_band_vbuc1 + tya and #7 // (ypos&7)*BOB_SHIFTS_X - // [37] (byte~) renderBob::$7 ← (byte~) renderBob::$6 << (byte) 2 -- vbuz1=vbuaa_rol_2 + // [89] (byte~) renderBob::$7 ← (byte~) renderBob::$6 << (byte) 2 -- vbuz1=vbuaa_rol_2 asl asl sta.z __7 // xpos&3 - // [38] (byte~) renderBob::$8 ← (byte) renderBob::xpos#3 & (byte) 3 -- vbuaa=vbuz1_band_vbuc1 + // [90] (byte~) renderBob::$8 ← (byte) renderBob::xpos#6 & (byte) 3 -- vbuaa=vbuz1_band_vbuc1 lda #3 and.z xpos // bob_table_idx = (ypos&7)*BOB_SHIFTS_X+(xpos&3) - // [39] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 -- vbuxx=vbuz1_plus_vbuaa + // [91] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$7 + (byte~) renderBob::$8 -- vbuz1=vbuz1_plus_vbuaa clc - adc.z __7 - tax + adc.z bob_table_idx + sta.z bob_table_idx // screen[0] = (BOB_TABLES+0*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [40] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -- _deref_pbuz1=pbuc1_derefidx_vbuxx - lda BOB_TABLES,x + // [92] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + tay + lda BOB_TABLES,y ldy #0 sta (screen),y // screen[40] = (BOB_TABLES+1*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [41] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+1*BOB_SUBTABLE_SIZE,x + // [93] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+1*BOB_SUBTABLE_SIZE,y ldy #$28 sta (screen),y // screen[80] = (BOB_TABLES+2*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [42] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+2*BOB_SUBTABLE_SIZE,x + // [94] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+2*BOB_SUBTABLE_SIZE,y ldy #$50 sta (screen),y // screen[1] = (BOB_TABLES+3*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [43] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+3*BOB_SUBTABLE_SIZE,x + // [95] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+3*BOB_SUBTABLE_SIZE,y ldy #1 sta (screen),y // screen[41] = (BOB_TABLES+4*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [44] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+4*BOB_SUBTABLE_SIZE,x + // [96] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+4*BOB_SUBTABLE_SIZE,y ldy #$29 sta (screen),y // screen[81] = (BOB_TABLES+5*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [45] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+5*BOB_SUBTABLE_SIZE,x + // [97] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+5*BOB_SUBTABLE_SIZE,y ldy #$51 sta (screen),y // screen[2] = (BOB_TABLES+6*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [46] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+6*BOB_SUBTABLE_SIZE,x + // [98] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+6*BOB_SUBTABLE_SIZE,y ldy #2 sta (screen),y // screen[42] = (BOB_TABLES+7*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [47] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+7*BOB_SUBTABLE_SIZE,x + // [99] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+7*BOB_SUBTABLE_SIZE,y ldy #$2a sta (screen),y // screen[82] = (BOB_TABLES+8*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [48] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx - lda BOB_TABLES+8*BOB_SUBTABLE_SIZE,x + // [100] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 + ldy.z bob_table_idx + lda BOB_TABLES+8*BOB_SUBTABLE_SIZE,y ldy #$52 sta (screen),y // renderBob::@return // } - // [49] return + // [101] return rts } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +// memset(void* zeropage(5) str) memset: { - .label str = SCREEN - .const c = 0 - .const num = $3e8 - .label end = str+num + .label end = $d .label dst = 5 - // [51] phi from memset to memset::@1 [phi:memset->memset::@1] - // [51] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 - lda #str - sta.z dst+1 + .label str = 5 // memset::@1 - __b1: - // for(char* dst = str; dst!=end; dst++) - // [52] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 - lda.z dst+1 - cmp #>end - bne __b2 - lda.z dst - cmp #$3e8 + sta.z end+1 + // [104] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [105] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [105] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy // memset::@2 __b2: + // for(char* dst = str; dst!=end; dst++) + // [106] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + lda.z dst+1 + cmp.z end+1 + bne __b3 + lda.z dst + cmp.z end + bne __b3 + // memset::@return + // } + // [107] return + rts + // memset::@3 + __b3: // *dst = c - // [54] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 - lda #c - ldy #0 + // [108] *((byte*) memset::dst#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + tay sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [55] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [109] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [51] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [51] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy - jmp __b1 + jmp __b2 } // prepareBobs // Creates the pre-shifted bobs into BOB_CHARSET and populates the BOB_TABLES // Modifies PROTO_BOB by shifting it around prepareBobs: { - .label bob_table = $a + .label bob_table = $d .label shift_y = 2 // Populate charset and tables .label bob_glyph = 5 - .label cell = 8 + .label cell = 7 .label bob_table_idx = 3 .label shift_x = 4 // bobCharsetFindOrAddGlyph(PROTO_BOB+48) - // [57] call bobCharsetFindOrAddGlyph - // [82] phi from prepareBobs to bobCharsetFindOrAddGlyph [phi:prepareBobs->bobCharsetFindOrAddGlyph] - // [82] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs->bobCharsetFindOrAddGlyph#0] -- pbuz1=pbuc1 + // [111] call bobCharsetFindOrAddGlyph + // [136] phi from prepareBobs to bobCharsetFindOrAddGlyph [phi:prepareBobs->bobCharsetFindOrAddGlyph] + // [136] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs->bobCharsetFindOrAddGlyph#0] -- pbuz1=pbuc1 lda #PROTO_BOB+$30 sta.z bobCharsetFindOrAddGlyph.bob_glyph+1 - // [82] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs->bobCharsetFindOrAddGlyph#1] -- vbuz1=vbuc1 + // [136] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs->bobCharsetFindOrAddGlyph#1] -- vbuz1=vbuc1 lda #0 sta.z bob_charset_next_id jsr bobCharsetFindOrAddGlyph - // [58] phi from prepareBobs to prepareBobs::@1 [phi:prepareBobs->prepareBobs::@1] - // [58] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs->prepareBobs::@1#0] -- vbuz1=vbuc1 + // [112] phi from prepareBobs to prepareBobs::@1 [phi:prepareBobs->prepareBobs::@1] + // [112] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs->prepareBobs::@1#0] -- vbuz1=vbuc1 lda #0 sta.z bob_table_idx - // [58] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs->prepareBobs::@1#1] -- register_copy - // [58] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs->prepareBobs::@1#2] -- vbuz1=vbuc1 + // [112] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs->prepareBobs::@1#1] -- register_copy + // [112] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs->prepareBobs::@1#2] -- vbuz1=vbuc1 sta.z shift_y // prepareBobs::@1 __b1: // for(char shift_y=0;shift_yprepareBobs::@2] + // [115] phi from prepareBobs::@1 to prepareBobs::@2 [phi:prepareBobs::@1->prepareBobs::@2] b1: - // [61] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy - // [61] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy - // [61] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#2] -- vbuz1=vbuc1 + // [115] phi (byte) bob_charset_next_id#29 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy + // [115] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy + // [115] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#2] -- vbuz1=vbuc1 lda #0 sta.z shift_x // prepareBobs::@2 __b2: // for(char shift_x=0;shift_xprepareBobs::@4] + // [117] phi from prepareBobs::@2 to prepareBobs::@4 [phi:prepareBobs::@2->prepareBobs::@4] // prepareBobs::@4 // shiftProtoBobDown() - // [64] call shiftProtoBobDown - // [117] phi from prepareBobs::@4 to shiftProtoBobDown [phi:prepareBobs::@4->shiftProtoBobDown] + // [118] call shiftProtoBobDown + // [171] phi from prepareBobs::@4 to shiftProtoBobDown [phi:prepareBobs::@4->shiftProtoBobDown] jsr shiftProtoBobDown // prepareBobs::@8 // for(char shift_y=0;shift_yprepareBobs::@1] - // [58] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@8->prepareBobs::@1#0] -- register_copy - // [58] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy - // [58] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@8->prepareBobs::@1#2] -- register_copy + // [112] phi from prepareBobs::@8 to prepareBobs::@1 [phi:prepareBobs::@8->prepareBobs::@1] + // [112] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@8->prepareBobs::@1#0] -- register_copy + // [112] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#29 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy + // [112] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@8->prepareBobs::@1#2] -- register_copy jmp __b1 // prepareBobs::@3 __b3: // bob_table = BOB_TABLES + bob_table_idx - // [66] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 -- pbuz1=pbuc1_plus_vbuz2 + // [120] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 -- pbuz1=pbuc1_plus_vbuz2 lda.z bob_table_idx clc adc #BOB_TABLES adc #0 sta.z bob_table+1 - // [67] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5] - // [67] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy - // [67] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy - // [67] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#2] -- pbuz1=pbuc1 + // [121] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5] + // [121] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy + // [121] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#29 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy + // [121] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#2] -- pbuz1=pbuc1 lda #PROTO_BOB sta.z bob_glyph+1 - // [67] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#3] -- vbuz1=vbuc1 + // [121] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#3] -- vbuz1=vbuc1 lda #0 sta.z cell // prepareBobs::@5 __b5: // for(char cell = 0; cell<9; cell++) - // [68] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 -- vbuz1_lt_vbuc1_then_la1 + // [122] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 -- vbuz1_lt_vbuc1_then_la1 lda.z cell cmp #9 bcc __b6 // prepareBobs::@7 // bob_table_idx++; - // [69] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 + // [123] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 inc.z bob_table_idx // shiftProtoBobRight() - // [70] call shiftProtoBobRight - // [100] phi from prepareBobs::@7 to shiftProtoBobRight [phi:prepareBobs::@7->shiftProtoBobRight] + // [124] call shiftProtoBobRight + // [154] phi from prepareBobs::@7 to shiftProtoBobRight [phi:prepareBobs::@7->shiftProtoBobRight] jsr shiftProtoBobRight - // [71] phi from prepareBobs::@7 to prepareBobs::@10 [phi:prepareBobs::@7->prepareBobs::@10] + // [125] phi from prepareBobs::@7 to prepareBobs::@10 [phi:prepareBobs::@7->prepareBobs::@10] // prepareBobs::@10 // shiftProtoBobRight() - // [72] call shiftProtoBobRight - // [100] phi from prepareBobs::@10 to shiftProtoBobRight [phi:prepareBobs::@10->shiftProtoBobRight] + // [126] call shiftProtoBobRight + // [154] phi from prepareBobs::@10 to shiftProtoBobRight [phi:prepareBobs::@10->shiftProtoBobRight] jsr shiftProtoBobRight // prepareBobs::@11 // for(char shift_x=0;shift_xprepareBobs::@2] - // [61] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@11->prepareBobs::@2#0] -- register_copy - // [61] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@11->prepareBobs::@2#1] -- register_copy - // [61] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@11->prepareBobs::@2#2] -- register_copy + // [115] phi from prepareBobs::@11 to prepareBobs::@2 [phi:prepareBobs::@11->prepareBobs::@2] + // [115] phi (byte) bob_charset_next_id#29 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@11->prepareBobs::@2#0] -- register_copy + // [115] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@11->prepareBobs::@2#1] -- register_copy + // [115] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@11->prepareBobs::@2#2] -- register_copy jmp __b2 // prepareBobs::@6 __b6: // bobCharsetFindOrAddGlyph(bob_glyph) - // [74] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 - // [75] call bobCharsetFindOrAddGlyph - // [82] phi from prepareBobs::@6 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph] - // [82] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#0] -- register_copy - // [82] phi (byte) bob_charset_next_id#23 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#1] -- register_copy + // [128] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + // [129] call bobCharsetFindOrAddGlyph + // [136] phi from prepareBobs::@6 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph] + // [136] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#0] -- register_copy + // [136] phi (byte) bob_charset_next_id#23 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#1] -- register_copy jsr bobCharsetFindOrAddGlyph // bobCharsetFindOrAddGlyph(bob_glyph) - // [76] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuaa=vbuz1 + // [130] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuaa=vbuz1 lda.z bobCharsetFindOrAddGlyph.glyph_id // prepareBobs::@9 - // [77] (byte~) prepareBobs::$5 ← (byte) bobCharsetFindOrAddGlyph::return#1 + // [131] (byte~) prepareBobs::$5 ← (byte) bobCharsetFindOrAddGlyph::return#1 // *bob_table = bobCharsetFindOrAddGlyph(bob_glyph) - // [78] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$5 -- _deref_pbuz1=vbuaa + // [132] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$5 -- _deref_pbuz1=vbuaa // Look for an existing char in BOB_CHARSET ldy #0 sta (bob_table),y // bob_glyph+=8 - // [79] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [133] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 // Move to the next glyph lda #8 clc @@ -5227,7 +7202,7 @@ prepareBobs: { inc.z bob_glyph+1 !: // bob_table += BOB_SHIFTS_X*BOB_SHIFTS_Y - // [80] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y -- pbuz1=pbuz1_plus_vbuc1 + // [134] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y -- pbuz1=pbuz1_plus_vbuc1 // Move to the next sub-table lda #BOB_SHIFTS_X*BOB_SHIFTS_Y clc @@ -5237,13 +7212,13 @@ prepareBobs: { inc.z bob_table+1 !: // for(char cell = 0; cell<9; cell++) - // [81] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 + // [135] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 inc.z cell - // [67] phi from prepareBobs::@9 to prepareBobs::@5 [phi:prepareBobs::@9->prepareBobs::@5] - // [67] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@9->prepareBobs::@5#0] -- register_copy - // [67] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@9->prepareBobs::@5#1] -- register_copy - // [67] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@9->prepareBobs::@5#2] -- register_copy - // [67] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@9->prepareBobs::@5#3] -- register_copy + // [121] phi from prepareBobs::@9 to prepareBobs::@5 [phi:prepareBobs::@9->prepareBobs::@5] + // [121] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@9->prepareBobs::@5#0] -- register_copy + // [121] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@9->prepareBobs::@5#1] -- register_copy + // [121] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@9->prepareBobs::@5#2] -- register_copy + // [121] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@9->prepareBobs::@5#3] -- register_copy jmp __b5 } // bobCharsetFindOrAddGlyph @@ -5253,77 +7228,77 @@ prepareBobs: { // bobCharsetFindOrAddGlyph(byte* zeropage(5) bob_glyph) bobCharsetFindOrAddGlyph: { .label bob_glyph = 5 - .label i = 7 - .label glyph_id = 9 - .label glyph_cursor = $c - // [83] phi from bobCharsetFindOrAddGlyph to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1] - // [83] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (const byte*) BOB_CHARSET [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#0] -- pbuz1=pbuc1 + .label i = $c + .label glyph_id = 8 + .label glyph_cursor = $a + // [137] phi from bobCharsetFindOrAddGlyph to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1] + // [137] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (const byte*) BOB_CHARSET [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#0] -- pbuz1=pbuc1 lda #BOB_CHARSET sta.z glyph_cursor+1 - // [83] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) 0 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#1] -- vbuz1=vbuc1 + // [137] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) 0 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#1] -- vbuz1=vbuc1 lda #0 sta.z glyph_id // bobCharsetFindOrAddGlyph::@1 __b1: // while(glyph_id!=bob_charset_next_id) - // [84] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 -- vbuz1_neq_vbuz2_then_la1 + // [138] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 -- vbuz1_neq_vbuz2_then_la1 lda.z glyph_id cmp.z bob_charset_next_id bne b1 - // [85] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7] - // [85] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7#0] -- vbuyy=vbuc1 + // [139] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7] + // [139] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7#0] -- vbuyy=vbuc1 ldy #0 // Not found - add it // bobCharsetFindOrAddGlyph::@7 __b7: // for(char i=0;i<8;i++) - // [86] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 -- vbuyy_lt_vbuc1_then_la1 + // [140] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 -- vbuyy_lt_vbuc1_then_la1 cpy #8 bcc __b8 // bobCharsetFindOrAddGlyph::@9 // bob_charset_next_id++; - // [87] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 + // [141] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 inc.z bob_charset_next_id - // [88] phi from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 to bobCharsetFindOrAddGlyph::@return [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return] - // [88] phi (byte) bob_charset_next_id#16 = (byte) bob_charset_next_id#23 [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return#0] -- register_copy + // [142] phi from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 to bobCharsetFindOrAddGlyph::@return [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return] + // [142] phi (byte) bob_charset_next_id#16 = (byte) bob_charset_next_id#23 [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return#0] -- register_copy // bobCharsetFindOrAddGlyph::@return // } - // [89] return + // [143] return rts // bobCharsetFindOrAddGlyph::@8 __b8: // glyph_cursor[i]=bob_glyph[i] - // [90] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) -- pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy + // [144] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) -- pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy lda (bob_glyph),y sta (glyph_cursor),y // for(char i=0;i<8;i++) - // [91] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 -- vbuyy=_inc_vbuyy + // [145] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 -- vbuyy=_inc_vbuyy iny - // [85] phi from bobCharsetFindOrAddGlyph::@8 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7] - // [85] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) bobCharsetFindOrAddGlyph::i1#1 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7#0] -- register_copy + // [139] phi from bobCharsetFindOrAddGlyph::@8 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7] + // [139] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) bobCharsetFindOrAddGlyph::i1#1 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7#0] -- register_copy jmp __b7 - // [92] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2] + // [146] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2] b1: - // [92] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2#0] -- vbuz1=vbuc1 + // [146] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2#0] -- vbuz1=vbuc1 lda #0 sta.z i // bobCharsetFindOrAddGlyph::@2 __b2: // for(char i=0;i<8;i++) - // [93] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 -- vbuz1_lt_vbuc1_then_la1 + // [147] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #8 bcc __b3 - // [95] phi from bobCharsetFindOrAddGlyph::@2 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5] - // [95] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 1 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 + // [149] phi from bobCharsetFindOrAddGlyph::@2 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5] + // [149] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 1 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 lda #1 jmp __b5 // bobCharsetFindOrAddGlyph::@3 __b3: // if(glyph_cursor[i]!=bob_glyph[i]) - // [94] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 -- pbuz1_derefidx_vbuz2_eq_pbuz3_derefidx_vbuz2_then_la1 + // [148] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 -- pbuz1_derefidx_vbuz2_eq_pbuz3_derefidx_vbuz2_then_la1 ldy.z i lda (glyph_cursor),y tax @@ -5332,23 +7307,23 @@ bobCharsetFindOrAddGlyph: { sty.z $ff cpx.z $ff beq __b4 - // [95] phi from bobCharsetFindOrAddGlyph::@3 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5] - // [95] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 + // [149] phi from bobCharsetFindOrAddGlyph::@3 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5] + // [149] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 lda #0 // bobCharsetFindOrAddGlyph::@5 __b5: // if(found) - // [96] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 -- vbuc1_eq_vbuaa_then_la1 + // [150] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 -- vbuc1_eq_vbuaa_then_la1 cmp #0 beq __b6 rts // bobCharsetFindOrAddGlyph::@6 __b6: // glyph_id++; - // [97] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=_inc_vbuz1 + // [151] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=_inc_vbuz1 inc.z glyph_id // glyph_cursor +=8 - // [98] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [152] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z glyph_cursor @@ -5356,107 +7331,107 @@ bobCharsetFindOrAddGlyph: { bcc !+ inc.z glyph_cursor+1 !: - // [83] phi from bobCharsetFindOrAddGlyph::@6 to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1] - // [83] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#0] -- register_copy - // [83] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) bobCharsetFindOrAddGlyph::glyph_id#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#1] -- register_copy + // [137] phi from bobCharsetFindOrAddGlyph::@6 to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1] + // [137] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#0] -- register_copy + // [137] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) bobCharsetFindOrAddGlyph::glyph_id#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#1] -- register_copy jmp __b1 // bobCharsetFindOrAddGlyph::@4 __b4: // for(char i=0;i<8;i++) - // [99] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 -- vbuz1=_inc_vbuz1 + // [153] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [92] phi from bobCharsetFindOrAddGlyph::@4 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2] - // [92] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) bobCharsetFindOrAddGlyph::i#1 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2#0] -- register_copy + // [146] phi from bobCharsetFindOrAddGlyph::@4 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2] + // [146] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) bobCharsetFindOrAddGlyph::i#1 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2#0] -- register_copy jmp __b2 } // shiftProtoBobRight // Shift PROTO_BOB right one X pixel shiftProtoBobRight: { - .label carry = 9 - .label i = 8 - // [101] phi from shiftProtoBobRight to shiftProtoBobRight::@1 [phi:shiftProtoBobRight->shiftProtoBobRight::@1] - // [101] phi (byte) shiftProtoBobRight::carry#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#0] -- vbuyy=vbuc1 + .label carry = 8 + .label i = 7 + // [155] phi from shiftProtoBobRight to shiftProtoBobRight::@1 [phi:shiftProtoBobRight->shiftProtoBobRight::@1] + // [155] phi (byte) shiftProtoBobRight::carry#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#0] -- vbuyy=vbuc1 ldy #0 - // [101] phi (byte) shiftProtoBobRight::j#3 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#1] -- vbuxx=vbuc1 + // [155] phi (byte) shiftProtoBobRight::j#3 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#1] -- vbuxx=vbuc1 ldx #0 - // [101] phi (byte) shiftProtoBobRight::i#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#2] -- vbuz1=vbuc1 + // [155] phi (byte) shiftProtoBobRight::i#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#2] -- vbuz1=vbuc1 txa sta.z i // shiftProtoBobRight::@1 __b1: // for(char i=0;i<3*3*8;i++) - // [102] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 -- vbuz1_lt_vbuc1_then_la1 + // [156] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #3*3*8 bcc __b2 // shiftProtoBobRight::@return // } - // [103] return + // [157] return rts // shiftProtoBobRight::@2 __b2: // PROTO_BOB[j]&1 - // [104] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_band_vbuc2 + // [158] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_band_vbuc2 lda #1 and PROTO_BOB,x // (PROTO_BOB[j]&1)?0x80ub:0ub - // [105] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 -- vbuc1_neq_vbuaa_then_la1 + // [159] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne __b3 - // [107] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4] - // [107] phi (byte) shiftProtoBobRight::carry#1 = (byte) 0 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 + // [161] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4] + // [161] phi (byte) shiftProtoBobRight::carry#1 = (byte) 0 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 lda #0 sta.z carry jmp __b4 - // [106] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@3 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@3] + // [160] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@3 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@3] // shiftProtoBobRight::@3 __b3: - // [107] phi from shiftProtoBobRight::@3 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4] - // [107] phi (byte) shiftProtoBobRight::carry#1 = (byte) $80 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 + // [161] phi from shiftProtoBobRight::@3 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4] + // [161] phi (byte) shiftProtoBobRight::carry#1 = (byte) $80 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 lda #$80 sta.z carry // shiftProtoBobRight::@4 __b4: // PROTO_BOB[j]>>1 - // [108] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1 + // [162] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1 lda PROTO_BOB,x lsr // PROTO_BOB[j]>>1 | carry - // [109] (byte~) shiftProtoBobRight::$6 ← (byte~) shiftProtoBobRight::$5 | (byte) shiftProtoBobRight::carry#2 -- vbuaa=vbuaa_bor_vbuyy + // [163] (byte~) shiftProtoBobRight::$6 ← (byte~) shiftProtoBobRight::$5 | (byte) shiftProtoBobRight::carry#2 -- vbuaa=vbuaa_bor_vbuyy sty.z $ff ora.z $ff // PROTO_BOB[j] = PROTO_BOB[j]>>1 | carry - // [110] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 -- pbuc1_derefidx_vbuxx=vbuaa + // [164] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 -- pbuc1_derefidx_vbuxx=vbuaa // Shift value and add old carry sta PROTO_BOB,x // if(j>=48) - // [111] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 -- vbuxx_ge_vbuc1_then_la1 + // [165] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 -- vbuxx_ge_vbuc1_then_la1 // Increment j to iterate over the PROTO_BOB left-to-right, top-to-bottom (0, 24, 48, 1, 25, 49, ...) cpx #$30 bcs __b5 // shiftProtoBobRight::@7 // j+=24 - // [112] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 -- vbuxx=vbuxx_plus_vbuc1 + // [166] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 -- vbuxx=vbuxx_plus_vbuc1 txa axs #-[$18] - // [113] phi from shiftProtoBobRight::@5 shiftProtoBobRight::@7 to shiftProtoBobRight::@6 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6] - // [113] phi (byte) shiftProtoBobRight::j#10 = (byte) shiftProtoBobRight::j#1 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6#0] -- register_copy + // [167] phi from shiftProtoBobRight::@5 shiftProtoBobRight::@7 to shiftProtoBobRight::@6 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6] + // [167] phi (byte) shiftProtoBobRight::j#10 = (byte) shiftProtoBobRight::j#1 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6#0] -- register_copy // shiftProtoBobRight::@6 __b6: // for(char i=0;i<3*3*8;i++) - // [114] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 -- vbuz1=_inc_vbuz1 + // [168] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [115] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 -- vbuyy=vbuz1 + // [169] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 -- vbuyy=vbuz1 ldy.z carry - // [101] phi from shiftProtoBobRight::@6 to shiftProtoBobRight::@1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1] - // [101] phi (byte) shiftProtoBobRight::carry#2 = (byte) shiftProtoBobRight::carry#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#0] -- register_copy - // [101] phi (byte) shiftProtoBobRight::j#3 = (byte) shiftProtoBobRight::j#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#1] -- register_copy - // [101] phi (byte) shiftProtoBobRight::i#2 = (byte) shiftProtoBobRight::i#1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#2] -- register_copy + // [155] phi from shiftProtoBobRight::@6 to shiftProtoBobRight::@1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1] + // [155] phi (byte) shiftProtoBobRight::carry#2 = (byte) shiftProtoBobRight::carry#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#0] -- register_copy + // [155] phi (byte) shiftProtoBobRight::j#3 = (byte) shiftProtoBobRight::j#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#1] -- register_copy + // [155] phi (byte) shiftProtoBobRight::i#2 = (byte) shiftProtoBobRight::i#1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#2] -- register_copy jmp __b1 // shiftProtoBobRight::@5 __b5: // j-=47 - // [116] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f -- vbuxx=vbuxx_minus_vbuc1 + // [170] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f -- vbuxx=vbuxx_minus_vbuc1 txa axs #$2f jmp __b6 @@ -5465,52 +7440,56 @@ shiftProtoBobRight: { // Shift PROTO_BOB down one Y pixel // At the same time restore PROTO_BOB X by shifting 8 pixels left shiftProtoBobDown: { - // [118] phi from shiftProtoBobDown to shiftProtoBobDown::@1 [phi:shiftProtoBobDown->shiftProtoBobDown::@1] - // [118] phi (byte) shiftProtoBobDown::i#2 = (byte) $17 [phi:shiftProtoBobDown->shiftProtoBobDown::@1#0] -- vbuxx=vbuc1 + // [172] phi from shiftProtoBobDown to shiftProtoBobDown::@1 [phi:shiftProtoBobDown->shiftProtoBobDown::@1] + // [172] phi (byte) shiftProtoBobDown::i#2 = (byte) $17 [phi:shiftProtoBobDown->shiftProtoBobDown::@1#0] -- vbuxx=vbuc1 ldx #$17 // shiftProtoBobDown::@1 __b1: // for(char i=23;i>0;i--) - // [119] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 -- vbuxx_gt_0_then_la1 + // [173] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 -- vbuxx_gt_0_then_la1 cpx #0 bne __b2 // shiftProtoBobDown::@3 // PROTO_BOB[0] = 0 - // [120] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [174] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PROTO_BOB // PROTO_BOB[24] = 0 - // [121] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [175] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta PROTO_BOB+$18 // PROTO_BOB[48] = 0 - // [122] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [176] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta PROTO_BOB+$30 // shiftProtoBobDown::@return // } - // [123] return + // [177] return rts // shiftProtoBobDown::@2 __b2: // PROTO_BOB[i] = (PROTO_BOB+23)[i] - // [124] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [178] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda PROTO_BOB+$17,x sta PROTO_BOB,x // (PROTO_BOB+24)[i] = (PROTO_BOB+47)[i] - // [125] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [179] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda PROTO_BOB+$2f,x sta PROTO_BOB+$18,x // (PROTO_BOB+48)[i] = 0x00 - // [126] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [180] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta PROTO_BOB+$30,x // for(char i=23;i>0;i--) - // [127] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 -- vbuxx=_dec_vbuxx + // [181] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 -- vbuxx=_dec_vbuxx dex - // [118] phi from shiftProtoBobDown::@2 to shiftProtoBobDown::@1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1] - // [118] phi (byte) shiftProtoBobDown::i#2 = (byte) shiftProtoBobDown::i#1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1#0] -- register_copy + // [172] phi from shiftProtoBobDown::@2 to shiftProtoBobDown::@1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1] + // [172] phi (byte) shiftProtoBobDown::i#2 = (byte) shiftProtoBobDown::i#1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1#0] -- register_copy jmp __b1 } // File Data + // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) + keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f + // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) + keyboard_matrix_col_bitmask: .byte 1, 2, 4, 8, $10, $20, $40, $80 // The prototype BOB (a 3x3 char image with a bob image in the upper 2x2 chars) // The chars are layout as follows with data in chars 0, 1, 3, 4 initially // 0 3 6 diff --git a/src/test/ref/complex/prebob/prebob.sym b/src/test/ref/complex/prebob/prebob.sym index a06ebd461..09958edf0 100644 --- a/src/test/ref/complex/prebob/prebob.sym +++ b/src/test/ref/complex/prebob/prebob.sym @@ -1,22 +1,31 @@ (label) @1 (label) @begin (label) @end -(const byte*) BOB_CHARSET = (byte*) 24576 +(const byte*) BOB_CHARSET = (byte*) 16384 +(const byte*) BOB_SCREEN = (byte*) 18432 (const byte) BOB_SHIFTS_X = (number) 4 (const byte) BOB_SHIFTS_Y = (number) 8 (const byte) BOB_SUBTABLE_SIZE = (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y (const byte*) BOB_TABLES = { fill( 9*8*4, 0) } (const byte*) BORDERCOL = (byte*) 53280 +(const byte*) CHARSET_BASIC = (byte*) 4096 +(const byte*) CIA1_PORT_A = (byte*) 56320 +(const byte*) CIA1_PORT_B = (byte*) 56321 (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 (const byte*) D018 = (byte*) 53272 +(const byte) KEY_SPACE = (number) $3c (const byte*) PROTO_BOB = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) .for (var x=0;x<3; x++) .for (var y=0; y<24; y++) .byte pic.getSinglecolorByte(x,y) }} +(const byte) RADIX::BINARY = (number) 2 +(const byte) RADIX::DECIMAL = (number) $a +(const byte) RADIX::HEXADECIMAL = (number) $10 +(const byte) RADIX::OCTAL = (number) 8 (const byte*) RASTER = (byte*) 53266 -(const byte*) SCREEN = (byte*) 16384 +(const byte*) SCREEN_BASIC = (byte*) 1024 (const byte*) SIN_X_TAB = kickasm {{ .fill $200, 75.5+75.5*sin(i*2*PI/256) }} (const byte*) SIN_Y_TAB = kickasm {{ .fill $200, 91.5+91.5*sin(i*2*PI/256) }} (byte()) bobCharsetFindOrAddGlyph((byte*) bobCharsetFindOrAddGlyph::bob_glyph) @@ -36,68 +45,132 @@ (byte) bobCharsetFindOrAddGlyph::found (byte) bobCharsetFindOrAddGlyph::found#2 reg byte a 10001.0 (byte*) bobCharsetFindOrAddGlyph::glyph_cursor -(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 glyph_cursor zp[2]:12 20002.0 -(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 glyph_cursor zp[2]:12 10000.307692307691 +(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 glyph_cursor zp[2]:10 20002.0 +(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 glyph_cursor zp[2]:10 10000.307692307691 (byte) bobCharsetFindOrAddGlyph::glyph_id -(byte) bobCharsetFindOrAddGlyph::glyph_id#1 glyph_id zp[1]:9 10001.0 -(byte) bobCharsetFindOrAddGlyph::glyph_id#11 glyph_id zp[1]:9 1937.75 +(byte) bobCharsetFindOrAddGlyph::glyph_id#1 glyph_id zp[1]:8 10001.0 +(byte) bobCharsetFindOrAddGlyph::glyph_id#11 glyph_id zp[1]:8 1937.75 (byte) bobCharsetFindOrAddGlyph::i -(byte) bobCharsetFindOrAddGlyph::i#1 i zp[1]:7 200002.0 -(byte) bobCharsetFindOrAddGlyph::i#2 i zp[1]:7 166668.3333333333 +(byte) bobCharsetFindOrAddGlyph::i#1 i zp[1]:12 200002.0 +(byte) bobCharsetFindOrAddGlyph::i#2 i zp[1]:12 166668.3333333333 (byte) bobCharsetFindOrAddGlyph::i1 (byte) bobCharsetFindOrAddGlyph::i1#1 reg byte y 20002.0 (byte) bobCharsetFindOrAddGlyph::i1#2 reg byte y 16668.333333333332 (byte) bobCharsetFindOrAddGlyph::return (byte) bobCharsetFindOrAddGlyph::return#1 reg byte a 2002.0 (byte) bob_charset_next_id -(byte) bob_charset_next_id#14 bob_charset_next_id zp[1]:14 12.0 -(byte) bob_charset_next_id#16 bob_charset_next_id zp[1]:14 1100.6000000000001 -(byte) bob_charset_next_id#21 bob_charset_next_id zp[1]:14 275.5 -(byte) bob_charset_next_id#23 bob_charset_next_id zp[1]:14 1400.3333333333335 -(byte) bob_charset_next_id#30 bob_charset_next_id zp[1]:14 37.33333333333333 -(byte) bob_charset_next_id#8 bob_charset_next_id zp[1]:14 4.0 +(byte) bob_charset_next_id#14 bob_charset_next_id zp[1]:9 12.0 +(byte) bob_charset_next_id#16 bob_charset_next_id zp[1]:9 1100.6000000000001 +(byte) bob_charset_next_id#21 bob_charset_next_id zp[1]:9 275.5 +(byte) bob_charset_next_id#23 bob_charset_next_id zp[1]:9 1400.3333333333335 +(byte) bob_charset_next_id#29 bob_charset_next_id zp[1]:9 37.33333333333333 +(byte) bob_charset_next_id#8 bob_charset_next_id zp[1]:9 4.0 +(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) +(byte~) keyboard_key_pressed::$2 reg byte a 4.0 +(label) keyboard_key_pressed::@1 +(label) keyboard_key_pressed::@return +(byte) keyboard_key_pressed::colidx +(const byte) keyboard_key_pressed::colidx#0 colidx = (const byte) KEY_SPACE&(byte) 7 +(byte) keyboard_key_pressed::key +(byte) keyboard_key_pressed::return +(byte) keyboard_key_pressed::return#0 reg byte a 7.000000000000001 +(byte) keyboard_key_pressed::return#2 reg byte a 22.0 +(byte) keyboard_key_pressed::return#3 reg byte a 22.0 +(byte) keyboard_key_pressed::return#4 reg byte a 22.0 +(byte) keyboard_key_pressed::rowidx +(const byte) keyboard_key_pressed::rowidx#0 rowidx = (const byte) KEY_SPACE>>(byte) 3 +(const byte*) keyboard_matrix_col_bitmask = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } +(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 +(const byte*) keyboard_matrix_row_bitmask = { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f } (void()) main() +(byte~) main::$14 reg byte a 22.0 +(byte~) main::$16 reg byte a 22.0 +(byte~) main::$25 reg byte a 22.0 +(byte~) main::$30 reg byte a 202.0 +(byte~) main::$31 reg byte a 202.0 +(byte~) main::$33 reg byte a 202.0 +(byte~) main::$34 reg byte a 202.0 +(byte~) main::$7 reg byte a 202.0 +(byte~) main::$9 reg byte a 202.0 (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::@20 (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::sin_x_idx -(byte) main::sin_x_idx#1 sin_x_idx zp[1]:2 7.333333333333333 -(byte) main::sin_x_idx#7 sin_x_idx zp[1]:2 4.583333333333333 +(byte) main::sin_x_idx#1 sin_x_idx zp[1]:3 3.142857142857143 +(byte) main::sin_x_idx#9 sin_x_idx zp[1]:3 4.277777777777779 (byte) main::sin_y_idx -(byte) main::sin_y_idx#1 sin_y_idx zp[1]:3 11.0 -(byte) main::sin_y_idx#7 sin_y_idx zp[1]:3 4.230769230769231 +(byte) main::sin_y_idx#1 reg byte x 3.6666666666666665 +(byte) main::sin_y_idx#9 reg byte x 4.052631578947368 (label) main::toD0181 (byte*) main::toD0181_gfx (byte) main::toD0181_return -(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) BOB_CHARSET/(byte) 4&(byte) $f +(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) BOB_SCREEN&(word) $3fff*(byte) 4 (byte*) main::toD0181_screen +(label) main::toD0182 +(byte*) main::toD0182_gfx +(byte) main::toD0182_return +(const byte) main::toD0182_return#0 toD0182_return = >(word)(const byte*) SCREEN_BASIC&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET_BASIC/(byte) 4&(byte) $f +(byte*) main::toD0182_screen (label) main::vicSelectGfxBank1 (label) main::vicSelectGfxBank1_@1 (byte*) main::vicSelectGfxBank1_gfx (label) main::vicSelectGfxBank1_toDd001 (byte*) main::vicSelectGfxBank1_toDd001_gfx (byte) main::vicSelectGfxBank1_toDd001_return -(const byte) main::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte) 3^>(word)(const byte*) SCREEN/(byte) $40 +(const byte) main::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte) 3^>(word)(const byte*) BOB_SCREEN/(byte) $40 +(label) main::vicSelectGfxBank2 +(label) main::vicSelectGfxBank2_@1 +(byte*) main::vicSelectGfxBank2_gfx +(label) main::vicSelectGfxBank2_toDd001 +(byte*) main::vicSelectGfxBank2_toDd001_gfx +(byte) main::vicSelectGfxBank2_toDd001_return +(const byte) main::vicSelectGfxBank2_toDd001_return#0 vicSelectGfxBank2_toDd001_return = (byte) 3 +(byte) main::x +(byte) main::x#1 x zp[1]:2 16.5 +(byte) main::x#4 x zp[1]:2 25.0 +(byte) main::y +(byte) main::y#1 reg byte x 151.5 +(byte) main::y#2 reg byte x 50.5 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 +(label) memset::@3 (label) memset::@return (byte) memset::c -(const byte) memset::c#0 c = (byte) 0 (byte*) memset::dst (byte*) memset::dst#1 dst zp[2]:5 22.0 -(byte*) memset::dst#2 dst zp[2]:5 14.666666666666666 +(byte*) memset::dst#2 dst zp[2]:5 15.333333333333332 +(byte*) memset::dst#4 dst zp[2]:5 4.0 (byte*) memset::end -(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 +(byte*) memset::end#0 end zp[2]:13 2.1666666666666665 (word) memset::num -(const word) memset::num#0 num = (word) $3e8 (void*) memset::return (void*) memset::str -(const void*) memset::str#0 str = (void*)(const byte*) SCREEN +(void*) memset::str#3 str zp[2]:5 (void()) prepareBobs() (byte~) prepareBobs::$5 reg byte a 2002.0 (label) prepareBobs::@1 @@ -116,16 +189,16 @@ (byte*) prepareBobs::bob_glyph#1 bob_glyph zp[2]:5 667.3333333333334 (byte*) prepareBobs::bob_glyph#2 bob_glyph zp[2]:5 429.0 (byte*) prepareBobs::bob_table -(byte*) prepareBobs::bob_table#0 bob_table zp[2]:10 202.0 -(byte*) prepareBobs::bob_table#1 bob_table zp[2]:10 1001.0 -(byte*) prepareBobs::bob_table#2 bob_table zp[2]:10 388.0 +(byte*) prepareBobs::bob_table#0 bob_table zp[2]:13 202.0 +(byte*) prepareBobs::bob_table#1 bob_table zp[2]:13 1001.0 +(byte*) prepareBobs::bob_table#2 bob_table zp[2]:13 388.0 (byte) prepareBobs::bob_table_idx (byte) prepareBobs::bob_table_idx#1 bob_table_idx zp[1]:3 40.4 (byte) prepareBobs::bob_table_idx#12 bob_table_idx zp[1]:3 20.3125 (byte) prepareBobs::bob_table_idx#6 bob_table_idx zp[1]:3 11.0 (byte) prepareBobs::cell -(byte) prepareBobs::cell#1 cell zp[1]:8 2002.0 -(byte) prepareBobs::cell#2 cell zp[1]:8 333.6666666666667 +(byte) prepareBobs::cell#1 cell zp[1]:7 2002.0 +(byte) prepareBobs::cell#2 cell zp[1]:7 333.6666666666667 (byte) prepareBobs::shift_x (byte) prepareBobs::shift_x#1 shift_x zp[1]:4 202.0 (byte) prepareBobs::shift_x#2 shift_x zp[1]:4 17.823529411764707 @@ -133,34 +206,40 @@ (byte) prepareBobs::shift_y#1 shift_y zp[1]:2 22.0 (byte) prepareBobs::shift_y#2 shift_y zp[1]:2 1.5 (void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos) -(word~) renderBob::$10 zp[2]:12 4.0 -(word~) renderBob::$11 zp[2]:10 4.0 -(word~) renderBob::$2 zp[2]:10 3.0 -(byte*~) renderBob::$4 zp[2]:10 4.0 +(word~) renderBob::$10 zp[2]:10 4.0 +(word~) renderBob::$11 zp[2]:13 4.0 +(word~) renderBob::$2 zp[2]:13 3.0 +(byte*~) renderBob::$4 zp[2]:13 4.0 (byte~) renderBob::$6 reg byte a 4.0 -(byte~) renderBob::$7 zp[1]:14 2.0 +(byte~) renderBob::$7 zp[1]:12 2.0 (byte~) renderBob::$8 reg byte a 4.0 (label) renderBob::@return (byte) renderBob::bob_table_idx -(byte) renderBob::bob_table_idx#0 reg byte x 2.2222222222222228 +(byte) renderBob::bob_table_idx#0 bob_table_idx zp[1]:12 2.2222222222222228 (byte*) renderBob::screen -(byte*) renderBob::screen#0 screen zp[2]:10 1.5384615384615383 +(byte*) renderBob::screen#0 screen zp[2]:13 1.5384615384615383 (byte) renderBob::x_char_offset -(byte) renderBob::x_char_offset#0 reg byte y 0.5714285714285714 +(byte) renderBob::x_char_offset#0 x_char_offset zp[1]:9 0.5714285714285714 (byte) renderBob::xpos -(byte) renderBob::xpos#0 xpos zp[1]:4 11.0 +(byte) renderBob::xpos#0 xpos zp[1]:4 40.4 (byte) renderBob::xpos#1 xpos zp[1]:4 11.0 (byte) renderBob::xpos#2 xpos zp[1]:4 11.0 -(byte) renderBob::xpos#3 xpos zp[1]:4 3.3636363636363633 +(byte) renderBob::xpos#3 xpos zp[1]:4 11.0 +(byte) renderBob::xpos#4 xpos zp[1]:4 11.0 +(byte) renderBob::xpos#5 xpos zp[1]:4 11.0 +(byte) renderBob::xpos#6 xpos zp[1]:4 14.545454545454545 (byte) renderBob::y_char_offset (byte) renderBob::y_char_offset#0 reg byte a 2.0 (word) renderBob::y_offset -(word) renderBob::y_offset#0 y_offset zp[2]:10 4.0 +(word) renderBob::y_offset#0 y_offset zp[2]:13 4.0 (byte) renderBob::ypos -(byte) renderBob::ypos#0 reg byte x 22.0 -(byte) renderBob::ypos#1 reg byte x 22.0 -(byte) renderBob::ypos#2 reg byte x 22.0 -(byte) renderBob::ypos#3 reg byte x 4.111111111111112 +(byte) renderBob::ypos#0 reg byte y 202.0 +(byte) renderBob::ypos#1 reg byte y 22.0 +(byte) renderBob::ypos#2 reg byte y 22.0 +(byte) renderBob::ypos#3 reg byte y 22.0 +(byte) renderBob::ypos#4 reg byte y 22.0 +(byte) renderBob::ypos#5 reg byte y 22.0 +(byte) renderBob::ypos#6 reg byte y 17.77777777777777 (void()) shiftProtoBobDown() (label) shiftProtoBobDown::@1 (label) shiftProtoBobDown::@2 @@ -182,12 +261,12 @@ (label) shiftProtoBobRight::@7 (label) shiftProtoBobRight::@return (byte) shiftProtoBobRight::carry -(byte) shiftProtoBobRight::carry#1 carry zp[1]:9 111.22222222222223 +(byte) shiftProtoBobRight::carry#1 carry zp[1]:8 111.22222222222223 (byte) shiftProtoBobRight::carry#10 reg byte y 2002.0 (byte) shiftProtoBobRight::carry#2 reg byte y 286.0 (byte) shiftProtoBobRight::i -(byte) shiftProtoBobRight::i#1 i zp[1]:8 1001.0 -(byte) shiftProtoBobRight::i#2 i zp[1]:8 231.0 +(byte) shiftProtoBobRight::i#1 i zp[1]:7 1001.0 +(byte) shiftProtoBobRight::i#2 i zp[1]:7 231.0 (byte) shiftProtoBobRight::j (byte) shiftProtoBobRight::j#1 reg byte x 2002.0 (byte) shiftProtoBobRight::j#10 reg byte x 1001.0 @@ -195,27 +274,43 @@ (byte) shiftProtoBobRight::j#3 reg byte x 700.7 (byte) shiftProtoBobRight::new_carry -reg byte x [ renderBob::ypos#3 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#0 ] -zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::sin_x_idx#7 main::sin_x_idx#1 ] -zp[1]:3 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 main::sin_y_idx#7 main::sin_y_idx#1 ] -zp[1]:4 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 renderBob::xpos#3 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#0 ] -zp[2]:5 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 memset::dst#2 memset::dst#1 ] +reg byte x [ main::y#2 main::y#1 ] +reg byte x [ main::sin_y_idx#9 main::sin_y_idx#1 ] +reg byte y [ renderBob::ypos#6 renderBob::ypos#0 renderBob::ypos#1 renderBob::ypos#2 renderBob::ypos#3 renderBob::ypos#4 renderBob::ypos#5 ] +zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::x#4 main::x#1 ] +zp[1]:3 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 main::sin_x_idx#9 main::sin_x_idx#1 ] +zp[1]:4 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 renderBob::xpos#6 renderBob::xpos#0 renderBob::xpos#1 renderBob::xpos#2 renderBob::xpos#3 renderBob::xpos#4 renderBob::xpos#5 ] +zp[2]:5 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] reg byte y [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] -zp[1]:7 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] reg byte a [ bobCharsetFindOrAddGlyph::found#2 ] -zp[1]:8 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] +zp[1]:7 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] reg byte x [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] reg byte y [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] -zp[1]:9 [ shiftProtoBobRight::carry#1 bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +zp[1]:8 [ shiftProtoBobRight::carry#1 bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] reg byte x [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] -reg byte y [ renderBob::x_char_offset#0 ] +reg byte a [ main::$30 ] +reg byte a [ main::$31 ] +reg byte a [ main::$7 ] +reg byte a [ main::$33 ] +reg byte a [ main::$34 ] +reg byte a [ main::$9 ] +reg byte a [ keyboard_key_pressed::return#2 ] +reg byte a [ main::$14 ] +reg byte a [ keyboard_key_pressed::return#3 ] +reg byte a [ main::$16 ] +reg byte a [ keyboard_key_pressed::return#4 ] +reg byte a [ main::$25 ] +reg byte a [ keyboard_matrix_read::return#2 ] +reg byte a [ keyboard_key_pressed::$2 ] +reg byte a [ keyboard_key_pressed::return#0 ] +reg byte a [ keyboard_matrix_read::return#0 ] +zp[1]:9 [ renderBob::x_char_offset#0 bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#29 bob_charset_next_id#21 bob_charset_next_id#8 ] reg byte a [ renderBob::y_char_offset#0 ] -zp[2]:10 [ renderBob::$2 renderBob::$11 renderBob::y_offset#0 renderBob::$4 renderBob::screen#0 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] -zp[2]:12 [ renderBob::$10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] +zp[2]:10 [ renderBob::$10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] reg byte a [ renderBob::$6 ] -zp[1]:14 [ renderBob::$7 bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] +zp[1]:12 [ renderBob::$7 renderBob::bob_table_idx#0 bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] reg byte a [ renderBob::$8 ] -reg byte x [ renderBob::bob_table_idx#0 ] +zp[2]:13 [ memset::end#0 renderBob::$2 renderBob::$11 renderBob::y_offset#0 renderBob::$4 renderBob::screen#0 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] reg byte a [ bobCharsetFindOrAddGlyph::return#1 ] reg byte a [ prepareBobs::$5 ] reg byte a [ shiftProtoBobRight::$1 ]