diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 9d82ff4c9..18d911b8e 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -38,8 +38,13 @@ public class TestPrograms { } @Test - public void testPreBob() throws IOException, URISyntaxException { - compileAndCompare("complex/prebob/prebob"); + public void testVogelBobs() throws IOException, URISyntaxException { + compileAndCompare("complex/prebob/vogel-bobs"); + } + + @Test + public void testVogelSprites() throws IOException, URISyntaxException { + compileAndCompare("complex/prebob/vogel-sprites"); } @Test diff --git a/src/test/kc/complex/prebob/prebob.kc b/src/test/kc/complex/prebob/vogel-bobs.kc similarity index 87% rename from src/test/kc/complex/prebob/prebob.kc rename to src/test/kc/complex/prebob/vogel-bobs.kc index 25425a0c7..31ae9409a 100644 --- a/src/test/kc/complex/prebob/prebob.kc +++ b/src/test/kc/complex/prebob/vogel-bobs.kc @@ -57,6 +57,9 @@ const char BOB_SHIFTS_Y = 8; // The size of a sub-table of BOB_TABLES const char BOB_SUBTABLE_SIZE = BOB_SHIFTS_X*BOB_SHIFTS_Y; +// The number of BOBs to render +const char NUM_BOBS = 20; + void main() { mulf_init(); prepareBobs(); @@ -80,9 +83,11 @@ void main() { char angle = 0; while(true) { do { } while (*RASTER<$f8); + *BORDERCOL = 0xf; + renderBobCleanup(); signed char r = 30; char a = angle; - for(char i: 0..25) { + for(char i: 0..NUM_BOBS-1) { //kickasm {{ .break }} *BORDERCOL = 1; int x = mulf8s(r, COS[a]) + 75*0x100; @@ -105,26 +110,33 @@ void main() { *D018 = toD018(SCREEN_BASIC, CHARSET_BASIC); } -// Table for getting BOB screen offset from the BOB Y-position -unsigned int[0x20] RENDERBOB_YOFFSET; +// Table used for deleting rendered BOB's. Contains pointers to first char of each BOB. +char*[NUM_BOBS] RENDERBOB_CLEANUP; + +// Pointer to the next clean-up to add +char** renderBobCleanupNext; + +// *40 Table unsigned int[0x20] MUL40 = { ((unsigned int)i)*40 }; +unsigned int[0x20] MUL40; // Initialize the tables used by renderBob() void renderBobInit() { for(char y: 0..0x1f) - RENDERBOB_YOFFSET[y] = ((unsigned int)y)*40; + MUL40[y] = ((unsigned int)y)*40; + for(char i: 0..NUM_BOBS-1) + RENDERBOB_CLEANUP[i] = BOB_SCREEN; } - // 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) { 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; - unsigned int y_offset = RENDERBOB_YOFFSET[y_char_offset]; + unsigned int y_offset = MUL40[y_char_offset]; char* screen = BOB_SCREEN+y_offset+x_char_offset; char bob_table_idx = (ypos&7)*BOB_SHIFTS_X+(xpos&3); + *renderBobCleanupNext++ = screen; 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]; @@ -136,6 +148,24 @@ void renderBob(char xpos, char ypos) { screen[82] = (BOB_TABLES+8*BOB_SUBTABLE_SIZE)[bob_table_idx]; } +// Clean Up the rendered BOB's +void renderBobCleanup() { + for(char i: 0..NUM_BOBS-1) { + char* screen = RENDERBOB_CLEANUP[i]; + screen[0] = 0; + screen[40] = 0; + screen[80] = 0; + screen[1] = 0; + screen[41] = 0; + screen[81] = 0; + screen[2] = 0; + screen[42] = 0; + screen[82] = 0; + } + // Prepare for next clean-up + renderBobCleanupNext = RENDERBOB_CLEANUP; +} + // Creates the pre-shifted bobs into BOB_CHARSET and populates the BOB_TABLES // Modifies PROTO_BOB by shifting it around void prepareBobs() { diff --git a/src/test/kc/complex/prebob/vogel-sprites.kc b/src/test/kc/complex/prebob/vogel-sprites.kc new file mode 100644 index 000000000..86f628c1b --- /dev/null +++ b/src/test/kc/complex/prebob/vogel-sprites.kc @@ -0,0 +1,105 @@ +// Same animation using a multiplexer +import "c64" +import "multiplexer" +import "fastmultiply" +import "string" +import "keyboard" + +// The BOB sprite +align(0x1000) char[] SPRITE = kickasm(resource "smiley.png") {{ + .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) + .for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) +}}; + +// Sine and Cosine tables +// Angles: $00=0, $80=PI,$100=2*PI +// Sine/Cosine: signed fixed [-$7f,$7f] +align(0x40) signed char[0x140] SIN = kickasm {{ + .for(var i=0;i<$140;i++) + .byte >round($7fff*sin(i*2*PI/256)) +}}; + +signed char* COS = SIN+0x40; // sin(x) = cos(x+PI/2) + +// The BASIC screen +const char* SCREEN = 0x0400; + +// The number of BOBs to render +const char NUM_BOBS = 16; + +void main() { + asm { sei } + init(); + loop(); + exit(); + asm { cli } +} + +// Initialize the program +void init() { + *D011 = VIC_DEN | VIC_RSEL | 3; + // Initialize the multiplexer + plexInit(SCREEN); + // Set the sprite pointers & initial positions + for(char i: 0..PLEX_COUNT-1) { + PLEX_PTR[i] = (char)(SPRITE/0x40); + PLEX_XPOS[i] = 24+i*5; + PLEX_YPOS[i] = 50+i*8; + } + // Enable & initialize sprites + *SPRITES_ENABLE = 0xff; + for(char i: 0..7) { + SPRITES_COLS[i] = GREEN; + } + mulf_init(); + // Clear screen + memset(SCREEN, ' ', 1000); +} + +// Exit the program +void exit() { + // Wait for space release + while(keyboard_key_pressed(KEY_SPACE)) {} +} + +// The main loop +void loop() { + // Render Rotated BOBs + char angle = 0; + while(true) { + do { } while (*RASTER<0xd8); + *BORDERCOL = 0xf; + signed char r = 30; + char a = angle; + for(char i: 0..NUM_BOBS-1) { + //kickasm {{ .break }} + *BORDERCOL = 6; + int x = mulf8s(r, COS[a])*2 + 125*0x100; + PLEX_XPOS[i] = >x; + int y = mulf8s(r, SIN[a])*2 + 125*0x100; + PLEX_YPOS[i] = >y; + a += 98; + r += 3; + } + *BORDERCOL = 3; + plexSort(); + angle += 3; + *BORDERCOL = BLACK; + // Sort the sprites by y-position + while((*D011&VIC_RST8)!=0) {} + // Show the sprites + for( char i: 0..PLEX_COUNT-1) { + *BORDERCOL = BLACK; + char rasterY = plexFreeNextYpos(); + while(*RASTER(BOB_SCREEN&$3fff)*4)|(>BOB_CHARSET)/4&$f .const toD0182_return = (>(SCREEN_BASIC&$3fff)*4)|(>CHARSET_BASIC)/4&$f - .label __9 = 6 - .label __11 = 6 - .label __12 = 6 - .label x = $b - .label y = 6 + .label __10 = $c + .label __12 = $c + .label __13 = $c + .label x = 9 + .label y = $c .label a = 4 .label r = 3 .label i = 5 @@ -70,10 +76,17 @@ main: { lda RASTER cmp #$f8 bcc __b2 + lda #$f + sta BORDERCOL + jsr renderBobCleanup lda.z angle sta.z a lda #0 sta.z i + lda #RENDERBOB_CLEANUP + sta.z renderBobCleanupNext+1 lda #$1e sta.z r __b4: @@ -84,19 +97,19 @@ main: { ldy.z a ldx COS,y jsr mulf8s - lda.z __9 + lda.z __10 clc adc #<$4b*$100 sta.z x - lda.z __9+1 + lda.z __10+1 adc #>$4b*$100 sta.z x+1 lda.z r ldy.z a ldx SIN,y jsr mulf8s - asl.z __12 - rol.z __12+1 + asl.z __13 + rol.z __13+1 clc lda.z y adc #<$5a*$100 @@ -118,7 +131,7 @@ main: { tax jsr renderBob inc.z i - lda #$1a + lda #NUM_BOBS-1+1 cmp.z i bne __b4 lax.z angle @@ -171,12 +184,12 @@ keyboard_matrix_read: { // Y-position is 0-183. Each y-position is 1 pixel high. // renderBob(byte zeropage($f) xpos, byte register(X) ypos) renderBob: { - .label __2 = $10 + .label __2 = $c .label __5 = $e .label xpos = $f - .label x_char_offset = $d - .label y_offset = $10 - .label screen = $10 + .label x_char_offset = $b + .label y_offset = $c + .label screen = $c lda.z xpos lsr lsr @@ -186,11 +199,10 @@ renderBob: { lsr lsr asl - //unsigned int y_offset = (unsigned int)y_char_offset*40; tay - lda RENDERBOB_YOFFSET,y + lda MUL40,y sta.z y_offset - lda RENDERBOB_YOFFSET+1,y + lda MUL40+1,y sta.z y_offset+1 clc lda.z __2 @@ -216,6 +228,19 @@ renderBob: { clc adc.z __5 tax + ldy #0 + lda.z screen + sta (renderBobCleanupNext),y + iny + lda.z screen+1 + sta (renderBobCleanupNext),y + lda #SIZEOF_POINTER + clc + adc.z renderBobCleanupNext + sta.z renderBobCleanupNext + bcc !+ + inc.z renderBobCleanupNext+1 + !: lda BOB_TABLES,x ldy #0 sta (screen),y @@ -248,7 +273,7 @@ renderBob: { // Fast multiply two signed bytes to a word result // mulf8s(signed byte register(A) a, signed byte register(X) b) mulf8s: { - .label return = 6 + .label return = $c jsr mulf8u_prepare stx.z mulf8s_prepared.b jsr mulf8s_prepared @@ -259,7 +284,7 @@ mulf8s: { // mulf8s_prepared(signed byte zeropage($f) b) mulf8s_prepared: { .label memA = $fd - .label m = 6 + .label m = $c .label b = $f lda.z b jsr mulf8u_prepared @@ -287,7 +312,7 @@ mulf8s_prepared: { mulf8u_prepared: { .label resL = $fe .label memB = $ff - .label return = 6 + .label return = $c sta memB tax sec @@ -319,6 +344,42 @@ mulf8u_prepare: { sta mulf8u_prepared.sm4+1 rts } +// Clean Up the rendered BOB's +renderBobCleanup: { + .label screen = $10 + ldx #0 + __b1: + txa + asl + tay + lda RENDERBOB_CLEANUP,y + sta.z screen + lda RENDERBOB_CLEANUP+1,y + sta.z screen+1 + lda #0 + tay + sta (screen),y + ldy #$28 + sta (screen),y + ldy #$50 + sta (screen),y + ldy #1 + sta (screen),y + ldy #$29 + sta (screen),y + ldy #$51 + sta (screen),y + ldy #2 + sta (screen),y + ldy #$2a + sta (screen),y + ldy #$52 + sta (screen),y + inx + cpx #NUM_BOBS-1+1 + bne __b1 + rts +} // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { .label str = BOB_SCREEN @@ -352,8 +413,8 @@ memset: { renderBobInit: { .label __0 = $10 .label __1 = $10 - .label __4 = $12 - .label __5 = $10 + .label __6 = $12 + .label __7 = $10 ldx #0 __b1: txa @@ -362,19 +423,19 @@ renderBobInit: { sta.z __0+1 lda.z __0 asl - sta.z __4 + sta.z __6 lda.z __0+1 rol - sta.z __4+1 - asl.z __4 - rol.z __4+1 - lda.z __5 + sta.z __6+1 + asl.z __6 + rol.z __6+1 + lda.z __7 clc - adc.z __4 - sta.z __5 - lda.z __5+1 - adc.z __4+1 - sta.z __5+1 + adc.z __6 + sta.z __7 + lda.z __7+1 + adc.z __6+1 + sta.z __7+1 asl.z __1 rol.z __1+1 asl.z __1 @@ -385,22 +446,34 @@ renderBobInit: { asl tay lda.z __1 - sta RENDERBOB_YOFFSET,y + sta MUL40,y lda.z __1+1 - sta RENDERBOB_YOFFSET+1,y + sta MUL40+1,y inx cpx #$20 bne __b1 + ldx #0 + __b2: + txa + asl + tay + lda #BOB_SCREEN + sta RENDERBOB_CLEANUP+1,y + inx + cpx #NUM_BOBS-1+1 + bne __b2 rts } // Creates the pre-shifted bobs into BOB_CHARSET and populates the BOB_TABLES // Modifies PROTO_BOB by shifting it around prepareBobs: { - .label bob_table = $12 + .label bob_table = $10 .label shift_y = 2 // Populate charset and tables - .label bob_glyph = $10 - .label cell = $d + .label bob_glyph = 6 + .label cell = $b .label bob_table_idx = 4 .label shift_x = 5 jsr progress_init @@ -512,12 +585,12 @@ progress_inc: { // 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($10) bob_glyph) +// bobCharsetFindOrAddGlyph(byte* zeropage(6) bob_glyph) bobCharsetFindOrAddGlyph: { - .label bob_glyph = $10 - .label i = $a + .label bob_glyph = 6 + .label i = 8 .label glyph_id = $e - .label glyph_cursor = 8 + .label glyph_cursor = $12 lda #BOB_CHARSET @@ -580,7 +653,7 @@ bobCharsetFindOrAddGlyph: { // Shift PROTO_BOB right one X pixel shiftProtoBobRight: { .label carry = $e - .label i = $d + .label i = $b ldy #0 ldx #0 txa @@ -655,13 +728,13 @@ mulf_init: { // Counter used for determining x%2==0 .label sqr1_hi = $10 // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 - .label sqr = $b + .label sqr = $c .label sqr1_lo = 6 // Decrease or increase x_255 - initially we decrease - .label sqr2_hi = 8 + .label sqr2_hi = 9 .label sqr2_lo = $12 //Start with g(0)=f(255) - .label dir = $a + .label dir = 8 ldx #0 lda # (signed word) main::x#0 - [39] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 - [40] call renderBob +main::@12: scope:[main] from main::@4 + [28] (signed word~) main::$10 ← (signed word) mulf8s::return#2 + [29] (signed word) main::x#0 ← (signed word~) main::$10 + (signed word)(number) $4b*(number) $100 + [30] (signed byte) mulf8s::a#1 ← (signed byte) main::r#2 + [31] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#2) + [32] call mulf8s + [33] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 to:main::@13 main::@13: scope:[main] from main::@12 - [41] (byte) main::i#1 ← ++ (byte) main::i#2 - [42] if((byte) main::i#1!=(byte) $1a) goto main::@4 - to:main::@5 -main::@5: scope:[main] from main::@13 - [43] (byte) main::angle#1 ← (byte) main::angle#6 + (byte) 3 - [44] *((const byte*) BORDERCOL) ← (byte) 0 - [45] call keyboard_key_pressed - [46] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + [34] (signed word~) main::$12 ← (signed word) mulf8s::return#3 + [35] (signed word~) main::$13 ← (signed word~) main::$12 << (byte) 1 + [36] (signed word) main::y#0 ← (signed word~) main::$13 + (signed word)(number) $5a*(number) $100 + [37] *((const byte*) BORDERCOL) ← (byte) 2 + [38] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 + [39] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 + [40] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 + [41] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 + [42] call renderBob to:main::@14 -main::@14: scope:[main] from main::@5 - [47] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#2 - [48] if((byte) 0!=(byte~) main::$18) goto main::@6 - to:main::@1 -main::@6: scope:[main] from main::@14 main::@15 - [49] phi() - [50] call keyboard_key_pressed - [51] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 +main::@14: scope:[main] from main::@13 + [43] (byte) main::i#1 ← ++ (byte) main::i#2 + [44] if((byte) main::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@14 + [45] (byte) main::angle#1 ← (byte) main::angle#8 + (byte) 3 + [46] *((const byte*) BORDERCOL) ← (byte) 0 + [47] call keyboard_key_pressed + [48] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 to:main::@15 -main::@15: scope:[main] from main::@6 - [52] (byte~) main::$20 ← (byte) keyboard_key_pressed::return#3 - [53] if((byte) 0!=(byte~) main::$20) goto main::@6 +main::@15: scope:[main] from main::@5 + [49] (byte~) main::$19 ← (byte) keyboard_key_pressed::return#2 + [50] if((byte) 0!=(byte~) main::$19) goto main::@6 + to:main::@1 +main::@6: scope:[main] from main::@15 main::@16 + [51] phi() + [52] call keyboard_key_pressed + [53] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 + to:main::@16 +main::@16: scope:[main] from main::@6 + [54] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#3 + [55] if((byte) 0!=(byte~) main::$21) goto main::@6 to:main::vicSelectGfxBank2 -main::vicSelectGfxBank2: scope:[main] from main::@15 - [54] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 +main::vicSelectGfxBank2: scope:[main] from main::@16 + [56] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank2_toDd001 main::vicSelectGfxBank2_toDd001: scope:[main] from main::vicSelectGfxBank2 - [55] phi() + [57] phi() to:main::vicSelectGfxBank2_@1 main::vicSelectGfxBank2_@1: scope:[main] from main::vicSelectGfxBank2_toDd001 - [56] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 + [58] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 to:main::toD0182 main::toD0182: scope:[main] from main::vicSelectGfxBank2_@1 - [57] phi() + [59] phi() to:main::@8 main::@8: scope:[main] from main::toD0182 - [58] *((const byte*) D018) ← (const byte) main::toD0182_return#0 + [60] *((const byte*) D018) ← (const byte) main::toD0182_return#0 to:main::@return main::@return: scope:[main] from main::@8 - [59] return + [61] return to:@return (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) keyboard_key_pressed: scope:[keyboard_key_pressed] from main::@5 main::@6 - [60] phi() - [61] call keyboard_matrix_read - [62] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + [62] phi() + [63] call keyboard_matrix_read + [64] (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 - [63] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 - [64] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask+(const byte) keyboard_key_pressed::colidx#0) + [65] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 + [66] (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 - [65] return + [67] return to:@return (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [66] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) - [67] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) + [68] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [69] (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 - [68] return + [70] return to:@return (void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos) -renderBob: scope:[renderBob] from main::@12 - [69] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 - [70] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 - [71] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 - [72] (word) renderBob::y_offset#0 ← *((const word*) RENDERBOB_YOFFSET + (byte~) renderBob::$8) - [73] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 - [74] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 - [75] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 - [76] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 - [77] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 - [78] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 - [79] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) - [80] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [81] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [82] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [83] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [84] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [85] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [86] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [87] *((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::@13 + [71] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 + [72] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 + [73] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 + [74] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8) + [75] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 + [76] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 + [77] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 + [78] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 + [79] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 + [80] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 + [81] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0 + [82] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER + [83] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) + [84] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [85] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [86] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [87] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [88] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [89] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [90] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [91] *((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 - [88] return + [92] return to:@return (signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) -mulf8s: scope:[mulf8s] from main::@11 main::@4 - [89] (signed byte) mulf8s::b#2 ← phi( main::@11/(signed byte) mulf8s::b#1 main::@4/(signed byte) mulf8s::b#0 ) - [89] (signed byte) mulf8s::mulf8s_prepare1_a#0 ← phi( main::@11/(signed byte) mulf8s::a#1 main::@4/(signed byte) mulf8s::a#0 ) +mulf8s: scope:[mulf8s] from main::@12 main::@4 + [93] (signed byte) mulf8s::b#2 ← phi( main::@12/(signed byte) mulf8s::b#1 main::@4/(signed byte) mulf8s::b#0 ) + [93] (signed byte) mulf8s::mulf8s_prepare1_a#0 ← phi( main::@12/(signed byte) mulf8s::a#1 main::@4/(signed byte) mulf8s::a#0 ) to:mulf8s::mulf8s_prepare1 mulf8s::mulf8s_prepare1: scope:[mulf8s] from mulf8s - [90] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 - [91] call mulf8u_prepare + [94] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 + [95] call mulf8u_prepare to:mulf8s::@1 mulf8s::@1: scope:[mulf8s] from mulf8s::mulf8s_prepare1 - [92] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 - [93] call mulf8s_prepared + [96] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 + [97] call mulf8s_prepared to:mulf8s::@2 mulf8s::@2: scope:[mulf8s] from mulf8s::@1 - [94] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 + [98] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 to:mulf8s::@return mulf8s::@return: scope:[mulf8s] from mulf8s::@2 - [95] return + [99] return to:@return (signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) mulf8s_prepared: scope:[mulf8s_prepared] from mulf8s::@1 - [96] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 - [97] call mulf8u_prepared - [98] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + [100] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 + [101] call mulf8u_prepared + [102] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 to:mulf8s_prepared::@5 mulf8s_prepared::@5: scope:[mulf8s_prepared] from mulf8s_prepared - [99] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 - [100] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 + [103] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 + [104] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 to:mulf8s_prepared::@3 mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@5 - [101] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 - [102] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 - [103] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 + [105] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 + [106] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 + [107] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 to:mulf8s_prepared::@1 mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@5 - [104] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 ) - [105] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 + [108] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 ) + [109] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 to:mulf8s_prepared::@4 mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1 - [106] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 - [107] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) - [108] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 + [110] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 + [111] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) + [112] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 to:mulf8s_prepared::@2 mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4 - [109] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 ) + [113] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 ) to:mulf8s_prepared::@return mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2 - [110] return + [114] return to:@return (word()) mulf8u_prepared((byte) mulf8u_prepared::b) mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared - [111] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 + [115] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } - [113] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) + [117] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) to:mulf8u_prepared::@return mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared - [114] return + [118] return to:@return (void()) mulf8u_prepare((byte) mulf8u_prepare::a) mulf8u_prepare: scope:[mulf8u_prepare] from mulf8s::mulf8s_prepare1 - [115] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 + [119] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } to:mulf8u_prepare::@return mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare - [117] return + [121] return + to:@return + +(void()) renderBobCleanup() +renderBobCleanup: scope:[renderBobCleanup] from main::@3 + [122] phi() + to:renderBobCleanup::@1 +renderBobCleanup::@1: scope:[renderBobCleanup] from renderBobCleanup renderBobCleanup::@1 + [123] (byte) renderBobCleanup::i#2 ← phi( renderBobCleanup/(byte) 0 renderBobCleanup::@1/(byte) renderBobCleanup::i#1 ) + [124] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1 + [125] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1) + [126] *((byte*) renderBobCleanup::screen#0) ← (byte) 0 + [127] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0 + [128] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0 + [129] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0 + [130] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0 + [131] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0 + [132] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0 + [133] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0 + [134] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0 + [135] (byte) renderBobCleanup::i#1 ← ++ (byte) renderBobCleanup::i#2 + [136] if((byte) renderBobCleanup::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobCleanup::@1 + to:renderBobCleanup::@return +renderBobCleanup::@return: scope:[renderBobCleanup] from renderBobCleanup::@1 + [137] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from main::@7 - [118] phi() + [138] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [119] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [120] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 + [139] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) + [140] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [121] return + [141] return to:@return memset::@2: scope:[memset] from memset::@1 - [122] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [123] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [143] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@1 (void()) renderBobInit() renderBobInit: scope:[renderBobInit] from main::@10 - [124] phi() + [144] phi() to:renderBobInit::@1 renderBobInit::@1: scope:[renderBobInit] from renderBobInit renderBobInit::@1 - [125] (byte) renderBobInit::y#2 ← phi( renderBobInit/(byte) 0 renderBobInit::@1/(byte) renderBobInit::y#1 ) - [126] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 - [127] (word~) renderBobInit::$4 ← (word~) renderBobInit::$0 << (byte) 2 - [128] (word~) renderBobInit::$5 ← (word~) renderBobInit::$4 + (word~) renderBobInit::$0 - [129] (word~) renderBobInit::$1 ← (word~) renderBobInit::$5 << (byte) 3 - [130] (byte~) renderBobInit::$3 ← (byte) renderBobInit::y#2 << (byte) 1 - [131] *((const word*) RENDERBOB_YOFFSET + (byte~) renderBobInit::$3) ← (word~) renderBobInit::$1 - [132] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2 - [133] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1 + [145] (byte) renderBobInit::y#2 ← phi( renderBobInit/(byte) 0 renderBobInit::@1/(byte) renderBobInit::y#1 ) + [146] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 + [147] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2 + [148] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0 + [149] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (byte) 3 + [150] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1 + [151] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1 + [152] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2 + [153] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1 + to:renderBobInit::@2 +renderBobInit::@2: scope:[renderBobInit] from renderBobInit::@1 renderBobInit::@2 + [154] (byte) renderBobInit::i#2 ← phi( renderBobInit::@1/(byte) 0 renderBobInit::@2/(byte) renderBobInit::i#1 ) + [155] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1 + [156] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN + [157] (byte) renderBobInit::i#1 ← ++ (byte) renderBobInit::i#2 + [158] if((byte) renderBobInit::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobInit::@2 to:renderBobInit::@return -renderBobInit::@return: scope:[renderBobInit] from renderBobInit::@1 - [134] return +renderBobInit::@return: scope:[renderBobInit] from renderBobInit::@2 + [159] return to:@return (void()) prepareBobs() prepareBobs: scope:[prepareBobs] from main::@9 - [135] phi() - [136] call progress_init + [160] phi() + [161] call progress_init to:prepareBobs::@8 prepareBobs::@8: scope:[prepareBobs] from prepareBobs - [137] phi() - [138] call bobCharsetFindOrAddGlyph + [162] phi() + [163] call bobCharsetFindOrAddGlyph to:prepareBobs::@1 prepareBobs::@1: scope:[prepareBobs] from prepareBobs::@8 prepareBobs::@9 - [139] (byte) prepareBobs::bob_table_idx#6 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) prepareBobs::bob_table_idx#12 ) - [139] (byte) bob_charset_next_id#14 ← phi( prepareBobs::@8/(byte) bob_charset_next_id#16 prepareBobs::@9/(byte) bob_charset_next_id#30 ) - [139] (byte) progress_idx#16 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) progress_idx#31 ) - [139] (byte*) progress_cursor#15 ← phi( prepareBobs::@8/(const byte*) SCREEN_BASIC prepareBobs::@9/(byte*) progress_cursor#31 ) - [139] (byte) prepareBobs::shift_y#2 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) prepareBobs::shift_y#1 ) - [140] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 + [164] (byte) prepareBobs::bob_table_idx#6 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) prepareBobs::bob_table_idx#12 ) + [164] (byte) bob_charset_next_id#14 ← phi( prepareBobs::@8/(byte) bob_charset_next_id#16 prepareBobs::@9/(byte) bob_charset_next_id#30 ) + [164] (byte) progress_idx#16 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) progress_idx#31 ) + [164] (byte*) progress_cursor#15 ← phi( prepareBobs::@8/(const byte*) SCREEN_BASIC prepareBobs::@9/(byte*) progress_cursor#31 ) + [164] (byte) prepareBobs::shift_y#2 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) prepareBobs::shift_y#1 ) + [165] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 to:prepareBobs::@return prepareBobs::@return: scope:[prepareBobs] from prepareBobs::@1 - [141] return + [166] return to:@return prepareBobs::@2: scope:[prepareBobs] from prepareBobs::@1 prepareBobs::@13 - [142] (byte) progress_idx#31 ← phi( prepareBobs::@1/(byte) progress_idx#16 prepareBobs::@13/(byte) progress_idx#25 ) - [142] (byte*) progress_cursor#31 ← phi( prepareBobs::@1/(byte*) progress_cursor#15 prepareBobs::@13/(byte*) progress_cursor#24 ) - [142] (byte) bob_charset_next_id#30 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#14 prepareBobs::@13/(byte) bob_charset_next_id#21 ) - [142] (byte) prepareBobs::bob_table_idx#12 ← phi( prepareBobs::@1/(byte) prepareBobs::bob_table_idx#6 prepareBobs::@13/(byte) prepareBobs::bob_table_idx#1 ) - [142] (byte) prepareBobs::shift_x#2 ← phi( prepareBobs::@1/(byte) 0 prepareBobs::@13/(byte) prepareBobs::shift_x#1 ) - [143] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 + [167] (byte) progress_idx#31 ← phi( prepareBobs::@1/(byte) progress_idx#16 prepareBobs::@13/(byte) progress_idx#25 ) + [167] (byte*) progress_cursor#31 ← phi( prepareBobs::@1/(byte*) progress_cursor#15 prepareBobs::@13/(byte*) progress_cursor#24 ) + [167] (byte) bob_charset_next_id#30 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#14 prepareBobs::@13/(byte) bob_charset_next_id#21 ) + [167] (byte) prepareBobs::bob_table_idx#12 ← phi( prepareBobs::@1/(byte) prepareBobs::bob_table_idx#6 prepareBobs::@13/(byte) prepareBobs::bob_table_idx#1 ) + [167] (byte) prepareBobs::shift_x#2 ← phi( prepareBobs::@1/(byte) 0 prepareBobs::@13/(byte) prepareBobs::shift_x#1 ) + [168] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 to:prepareBobs::@4 prepareBobs::@4: scope:[prepareBobs] from prepareBobs::@2 - [144] phi() - [145] call shiftProtoBobDown + [169] phi() + [170] call shiftProtoBobDown to:prepareBobs::@9 prepareBobs::@9: scope:[prepareBobs] from prepareBobs::@4 - [146] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 + [171] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 to:prepareBobs::@1 prepareBobs::@3: scope:[prepareBobs] from prepareBobs::@2 - [147] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 + [172] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 to:prepareBobs::@5 prepareBobs::@5: scope:[prepareBobs] from prepareBobs::@11 prepareBobs::@3 - [148] (byte*) progress_cursor#24 ← phi( prepareBobs::@11/(byte*) progress_cursor#17 prepareBobs::@3/(byte*) progress_cursor#31 ) - [148] (byte) progress_idx#25 ← phi( prepareBobs::@11/(byte) progress_idx#10 prepareBobs::@3/(byte) progress_idx#31 ) - [148] (byte*) prepareBobs::bob_table#2 ← phi( prepareBobs::@11/(byte*) prepareBobs::bob_table#1 prepareBobs::@3/(byte*) prepareBobs::bob_table#0 ) - [148] (byte) bob_charset_next_id#21 ← phi( prepareBobs::@11/(byte) bob_charset_next_id#16 prepareBobs::@3/(byte) bob_charset_next_id#30 ) - [148] (byte*) prepareBobs::bob_glyph#2 ← phi( prepareBobs::@11/(byte*) prepareBobs::bob_glyph#1 prepareBobs::@3/(const byte*) PROTO_BOB ) - [148] (byte) prepareBobs::cell#2 ← phi( prepareBobs::@11/(byte) prepareBobs::cell#1 prepareBobs::@3/(byte) 0 ) - [149] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 + [173] (byte*) progress_cursor#24 ← phi( prepareBobs::@11/(byte*) progress_cursor#17 prepareBobs::@3/(byte*) progress_cursor#31 ) + [173] (byte) progress_idx#25 ← phi( prepareBobs::@11/(byte) progress_idx#10 prepareBobs::@3/(byte) progress_idx#31 ) + [173] (byte*) prepareBobs::bob_table#2 ← phi( prepareBobs::@11/(byte*) prepareBobs::bob_table#1 prepareBobs::@3/(byte*) prepareBobs::bob_table#0 ) + [173] (byte) bob_charset_next_id#21 ← phi( prepareBobs::@11/(byte) bob_charset_next_id#16 prepareBobs::@3/(byte) bob_charset_next_id#30 ) + [173] (byte*) prepareBobs::bob_glyph#2 ← phi( prepareBobs::@11/(byte*) prepareBobs::bob_glyph#1 prepareBobs::@3/(const byte*) PROTO_BOB ) + [173] (byte) prepareBobs::cell#2 ← phi( prepareBobs::@11/(byte) prepareBobs::cell#1 prepareBobs::@3/(byte) 0 ) + [174] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 to:prepareBobs::@7 prepareBobs::@7: scope:[prepareBobs] from prepareBobs::@5 - [150] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 - [151] call shiftProtoBobRight + [175] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 + [176] call shiftProtoBobRight to:prepareBobs::@12 prepareBobs::@12: scope:[prepareBobs] from prepareBobs::@7 - [152] phi() - [153] call shiftProtoBobRight + [177] phi() + [178] call shiftProtoBobRight to:prepareBobs::@13 prepareBobs::@13: scope:[prepareBobs] from prepareBobs::@12 - [154] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 + [179] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 to:prepareBobs::@2 prepareBobs::@6: scope:[prepareBobs] from prepareBobs::@5 - [155] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 - [156] call bobCharsetFindOrAddGlyph - [157] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 + [180] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + [181] call bobCharsetFindOrAddGlyph + [182] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 to:prepareBobs::@10 prepareBobs::@10: scope:[prepareBobs] from prepareBobs::@6 - [158] (byte~) prepareBobs::$6 ← (byte) bobCharsetFindOrAddGlyph::return#1 - [159] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 - [160] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 - [161] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y - [162] call progress_inc + [183] (byte~) prepareBobs::$6 ← (byte) bobCharsetFindOrAddGlyph::return#1 + [184] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 + [185] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 + [186] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y + [187] call progress_inc to:prepareBobs::@11 prepareBobs::@11: scope:[prepareBobs] from prepareBobs::@10 - [163] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 + [188] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 to:prepareBobs::@5 (void()) progress_inc() progress_inc: scope:[progress_inc] from prepareBobs::@10 - [164] (byte) progress_idx#8 ← ++ (byte) progress_idx#25 - [165] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 + [189] (byte) progress_idx#8 ← ++ (byte) progress_idx#25 + [190] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 to:progress_inc::@2 progress_inc::@2: scope:[progress_inc] from progress_inc - [166] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) - [167] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24 + [191] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) + [192] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24 to:progress_inc::@1 progress_inc::@1: scope:[progress_inc] from progress_inc progress_inc::@2 - [168] (byte*) progress_cursor#17 ← phi( progress_inc/(byte*) progress_cursor#24 progress_inc::@2/(byte*) progress_cursor#8 ) - [168] (byte) progress_idx#10 ← phi( progress_inc/(byte) progress_idx#8 progress_inc::@2/(byte) 0 ) - [169] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) + [193] (byte*) progress_cursor#17 ← phi( progress_inc/(byte*) progress_cursor#24 progress_inc::@2/(byte*) progress_cursor#8 ) + [193] (byte) progress_idx#10 ← phi( progress_inc/(byte) progress_idx#8 progress_inc::@2/(byte) 0 ) + [194] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) to:progress_inc::@return progress_inc::@return: scope:[progress_inc] from progress_inc::@1 - [170] return + [195] return to:@return (byte()) bobCharsetFindOrAddGlyph((byte*) bobCharsetFindOrAddGlyph::bob_glyph) bobCharsetFindOrAddGlyph: scope:[bobCharsetFindOrAddGlyph] from prepareBobs::@6 prepareBobs::@8 - [171] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 ← phi( prepareBobs::@8/(const byte*) PROTO_BOB+(byte) $30 prepareBobs::@6/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ) - [171] (byte) bob_charset_next_id#23 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@6/(byte) bob_charset_next_id#21 ) + [196] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 ← phi( prepareBobs::@8/(const byte*) PROTO_BOB+(byte) $30 prepareBobs::@6/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ) + [196] (byte) bob_charset_next_id#23 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@6/(byte) bob_charset_next_id#21 ) to:bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@1: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph bobCharsetFindOrAddGlyph::@6 - [172] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 ← phi( bobCharsetFindOrAddGlyph/(const byte*) BOB_CHARSET bobCharsetFindOrAddGlyph::@6/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ) - [172] (byte) bobCharsetFindOrAddGlyph::glyph_id#11 ← phi( bobCharsetFindOrAddGlyph/(byte) 0 bobCharsetFindOrAddGlyph::@6/(byte) bobCharsetFindOrAddGlyph::glyph_id#1 ) - [173] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 + [197] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 ← phi( bobCharsetFindOrAddGlyph/(const byte*) BOB_CHARSET bobCharsetFindOrAddGlyph::@6/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ) + [197] (byte) bobCharsetFindOrAddGlyph::glyph_id#11 ← phi( bobCharsetFindOrAddGlyph/(byte) 0 bobCharsetFindOrAddGlyph::@6/(byte) bobCharsetFindOrAddGlyph::glyph_id#1 ) + [198] 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 - [174] (byte) bobCharsetFindOrAddGlyph::i1#2 ← phi( bobCharsetFindOrAddGlyph::@8/(byte) bobCharsetFindOrAddGlyph::i1#1 bobCharsetFindOrAddGlyph::@1/(byte) 0 ) - [175] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 + [199] (byte) bobCharsetFindOrAddGlyph::i1#2 ← phi( bobCharsetFindOrAddGlyph::@8/(byte) bobCharsetFindOrAddGlyph::i1#1 bobCharsetFindOrAddGlyph::@1/(byte) 0 ) + [200] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 to:bobCharsetFindOrAddGlyph::@9 bobCharsetFindOrAddGlyph::@9: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@7 - [176] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 + [201] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 to:bobCharsetFindOrAddGlyph::@return bobCharsetFindOrAddGlyph::@return: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 - [177] (byte) bob_charset_next_id#16 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#23 bobCharsetFindOrAddGlyph::@9/(byte) bob_charset_next_id#8 ) - [178] return + [202] (byte) bob_charset_next_id#16 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#23 bobCharsetFindOrAddGlyph::@9/(byte) bob_charset_next_id#8 ) + [203] return to:@return bobCharsetFindOrAddGlyph::@8: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@7 - [179] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) - [180] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 + [204] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) + [205] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 to:bobCharsetFindOrAddGlyph::@7 bobCharsetFindOrAddGlyph::@2: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@4 - [181] (byte) bobCharsetFindOrAddGlyph::i#2 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) 0 bobCharsetFindOrAddGlyph::@4/(byte) bobCharsetFindOrAddGlyph::i#1 ) - [182] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 + [206] (byte) bobCharsetFindOrAddGlyph::i#2 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) 0 bobCharsetFindOrAddGlyph::@4/(byte) bobCharsetFindOrAddGlyph::i#1 ) + [207] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 to:bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@3: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@2 - [183] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 + [208] 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 - [184] (byte) bobCharsetFindOrAddGlyph::found#2 ← phi( bobCharsetFindOrAddGlyph::@3/(byte) 0 bobCharsetFindOrAddGlyph::@2/(byte) 1 ) - [185] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 + [209] (byte) bobCharsetFindOrAddGlyph::found#2 ← phi( bobCharsetFindOrAddGlyph::@3/(byte) 0 bobCharsetFindOrAddGlyph::@2/(byte) 1 ) + [210] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 to:bobCharsetFindOrAddGlyph::@return bobCharsetFindOrAddGlyph::@6: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@5 - [186] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 - [187] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 + [211] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 + [212] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 to:bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@4: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@3 - [188] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 + [213] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 to:bobCharsetFindOrAddGlyph::@2 (void()) shiftProtoBobRight() shiftProtoBobRight: scope:[shiftProtoBobRight] from prepareBobs::@12 prepareBobs::@7 - [189] phi() + [214] phi() to:shiftProtoBobRight::@1 shiftProtoBobRight::@1: scope:[shiftProtoBobRight] from shiftProtoBobRight shiftProtoBobRight::@6 - [190] (byte) shiftProtoBobRight::carry#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::carry#10 ) - [190] (byte) shiftProtoBobRight::j#3 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::j#10 ) - [190] (byte) shiftProtoBobRight::i#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::i#1 ) - [191] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 + [215] (byte) shiftProtoBobRight::carry#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::carry#10 ) + [215] (byte) shiftProtoBobRight::j#3 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::j#10 ) + [215] (byte) shiftProtoBobRight::i#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::i#1 ) + [216] 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 - [192] return + [217] return to:@return shiftProtoBobRight::@2: scope:[shiftProtoBobRight] from shiftProtoBobRight::@1 - [193] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 - [194] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 + [218] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 + [219] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 to:shiftProtoBobRight::@4 shiftProtoBobRight::@3: scope:[shiftProtoBobRight] from shiftProtoBobRight::@2 - [195] phi() + [220] phi() to:shiftProtoBobRight::@4 shiftProtoBobRight::@4: scope:[shiftProtoBobRight] from shiftProtoBobRight::@2 shiftProtoBobRight::@3 - [196] (byte) shiftProtoBobRight::carry#1 ← phi( shiftProtoBobRight::@3/(byte) $80 shiftProtoBobRight::@2/(byte) 0 ) - [197] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 - [198] (byte~) shiftProtoBobRight::$6 ← (byte) shiftProtoBobRight::carry#2 | (byte~) shiftProtoBobRight::$5 - [199] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 - [200] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 + [221] (byte) shiftProtoBobRight::carry#1 ← phi( shiftProtoBobRight::@3/(byte) $80 shiftProtoBobRight::@2/(byte) 0 ) + [222] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 + [223] (byte~) shiftProtoBobRight::$6 ← (byte) shiftProtoBobRight::carry#2 | (byte~) shiftProtoBobRight::$5 + [224] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 + [225] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 to:shiftProtoBobRight::@7 shiftProtoBobRight::@7: scope:[shiftProtoBobRight] from shiftProtoBobRight::@4 - [201] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 + [226] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 to:shiftProtoBobRight::@6 shiftProtoBobRight::@6: scope:[shiftProtoBobRight] from shiftProtoBobRight::@5 shiftProtoBobRight::@7 - [202] (byte) shiftProtoBobRight::j#10 ← phi( shiftProtoBobRight::@7/(byte) shiftProtoBobRight::j#2 shiftProtoBobRight::@5/(byte) shiftProtoBobRight::j#1 ) - [203] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 - [204] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 + [227] (byte) shiftProtoBobRight::j#10 ← phi( shiftProtoBobRight::@7/(byte) shiftProtoBobRight::j#2 shiftProtoBobRight::@5/(byte) shiftProtoBobRight::j#1 ) + [228] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 + [229] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 to:shiftProtoBobRight::@1 shiftProtoBobRight::@5: scope:[shiftProtoBobRight] from shiftProtoBobRight::@4 - [205] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f + [230] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f to:shiftProtoBobRight::@6 (void()) shiftProtoBobDown() shiftProtoBobDown: scope:[shiftProtoBobDown] from prepareBobs::@4 - [206] phi() + [231] phi() to:shiftProtoBobDown::@1 shiftProtoBobDown::@1: scope:[shiftProtoBobDown] from shiftProtoBobDown shiftProtoBobDown::@2 - [207] (byte) shiftProtoBobDown::i#2 ← phi( shiftProtoBobDown/(byte) $17 shiftProtoBobDown::@2/(byte) shiftProtoBobDown::i#1 ) - [208] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 + [232] (byte) shiftProtoBobDown::i#2 ← phi( shiftProtoBobDown/(byte) $17 shiftProtoBobDown::@2/(byte) shiftProtoBobDown::i#1 ) + [233] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 to:shiftProtoBobDown::@3 shiftProtoBobDown::@3: scope:[shiftProtoBobDown] from shiftProtoBobDown::@1 - [209] *((const byte*) PROTO_BOB) ← (byte) 0 - [210] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 - [211] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 + [234] *((const byte*) PROTO_BOB) ← (byte) 0 + [235] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 + [236] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 to:shiftProtoBobDown::@return shiftProtoBobDown::@return: scope:[shiftProtoBobDown] from shiftProtoBobDown::@3 - [212] return + [237] return to:@return shiftProtoBobDown::@2: scope:[shiftProtoBobDown] from shiftProtoBobDown::@1 - [213] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) - [214] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) - [215] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 - [216] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 + [238] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) + [239] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) + [240] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 + [241] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 to:shiftProtoBobDown::@1 (void()) progress_init((byte*) progress_init::line) progress_init: scope:[progress_init] from prepareBobs - [217] phi() + [242] phi() to:progress_init::@return progress_init::@return: scope:[progress_init] from progress_init - [218] return + [243] return to:@return (void()) mulf_init() mulf_init: scope:[mulf_init] from main - [219] phi() + [244] phi() to:mulf_init::@1 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 - [220] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) - [220] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [220] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) - [220] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) - [220] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) - [221] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 + [245] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) + [245] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) + [245] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [245] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) + [245] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) + [246] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 to:mulf_init::@5 mulf_init::@5: scope:[mulf_init] from mulf_init::@1 mulf_init::@8 - [222] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) - [222] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi ) - [222] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) - [222] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo ) - [223] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 + [247] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) + [247] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi ) + [247] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) + [247] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo ) + [248] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 to:mulf_init::@7 mulf_init::@7: scope:[mulf_init] from mulf_init::@5 - [224] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) - [225] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) + [249] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) + [250] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) to:mulf_init::@return mulf_init::@return: scope:[mulf_init] from mulf_init::@7 - [226] return + [251] return to:@return mulf_init::@6: scope:[mulf_init] from mulf_init::@5 - [227] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) - [228] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) - [229] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 - [230] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 - [231] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 + [252] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) + [253] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) + [254] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 + [255] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 + [256] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 to:mulf_init::@8 mulf_init::@9: scope:[mulf_init] from mulf_init::@6 - [232] phi() + [257] phi() to:mulf_init::@8 mulf_init::@8: scope:[mulf_init] from mulf_init::@6 mulf_init::@9 - [233] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) - [234] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 + [258] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) + [259] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 to:mulf_init::@5 mulf_init::@2: scope:[mulf_init] from mulf_init::@1 - [235] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 - [236] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 - [237] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 + [260] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 + [261] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 + [262] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 to:mulf_init::@4 mulf_init::@4: scope:[mulf_init] from mulf_init::@2 - [238] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 - [239] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 + [263] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 + [264] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 to:mulf_init::@3 mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4 - [240] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) - [240] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) - [241] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 - [242] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 - [243] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 - [244] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 - [245] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 - [246] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 - [247] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 + [265] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) + [265] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) + [266] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 + [267] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 + [268] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 + [269] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 + [270] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 + [271] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 + [272] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 to:mulf_init::@1 diff --git a/src/test/ref/complex/prebob/prebob.log b/src/test/ref/complex/prebob/vogel-bobs.log similarity index 63% rename from src/test/ref/complex/prebob/prebob.log rename to src/test/ref/complex/prebob/vogel-bobs.log index 8229d884a..14ea656e6 100644 --- a/src/test/ref/complex/prebob/prebob.log +++ b/src/test/ref/complex/prebob/vogel-bobs.log @@ -2,19 +2,22 @@ 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 increment (byte**) renderBobCleanupNext ← ++ (byte**) renderBobCleanupNext Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) -Fixing pointer array-indexing *((const word*) RENDERBOB_YOFFSET + (byte) renderBobInit::y) -Fixing pointer array-indexing *((const word*) RENDERBOB_YOFFSET + (byte) renderBob::y_char_offset) +Fixing pointer array-indexing *((const word*) MUL40 + (byte) renderBobInit::y) +Fixing pointer array-indexing *((const byte**) RENDERBOB_CLEANUP + (byte) renderBobInit::i) +Fixing pointer array-indexing *((const word*) MUL40 + (byte) renderBob::y_char_offset) +Fixing pointer array-indexing *((const byte**) RENDERBOB_CLEANUP + (byte) renderBobCleanup::i) 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::$20 +Warning! Adding boolean cast to non-boolean condition (byte~) main::$21 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::$18 +Warning! Adding boolean cast to non-boolean sub-expression (byte~) main::$19 Warning! Adding boolean cast to non-boolean sub-expression (byte) bobCharsetFindOrAddGlyph::found Identified constant variable (byte*) HEAP_TOP Identified constant variable (signed byte*) COS @@ -117,10 +120,10 @@ Culled Empty Block (label) main::vicSelectGfxBank2_@return Culled Empty Block (label) main::toD0182_@1 Culled Empty Block (label) main::@19 Culled Empty Block (label) main::@20 -Culled Empty Block (label) @59 -Culled Empty Block (label) renderBobInit::@2 +Culled Empty Block (label) renderBobInit::@4 Culled Empty Block (label) @60 Culled Empty Block (label) @61 +Culled Empty Block (label) @62 Culled Empty Block (label) prepareBobs::@17 Culled Empty Block (label) prepareBobs::@3 Culled Empty Block (label) prepareBobs::@18 @@ -131,7 +134,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) @62 +Culled Empty Block (label) @63 Culled Empty Block (label) shiftProtoBobRight::@9 Culled Empty Block (label) shiftProtoBobRight::@3 Culled Empty Block (label) shiftProtoBobRight::@10 @@ -139,7 +142,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) @63 +Culled Empty Block (label) @64 Culled Empty Block (label) shiftProtoBobDown::@4 Culled Empty Block (label) shiftProtoBobDown::@5 Culled Empty Block (label) shiftProtoBobDown::@6 @@ -156,7 +159,7 @@ Culled Empty Block (label) bobCharsetFindOrAddGlyph::@23 Culled Empty Block (label) bobCharsetFindOrAddGlyph::@24 Culled Empty Block (label) bobCharsetFindOrAddGlyph::@25 Culled Empty Block (label) bobCharsetFindOrAddGlyph::@26 -Culled Empty Block (label) @66 +Culled Empty Block (label) @67 CONTROL FLOW GRAPH SSA @begin: scope:[] from @@ -422,9 +425,9 @@ mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2 to:@return (signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) -mulf8s: scope:[mulf8s] from main::@29 main::@6 - (signed byte) mulf8s::b#5 ← phi( main::@29/(signed byte) mulf8s::b#1 main::@6/(signed byte) mulf8s::b#0 ) - (signed byte) mulf8s::a#2 ← phi( main::@29/(signed byte) mulf8s::a#1 main::@6/(signed byte) mulf8s::a#0 ) +mulf8s: scope:[mulf8s] from main::@30 main::@6 + (signed byte) mulf8s::b#5 ← phi( main::@30/(signed byte) mulf8s::b#1 main::@6/(signed byte) mulf8s::b#0 ) + (signed byte) mulf8s::a#2 ← phi( main::@30/(signed byte) mulf8s::a#1 main::@6/(signed byte) mulf8s::a#0 ) (signed byte) mulf8s::mulf8s_prepare1_a#0 ← (signed byte) mulf8s::a#2 to:mulf8s::mulf8s_prepare1 mulf8s::mulf8s_prepare1: scope:[mulf8s] from mulf8s @@ -457,22 +460,25 @@ mulf8s::@return: scope:[mulf8s] from mulf8s::@4 kickasm() {{ .const PHI = (1+sqrt(5))/2 }} - to:@64 + to:@59 (void()) main() -main: scope:[main] from @67 - (byte) bob_charset_next_id#28 ← phi( @67/(byte) bob_charset_next_id#27 ) - (byte) progress_idx#28 ← phi( @67/(byte) progress_idx#27 ) - (byte*) progress_cursor#28 ← phi( @67/(byte*) progress_cursor#27 ) +main: scope:[main] from @68 + (byte**) renderBobCleanupNext#50 ← phi( @68/(byte**) renderBobCleanupNext#19 ) + (byte) bob_charset_next_id#28 ← phi( @68/(byte) bob_charset_next_id#27 ) + (byte) progress_idx#28 ← phi( @68/(byte) progress_idx#27 ) + (byte*) progress_cursor#28 ← phi( @68/(byte*) progress_cursor#27 ) call mulf_init to:main::@25 main::@25: scope:[main] from main + (byte**) renderBobCleanupNext#49 ← phi( main/(byte**) renderBobCleanupNext#50 ) (byte) bob_charset_next_id#19 ← phi( main/(byte) bob_charset_next_id#28 ) (byte) progress_idx#22 ← phi( main/(byte) progress_idx#28 ) (byte*) progress_cursor#21 ← phi( main/(byte*) progress_cursor#28 ) call prepareBobs to:main::@26 main::@26: scope:[main] from main::@25 + (byte**) renderBobCleanupNext#48 ← phi( main::@25/(byte**) renderBobCleanupNext#49 ) (byte) bob_charset_next_id#10 ← phi( main::@25/(byte) bob_charset_next_id#5 ) (byte) progress_idx#12 ← phi( main::@25/(byte) progress_idx#4 ) (byte*) progress_cursor#11 ← phi( main::@25/(byte*) progress_cursor#4 ) @@ -482,23 +488,26 @@ main::@26: scope:[main] from main::@25 call renderBobInit to:main::@27 main::@27: scope:[main] from main::@26 - (byte) bob_charset_next_id#76 ← phi( main::@26/(byte) bob_charset_next_id#0 ) - (byte) progress_idx#68 ← phi( main::@26/(byte) progress_idx#0 ) - (byte*) progress_cursor#68 ← phi( main::@26/(byte*) progress_cursor#0 ) + (byte) bob_charset_next_id#77 ← phi( main::@26/(byte) bob_charset_next_id#0 ) + (byte) progress_idx#69 ← phi( main::@26/(byte) progress_idx#0 ) + (byte*) progress_cursor#69 ← phi( main::@26/(byte*) progress_cursor#0 ) + (byte**) renderBobCleanupNext#47 ← phi( main::@26/(byte**) renderBobCleanupNext#48 ) (byte*) main::vicSelectGfxBank1_gfx#0 ← (const byte*) BOB_SCREEN to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main::@27 - (byte) bob_charset_next_id#75 ← phi( main::@27/(byte) bob_charset_next_id#76 ) - (byte) progress_idx#67 ← phi( main::@27/(byte) progress_idx#68 ) - (byte*) progress_cursor#67 ← phi( main::@27/(byte*) progress_cursor#68 ) + (byte) bob_charset_next_id#76 ← phi( main::@27/(byte) bob_charset_next_id#77 ) + (byte) progress_idx#68 ← phi( main::@27/(byte) progress_idx#69 ) + (byte*) progress_cursor#68 ← phi( main::@27/(byte*) progress_cursor#69 ) + (byte**) renderBobCleanupNext#46 ← phi( main::@27/(byte**) renderBobCleanupNext#47 ) (byte*) main::vicSelectGfxBank1_gfx#1 ← phi( main::@27/(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#74 ← phi( main::vicSelectGfxBank1/(byte) bob_charset_next_id#75 ) - (byte) progress_idx#66 ← phi( main::vicSelectGfxBank1/(byte) progress_idx#67 ) - (byte*) progress_cursor#66 ← phi( main::vicSelectGfxBank1/(byte*) progress_cursor#67 ) + (byte) bob_charset_next_id#74 ← phi( main::vicSelectGfxBank1/(byte) bob_charset_next_id#76 ) + (byte) progress_idx#66 ← phi( main::vicSelectGfxBank1/(byte) progress_idx#68 ) + (byte*) progress_cursor#66 ← phi( main::vicSelectGfxBank1/(byte*) progress_cursor#68 ) + (byte**) renderBobCleanupNext#44 ← phi( main::vicSelectGfxBank1/(byte**) renderBobCleanupNext#46 ) (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 @@ -510,6 +519,7 @@ main::vicSelectGfxBank1_toDd001_@return: scope:[main] from main::vicSelectGfxBa (byte) bob_charset_next_id#72 ← phi( main::vicSelectGfxBank1_toDd001/(byte) bob_charset_next_id#74 ) (byte) progress_idx#64 ← phi( main::vicSelectGfxBank1_toDd001/(byte) progress_idx#66 ) (byte*) progress_cursor#64 ← phi( main::vicSelectGfxBank1_toDd001/(byte*) progress_cursor#66 ) + (byte**) renderBobCleanupNext#42 ← phi( main::vicSelectGfxBank1_toDd001/(byte**) renderBobCleanupNext#44 ) (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 @@ -517,6 +527,7 @@ main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001_@ (byte) bob_charset_next_id#70 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) bob_charset_next_id#72 ) (byte) progress_idx#62 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) progress_idx#64 ) (byte*) progress_cursor#62 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte*) progress_cursor#64 ) + (byte**) renderBobCleanupNext#40 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte**) renderBobCleanupNext#42 ) (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 @@ -525,6 +536,7 @@ main::@21: scope:[main] from main::vicSelectGfxBank1_@1 (byte) bob_charset_next_id#68 ← phi( main::vicSelectGfxBank1_@1/(byte) bob_charset_next_id#70 ) (byte) progress_idx#60 ← phi( main::vicSelectGfxBank1_@1/(byte) progress_idx#62 ) (byte*) progress_cursor#60 ← phi( main::vicSelectGfxBank1_@1/(byte*) progress_cursor#62 ) + (byte**) renderBobCleanupNext#38 ← phi( main::vicSelectGfxBank1_@1/(byte**) renderBobCleanupNext#40 ) (byte*) main::toD0181_screen#0 ← (const byte*) BOB_SCREEN (byte*) main::toD0181_gfx#0 ← (const byte*) BOB_CHARSET to:main::toD0181 @@ -532,6 +544,7 @@ main::toD0181: scope:[main] from main::@21 (byte) bob_charset_next_id#66 ← phi( main::@21/(byte) bob_charset_next_id#68 ) (byte) progress_idx#58 ← phi( main::@21/(byte) progress_idx#60 ) (byte*) progress_cursor#58 ← phi( main::@21/(byte*) progress_cursor#60 ) + (byte**) renderBobCleanupNext#36 ← phi( main::@21/(byte**) renderBobCleanupNext#38 ) (byte*) main::toD0181_gfx#1 ← phi( main::@21/(byte*) main::toD0181_gfx#0 ) (byte*) main::toD0181_screen#1 ← phi( main::@21/(byte*) main::toD0181_screen#0 ) (word~) main::toD0181_$0 ← ((word)) (byte*) main::toD0181_screen#1 @@ -549,6 +562,7 @@ main::toD0181_@return: scope:[main] from main::toD0181 (byte) bob_charset_next_id#64 ← phi( main::toD0181/(byte) bob_charset_next_id#66 ) (byte) progress_idx#56 ← phi( main::toD0181/(byte) progress_idx#58 ) (byte*) progress_cursor#56 ← phi( main::toD0181/(byte*) progress_cursor#58 ) + (byte**) renderBobCleanupNext#34 ← phi( main::toD0181/(byte**) renderBobCleanupNext#36 ) (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::@22 @@ -556,6 +570,7 @@ main::@22: scope:[main] from main::toD0181_@return (byte) bob_charset_next_id#62 ← phi( main::toD0181_@return/(byte) bob_charset_next_id#64 ) (byte) progress_idx#54 ← phi( main::toD0181_@return/(byte) progress_idx#56 ) (byte*) progress_cursor#54 ← phi( main::toD0181_@return/(byte*) progress_cursor#56 ) + (byte**) renderBobCleanupNext#31 ← phi( main::toD0181_@return/(byte**) renderBobCleanupNext#34 ) (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 ) (byte~) main::$4 ← (byte) main::toD0181_return#3 *((const byte*) D018) ← (byte~) main::$4 @@ -569,144 +584,169 @@ main::@28: scope:[main] from main::@22 (byte) bob_charset_next_id#60 ← phi( main::@22/(byte) bob_charset_next_id#62 ) (byte) progress_idx#52 ← phi( main::@22/(byte) progress_idx#54 ) (byte*) progress_cursor#52 ← phi( main::@22/(byte*) progress_cursor#54 ) + (byte**) renderBobCleanupNext#28 ← phi( main::@22/(byte**) renderBobCleanupNext#31 ) (byte) main::angle#0 ← (number) 0 to:main::@1 -main::@1: scope:[main] from main::@28 main::@32 - (byte) bob_charset_next_id#58 ← phi( main::@28/(byte) bob_charset_next_id#60 main::@32/(byte) bob_charset_next_id#59 ) - (byte) progress_idx#50 ← phi( main::@28/(byte) progress_idx#52 main::@32/(byte) progress_idx#51 ) - (byte*) progress_cursor#50 ← phi( main::@28/(byte*) progress_cursor#52 main::@32/(byte*) progress_cursor#51 ) - (byte) main::angle#6 ← phi( main::@28/(byte) main::angle#0 main::@32/(byte) main::angle#8 ) +main::@1: scope:[main] from main::@28 main::@33 + (byte) bob_charset_next_id#58 ← phi( main::@28/(byte) bob_charset_next_id#60 main::@33/(byte) bob_charset_next_id#59 ) + (byte) progress_idx#50 ← phi( main::@28/(byte) progress_idx#52 main::@33/(byte) progress_idx#51 ) + (byte*) progress_cursor#50 ← phi( main::@28/(byte*) progress_cursor#52 main::@33/(byte*) progress_cursor#51 ) + (byte) main::angle#8 ← phi( main::@28/(byte) main::angle#0 main::@33/(byte) main::angle#10 ) + (byte**) renderBobCleanupNext#24 ← phi( main::@28/(byte**) renderBobCleanupNext#28 main::@33/(byte**) renderBobCleanupNext#29 ) if(true) goto main::@4 to:main::@15 main::@4: scope:[main] from main::@1 main::@4 - (byte) bob_charset_next_id#73 ← phi( main::@1/(byte) bob_charset_next_id#58 main::@4/(byte) bob_charset_next_id#73 ) - (byte) progress_idx#65 ← phi( main::@1/(byte) progress_idx#50 main::@4/(byte) progress_idx#65 ) - (byte*) progress_cursor#65 ← phi( main::@1/(byte*) progress_cursor#50 main::@4/(byte*) progress_cursor#65 ) - (byte) main::angle#4 ← phi( main::@1/(byte) main::angle#6 main::@4/(byte) main::angle#4 ) + (byte) bob_charset_next_id#75 ← phi( main::@1/(byte) bob_charset_next_id#58 main::@4/(byte) bob_charset_next_id#75 ) + (byte) progress_idx#67 ← phi( main::@1/(byte) progress_idx#50 main::@4/(byte) progress_idx#67 ) + (byte*) progress_cursor#67 ← phi( main::@1/(byte*) progress_cursor#50 main::@4/(byte*) progress_cursor#67 ) + (byte) main::angle#6 ← phi( main::@1/(byte) main::angle#8 main::@4/(byte) main::angle#6 ) + (byte**) renderBobCleanupNext#20 ← phi( main::@1/(byte**) renderBobCleanupNext#24 main::@4/(byte**) renderBobCleanupNext#20 ) (bool~) main::$8 ← *((const byte*) RASTER) < (number) $f8 if((bool~) main::$8) goto main::@4 to:main::@5 main::@5: scope:[main] from main::@4 - (byte) bob_charset_next_id#71 ← phi( main::@4/(byte) bob_charset_next_id#73 ) - (byte) progress_idx#63 ← phi( main::@4/(byte) progress_idx#65 ) - (byte*) progress_cursor#63 ← phi( main::@4/(byte*) progress_cursor#65 ) - (byte) main::angle#2 ← phi( main::@4/(byte) main::angle#4 ) + (byte) bob_charset_next_id#73 ← phi( main::@4/(byte) bob_charset_next_id#75 ) + (byte) progress_idx#65 ← phi( main::@4/(byte) progress_idx#67 ) + (byte*) progress_cursor#65 ← phi( main::@4/(byte*) progress_cursor#67 ) + (byte) main::angle#4 ← phi( main::@4/(byte) main::angle#6 ) + (byte**) renderBobCleanupNext#16 ← phi( main::@4/(byte**) renderBobCleanupNext#20 ) + *((const byte*) BORDERCOL) ← (number) $f + call renderBobCleanup + to:main::@29 +main::@29: scope:[main] from main::@5 + (byte) bob_charset_next_id#71 ← phi( main::@5/(byte) bob_charset_next_id#73 ) + (byte) progress_idx#63 ← phi( main::@5/(byte) progress_idx#65 ) + (byte*) progress_cursor#63 ← phi( main::@5/(byte*) progress_cursor#65 ) + (byte) main::angle#2 ← phi( main::@5/(byte) main::angle#4 ) + (byte**) renderBobCleanupNext#9 ← phi( main::@5/(byte**) renderBobCleanupNext#7 ) + (byte**) renderBobCleanupNext#0 ← (byte**) renderBobCleanupNext#9 (signed byte) main::r#0 ← (number) $1e (byte) main::a#0 ← (byte) main::angle#2 (byte) main::i#0 ← (byte) 0 to:main::@6 -main::@6: scope:[main] from main::@31 main::@5 - (byte) bob_charset_next_id#69 ← phi( main::@31/(byte) bob_charset_next_id#63 main::@5/(byte) bob_charset_next_id#71 ) - (byte) progress_idx#61 ← phi( main::@31/(byte) progress_idx#55 main::@5/(byte) progress_idx#63 ) - (byte*) progress_cursor#61 ← phi( main::@31/(byte*) progress_cursor#55 main::@5/(byte*) progress_cursor#63 ) - (byte) main::angle#10 ← phi( main::@31/(byte) main::angle#5 main::@5/(byte) main::angle#2 ) - (byte) main::i#5 ← phi( main::@31/(byte) main::i#1 main::@5/(byte) main::i#0 ) - (byte) main::a#2 ← phi( main::@31/(byte) main::a#5 main::@5/(byte) main::a#0 ) - (signed byte) main::r#2 ← phi( main::@31/(signed byte) main::r#5 main::@5/(signed byte) main::r#0 ) +main::@6: scope:[main] from main::@29 main::@32 + (byte) bob_charset_next_id#69 ← phi( main::@29/(byte) bob_charset_next_id#71 main::@32/(byte) bob_charset_next_id#63 ) + (byte) progress_idx#61 ← phi( main::@29/(byte) progress_idx#63 main::@32/(byte) progress_idx#55 ) + (byte*) progress_cursor#61 ← phi( main::@29/(byte*) progress_cursor#63 main::@32/(byte*) progress_cursor#55 ) + (byte) main::angle#11 ← phi( main::@29/(byte) main::angle#2 main::@32/(byte) main::angle#5 ) + (byte) main::i#5 ← phi( main::@29/(byte) main::i#0 main::@32/(byte) main::i#1 ) + (byte**) renderBobCleanupNext#25 ← phi( main::@29/(byte**) renderBobCleanupNext#0 main::@32/(byte**) renderBobCleanupNext#1 ) + (byte) main::a#2 ← phi( main::@29/(byte) main::a#0 main::@32/(byte) main::a#5 ) + (signed byte) main::r#2 ← phi( main::@29/(signed byte) main::r#0 main::@32/(signed byte) main::r#5 ) *((const byte*) BORDERCOL) ← (number) 1 (signed byte) mulf8s::a#0 ← (signed byte) main::r#2 (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) main::a#2) call mulf8s (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#1 - to:main::@29 -main::@29: scope:[main] from main::@6 + to:main::@30 +main::@30: scope:[main] from main::@6 (byte) bob_charset_next_id#67 ← phi( main::@6/(byte) bob_charset_next_id#69 ) (byte) progress_idx#59 ← phi( main::@6/(byte) progress_idx#61 ) (byte*) progress_cursor#59 ← phi( main::@6/(byte*) progress_cursor#61 ) - (byte) main::angle#9 ← phi( main::@6/(byte) main::angle#10 ) + (byte) main::angle#9 ← phi( main::@6/(byte) main::angle#11 ) (byte) main::i#4 ← phi( main::@6/(byte) main::i#5 ) + (byte**) renderBobCleanupNext#21 ← phi( main::@6/(byte**) renderBobCleanupNext#25 ) (byte) main::a#3 ← phi( main::@6/(byte) main::a#2 ) (signed byte) main::r#3 ← phi( main::@6/(signed byte) main::r#2 ) (signed word) mulf8s::return#5 ← phi( main::@6/(signed word) mulf8s::return#2 ) - (signed word~) main::$9 ← (signed word) mulf8s::return#5 - (number~) main::$10 ← (signed word~) main::$9 + (number) $4b*(number) $100 - (signed word) main::x#0 ← (number~) main::$10 + (signed word~) main::$10 ← (signed word) mulf8s::return#5 + (number~) main::$11 ← (signed word~) main::$10 + (number) $4b*(number) $100 + (signed word) main::x#0 ← (number~) main::$11 (signed byte) mulf8s::a#1 ← (signed byte) main::r#3 (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#3) call mulf8s (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#1 - to:main::@30 -main::@30: scope:[main] from main::@29 - (byte) bob_charset_next_id#65 ← phi( main::@29/(byte) bob_charset_next_id#67 ) - (byte) progress_idx#57 ← phi( main::@29/(byte) progress_idx#59 ) - (byte*) progress_cursor#57 ← phi( main::@29/(byte*) progress_cursor#59 ) - (byte) main::angle#7 ← phi( main::@29/(byte) main::angle#9 ) - (byte) main::i#3 ← phi( main::@29/(byte) main::i#4 ) - (signed word) main::x#1 ← phi( main::@29/(signed word) main::x#0 ) - (signed byte) main::r#4 ← phi( main::@29/(signed byte) main::r#3 ) - (byte) main::a#4 ← phi( main::@29/(byte) main::a#3 ) - (signed word) mulf8s::return#6 ← phi( main::@29/(signed word) mulf8s::return#3 ) - (signed word~) main::$11 ← (signed word) mulf8s::return#6 - (number~) main::$12 ← (signed word~) main::$11 * (number) 2 - (number~) main::$13 ← (number~) main::$12 + (number) $5a*(number) $100 - (signed word) main::y#0 ← (number~) main::$13 + to:main::@31 +main::@31: scope:[main] from main::@30 + (byte) bob_charset_next_id#65 ← phi( main::@30/(byte) bob_charset_next_id#67 ) + (byte) progress_idx#57 ← phi( main::@30/(byte) progress_idx#59 ) + (byte*) progress_cursor#57 ← phi( main::@30/(byte*) progress_cursor#59 ) + (byte) main::angle#7 ← phi( main::@30/(byte) main::angle#9 ) + (byte) main::i#3 ← phi( main::@30/(byte) main::i#4 ) + (byte**) renderBobCleanupNext#17 ← phi( main::@30/(byte**) renderBobCleanupNext#21 ) + (signed word) main::x#1 ← phi( main::@30/(signed word) main::x#0 ) + (signed byte) main::r#4 ← phi( main::@30/(signed byte) main::r#3 ) + (byte) main::a#4 ← phi( main::@30/(byte) main::a#3 ) + (signed word) mulf8s::return#6 ← phi( main::@30/(signed word) mulf8s::return#3 ) + (signed word~) main::$12 ← (signed word) mulf8s::return#6 + (number~) main::$13 ← (signed word~) main::$12 * (number) 2 + (number~) main::$14 ← (number~) main::$13 + (number) $5a*(number) $100 + (signed word) main::y#0 ← (number~) main::$14 *((const byte*) BORDERCOL) ← (number) 2 (byte) main::a#1 ← (byte) main::a#4 + (number) $62 (signed byte) main::r#1 ← (signed byte) main::r#4 + (number) 3 - (byte~) main::$14 ← > (signed word) main::x#1 - (byte~) main::$15 ← > (signed word) main::y#0 - (byte) renderBob::xpos#0 ← (byte~) main::$14 - (byte) renderBob::ypos#0 ← (byte~) main::$15 + (byte~) main::$15 ← > (signed word) main::x#1 + (byte~) main::$16 ← > (signed word) main::y#0 + (byte) renderBob::xpos#0 ← (byte~) main::$15 + (byte) renderBob::ypos#0 ← (byte~) main::$16 call renderBob - to:main::@31 -main::@31: scope:[main] from main::@30 - (byte) bob_charset_next_id#63 ← phi( main::@30/(byte) bob_charset_next_id#65 ) - (byte) progress_idx#55 ← phi( main::@30/(byte) progress_idx#57 ) - (byte*) progress_cursor#55 ← phi( main::@30/(byte*) progress_cursor#57 ) - (byte) main::angle#5 ← phi( main::@30/(byte) main::angle#7 ) - (byte) main::a#5 ← phi( main::@30/(byte) main::a#1 ) - (signed byte) main::r#5 ← phi( main::@30/(signed byte) main::r#1 ) - (byte) main::i#2 ← phi( main::@30/(byte) main::i#3 ) - (byte) main::i#1 ← (byte) main::i#2 + rangenext(0,$19) - (bool~) main::$17 ← (byte) main::i#1 != rangelast(0,$19) - if((bool~) main::$17) goto main::@6 + to:main::@32 +main::@32: scope:[main] from main::@31 + (byte) bob_charset_next_id#63 ← phi( main::@31/(byte) bob_charset_next_id#65 ) + (byte) progress_idx#55 ← phi( main::@31/(byte) progress_idx#57 ) + (byte*) progress_cursor#55 ← phi( main::@31/(byte*) progress_cursor#57 ) + (byte) main::angle#5 ← phi( main::@31/(byte) main::angle#7 ) + (byte) main::a#5 ← phi( main::@31/(byte) main::a#1 ) + (signed byte) main::r#5 ← phi( main::@31/(signed byte) main::r#1 ) + (byte) main::i#2 ← phi( main::@31/(byte) main::i#3 ) + (byte**) renderBobCleanupNext#10 ← phi( main::@31/(byte**) renderBobCleanupNext#5 ) + (byte**) renderBobCleanupNext#1 ← (byte**) renderBobCleanupNext#10 + (byte) main::i#1 ← (byte) main::i#2 + rangenext(0,NUM_BOBS-1) + (bool~) main::$18 ← (byte) main::i#1 != rangelast(0,NUM_BOBS-1) + if((bool~) main::$18) goto main::@6 to:main::@7 -main::@7: scope:[main] from main::@31 - (byte) bob_charset_next_id#61 ← phi( main::@31/(byte) bob_charset_next_id#63 ) - (byte) progress_idx#53 ← phi( main::@31/(byte) progress_idx#55 ) - (byte*) progress_cursor#53 ← phi( main::@31/(byte*) progress_cursor#55 ) - (byte) main::angle#3 ← phi( main::@31/(byte) main::angle#5 ) +main::@7: scope:[main] from main::@32 + (byte) bob_charset_next_id#61 ← phi( main::@32/(byte) bob_charset_next_id#63 ) + (byte) progress_idx#53 ← phi( main::@32/(byte) progress_idx#55 ) + (byte*) progress_cursor#53 ← phi( main::@32/(byte*) progress_cursor#55 ) + (byte**) renderBobCleanupNext#32 ← phi( main::@32/(byte**) renderBobCleanupNext#1 ) + (byte) main::angle#3 ← phi( main::@32/(byte) main::angle#5 ) (byte) main::angle#1 ← (byte) main::angle#3 + (number) 3 *((const byte*) BORDERCOL) ← (number) 0 (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::@32 -main::@32: scope:[main] from main::@7 + to:main::@33 +main::@33: scope:[main] from main::@7 (byte) bob_charset_next_id#59 ← phi( main::@7/(byte) bob_charset_next_id#61 ) (byte) progress_idx#51 ← phi( main::@7/(byte) progress_idx#53 ) (byte*) progress_cursor#51 ← phi( main::@7/(byte*) progress_cursor#53 ) - (byte) main::angle#8 ← phi( main::@7/(byte) main::angle#1 ) + (byte) main::angle#10 ← phi( main::@7/(byte) main::angle#1 ) + (byte**) renderBobCleanupNext#29 ← phi( main::@7/(byte**) renderBobCleanupNext#32 ) (byte) keyboard_key_pressed::return#5 ← phi( main::@7/(byte) keyboard_key_pressed::return#2 ) - (byte~) main::$18 ← (byte) keyboard_key_pressed::return#5 - (bool~) main::$22 ← (number) 0 != (byte~) main::$18 - (bool~) main::$19 ← ! (bool~) main::$22 - if((bool~) main::$19) goto main::@1 + (byte~) main::$19 ← (byte) keyboard_key_pressed::return#5 + (bool~) main::$23 ← (number) 0 != (byte~) main::$19 + (bool~) main::$20 ← ! (bool~) main::$23 + if((bool~) main::$20) goto main::@1 to:main::@15 -main::@15: scope:[main] from main::@1 main::@32 main::@33 - (byte) bob_charset_next_id#57 ← phi( main::@1/(byte) bob_charset_next_id#58 main::@32/(byte) bob_charset_next_id#59 main::@33/(byte) bob_charset_next_id#56 ) - (byte) progress_idx#49 ← phi( main::@1/(byte) progress_idx#50 main::@32/(byte) progress_idx#51 main::@33/(byte) progress_idx#48 ) - (byte*) progress_cursor#49 ← phi( main::@1/(byte*) progress_cursor#50 main::@32/(byte*) progress_cursor#51 main::@33/(byte*) progress_cursor#48 ) +main::@15: scope:[main] from main::@1 main::@33 main::@34 + (byte**) renderBobCleanupNext#45 ← phi( main::@1/(byte**) renderBobCleanupNext#24 main::@33/(byte**) renderBobCleanupNext#29 main::@34/(byte**) renderBobCleanupNext#43 ) + (byte) bob_charset_next_id#57 ← phi( main::@1/(byte) bob_charset_next_id#58 main::@33/(byte) bob_charset_next_id#59 main::@34/(byte) bob_charset_next_id#56 ) + (byte) progress_idx#49 ← phi( main::@1/(byte) progress_idx#50 main::@33/(byte) progress_idx#51 main::@34/(byte) progress_idx#48 ) + (byte*) progress_cursor#49 ← phi( main::@1/(byte*) progress_cursor#50 main::@33/(byte*) progress_cursor#51 main::@34/(byte*) progress_cursor#48 ) (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::@33 -main::@33: scope:[main] from main::@15 + to:main::@34 +main::@34: scope:[main] from main::@15 + (byte**) renderBobCleanupNext#43 ← phi( main::@15/(byte**) renderBobCleanupNext#45 ) (byte) bob_charset_next_id#56 ← phi( main::@15/(byte) bob_charset_next_id#57 ) (byte) progress_idx#48 ← phi( main::@15/(byte) progress_idx#49 ) (byte*) progress_cursor#48 ← phi( main::@15/(byte*) progress_cursor#49 ) (byte) keyboard_key_pressed::return#6 ← phi( main::@15/(byte) keyboard_key_pressed::return#3 ) - (byte~) main::$20 ← (byte) keyboard_key_pressed::return#6 - (bool~) main::$21 ← (number) 0 != (byte~) main::$20 - if((bool~) main::$21) goto main::@15 + (byte~) main::$21 ← (byte) keyboard_key_pressed::return#6 + (bool~) main::$22 ← (number) 0 != (byte~) main::$21 + if((bool~) main::$22) goto main::@15 to:main::@17 -main::@17: scope:[main] from main::@33 - (byte) bob_charset_next_id#55 ← phi( main::@33/(byte) bob_charset_next_id#56 ) - (byte) progress_idx#47 ← phi( main::@33/(byte) progress_idx#48 ) - (byte*) progress_cursor#47 ← phi( main::@33/(byte*) progress_cursor#48 ) +main::@17: scope:[main] from main::@34 + (byte**) renderBobCleanupNext#41 ← phi( main::@34/(byte**) renderBobCleanupNext#43 ) + (byte) bob_charset_next_id#55 ← phi( main::@34/(byte) bob_charset_next_id#56 ) + (byte) progress_idx#47 ← phi( main::@34/(byte) progress_idx#48 ) + (byte*) progress_cursor#47 ← phi( main::@34/(byte*) progress_cursor#48 ) (byte*) main::vicSelectGfxBank2_gfx#0 ← (const byte*) SCREEN_BASIC to:main::vicSelectGfxBank2 main::vicSelectGfxBank2: scope:[main] from main::@17 + (byte**) renderBobCleanupNext#39 ← phi( main::@17/(byte**) renderBobCleanupNext#41 ) (byte) bob_charset_next_id#54 ← phi( main::@17/(byte) bob_charset_next_id#55 ) (byte) progress_idx#46 ← phi( main::@17/(byte) progress_idx#47 ) (byte*) progress_cursor#46 ← phi( main::@17/(byte*) progress_cursor#47 ) @@ -715,6 +755,7 @@ main::vicSelectGfxBank2: scope:[main] from main::@17 (byte*) main::vicSelectGfxBank2_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank2_gfx#1 to:main::vicSelectGfxBank2_toDd001 main::vicSelectGfxBank2_toDd001: scope:[main] from main::vicSelectGfxBank2 + (byte**) renderBobCleanupNext#37 ← phi( main::vicSelectGfxBank2/(byte**) renderBobCleanupNext#39 ) (byte) bob_charset_next_id#52 ← phi( main::vicSelectGfxBank2/(byte) bob_charset_next_id#54 ) (byte) progress_idx#44 ← phi( main::vicSelectGfxBank2/(byte) progress_idx#46 ) (byte*) progress_cursor#44 ← phi( main::vicSelectGfxBank2/(byte*) progress_cursor#46 ) @@ -726,6 +767,7 @@ main::vicSelectGfxBank2_toDd001: scope:[main] from main::vicSelectGfxBank2 (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**) renderBobCleanupNext#35 ← phi( main::vicSelectGfxBank2_toDd001/(byte**) renderBobCleanupNext#37 ) (byte) bob_charset_next_id#50 ← phi( main::vicSelectGfxBank2_toDd001/(byte) bob_charset_next_id#52 ) (byte) progress_idx#42 ← phi( main::vicSelectGfxBank2_toDd001/(byte) progress_idx#44 ) (byte*) progress_cursor#42 ← phi( main::vicSelectGfxBank2_toDd001/(byte*) progress_cursor#44 ) @@ -733,6 +775,7 @@ main::vicSelectGfxBank2_toDd001_@return: scope:[main] from main::vicSelectGfxBa (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**) renderBobCleanupNext#33 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte**) renderBobCleanupNext#35 ) (byte) bob_charset_next_id#47 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte) bob_charset_next_id#50 ) (byte) progress_idx#39 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte) progress_idx#42 ) (byte*) progress_cursor#39 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte*) progress_cursor#42 ) @@ -741,6 +784,7 @@ main::vicSelectGfxBank2_@1: scope:[main] from main::vicSelectGfxBank2_toDd001_@ *((const byte*) CIA2_PORT_A) ← (byte~) main::vicSelectGfxBank2_$0 to:main::@23 main::@23: scope:[main] from main::vicSelectGfxBank2_@1 + (byte**) renderBobCleanupNext#30 ← phi( main::vicSelectGfxBank2_@1/(byte**) renderBobCleanupNext#33 ) (byte) bob_charset_next_id#42 ← phi( main::vicSelectGfxBank2_@1/(byte) bob_charset_next_id#47 ) (byte) progress_idx#36 ← phi( main::vicSelectGfxBank2_@1/(byte) progress_idx#39 ) (byte*) progress_cursor#36 ← phi( main::vicSelectGfxBank2_@1/(byte*) progress_cursor#39 ) @@ -748,6 +792,7 @@ main::@23: scope:[main] from main::vicSelectGfxBank2_@1 (byte*) main::toD0182_gfx#0 ← (const byte*) CHARSET_BASIC to:main::toD0182 main::toD0182: scope:[main] from main::@23 + (byte**) renderBobCleanupNext#26 ← phi( main::@23/(byte**) renderBobCleanupNext#30 ) (byte) bob_charset_next_id#36 ← phi( main::@23/(byte) bob_charset_next_id#42 ) (byte) progress_idx#33 ← phi( main::@23/(byte) progress_idx#36 ) (byte*) progress_cursor#33 ← phi( main::@23/(byte*) progress_cursor#36 ) @@ -765,6 +810,7 @@ main::toD0182: scope:[main] from main::@23 (byte) main::toD0182_return#0 ← (number~) main::toD0182_$8 to:main::toD0182_@return main::toD0182_@return: scope:[main] from main::toD0182 + (byte**) renderBobCleanupNext#22 ← phi( main::toD0182/(byte**) renderBobCleanupNext#26 ) (byte) bob_charset_next_id#29 ← phi( main::toD0182/(byte) bob_charset_next_id#36 ) (byte) progress_idx#29 ← phi( main::toD0182/(byte) progress_idx#33 ) (byte*) progress_cursor#29 ← phi( main::toD0182/(byte*) progress_cursor#33 ) @@ -772,6 +818,7 @@ main::toD0182_@return: scope:[main] from main::toD0182 (byte) main::toD0182_return#1 ← (byte) main::toD0182_return#2 to:main::@24 main::@24: scope:[main] from main::toD0182_@return + (byte**) renderBobCleanupNext#18 ← phi( main::toD0182_@return/(byte**) renderBobCleanupNext#22 ) (byte) bob_charset_next_id#20 ← phi( main::toD0182_@return/(byte) bob_charset_next_id#29 ) (byte) progress_idx#23 ← phi( main::toD0182_@return/(byte) progress_idx#29 ) (byte*) progress_cursor#22 ← phi( main::toD0182_@return/(byte*) progress_cursor#29 ) @@ -780,14 +827,19 @@ main::@24: scope:[main] from main::toD0182_@return *((const byte*) D018) ← (byte~) main::$7 to:main::@return main::@return: scope:[main] from main::@24 + (byte**) renderBobCleanupNext#11 ← phi( main::@24/(byte**) renderBobCleanupNext#18 ) (byte) bob_charset_next_id#11 ← phi( main::@24/(byte) bob_charset_next_id#20 ) (byte) progress_idx#13 ← phi( main::@24/(byte) progress_idx#23 ) (byte*) progress_cursor#12 ← phi( main::@24/(byte*) progress_cursor#22 ) (byte*) progress_cursor#1 ← (byte*) progress_cursor#12 (byte) progress_idx#1 ← (byte) progress_idx#13 (byte) bob_charset_next_id#1 ← (byte) bob_charset_next_id#11 + (byte**) renderBobCleanupNext#2 ← (byte**) renderBobCleanupNext#11 return to:@return +@59: scope:[] from @58 + (byte**) renderBobCleanupNext#3 ← (byte**) 0 + to:@65 (void()) renderBobInit() renderBobInit: scope:[renderBobInit] from main::@26 @@ -797,26 +849,38 @@ renderBobInit::@1: scope:[renderBobInit] from renderBobInit renderBobInit::@1 (byte) renderBobInit::y#2 ← phi( renderBobInit/(byte) renderBobInit::y#0 renderBobInit::@1/(byte) renderBobInit::y#1 ) (word~) renderBobInit::$0 ← ((word)) (byte) renderBobInit::y#2 (number~) renderBobInit::$1 ← (word~) renderBobInit::$0 * (number) $28 - (byte~) renderBobInit::$3 ← (byte) renderBobInit::y#2 * (const byte) SIZEOF_WORD - *((const word*) RENDERBOB_YOFFSET + (byte~) renderBobInit::$3) ← (number~) renderBobInit::$1 + (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 * (const byte) SIZEOF_WORD + *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (number~) renderBobInit::$1 (byte) renderBobInit::y#1 ← (byte) renderBobInit::y#2 + rangenext(0,$1f) (bool~) renderBobInit::$2 ← (byte) renderBobInit::y#1 != rangelast(0,$1f) if((bool~) renderBobInit::$2) goto renderBobInit::@1 + to:renderBobInit::@2 +renderBobInit::@2: scope:[renderBobInit] from renderBobInit::@1 + (byte) renderBobInit::i#0 ← (byte) 0 + to:renderBobInit::@3 +renderBobInit::@3: scope:[renderBobInit] from renderBobInit::@2 renderBobInit::@3 + (byte) renderBobInit::i#2 ← phi( renderBobInit::@2/(byte) renderBobInit::i#0 renderBobInit::@3/(byte) renderBobInit::i#1 ) + (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 * (const byte) SIZEOF_POINTER + *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN + (byte) renderBobInit::i#1 ← (byte) renderBobInit::i#2 + rangenext(0,NUM_BOBS-1) + (bool~) renderBobInit::$3 ← (byte) renderBobInit::i#1 != rangelast(0,NUM_BOBS-1) + if((bool~) renderBobInit::$3) goto renderBobInit::@3 to:renderBobInit::@return -renderBobInit::@return: scope:[renderBobInit] from renderBobInit::@1 +renderBobInit::@return: scope:[renderBobInit] from renderBobInit::@3 return to:@return (void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos) -renderBob: scope:[renderBob] from main::@30 - (byte) renderBob::ypos#1 ← phi( main::@30/(byte) renderBob::ypos#0 ) - (byte) renderBob::xpos#1 ← phi( main::@30/(byte) renderBob::xpos#0 ) +renderBob: scope:[renderBob] from main::@31 + (byte**) renderBobCleanupNext#12 ← phi( main::@31/(byte**) renderBobCleanupNext#17 ) + (byte) renderBob::ypos#1 ← phi( main::@31/(byte) renderBob::ypos#0 ) + (byte) renderBob::xpos#1 ← phi( main::@31/(byte) renderBob::xpos#0 ) (byte~) renderBob::$0 ← (byte) renderBob::xpos#1 / (const byte) BOB_SHIFTS_X (byte) renderBob::x_char_offset#0 ← (byte~) renderBob::$0 (byte~) renderBob::$1 ← (byte) renderBob::ypos#1 / (const byte) BOB_SHIFTS_Y (byte) renderBob::y_char_offset#0 ← (byte~) renderBob::$1 (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 * (const byte) SIZEOF_WORD - (word) renderBob::y_offset#0 ← *((const word*) RENDERBOB_YOFFSET + (byte~) renderBob::$8) + (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8) (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 (byte*~) renderBob::$3 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 (byte*) renderBob::screen#0 ← (byte*~) renderBob::$3 @@ -825,6 +889,8 @@ renderBob: scope:[renderBob] from main::@30 (number~) renderBob::$6 ← (byte) renderBob::xpos#1 & (number) 3 (number~) renderBob::$7 ← (number~) renderBob::$5 + (number~) renderBob::$6 (byte) renderBob::bob_table_idx#0 ← (number~) renderBob::$7 + *((byte**) renderBobCleanupNext#12) ← (byte*) renderBob::screen#0 + (byte**) renderBobCleanupNext#4 ← (byte**) renderBobCleanupNext#12 + (const byte) SIZEOF_POINTER *((byte*) renderBob::screen#0 + (number) 0) ← *((const byte*) BOB_TABLES+(number) 0*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) *((byte*) renderBob::screen#0 + (number) $28) ← *((const byte*) BOB_TABLES+(number) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) *((byte*) renderBob::screen#0 + (number) $50) ← *((const byte*) BOB_TABLES+(number) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) @@ -836,6 +902,38 @@ renderBob: scope:[renderBob] from main::@30 *((byte*) renderBob::screen#0 + (number) $52) ← *((const byte*) BOB_TABLES+(number) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) to:renderBob::@return renderBob::@return: scope:[renderBob] from renderBob + (byte**) renderBobCleanupNext#13 ← phi( renderBob/(byte**) renderBobCleanupNext#4 ) + (byte**) renderBobCleanupNext#5 ← (byte**) renderBobCleanupNext#13 + return + to:@return + +(void()) renderBobCleanup() +renderBobCleanup: scope:[renderBobCleanup] from main::@5 + (byte) renderBobCleanup::i#0 ← (byte) 0 + to:renderBobCleanup::@1 +renderBobCleanup::@1: scope:[renderBobCleanup] from renderBobCleanup renderBobCleanup::@1 + (byte) renderBobCleanup::i#2 ← phi( renderBobCleanup/(byte) renderBobCleanup::i#0 renderBobCleanup::@1/(byte) renderBobCleanup::i#1 ) + (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 * (const byte) SIZEOF_POINTER + (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1) + *((byte*) renderBobCleanup::screen#0 + (number) 0) ← (number) 0 + *((byte*) renderBobCleanup::screen#0 + (number) $28) ← (number) 0 + *((byte*) renderBobCleanup::screen#0 + (number) $50) ← (number) 0 + *((byte*) renderBobCleanup::screen#0 + (number) 1) ← (number) 0 + *((byte*) renderBobCleanup::screen#0 + (number) $29) ← (number) 0 + *((byte*) renderBobCleanup::screen#0 + (number) $51) ← (number) 0 + *((byte*) renderBobCleanup::screen#0 + (number) 2) ← (number) 0 + *((byte*) renderBobCleanup::screen#0 + (number) $2a) ← (number) 0 + *((byte*) renderBobCleanup::screen#0 + (number) $52) ← (number) 0 + (byte) renderBobCleanup::i#1 ← (byte) renderBobCleanup::i#2 + rangenext(0,NUM_BOBS-1) + (bool~) renderBobCleanup::$0 ← (byte) renderBobCleanup::i#1 != rangelast(0,NUM_BOBS-1) + if((bool~) renderBobCleanup::$0) goto renderBobCleanup::@1 + to:renderBobCleanup::@2 +renderBobCleanup::@2: scope:[renderBobCleanup] from renderBobCleanup::@1 + (byte**) renderBobCleanupNext#6 ← (const byte**) RENDERBOB_CLEANUP + to:renderBobCleanup::@return +renderBobCleanup::@return: scope:[renderBobCleanup] from renderBobCleanup::@2 + (byte**) renderBobCleanupNext#14 ← phi( renderBobCleanup::@2/(byte**) renderBobCleanupNext#6 ) + (byte**) renderBobCleanupNext#7 ← (byte**) renderBobCleanupNext#14 return to:@return @@ -1108,9 +1206,10 @@ shiftProtoBobDown::@3: scope:[shiftProtoBobDown] from shiftProtoBobDown::@1 shiftProtoBobDown::@return: scope:[shiftProtoBobDown] from shiftProtoBobDown::@3 return to:@return -@64: scope:[] from @58 +@65: scope:[] from @59 + (byte**) renderBobCleanupNext#27 ← phi( @59/(byte**) renderBobCleanupNext#3 ) (byte) bob_charset_next_id#6 ← (byte) 0 - to:@65 + to:@66 (byte()) bobCharsetFindOrAddGlyph((byte*) bobCharsetFindOrAddGlyph::bob_glyph) bobCharsetFindOrAddGlyph: scope:[bobCharsetFindOrAddGlyph] from prepareBobs::@19 prepareBobs::@8 @@ -1233,11 +1332,12 @@ 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 -@65: scope:[] from @64 - (byte) bob_charset_next_id#35 ← phi( @64/(byte) bob_charset_next_id#6 ) +@66: scope:[] from @65 + (byte**) renderBobCleanupNext#23 ← phi( @65/(byte**) renderBobCleanupNext#27 ) + (byte) bob_charset_next_id#35 ← phi( @65/(byte) bob_charset_next_id#6 ) (byte*) progress_cursor#5 ← (byte*) 0 (byte) progress_idx#5 ← (byte) 0 - to:@67 + to:@68 (void()) progress_init((byte*) progress_init::line) progress_init: scope:[progress_init] from prepareBobs @@ -1280,28 +1380,32 @@ progress_inc::@return: scope:[progress_inc] from progress_inc::@1 (byte*) progress_cursor#9 ← (byte*) progress_cursor#19 return to:@return -@67: scope:[] from @65 - (byte) bob_charset_next_id#27 ← phi( @65/(byte) bob_charset_next_id#35 ) - (byte) progress_idx#27 ← phi( @65/(byte) progress_idx#5 ) - (byte*) progress_cursor#27 ← phi( @65/(byte*) progress_cursor#5 ) +@68: scope:[] from @66 + (byte**) renderBobCleanupNext#19 ← phi( @66/(byte**) renderBobCleanupNext#23 ) + (byte) bob_charset_next_id#27 ← phi( @66/(byte) bob_charset_next_id#35 ) + (byte) progress_idx#27 ← phi( @66/(byte) progress_idx#5 ) + (byte*) progress_cursor#27 ← phi( @66/(byte*) progress_cursor#5 ) call main - to:@68 -@68: scope:[] from @67 - (byte) bob_charset_next_id#18 ← phi( @67/(byte) bob_charset_next_id#1 ) - (byte) progress_idx#21 ← phi( @67/(byte) progress_idx#1 ) - (byte*) progress_cursor#20 ← phi( @67/(byte*) progress_cursor#1 ) + to:@69 +@69: scope:[] from @68 + (byte**) renderBobCleanupNext#15 ← phi( @68/(byte**) renderBobCleanupNext#2 ) + (byte) bob_charset_next_id#18 ← phi( @68/(byte) bob_charset_next_id#1 ) + (byte) progress_idx#21 ← phi( @68/(byte) progress_idx#1 ) + (byte*) progress_cursor#20 ← phi( @68/(byte*) progress_cursor#1 ) (byte*) progress_cursor#10 ← (byte*) progress_cursor#20 (byte) progress_idx#11 ← (byte) progress_idx#21 (byte) bob_charset_next_id#9 ← (byte) bob_charset_next_id#18 + (byte**) renderBobCleanupNext#8 ← (byte**) renderBobCleanupNext#15 to:@end -@end: scope:[] from @68 +@end: scope:[] from @69 SYMBOL TABLE SSA (label) @58 -(label) @64 +(label) @59 (label) @65 -(label) @67 +(label) @66 (label) @68 +(label) @69 (label) @begin (label) @end (const byte*) BOB_CHARSET = (byte*)(number) $2000 @@ -1319,6 +1423,8 @@ SYMBOL TABLE SSA (const signed byte*) COS = (const signed byte*) SIN+(number) $40 (const byte*) D018 = (byte*)(number) $d018 (const byte) KEY_SPACE = (number) $3c +(const word*) MUL40 = { fill( $20, 0) } +(const byte) NUM_BOBS = (number) $14 (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++) @@ -1329,11 +1435,12 @@ SYMBOL TABLE SSA (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) RASTER = (byte*)(number) $d012 -(const word*) RENDERBOB_YOFFSET = { fill( $20, 0) } +(const byte**) RENDERBOB_CLEANUP = { fill( NUM_BOBS, 0) } (const byte*) SCREEN_BASIC = (byte*)(number) $400 (const signed byte*) SIN = kickasm {{ .for(var i=0;i<$140;i++) .byte >round($7fff*sin(i*2*PI/256)) }} +(const byte) SIZEOF_POINTER = (byte) 2 (const byte) SIZEOF_WORD = (byte) 2 (byte()) bobCharsetFindOrAddGlyph((byte*) bobCharsetFindOrAddGlyph::bob_glyph) (bool~) bobCharsetFindOrAddGlyph::$0 @@ -1504,6 +1611,7 @@ SYMBOL TABLE SSA (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#8 (byte) bob_charset_next_id#9 (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) @@ -1547,22 +1655,22 @@ SYMBOL TABLE SSA (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 -(signed word~) main::$11 -(number~) main::$12 +(signed word~) main::$10 +(number~) main::$11 +(signed word~) main::$12 (number~) main::$13 -(byte~) main::$14 +(number~) main::$14 (byte~) main::$15 -(bool~) main::$17 -(byte~) main::$18 -(bool~) main::$19 -(byte~) main::$20 -(bool~) main::$21 +(byte~) main::$16 +(bool~) main::$18 +(byte~) main::$19 +(bool~) main::$20 +(byte~) main::$21 (bool~) main::$22 +(bool~) main::$23 (byte~) main::$4 (byte~) main::$7 (bool~) main::$8 -(signed word~) main::$9 (label) main::@1 (label) main::@15 (label) main::@17 @@ -1579,6 +1687,7 @@ SYMBOL TABLE SSA (label) main::@31 (label) main::@32 (label) main::@33 +(label) main::@34 (label) main::@4 (label) main::@5 (label) main::@6 @@ -1595,6 +1704,7 @@ SYMBOL TABLE SSA (byte) main::angle#0 (byte) main::angle#1 (byte) main::angle#10 +(byte) main::angle#11 (byte) main::angle#2 (byte) main::angle#3 (byte) main::angle#4 @@ -2084,6 +2194,7 @@ SYMBOL TABLE SSA (byte*) progress_cursor#66 (byte*) progress_cursor#67 (byte*) progress_cursor#68 +(byte*) progress_cursor#69 (byte*) progress_cursor#7 (byte*) progress_cursor#8 (byte*) progress_cursor#9 @@ -2154,6 +2265,7 @@ SYMBOL TABLE SSA (byte) progress_idx#66 (byte) progress_idx#67 (byte) progress_idx#68 +(byte) progress_idx#69 (byte) progress_idx#7 (byte) progress_idx#8 (byte) progress_idx#9 @@ -2196,13 +2308,85 @@ SYMBOL TABLE SSA (byte) renderBob::ypos (byte) renderBob::ypos#0 (byte) renderBob::ypos#1 +(void()) renderBobCleanup() +(bool~) renderBobCleanup::$0 +(byte~) renderBobCleanup::$1 +(label) renderBobCleanup::@1 +(label) renderBobCleanup::@2 +(label) renderBobCleanup::@return +(byte) renderBobCleanup::i +(byte) renderBobCleanup::i#0 +(byte) renderBobCleanup::i#1 +(byte) renderBobCleanup::i#2 +(byte*) renderBobCleanup::screen +(byte*) renderBobCleanup::screen#0 +(byte**) renderBobCleanupNext +(byte**) renderBobCleanupNext#0 +(byte**) renderBobCleanupNext#1 +(byte**) renderBobCleanupNext#10 +(byte**) renderBobCleanupNext#11 +(byte**) renderBobCleanupNext#12 +(byte**) renderBobCleanupNext#13 +(byte**) renderBobCleanupNext#14 +(byte**) renderBobCleanupNext#15 +(byte**) renderBobCleanupNext#16 +(byte**) renderBobCleanupNext#17 +(byte**) renderBobCleanupNext#18 +(byte**) renderBobCleanupNext#19 +(byte**) renderBobCleanupNext#2 +(byte**) renderBobCleanupNext#20 +(byte**) renderBobCleanupNext#21 +(byte**) renderBobCleanupNext#22 +(byte**) renderBobCleanupNext#23 +(byte**) renderBobCleanupNext#24 +(byte**) renderBobCleanupNext#25 +(byte**) renderBobCleanupNext#26 +(byte**) renderBobCleanupNext#27 +(byte**) renderBobCleanupNext#28 +(byte**) renderBobCleanupNext#29 +(byte**) renderBobCleanupNext#3 +(byte**) renderBobCleanupNext#30 +(byte**) renderBobCleanupNext#31 +(byte**) renderBobCleanupNext#32 +(byte**) renderBobCleanupNext#33 +(byte**) renderBobCleanupNext#34 +(byte**) renderBobCleanupNext#35 +(byte**) renderBobCleanupNext#36 +(byte**) renderBobCleanupNext#37 +(byte**) renderBobCleanupNext#38 +(byte**) renderBobCleanupNext#39 +(byte**) renderBobCleanupNext#4 +(byte**) renderBobCleanupNext#40 +(byte**) renderBobCleanupNext#41 +(byte**) renderBobCleanupNext#42 +(byte**) renderBobCleanupNext#43 +(byte**) renderBobCleanupNext#44 +(byte**) renderBobCleanupNext#45 +(byte**) renderBobCleanupNext#46 +(byte**) renderBobCleanupNext#47 +(byte**) renderBobCleanupNext#48 +(byte**) renderBobCleanupNext#49 +(byte**) renderBobCleanupNext#5 +(byte**) renderBobCleanupNext#50 +(byte**) renderBobCleanupNext#6 +(byte**) renderBobCleanupNext#7 +(byte**) renderBobCleanupNext#8 +(byte**) renderBobCleanupNext#9 (void()) renderBobInit() (word~) renderBobInit::$0 (number~) renderBobInit::$1 (bool~) renderBobInit::$2 -(byte~) renderBobInit::$3 +(bool~) renderBobInit::$3 +(byte~) renderBobInit::$4 +(byte~) renderBobInit::$5 (label) renderBobInit::@1 +(label) renderBobInit::@2 +(label) renderBobInit::@3 (label) renderBobInit::@return +(byte) renderBobInit::i +(byte) renderBobInit::i#0 +(byte) renderBobInit::i#1 +(byte) renderBobInit::i#2 (byte) renderBobInit::y (byte) renderBobInit::y#0 (byte) renderBobInit::y#1 @@ -2319,21 +2503,23 @@ 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) 0 in (byte) main::angle#0 ← (number) 0 Adding number conversion cast (unumber) $f8 in (bool~) main::$8 ← *((const byte*) RASTER) < (number) $f8 +Adding number conversion cast (unumber) $f in *((const byte*) BORDERCOL) ← (number) $f Adding number conversion cast (snumber) $1e in (signed byte) main::r#0 ← (number) $1e Adding number conversion cast (unumber) 1 in *((const byte*) BORDERCOL) ← (number) 1 -Adding number conversion cast (snumber) $4b*$100 in (number~) main::$10 ← (signed word~) main::$9 + (number) $4b*(number) $100 -Adding number conversion cast (snumber) main::$10 in (number~) main::$10 ← (signed word~) main::$9 + (snumber)(number) $4b*(number) $100 -Adding number conversion cast (snumber) 2 in (number~) main::$12 ← (signed word~) main::$11 * (number) 2 -Adding number conversion cast (snumber) main::$12 in (number~) main::$12 ← (signed word~) main::$11 * (snumber)(number) 2 -Adding number conversion cast (snumber) $5a*$100 in (number~) main::$13 ← (snumber~) main::$12 + (number) $5a*(number) $100 -Adding number conversion cast (snumber) main::$13 in (number~) main::$13 ← (snumber~) main::$12 + (snumber)(number) $5a*(number) $100 +Adding number conversion cast (snumber) $4b*$100 in (number~) main::$11 ← (signed word~) main::$10 + (number) $4b*(number) $100 +Adding number conversion cast (snumber) main::$11 in (number~) main::$11 ← (signed word~) main::$10 + (snumber)(number) $4b*(number) $100 +Adding number conversion cast (snumber) 2 in (number~) main::$13 ← (signed word~) main::$12 * (number) 2 +Adding number conversion cast (snumber) main::$13 in (number~) main::$13 ← (signed word~) main::$12 * (snumber)(number) 2 +Adding number conversion cast (snumber) $5a*$100 in (number~) main::$14 ← (snumber~) main::$13 + (number) $5a*(number) $100 +Adding number conversion cast (snumber) main::$14 in (number~) main::$14 ← (snumber~) main::$13 + (snumber)(number) $5a*(number) $100 Adding number conversion cast (unumber) 2 in *((const byte*) BORDERCOL) ← (number) 2 Adding number conversion cast (unumber) $62 in (byte) main::a#1 ← (byte) main::a#4 + (number) $62 Adding number conversion cast (snumber) 3 in (signed byte) main::r#1 ← (signed byte) main::r#4 + (number) 3 +Adding number conversion cast (unumber) 1 in (byte) main::i#1 ← (byte) main::i#2 + rangenext(0,NUM_BOBS-1) Adding number conversion cast (unumber) 3 in (byte) main::angle#1 ← (byte) main::angle#3 + (number) 3 Adding number conversion cast (unumber) 0 in *((const byte*) BORDERCOL) ← (number) 0 -Adding number conversion cast (unumber) 0 in (bool~) main::$22 ← (number) 0 != (byte~) main::$18 -Adding number conversion cast (unumber) 0 in (bool~) main::$21 ← (number) 0 != (byte~) main::$20 +Adding number conversion cast (unumber) 0 in (bool~) main::$23 ← (number) 0 != (byte~) main::$19 +Adding number conversion cast (unumber) 0 in (bool~) main::$22 ← (number) 0 != (byte~) main::$21 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 @@ -2351,6 +2537,7 @@ Adding number conversion cast (unumber) main::toD0182_$7 in (number~) main::toD0 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~) renderBobInit::$1 ← (word~) renderBobInit::$0 * (number) $28 Adding number conversion cast (unumber) renderBobInit::$1 in (number~) renderBobInit::$1 ← (word~) renderBobInit::$0 * (unumber)(number) $28 +Adding number conversion cast (unumber) 1 in (byte) renderBobInit::i#1 ← (byte) renderBobInit::i#2 + rangenext(0,NUM_BOBS-1) Adding number conversion cast (unumber) 7 in (number~) renderBob::$4 ← (byte) renderBob::ypos#1 & (number) 7 Adding number conversion cast (unumber) renderBob::$4 in (number~) renderBob::$4 ← (byte) renderBob::ypos#1 & (unumber)(number) 7 Adding number conversion cast (unumber) renderBob::$5 in (number~) renderBob::$5 ← (unumber~) renderBob::$4 * (const byte) BOB_SHIFTS_X @@ -2384,6 +2571,25 @@ Adding number conversion cast (unumber) $2a in *((byte*) renderBob::screen#0 + ( Adding number conversion cast (unumber) 8*BOB_SUBTABLE_SIZE in *((byte*) renderBob::screen#0 + (number) $52) ← *((const byte*) BOB_TABLES+(number) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) Adding number conversion cast (unumber) 8 in *((byte*) renderBob::screen#0 + (number) $52) ← *((const byte*) BOB_TABLES+(unumber)(number) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) Adding number conversion cast (unumber) $52 in *((byte*) renderBob::screen#0 + (number) $52) ← *((const byte*) BOB_TABLES+(unumber)(unumber)(number) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) +Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) 0) ← (number) 0 +Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) 0) ← ((unumber)) (number) 0 +Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) $28) ← (number) 0 +Adding number conversion cast (unumber) $28 in *((byte*) renderBobCleanup::screen#0 + (number) $28) ← ((unumber)) (number) 0 +Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) $50) ← (number) 0 +Adding number conversion cast (unumber) $50 in *((byte*) renderBobCleanup::screen#0 + (number) $50) ← ((unumber)) (number) 0 +Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) 1) ← (number) 0 +Adding number conversion cast (unumber) 1 in *((byte*) renderBobCleanup::screen#0 + (number) 1) ← ((unumber)) (number) 0 +Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) $29) ← (number) 0 +Adding number conversion cast (unumber) $29 in *((byte*) renderBobCleanup::screen#0 + (number) $29) ← ((unumber)) (number) 0 +Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) $51) ← (number) 0 +Adding number conversion cast (unumber) $51 in *((byte*) renderBobCleanup::screen#0 + (number) $51) ← ((unumber)) (number) 0 +Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) 2) ← (number) 0 +Adding number conversion cast (unumber) 2 in *((byte*) renderBobCleanup::screen#0 + (number) 2) ← ((unumber)) (number) 0 +Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) $2a) ← (number) 0 +Adding number conversion cast (unumber) $2a in *((byte*) renderBobCleanup::screen#0 + (number) $2a) ← ((unumber)) (number) 0 +Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) $52) ← (number) 0 +Adding number conversion cast (unumber) $52 in *((byte*) renderBobCleanup::screen#0 + (number) $52) ← ((unumber)) (number) 0 +Adding number conversion cast (unumber) 1 in (byte) renderBobCleanup::i#1 ← (byte) renderBobCleanup::i#2 + rangenext(0,NUM_BOBS-1) Adding number conversion cast (unumber) 0 in (byte) bob_charset_next_id#2 ← (number) 0 Adding number conversion cast (unumber) $30 in (byte*) bobCharsetFindOrAddGlyph::bob_glyph#0 ← (const byte*) PROTO_BOB+(number) $30 Adding number conversion cast (unumber) 0 in (byte) prepareBobs::bob_table_idx#0 ← (number) 0 @@ -2449,6 +2655,7 @@ 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) main::angle#0 ← (unumber)(number) 0 +Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) $f Inlining cast (signed byte) main::r#0 ← (snumber)(number) $1e Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 1 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 2 @@ -2458,6 +2665,15 @@ Inlining cast (word~) main::vicSelectGfxBank2_toDd001_$0 ← (word)(byte*) main: 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~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 +Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) 0) ← (unumber)(number) 0 +Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $28) ← (unumber)(number) 0 +Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $50) ← (unumber)(number) 0 +Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) 1) ← (unumber)(number) 0 +Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $29) ← (unumber)(number) 0 +Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $51) ← (unumber)(number) 0 +Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) 2) ← (unumber)(number) 0 +Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $2a) ← (unumber)(number) 0 +Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $52) ← (unumber)(number) 0 Inlining cast (byte) bob_charset_next_id#2 ← (unumber)(number) 0 Inlining cast (byte) prepareBobs::bob_table_idx#0 ← (unumber)(number) 0 Inlining cast (byte) prepareBobs::shift_y#0 ← (unumber)(number) 0 @@ -2555,12 +2771,14 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 Simplifying constant integer cast $f8 +Simplifying constant integer cast $f Simplifying constant integer cast $1e Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 2 Simplifying constant integer cast $62 Simplifying constant integer cast 3 +Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -2573,6 +2791,7 @@ Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $28 +Simplifying constant integer cast 1 Simplifying constant integer cast 7 Simplifying constant integer cast 3 Simplifying constant integer cast (unumber)(number) 0*(const byte) BOB_SUBTABLE_SIZE @@ -2603,6 +2822,25 @@ Simplifying constant integer cast (unumber)(number) 8*(const byte) BOB_SUBTABLE_ Simplifying constant integer cast 8 Simplifying constant integer cast $52 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $28 +Simplifying constant integer cast 0 +Simplifying constant integer cast $50 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast $29 +Simplifying constant integer cast 0 +Simplifying constant integer cast $51 +Simplifying constant integer cast 0 +Simplifying constant integer cast 2 +Simplifying constant integer cast 0 +Simplifying constant integer cast $2a +Simplifying constant integer cast 0 +Simplifying constant integer cast $52 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 Simplifying constant integer cast $30 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -2679,12 +2917,14 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f8 +Finalized unsigned number type (byte) $f Finalized signed number type (signed byte) $1e Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 2 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $62 Finalized signed number type (signed byte) 3 +Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -2697,6 +2937,7 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -2718,6 +2959,25 @@ Finalized unsigned number type (byte) $2a Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $52 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $50 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $29 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $51 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $2a +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $52 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $30 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -2771,9 +3031,9 @@ 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 signed word in (snumber~) main::$10 ← (signed word~) main::$9 + (signed word)(number) $4b*(number) $100 -Inferred type updated to signed word in (snumber~) main::$12 ← (signed word~) main::$11 * (signed byte) 2 -Inferred type updated to signed word in (snumber~) main::$13 ← (signed word~) main::$12 + (signed word)(number) $5a*(number) $100 +Inferred type updated to signed word in (snumber~) main::$11 ← (signed word~) main::$10 + (signed word)(number) $4b*(number) $100 +Inferred type updated to signed word in (snumber~) main::$13 ← (signed word~) main::$12 * (signed byte) 2 +Inferred type updated to signed word in (snumber~) main::$14 ← (signed word~) main::$13 + (signed word)(number) $5a*(number) $100 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 @@ -2793,10 +3053,10 @@ Inversing boolean not [55] (bool~) mulf_init::$3 ← (byte~) mulf_init::$1 != (b Inversing boolean not [83] (bool~) mulf_init::$10 ← (byte) mulf_init::x_255#1 != (byte) 0 from [82] (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (byte) 0 Inversing boolean not [113] (bool~) mulf8s_prepared::$3 ← *((const signed byte*) mulf8s_prepared::memA) >= (signed byte) 0 from [112] (bool~) mulf8s_prepared::$2 ← *((const signed byte*) mulf8s_prepared::memA) < (signed byte) 0 Inversing boolean not [117] (bool~) mulf8s_prepared::$5 ← (signed byte) mulf8s_prepared::b#2 >= (signed byte) 0 from [116] (bool~) mulf8s_prepared::$4 ← (signed byte) mulf8s_prepared::b#2 < (signed byte) 0 -Inversing boolean not [255] (bool~) main::$19 ← (byte) 0 == (byte~) main::$18 from [254] (bool~) main::$22 ← (byte) 0 != (byte~) main::$18 -Inversing boolean not [460] (bool~) bobCharsetFindOrAddGlyph::$3 ← *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#2 + (byte) bobCharsetFindOrAddGlyph::i#3) == *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#2 + (byte) bobCharsetFindOrAddGlyph::i#3) from [459] (bool~) bobCharsetFindOrAddGlyph::$2 ← *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#2 + (byte) bobCharsetFindOrAddGlyph::i#3) != *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#2 + (byte) bobCharsetFindOrAddGlyph::i#3) -Inversing boolean not [468] (bool~) bobCharsetFindOrAddGlyph::$4 ← (byte) 0 == (byte) bobCharsetFindOrAddGlyph::found#2 from [467] (bool~) bobCharsetFindOrAddGlyph::$6 ← (byte) 0 != (byte) bobCharsetFindOrAddGlyph::found#2 -Inversing boolean not [501] (bool~) progress_inc::$1 ← (byte) progress_idx#8 != (byte) 8 from [500] (bool~) progress_inc::$0 ← (byte) progress_idx#8 == (byte) 8 +Inversing boolean not [260] (bool~) main::$20 ← (byte) 0 == (byte~) main::$19 from [259] (bool~) main::$23 ← (byte) 0 != (byte~) main::$19 +Inversing boolean not [499] (bool~) bobCharsetFindOrAddGlyph::$3 ← *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#2 + (byte) bobCharsetFindOrAddGlyph::i#3) == *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#2 + (byte) bobCharsetFindOrAddGlyph::i#3) from [498] (bool~) bobCharsetFindOrAddGlyph::$2 ← *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#2 + (byte) bobCharsetFindOrAddGlyph::i#3) != *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#2 + (byte) bobCharsetFindOrAddGlyph::i#3) +Inversing boolean not [507] (bool~) bobCharsetFindOrAddGlyph::$4 ← (byte) 0 == (byte) bobCharsetFindOrAddGlyph::found#2 from [506] (bool~) bobCharsetFindOrAddGlyph::$6 ← (byte) 0 != (byte) bobCharsetFindOrAddGlyph::found#2 +Inversing boolean not [540] (bool~) progress_inc::$1 ← (byte) progress_idx#8 != (byte) 8 from [539] (bool~) progress_inc::$0 ← (byte) progress_idx#8 == (byte) 8 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 @@ -2842,39 +3102,45 @@ Alias (signed word) mulf8s::return#0 = (signed word~) mulf8s::$1 (signed word) m Alias (byte*) progress_cursor#21 = (byte*) progress_cursor#28 Alias (byte) progress_idx#22 = (byte) progress_idx#28 Alias (byte) bob_charset_next_id#19 = (byte) bob_charset_next_id#28 -Alias (byte*) progress_cursor#0 = (byte*) progress_cursor#11 (byte*) progress_cursor#68 (byte*) progress_cursor#67 (byte*) progress_cursor#66 (byte*) progress_cursor#64 (byte*) progress_cursor#62 (byte*) progress_cursor#60 (byte*) progress_cursor#58 (byte*) progress_cursor#56 (byte*) progress_cursor#54 (byte*) progress_cursor#52 -Alias (byte) progress_idx#0 = (byte) progress_idx#12 (byte) progress_idx#68 (byte) progress_idx#67 (byte) progress_idx#66 (byte) progress_idx#64 (byte) progress_idx#62 (byte) progress_idx#60 (byte) progress_idx#58 (byte) progress_idx#56 (byte) progress_idx#54 (byte) progress_idx#52 -Alias (byte) bob_charset_next_id#0 = (byte) bob_charset_next_id#10 (byte) bob_charset_next_id#76 (byte) bob_charset_next_id#75 (byte) bob_charset_next_id#74 (byte) bob_charset_next_id#72 (byte) bob_charset_next_id#70 (byte) bob_charset_next_id#68 (byte) bob_charset_next_id#66 (byte) bob_charset_next_id#64 (byte) bob_charset_next_id#62 (byte) bob_charset_next_id#60 +Alias (byte**) renderBobCleanupNext#28 = (byte**) renderBobCleanupNext#49 (byte**) renderBobCleanupNext#50 (byte**) renderBobCleanupNext#48 (byte**) renderBobCleanupNext#47 (byte**) renderBobCleanupNext#46 (byte**) renderBobCleanupNext#44 (byte**) renderBobCleanupNext#42 (byte**) renderBobCleanupNext#40 (byte**) renderBobCleanupNext#38 (byte**) renderBobCleanupNext#36 (byte**) renderBobCleanupNext#34 (byte**) renderBobCleanupNext#31 +Alias (byte*) progress_cursor#0 = (byte*) progress_cursor#11 (byte*) progress_cursor#69 (byte*) progress_cursor#68 (byte*) progress_cursor#66 (byte*) progress_cursor#64 (byte*) progress_cursor#62 (byte*) progress_cursor#60 (byte*) progress_cursor#58 (byte*) progress_cursor#56 (byte*) progress_cursor#54 (byte*) progress_cursor#52 +Alias (byte) progress_idx#0 = (byte) progress_idx#12 (byte) progress_idx#69 (byte) progress_idx#68 (byte) progress_idx#66 (byte) progress_idx#64 (byte) progress_idx#62 (byte) progress_idx#60 (byte) progress_idx#58 (byte) progress_idx#56 (byte) progress_idx#54 (byte) progress_idx#52 +Alias (byte) bob_charset_next_id#0 = (byte) bob_charset_next_id#10 (byte) bob_charset_next_id#77 (byte) bob_charset_next_id#76 (byte) bob_charset_next_id#74 (byte) bob_charset_next_id#72 (byte) bob_charset_next_id#70 (byte) bob_charset_next_id#68 (byte) bob_charset_next_id#66 (byte) bob_charset_next_id#64 (byte) bob_charset_next_id#62 (byte) bob_charset_next_id#60 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::$4 -Alias (byte) main::angle#2 = (byte) main::angle#4 (byte) main::a#0 -Alias (byte*) progress_cursor#63 = (byte*) progress_cursor#65 -Alias (byte) progress_idx#63 = (byte) progress_idx#65 -Alias (byte) bob_charset_next_id#71 = (byte) bob_charset_next_id#73 +Alias (byte**) renderBobCleanupNext#16 = (byte**) renderBobCleanupNext#20 +Alias (byte) main::angle#2 = (byte) main::angle#4 (byte) main::angle#6 (byte) main::a#0 +Alias (byte*) progress_cursor#63 = (byte*) progress_cursor#65 (byte*) progress_cursor#67 +Alias (byte) progress_idx#63 = (byte) progress_idx#65 (byte) progress_idx#67 +Alias (byte) bob_charset_next_id#71 = (byte) bob_charset_next_id#73 (byte) bob_charset_next_id#75 +Alias (byte**) renderBobCleanupNext#0 = (byte**) renderBobCleanupNext#9 Alias (signed word) mulf8s::return#2 = (signed word) mulf8s::return#5 Alias (signed byte) main::r#2 = (signed byte) main::r#3 (signed byte) main::r#4 Alias (byte) main::a#2 = (byte) main::a#3 (byte) main::a#4 +Alias (byte**) renderBobCleanupNext#17 = (byte**) renderBobCleanupNext#21 (byte**) renderBobCleanupNext#25 Alias (byte) main::i#2 = (byte) main::i#4 (byte) main::i#5 (byte) main::i#3 -Alias (byte) main::angle#10 = (byte) main::angle#9 (byte) main::angle#7 (byte) main::angle#5 (byte) main::angle#3 +Alias (byte) main::angle#11 = (byte) main::angle#9 (byte) main::angle#7 (byte) main::angle#5 (byte) main::angle#3 Alias (byte*) progress_cursor#51 = (byte*) progress_cursor#59 (byte*) progress_cursor#61 (byte*) progress_cursor#57 (byte*) progress_cursor#55 (byte*) progress_cursor#53 Alias (byte) progress_idx#51 = (byte) progress_idx#59 (byte) progress_idx#61 (byte) progress_idx#57 (byte) progress_idx#55 (byte) progress_idx#53 Alias (byte) bob_charset_next_id#59 = (byte) bob_charset_next_id#67 (byte) bob_charset_next_id#69 (byte) bob_charset_next_id#65 (byte) bob_charset_next_id#63 (byte) bob_charset_next_id#61 -Alias (signed word) main::x#0 = (signed word~) main::$10 (signed word) main::x#1 +Alias (signed word) main::x#0 = (signed word~) main::$11 (signed word) main::x#1 Alias (signed word) mulf8s::return#3 = (signed word) mulf8s::return#6 -Alias (signed word) main::y#0 = (signed word~) main::$13 -Alias (byte) renderBob::xpos#0 = (byte~) main::$14 -Alias (byte) renderBob::ypos#0 = (byte~) main::$15 +Alias (signed word) main::y#0 = (signed word~) main::$14 +Alias (byte) renderBob::xpos#0 = (byte~) main::$15 +Alias (byte) renderBob::ypos#0 = (byte~) main::$16 Alias (signed byte) main::r#1 = (signed byte) main::r#5 Alias (byte) main::a#1 = (byte) main::a#5 +Alias (byte**) renderBobCleanupNext#1 = (byte**) renderBobCleanupNext#10 (byte**) renderBobCleanupNext#32 (byte**) renderBobCleanupNext#29 Alias (byte) keyboard_key_pressed::return#2 = (byte) keyboard_key_pressed::return#5 -Alias (byte) main::angle#1 = (byte) main::angle#8 +Alias (byte) main::angle#1 = (byte) main::angle#10 Alias (byte) keyboard_key_pressed::return#3 = (byte) keyboard_key_pressed::return#6 Alias (byte*) progress_cursor#1 = (byte*) progress_cursor#48 (byte*) progress_cursor#49 (byte*) progress_cursor#47 (byte*) progress_cursor#46 (byte*) progress_cursor#44 (byte*) progress_cursor#42 (byte*) progress_cursor#39 (byte*) progress_cursor#36 (byte*) progress_cursor#33 (byte*) progress_cursor#29 (byte*) progress_cursor#22 (byte*) progress_cursor#12 Alias (byte) progress_idx#1 = (byte) progress_idx#48 (byte) progress_idx#49 (byte) progress_idx#47 (byte) progress_idx#46 (byte) progress_idx#44 (byte) progress_idx#42 (byte) progress_idx#39 (byte) progress_idx#36 (byte) progress_idx#33 (byte) progress_idx#29 (byte) progress_idx#23 (byte) progress_idx#13 Alias (byte) bob_charset_next_id#1 = (byte) bob_charset_next_id#56 (byte) bob_charset_next_id#57 (byte) bob_charset_next_id#55 (byte) bob_charset_next_id#54 (byte) bob_charset_next_id#52 (byte) bob_charset_next_id#50 (byte) bob_charset_next_id#47 (byte) bob_charset_next_id#42 (byte) bob_charset_next_id#36 (byte) bob_charset_next_id#29 (byte) bob_charset_next_id#20 (byte) bob_charset_next_id#11 +Alias (byte**) renderBobCleanupNext#11 = (byte**) renderBobCleanupNext#43 (byte**) renderBobCleanupNext#45 (byte**) renderBobCleanupNext#41 (byte**) renderBobCleanupNext#39 (byte**) renderBobCleanupNext#37 (byte**) renderBobCleanupNext#35 (byte**) renderBobCleanupNext#33 (byte**) renderBobCleanupNext#30 (byte**) renderBobCleanupNext#26 (byte**) renderBobCleanupNext#22 (byte**) renderBobCleanupNext#18 (byte**) renderBobCleanupNext#2 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) 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 @@ -2884,6 +3150,8 @@ Alias (byte) renderBob::x_char_offset#0 = (byte~) renderBob::$0 Alias (byte) renderBob::y_char_offset#0 = (byte~) renderBob::$1 Alias (byte*) renderBob::screen#0 = (byte*~) renderBob::$3 Alias (byte) renderBob::bob_table_idx#0 = (byte~) renderBob::$7 +Alias (byte**) renderBobCleanupNext#13 = (byte**) renderBobCleanupNext#4 (byte**) renderBobCleanupNext#5 +Alias (byte**) renderBobCleanupNext#14 = (byte**) renderBobCleanupNext#6 (byte**) renderBobCleanupNext#7 Alias (byte*) progress_cursor#13 = (byte*) progress_cursor#2 (byte*) progress_cursor#30 Alias (byte) progress_idx#14 = (byte) progress_idx#2 (byte) progress_idx#30 Alias (byte) bob_charset_next_id#12 = (byte) bob_charset_next_id#3 @@ -2922,6 +3190,7 @@ Alias (byte) shiftProtoBobRight::carry#1 = (byte) shiftProtoBobRight::new_carry# Alias (byte) shiftProtoBobRight::j#4 = (byte) shiftProtoBobRight::j#5 (byte) shiftProtoBobRight::j#6 Alias (byte) shiftProtoBobRight::i#4 = (byte) shiftProtoBobRight::i#5 (byte) shiftProtoBobRight::i#6 Alias (byte) shiftProtoBobDown::i#2 = (byte) shiftProtoBobDown::i#3 +Alias (byte**) renderBobCleanupNext#19 = (byte**) renderBobCleanupNext#27 (byte**) renderBobCleanupNext#3 (byte**) renderBobCleanupNext#23 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 @@ -2954,6 +3223,7 @@ Alias (byte) progress_idx#27 = (byte) progress_idx#5 Alias (byte*) progress_cursor#10 = (byte*) progress_cursor#20 Alias (byte) progress_idx#11 = (byte) progress_idx#21 Alias (byte) bob_charset_next_id#18 = (byte) bob_charset_next_id#9 +Alias (byte**) renderBobCleanupNext#15 = (byte**) renderBobCleanupNext#8 Successful SSA optimization Pass2AliasElimination Alias (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#3 Alias (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#3 @@ -2984,19 +3254,24 @@ Identical Phi Values (signed byte) mulf8s_prepared::b#1 (signed byte) mulf8s_pre Identical Phi Values (byte*) progress_cursor#21 (byte*) progress_cursor#27 Identical Phi Values (byte) progress_idx#22 (byte) progress_idx#27 Identical Phi Values (byte) bob_charset_next_id#19 (byte) bob_charset_next_id#27 +Identical Phi Values (byte**) renderBobCleanupNext#28 (byte**) renderBobCleanupNext#19 Identical Phi Values (byte*) progress_cursor#0 (byte*) progress_cursor#15 Identical Phi Values (byte) progress_idx#0 (byte) progress_idx#16 Identical Phi Values (byte) bob_charset_next_id#0 (byte) bob_charset_next_id#14 -Identical Phi Values (byte) main::angle#2 (byte) main::angle#6 +Identical Phi Values (byte**) renderBobCleanupNext#16 (byte**) renderBobCleanupNext#24 +Identical Phi Values (byte) main::angle#2 (byte) main::angle#8 Identical Phi Values (byte*) progress_cursor#63 (byte*) progress_cursor#50 Identical Phi Values (byte) progress_idx#63 (byte) progress_idx#50 Identical Phi Values (byte) bob_charset_next_id#71 (byte) bob_charset_next_id#58 -Identical Phi Values (byte) main::angle#10 (byte) main::angle#2 +Identical Phi Values (byte**) renderBobCleanupNext#0 (byte**) renderBobCleanupNext#14 +Identical Phi Values (byte) main::angle#11 (byte) main::angle#2 Identical Phi Values (byte*) progress_cursor#51 (byte*) progress_cursor#63 Identical Phi Values (byte) progress_idx#51 (byte) progress_idx#63 Identical Phi Values (byte) bob_charset_next_id#59 (byte) bob_charset_next_id#71 +Identical Phi Values (byte**) renderBobCleanupNext#1 (byte**) renderBobCleanupNext#13 Identical Phi Values (byte) renderBob::xpos#1 (byte) renderBob::xpos#0 Identical Phi Values (byte) renderBob::ypos#1 (byte) renderBob::ypos#0 +Identical Phi Values (byte**) renderBobCleanupNext#12 (byte**) renderBobCleanupNext#17 Identical Phi Values (byte*) progress_cursor#23 (byte*) progress_cursor#21 Identical Phi Values (byte) progress_idx#24 (byte) progress_idx#22 Identical Phi Values (byte*) progress_cursor#13 (byte*) progress_cursor#16 @@ -3023,6 +3298,7 @@ Identical Phi Values (byte*) progress_cursor#18 (byte*) progress_cursor#24 Identical Phi Values (byte*) progress_cursor#10 (byte*) progress_cursor#1 Identical Phi Values (byte) progress_idx#11 (byte) progress_idx#1 Identical Phi Values (byte) bob_charset_next_id#18 (byte) bob_charset_next_id#1 +Identical Phi Values (byte**) renderBobCleanupNext#15 (byte**) renderBobCleanupNext#11 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (void*) memset::return#0 (void*) memset::str#0 Identical Phi Values (byte*) progress_cursor#50 (byte*) progress_cursor#15 @@ -3045,25 +3321,27 @@ Simple Condition (bool~) mulf_init::$10 [84] if((byte) mulf_init::x_255#1!=(byte Simple Condition (bool~) mulf8s_prepared::$3 [114] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 Simple Condition (bool~) mulf8s_prepared::$5 [118] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 Simple Condition (bool~) main::$8 [210] if(*((const byte*) RASTER)<(byte) $f8) goto main::@4 -Simple Condition (bool~) main::$17 [245] if((byte) main::i#1!=rangelast(0,$19)) goto main::@6 -Simple Condition (bool~) main::$19 [256] if((byte) 0==(byte~) main::$18) goto main::@1 -Simple Condition (bool~) main::$21 [264] if((byte) 0!=(byte~) main::$20) goto main::@15 -Simple Condition (bool~) renderBobInit::$2 [313] if((byte) renderBobInit::y#1!=rangelast(0,$1f)) goto renderBobInit::@1 -Simple Condition (bool~) prepareBobs::$2 [356] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 -Simple Condition (bool~) prepareBobs::$3 [361] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@5 -Simple Condition (bool~) prepareBobs::$5 [373] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@8 -Simple Condition (bool~) shiftProtoBobRight::$0 [406] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 -Simple Condition (bool~) shiftProtoBobRight::$8 [410] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@4 -Simple Condition (bool~) shiftProtoBobRight::$7 [422] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@7 -Simple Condition (bool~) shiftProtoBobDown::$0 [433] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 -Simple Condition (bool~) bobCharsetFindOrAddGlyph::$0 [449] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 -Simple Condition (bool~) bobCharsetFindOrAddGlyph::$1 [457] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@5 -Simple Condition (bool~) bobCharsetFindOrAddGlyph::$3 [461] 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 [469] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@16 -Simple Condition (bool~) bobCharsetFindOrAddGlyph::$5 [481] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@21 -Simple Condition (bool~) progress_inc::$1 [502] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 +Simple Condition (bool~) main::$18 [250] if((byte) main::i#1!=rangelast(0,NUM_BOBS-1)) goto main::@6 +Simple Condition (bool~) main::$20 [261] if((byte) 0==(byte~) main::$19) goto main::@1 +Simple Condition (bool~) main::$22 [269] if((byte) 0!=(byte~) main::$21) goto main::@15 +Simple Condition (bool~) renderBobInit::$2 [320] if((byte) renderBobInit::y#1!=rangelast(0,$1f)) goto renderBobInit::@1 +Simple Condition (bool~) renderBobInit::$3 [327] if((byte) renderBobInit::i#1!=rangelast(0,NUM_BOBS-1)) goto renderBobInit::@3 +Simple Condition (bool~) renderBobCleanup::$0 [373] if((byte) renderBobCleanup::i#1!=rangelast(0,NUM_BOBS-1)) goto renderBobCleanup::@1 +Simple Condition (bool~) prepareBobs::$2 [394] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 +Simple Condition (bool~) prepareBobs::$3 [399] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@5 +Simple Condition (bool~) prepareBobs::$5 [411] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@8 +Simple Condition (bool~) shiftProtoBobRight::$0 [444] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 +Simple Condition (bool~) shiftProtoBobRight::$8 [448] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@4 +Simple Condition (bool~) shiftProtoBobRight::$7 [460] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@7 +Simple Condition (bool~) shiftProtoBobDown::$0 [471] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 +Simple Condition (bool~) bobCharsetFindOrAddGlyph::$0 [488] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 +Simple Condition (bool~) bobCharsetFindOrAddGlyph::$1 [496] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@5 +Simple Condition (bool~) bobCharsetFindOrAddGlyph::$3 [500] 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 [508] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@16 +Simple Condition (bool~) bobCharsetFindOrAddGlyph::$5 [520] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@21 +Simple Condition (bool~) progress_inc::$1 [541] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 Successful SSA optimization Pass2ConditionalJumpSimplification -Negating conditional jump and destination [256] if((byte) 0!=(byte~) main::$18) goto main::@15 +Negating conditional jump and destination [261] if((byte) 0!=(byte~) main::$19) goto main::@15 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement Constant (const word) mulf_init::sqr#0 = 0 Constant (const byte) mulf_init::x_2#0 = 0 @@ -3089,7 +3367,11 @@ Constant (const byte) keyboard_key_pressed::key#1 = 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**) renderBobCleanupNext#19 = (byte**) 0 Constant (const byte) renderBobInit::y#0 = 0 +Constant (const byte) renderBobInit::i#0 = 0 +Constant (const byte) renderBobCleanup::i#0 = 0 +Constant (const byte**) renderBobCleanupNext#14 = RENDERBOB_CLEANUP Constant (const byte*) progress_init::line#0 = SCREEN_BASIC Constant (const byte) bob_charset_next_id#2 = 0 Constant (const byte*) bobCharsetFindOrAddGlyph::bob_glyph#0 = PROTO_BOB+$30 @@ -3128,40 +3410,62 @@ Constant (const word) main::toD0182_$4 = (word)main::toD0182_gfx#0 Constant (const byte*) progress_cursor#16 = progress_init::line#0 Successful SSA optimization Pass2ConstantIdentification if() condition always false - eliminating [3] if((const word) memset::num#0<=(byte) 0) goto memset::@1 +Removing PHI-reference to removed block (main::@1) in block main::@15 if() condition always true - replacing block destination [207] if(true) goto main::@4 Successful SSA optimization Pass2ConstantIfs -Resolved ranged next value [243] main::i#1 ← ++ main::i#2 to ++ -Resolved ranged comparison value [245] if(main::i#1!=rangelast(0,$19)) goto main::@6 to (number) $1a -Resolved ranged next value [311] renderBobInit::y#1 ← ++ renderBobInit::y#2 to ++ -Resolved ranged comparison value [313] if(renderBobInit::y#1!=rangelast(0,$1f)) goto renderBobInit::@1 to (number) $20 -Simplifying constant evaluating to zero (byte) 0*(const byte) BOB_SUBTABLE_SIZE in [330] *((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 [248] main::i#1 ← ++ main::i#2 to ++ +Resolved ranged comparison value [250] if(main::i#1!=rangelast(0,NUM_BOBS-1)) goto main::@6 to (const byte) NUM_BOBS-(byte) 1+(number) 1 +Resolved ranged next value [318] renderBobInit::y#1 ← ++ renderBobInit::y#2 to ++ +Resolved ranged comparison value [320] if(renderBobInit::y#1!=rangelast(0,$1f)) goto renderBobInit::@1 to (number) $20 +Resolved ranged next value [325] renderBobInit::i#1 ← ++ renderBobInit::i#2 to ++ +Resolved ranged comparison value [327] if(renderBobInit::i#1!=rangelast(0,NUM_BOBS-1)) goto renderBobInit::@3 to (const byte) NUM_BOBS-(byte) 1+(number) 1 +Resolved ranged next value [371] renderBobCleanup::i#1 ← ++ renderBobCleanup::i#2 to ++ +Resolved ranged comparison value [373] if(renderBobCleanup::i#1!=rangelast(0,NUM_BOBS-1)) goto renderBobCleanup::@1 to (const byte) NUM_BOBS-(byte) 1+(number) 1 +Simplifying constant evaluating to zero (byte) 0*(const byte) BOB_SUBTABLE_SIZE in [346] *((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 [330] *((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 [330] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -Simplifying expression containing zero PROTO_BOB in [439] *((const byte*) PROTO_BOB + (byte) 0) ← (byte) 0 +Simplifying expression containing zero BOB_TABLES in [346] *((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 [346] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) +Simplifying expression containing zero renderBobCleanup::screen#0 in [362] *((byte*) renderBobCleanup::screen#0 + (byte) 0) ← (byte) 0 +Simplifying expression containing zero PROTO_BOB in [477] *((const byte*) PROTO_BOB + (byte) 0) ← (byte) 0 Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused variable (byte) bobCharsetFindOrAddGlyph::return#0 and assignment [175] (byte) bobCharsetFindOrAddGlyph::return#0 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 +Eliminating unused variable - keeping the phi block (byte**) renderBobCleanupNext#24 +Eliminating unused variable - keeping the phi block (byte**) renderBobCleanupNext#11 +Eliminating unused variable (byte) bobCharsetFindOrAddGlyph::return#0 and assignment [200] (byte) bobCharsetFindOrAddGlyph::return#0 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 Eliminating unused constant (const void*) memset::return#2 Eliminating unused constant (const byte) bob_charset_next_id#27 Eliminating unused constant (const byte*) progress_cursor#27 Eliminating unused constant (const byte) progress_idx#27 Successful SSA optimization PassNEliminateUnusedVars -Adding number conversion cast (unumber) $1a in if((byte) main::i#1!=(number) $1a) goto main::@6 +Eliminating unused constant (const byte**) renderBobCleanupNext#19 +Successful SSA optimization PassNEliminateUnusedVars +Adding number conversion cast (unumber) NUM_BOBS-1+1 in if((byte) main::i#1!=(const byte) NUM_BOBS-(byte) 1+(number) 1) goto main::@6 +Adding number conversion cast (unumber) 1 in if((byte) main::i#1!=(unumber)(const byte) NUM_BOBS-(byte) 1+(number) 1) goto main::@6 Adding number conversion cast (unumber) $20 in if((byte) renderBobInit::y#1!=(number) $20) goto renderBobInit::@1 +Adding number conversion cast (unumber) NUM_BOBS-1+1 in if((byte) renderBobInit::i#1!=(const byte) NUM_BOBS-(byte) 1+(number) 1) goto renderBobInit::@3 +Adding number conversion cast (unumber) 1 in if((byte) renderBobInit::i#1!=(unumber)(const byte) NUM_BOBS-(byte) 1+(number) 1) goto renderBobInit::@3 +Adding number conversion cast (unumber) NUM_BOBS-1+1 in if((byte) renderBobCleanup::i#1!=(const byte) NUM_BOBS-(byte) 1+(number) 1) goto renderBobCleanup::@1 +Adding number conversion cast (unumber) 1 in if((byte) renderBobCleanup::i#1!=(unumber)(const byte) NUM_BOBS-(byte) 1+(number) 1) goto renderBobCleanup::@1 Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast $1a +Simplifying constant integer cast (const byte) NUM_BOBS-(byte) 1+(unumber)(number) 1 +Simplifying constant integer cast 1 Simplifying constant integer cast $20 +Simplifying constant integer cast (const byte) NUM_BOBS-(byte) 1+(unumber)(number) 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast (const byte) NUM_BOBS-(byte) 1+(unumber)(number) 1 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $1a +Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $20 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 Constant right-side identified [83] (byte~) main::vicSelectGfxBank1_toDd001_$1 ← > (const word) main::vicSelectGfxBank1_toDd001_$0 Constant right-side identified [87] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff Constant right-side identified [90] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 -Constant right-side identified [132] (byte~) main::vicSelectGfxBank2_toDd001_$1 ← > (const word) main::vicSelectGfxBank2_toDd001_$0 -Constant right-side identified [136] (word~) main::toD0182_$1 ← (const word) main::toD0182_$0 & (word) $3fff -Constant right-side identified [139] (byte~) main::toD0182_$5 ← > (const word) main::toD0182_$4 +Constant right-side identified [135] (byte~) main::vicSelectGfxBank2_toDd001_$1 ← > (const word) main::vicSelectGfxBank2_toDd001_$0 +Constant right-side identified [139] (word~) main::toD0182_$1 ← (const word) main::toD0182_$0 & (word) $3fff +Constant right-side identified [142] (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 @@ -3174,9 +3478,9 @@ Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [82] (byte~) main::vicSelectGfxBank1_toDd001_$2 ← (const byte) main::vicSelectGfxBank1_toDd001_$1 / (byte) $40 Constant right-side identified [85] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4 Constant right-side identified [87] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4 -Constant right-side identified [128] (byte~) main::vicSelectGfxBank2_toDd001_$2 ← (const byte) main::vicSelectGfxBank2_toDd001_$1 / (byte) $40 -Constant right-side identified [131] (word~) main::toD0182_$2 ← (const word) main::toD0182_$1 * (byte) 4 -Constant right-side identified [133] (byte~) main::toD0182_$6 ← (const byte) main::toD0182_$5 / (byte) 4 +Constant right-side identified [130] (byte~) main::vicSelectGfxBank2_toDd001_$2 ← (const byte) main::vicSelectGfxBank2_toDd001_$1 / (byte) $40 +Constant right-side identified [133] (word~) main::toD0182_$2 ← (const word) main::toD0182_$1 * (byte) 4 +Constant right-side identified [135] (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 @@ -3189,7 +3493,7 @@ Simplifying constant evaluating to zero (const byte) main::vicSelectGfxBank1_toD Simplifying constant evaluating to zero (const byte) main::vicSelectGfxBank2_toDd001_$1/(byte) $40 in Successful SSA optimization PassNSimplifyConstantZero Simplifying expression containing zero 3 in [83] (byte) main::vicSelectGfxBank1_toDd001_return#0 ← (byte) 3 ^ (const byte) main::vicSelectGfxBank1_toDd001_$2 -Simplifying expression containing zero 3 in [129] (byte) main::vicSelectGfxBank2_toDd001_return#0 ← (byte) 3 ^ (const byte) main::vicSelectGfxBank2_toDd001_$2 +Simplifying expression containing zero 3 in [131] (byte) main::vicSelectGfxBank2_toDd001_return#0 ← (byte) 3 ^ (const byte) main::vicSelectGfxBank2_toDd001_$2 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const byte) main::vicSelectGfxBank1_toDd001_$1 Eliminating unused constant (const byte) main::vicSelectGfxBank2_toDd001_$1 @@ -3204,8 +3508,8 @@ Eliminating unused constant (const byte*) main::vicSelectGfxBank2_gfx#0 Successful SSA optimization PassNEliminateUnusedVars Constant right-side identified [84] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2 Constant right-side identified [85] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f -Constant right-side identified [127] (byte~) main::toD0182_$3 ← > (const word) main::toD0182_$2 -Constant right-side identified [128] (byte~) main::toD0182_$7 ← (const byte) main::toD0182_$6 & (byte) $f +Constant right-side identified [129] (byte~) main::toD0182_$3 ← > (const word) main::toD0182_$2 +Constant right-side identified [130] (byte~) main::toD0182_$7 ← (const byte) main::toD0182_$6 & (byte) $f Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::vicSelectGfxBank1_toDd001_return#0 = 3 Constant (const byte) main::toD0181_$3 = >main::toD0181_$2 @@ -3215,7 +3519,7 @@ Constant (const byte) main::toD0182_$3 = >main::toD0182_$2 Constant (const byte) main::toD0182_$7 = main::toD0182_$6&$f Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [83] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7 -Constant right-side identified [123] (byte) main::toD0182_return#0 ← (const byte) main::toD0182_$3 | (const byte) main::toD0182_$7 +Constant right-side identified [125] (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|main::toD0181_$7 Constant (const byte) main::toD0182_return#0 = main::toD0182_$3|main::toD0182_$7 @@ -3226,13 +3530,15 @@ Inlining Noop Cast [65] (byte~) mulf8s_prepared::$13 ← (byte)*((const signed b Successful SSA optimization Pass2NopCastInlining Inlining Noop Cast [74] (signed word) mulf8s_prepared::return#2 ← (signed word)(word) mulf8s_prepared::m#4 keeping mulf8s_prepared::m#4 Successful SSA optimization Pass2NopCastInlining -Rewriting multiplication to use shift [100] (signed word~) main::$12 ← (signed word~) main::$11 * (signed byte) 2 -Rewriting multiplication to use shift and addition[126] (word~) renderBobInit::$1 ← (word~) renderBobInit::$0 * (byte) $28 -Rewriting multiplication to use shift [127] (byte~) renderBobInit::$3 ← (byte) renderBobInit::y#2 * (const byte) SIZEOF_WORD -Rewriting division to use shift [132] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 / (const byte) BOB_SHIFTS_X -Rewriting division to use shift [133] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 / (const byte) BOB_SHIFTS_Y -Rewriting multiplication to use shift [134] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [139] (byte~) renderBob::$5 ← (byte~) renderBob::$4 * (const byte) BOB_SHIFTS_X +Rewriting multiplication to use shift [102] (signed word~) main::$13 ← (signed word~) main::$12 * (signed byte) 2 +Rewriting multiplication to use shift and addition[128] (word~) renderBobInit::$1 ← (word~) renderBobInit::$0 * (byte) $28 +Rewriting multiplication to use shift [129] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [134] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 * (const byte) SIZEOF_POINTER +Rewriting division to use shift [139] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 / (const byte) BOB_SHIFTS_X +Rewriting division to use shift [140] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 / (const byte) BOB_SHIFTS_Y +Rewriting multiplication to use shift [141] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [146] (byte~) renderBob::$5 ← (byte~) renderBob::$4 * (const byte) BOB_SHIFTS_X +Rewriting multiplication to use shift [162] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 * (const byte) SIZEOF_POINTER Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte*) memset::dst#0 Inlining constant with var siblings (const byte) keyboard_key_pressed::key#0 @@ -3251,6 +3557,8 @@ Inlining constant with var siblings (const byte) main::angle#0 Inlining constant with var siblings (const signed byte) main::r#0 Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) renderBobInit::y#0 +Inlining constant with var siblings (const byte) renderBobInit::i#0 +Inlining constant with var siblings (const byte) renderBobCleanup::i#0 Inlining constant with var siblings (const byte) prepareBobs::bob_table_idx#0 Inlining constant with var siblings (const byte) prepareBobs::shift_y#0 Inlining constant with var siblings (const byte) prepareBobs::shift_x#0 @@ -3267,6 +3575,7 @@ Inlining constant with var siblings (const byte) bobCharsetFindOrAddGlyph::found 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**) renderBobCleanupNext#14 Inlining constant with var siblings (const byte) bob_charset_next_id#2 Inlining constant with var siblings (const byte) progress_idx#17 Inlining constant with var siblings (const byte) progress_idx#9 @@ -3310,6 +3619,7 @@ Constant inlined main::toD0181_$3 = >(word)(const byte*) BOB_SCREEN&(word) $3fff Constant inlined bobCharsetFindOrAddGlyph::bob_glyph#0 = (const byte*) PROTO_BOB+(byte) $30 Constant inlined mulf_init::sqr1_hi#0 = (const byte*) mulf_sqr1_hi+(byte) 1 Constant inlined prepareBobs::cell#0 = (byte) 0 +Constant inlined renderBobCleanupNext#14 = (const byte**) RENDERBOB_CLEANUP Constant inlined mulf_init::sqr1_lo#0 = (const byte*) mulf_sqr1_lo+(byte) 1 Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 Constant inlined mulf_init::c#0 = (byte) 0 @@ -3324,6 +3634,7 @@ Constant inlined prepareBobs::bob_glyph#0 = (const byte*) PROTO_BOB Constant inlined shiftProtoBobRight::$2 = (byte) 0 Constant inlined main::i#0 = (byte) 0 Constant inlined shiftProtoBobRight::$3 = (byte) $80 +Constant inlined renderBobCleanup::i#0 = (byte) 0 Constant inlined main::r#0 = (signed byte) $1e Constant inlined prepareBobs::shift_y#0 = (byte) 0 Constant inlined mulf_init::sqr#0 = (byte) 0 @@ -3331,13 +3642,14 @@ Constant inlined progress_idx#17 = (byte) 0 Constant inlined renderBobInit::y#0 = (byte) 0 Constant inlined main::angle#0 = (byte) 0 Constant inlined main::toD0182_screen#0 = (const byte*) SCREEN_BASIC +Constant inlined renderBobInit::i#0 = (byte) 0 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) Consolidated array index constant in *(progress_inc::progress_chars+8) Successful SSA optimization Pass2ConstantAdditionElimination -Alias (word~) renderBobInit::$1 = (word~) renderBobInit::$6 +Alias (word~) renderBobInit::$1 = (word~) renderBobInit::$8 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) keyboard_key_pressed::key#2 (const byte) KEY_SPACE Successful SSA optimization Pass2IdenticalPhiElimination @@ -3360,15 +3672,18 @@ Added new block during phi lifting mulf_init::@17(between mulf_init::@2 and mulf Added new block during phi lifting mulf_init::@18(between mulf_init::@10 and mulf_init::@12) Added new block during phi lifting mulf8s_prepared::@7(between mulf8s_prepared::@6 and mulf8s_prepared::@1) Added new block during phi lifting mulf8s_prepared::@8(between mulf8s_prepared::@1 and mulf8s_prepared::@2) -Added new block during phi lifting main::@34(between main::@32 and main::@1) -Added new block during phi lifting main::@35(between main::@31 and main::@6) -Added new block during phi lifting renderBobInit::@3(between renderBobInit::@1 and renderBobInit::@1) +Added new block during phi lifting main::@35(between main::@33 and main::@1) +Added new block during phi lifting main::@36(between main::@32 and main::@6) +Added new block during phi lifting renderBobInit::@5(between renderBobInit::@1 and renderBobInit::@1) +Added new block during phi lifting renderBobInit::@6(between renderBobInit::@3 and renderBobInit::@3) +Added new block during phi lifting renderBobCleanup::@3(between renderBobCleanup::@1 and renderBobCleanup::@1) Added new block during phi lifting progress_inc::@3(between progress_inc and progress_inc::@1) Adding NOP phi() at start of @begin -Adding NOP phi() at start of @64 +Adding NOP phi() at start of @59 Adding NOP phi() at start of @65 -Adding NOP phi() at start of @67 +Adding NOP phi() at start of @66 Adding NOP phi() at start of @68 +Adding NOP phi() at start of @69 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@25 @@ -3389,10 +3704,13 @@ 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 mulf8s::@3 +Adding NOP phi() at start of renderBobCleanup +Adding NOP phi() at start of renderBobCleanup::@2 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 Adding NOP phi() at start of memset::@1 Adding NOP phi() at start of renderBobInit +Adding NOP phi() at start of renderBobInit::@2 Adding NOP phi() at start of prepareBobs Adding NOP phi() at start of prepareBobs::@19 Adding NOP phi() at start of prepareBobs::@6 @@ -3409,106 +3727,114 @@ Adding NOP phi() at start of mulf_init Adding NOP phi() at start of mulf_init::@3 Adding NOP phi() at start of mulf_init::@15 CALL GRAPH -Calls in [] to main:5 -Calls in [main] to mulf_init:9 prepareBobs:11 renderBobInit:13 memset:23 mulf8s:34 mulf8s:42 renderBob:52 keyboard_key_pressed:57 keyboard_key_pressed:63 -Calls in [keyboard_key_pressed] to keyboard_matrix_read:81 -Calls in [mulf8s] to mulf8u_prepare:111 mulf8s_prepared:114 -Calls in [mulf8s_prepared] to mulf8u_prepared:118 -Calls in [prepareBobs] to progress_init:165 bobCharsetFindOrAddGlyph:167 shiftProtoBobDown:179 shiftProtoBobRight:194 shiftProtoBobRight:196 bobCharsetFindOrAddGlyph:206 progress_inc:212 +Calls in [] to main:6 +Calls in [main] to mulf_init:10 prepareBobs:12 renderBobInit:14 memset:24 renderBobCleanup:29 mulf8s:37 mulf8s:45 renderBob:55 keyboard_key_pressed:60 keyboard_key_pressed:66 +Calls in [keyboard_key_pressed] to keyboard_matrix_read:85 +Calls in [mulf8s] to mulf8u_prepare:117 mulf8s_prepared:120 +Calls in [mulf8s_prepared] to mulf8u_prepared:124 +Calls in [prepareBobs] to progress_init:196 bobCharsetFindOrAddGlyph:198 shiftProtoBobDown:210 shiftProtoBobRight:225 shiftProtoBobRight:227 bobCharsetFindOrAddGlyph:237 progress_inc:243 -Created 54 initial phi equivalence classes -Not coalescing [27] main::a#7 ← main::angle#6 -Coalesced [32] mulf8s::mulf8s_prepare1_a#3 ← mulf8s::a#0 -Coalesced [33] mulf8s::b#7 ← mulf8s::b#0 -Coalesced [40] mulf8s::mulf8s_prepare1_a#2 ← mulf8s::a#1 -Coalesced [41] mulf8s::b#6 ← mulf8s::b#1 -Coalesced [61] main::angle#11 ← main::angle#1 -Coalesced [77] main::r#6 ← main::r#1 -Coalesced [78] main::a#6 ← main::a#1 -Coalesced [79] main::i#6 ← main::i#1 -Coalesced [125] mulf8s_prepared::m#7 ← mulf8s_prepared::m#1 -Coalesced [131] mulf8s_prepared::m#10 ← mulf8s_prepared::m#2 -Coalesced [134] mulf8s_prepared::m#9 ← mulf8s_prepared::m#5 -Coalesced [135] mulf8s_prepared::m#8 ← mulf8s_prepared::m#0 -Coalesced [151] memset::dst#4 ← memset::dst#1 -Coalesced [163] renderBobInit::y#3 ← renderBobInit::y#1 -Coalesced [168] bob_charset_next_id#77 ← bob_charset_next_id#16 -Coalesced [172] prepareBobs::bob_table_idx#16 ← prepareBobs::bob_table_idx#6 -Coalesced [173] bob_charset_next_id#79 ← bob_charset_next_id#14 -Coalesced [174] progress_cursor#70 ← progress_cursor#15 -Coalesced [175] progress_idx#70 ← progress_idx#16 -Coalesced [181] prepareBobs::shift_y#15 ← prepareBobs::shift_y#1 -Coalesced (already) [182] progress_cursor#69 ← progress_cursor#31 -Coalesced (already) [183] progress_idx#69 ← progress_idx#31 -Coalesced (already) [184] bob_charset_next_id#78 ← bob_charset_next_id#30 -Coalesced (already) [185] prepareBobs::bob_table_idx#15 ← prepareBobs::bob_table_idx#12 -Coalesced [187] bob_charset_next_id#82 ← bob_charset_next_id#30 -Coalesced [188] prepareBobs::bob_table#7 ← prepareBobs::bob_table#0 -Coalesced [189] progress_idx#73 ← progress_idx#31 -Coalesced [190] progress_cursor#73 ← progress_cursor#31 -Coalesced [198] prepareBobs::shift_x#11 ← prepareBobs::shift_x#1 -Coalesced [199] prepareBobs::bob_table_idx#17 ← prepareBobs::bob_table_idx#1 -Coalesced (already) [200] bob_charset_next_id#80 ← bob_charset_next_id#21 -Coalesced (already) [201] progress_cursor#71 ← progress_cursor#24 -Coalesced (already) [202] progress_idx#71 ← progress_idx#25 -Coalesced [204] bob_charset_next_id#83 ← bob_charset_next_id#21 -Coalesced [205] bobCharsetFindOrAddGlyph::bob_glyph#14 ← bobCharsetFindOrAddGlyph::bob_glyph#1 -Coalesced [214] prepareBobs::cell#6 ← prepareBobs::cell#1 -Coalesced [215] prepareBobs::bob_glyph#6 ← prepareBobs::bob_glyph#1 -Coalesced (already) [216] bob_charset_next_id#81 ← bob_charset_next_id#16 -Coalesced [217] prepareBobs::bob_table#6 ← prepareBobs::bob_table#1 -Coalesced [218] progress_idx#72 ← progress_idx#10 -Coalesced [219] progress_cursor#72 ← progress_cursor#17 -Coalesced [224] progress_cursor#75 ← progress_cursor#8 -Coalesced [228] progress_idx#74 ← progress_idx#8 -Coalesced (already) [229] progress_cursor#74 ← progress_cursor#24 -Coalesced [237] bob_charset_next_id#85 ← bob_charset_next_id#8 -Coalesced [242] bobCharsetFindOrAddGlyph::i1#4 ← bobCharsetFindOrAddGlyph::i1#1 -Coalesced (already) [248] bob_charset_next_id#84 ← bob_charset_next_id#23 -Coalesced [251] bobCharsetFindOrAddGlyph::glyph_id#15 ← bobCharsetFindOrAddGlyph::glyph_id#1 -Coalesced [252] bobCharsetFindOrAddGlyph::glyph_cursor#13 ← bobCharsetFindOrAddGlyph::glyph_cursor#1 -Coalesced [256] bobCharsetFindOrAddGlyph::i#5 ← bobCharsetFindOrAddGlyph::i#1 -Coalesced [270] shiftProtoBobRight::j#12 ← shiftProtoBobRight::j#2 -Coalesced [273] shiftProtoBobRight::i#10 ← shiftProtoBobRight::i#1 -Coalesced [274] shiftProtoBobRight::j#11 ← shiftProtoBobRight::j#10 -Not coalescing [275] shiftProtoBobRight::carry#10 ← shiftProtoBobRight::carry#1 -Coalesced [277] shiftProtoBobRight::j#13 ← shiftProtoBobRight::j#1 -Coalesced [290] shiftProtoBobDown::i#4 ← shiftProtoBobDown::i#1 -Coalesced [310] mulf_init::sqr2_lo#6 ← mulf_init::sqr2_lo#1 -Coalesced [311] mulf_init::x_255#6 ← mulf_init::x_255#1 -Coalesced [312] mulf_init::sqr2_hi#6 ← mulf_init::sqr2_hi#1 -Coalesced [313] mulf_init::dir#5 ← mulf_init::dir#4 -Coalesced (already) [314] mulf_init::dir#6 ← mulf_init::dir#2 -Coalesced [320] mulf_init::sqr#9 ← mulf_init::sqr#2 -Coalesced [321] mulf_init::x_2#8 ← mulf_init::x_2#1 -Coalesced [330] mulf_init::sqr1_lo#6 ← mulf_init::sqr1_lo#1 -Coalesced [331] mulf_init::c#6 ← mulf_init::c#1 -Coalesced [332] mulf_init::sqr#7 ← mulf_init::sqr#1 -Coalesced [333] mulf_init::sqr1_hi#6 ← mulf_init::sqr1_hi#1 -Coalesced [334] mulf_init::x_2#6 ← mulf_init::x_2#2 -Coalesced [335] mulf_init::sqr#8 ← mulf_init::sqr#4 -Coalesced (already) [336] mulf_init::x_2#7 ← mulf_init::x_2#3 -Coalesced down to 38 phi equivalence classes -Culled Empty Block (label) @64 +Created 57 initial phi equivalence classes +Not coalescing [30] main::a#6 ← main::angle#8 +Coalesced [35] mulf8s::mulf8s_prepare1_a#3 ← mulf8s::a#0 +Coalesced [36] mulf8s::b#7 ← mulf8s::b#0 +Coalesced [43] mulf8s::mulf8s_prepare1_a#2 ← mulf8s::a#1 +Coalesced [44] mulf8s::b#6 ← mulf8s::b#1 +Coalesced [64] main::angle#12 ← main::angle#1 +Coalesced [80] main::r#6 ← main::r#1 +Coalesced [81] main::a#7 ← main::a#1 +Coalesced [82] renderBobCleanupNext#51 ← renderBobCleanupNext#13 +Coalesced [83] main::i#6 ← main::i#1 +Coalesced [131] mulf8s_prepared::m#7 ← mulf8s_prepared::m#1 +Coalesced [137] mulf8s_prepared::m#10 ← mulf8s_prepared::m#2 +Coalesced [140] mulf8s_prepared::m#9 ← mulf8s_prepared::m#5 +Coalesced [141] mulf8s_prepared::m#8 ← mulf8s_prepared::m#0 +Coalesced [166] renderBobCleanup::i#3 ← renderBobCleanup::i#1 +Coalesced [175] memset::dst#4 ← memset::dst#1 +Coalesced [193] renderBobInit::i#3 ← renderBobInit::i#1 +Coalesced [194] renderBobInit::y#3 ← renderBobInit::y#1 +Coalesced [199] bob_charset_next_id#78 ← bob_charset_next_id#16 +Coalesced [203] prepareBobs::bob_table_idx#16 ← prepareBobs::bob_table_idx#6 +Coalesced [204] bob_charset_next_id#80 ← bob_charset_next_id#14 +Coalesced [205] progress_cursor#71 ← progress_cursor#15 +Coalesced [206] progress_idx#71 ← progress_idx#16 +Coalesced [212] prepareBobs::shift_y#15 ← prepareBobs::shift_y#1 +Coalesced (already) [213] progress_cursor#70 ← progress_cursor#31 +Coalesced (already) [214] progress_idx#70 ← progress_idx#31 +Coalesced (already) [215] bob_charset_next_id#79 ← bob_charset_next_id#30 +Coalesced (already) [216] prepareBobs::bob_table_idx#15 ← prepareBobs::bob_table_idx#12 +Coalesced [218] bob_charset_next_id#83 ← bob_charset_next_id#30 +Coalesced [219] prepareBobs::bob_table#7 ← prepareBobs::bob_table#0 +Coalesced [220] progress_idx#74 ← progress_idx#31 +Coalesced [221] progress_cursor#74 ← progress_cursor#31 +Coalesced [229] prepareBobs::shift_x#11 ← prepareBobs::shift_x#1 +Coalesced [230] prepareBobs::bob_table_idx#17 ← prepareBobs::bob_table_idx#1 +Coalesced (already) [231] bob_charset_next_id#81 ← bob_charset_next_id#21 +Coalesced (already) [232] progress_cursor#72 ← progress_cursor#24 +Coalesced (already) [233] progress_idx#72 ← progress_idx#25 +Coalesced [235] bob_charset_next_id#84 ← bob_charset_next_id#21 +Coalesced [236] bobCharsetFindOrAddGlyph::bob_glyph#14 ← bobCharsetFindOrAddGlyph::bob_glyph#1 +Coalesced [245] prepareBobs::cell#6 ← prepareBobs::cell#1 +Coalesced [246] prepareBobs::bob_glyph#6 ← prepareBobs::bob_glyph#1 +Coalesced (already) [247] bob_charset_next_id#82 ← bob_charset_next_id#16 +Coalesced [248] prepareBobs::bob_table#6 ← prepareBobs::bob_table#1 +Coalesced [249] progress_idx#73 ← progress_idx#10 +Coalesced [250] progress_cursor#73 ← progress_cursor#17 +Coalesced [255] progress_cursor#76 ← progress_cursor#8 +Coalesced [259] progress_idx#75 ← progress_idx#8 +Coalesced (already) [260] progress_cursor#75 ← progress_cursor#24 +Coalesced [268] bob_charset_next_id#86 ← bob_charset_next_id#8 +Coalesced [273] bobCharsetFindOrAddGlyph::i1#4 ← bobCharsetFindOrAddGlyph::i1#1 +Coalesced (already) [279] bob_charset_next_id#85 ← bob_charset_next_id#23 +Coalesced [282] bobCharsetFindOrAddGlyph::glyph_id#15 ← bobCharsetFindOrAddGlyph::glyph_id#1 +Coalesced [283] bobCharsetFindOrAddGlyph::glyph_cursor#13 ← bobCharsetFindOrAddGlyph::glyph_cursor#1 +Coalesced [287] bobCharsetFindOrAddGlyph::i#5 ← bobCharsetFindOrAddGlyph::i#1 +Coalesced [301] shiftProtoBobRight::j#12 ← shiftProtoBobRight::j#2 +Coalesced [304] shiftProtoBobRight::i#10 ← shiftProtoBobRight::i#1 +Coalesced [305] shiftProtoBobRight::j#11 ← shiftProtoBobRight::j#10 +Not coalescing [306] shiftProtoBobRight::carry#10 ← shiftProtoBobRight::carry#1 +Coalesced [308] shiftProtoBobRight::j#13 ← shiftProtoBobRight::j#1 +Coalesced [321] shiftProtoBobDown::i#4 ← shiftProtoBobDown::i#1 +Coalesced [341] mulf_init::sqr2_lo#6 ← mulf_init::sqr2_lo#1 +Coalesced [342] mulf_init::x_255#6 ← mulf_init::x_255#1 +Coalesced [343] mulf_init::sqr2_hi#6 ← mulf_init::sqr2_hi#1 +Coalesced [344] mulf_init::dir#5 ← mulf_init::dir#4 +Coalesced (already) [345] mulf_init::dir#6 ← mulf_init::dir#2 +Coalesced [351] mulf_init::sqr#9 ← mulf_init::sqr#2 +Coalesced [352] mulf_init::x_2#8 ← mulf_init::x_2#1 +Coalesced [361] mulf_init::sqr1_lo#6 ← mulf_init::sqr1_lo#1 +Coalesced [362] mulf_init::c#6 ← mulf_init::c#1 +Coalesced [363] mulf_init::sqr#7 ← mulf_init::sqr#1 +Coalesced [364] mulf_init::sqr1_hi#6 ← mulf_init::sqr1_hi#1 +Coalesced [365] mulf_init::x_2#6 ← mulf_init::x_2#2 +Coalesced [366] mulf_init::sqr#8 ← mulf_init::sqr#4 +Coalesced (already) [367] mulf_init::x_2#7 ← mulf_init::x_2#3 +Coalesced down to 41 phi equivalence classes +Culled Empty Block (label) @59 Culled Empty Block (label) @65 -Culled Empty Block (label) @68 +Culled Empty Block (label) @66 +Culled Empty Block (label) @69 Culled Empty Block (label) main::@27 Culled Empty Block (label) main::vicSelectGfxBank1_toDd001_@return Culled Empty Block (label) main::@21 Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@28 -Culled Empty Block (label) main::@34 +Culled Empty Block (label) main::@35 Culled Empty Block (label) main::@17 Culled Empty Block (label) main::vicSelectGfxBank2_toDd001_@return Culled Empty Block (label) main::@23 Culled Empty Block (label) main::toD0182_@return -Culled Empty Block (label) main::@35 +Culled Empty Block (label) main::@36 Culled Empty Block (label) mulf8s::@3 Culled Empty Block (label) mulf8s_prepared::@8 Culled Empty Block (label) mulf8s_prepared::@7 +Culled Empty Block (label) renderBobCleanup::@2 +Culled Empty Block (label) renderBobCleanup::@3 Culled Empty Block (label) memset::@2 Culled Empty Block (label) memset::@1 -Culled Empty Block (label) renderBobInit::@3 +Culled Empty Block (label) renderBobInit::@2 +Culled Empty Block (label) renderBobInit::@6 +Culled Empty Block (label) renderBobInit::@5 Culled Empty Block (label) prepareBobs::@20 Culled Empty Block (label) prepareBobs::@2 Culled Empty Block (label) progress_inc::@3 @@ -3521,7 +3847,7 @@ Culled Empty Block (label) mulf_init::@3 Culled Empty Block (label) mulf_init::@15 Culled Empty Block (label) mulf_init::@17 Renumbering block @58 to @1 -Renumbering block @67 to @2 +Renumbering block @68 to @2 Renumbering block memset::@4 to memset::@1 Renumbering block memset::@5 to memset::@2 Renumbering block keyboard_key_pressed::@2 to keyboard_key_pressed::@1 @@ -3549,6 +3875,8 @@ Renumbering block main::@30 to main::@12 Renumbering block main::@31 to main::@13 Renumbering block main::@32 to main::@14 Renumbering block main::@33 to main::@15 +Renumbering block main::@34 to main::@16 +Renumbering block renderBobInit::@3 to renderBobInit::@2 Renumbering block prepareBobs::@4 to prepareBobs::@2 Renumbering block prepareBobs::@5 to prepareBobs::@3 Renumbering block prepareBobs::@6 to prepareBobs::@4 @@ -3586,6 +3914,7 @@ 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 renderBobCleanup Adding NOP phi() at start of memset Adding NOP phi() at start of renderBobInit Adding NOP phi() at start of prepareBobs @@ -3644,505 +3973,543 @@ main::@7: scope:[main] from main::toD0181 [15] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [16] call memset to:main::@1 -main::@1: scope:[main] from main::@14 main::@7 - [17] (byte) main::angle#6 ← phi( main::@7/(byte) 0 main::@14/(byte) main::angle#1 ) +main::@1: scope:[main] from main::@15 main::@7 + [17] (byte) main::angle#8 ← phi( main::@7/(byte) 0 main::@15/(byte) main::angle#1 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 [18] if(*((const byte*) RASTER)<(byte) $f8) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@2 - [19] (byte) main::a#7 ← (byte) main::angle#6 - to:main::@4 -main::@4: scope:[main] from main::@13 main::@3 - [20] (byte) main::i#2 ← phi( main::@13/(byte) main::i#1 main::@3/(byte) 0 ) - [20] (byte) main::a#2 ← phi( main::@13/(byte) main::a#1 main::@3/(byte) main::a#7 ) - [20] (signed byte) main::r#2 ← phi( main::@13/(signed byte) main::r#1 main::@3/(signed byte) $1e ) - [21] *((const byte*) BORDERCOL) ← (byte) 1 - [22] (signed byte) mulf8s::a#0 ← (signed byte) main::r#2 - [23] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) main::a#2) - [24] call mulf8s - [25] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 + [19] *((const byte*) BORDERCOL) ← (byte) $f + [20] call renderBobCleanup to:main::@11 -main::@11: scope:[main] from main::@4 - [26] (signed word~) main::$9 ← (signed word) mulf8s::return#2 - [27] (signed word) main::x#0 ← (signed word~) main::$9 + (signed word)(number) $4b*(number) $100 - [28] (signed byte) mulf8s::a#1 ← (signed byte) main::r#2 - [29] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#2) - [30] call mulf8s - [31] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 +main::@11: scope:[main] from main::@3 + [21] (byte) main::a#6 ← (byte) main::angle#8 + to:main::@4 +main::@4: scope:[main] from main::@11 main::@14 + [22] (byte) main::i#2 ← phi( main::@11/(byte) 0 main::@14/(byte) main::i#1 ) + [22] (byte**) renderBobCleanupNext#17 ← phi( main::@11/(const byte**) RENDERBOB_CLEANUP main::@14/(byte**) renderBobCleanupNext#13 ) + [22] (byte) main::a#2 ← phi( main::@11/(byte) main::a#6 main::@14/(byte) main::a#1 ) + [22] (signed byte) main::r#2 ← phi( main::@11/(signed byte) $1e main::@14/(signed byte) main::r#1 ) + [23] *((const byte*) BORDERCOL) ← (byte) 1 + [24] (signed byte) mulf8s::a#0 ← (signed byte) main::r#2 + [25] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) main::a#2) + [26] call mulf8s + [27] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 to:main::@12 -main::@12: scope:[main] from main::@11 - [32] (signed word~) main::$11 ← (signed word) mulf8s::return#3 - [33] (signed word~) main::$12 ← (signed word~) main::$11 << (byte) 1 - [34] (signed word) main::y#0 ← (signed word~) main::$12 + (signed word)(number) $5a*(number) $100 - [35] *((const byte*) BORDERCOL) ← (byte) 2 - [36] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 - [37] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 - [38] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 - [39] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 - [40] call renderBob +main::@12: scope:[main] from main::@4 + [28] (signed word~) main::$10 ← (signed word) mulf8s::return#2 + [29] (signed word) main::x#0 ← (signed word~) main::$10 + (signed word)(number) $4b*(number) $100 + [30] (signed byte) mulf8s::a#1 ← (signed byte) main::r#2 + [31] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#2) + [32] call mulf8s + [33] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 to:main::@13 main::@13: scope:[main] from main::@12 - [41] (byte) main::i#1 ← ++ (byte) main::i#2 - [42] if((byte) main::i#1!=(byte) $1a) goto main::@4 - to:main::@5 -main::@5: scope:[main] from main::@13 - [43] (byte) main::angle#1 ← (byte) main::angle#6 + (byte) 3 - [44] *((const byte*) BORDERCOL) ← (byte) 0 - [45] call keyboard_key_pressed - [46] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + [34] (signed word~) main::$12 ← (signed word) mulf8s::return#3 + [35] (signed word~) main::$13 ← (signed word~) main::$12 << (byte) 1 + [36] (signed word) main::y#0 ← (signed word~) main::$13 + (signed word)(number) $5a*(number) $100 + [37] *((const byte*) BORDERCOL) ← (byte) 2 + [38] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 + [39] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 + [40] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 + [41] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 + [42] call renderBob to:main::@14 -main::@14: scope:[main] from main::@5 - [47] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#2 - [48] if((byte) 0!=(byte~) main::$18) goto main::@6 - to:main::@1 -main::@6: scope:[main] from main::@14 main::@15 - [49] phi() - [50] call keyboard_key_pressed - [51] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 +main::@14: scope:[main] from main::@13 + [43] (byte) main::i#1 ← ++ (byte) main::i#2 + [44] if((byte) main::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@14 + [45] (byte) main::angle#1 ← (byte) main::angle#8 + (byte) 3 + [46] *((const byte*) BORDERCOL) ← (byte) 0 + [47] call keyboard_key_pressed + [48] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 to:main::@15 -main::@15: scope:[main] from main::@6 - [52] (byte~) main::$20 ← (byte) keyboard_key_pressed::return#3 - [53] if((byte) 0!=(byte~) main::$20) goto main::@6 +main::@15: scope:[main] from main::@5 + [49] (byte~) main::$19 ← (byte) keyboard_key_pressed::return#2 + [50] if((byte) 0!=(byte~) main::$19) goto main::@6 + to:main::@1 +main::@6: scope:[main] from main::@15 main::@16 + [51] phi() + [52] call keyboard_key_pressed + [53] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 + to:main::@16 +main::@16: scope:[main] from main::@6 + [54] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#3 + [55] if((byte) 0!=(byte~) main::$21) goto main::@6 to:main::vicSelectGfxBank2 -main::vicSelectGfxBank2: scope:[main] from main::@15 - [54] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 +main::vicSelectGfxBank2: scope:[main] from main::@16 + [56] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank2_toDd001 main::vicSelectGfxBank2_toDd001: scope:[main] from main::vicSelectGfxBank2 - [55] phi() + [57] phi() to:main::vicSelectGfxBank2_@1 main::vicSelectGfxBank2_@1: scope:[main] from main::vicSelectGfxBank2_toDd001 - [56] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 + [58] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 to:main::toD0182 main::toD0182: scope:[main] from main::vicSelectGfxBank2_@1 - [57] phi() + [59] phi() to:main::@8 main::@8: scope:[main] from main::toD0182 - [58] *((const byte*) D018) ← (const byte) main::toD0182_return#0 + [60] *((const byte*) D018) ← (const byte) main::toD0182_return#0 to:main::@return main::@return: scope:[main] from main::@8 - [59] return + [61] return to:@return (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) keyboard_key_pressed: scope:[keyboard_key_pressed] from main::@5 main::@6 - [60] phi() - [61] call keyboard_matrix_read - [62] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + [62] phi() + [63] call keyboard_matrix_read + [64] (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 - [63] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 - [64] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask+(const byte) keyboard_key_pressed::colidx#0) + [65] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 + [66] (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 - [65] return + [67] return to:@return (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [66] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) - [67] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) + [68] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [69] (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 - [68] return + [70] return to:@return (void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos) -renderBob: scope:[renderBob] from main::@12 - [69] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 - [70] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 - [71] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 - [72] (word) renderBob::y_offset#0 ← *((const word*) RENDERBOB_YOFFSET + (byte~) renderBob::$8) - [73] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 - [74] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 - [75] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 - [76] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 - [77] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 - [78] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 - [79] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) - [80] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [81] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [82] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [83] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [84] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [85] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [86] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) - [87] *((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::@13 + [71] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 + [72] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 + [73] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 + [74] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8) + [75] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 + [76] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 + [77] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 + [78] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 + [79] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 + [80] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 + [81] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0 + [82] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER + [83] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) + [84] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [85] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [86] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [87] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [88] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [89] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [90] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) + [91] *((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 - [88] return + [92] return to:@return (signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) -mulf8s: scope:[mulf8s] from main::@11 main::@4 - [89] (signed byte) mulf8s::b#2 ← phi( main::@11/(signed byte) mulf8s::b#1 main::@4/(signed byte) mulf8s::b#0 ) - [89] (signed byte) mulf8s::mulf8s_prepare1_a#0 ← phi( main::@11/(signed byte) mulf8s::a#1 main::@4/(signed byte) mulf8s::a#0 ) +mulf8s: scope:[mulf8s] from main::@12 main::@4 + [93] (signed byte) mulf8s::b#2 ← phi( main::@12/(signed byte) mulf8s::b#1 main::@4/(signed byte) mulf8s::b#0 ) + [93] (signed byte) mulf8s::mulf8s_prepare1_a#0 ← phi( main::@12/(signed byte) mulf8s::a#1 main::@4/(signed byte) mulf8s::a#0 ) to:mulf8s::mulf8s_prepare1 mulf8s::mulf8s_prepare1: scope:[mulf8s] from mulf8s - [90] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 - [91] call mulf8u_prepare + [94] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 + [95] call mulf8u_prepare to:mulf8s::@1 mulf8s::@1: scope:[mulf8s] from mulf8s::mulf8s_prepare1 - [92] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 - [93] call mulf8s_prepared + [96] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 + [97] call mulf8s_prepared to:mulf8s::@2 mulf8s::@2: scope:[mulf8s] from mulf8s::@1 - [94] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 + [98] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 to:mulf8s::@return mulf8s::@return: scope:[mulf8s] from mulf8s::@2 - [95] return + [99] return to:@return (signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) mulf8s_prepared: scope:[mulf8s_prepared] from mulf8s::@1 - [96] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 - [97] call mulf8u_prepared - [98] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + [100] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 + [101] call mulf8u_prepared + [102] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 to:mulf8s_prepared::@5 mulf8s_prepared::@5: scope:[mulf8s_prepared] from mulf8s_prepared - [99] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 - [100] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 + [103] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 + [104] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 to:mulf8s_prepared::@3 mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@5 - [101] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 - [102] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 - [103] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 + [105] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 + [106] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 + [107] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 to:mulf8s_prepared::@1 mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@5 - [104] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 ) - [105] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 + [108] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 ) + [109] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 to:mulf8s_prepared::@4 mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1 - [106] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 - [107] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) - [108] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 + [110] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 + [111] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) + [112] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 to:mulf8s_prepared::@2 mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4 - [109] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 ) + [113] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 ) to:mulf8s_prepared::@return mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2 - [110] return + [114] return to:@return (word()) mulf8u_prepared((byte) mulf8u_prepared::b) mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared - [111] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 + [115] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } - [113] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) + [117] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) to:mulf8u_prepared::@return mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared - [114] return + [118] return to:@return (void()) mulf8u_prepare((byte) mulf8u_prepare::a) mulf8u_prepare: scope:[mulf8u_prepare] from mulf8s::mulf8s_prepare1 - [115] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 + [119] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } to:mulf8u_prepare::@return mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare - [117] return + [121] return + to:@return + +(void()) renderBobCleanup() +renderBobCleanup: scope:[renderBobCleanup] from main::@3 + [122] phi() + to:renderBobCleanup::@1 +renderBobCleanup::@1: scope:[renderBobCleanup] from renderBobCleanup renderBobCleanup::@1 + [123] (byte) renderBobCleanup::i#2 ← phi( renderBobCleanup/(byte) 0 renderBobCleanup::@1/(byte) renderBobCleanup::i#1 ) + [124] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1 + [125] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1) + [126] *((byte*) renderBobCleanup::screen#0) ← (byte) 0 + [127] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0 + [128] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0 + [129] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0 + [130] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0 + [131] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0 + [132] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0 + [133] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0 + [134] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0 + [135] (byte) renderBobCleanup::i#1 ← ++ (byte) renderBobCleanup::i#2 + [136] if((byte) renderBobCleanup::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobCleanup::@1 + to:renderBobCleanup::@return +renderBobCleanup::@return: scope:[renderBobCleanup] from renderBobCleanup::@1 + [137] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from main::@7 - [118] phi() + [138] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [119] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [120] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 + [139] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) + [140] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [121] return + [141] return to:@return memset::@2: scope:[memset] from memset::@1 - [122] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [123] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [143] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@1 (void()) renderBobInit() renderBobInit: scope:[renderBobInit] from main::@10 - [124] phi() + [144] phi() to:renderBobInit::@1 renderBobInit::@1: scope:[renderBobInit] from renderBobInit renderBobInit::@1 - [125] (byte) renderBobInit::y#2 ← phi( renderBobInit/(byte) 0 renderBobInit::@1/(byte) renderBobInit::y#1 ) - [126] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 - [127] (word~) renderBobInit::$4 ← (word~) renderBobInit::$0 << (byte) 2 - [128] (word~) renderBobInit::$5 ← (word~) renderBobInit::$4 + (word~) renderBobInit::$0 - [129] (word~) renderBobInit::$1 ← (word~) renderBobInit::$5 << (byte) 3 - [130] (byte~) renderBobInit::$3 ← (byte) renderBobInit::y#2 << (byte) 1 - [131] *((const word*) RENDERBOB_YOFFSET + (byte~) renderBobInit::$3) ← (word~) renderBobInit::$1 - [132] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2 - [133] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1 + [145] (byte) renderBobInit::y#2 ← phi( renderBobInit/(byte) 0 renderBobInit::@1/(byte) renderBobInit::y#1 ) + [146] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 + [147] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2 + [148] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0 + [149] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (byte) 3 + [150] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1 + [151] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1 + [152] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2 + [153] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1 + to:renderBobInit::@2 +renderBobInit::@2: scope:[renderBobInit] from renderBobInit::@1 renderBobInit::@2 + [154] (byte) renderBobInit::i#2 ← phi( renderBobInit::@1/(byte) 0 renderBobInit::@2/(byte) renderBobInit::i#1 ) + [155] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1 + [156] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN + [157] (byte) renderBobInit::i#1 ← ++ (byte) renderBobInit::i#2 + [158] if((byte) renderBobInit::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobInit::@2 to:renderBobInit::@return -renderBobInit::@return: scope:[renderBobInit] from renderBobInit::@1 - [134] return +renderBobInit::@return: scope:[renderBobInit] from renderBobInit::@2 + [159] return to:@return (void()) prepareBobs() prepareBobs: scope:[prepareBobs] from main::@9 - [135] phi() - [136] call progress_init + [160] phi() + [161] call progress_init to:prepareBobs::@8 prepareBobs::@8: scope:[prepareBobs] from prepareBobs - [137] phi() - [138] call bobCharsetFindOrAddGlyph + [162] phi() + [163] call bobCharsetFindOrAddGlyph to:prepareBobs::@1 prepareBobs::@1: scope:[prepareBobs] from prepareBobs::@8 prepareBobs::@9 - [139] (byte) prepareBobs::bob_table_idx#6 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) prepareBobs::bob_table_idx#12 ) - [139] (byte) bob_charset_next_id#14 ← phi( prepareBobs::@8/(byte) bob_charset_next_id#16 prepareBobs::@9/(byte) bob_charset_next_id#30 ) - [139] (byte) progress_idx#16 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) progress_idx#31 ) - [139] (byte*) progress_cursor#15 ← phi( prepareBobs::@8/(const byte*) SCREEN_BASIC prepareBobs::@9/(byte*) progress_cursor#31 ) - [139] (byte) prepareBobs::shift_y#2 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) prepareBobs::shift_y#1 ) - [140] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 + [164] (byte) prepareBobs::bob_table_idx#6 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) prepareBobs::bob_table_idx#12 ) + [164] (byte) bob_charset_next_id#14 ← phi( prepareBobs::@8/(byte) bob_charset_next_id#16 prepareBobs::@9/(byte) bob_charset_next_id#30 ) + [164] (byte) progress_idx#16 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) progress_idx#31 ) + [164] (byte*) progress_cursor#15 ← phi( prepareBobs::@8/(const byte*) SCREEN_BASIC prepareBobs::@9/(byte*) progress_cursor#31 ) + [164] (byte) prepareBobs::shift_y#2 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) prepareBobs::shift_y#1 ) + [165] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 to:prepareBobs::@return prepareBobs::@return: scope:[prepareBobs] from prepareBobs::@1 - [141] return + [166] return to:@return prepareBobs::@2: scope:[prepareBobs] from prepareBobs::@1 prepareBobs::@13 - [142] (byte) progress_idx#31 ← phi( prepareBobs::@1/(byte) progress_idx#16 prepareBobs::@13/(byte) progress_idx#25 ) - [142] (byte*) progress_cursor#31 ← phi( prepareBobs::@1/(byte*) progress_cursor#15 prepareBobs::@13/(byte*) progress_cursor#24 ) - [142] (byte) bob_charset_next_id#30 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#14 prepareBobs::@13/(byte) bob_charset_next_id#21 ) - [142] (byte) prepareBobs::bob_table_idx#12 ← phi( prepareBobs::@1/(byte) prepareBobs::bob_table_idx#6 prepareBobs::@13/(byte) prepareBobs::bob_table_idx#1 ) - [142] (byte) prepareBobs::shift_x#2 ← phi( prepareBobs::@1/(byte) 0 prepareBobs::@13/(byte) prepareBobs::shift_x#1 ) - [143] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 + [167] (byte) progress_idx#31 ← phi( prepareBobs::@1/(byte) progress_idx#16 prepareBobs::@13/(byte) progress_idx#25 ) + [167] (byte*) progress_cursor#31 ← phi( prepareBobs::@1/(byte*) progress_cursor#15 prepareBobs::@13/(byte*) progress_cursor#24 ) + [167] (byte) bob_charset_next_id#30 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#14 prepareBobs::@13/(byte) bob_charset_next_id#21 ) + [167] (byte) prepareBobs::bob_table_idx#12 ← phi( prepareBobs::@1/(byte) prepareBobs::bob_table_idx#6 prepareBobs::@13/(byte) prepareBobs::bob_table_idx#1 ) + [167] (byte) prepareBobs::shift_x#2 ← phi( prepareBobs::@1/(byte) 0 prepareBobs::@13/(byte) prepareBobs::shift_x#1 ) + [168] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 to:prepareBobs::@4 prepareBobs::@4: scope:[prepareBobs] from prepareBobs::@2 - [144] phi() - [145] call shiftProtoBobDown + [169] phi() + [170] call shiftProtoBobDown to:prepareBobs::@9 prepareBobs::@9: scope:[prepareBobs] from prepareBobs::@4 - [146] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 + [171] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 to:prepareBobs::@1 prepareBobs::@3: scope:[prepareBobs] from prepareBobs::@2 - [147] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 + [172] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 to:prepareBobs::@5 prepareBobs::@5: scope:[prepareBobs] from prepareBobs::@11 prepareBobs::@3 - [148] (byte*) progress_cursor#24 ← phi( prepareBobs::@11/(byte*) progress_cursor#17 prepareBobs::@3/(byte*) progress_cursor#31 ) - [148] (byte) progress_idx#25 ← phi( prepareBobs::@11/(byte) progress_idx#10 prepareBobs::@3/(byte) progress_idx#31 ) - [148] (byte*) prepareBobs::bob_table#2 ← phi( prepareBobs::@11/(byte*) prepareBobs::bob_table#1 prepareBobs::@3/(byte*) prepareBobs::bob_table#0 ) - [148] (byte) bob_charset_next_id#21 ← phi( prepareBobs::@11/(byte) bob_charset_next_id#16 prepareBobs::@3/(byte) bob_charset_next_id#30 ) - [148] (byte*) prepareBobs::bob_glyph#2 ← phi( prepareBobs::@11/(byte*) prepareBobs::bob_glyph#1 prepareBobs::@3/(const byte*) PROTO_BOB ) - [148] (byte) prepareBobs::cell#2 ← phi( prepareBobs::@11/(byte) prepareBobs::cell#1 prepareBobs::@3/(byte) 0 ) - [149] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 + [173] (byte*) progress_cursor#24 ← phi( prepareBobs::@11/(byte*) progress_cursor#17 prepareBobs::@3/(byte*) progress_cursor#31 ) + [173] (byte) progress_idx#25 ← phi( prepareBobs::@11/(byte) progress_idx#10 prepareBobs::@3/(byte) progress_idx#31 ) + [173] (byte*) prepareBobs::bob_table#2 ← phi( prepareBobs::@11/(byte*) prepareBobs::bob_table#1 prepareBobs::@3/(byte*) prepareBobs::bob_table#0 ) + [173] (byte) bob_charset_next_id#21 ← phi( prepareBobs::@11/(byte) bob_charset_next_id#16 prepareBobs::@3/(byte) bob_charset_next_id#30 ) + [173] (byte*) prepareBobs::bob_glyph#2 ← phi( prepareBobs::@11/(byte*) prepareBobs::bob_glyph#1 prepareBobs::@3/(const byte*) PROTO_BOB ) + [173] (byte) prepareBobs::cell#2 ← phi( prepareBobs::@11/(byte) prepareBobs::cell#1 prepareBobs::@3/(byte) 0 ) + [174] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 to:prepareBobs::@7 prepareBobs::@7: scope:[prepareBobs] from prepareBobs::@5 - [150] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 - [151] call shiftProtoBobRight + [175] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 + [176] call shiftProtoBobRight to:prepareBobs::@12 prepareBobs::@12: scope:[prepareBobs] from prepareBobs::@7 - [152] phi() - [153] call shiftProtoBobRight + [177] phi() + [178] call shiftProtoBobRight to:prepareBobs::@13 prepareBobs::@13: scope:[prepareBobs] from prepareBobs::@12 - [154] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 + [179] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 to:prepareBobs::@2 prepareBobs::@6: scope:[prepareBobs] from prepareBobs::@5 - [155] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 - [156] call bobCharsetFindOrAddGlyph - [157] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 + [180] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + [181] call bobCharsetFindOrAddGlyph + [182] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 to:prepareBobs::@10 prepareBobs::@10: scope:[prepareBobs] from prepareBobs::@6 - [158] (byte~) prepareBobs::$6 ← (byte) bobCharsetFindOrAddGlyph::return#1 - [159] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 - [160] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 - [161] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y - [162] call progress_inc + [183] (byte~) prepareBobs::$6 ← (byte) bobCharsetFindOrAddGlyph::return#1 + [184] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 + [185] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 + [186] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y + [187] call progress_inc to:prepareBobs::@11 prepareBobs::@11: scope:[prepareBobs] from prepareBobs::@10 - [163] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 + [188] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 to:prepareBobs::@5 (void()) progress_inc() progress_inc: scope:[progress_inc] from prepareBobs::@10 - [164] (byte) progress_idx#8 ← ++ (byte) progress_idx#25 - [165] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 + [189] (byte) progress_idx#8 ← ++ (byte) progress_idx#25 + [190] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 to:progress_inc::@2 progress_inc::@2: scope:[progress_inc] from progress_inc - [166] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) - [167] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24 + [191] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) + [192] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24 to:progress_inc::@1 progress_inc::@1: scope:[progress_inc] from progress_inc progress_inc::@2 - [168] (byte*) progress_cursor#17 ← phi( progress_inc/(byte*) progress_cursor#24 progress_inc::@2/(byte*) progress_cursor#8 ) - [168] (byte) progress_idx#10 ← phi( progress_inc/(byte) progress_idx#8 progress_inc::@2/(byte) 0 ) - [169] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) + [193] (byte*) progress_cursor#17 ← phi( progress_inc/(byte*) progress_cursor#24 progress_inc::@2/(byte*) progress_cursor#8 ) + [193] (byte) progress_idx#10 ← phi( progress_inc/(byte) progress_idx#8 progress_inc::@2/(byte) 0 ) + [194] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) to:progress_inc::@return progress_inc::@return: scope:[progress_inc] from progress_inc::@1 - [170] return + [195] return to:@return (byte()) bobCharsetFindOrAddGlyph((byte*) bobCharsetFindOrAddGlyph::bob_glyph) bobCharsetFindOrAddGlyph: scope:[bobCharsetFindOrAddGlyph] from prepareBobs::@6 prepareBobs::@8 - [171] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 ← phi( prepareBobs::@8/(const byte*) PROTO_BOB+(byte) $30 prepareBobs::@6/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ) - [171] (byte) bob_charset_next_id#23 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@6/(byte) bob_charset_next_id#21 ) + [196] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 ← phi( prepareBobs::@8/(const byte*) PROTO_BOB+(byte) $30 prepareBobs::@6/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ) + [196] (byte) bob_charset_next_id#23 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@6/(byte) bob_charset_next_id#21 ) to:bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@1: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph bobCharsetFindOrAddGlyph::@6 - [172] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 ← phi( bobCharsetFindOrAddGlyph/(const byte*) BOB_CHARSET bobCharsetFindOrAddGlyph::@6/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ) - [172] (byte) bobCharsetFindOrAddGlyph::glyph_id#11 ← phi( bobCharsetFindOrAddGlyph/(byte) 0 bobCharsetFindOrAddGlyph::@6/(byte) bobCharsetFindOrAddGlyph::glyph_id#1 ) - [173] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 + [197] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 ← phi( bobCharsetFindOrAddGlyph/(const byte*) BOB_CHARSET bobCharsetFindOrAddGlyph::@6/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ) + [197] (byte) bobCharsetFindOrAddGlyph::glyph_id#11 ← phi( bobCharsetFindOrAddGlyph/(byte) 0 bobCharsetFindOrAddGlyph::@6/(byte) bobCharsetFindOrAddGlyph::glyph_id#1 ) + [198] 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 - [174] (byte) bobCharsetFindOrAddGlyph::i1#2 ← phi( bobCharsetFindOrAddGlyph::@8/(byte) bobCharsetFindOrAddGlyph::i1#1 bobCharsetFindOrAddGlyph::@1/(byte) 0 ) - [175] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 + [199] (byte) bobCharsetFindOrAddGlyph::i1#2 ← phi( bobCharsetFindOrAddGlyph::@8/(byte) bobCharsetFindOrAddGlyph::i1#1 bobCharsetFindOrAddGlyph::@1/(byte) 0 ) + [200] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 to:bobCharsetFindOrAddGlyph::@9 bobCharsetFindOrAddGlyph::@9: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@7 - [176] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 + [201] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 to:bobCharsetFindOrAddGlyph::@return bobCharsetFindOrAddGlyph::@return: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 - [177] (byte) bob_charset_next_id#16 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#23 bobCharsetFindOrAddGlyph::@9/(byte) bob_charset_next_id#8 ) - [178] return + [202] (byte) bob_charset_next_id#16 ← phi( bobCharsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#23 bobCharsetFindOrAddGlyph::@9/(byte) bob_charset_next_id#8 ) + [203] return to:@return bobCharsetFindOrAddGlyph::@8: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@7 - [179] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) - [180] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 + [204] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) + [205] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 to:bobCharsetFindOrAddGlyph::@7 bobCharsetFindOrAddGlyph::@2: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@4 - [181] (byte) bobCharsetFindOrAddGlyph::i#2 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) 0 bobCharsetFindOrAddGlyph::@4/(byte) bobCharsetFindOrAddGlyph::i#1 ) - [182] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 + [206] (byte) bobCharsetFindOrAddGlyph::i#2 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) 0 bobCharsetFindOrAddGlyph::@4/(byte) bobCharsetFindOrAddGlyph::i#1 ) + [207] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 to:bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@3: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@2 - [183] if(*((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i#2)==*((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i#2)) goto bobCharsetFindOrAddGlyph::@4 + [208] 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 - [184] (byte) bobCharsetFindOrAddGlyph::found#2 ← phi( bobCharsetFindOrAddGlyph::@3/(byte) 0 bobCharsetFindOrAddGlyph::@2/(byte) 1 ) - [185] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 + [209] (byte) bobCharsetFindOrAddGlyph::found#2 ← phi( bobCharsetFindOrAddGlyph::@3/(byte) 0 bobCharsetFindOrAddGlyph::@2/(byte) 1 ) + [210] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 to:bobCharsetFindOrAddGlyph::@return bobCharsetFindOrAddGlyph::@6: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@5 - [186] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 - [187] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 + [211] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 + [212] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 to:bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@4: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@3 - [188] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 + [213] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 to:bobCharsetFindOrAddGlyph::@2 (void()) shiftProtoBobRight() shiftProtoBobRight: scope:[shiftProtoBobRight] from prepareBobs::@12 prepareBobs::@7 - [189] phi() + [214] phi() to:shiftProtoBobRight::@1 shiftProtoBobRight::@1: scope:[shiftProtoBobRight] from shiftProtoBobRight shiftProtoBobRight::@6 - [190] (byte) shiftProtoBobRight::carry#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::carry#10 ) - [190] (byte) shiftProtoBobRight::j#3 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::j#10 ) - [190] (byte) shiftProtoBobRight::i#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::i#1 ) - [191] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 + [215] (byte) shiftProtoBobRight::carry#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::carry#10 ) + [215] (byte) shiftProtoBobRight::j#3 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::j#10 ) + [215] (byte) shiftProtoBobRight::i#2 ← phi( shiftProtoBobRight/(byte) 0 shiftProtoBobRight::@6/(byte) shiftProtoBobRight::i#1 ) + [216] 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 - [192] return + [217] return to:@return shiftProtoBobRight::@2: scope:[shiftProtoBobRight] from shiftProtoBobRight::@1 - [193] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 - [194] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 + [218] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 + [219] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 to:shiftProtoBobRight::@4 shiftProtoBobRight::@3: scope:[shiftProtoBobRight] from shiftProtoBobRight::@2 - [195] phi() + [220] phi() to:shiftProtoBobRight::@4 shiftProtoBobRight::@4: scope:[shiftProtoBobRight] from shiftProtoBobRight::@2 shiftProtoBobRight::@3 - [196] (byte) shiftProtoBobRight::carry#1 ← phi( shiftProtoBobRight::@3/(byte) $80 shiftProtoBobRight::@2/(byte) 0 ) - [197] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 - [198] (byte~) shiftProtoBobRight::$6 ← (byte) shiftProtoBobRight::carry#2 | (byte~) shiftProtoBobRight::$5 - [199] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 - [200] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 + [221] (byte) shiftProtoBobRight::carry#1 ← phi( shiftProtoBobRight::@3/(byte) $80 shiftProtoBobRight::@2/(byte) 0 ) + [222] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 + [223] (byte~) shiftProtoBobRight::$6 ← (byte) shiftProtoBobRight::carry#2 | (byte~) shiftProtoBobRight::$5 + [224] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 + [225] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 to:shiftProtoBobRight::@7 shiftProtoBobRight::@7: scope:[shiftProtoBobRight] from shiftProtoBobRight::@4 - [201] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 + [226] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 to:shiftProtoBobRight::@6 shiftProtoBobRight::@6: scope:[shiftProtoBobRight] from shiftProtoBobRight::@5 shiftProtoBobRight::@7 - [202] (byte) shiftProtoBobRight::j#10 ← phi( shiftProtoBobRight::@7/(byte) shiftProtoBobRight::j#2 shiftProtoBobRight::@5/(byte) shiftProtoBobRight::j#1 ) - [203] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 - [204] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 + [227] (byte) shiftProtoBobRight::j#10 ← phi( shiftProtoBobRight::@7/(byte) shiftProtoBobRight::j#2 shiftProtoBobRight::@5/(byte) shiftProtoBobRight::j#1 ) + [228] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 + [229] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 to:shiftProtoBobRight::@1 shiftProtoBobRight::@5: scope:[shiftProtoBobRight] from shiftProtoBobRight::@4 - [205] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f + [230] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f to:shiftProtoBobRight::@6 (void()) shiftProtoBobDown() shiftProtoBobDown: scope:[shiftProtoBobDown] from prepareBobs::@4 - [206] phi() + [231] phi() to:shiftProtoBobDown::@1 shiftProtoBobDown::@1: scope:[shiftProtoBobDown] from shiftProtoBobDown shiftProtoBobDown::@2 - [207] (byte) shiftProtoBobDown::i#2 ← phi( shiftProtoBobDown/(byte) $17 shiftProtoBobDown::@2/(byte) shiftProtoBobDown::i#1 ) - [208] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 + [232] (byte) shiftProtoBobDown::i#2 ← phi( shiftProtoBobDown/(byte) $17 shiftProtoBobDown::@2/(byte) shiftProtoBobDown::i#1 ) + [233] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 to:shiftProtoBobDown::@3 shiftProtoBobDown::@3: scope:[shiftProtoBobDown] from shiftProtoBobDown::@1 - [209] *((const byte*) PROTO_BOB) ← (byte) 0 - [210] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 - [211] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 + [234] *((const byte*) PROTO_BOB) ← (byte) 0 + [235] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 + [236] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 to:shiftProtoBobDown::@return shiftProtoBobDown::@return: scope:[shiftProtoBobDown] from shiftProtoBobDown::@3 - [212] return + [237] return to:@return shiftProtoBobDown::@2: scope:[shiftProtoBobDown] from shiftProtoBobDown::@1 - [213] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) - [214] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) - [215] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 - [216] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 + [238] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) + [239] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) + [240] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 + [241] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 to:shiftProtoBobDown::@1 (void()) progress_init((byte*) progress_init::line) progress_init: scope:[progress_init] from prepareBobs - [217] phi() + [242] phi() to:progress_init::@return progress_init::@return: scope:[progress_init] from progress_init - [218] return + [243] return to:@return (void()) mulf_init() mulf_init: scope:[mulf_init] from main - [219] phi() + [244] phi() to:mulf_init::@1 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 - [220] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) - [220] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [220] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) - [220] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) - [220] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) - [221] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 + [245] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) + [245] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) + [245] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [245] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) + [245] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) + [246] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 to:mulf_init::@5 mulf_init::@5: scope:[mulf_init] from mulf_init::@1 mulf_init::@8 - [222] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) - [222] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi ) - [222] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) - [222] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo ) - [223] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 + [247] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) + [247] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi ) + [247] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) + [247] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo ) + [248] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 to:mulf_init::@7 mulf_init::@7: scope:[mulf_init] from mulf_init::@5 - [224] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) - [225] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) + [249] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) + [250] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) to:mulf_init::@return mulf_init::@return: scope:[mulf_init] from mulf_init::@7 - [226] return + [251] return to:@return mulf_init::@6: scope:[mulf_init] from mulf_init::@5 - [227] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) - [228] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) - [229] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 - [230] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 - [231] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 + [252] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) + [253] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) + [254] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 + [255] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 + [256] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 to:mulf_init::@8 mulf_init::@9: scope:[mulf_init] from mulf_init::@6 - [232] phi() + [257] phi() to:mulf_init::@8 mulf_init::@8: scope:[mulf_init] from mulf_init::@6 mulf_init::@9 - [233] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) - [234] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 + [258] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) + [259] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 to:mulf_init::@5 mulf_init::@2: scope:[mulf_init] from mulf_init::@1 - [235] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 - [236] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 - [237] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 + [260] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 + [261] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 + [262] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 to:mulf_init::@4 mulf_init::@4: scope:[mulf_init] from mulf_init::@2 - [238] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 - [239] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 + [263] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 + [264] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 to:mulf_init::@3 mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4 - [240] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) - [240] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) - [241] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 - [242] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 - [243] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 - [244] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 - [245] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 - [246] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 - [247] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 + [265] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) + [265] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) + [266] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 + [267] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 + [268] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 + [269] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 + [270] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 + [271] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 + [272] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 to:mulf_init::@1 @@ -4190,18 +4557,18 @@ VARIABLE REGISTER WEIGHTS (byte) keyboard_matrix_read::row_pressed_bits (byte) keyboard_matrix_read::rowid (void()) main() -(signed word~) main::$11 202.0 +(signed word~) main::$10 202.0 (signed word~) main::$12 202.0 -(byte~) main::$18 22.0 -(byte~) main::$20 22.0 -(signed word~) main::$9 202.0 +(signed word~) main::$13 202.0 +(byte~) main::$19 22.0 +(byte~) main::$21 22.0 (byte) main::a (byte) main::a#1 28.857142857142858 (byte) main::a#2 25.9375 -(byte) main::a#7 22.0 +(byte) main::a#6 22.0 (byte) main::angle (byte) main::angle#1 3.6666666666666665 -(byte) main::angle#6 1.2692307692307692 +(byte) main::angle#8 1.1785714285714286 (byte) main::i (byte) main::i#1 151.5 (byte) main::i#2 9.619047619047619 @@ -4348,9 +4715,9 @@ VARIABLE REGISTER WEIGHTS (byte~) renderBob::$6 4.0 (byte~) renderBob::$8 4.0 (byte) renderBob::bob_table_idx -(byte) renderBob::bob_table_idx#0 2.2222222222222228 +(byte) renderBob::bob_table_idx#0 1.8181818181818186 (byte*) renderBob::screen -(byte*) renderBob::screen#0 1.5384615384615383 +(byte*) renderBob::screen#0 1.4666666666666666 (byte) renderBob::x_char_offset (byte) renderBob::x_char_offset#0 0.8 (byte) renderBob::xpos @@ -4361,12 +4728,26 @@ VARIABLE REGISTER WEIGHTS (word) renderBob::y_offset#0 4.0 (byte) renderBob::ypos (byte) renderBob::ypos#0 15.000000000000002 +(void()) renderBobCleanup() +(byte~) renderBobCleanup::$1 202.0 +(byte) renderBobCleanup::i +(byte) renderBobCleanup::i#1 151.5 +(byte) renderBobCleanup::i#2 25.25 +(byte*) renderBobCleanup::screen +(byte*) renderBobCleanup::screen#0 112.22222222222223 +(byte**) renderBobCleanupNext +(byte**) renderBobCleanupNext#13 7.357142857142858 +(byte**) renderBobCleanupNext#17 3.3870967741935485 (void()) renderBobInit() (word~) renderBobInit::$0 16.5 (word~) renderBobInit::$1 11.0 -(byte~) renderBobInit::$3 22.0 -(word~) renderBobInit::$4 22.0 -(word~) renderBobInit::$5 22.0 +(byte~) renderBobInit::$4 22.0 +(byte~) renderBobInit::$5 22.0 +(word~) renderBobInit::$6 22.0 +(word~) renderBobInit::$7 22.0 +(byte) renderBobInit::i +(byte) renderBobInit::i#1 16.5 +(byte) renderBobInit::i#2 11.0 (byte) renderBobInit::y (byte) renderBobInit::y#1 16.5 (byte) renderBobInit::y#2 4.714285714285714 @@ -4393,15 +4774,18 @@ VARIABLE REGISTER WEIGHTS (byte) shiftProtoBobRight::new_carry Initial phi equivalence classes -[ main::angle#6 main::angle#1 ] +[ main::angle#8 main::angle#1 ] [ main::r#2 main::r#1 ] -[ main::a#2 main::a#1 main::a#7 ] +[ main::a#2 main::a#6 main::a#1 ] +[ renderBobCleanupNext#17 renderBobCleanupNext#13 ] [ main::i#2 main::i#1 ] [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] +[ renderBobCleanup::i#2 renderBobCleanup::i#1 ] [ memset::dst#2 memset::dst#1 ] [ renderBobInit::y#2 renderBobInit::y#1 ] +[ renderBobInit::i#2 renderBobInit::i#1 ] [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] @@ -4432,18 +4816,18 @@ Initial phi equivalence classes [ mulf_init::dir#2 mulf_init::dir#4 ] [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] Added variable mulf8s::return#2 to zero page equivalence class [ mulf8s::return#2 ] -Added variable main::$9 to zero page equivalence class [ main::$9 ] +Added variable main::$10 to zero page equivalence class [ main::$10 ] Added variable main::x#0 to zero page equivalence class [ main::x#0 ] Added variable mulf8s::return#3 to zero page equivalence class [ mulf8s::return#3 ] -Added variable main::$11 to zero page equivalence class [ main::$11 ] Added variable main::$12 to zero page equivalence class [ main::$12 ] +Added variable main::$13 to zero page equivalence class [ main::$13 ] Added variable main::y#0 to zero page equivalence class [ main::y#0 ] Added variable renderBob::xpos#0 to zero page equivalence class [ renderBob::xpos#0 ] Added variable renderBob::ypos#0 to zero page equivalence class [ renderBob::ypos#0 ] Added variable keyboard_key_pressed::return#2 to zero page equivalence class [ keyboard_key_pressed::return#2 ] -Added variable main::$18 to zero page equivalence class [ main::$18 ] +Added variable main::$19 to zero page equivalence class [ main::$19 ] Added variable keyboard_key_pressed::return#3 to zero page equivalence class [ keyboard_key_pressed::return#3 ] -Added variable main::$20 to zero page equivalence class [ main::$20 ] +Added variable main::$21 to zero page equivalence class [ main::$21 ] 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 ] @@ -4468,11 +4852,14 @@ Added variable mulf8s_prepared::$15 to zero page equivalence class [ mulf8s_prep Added variable mulf8s_prepared::$12 to zero page equivalence class [ mulf8s_prepared::$12 ] Added variable mulf8s_prepared::$16 to zero page equivalence class [ mulf8s_prepared::$16 ] Added variable mulf8u_prepared::return#0 to zero page equivalence class [ mulf8u_prepared::return#0 ] +Added variable renderBobCleanup::$1 to zero page equivalence class [ renderBobCleanup::$1 ] +Added variable renderBobCleanup::screen#0 to zero page equivalence class [ renderBobCleanup::screen#0 ] Added variable renderBobInit::$0 to zero page equivalence class [ renderBobInit::$0 ] +Added variable renderBobInit::$6 to zero page equivalence class [ renderBobInit::$6 ] +Added variable renderBobInit::$7 to zero page equivalence class [ renderBobInit::$7 ] +Added variable renderBobInit::$1 to zero page equivalence class [ renderBobInit::$1 ] Added variable renderBobInit::$4 to zero page equivalence class [ renderBobInit::$4 ] Added variable renderBobInit::$5 to zero page equivalence class [ renderBobInit::$5 ] -Added variable renderBobInit::$1 to zero page equivalence class [ renderBobInit::$1 ] -Added variable renderBobInit::$3 to zero page equivalence class [ renderBobInit::$3 ] Added variable bobCharsetFindOrAddGlyph::return#1 to zero page equivalence class [ bobCharsetFindOrAddGlyph::return#1 ] Added variable prepareBobs::$6 to zero page equivalence class [ prepareBobs::$6 ] Added variable shiftProtoBobRight::$1 to zero page equivalence class [ shiftProtoBobRight::$1 ] @@ -4482,15 +4869,18 @@ Added variable mulf_init::$1 to zero page equivalence class [ mulf_init::$1 ] Added variable mulf_init::$4 to zero page equivalence class [ mulf_init::$4 ] Added variable mulf_init::$5 to zero page equivalence class [ mulf_init::$5 ] Complete equivalence classes -[ main::angle#6 main::angle#1 ] +[ main::angle#8 main::angle#1 ] [ main::r#2 main::r#1 ] -[ main::a#2 main::a#1 main::a#7 ] +[ main::a#2 main::a#6 main::a#1 ] +[ renderBobCleanupNext#17 renderBobCleanupNext#13 ] [ main::i#2 main::i#1 ] [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] +[ renderBobCleanup::i#2 renderBobCleanup::i#1 ] [ memset::dst#2 memset::dst#1 ] [ renderBobInit::y#2 renderBobInit::y#1 ] +[ renderBobInit::i#2 renderBobInit::i#1 ] [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] @@ -4521,18 +4911,18 @@ Complete equivalence classes [ mulf_init::dir#2 mulf_init::dir#4 ] [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] [ mulf8s::return#2 ] -[ main::$9 ] +[ main::$10 ] [ main::x#0 ] [ mulf8s::return#3 ] -[ main::$11 ] [ main::$12 ] +[ main::$13 ] [ main::y#0 ] [ renderBob::xpos#0 ] [ renderBob::ypos#0 ] [ keyboard_key_pressed::return#2 ] -[ main::$18 ] +[ main::$19 ] [ keyboard_key_pressed::return#3 ] -[ main::$20 ] +[ main::$21 ] [ keyboard_matrix_read::return#2 ] [ keyboard_key_pressed::$2 ] [ keyboard_key_pressed::return#0 ] @@ -4557,11 +4947,14 @@ Complete equivalence classes [ mulf8s_prepared::$12 ] [ mulf8s_prepared::$16 ] [ mulf8u_prepared::return#0 ] +[ renderBobCleanup::$1 ] +[ renderBobCleanup::screen#0 ] [ renderBobInit::$0 ] +[ renderBobInit::$6 ] +[ renderBobInit::$7 ] +[ renderBobInit::$1 ] [ renderBobInit::$4 ] [ renderBobInit::$5 ] -[ renderBobInit::$1 ] -[ renderBobInit::$3 ] [ bobCharsetFindOrAddGlyph::return#1 ] [ prepareBobs::$6 ] [ shiftProtoBobRight::$1 ] @@ -4570,94 +4963,100 @@ Complete equivalence classes [ mulf_init::$1 ] [ mulf_init::$4 ] [ mulf_init::$5 ] -Allocated zp[1]:2 [ main::angle#6 main::angle#1 ] +Allocated zp[1]:2 [ main::angle#8 main::angle#1 ] Allocated zp[1]:3 [ main::r#2 main::r#1 ] -Allocated zp[1]:4 [ main::a#2 main::a#1 main::a#7 ] -Allocated zp[1]:5 [ main::i#2 main::i#1 ] -Allocated zp[1]:6 [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] -Allocated zp[1]:7 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] -Allocated zp[2]:8 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] -Allocated zp[2]:10 [ memset::dst#2 memset::dst#1 ] -Allocated zp[1]:12 [ renderBobInit::y#2 renderBobInit::y#1 ] -Allocated zp[1]:13 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Allocated zp[2]:14 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] -Allocated zp[1]:16 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] -Allocated zp[1]:17 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] -Allocated zp[1]:18 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] -Allocated zp[1]:19 [ prepareBobs::cell#2 prepareBobs::cell#1 ] -Allocated zp[2]:20 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] -Allocated zp[2]:22 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] -Allocated zp[1]:24 [ 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]:25 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] -Allocated zp[1]:27 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] -Allocated zp[2]:28 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] -Allocated zp[1]:30 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] -Allocated zp[1]:31 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -Allocated zp[1]:32 [ bobCharsetFindOrAddGlyph::found#2 ] -Allocated zp[1]:33 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] -Allocated zp[1]:34 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] -Allocated zp[1]:35 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] -Allocated zp[1]:36 [ shiftProtoBobRight::carry#1 ] -Allocated zp[1]:37 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] -Allocated zp[2]:38 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] -Allocated zp[1]:40 [ mulf_init::c#2 mulf_init::c#1 ] -Allocated zp[2]:41 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] -Allocated zp[1]:43 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Allocated zp[2]:44 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] -Allocated zp[1]:46 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Allocated zp[2]:47 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] -Allocated zp[1]:49 [ mulf_init::dir#2 mulf_init::dir#4 ] -Allocated zp[2]:50 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] -Allocated zp[2]:52 [ mulf8s::return#2 ] -Allocated zp[2]:54 [ main::$9 ] -Allocated zp[2]:56 [ main::x#0 ] -Allocated zp[2]:58 [ mulf8s::return#3 ] -Allocated zp[2]:60 [ main::$11 ] -Allocated zp[2]:62 [ main::$12 ] -Allocated zp[2]:64 [ main::y#0 ] -Allocated zp[1]:66 [ renderBob::xpos#0 ] -Allocated zp[1]:67 [ renderBob::ypos#0 ] -Allocated zp[1]:68 [ keyboard_key_pressed::return#2 ] -Allocated zp[1]:69 [ main::$18 ] -Allocated zp[1]:70 [ keyboard_key_pressed::return#3 ] -Allocated zp[1]:71 [ main::$20 ] -Allocated zp[1]:72 [ keyboard_matrix_read::return#2 ] -Allocated zp[1]:73 [ keyboard_key_pressed::$2 ] -Allocated zp[1]:74 [ keyboard_key_pressed::return#0 ] -Allocated zp[1]:75 [ keyboard_matrix_read::return#0 ] -Allocated zp[1]:76 [ renderBob::x_char_offset#0 ] -Allocated zp[1]:77 [ renderBob::y_char_offset#0 ] -Allocated zp[1]:78 [ renderBob::$8 ] -Allocated zp[2]:79 [ renderBob::y_offset#0 ] -Allocated zp[2]:81 [ renderBob::$2 ] -Allocated zp[2]:83 [ renderBob::screen#0 ] -Allocated zp[1]:85 [ renderBob::$4 ] -Allocated zp[1]:86 [ renderBob::$5 ] -Allocated zp[1]:87 [ renderBob::$6 ] -Allocated zp[1]:88 [ renderBob::bob_table_idx#0 ] -Allocated zp[1]:89 [ mulf8u_prepare::a#0 ] -Allocated zp[1]:90 [ mulf8s_prepared::b#0 ] -Allocated zp[2]:91 [ mulf8s::return#0 ] -Allocated zp[1]:93 [ mulf8u_prepared::b#0 ] -Allocated zp[2]:94 [ mulf8u_prepared::return#2 ] -Allocated zp[1]:96 [ mulf8s_prepared::$8 ] -Allocated zp[1]:97 [ mulf8s_prepared::$15 ] -Allocated zp[1]:98 [ mulf8s_prepared::$12 ] -Allocated zp[1]:99 [ mulf8s_prepared::$16 ] -Allocated zp[2]:100 [ mulf8u_prepared::return#0 ] -Allocated zp[2]:102 [ renderBobInit::$0 ] -Allocated zp[2]:104 [ renderBobInit::$4 ] -Allocated zp[2]:106 [ renderBobInit::$5 ] -Allocated zp[2]:108 [ renderBobInit::$1 ] -Allocated zp[1]:110 [ renderBobInit::$3 ] -Allocated zp[1]:111 [ bobCharsetFindOrAddGlyph::return#1 ] -Allocated zp[1]:112 [ prepareBobs::$6 ] -Allocated zp[1]:113 [ shiftProtoBobRight::$1 ] -Allocated zp[1]:114 [ shiftProtoBobRight::$5 ] -Allocated zp[1]:115 [ shiftProtoBobRight::$6 ] -Allocated zp[1]:116 [ mulf_init::$1 ] -Allocated zp[1]:117 [ mulf_init::$4 ] -Allocated zp[1]:118 [ mulf_init::$5 ] +Allocated zp[1]:4 [ main::a#2 main::a#6 main::a#1 ] +Allocated zp[2]:5 [ renderBobCleanupNext#17 renderBobCleanupNext#13 ] +Allocated zp[1]:7 [ main::i#2 main::i#1 ] +Allocated zp[1]:8 [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] +Allocated zp[1]:9 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] +Allocated zp[2]:10 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] +Allocated zp[1]:12 [ renderBobCleanup::i#2 renderBobCleanup::i#1 ] +Allocated zp[2]:13 [ memset::dst#2 memset::dst#1 ] +Allocated zp[1]:15 [ renderBobInit::y#2 renderBobInit::y#1 ] +Allocated zp[1]:16 [ renderBobInit::i#2 renderBobInit::i#1 ] +Allocated zp[1]:17 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Allocated zp[2]:18 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] +Allocated zp[1]:20 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] +Allocated zp[1]:21 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] +Allocated zp[1]:22 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] +Allocated zp[1]:23 [ prepareBobs::cell#2 prepareBobs::cell#1 ] +Allocated zp[2]:24 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] +Allocated zp[2]:26 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] +Allocated zp[1]:28 [ 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]:29 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] +Allocated zp[1]:31 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +Allocated zp[2]:32 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] +Allocated zp[1]:34 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] +Allocated zp[1]:35 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +Allocated zp[1]:36 [ bobCharsetFindOrAddGlyph::found#2 ] +Allocated zp[1]:37 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] +Allocated zp[1]:38 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] +Allocated zp[1]:39 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] +Allocated zp[1]:40 [ shiftProtoBobRight::carry#1 ] +Allocated zp[1]:41 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] +Allocated zp[2]:42 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] +Allocated zp[1]:44 [ mulf_init::c#2 mulf_init::c#1 ] +Allocated zp[2]:45 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Allocated zp[1]:47 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Allocated zp[2]:48 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] +Allocated zp[1]:50 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Allocated zp[2]:51 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] +Allocated zp[1]:53 [ mulf_init::dir#2 mulf_init::dir#4 ] +Allocated zp[2]:54 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] +Allocated zp[2]:56 [ mulf8s::return#2 ] +Allocated zp[2]:58 [ main::$10 ] +Allocated zp[2]:60 [ main::x#0 ] +Allocated zp[2]:62 [ mulf8s::return#3 ] +Allocated zp[2]:64 [ main::$12 ] +Allocated zp[2]:66 [ main::$13 ] +Allocated zp[2]:68 [ main::y#0 ] +Allocated zp[1]:70 [ renderBob::xpos#0 ] +Allocated zp[1]:71 [ renderBob::ypos#0 ] +Allocated zp[1]:72 [ keyboard_key_pressed::return#2 ] +Allocated zp[1]:73 [ main::$19 ] +Allocated zp[1]:74 [ keyboard_key_pressed::return#3 ] +Allocated zp[1]:75 [ main::$21 ] +Allocated zp[1]:76 [ keyboard_matrix_read::return#2 ] +Allocated zp[1]:77 [ keyboard_key_pressed::$2 ] +Allocated zp[1]:78 [ keyboard_key_pressed::return#0 ] +Allocated zp[1]:79 [ keyboard_matrix_read::return#0 ] +Allocated zp[1]:80 [ renderBob::x_char_offset#0 ] +Allocated zp[1]:81 [ renderBob::y_char_offset#0 ] +Allocated zp[1]:82 [ renderBob::$8 ] +Allocated zp[2]:83 [ renderBob::y_offset#0 ] +Allocated zp[2]:85 [ renderBob::$2 ] +Allocated zp[2]:87 [ renderBob::screen#0 ] +Allocated zp[1]:89 [ renderBob::$4 ] +Allocated zp[1]:90 [ renderBob::$5 ] +Allocated zp[1]:91 [ renderBob::$6 ] +Allocated zp[1]:92 [ renderBob::bob_table_idx#0 ] +Allocated zp[1]:93 [ mulf8u_prepare::a#0 ] +Allocated zp[1]:94 [ mulf8s_prepared::b#0 ] +Allocated zp[2]:95 [ mulf8s::return#0 ] +Allocated zp[1]:97 [ mulf8u_prepared::b#0 ] +Allocated zp[2]:98 [ mulf8u_prepared::return#2 ] +Allocated zp[1]:100 [ mulf8s_prepared::$8 ] +Allocated zp[1]:101 [ mulf8s_prepared::$15 ] +Allocated zp[1]:102 [ mulf8s_prepared::$12 ] +Allocated zp[1]:103 [ mulf8s_prepared::$16 ] +Allocated zp[2]:104 [ mulf8u_prepared::return#0 ] +Allocated zp[1]:106 [ renderBobCleanup::$1 ] +Allocated zp[2]:107 [ renderBobCleanup::screen#0 ] +Allocated zp[2]:109 [ renderBobInit::$0 ] +Allocated zp[2]:111 [ renderBobInit::$6 ] +Allocated zp[2]:113 [ renderBobInit::$7 ] +Allocated zp[2]:115 [ renderBobInit::$1 ] +Allocated zp[1]:117 [ renderBobInit::$4 ] +Allocated zp[1]:118 [ renderBobInit::$5 ] +Allocated zp[1]:119 [ bobCharsetFindOrAddGlyph::return#1 ] +Allocated zp[1]:120 [ prepareBobs::$6 ] +Allocated zp[1]:121 [ shiftProtoBobRight::$1 ] +Allocated zp[1]:122 [ shiftProtoBobRight::$5 ] +Allocated zp[1]:123 [ shiftProtoBobRight::$6 ] +Allocated zp[1]:124 [ mulf_init::$1 ] +Allocated zp[1]:125 [ mulf_init::$4 ] +Allocated zp[1]:126 [ mulf_init::$5 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -4694,13 +5093,19 @@ Target platform is c64basic / MOS6502X .const BOB_SHIFTS_Y = 8 // The size of a sub-table of BOB_TABLES .const BOB_SUBTABLE_SIZE = BOB_SHIFTS_X*BOB_SHIFTS_Y + // The number of BOBs to render + .const NUM_BOBS = $14 + .const SIZEOF_POINTER = 2 .label COS = SIN+$40 // BOB charset ID of the next glyph to be added - .label bob_charset_next_id = $18 + .label bob_charset_next_id = $1c // Current index within the progress cursor (0-7) - .label progress_idx = $10 + .label progress_idx = $14 // Current position of the progress cursor - .label progress_cursor = $e + .label progress_cursor = $12 + // Pointer to the next clean-up to add + // Prepare for next clean-up + .label renderBobCleanupNext = 5 // @begin __bbegin: jmp __b1 @@ -4731,20 +5136,20 @@ main: { .const vicSelectGfxBank2_toDd001_return = 3 .const toD0181_return = (>(BOB_SCREEN&$3fff)*4)|(>BOB_CHARSET)/4&$f .const toD0182_return = (>(SCREEN_BASIC&$3fff)*4)|(>CHARSET_BASIC)/4&$f - .label __9 = $36 - .label __11 = $3c - .label __12 = $3e - .label __18 = $45 - .label __20 = $47 - .label x = $38 - .label y = $40 + .label __10 = $3a + .label __12 = $40 + .label __13 = $42 + .label __19 = $49 + .label __21 = $4b + .label x = $3c + .label y = $44 .label a = 4 .label r = 3 - .label i = 5 + .label i = 7 // Render Rotated BOBs .label angle = 2 // [6] call mulf_init - // [219] phi from main to mulf_init [phi:main->mulf_init] + // [244] phi from main to mulf_init [phi:main->mulf_init] mulf_init_from_main: jsr mulf_init // [7] phi from main to main::@9 [phi:main->main::@9] @@ -4753,7 +5158,7 @@ main: { // main::@9 __b9: // [8] call prepareBobs - // [135] phi from main::@9 to prepareBobs [phi:main::@9->prepareBobs] + // [160] phi from main::@9 to prepareBobs [phi:main::@9->prepareBobs] prepareBobs_from___b9: jsr prepareBobs // [9] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -4762,7 +5167,7 @@ main: { // main::@10 __b10: // [10] call renderBobInit - // [124] phi from main::@10 to renderBobInit [phi:main::@10->renderBobInit] + // [144] phi from main::@10 to renderBobInit [phi:main::@10->renderBobInit] renderBobInit_from___b10: jsr renderBobInit jmp vicSelectGfxBank1 @@ -4794,12 +5199,12 @@ main: { lda #toD0181_return sta D018 // [16] call memset - // [118] phi from main::@7 to memset [phi:main::@7->memset] + // [138] phi from main::@7 to memset [phi:main::@7->memset] memset_from___b7: jsr memset // [17] phi from main::@7 to main::@1 [phi:main::@7->main::@1] __b1_from___b7: - // [17] phi (byte) main::angle#6 = (byte) 0 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 + // [17] phi (byte) main::angle#8 = (byte) 0 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z angle jmp __b1 @@ -4815,196 +5220,212 @@ main: { jmp __b3 // main::@3 __b3: - // [19] (byte) main::a#7 ← (byte) main::angle#6 -- vbuz1=vbuz2 + // [19] *((const byte*) BORDERCOL) ← (byte) $f -- _deref_pbuc1=vbuc2 + lda #$f + sta BORDERCOL + // [20] call renderBobCleanup + // [122] phi from main::@3 to renderBobCleanup [phi:main::@3->renderBobCleanup] + renderBobCleanup_from___b3: + jsr renderBobCleanup + jmp __b11 + // main::@11 + __b11: + // [21] (byte) main::a#6 ← (byte) main::angle#8 -- vbuz1=vbuz2 lda.z angle sta.z a - // [20] phi from main::@3 to main::@4 [phi:main::@3->main::@4] - __b4_from___b3: - // [20] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@4#0] -- vbuz1=vbuc1 + // [22] phi from main::@11 to main::@4 [phi:main::@11->main::@4] + __b4_from___b11: + // [22] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@4#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [20] phi (byte) main::a#2 = (byte) main::a#7 [phi:main::@3->main::@4#1] -- register_copy - // [20] phi (signed byte) main::r#2 = (signed byte) $1e [phi:main::@3->main::@4#2] -- vbsz1=vbsc1 + // [22] phi (byte**) renderBobCleanupNext#17 = (const byte**) RENDERBOB_CLEANUP [phi:main::@11->main::@4#1] -- pptz1=pptc1 + lda #RENDERBOB_CLEANUP + sta.z renderBobCleanupNext+1 + // [22] phi (byte) main::a#2 = (byte) main::a#6 [phi:main::@11->main::@4#2] -- register_copy + // [22] phi (signed byte) main::r#2 = (signed byte) $1e [phi:main::@11->main::@4#3] -- vbsz1=vbsc1 lda #$1e sta.z r jmp __b4 - // [20] phi from main::@13 to main::@4 [phi:main::@13->main::@4] - __b4_from___b13: - // [20] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@13->main::@4#0] -- register_copy - // [20] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@13->main::@4#1] -- register_copy - // [20] phi (signed byte) main::r#2 = (signed byte) main::r#1 [phi:main::@13->main::@4#2] -- register_copy + // [22] phi from main::@14 to main::@4 [phi:main::@14->main::@4] + __b4_from___b14: + // [22] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@14->main::@4#0] -- register_copy + // [22] phi (byte**) renderBobCleanupNext#17 = (byte**) renderBobCleanupNext#13 [phi:main::@14->main::@4#1] -- register_copy + // [22] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@14->main::@4#2] -- register_copy + // [22] phi (signed byte) main::r#2 = (signed byte) main::r#1 [phi:main::@14->main::@4#3] -- register_copy jmp __b4 // main::@4 __b4: - // [21] *((const byte*) BORDERCOL) ← (byte) 1 -- _deref_pbuc1=vbuc2 + // [23] *((const byte*) BORDERCOL) ← (byte) 1 -- _deref_pbuc1=vbuc2 //kickasm {{ .break }} lda #1 sta BORDERCOL - // [22] (signed byte) mulf8s::a#0 ← (signed byte) main::r#2 -- vbsz1=vbsz2 + // [24] (signed byte) mulf8s::a#0 ← (signed byte) main::r#2 -- vbsz1=vbsz2 lda.z r sta.z mulf8s.a - // [23] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) main::a#2) -- vbsz1=pbsc1_derefidx_vbuz2 + // [25] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) main::a#2) -- vbsz1=pbsc1_derefidx_vbuz2 ldy.z a lda COS,y sta.z mulf8s.b - // [24] call mulf8s - // [89] phi from main::@4 to mulf8s [phi:main::@4->mulf8s] + // [26] call mulf8s + // [93] phi from main::@4 to mulf8s [phi:main::@4->mulf8s] mulf8s_from___b4: - // [89] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#0 [phi:main::@4->mulf8s#0] -- register_copy - // [89] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#0 [phi:main::@4->mulf8s#1] -- register_copy + // [93] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#0 [phi:main::@4->mulf8s#0] -- register_copy + // [93] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#0 [phi:main::@4->mulf8s#1] -- register_copy jsr mulf8s - // [25] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 -- vwsz1=vwsz2 + // [27] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 -- vwsz1=vwsz2 lda.z mulf8s.return sta.z mulf8s.return_1 lda.z mulf8s.return+1 sta.z mulf8s.return_1+1 - jmp __b11 - // main::@11 - __b11: - // [26] (signed word~) main::$9 ← (signed word) mulf8s::return#2 -- vwsz1=vwsz2 + jmp __b12 + // main::@12 + __b12: + // [28] (signed word~) main::$10 ← (signed word) mulf8s::return#2 -- vwsz1=vwsz2 lda.z mulf8s.return_1 - sta.z __9 + sta.z __10 lda.z mulf8s.return_1+1 - sta.z __9+1 - // [27] (signed word) main::x#0 ← (signed word~) main::$9 + (signed word)(number) $4b*(number) $100 -- vwsz1=vwsz2_plus_vwsc1 - lda.z __9 + sta.z __10+1 + // [29] (signed word) main::x#0 ← (signed word~) main::$10 + (signed word)(number) $4b*(number) $100 -- vwsz1=vwsz2_plus_vwsc1 + lda.z __10 clc adc #<$4b*$100 sta.z x - lda.z __9+1 + lda.z __10+1 adc #>$4b*$100 sta.z x+1 - // [28] (signed byte) mulf8s::a#1 ← (signed byte) main::r#2 -- vbsz1=vbsz2 + // [30] (signed byte) mulf8s::a#1 ← (signed byte) main::r#2 -- vbsz1=vbsz2 lda.z r sta.z mulf8s.a - // [29] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#2) -- vbsz1=pbsc1_derefidx_vbuz2 + // [31] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#2) -- vbsz1=pbsc1_derefidx_vbuz2 ldy.z a lda SIN,y sta.z mulf8s.b - // [30] call mulf8s - // [89] phi from main::@11 to mulf8s [phi:main::@11->mulf8s] - mulf8s_from___b11: - // [89] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#1 [phi:main::@11->mulf8s#0] -- register_copy - // [89] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#1 [phi:main::@11->mulf8s#1] -- register_copy + // [32] call mulf8s + // [93] phi from main::@12 to mulf8s [phi:main::@12->mulf8s] + mulf8s_from___b12: + // [93] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#1 [phi:main::@12->mulf8s#0] -- register_copy + // [93] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#1 [phi:main::@12->mulf8s#1] -- register_copy jsr mulf8s - // [31] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 -- vwsz1=vwsz2 + // [33] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 -- vwsz1=vwsz2 lda.z mulf8s.return sta.z mulf8s.return_2 lda.z mulf8s.return+1 sta.z mulf8s.return_2+1 - jmp __b12 - // main::@12 - __b12: - // [32] (signed word~) main::$11 ← (signed word) mulf8s::return#3 -- vwsz1=vwsz2 - lda.z mulf8s.return_2 - sta.z __11 - lda.z mulf8s.return_2+1 - sta.z __11+1 - // [33] (signed word~) main::$12 ← (signed word~) main::$11 << (byte) 1 -- vwsz1=vwsz2_rol_1 - lda.z __11 - asl - sta.z __12 - lda.z __11+1 - rol - sta.z __12+1 - // [34] (signed word) main::y#0 ← (signed word~) main::$12 + (signed word)(number) $5a*(number) $100 -- vwsz1=vwsz2_plus_vwsc1 - lda.z __12 - clc - adc #<$5a*$100 - sta.z y - lda.z __12+1 - adc #>$5a*$100 - sta.z y+1 - // [35] *((const byte*) BORDERCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta BORDERCOL - // [36] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 -- vbuz1=vbuz1_plus_vbuc1 - lax.z a - axs #-[$62] - stx.z a - // [37] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 -- vbsz1=vbsz1_plus_vbsc1 - lax.z r - axs #-[3] - stx.z r - // [38] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 -- vbuz1=_hi_vwsz2 - lda.z x+1 - sta.z renderBob.xpos - // [39] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 -- vbuz1=_hi_vwsz2 - lda.z y+1 - sta.z renderBob.ypos - // [40] call renderBob - jsr renderBob jmp __b13 // main::@13 __b13: - // [41] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [42] if((byte) main::i#1!=(byte) $1a) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 - lda #$1a - cmp.z i - bne __b4_from___b13 - jmp __b5 - // main::@5 - __b5: - // [43] (byte) main::angle#1 ← (byte) main::angle#6 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 - lax.z angle - axs #-[3] - stx.z angle - // [44] *((const byte*) BORDERCOL) ← (byte) 0 -- _deref_pbuc1=vbuc2 - lda #0 + // [34] (signed word~) main::$12 ← (signed word) mulf8s::return#3 -- vwsz1=vwsz2 + lda.z mulf8s.return_2 + sta.z __12 + lda.z mulf8s.return_2+1 + sta.z __12+1 + // [35] (signed word~) main::$13 ← (signed word~) main::$12 << (byte) 1 -- vwsz1=vwsz2_rol_1 + lda.z __12 + asl + sta.z __13 + lda.z __12+1 + rol + sta.z __13+1 + // [36] (signed word) main::y#0 ← (signed word~) main::$13 + (signed word)(number) $5a*(number) $100 -- vwsz1=vwsz2_plus_vwsc1 + lda.z __13 + clc + adc #<$5a*$100 + sta.z y + lda.z __13+1 + adc #>$5a*$100 + sta.z y+1 + // [37] *((const byte*) BORDERCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 + lda #2 sta BORDERCOL - // [45] call keyboard_key_pressed - // [60] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] - keyboard_key_pressed_from___b5: - jsr keyboard_key_pressed - // [46] (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 + // [38] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 -- vbuz1=vbuz1_plus_vbuc1 + lax.z a + axs #-[$62] + stx.z a + // [39] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 -- vbsz1=vbsz1_plus_vbsc1 + lax.z r + axs #-[3] + stx.z r + // [40] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 -- vbuz1=_hi_vwsz2 + lda.z x+1 + sta.z renderBob.xpos + // [41] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 -- vbuz1=_hi_vwsz2 + lda.z y+1 + sta.z renderBob.ypos + // [42] call renderBob + jsr renderBob jmp __b14 // main::@14 __b14: - // [47] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#2 -- vbuz1=vbuz2 - lda.z keyboard_key_pressed.return_1 - sta.z __18 - // [48] if((byte) 0!=(byte~) main::$18) goto main::@6 -- vbuc1_neq_vbuz1_then_la1 + // [43] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [44] if((byte) main::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 + lda #NUM_BOBS-1+1 + cmp.z i + bne __b4_from___b14 + jmp __b5 + // main::@5 + __b5: + // [45] (byte) main::angle#1 ← (byte) main::angle#8 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + lax.z angle + axs #-[3] + stx.z angle + // [46] *((const byte*) BORDERCOL) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 - cmp.z __18 - bne __b6_from___b14 - // [17] phi from main::@14 to main::@1 [phi:main::@14->main::@1] - __b1_from___b14: - // [17] phi (byte) main::angle#6 = (byte) main::angle#1 [phi:main::@14->main::@1#0] -- register_copy - jmp __b1 - // Wait for space release - // [49] phi from main::@14 main::@15 to main::@6 [phi:main::@14/main::@15->main::@6] - __b6_from___b14: - __b6_from___b15: - jmp __b6 - // main::@6 - __b6: - // [50] call keyboard_key_pressed - // [60] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed] - keyboard_key_pressed_from___b6: + sta BORDERCOL + // [47] call keyboard_key_pressed + // [62] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] + keyboard_key_pressed_from___b5: jsr keyboard_key_pressed - // [51] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 + // [48] (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_2 + sta.z keyboard_key_pressed.return_1 jmp __b15 // main::@15 __b15: - // [52] (byte~) main::$20 ← (byte) keyboard_key_pressed::return#3 -- vbuz1=vbuz2 - lda.z keyboard_key_pressed.return_2 - sta.z __20 - // [53] if((byte) 0!=(byte~) main::$20) goto main::@6 -- vbuc1_neq_vbuz1_then_la1 + // [49] (byte~) main::$19 ← (byte) keyboard_key_pressed::return#2 -- vbuz1=vbuz2 + lda.z keyboard_key_pressed.return_1 + sta.z __19 + // [50] if((byte) 0!=(byte~) main::$19) goto main::@6 -- vbuc1_neq_vbuz1_then_la1 lda #0 - cmp.z __20 + cmp.z __19 bne __b6_from___b15 + // [17] phi from main::@15 to main::@1 [phi:main::@15->main::@1] + __b1_from___b15: + // [17] phi (byte) main::angle#8 = (byte) main::angle#1 [phi:main::@15->main::@1#0] -- register_copy + jmp __b1 + // Wait for space release + // [51] phi from main::@15 main::@16 to main::@6 [phi:main::@15/main::@16->main::@6] + __b6_from___b15: + __b6_from___b16: + jmp __b6 + // main::@6 + __b6: + // [52] call keyboard_key_pressed + // [62] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed] + keyboard_key_pressed_from___b6: + jsr keyboard_key_pressed + // [53] (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 __b16 + // main::@16 + __b16: + // [54] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#3 -- vbuz1=vbuz2 + lda.z keyboard_key_pressed.return_2 + sta.z __21 + // [55] if((byte) 0!=(byte~) main::$21) goto main::@6 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp.z __21 + bne __b6_from___b16 jmp vicSelectGfxBank2 // main::vicSelectGfxBank2 vicSelectGfxBank2: - // [54] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [56] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 sta CIA2_PORT_A_DDR - // [55] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001] + // [57] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001] vicSelectGfxBank2_toDd001_from_vicSelectGfxBank2: jmp vicSelectGfxBank2_toDd001 // main::vicSelectGfxBank2_toDd001 @@ -5012,10 +5433,10 @@ main: { jmp vicSelectGfxBank2___b1 // main::vicSelectGfxBank2_@1 vicSelectGfxBank2___b1: - // [56] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [58] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank2_toDd001_return sta CIA2_PORT_A - // [57] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] + // [59] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] toD0182_from_vicSelectGfxBank2___b1: jmp toD0182 // main::toD0182 @@ -5023,13 +5444,13 @@ main: { jmp __b8 // main::@8 __b8: - // [58] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 + // [60] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 lda #toD0182_return sta D018 jmp __breturn // main::@return __breturn: - // [59] return + // [61] return rts } // keyboard_key_pressed @@ -5040,29 +5461,29 @@ main: { keyboard_key_pressed: { .const colidx = KEY_SPACE&7 .label rowidx = KEY_SPACE>>3 - .label __2 = $49 - .label return = $4a - .label return_1 = $44 - .label return_2 = $46 - // [61] call keyboard_matrix_read + .label __2 = $4d + .label return = $4e + .label return_1 = $48 + .label return_2 = $4a + // [63] call keyboard_matrix_read jsr keyboard_matrix_read - // [62] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 -- vbuz1=vbuz2 + // [64] (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: - // [63] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuz2 + // [65] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuz2 lda.z keyboard_matrix_read.return_1 sta.z __2 - // [64] (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 + // [66] (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: - // [65] return + // [67] return rts } // keyboard_matrix_read @@ -5072,62 +5493,61 @@ keyboard_key_pressed: { // 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 = $4b - .label return_1 = $48 - // [66] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + .label return = $4f + .label return_1 = $4c + // [68] *((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 - // [67] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 + // [69] (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: - // [68] return + // [70] 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($42) xpos, byte zeropage($43) ypos) +// renderBob(byte zeropage($46) xpos, byte zeropage($47) ypos) renderBob: { - .label __2 = $51 - .label __4 = $55 - .label __5 = $56 - .label __6 = $57 - .label __8 = $4e - .label xpos = $42 - .label ypos = $43 - .label x_char_offset = $4c - .label y_char_offset = $4d - .label y_offset = $4f - .label screen = $53 - .label bob_table_idx = $58 - // [69] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 -- vbuz1=vbuz2_ror_2 + .label __2 = $55 + .label __4 = $59 + .label __5 = $5a + .label __6 = $5b + .label __8 = $52 + .label xpos = $46 + .label ypos = $47 + .label x_char_offset = $50 + .label y_char_offset = $51 + .label y_offset = $53 + .label screen = $57 + .label bob_table_idx = $5c + // [71] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 -- vbuz1=vbuz2_ror_2 lda.z xpos lsr lsr sta.z x_char_offset - // [70] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 -- vbuz1=vbuz2_ror_3 + // [72] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 -- vbuz1=vbuz2_ror_3 lda.z ypos lsr lsr lsr sta.z y_char_offset - // [71] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [73] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z y_char_offset asl sta.z __8 - // [72] (word) renderBob::y_offset#0 ← *((const word*) RENDERBOB_YOFFSET + (byte~) renderBob::$8) -- vwuz1=pwuc1_derefidx_vbuz2 - //unsigned int y_offset = (unsigned int)y_char_offset*40; + // [74] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8) -- vwuz1=pwuc1_derefidx_vbuz2 ldy.z __8 - lda RENDERBOB_YOFFSET,y + lda MUL40,y sta.z y_offset - lda RENDERBOB_YOFFSET+1,y + lda MUL40+1,y sta.z y_offset+1 - // [73] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [75] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z y_offset clc adc #BOB_SCREEN sta.z __2+1 - // [74] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz2_plus_vbuz3 + // [76] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz2_plus_vbuz3 lda.z x_char_offset clc adc.z __2 @@ -5143,65 +5563,80 @@ renderBob: { lda #0 adc.z __2+1 sta.z screen+1 - // [75] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + // [77] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 lda #7 and.z ypos sta.z __4 - // [76] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [78] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda.z __4 asl asl sta.z __5 - // [77] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 -- vbuz1=vbuz2_band_vbuc1 + // [79] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 -- vbuz1=vbuz2_band_vbuc1 lda #3 and.z xpos sta.z __6 - // [78] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 -- vbuz1=vbuz2_plus_vbuz3 + // [80] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 -- vbuz1=vbuz2_plus_vbuz3 lda.z __5 clc adc.z __6 sta.z bob_table_idx - // [79] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [81] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0 -- _deref_pptz1=pbuz2 + ldy #0 + lda.z screen + sta (renderBobCleanupNext),y + iny + lda.z screen+1 + sta (renderBobCleanupNext),y + // [82] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER -- pptz1=pptz1_plus_vbuc1 + lda #SIZEOF_POINTER + clc + adc.z renderBobCleanupNext + sta.z renderBobCleanupNext + bcc !+ + inc.z renderBobCleanupNext+1 + !: + // [83] *((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 - // [80] *((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 + // [84] *((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 - // [81] *((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 + // [85] *((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 - // [82] *((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 + // [86] *((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 - // [83] *((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 + // [87] *((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 - // [84] *((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 + // [88] *((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 - // [85] *((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 + // [89] *((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 - // [86] *((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 + // [90] *((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 - // [87] *((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 + // [91] *((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 @@ -5209,39 +5644,39 @@ renderBob: { jmp __breturn // renderBob::@return __breturn: - // [88] return + // [92] return rts } // mulf8s // Fast multiply two signed bytes to a word result -// mulf8s(signed byte zeropage(6) a, signed byte zeropage(7) b) +// mulf8s(signed byte zeropage(8) a, signed byte zeropage(9) b) mulf8s: { - .label mulf8s_prepare1_a = 6 - .label return = $5b - .label a = 6 - .label b = 7 - .label return_1 = $34 - .label return_2 = $3a + .label mulf8s_prepare1_a = 8 + .label return = $5f + .label a = 8 + .label b = 9 + .label return_1 = $38 + .label return_2 = $3e jmp mulf8s_prepare1 // mulf8s::mulf8s_prepare1 mulf8s_prepare1: - // [90] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 -- vbuz1=vbuz2 + // [94] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 -- vbuz1=vbuz2 lda.z mulf8s_prepare1_a sta.z mulf8u_prepare.a - // [91] call mulf8u_prepare + // [95] call mulf8u_prepare jsr mulf8u_prepare jmp __b1 // mulf8s::@1 __b1: - // [92] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 -- vbsz1=vbsz2 + // [96] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 -- vbsz1=vbsz2 lda.z b sta.z mulf8s_prepared.b - // [93] call mulf8s_prepared + // [97] call mulf8s_prepared jsr mulf8s_prepared jmp __b2 // mulf8s::@2 __b2: - // [94] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 -- vwsz1=vwsz2 + // [98] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 -- vwsz1=vwsz2 lda.z mulf8s_prepared.m sta.z return lda.z mulf8s_prepared.m+1 @@ -5249,27 +5684,27 @@ mulf8s: { jmp __breturn // mulf8s::@return __breturn: - // [95] return + // [99] return rts } // mulf8s_prepared // Calculate fast multiply with a prepared unsigned byte to a word result // The prepared number is set by calling mulf8s_prepare(byte a) -// mulf8s_prepared(signed byte zeropage($5a) b) +// mulf8s_prepared(signed byte zeropage($5e) b) mulf8s_prepared: { .label memA = $fd - .label __8 = $60 - .label __12 = $62 - .label __15 = $61 - .label __16 = $63 - .label m = 8 - .label b = $5a - // [96] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuz1=vbuz2 + .label __8 = $64 + .label __12 = $66 + .label __15 = $65 + .label __16 = $67 + .label m = $a + .label b = $5e + // [100] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuz1=vbuz2 lda.z b sta.z mulf8u_prepared.b - // [97] call mulf8u_prepared + // [101] call mulf8u_prepared jsr mulf8u_prepared - // [98] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 -- vwuz1=vwuz2 + // [102] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 -- vwuz1=vwuz2 lda.z mulf8u_prepared.return sta.z mulf8u_prepared.return_1 lda.z mulf8u_prepared.return+1 @@ -5277,78 +5712,78 @@ mulf8s_prepared: { jmp __b5 // mulf8s_prepared::@5 __b5: - // [99] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 -- vwuz1=vwuz2 + // [103] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 -- vwuz1=vwuz2 lda.z mulf8u_prepared.return_1 sta.z m lda.z mulf8u_prepared.return_1+1 sta.z m+1 - // [100] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 + // [104] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 lda memA cmp #0 bpl __b1_from___b5 jmp __b3 // mulf8s_prepared::@3 __b3: - // [101] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuz1=_hi_vwuz2 + // [105] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuz1=_hi_vwuz2 lda.z m+1 sta.z __8 - // [102] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuz1=vbuz2_minus_vbuz3 + // [106] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuz1=vbuz2_minus_vbuz3 lda.z __8 sec sbc.z b sta.z __15 - // [103] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuz2 + // [107] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuz2 lda.z __15 sta.z m+1 - // [104] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] + // [108] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] __b1_from___b3: __b1_from___b5: - // [104] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy + // [108] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy jmp __b1 // mulf8s_prepared::@1 __b1: - // [105] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 + // [109] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 lda.z b cmp #0 bpl __b2_from___b1 jmp __b4 // mulf8s_prepared::@4 __b4: - // [106] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuz1=_hi_vwuz2 + // [110] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuz1=_hi_vwuz2 lda.z m+1 sta.z __12 - // [107] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuz1=vbuz2_minus__deref_pbuc1 + // [111] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuz1=vbuz2_minus__deref_pbuc1 lda.z __12 sec sbc memA sta.z __16 - // [108] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuz2 + // [112] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuz2 lda.z __16 sta.z m+1 - // [109] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] + // [113] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] __b2_from___b1: __b2_from___b4: - // [109] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy + // [113] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy jmp __b2 // mulf8s_prepared::@2 __b2: jmp __breturn // mulf8s_prepared::@return __breturn: - // [110] return + // [114] return rts } // mulf8u_prepared // Calculate fast multiply with a prepared unsigned byte to a word result // The prepared number is set by calling mulf8u_prepare(byte a) -// mulf8u_prepared(byte zeropage($5d) b) +// mulf8u_prepared(byte zeropage($61) b) mulf8u_prepared: { .label resL = $fe .label memB = $ff - .label return = $64 - .label b = $5d - .label return_1 = $5e - // [111] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 -- _deref_pbuc1=vbuz1 + .label return = $68 + .label b = $61 + .label return_1 = $62 + // [115] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 -- _deref_pbuc1=vbuz1 lda.z b sta memB // asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } @@ -5364,7 +5799,7 @@ mulf8u_prepared: { sm4: sbc mulf_sqr2_hi,x sta memB - // [113] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + // [117] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda resL sta.z return lda memB @@ -5372,16 +5807,16 @@ mulf8u_prepared: { jmp __breturn // mulf8u_prepared::@return __breturn: - // [114] return + // [118] return rts } // mulf8u_prepare // Prepare for fast multiply with an unsigned byte to a word result -// mulf8u_prepare(byte zeropage($59) a) +// mulf8u_prepare(byte zeropage($5d) a) mulf8u_prepare: { .label memA = $fd - .label a = $59 - // [115] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 -- _deref_pbuc1=vbuz1 + .label a = $5d + // [119] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 -- _deref_pbuc1=vbuz1 lda.z a sta memA // asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } @@ -5394,7 +5829,83 @@ mulf8u_prepare: { jmp __breturn // mulf8u_prepare::@return __breturn: - // [117] return + // [121] return + rts +} + // renderBobCleanup +// Clean Up the rendered BOB's +renderBobCleanup: { + .label __1 = $6a + .label screen = $6b + .label i = $c + // [123] phi from renderBobCleanup to renderBobCleanup::@1 [phi:renderBobCleanup->renderBobCleanup::@1] + __b1_from_renderBobCleanup: + // [123] phi (byte) renderBobCleanup::i#2 = (byte) 0 [phi:renderBobCleanup->renderBobCleanup::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp __b1 + // [123] phi from renderBobCleanup::@1 to renderBobCleanup::@1 [phi:renderBobCleanup::@1->renderBobCleanup::@1] + __b1_from___b1: + // [123] phi (byte) renderBobCleanup::i#2 = (byte) renderBobCleanup::i#1 [phi:renderBobCleanup::@1->renderBobCleanup::@1#0] -- register_copy + jmp __b1 + // renderBobCleanup::@1 + __b1: + // [124] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z i + asl + sta.z __1 + // [125] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1) -- pbuz1=pptc1_derefidx_vbuz2 + ldy.z __1 + lda RENDERBOB_CLEANUP,y + sta.z screen + lda RENDERBOB_CLEANUP+1,y + sta.z screen+1 + // [126] *((byte*) renderBobCleanup::screen#0) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (screen),y + // [127] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #$28 + sta (screen),y + // [128] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #$50 + sta (screen),y + // [129] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #1 + sta (screen),y + // [130] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #$29 + sta (screen),y + // [131] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #$51 + sta (screen),y + // [132] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #2 + sta (screen),y + // [133] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #$2a + sta (screen),y + // [134] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #$52 + sta (screen),y + // [135] (byte) renderBobCleanup::i#1 ← ++ (byte) renderBobCleanup::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [136] if((byte) renderBobCleanup::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobCleanup::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #NUM_BOBS-1+1 + cmp.z i + bne __b1_from___b1 + jmp __breturn + // renderBobCleanup::@return + __breturn: + // [137] return rts } // memset @@ -5404,10 +5915,10 @@ memset: { .const c = 0 .const num = $3e8 .label end = str+num - .label dst = $a - // [119] phi from memset to memset::@1 [phi:memset->memset::@1] + .label dst = $d + // [139] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [119] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [139] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -5415,7 +5926,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [120] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [140] 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 @@ -5425,203 +5936,233 @@ memset: { jmp __breturn // memset::@return __breturn: - // [121] return + // [141] return rts // memset::@2 __b2: - // [122] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [123] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [143] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [119] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [139] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [119] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [139] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // renderBobInit // Initialize the tables used by renderBob() renderBobInit: { - .label __0 = $66 - .label __1 = $6c - .label __3 = $6e - .label y = $c - .label __4 = $68 - .label __5 = $6a - // [125] phi from renderBobInit to renderBobInit::@1 [phi:renderBobInit->renderBobInit::@1] + .label __0 = $6d + .label __1 = $73 + .label __4 = $75 + .label __5 = $76 + .label y = $f + .label i = $10 + .label __6 = $6f + .label __7 = $71 + // [145] phi from renderBobInit to renderBobInit::@1 [phi:renderBobInit->renderBobInit::@1] __b1_from_renderBobInit: - // [125] phi (byte) renderBobInit::y#2 = (byte) 0 [phi:renderBobInit->renderBobInit::@1#0] -- vbuz1=vbuc1 + // [145] phi (byte) renderBobInit::y#2 = (byte) 0 [phi:renderBobInit->renderBobInit::@1#0] -- vbuz1=vbuc1 lda #0 sta.z y jmp __b1 - // [125] phi from renderBobInit::@1 to renderBobInit::@1 [phi:renderBobInit::@1->renderBobInit::@1] + // [145] phi from renderBobInit::@1 to renderBobInit::@1 [phi:renderBobInit::@1->renderBobInit::@1] __b1_from___b1: - // [125] phi (byte) renderBobInit::y#2 = (byte) renderBobInit::y#1 [phi:renderBobInit::@1->renderBobInit::@1#0] -- register_copy + // [145] phi (byte) renderBobInit::y#2 = (byte) renderBobInit::y#1 [phi:renderBobInit::@1->renderBobInit::@1#0] -- register_copy jmp __b1 // renderBobInit::@1 __b1: - // [126] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 -- vwuz1=_word_vbuz2 + // [146] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 -- vwuz1=_word_vbuz2 lda.z y sta.z __0 lda #0 sta.z __0+1 - // [127] (word~) renderBobInit::$4 ← (word~) renderBobInit::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 + // [147] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 lda.z __0 asl - sta.z __4 + sta.z __6 lda.z __0+1 rol - sta.z __4+1 - asl.z __4 - rol.z __4+1 - // [128] (word~) renderBobInit::$5 ← (word~) renderBobInit::$4 + (word~) renderBobInit::$0 -- vwuz1=vwuz2_plus_vwuz3 - lda.z __4 + sta.z __6+1 + asl.z __6 + rol.z __6+1 + // [148] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0 -- vwuz1=vwuz2_plus_vwuz3 + lda.z __6 clc adc.z __0 - sta.z __5 - lda.z __4+1 + sta.z __7 + lda.z __6+1 adc.z __0+1 - sta.z __5+1 - // [129] (word~) renderBobInit::$1 ← (word~) renderBobInit::$5 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z __5 + sta.z __7+1 + // [149] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (byte) 3 -- vwuz1=vwuz2_rol_3 + lda.z __7 asl sta.z __1 - lda.z __5+1 + lda.z __7+1 rol sta.z __1+1 asl.z __1 rol.z __1+1 asl.z __1 rol.z __1+1 - // [130] (byte~) renderBobInit::$3 ← (byte) renderBobInit::y#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [150] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z y asl - sta.z __3 - // [131] *((const word*) RENDERBOB_YOFFSET + (byte~) renderBobInit::$3) ← (word~) renderBobInit::$1 -- pwuc1_derefidx_vbuz1=vwuz2 - ldy.z __3 + sta.z __4 + // [151] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1 -- pwuc1_derefidx_vbuz1=vwuz2 + ldy.z __4 lda.z __1 - sta RENDERBOB_YOFFSET,y + sta MUL40,y lda.z __1+1 - sta RENDERBOB_YOFFSET+1,y - // [132] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2 -- vbuz1=_inc_vbuz1 + sta MUL40+1,y + // [152] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2 -- vbuz1=_inc_vbuz1 inc.z y - // [133] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1 -- vbuz1_neq_vbuc1_then_la1 + // [153] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$20 cmp.z y bne __b1_from___b1 + // [154] phi from renderBobInit::@1 to renderBobInit::@2 [phi:renderBobInit::@1->renderBobInit::@2] + __b2_from___b1: + // [154] phi (byte) renderBobInit::i#2 = (byte) 0 [phi:renderBobInit::@1->renderBobInit::@2#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp __b2 + // [154] phi from renderBobInit::@2 to renderBobInit::@2 [phi:renderBobInit::@2->renderBobInit::@2] + __b2_from___b2: + // [154] phi (byte) renderBobInit::i#2 = (byte) renderBobInit::i#1 [phi:renderBobInit::@2->renderBobInit::@2#0] -- register_copy + jmp __b2 + // renderBobInit::@2 + __b2: + // [155] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z i + asl + sta.z __5 + // [156] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN -- pptc1_derefidx_vbuz1=pbuc2 + ldy.z __5 + lda #BOB_SCREEN + sta RENDERBOB_CLEANUP+1,y + // [157] (byte) renderBobInit::i#1 ← ++ (byte) renderBobInit::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [158] if((byte) renderBobInit::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobInit::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #NUM_BOBS-1+1 + cmp.z i + bne __b2_from___b2 jmp __breturn // renderBobInit::@return __breturn: - // [134] return + // [159] return rts } // prepareBobs // Creates the pre-shifted bobs into BOB_CHARSET and populates the BOB_TABLES // Modifies PROTO_BOB by shifting it around prepareBobs: { - .label __6 = $70 - .label bob_table = $16 - .label shift_y = $d + .label __6 = $78 + .label bob_table = $1a + .label shift_y = $11 // Populate charset and tables - .label bob_glyph = $14 - .label cell = $13 - .label bob_table_idx = $11 - .label shift_x = $12 - // [136] call progress_init - // [217] phi from prepareBobs to progress_init [phi:prepareBobs->progress_init] + .label bob_glyph = $18 + .label cell = $17 + .label bob_table_idx = $15 + .label shift_x = $16 + // [161] call progress_init + // [242] phi from prepareBobs to progress_init [phi:prepareBobs->progress_init] progress_init_from_prepareBobs: jsr progress_init - // [137] phi from prepareBobs to prepareBobs::@8 [phi:prepareBobs->prepareBobs::@8] + // [162] phi from prepareBobs to prepareBobs::@8 [phi:prepareBobs->prepareBobs::@8] __b8_from_prepareBobs: jmp __b8 // prepareBobs::@8 __b8: - // [138] call bobCharsetFindOrAddGlyph - // [171] phi from prepareBobs::@8 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph] + // [163] call bobCharsetFindOrAddGlyph + // [196] phi from prepareBobs::@8 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph] bobCharsetFindOrAddGlyph_from___b8: - // [171] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph#0] -- pbuz1=pbuc1 + // [196] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph#0] -- pbuz1=pbuc1 lda #PROTO_BOB+$30 sta.z bobCharsetFindOrAddGlyph.bob_glyph+1 - // [171] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph#1] -- vbuz1=vbuc1 + // [196] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph#1] -- vbuz1=vbuc1 lda #0 sta.z bob_charset_next_id jsr bobCharsetFindOrAddGlyph - // [139] phi from prepareBobs::@8 to prepareBobs::@1 [phi:prepareBobs::@8->prepareBobs::@1] + // [164] phi from prepareBobs::@8 to prepareBobs::@1 [phi:prepareBobs::@8->prepareBobs::@1] __b1_from___b8: - // [139] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#0] -- vbuz1=vbuc1 + // [164] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#0] -- vbuz1=vbuc1 lda #0 sta.z bob_table_idx - // [139] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy - // [139] phi (byte) progress_idx#16 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#2] -- vbuz1=vbuc1 + // [164] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy + // [164] phi (byte) progress_idx#16 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#2] -- vbuz1=vbuc1 lda #0 sta.z progress_idx - // [139] phi (byte*) progress_cursor#15 = (const byte*) SCREEN_BASIC [phi:prepareBobs::@8->prepareBobs::@1#3] -- pbuz1=pbuc1 + // [164] phi (byte*) progress_cursor#15 = (const byte*) SCREEN_BASIC [phi:prepareBobs::@8->prepareBobs::@1#3] -- pbuz1=pbuc1 lda #SCREEN_BASIC sta.z progress_cursor+1 - // [139] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#4] -- vbuz1=vbuc1 + // [164] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#4] -- vbuz1=vbuc1 lda #0 sta.z shift_y jmp __b1 // prepareBobs::@1 __b1: - // [140] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 -- vbuz1_lt_vbuc1_then_la1 + // [165] 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: - // [141] return + // [166] return rts - // [142] phi from prepareBobs::@1 to prepareBobs::@2 [phi:prepareBobs::@1->prepareBobs::@2] + // [167] phi from prepareBobs::@1 to prepareBobs::@2 [phi:prepareBobs::@1->prepareBobs::@2] __b2_from___b1: - // [142] phi (byte) progress_idx#31 = (byte) progress_idx#16 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy - // [142] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#15 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy - // [142] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#2] -- register_copy - // [142] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#3] -- register_copy - // [142] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#4] -- vbuz1=vbuc1 + // [167] phi (byte) progress_idx#31 = (byte) progress_idx#16 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy + // [167] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#15 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy + // [167] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#2] -- register_copy + // [167] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#3] -- register_copy + // [167] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#4] -- vbuz1=vbuc1 lda #0 sta.z shift_x jmp __b2 // prepareBobs::@2 __b2: - // [143] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 -- vbuz1_lt_vbuc1_then_la1 + // [168] 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 - // [144] phi from prepareBobs::@2 to prepareBobs::@4 [phi:prepareBobs::@2->prepareBobs::@4] + // [169] phi from prepareBobs::@2 to prepareBobs::@4 [phi:prepareBobs::@2->prepareBobs::@4] __b4_from___b2: jmp __b4 // prepareBobs::@4 __b4: - // [145] call shiftProtoBobDown - // [206] phi from prepareBobs::@4 to shiftProtoBobDown [phi:prepareBobs::@4->shiftProtoBobDown] + // [170] call shiftProtoBobDown + // [231] phi from prepareBobs::@4 to shiftProtoBobDown [phi:prepareBobs::@4->shiftProtoBobDown] shiftProtoBobDown_from___b4: jsr shiftProtoBobDown jmp __b9 // prepareBobs::@9 __b9: - // [146] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 -- vbuz1=_inc_vbuz1 + // [171] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 -- vbuz1=_inc_vbuz1 inc.z shift_y - // [139] phi from prepareBobs::@9 to prepareBobs::@1 [phi:prepareBobs::@9->prepareBobs::@1] + // [164] phi from prepareBobs::@9 to prepareBobs::@1 [phi:prepareBobs::@9->prepareBobs::@1] __b1_from___b9: - // [139] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@9->prepareBobs::@1#0] -- register_copy - // [139] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@9->prepareBobs::@1#1] -- register_copy - // [139] phi (byte) progress_idx#16 = (byte) progress_idx#31 [phi:prepareBobs::@9->prepareBobs::@1#2] -- register_copy - // [139] phi (byte*) progress_cursor#15 = (byte*) progress_cursor#31 [phi:prepareBobs::@9->prepareBobs::@1#3] -- register_copy - // [139] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@9->prepareBobs::@1#4] -- register_copy + // [164] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@9->prepareBobs::@1#0] -- register_copy + // [164] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@9->prepareBobs::@1#1] -- register_copy + // [164] phi (byte) progress_idx#16 = (byte) progress_idx#31 [phi:prepareBobs::@9->prepareBobs::@1#2] -- register_copy + // [164] phi (byte*) progress_cursor#15 = (byte*) progress_cursor#31 [phi:prepareBobs::@9->prepareBobs::@1#3] -- register_copy + // [164] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@9->prepareBobs::@1#4] -- register_copy jmp __b1 // prepareBobs::@3 __b3: - // [147] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 -- pbuz1=pbuc1_plus_vbuz2 + // [172] (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 - // [148] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5] + // [173] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5] __b5_from___b3: - // [148] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#31 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy - // [148] phi (byte) progress_idx#25 = (byte) progress_idx#31 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy - // [148] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#2] -- register_copy - // [148] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@3->prepareBobs::@5#3] -- register_copy - // [148] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#4] -- pbuz1=pbuc1 + // [173] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#31 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy + // [173] phi (byte) progress_idx#25 = (byte) progress_idx#31 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy + // [173] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#2] -- register_copy + // [173] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@3->prepareBobs::@5#3] -- register_copy + // [173] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#4] -- pbuz1=pbuc1 lda #PROTO_BOB sta.z bob_glyph+1 - // [148] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#5] -- vbuz1=vbuc1 + // [173] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#5] -- vbuz1=vbuc1 lda #0 sta.z cell jmp __b5 // prepareBobs::@5 __b5: - // [149] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 -- vbuz1_lt_vbuc1_then_la1 + // [174] 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: - // [150] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 + // [175] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 inc.z bob_table_idx - // [151] call shiftProtoBobRight - // [189] phi from prepareBobs::@7 to shiftProtoBobRight [phi:prepareBobs::@7->shiftProtoBobRight] + // [176] call shiftProtoBobRight + // [214] phi from prepareBobs::@7 to shiftProtoBobRight [phi:prepareBobs::@7->shiftProtoBobRight] shiftProtoBobRight_from___b7: jsr shiftProtoBobRight - // [152] phi from prepareBobs::@7 to prepareBobs::@12 [phi:prepareBobs::@7->prepareBobs::@12] + // [177] phi from prepareBobs::@7 to prepareBobs::@12 [phi:prepareBobs::@7->prepareBobs::@12] __b12_from___b7: jmp __b12 // prepareBobs::@12 __b12: - // [153] call shiftProtoBobRight - // [189] phi from prepareBobs::@12 to shiftProtoBobRight [phi:prepareBobs::@12->shiftProtoBobRight] + // [178] call shiftProtoBobRight + // [214] phi from prepareBobs::@12 to shiftProtoBobRight [phi:prepareBobs::@12->shiftProtoBobRight] shiftProtoBobRight_from___b12: jsr shiftProtoBobRight jmp __b13 // prepareBobs::@13 __b13: - // [154] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 -- vbuz1=_inc_vbuz1 + // [179] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 -- vbuz1=_inc_vbuz1 inc.z shift_x - // [142] phi from prepareBobs::@13 to prepareBobs::@2 [phi:prepareBobs::@13->prepareBobs::@2] + // [167] phi from prepareBobs::@13 to prepareBobs::@2 [phi:prepareBobs::@13->prepareBobs::@2] __b2_from___b13: - // [142] phi (byte) progress_idx#31 = (byte) progress_idx#25 [phi:prepareBobs::@13->prepareBobs::@2#0] -- register_copy - // [142] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#24 [phi:prepareBobs::@13->prepareBobs::@2#1] -- register_copy - // [142] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@13->prepareBobs::@2#2] -- register_copy - // [142] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@13->prepareBobs::@2#3] -- register_copy - // [142] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@13->prepareBobs::@2#4] -- register_copy + // [167] phi (byte) progress_idx#31 = (byte) progress_idx#25 [phi:prepareBobs::@13->prepareBobs::@2#0] -- register_copy + // [167] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#24 [phi:prepareBobs::@13->prepareBobs::@2#1] -- register_copy + // [167] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@13->prepareBobs::@2#2] -- register_copy + // [167] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@13->prepareBobs::@2#3] -- register_copy + // [167] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@13->prepareBobs::@2#4] -- register_copy jmp __b2 // prepareBobs::@6 __b6: - // [155] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 -- pbuz1=pbuz2 + // [180] (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 - // [156] call bobCharsetFindOrAddGlyph - // [171] phi from prepareBobs::@6 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph] + // [181] call bobCharsetFindOrAddGlyph + // [196] phi from prepareBobs::@6 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph] bobCharsetFindOrAddGlyph_from___b6: - // [171] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#0] -- register_copy - // [171] phi (byte) bob_charset_next_id#23 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#1] -- register_copy + // [196] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#0] -- register_copy + // [196] phi (byte) bob_charset_next_id#23 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#1] -- register_copy jsr bobCharsetFindOrAddGlyph - // [157] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=vbuz2 + // [182] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=vbuz2 lda.z bobCharsetFindOrAddGlyph.glyph_id sta.z bobCharsetFindOrAddGlyph.return jmp __b10 // prepareBobs::@10 __b10: - // [158] (byte~) prepareBobs::$6 ← (byte) bobCharsetFindOrAddGlyph::return#1 -- vbuz1=vbuz2 + // [183] (byte~) prepareBobs::$6 ← (byte) bobCharsetFindOrAddGlyph::return#1 -- vbuz1=vbuz2 lda.z bobCharsetFindOrAddGlyph.return sta.z __6 - // [159] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 -- _deref_pbuz1=vbuz2 + // [184] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 -- _deref_pbuz1=vbuz2 // Look for an existing char in BOB_CHARSET lda.z __6 ldy #0 sta (bob_table),y - // [160] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [185] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 // Move to the next glyph lda #8 clc @@ -5717,7 +6258,7 @@ prepareBobs: { bcc !+ inc.z bob_glyph+1 !: - // [161] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y -- pbuz1=pbuz1_plus_vbuc1 + // [186] (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 @@ -5726,60 +6267,60 @@ prepareBobs: { bcc !+ inc.z bob_table+1 !: - // [162] call progress_inc + // [187] call progress_inc jsr progress_inc jmp __b11 // prepareBobs::@11 __b11: - // [163] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 + // [188] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 inc.z cell - // [148] phi from prepareBobs::@11 to prepareBobs::@5 [phi:prepareBobs::@11->prepareBobs::@5] + // [173] phi from prepareBobs::@11 to prepareBobs::@5 [phi:prepareBobs::@11->prepareBobs::@5] __b5_from___b11: - // [148] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#17 [phi:prepareBobs::@11->prepareBobs::@5#0] -- register_copy - // [148] phi (byte) progress_idx#25 = (byte) progress_idx#10 [phi:prepareBobs::@11->prepareBobs::@5#1] -- register_copy - // [148] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@11->prepareBobs::@5#2] -- register_copy - // [148] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@11->prepareBobs::@5#3] -- register_copy - // [148] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@11->prepareBobs::@5#4] -- register_copy - // [148] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@11->prepareBobs::@5#5] -- register_copy + // [173] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#17 [phi:prepareBobs::@11->prepareBobs::@5#0] -- register_copy + // [173] phi (byte) progress_idx#25 = (byte) progress_idx#10 [phi:prepareBobs::@11->prepareBobs::@5#1] -- register_copy + // [173] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@11->prepareBobs::@5#2] -- register_copy + // [173] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@11->prepareBobs::@5#3] -- register_copy + // [173] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@11->prepareBobs::@5#4] -- register_copy + // [173] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@11->prepareBobs::@5#5] -- register_copy jmp __b5 } // progress_inc // Increase PETSCII progress one bit // Done by increasing the character until the idx is 8 and then moving to the next char progress_inc: { - // [164] (byte) progress_idx#8 ← ++ (byte) progress_idx#25 -- vbuz1=_inc_vbuz1 + // [189] (byte) progress_idx#8 ← ++ (byte) progress_idx#25 -- vbuz1=_inc_vbuz1 inc.z progress_idx - // [165] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 -- vbuz1_neq_vbuc1_then_la1 + // [190] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z progress_idx bne __b1_from_progress_inc jmp __b2 // progress_inc::@2 __b2: - // [166] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) -- _deref_pbuz1=_deref_pbuc1 + // [191] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) -- _deref_pbuz1=_deref_pbuc1 lda progress_chars+8 ldy #0 sta (progress_cursor),y - // [167] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24 -- pbuz1=_inc_pbuz1 + // [192] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24 -- pbuz1=_inc_pbuz1 inc.z progress_cursor bne !+ inc.z progress_cursor+1 !: - // [168] phi from progress_inc::@2 to progress_inc::@1 [phi:progress_inc::@2->progress_inc::@1] + // [193] phi from progress_inc::@2 to progress_inc::@1 [phi:progress_inc::@2->progress_inc::@1] __b1_from___b2: - // [168] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#8 [phi:progress_inc::@2->progress_inc::@1#0] -- register_copy - // [168] phi (byte) progress_idx#10 = (byte) 0 [phi:progress_inc::@2->progress_inc::@1#1] -- vbuz1=vbuc1 + // [193] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#8 [phi:progress_inc::@2->progress_inc::@1#0] -- register_copy + // [193] phi (byte) progress_idx#10 = (byte) 0 [phi:progress_inc::@2->progress_inc::@1#1] -- vbuz1=vbuc1 lda #0 sta.z progress_idx jmp __b1 - // [168] phi from progress_inc to progress_inc::@1 [phi:progress_inc->progress_inc::@1] + // [193] phi from progress_inc to progress_inc::@1 [phi:progress_inc->progress_inc::@1] __b1_from_progress_inc: - // [168] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#24 [phi:progress_inc->progress_inc::@1#0] -- register_copy - // [168] phi (byte) progress_idx#10 = (byte) progress_idx#8 [phi:progress_inc->progress_inc::@1#1] -- register_copy + // [193] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#24 [phi:progress_inc->progress_inc::@1#0] -- register_copy + // [193] phi (byte) progress_idx#10 = (byte) progress_idx#8 [phi:progress_inc->progress_inc::@1#1] -- register_copy jmp __b1 // progress_inc::@1 __b1: - // [169] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [194] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z progress_idx lda progress_chars,y ldy #0 @@ -5787,7 +6328,7 @@ progress_inc: { jmp __breturn // progress_inc::@return __breturn: - // [170] return + // [195] return rts // Progress characters progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0 @@ -5796,92 +6337,92 @@ progress_inc: { // 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($19) bob_glyph) +// bobCharsetFindOrAddGlyph(byte* zeropage($1d) bob_glyph) bobCharsetFindOrAddGlyph: { - .label bob_glyph = $19 - .label return = $6f - .label i = $1f - .label glyph_id = $1b - .label glyph_cursor = $1c - .label i1 = $1e - .label found = $20 - // [172] phi from bobCharsetFindOrAddGlyph to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1] + .label bob_glyph = $1d + .label return = $77 + .label i = $23 + .label glyph_id = $1f + .label glyph_cursor = $20 + .label i1 = $22 + .label found = $24 + // [197] phi from bobCharsetFindOrAddGlyph to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1] __b1_from_bobCharsetFindOrAddGlyph: - // [172] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (const byte*) BOB_CHARSET [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#0] -- pbuz1=pbuc1 + // [197] 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 - // [172] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) 0 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#1] -- vbuz1=vbuc1 + // [197] 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: - // [173] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 -- vbuz1_neq_vbuz2_then_la1 + // [198] 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 - // [174] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7] + // [199] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7] __b7_from___b1: - // [174] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7#0] -- vbuz1=vbuc1 + // [199] 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: - // [175] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 -- vbuz1_lt_vbuc1_then_la1 + // [200] 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: - // [176] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 + // [201] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 inc.z bob_charset_next_id - // [177] phi from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 to bobCharsetFindOrAddGlyph::@return [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return] + // [202] phi from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 to bobCharsetFindOrAddGlyph::@return [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return] __breturn_from___b5: __breturn_from___b9: - // [177] phi (byte) bob_charset_next_id#16 = (byte) bob_charset_next_id#23 [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return#0] -- register_copy + // [202] 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: - // [178] return + // [203] return rts // bobCharsetFindOrAddGlyph::@8 __b8: - // [179] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz2 + // [204] *((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 - // [180] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 -- vbuz1=_inc_vbuz1 + // [205] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 -- vbuz1=_inc_vbuz1 inc.z i1 - // [174] phi from bobCharsetFindOrAddGlyph::@8 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7] + // [199] phi from bobCharsetFindOrAddGlyph::@8 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7] __b7_from___b8: - // [174] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) bobCharsetFindOrAddGlyph::i1#1 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7#0] -- register_copy + // [199] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) bobCharsetFindOrAddGlyph::i1#1 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7#0] -- register_copy jmp __b7 - // [181] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2] + // [206] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2] __b2_from___b1: - // [181] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2#0] -- vbuz1=vbuc1 + // [206] 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: - // [182] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 -- vbuz1_lt_vbuc1_then_la1 + // [207] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #8 bcc __b3 - // [184] phi from bobCharsetFindOrAddGlyph::@2 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5] + // [209] phi from bobCharsetFindOrAddGlyph::@2 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5] __b5_from___b2: - // [184] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 1 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5#0] -- vbuz1=vbuc1 + // [209] 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: - // [183] 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 + // [208] 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 @@ -5890,24 +6431,24 @@ bobCharsetFindOrAddGlyph: { sty.z $ff cpx.z $ff beq __b4 - // [184] phi from bobCharsetFindOrAddGlyph::@3 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5] + // [209] phi from bobCharsetFindOrAddGlyph::@3 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5] __b5_from___b3: - // [184] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5#0] -- vbuz1=vbuc1 + // [209] 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: - // [185] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 -- vbuc1_eq_vbuz1_then_la1 + // [210] 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: - // [186] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=_inc_vbuz1 + // [211] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=_inc_vbuz1 inc.z glyph_id - // [187] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [212] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z glyph_cursor @@ -5915,98 +6456,98 @@ bobCharsetFindOrAddGlyph: { bcc !+ inc.z glyph_cursor+1 !: - // [172] phi from bobCharsetFindOrAddGlyph::@6 to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1] + // [197] phi from bobCharsetFindOrAddGlyph::@6 to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1] __b1_from___b6: - // [172] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#0] -- register_copy - // [172] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) bobCharsetFindOrAddGlyph::glyph_id#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#1] -- register_copy + // [197] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#0] -- register_copy + // [197] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) bobCharsetFindOrAddGlyph::glyph_id#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#1] -- register_copy jmp __b1 // bobCharsetFindOrAddGlyph::@4 __b4: - // [188] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 -- vbuz1=_inc_vbuz1 + // [213] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [181] phi from bobCharsetFindOrAddGlyph::@4 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2] + // [206] phi from bobCharsetFindOrAddGlyph::@4 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2] __b2_from___b4: - // [181] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) bobCharsetFindOrAddGlyph::i#1 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2#0] -- register_copy + // [206] 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 = $71 - .label __5 = $72 - .label __6 = $73 - .label carry = $24 - .label j = $22 - .label i = $21 - .label carry_1 = $23 - // [190] phi from shiftProtoBobRight to shiftProtoBobRight::@1 [phi:shiftProtoBobRight->shiftProtoBobRight::@1] + .label __1 = $79 + .label __5 = $7a + .label __6 = $7b + .label carry = $28 + .label j = $26 + .label i = $25 + .label carry_1 = $27 + // [215] phi from shiftProtoBobRight to shiftProtoBobRight::@1 [phi:shiftProtoBobRight->shiftProtoBobRight::@1] __b1_from_shiftProtoBobRight: - // [190] phi (byte) shiftProtoBobRight::carry#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#0] -- vbuz1=vbuc1 + // [215] phi (byte) shiftProtoBobRight::carry#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#0] -- vbuz1=vbuc1 lda #0 sta.z carry_1 - // [190] phi (byte) shiftProtoBobRight::j#3 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#1] -- vbuz1=vbuc1 + // [215] phi (byte) shiftProtoBobRight::j#3 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#1] -- vbuz1=vbuc1 lda #0 sta.z j - // [190] phi (byte) shiftProtoBobRight::i#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#2] -- vbuz1=vbuc1 + // [215] phi (byte) shiftProtoBobRight::i#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#2] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b1 // shiftProtoBobRight::@1 __b1: - // [191] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 -- vbuz1_lt_vbuc1_then_la1 + // [216] 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: - // [192] return + // [217] return rts // shiftProtoBobRight::@2 __b2: - // [193] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 -- vbuz1=pbuc1_derefidx_vbuz2_band_vbuc2 + // [218] (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 - // [194] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 -- vbuc1_neq_vbuz1_then_la1 + // [219] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp.z __1 bne __b3_from___b2 - // [196] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4] + // [221] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4] __b4_from___b2: - // [196] phi (byte) shiftProtoBobRight::carry#1 = (byte) 0 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 + // [221] phi (byte) shiftProtoBobRight::carry#1 = (byte) 0 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 lda #0 sta.z carry jmp __b4 - // [195] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@3 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@3] + // [220] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@3 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@3] __b3_from___b2: jmp __b3 // shiftProtoBobRight::@3 __b3: - // [196] phi from shiftProtoBobRight::@3 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4] + // [221] phi from shiftProtoBobRight::@3 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4] __b4_from___b3: - // [196] phi (byte) shiftProtoBobRight::carry#1 = (byte) $80 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 + // [221] 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: - // [197] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 -- vbuz1=pbuc1_derefidx_vbuz2_ror_1 + // [222] (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 - // [198] (byte~) shiftProtoBobRight::$6 ← (byte) shiftProtoBobRight::carry#2 | (byte~) shiftProtoBobRight::$5 -- vbuz1=vbuz2_bor_vbuz3 + // [223] (byte~) shiftProtoBobRight::$6 ← (byte) shiftProtoBobRight::carry#2 | (byte~) shiftProtoBobRight::$5 -- vbuz1=vbuz2_bor_vbuz3 lda.z carry_1 ora.z __5 sta.z __6 - // [199] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 -- pbuc1_derefidx_vbuz1=vbuz2 + // [224] *((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 - // [200] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 -- vbuz1_ge_vbuc1_then_la1 + // [225] 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 @@ -6014,31 +6555,31 @@ shiftProtoBobRight: { jmp __b7 // shiftProtoBobRight::@7 __b7: - // [201] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 + // [226] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 lax.z j axs #-[$18] stx.z j - // [202] phi from shiftProtoBobRight::@5 shiftProtoBobRight::@7 to shiftProtoBobRight::@6 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6] + // [227] phi from shiftProtoBobRight::@5 shiftProtoBobRight::@7 to shiftProtoBobRight::@6 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6] __b6_from___b5: __b6_from___b7: - // [202] phi (byte) shiftProtoBobRight::j#10 = (byte) shiftProtoBobRight::j#1 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6#0] -- register_copy + // [227] phi (byte) shiftProtoBobRight::j#10 = (byte) shiftProtoBobRight::j#1 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6#0] -- register_copy jmp __b6 // shiftProtoBobRight::@6 __b6: - // [203] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 -- vbuz1=_inc_vbuz1 + // [228] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [204] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 -- vbuz1=vbuz2 + // [229] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 -- vbuz1=vbuz2 lda.z carry sta.z carry_1 - // [190] phi from shiftProtoBobRight::@6 to shiftProtoBobRight::@1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1] + // [215] phi from shiftProtoBobRight::@6 to shiftProtoBobRight::@1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1] __b1_from___b6: - // [190] phi (byte) shiftProtoBobRight::carry#2 = (byte) shiftProtoBobRight::carry#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#0] -- register_copy - // [190] phi (byte) shiftProtoBobRight::j#3 = (byte) shiftProtoBobRight::j#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#1] -- register_copy - // [190] phi (byte) shiftProtoBobRight::i#2 = (byte) shiftProtoBobRight::i#1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#2] -- register_copy + // [215] phi (byte) shiftProtoBobRight::carry#2 = (byte) shiftProtoBobRight::carry#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#0] -- register_copy + // [215] phi (byte) shiftProtoBobRight::j#3 = (byte) shiftProtoBobRight::j#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#1] -- register_copy + // [215] phi (byte) shiftProtoBobRight::i#2 = (byte) shiftProtoBobRight::i#1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#2] -- register_copy jmp __b1 // shiftProtoBobRight::@5 __b5: - // [205] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f -- vbuz1=vbuz1_minus_vbuc1 + // [230] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f -- vbuz1=vbuz1_minus_vbuc1 lax.z j axs #$2f stx.z j @@ -6048,54 +6589,54 @@ shiftProtoBobRight: { // Shift PROTO_BOB down one Y pixel // At the same time restore PROTO_BOB X by shifting 8 pixels left shiftProtoBobDown: { - .label i = $25 - // [207] phi from shiftProtoBobDown to shiftProtoBobDown::@1 [phi:shiftProtoBobDown->shiftProtoBobDown::@1] + .label i = $29 + // [232] phi from shiftProtoBobDown to shiftProtoBobDown::@1 [phi:shiftProtoBobDown->shiftProtoBobDown::@1] __b1_from_shiftProtoBobDown: - // [207] phi (byte) shiftProtoBobDown::i#2 = (byte) $17 [phi:shiftProtoBobDown->shiftProtoBobDown::@1#0] -- vbuz1=vbuc1 + // [232] phi (byte) shiftProtoBobDown::i#2 = (byte) $17 [phi:shiftProtoBobDown->shiftProtoBobDown::@1#0] -- vbuz1=vbuc1 lda #$17 sta.z i jmp __b1 // shiftProtoBobDown::@1 __b1: - // [208] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 -- vbuz1_gt_0_then_la1 + // [233] 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: - // [209] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [234] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PROTO_BOB - // [210] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [235] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PROTO_BOB+$18 - // [211] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [236] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PROTO_BOB+$30 jmp __breturn // shiftProtoBobDown::@return __breturn: - // [212] return + // [237] return rts // shiftProtoBobDown::@2 __b2: - // [213] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + // [238] *((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 - // [214] *((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 + // [239] *((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 - // [215] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // [240] *((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 - // [216] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 -- vbuz1=_dec_vbuz1 + // [241] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 -- vbuz1=_dec_vbuz1 dec.z i - // [207] phi from shiftProtoBobDown::@2 to shiftProtoBobDown::@1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1] + // [232] phi from shiftProtoBobDown::@2 to shiftProtoBobDown::@1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1] __b1_from___b2: - // [207] phi (byte) shiftProtoBobDown::i#2 = (byte) shiftProtoBobDown::i#1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1#0] -- register_copy + // [232] phi (byte) shiftProtoBobDown::i#2 = (byte) shiftProtoBobDown::i#1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1#0] -- register_copy jmp __b1 } // progress_init @@ -6104,51 +6645,51 @@ progress_init: { jmp __breturn // progress_init::@return __breturn: - // [218] return + // [243] return rts } // mulf_init // Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4) mulf_init: { - .label __1 = $74 - .label __4 = $75 - .label __5 = $76 + .label __1 = $7c + .label __4 = $7d + .label __5 = $7e // x/2 - .label c = $28 + .label c = $2c // Counter used for determining x%2==0 - .label sqr1_hi = $29 + .label sqr1_hi = $2d // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 - .label sqr = $32 - .label sqr1_lo = $26 + .label sqr = $36 + .label sqr1_lo = $2a // sqr = (x*x)/4 - .label x_2 = $2b + .label x_2 = $2f // Decrease or increase x_255 - initially we decrease - .label sqr2_hi = $2f + .label sqr2_hi = $33 // Fill mulf_sqr2 = g(x) = f(x-255) : If x-255<0 then g(x)=f(255-x) (because x*x = -x*-x) // g(0) = f(255), g(1) = f(254), ..., g(254) = f(1), g(255) = f(0), g(256) = f(1), ..., g(510) = f(255), g(511) = f(256) - .label x_255 = $2e - .label sqr2_lo = $2c + .label x_255 = $32 + .label sqr2_lo = $30 //Start with g(0)=f(255) - .label dir = $31 - // [220] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + .label dir = $35 + // [245] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] __b1_from_mulf_init: - // [220] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuz1=vbuc1 + // [245] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuz1=vbuc1 lda #0 sta.z x_2 - // [220] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + // [245] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [220] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [245] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 lda #<0 sta.z sqr lda #>0 sta.z sqr+1 - // [220] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + // [245] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 lda #0 sta.z c - // [220] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + // [245] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 lda #mulf_sqr1_lo+1 @@ -6156,27 +6697,27 @@ mulf_init: { jmp __b1 // mulf_init::@1 __b1: - // [221] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [246] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr1_lo+1 cmp #>mulf_sqr1_lo+$200 bne __b2 lda.z sqr1_lo cmp #mulf_init::@5] + // [247] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5] __b5_from___b1: - // [222] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + // [247] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 lda #$ff sta.z dir - // [222] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + // [247] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 lda #mulf_sqr2_hi sta.z sqr2_hi+1 - // [222] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuz1=vbuc1 + // [247] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuz1=vbuc1 lda #-1 sta.z x_255 - // [222] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + // [247] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 lda #mulf_sqr2_lo @@ -6184,7 +6725,7 @@ mulf_init: { jmp __b5 // mulf_init::@5 __b5: - // [223] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + // [248] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr2_lo+1 cmp #>mulf_sqr2_lo+$1ff bne __b6 @@ -6194,123 +6735,123 @@ mulf_init: { jmp __b7 // mulf_init::@7 __b7: - // [224] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [249] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 // Set the very last value g(511) = f(256) lda mulf_sqr1_lo+$100 sta mulf_sqr2_lo+$1ff - // [225] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [250] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 lda mulf_sqr1_hi+$100 sta mulf_sqr2_hi+$1ff jmp __breturn // mulf_init::@return __breturn: - // [226] return + // [251] return rts // mulf_init::@6 __b6: - // [227] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [252] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z x_255 lda mulf_sqr1_lo,y ldy #0 sta (sqr2_lo),y - // [228] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [253] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z x_255 lda mulf_sqr1_hi,y ldy #0 sta (sqr2_hi),y - // [229] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 + // [254] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_hi bne !+ inc.z sqr2_hi+1 !: - // [230] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuz1=vbuz1_plus_vbuz2 + // [255] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuz1=vbuz1_plus_vbuz2 lda.z x_255 clc adc.z dir sta.z x_255 - // [231] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuz1_neq_0_then_la1 + // [256] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuz1_neq_0_then_la1 lda.z x_255 cmp #0 bne __b9_from___b6 - // [233] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] + // [258] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] __b8_from___b6: - // [233] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + // [258] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 lda #1 sta.z dir jmp __b8 - // [232] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // [257] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] __b9_from___b6: jmp __b9 // mulf_init::@9 __b9: - // [233] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [258] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] __b8_from___b9: - // [233] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // [258] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy jmp __b8 // mulf_init::@8 __b8: - // [234] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + // [259] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_lo bne !+ inc.z sqr2_lo+1 !: - // [222] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [247] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] __b5_from___b8: - // [222] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy - // [222] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy - // [222] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy - // [222] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + // [247] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [247] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [247] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [247] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy jmp __b5 // mulf_init::@2 __b2: - // [235] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + // [260] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 inc.z c - // [236] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + // [261] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 lda #1 and.z c sta.z __1 - // [237] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuz1_neq_0_then_la1 + // [262] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuz1_neq_0_then_la1 lda.z __1 cmp #0 bne __b3_from___b2 jmp __b4 // mulf_init::@4 __b4: - // [238] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuz1=_inc_vbuz1 + // [263] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuz1=_inc_vbuz1 inc.z x_2 - // [239] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + // [264] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 inc.z sqr bne !+ inc.z sqr+1 !: - // [240] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [265] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] __b3_from___b2: __b3_from___b4: - // [240] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy - // [240] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // [265] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [265] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy jmp __b3 // mulf_init::@3 __b3: - // [241] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuz1=_lo_vwuz2 + // [266] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuz1=_lo_vwuz2 lda.z sqr sta.z __4 - // [242] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuz2 + // [267] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuz2 lda.z __4 ldy #0 sta (sqr1_lo),y - // [243] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuz1=_hi_vwuz2 + // [268] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuz1=_hi_vwuz2 lda.z sqr+1 sta.z __5 - // [244] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuz2 + // [269] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuz2 lda.z __5 ldy #0 sta (sqr1_hi),y - // [245] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + // [270] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_hi bne !+ inc.z sqr1_hi+1 !: - // [246] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuz2 + // [271] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuz2 lda.z x_2 clc adc.z sqr @@ -6318,18 +6859,18 @@ mulf_init: { bcc !+ inc.z sqr+1 !: - // [247] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + // [272] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_lo bne !+ inc.z sqr1_lo+1 !: - // [220] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [245] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] __b1_from___b3: - // [220] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy - // [220] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy - // [220] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy - // [220] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy - // [220] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + // [245] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [245] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [245] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [245] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [245] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy jmp __b1 } // File Data @@ -6372,609 +6913,673 @@ SIN: // 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]; BOB_TABLES: .fill 9*8*4, 0 - // Table for getting BOB screen offset from the BOB Y-position - RENDERBOB_YOFFSET: .fill 2*$20, 0 + // Table used for deleting rendered BOB's. Contains pointers to first char of each BOB. + RENDERBOB_CLEANUP: .fill 2*NUM_BOBS, 0 + // *40 Table unsigned int[0x20] MUL40 = { ((unsigned int)i)*40 }; + MUL40: .fill 2*$20, 0 REGISTER UPLIFT POTENTIAL REGISTERS Statement [11] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:3 [ ] ) always clobbers reg byte a Statement [13] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a Statement [15] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [18] if(*((const byte*) RASTER)<(byte) $f8) goto main::@2 [ main::angle#6 ] ( main:3 [ main::angle#6 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::angle#6 main::angle#1 ] -Statement [21] *((const byte*) BORDERCOL) ← (byte) 1 [ main::angle#6 main::r#2 main::a#2 main::i#2 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 ] ) always clobbers reg byte a +Statement [18] if(*((const byte*) RASTER)<(byte) $f8) goto main::@2 [ main::angle#8 ] ( main:3 [ main::angle#8 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::angle#8 main::angle#1 ] +Statement [19] *((const byte*) BORDERCOL) ← (byte) $f [ main::angle#8 ] ( main:3 [ main::angle#8 ] ) always clobbers reg byte a +Statement [23] *((const byte*) BORDERCOL) ← (byte) 1 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::r#2 main::r#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::a#2 main::a#1 main::a#7 ] -Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::i#2 main::i#1 ] -Statement [25] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s::return#2 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s::return#2 ] ) always clobbers reg byte a -Statement [26] (signed word~) main::$9 ← (signed word) mulf8s::return#2 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::$9 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::$9 ] ) always clobbers reg byte a -Statement [27] (signed word) main::x#0 ← (signed word~) main::$9 + (signed word)(number) $4b*(number) $100 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 ] ) always clobbers reg byte a -Statement [31] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s::return#3 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s::return#3 ] ) always clobbers reg byte a -Statement [32] (signed word~) main::$11 ← (signed word) mulf8s::return#3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::$11 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::$11 ] ) always clobbers reg byte a -Statement [33] (signed word~) main::$12 ← (signed word~) main::$11 << (byte) 1 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::$12 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::$12 ] ) always clobbers reg byte a -Statement [34] (signed word) main::y#0 ← (signed word~) main::$12 + (signed word)(number) $5a*(number) $100 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::y#0 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::y#0 ] ) always clobbers reg byte a -Statement [35] *((const byte*) BORDERCOL) ← (byte) 2 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::y#0 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::y#0 ] ) always clobbers reg byte a -Statement [36] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 [ main::angle#6 main::r#2 main::i#2 main::a#1 main::x#0 main::y#0 ] ( main:3 [ main::angle#6 main::r#2 main::i#2 main::a#1 main::x#0 main::y#0 ] ) always clobbers reg byte a -Statement [37] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 [ main::angle#6 main::i#2 main::r#1 main::a#1 main::x#0 main::y#0 ] ( main:3 [ main::angle#6 main::i#2 main::r#1 main::a#1 main::x#0 main::y#0 ] ) always clobbers reg byte a -Statement [38] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 [ main::angle#6 main::i#2 main::r#1 main::a#1 main::y#0 renderBob::xpos#0 ] ( main:3 [ main::angle#6 main::i#2 main::r#1 main::a#1 main::y#0 renderBob::xpos#0 ] ) always clobbers reg byte a -Statement [39] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 ] ( main:3 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:66 [ renderBob::xpos#0 ] -Statement [43] (byte) main::angle#1 ← (byte) main::angle#6 + (byte) 3 [ main::angle#1 ] ( main:3 [ main::angle#1 ] ) always clobbers reg byte a -Statement [44] *((const byte*) BORDERCOL) ← (byte) 0 [ main::angle#1 ] ( main:3 [ main::angle#1 ] ) always clobbers reg byte a -Statement [54] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [56] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [58] *((const byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [66] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:3::keyboard_key_pressed:45::keyboard_matrix_read:61 [ main::angle#1 ] main:3::keyboard_key_pressed:50::keyboard_matrix_read:61 [ ] ) always clobbers reg byte a -Statement [67] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:3::keyboard_key_pressed:45::keyboard_matrix_read:61 [ main::angle#1 keyboard_matrix_read::return#0 ] main:3::keyboard_key_pressed:50::keyboard_matrix_read:61 [ keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [69] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:67 [ renderBob::ypos#0 ] -Statement [70] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 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]:76 [ renderBob::x_char_offset#0 ] -Statement [71] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ) always clobbers reg byte a -Statement [72] (word) renderBob::y_offset#0 ← *((const word*) RENDERBOB_YOFFSET + (byte~) renderBob::$8) [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ) always clobbers reg byte a -Statement [73] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ) always clobbers reg byte a -Statement [74] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ) always clobbers reg byte a -Statement [75] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 [ renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ) always clobbers reg byte a -Statement [76] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 [ renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ) always clobbers reg byte a -Statement [77] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 [ renderBob::screen#0 renderBob::$5 renderBob::$6 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::$5 renderBob::$6 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:86 [ renderBob::$5 ] -Statement [78] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a -Statement [79] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 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::angle#6 main::angle#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:5 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::a#2 main::a#6 main::a#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::i#2 main::i#1 ] +Statement [27] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s::return#2 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s::return#2 ] ) always clobbers reg byte a +Statement [28] (signed word~) main::$10 ← (signed word) mulf8s::return#2 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::$10 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::$10 ] ) always clobbers reg byte a +Statement [29] (signed word) main::x#0 ← (signed word~) main::$10 + (signed word)(number) $4b*(number) $100 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 ] ) always clobbers reg byte a +Statement [33] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s::return#3 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s::return#3 ] ) always clobbers reg byte a +Statement [34] (signed word~) main::$12 ← (signed word) mulf8s::return#3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::$12 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::$12 ] ) always clobbers reg byte a +Statement [35] (signed word~) main::$13 ← (signed word~) main::$12 << (byte) 1 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::$13 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::$13 ] ) always clobbers reg byte a +Statement [36] (signed word) main::y#0 ← (signed word~) main::$13 + (signed word)(number) $5a*(number) $100 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::y#0 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::y#0 ] ) always clobbers reg byte a +Statement [37] *((const byte*) BORDERCOL) ← (byte) 2 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::y#0 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::y#0 ] ) always clobbers reg byte a +Statement [38] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 [ main::angle#8 main::r#2 renderBobCleanupNext#17 main::i#2 main::a#1 main::x#0 main::y#0 ] ( main:3 [ main::angle#8 main::r#2 renderBobCleanupNext#17 main::i#2 main::a#1 main::x#0 main::y#0 ] ) always clobbers reg byte a +Statement [39] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 main::x#0 main::y#0 ] ( main:3 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 main::x#0 main::y#0 ] ) always clobbers reg byte a +Statement [40] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 main::y#0 renderBob::xpos#0 ] ( main:3 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 main::y#0 renderBob::xpos#0 ] ) always clobbers reg byte a +Statement [41] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 ] ( main:3 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:70 [ renderBob::xpos#0 ] +Statement [45] (byte) main::angle#1 ← (byte) main::angle#8 + (byte) 3 [ main::angle#1 ] ( main:3 [ main::angle#1 ] ) always clobbers reg byte a +Statement [46] *((const byte*) BORDERCOL) ← (byte) 0 [ main::angle#1 ] ( main:3 [ main::angle#1 ] ) always clobbers reg byte a +Statement [56] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:3 [ ] ) always clobbers reg byte a +Statement [58] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a +Statement [60] *((const byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a +Statement [68] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:3::keyboard_key_pressed:47::keyboard_matrix_read:63 [ main::angle#1 ] main:3::keyboard_key_pressed:52::keyboard_matrix_read:63 [ ] ) always clobbers reg byte a +Statement [69] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:3::keyboard_key_pressed:47::keyboard_matrix_read:63 [ main::angle#1 keyboard_matrix_read::return#0 ] main:3::keyboard_key_pressed:52::keyboard_matrix_read:63 [ keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [71] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:71 [ renderBob::ypos#0 ] +Statement [72] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 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]:80 [ renderBob::x_char_offset#0 ] +Statement [73] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ) always clobbers reg byte a +Statement [74] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8) [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ) always clobbers reg byte a +Statement [75] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ) always clobbers reg byte a +Statement [76] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ) always clobbers reg byte a +Statement [77] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ) always clobbers reg byte a +Statement [78] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ) always clobbers reg byte a +Statement [79] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::$5 renderBob::$6 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::screen#0 renderBob::$5 renderBob::$6 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:90 [ renderBob::$5 ] +Statement [80] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a +Statement [81] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 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::angle#8 main::angle#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::r#2 main::r#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::a#2 main::a#1 main::a#7 ] -Removing always clobbered register reg byte a as potential for zp[1]:88 [ renderBob::bob_table_idx#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:88 [ renderBob::bob_table_idx#0 ] -Statement [80] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [81] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [82] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [83] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [84] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [85] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [86] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [87] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 ] ) always clobbers reg byte a reg byte y -Statement [94] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:3::mulf8s:24 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s::return#0 ] main:3::mulf8s:30 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s::return#0 ] ) always clobbers reg byte a -Statement [98] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:90 [ mulf8s_prepared::b#0 ] -Statement [99] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a -Statement [100] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a -Statement [101] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ) always clobbers reg byte a -Statement [102] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a -Statement [106] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ) always clobbers reg byte a -Statement [107] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a +Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::a#2 main::a#6 main::a#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:92 [ renderBob::bob_table_idx#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:92 [ renderBob::bob_table_idx#0 ] +Statement [82] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a +Statement [83] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [84] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [85] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [86] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [87] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [88] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [89] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [90] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [91] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 ] ) always clobbers reg byte a reg byte y +Statement [98] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:3::mulf8s:26 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s::return#0 ] main:3::mulf8s:32 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s::return#0 ] ) always clobbers reg byte a +Statement [102] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:94 [ mulf8s_prepared::b#0 ] +Statement [103] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a +Statement [104] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a +Statement [105] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ) always clobbers reg byte a +Statement [106] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a +Statement [110] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ) always clobbers reg byte a +Statement [111] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a Statement asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } always clobbers reg byte a reg byte x -Removing always clobbered register reg byte x as potential for zp[1]:2 [ main::angle#6 main::angle#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:2 [ main::angle#8 main::angle#1 ] Removing always clobbered register reg byte x as potential for zp[1]:3 [ main::r#2 main::r#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:4 [ main::a#2 main::a#1 main::a#7 ] -Removing always clobbered register reg byte x as potential for zp[1]:5 [ main::i#2 main::i#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:90 [ mulf8s_prepared::b#0 ] -Statement [113] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:3::mulf8s:24::mulf8s_prepared:93::mulf8u_prepared:97 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] main:3::mulf8s:30::mulf8s_prepared:93::mulf8u_prepared:97 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte x as potential for zp[1]:4 [ main::a#2 main::a#6 main::a#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:94 [ mulf8s_prepared::b#0 ] +Statement [117] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:3::mulf8s:26::mulf8s_prepared:97::mulf8u_prepared:101 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] main:3::mulf8s:32::mulf8s_prepared:97::mulf8u_prepared:101 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a Statement asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:7 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] -Statement [120] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:3::memset:16 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [122] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:3::memset:16 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [126] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 [ renderBobInit::y#2 renderBobInit::$0 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:12 [ renderBobInit::y#2 renderBobInit::y#1 ] -Statement [127] (word~) renderBobInit::$4 ← (word~) renderBobInit::$0 << (byte) 2 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$4 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$4 ] ) always clobbers reg byte a -Statement [128] (word~) renderBobInit::$5 ← (word~) renderBobInit::$4 + (word~) renderBobInit::$0 [ renderBobInit::y#2 renderBobInit::$5 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$5 ] ) always clobbers reg byte a -Statement [129] (word~) renderBobInit::$1 ← (word~) renderBobInit::$5 << (byte) 3 [ renderBobInit::y#2 renderBobInit::$1 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$1 ] ) always clobbers reg byte a -Statement [130] (byte~) renderBobInit::$3 ← (byte) renderBobInit::y#2 << (byte) 1 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$3 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$3 ] ) always clobbers reg byte a -Statement [131] *((const word*) RENDERBOB_YOFFSET + (byte~) renderBobInit::$3) ← (word~) renderBobInit::$1 [ renderBobInit::y#2 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 ] ) always clobbers reg byte a -Statement [147] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 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]:13 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:16 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] -Removing always clobbered register reg byte a as potential for zp[1]:24 [ 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]:17 [ 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]:18 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] -Statement [155] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 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]:19 [ prepareBobs::cell#2 prepareBobs::cell#1 ] -Statement [159] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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]:13 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:24 [ 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]:17 [ 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]:18 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:16 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] -Removing always clobbered register reg byte y as potential for zp[1]:19 [ prepareBobs::cell#2 prepareBobs::cell#1 ] -Statement [160] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ) always clobbers reg byte a -Statement [161] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ) always clobbers reg byte a -Statement [166] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) [ progress_cursor#24 ] ( main:3::prepareBobs:8::progress_inc:162 [ 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 progress_cursor#24 ] ) always clobbers reg byte a reg byte y -Statement [169] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) [ progress_idx#10 progress_cursor#17 ] ( main:3::prepareBobs:8::progress_inc:162 [ 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 progress_idx#10 progress_cursor#17 ] ) always clobbers reg byte a reg byte y -Statement [179] *((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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:138 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:156 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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]:27 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:30 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] -Statement [183] 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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:138 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:156 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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]:27 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:27 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:24 [ 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]:31 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:31 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:31 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:13 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:17 [ 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]:18 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:16 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] -Removing always clobbered register reg byte x as potential for zp[1]:19 [ prepareBobs::cell#2 prepareBobs::cell#1 ] -Statement [187] (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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:138 [ bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:156 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [193] (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:3::prepareBobs:8::shiftProtoBobRight:151 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] main:3::prepareBobs:8::shiftProtoBobRight:153 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 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]:33 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:34 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:35 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] -Statement [197] (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:3::prepareBobs:8::shiftProtoBobRight:151 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] main:3::prepareBobs:8::shiftProtoBobRight:153 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 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]:36 [ shiftProtoBobRight::carry#1 ] -Statement [201] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ( main:3::prepareBobs:8::shiftProtoBobRight:151 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] main:3::prepareBobs:8::shiftProtoBobRight:153 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ) always clobbers reg byte a -Statement [205] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ( main:3::prepareBobs:8::shiftProtoBobRight:151 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] main:3::prepareBobs:8::shiftProtoBobRight:153 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ) always clobbers reg byte a -Statement [209] *((const byte*) PROTO_BOB) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [210] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [211] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [213] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 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]:37 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] -Statement [214] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a -Statement [215] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a -Statement [221] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:40 [ mulf_init::c#2 mulf_init::c#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:43 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Statement [223] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:46 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:49 [ mulf_init::dir#2 mulf_init::dir#4 ] -Statement [224] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:3::mulf_init:6 [ ] ) always clobbers reg byte a -Statement [225] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:3::mulf_init:6 [ ] ) always clobbers reg byte a -Statement [227] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:46 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:49 [ mulf_init::dir#2 mulf_init::dir#4 ] -Statement [228] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [230] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a -Statement [236] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a -Statement [241] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a -Statement [242] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:40 [ mulf_init::c#2 mulf_init::c#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:43 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Statement [243] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a -Statement [244] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Statement [246] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:9 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] +Statement [124] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1 [ renderBobCleanup::i#2 renderBobCleanup::$1 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::$1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ renderBobCleanup::i#2 renderBobCleanup::i#1 ] +Statement [125] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1) [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a +Statement [126] *((byte*) renderBobCleanup::screen#0) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:12 [ renderBobCleanup::i#2 renderBobCleanup::i#1 ] +Statement [127] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [128] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [129] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [130] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [131] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [132] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [133] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [134] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0 [ renderBobCleanup::i#2 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 ] ) always clobbers reg byte a reg byte y +Statement [140] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:3::memset:16 [ memset::dst#2 ] ) always clobbers reg byte a +Statement [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:3::memset:16 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [146] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 [ renderBobInit::y#2 renderBobInit::$0 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:15 [ renderBobInit::y#2 renderBobInit::y#1 ] +Statement [147] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$6 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$6 ] ) always clobbers reg byte a +Statement [148] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0 [ renderBobInit::y#2 renderBobInit::$7 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$7 ] ) always clobbers reg byte a +Statement [149] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (byte) 3 [ renderBobInit::y#2 renderBobInit::$1 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$1 ] ) always clobbers reg byte a +Statement [150] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$4 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$4 ] ) always clobbers reg byte a +Statement [151] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1 [ renderBobInit::y#2 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 ] ) always clobbers reg byte a +Statement [155] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1 [ renderBobInit::i#2 renderBobInit::$5 ] ( main:3::renderBobInit:10 [ renderBobInit::i#2 renderBobInit::$5 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:16 [ renderBobInit::i#2 renderBobInit::i#1 ] +Statement [156] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN [ renderBobInit::i#2 ] ( main:3::renderBobInit:10 [ renderBobInit::i#2 ] ) always clobbers reg byte a +Statement [172] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 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]:17 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:20 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] +Removing always clobbered register reg byte a as potential for zp[1]:28 [ 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]:21 [ 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]:22 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] +Statement [180] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 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]:23 [ prepareBobs::cell#2 prepareBobs::cell#1 ] +Statement [184] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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]:17 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:28 [ 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]:21 [ 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]:22 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:20 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] +Removing always clobbered register reg byte y as potential for zp[1]:23 [ prepareBobs::cell#2 prepareBobs::cell#1 ] +Statement [185] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ) always clobbers reg byte a +Statement [186] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ) always clobbers reg byte a +Statement [191] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) [ progress_cursor#24 ] ( main:3::prepareBobs:8::progress_inc:187 [ 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 progress_cursor#24 ] ) always clobbers reg byte a reg byte y +Statement [194] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) [ progress_idx#10 progress_cursor#17 ] ( main:3::prepareBobs:8::progress_inc:187 [ 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 progress_idx#10 progress_cursor#17 ] ) always clobbers reg byte a reg byte y +Statement [204] *((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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:163 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:181 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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]:31 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:34 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] +Statement [208] 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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:163 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:181 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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]:31 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:31 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:28 [ 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]:35 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:35 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:35 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:17 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:21 [ 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]:22 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:20 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] +Removing always clobbered register reg byte x as potential for zp[1]:23 [ prepareBobs::cell#2 prepareBobs::cell#1 ] +Statement [212] (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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:163 [ bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:181 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [218] (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:3::prepareBobs:8::shiftProtoBobRight:176 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] main:3::prepareBobs:8::shiftProtoBobRight:178 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 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]:37 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:38 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:39 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] +Statement [222] (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:3::prepareBobs:8::shiftProtoBobRight:176 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] main:3::prepareBobs:8::shiftProtoBobRight:178 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 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]:40 [ shiftProtoBobRight::carry#1 ] +Statement [226] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ( main:3::prepareBobs:8::shiftProtoBobRight:176 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] main:3::prepareBobs:8::shiftProtoBobRight:178 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ) always clobbers reg byte a +Statement [230] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ( main:3::prepareBobs:8::shiftProtoBobRight:176 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] main:3::prepareBobs:8::shiftProtoBobRight:178 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ) always clobbers reg byte a +Statement [234] *((const byte*) PROTO_BOB) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [235] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [236] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [238] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 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]:41 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] +Statement [239] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a +Statement [240] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a +Statement [246] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:44 [ mulf_init::c#2 mulf_init::c#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:47 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Statement [248] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:50 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:53 [ mulf_init::dir#2 mulf_init::dir#4 ] +Statement [249] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:3::mulf_init:6 [ ] ) always clobbers reg byte a +Statement [250] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:3::mulf_init:6 [ ] ) always clobbers reg byte a +Statement [252] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:50 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:53 [ mulf_init::dir#2 mulf_init::dir#4 ] +Statement [253] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [255] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a +Statement [261] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a +Statement [266] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a +Statement [267] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:44 [ mulf_init::c#2 mulf_init::c#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:47 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Statement [268] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a +Statement [269] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [271] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a Statement [11] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:3 [ ] ) always clobbers reg byte a Statement [13] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a Statement [15] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [18] if(*((const byte*) RASTER)<(byte) $f8) goto main::@2 [ main::angle#6 ] ( main:3 [ main::angle#6 ] ) always clobbers reg byte a -Statement [19] (byte) main::a#7 ← (byte) main::angle#6 [ main::angle#6 main::a#7 ] ( main:3 [ main::angle#6 main::a#7 ] ) always clobbers reg byte a -Statement [21] *((const byte*) BORDERCOL) ← (byte) 1 [ main::angle#6 main::r#2 main::a#2 main::i#2 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 ] ) always clobbers reg byte a -Statement [23] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) main::a#2) [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s::a#0 mulf8s::b#0 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s::a#0 mulf8s::b#0 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:6 [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] -Statement [25] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s::return#2 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s::return#2 ] ) always clobbers reg byte a -Statement [26] (signed word~) main::$9 ← (signed word) mulf8s::return#2 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::$9 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::$9 ] ) always clobbers reg byte a -Statement [27] (signed word) main::x#0 ← (signed word~) main::$9 + (signed word)(number) $4b*(number) $100 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 ] ) always clobbers reg byte a -Statement [29] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#2) [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s::a#1 mulf8s::b#1 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s::a#1 mulf8s::b#1 ] ) always clobbers reg byte y -Statement [31] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s::return#3 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s::return#3 ] ) always clobbers reg byte a -Statement [32] (signed word~) main::$11 ← (signed word) mulf8s::return#3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::$11 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::$11 ] ) always clobbers reg byte a -Statement [33] (signed word~) main::$12 ← (signed word~) main::$11 << (byte) 1 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::$12 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::$12 ] ) always clobbers reg byte a -Statement [34] (signed word) main::y#0 ← (signed word~) main::$12 + (signed word)(number) $5a*(number) $100 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::y#0 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::y#0 ] ) always clobbers reg byte a -Statement [35] *((const byte*) BORDERCOL) ← (byte) 2 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::y#0 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::y#0 ] ) always clobbers reg byte a -Statement [36] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 [ main::angle#6 main::r#2 main::i#2 main::a#1 main::x#0 main::y#0 ] ( main:3 [ main::angle#6 main::r#2 main::i#2 main::a#1 main::x#0 main::y#0 ] ) always clobbers reg byte a reg byte x -Statement [37] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 [ main::angle#6 main::i#2 main::r#1 main::a#1 main::x#0 main::y#0 ] ( main:3 [ main::angle#6 main::i#2 main::r#1 main::a#1 main::x#0 main::y#0 ] ) always clobbers reg byte a reg byte x -Statement [38] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 [ main::angle#6 main::i#2 main::r#1 main::a#1 main::y#0 renderBob::xpos#0 ] ( main:3 [ main::angle#6 main::i#2 main::r#1 main::a#1 main::y#0 renderBob::xpos#0 ] ) always clobbers reg byte a -Statement [39] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 ] ( main:3 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 ] ) always clobbers reg byte a -Statement [42] if((byte) main::i#1!=(byte) $1a) goto main::@4 [ main::angle#6 main::r#1 main::a#1 main::i#1 ] ( main:3 [ main::angle#6 main::r#1 main::a#1 main::i#1 ] ) always clobbers reg byte a -Statement [43] (byte) main::angle#1 ← (byte) main::angle#6 + (byte) 3 [ main::angle#1 ] ( main:3 [ main::angle#1 ] ) always clobbers reg byte a reg byte x -Statement [44] *((const byte*) BORDERCOL) ← (byte) 0 [ main::angle#1 ] ( main:3 [ main::angle#1 ] ) always clobbers reg byte a -Statement [54] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [56] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [58] *((const byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [66] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:3::keyboard_key_pressed:45::keyboard_matrix_read:61 [ main::angle#1 ] main:3::keyboard_key_pressed:50::keyboard_matrix_read:61 [ ] ) always clobbers reg byte a -Statement [67] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:3::keyboard_key_pressed:45::keyboard_matrix_read:61 [ main::angle#1 keyboard_matrix_read::return#0 ] main:3::keyboard_key_pressed:50::keyboard_matrix_read:61 [ keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [69] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ) always clobbers reg byte a -Statement [70] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ) always clobbers reg byte a -Statement [71] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ) always clobbers reg byte a -Statement [72] (word) renderBob::y_offset#0 ← *((const word*) RENDERBOB_YOFFSET + (byte~) renderBob::$8) [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ) always clobbers reg byte a -Statement [73] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ) always clobbers reg byte a -Statement [74] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ) always clobbers reg byte a -Statement [75] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 [ renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ) always clobbers reg byte a -Statement [76] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 [ renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ) always clobbers reg byte a -Statement [77] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 [ renderBob::screen#0 renderBob::$5 renderBob::$6 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::$5 renderBob::$6 ] ) always clobbers reg byte a -Statement [78] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a -Statement [79] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [80] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [81] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [82] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [83] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [84] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [85] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [86] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [87] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 ] ) always clobbers reg byte a reg byte y -Statement [94] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:3::mulf8s:24 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s::return#0 ] main:3::mulf8s:30 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s::return#0 ] ) always clobbers reg byte a -Statement [98] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a -Statement [99] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a -Statement [100] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a -Statement [101] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ) always clobbers reg byte a -Statement [102] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a -Statement [106] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ) always clobbers reg byte a -Statement [107] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a +Statement [18] if(*((const byte*) RASTER)<(byte) $f8) goto main::@2 [ main::angle#8 ] ( main:3 [ main::angle#8 ] ) always clobbers reg byte a +Statement [19] *((const byte*) BORDERCOL) ← (byte) $f [ main::angle#8 ] ( main:3 [ main::angle#8 ] ) always clobbers reg byte a +Statement [21] (byte) main::a#6 ← (byte) main::angle#8 [ main::angle#8 main::a#6 ] ( main:3 [ main::angle#8 main::a#6 ] ) always clobbers reg byte a +Statement [23] *((const byte*) BORDERCOL) ← (byte) 1 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 ] ) always clobbers reg byte a +Statement [25] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) main::a#2) [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s::a#0 mulf8s::b#0 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s::a#0 mulf8s::b#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:8 [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] +Statement [27] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s::return#2 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s::return#2 ] ) always clobbers reg byte a +Statement [28] (signed word~) main::$10 ← (signed word) mulf8s::return#2 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::$10 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::$10 ] ) always clobbers reg byte a +Statement [29] (signed word) main::x#0 ← (signed word~) main::$10 + (signed word)(number) $4b*(number) $100 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 ] ) always clobbers reg byte a +Statement [31] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#2) [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s::a#1 mulf8s::b#1 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s::a#1 mulf8s::b#1 ] ) always clobbers reg byte y +Statement [33] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s::return#3 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s::return#3 ] ) always clobbers reg byte a +Statement [34] (signed word~) main::$12 ← (signed word) mulf8s::return#3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::$12 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::$12 ] ) always clobbers reg byte a +Statement [35] (signed word~) main::$13 ← (signed word~) main::$12 << (byte) 1 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::$13 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::$13 ] ) always clobbers reg byte a +Statement [36] (signed word) main::y#0 ← (signed word~) main::$13 + (signed word)(number) $5a*(number) $100 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::y#0 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::y#0 ] ) always clobbers reg byte a +Statement [37] *((const byte*) BORDERCOL) ← (byte) 2 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::y#0 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::y#0 ] ) always clobbers reg byte a +Statement [38] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 [ main::angle#8 main::r#2 renderBobCleanupNext#17 main::i#2 main::a#1 main::x#0 main::y#0 ] ( main:3 [ main::angle#8 main::r#2 renderBobCleanupNext#17 main::i#2 main::a#1 main::x#0 main::y#0 ] ) always clobbers reg byte a reg byte x +Statement [39] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 main::x#0 main::y#0 ] ( main:3 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 main::x#0 main::y#0 ] ) always clobbers reg byte a reg byte x +Statement [40] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 main::y#0 renderBob::xpos#0 ] ( main:3 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 main::y#0 renderBob::xpos#0 ] ) always clobbers reg byte a +Statement [41] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 ] ( main:3 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 ] ) always clobbers reg byte a +Statement [44] if((byte) main::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto main::@4 [ main::angle#8 main::r#1 main::a#1 renderBobCleanupNext#13 main::i#1 ] ( main:3 [ main::angle#8 main::r#1 main::a#1 renderBobCleanupNext#13 main::i#1 ] ) always clobbers reg byte a +Statement [45] (byte) main::angle#1 ← (byte) main::angle#8 + (byte) 3 [ main::angle#1 ] ( main:3 [ main::angle#1 ] ) always clobbers reg byte a reg byte x +Statement [46] *((const byte*) BORDERCOL) ← (byte) 0 [ main::angle#1 ] ( main:3 [ main::angle#1 ] ) always clobbers reg byte a +Statement [56] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:3 [ ] ) always clobbers reg byte a +Statement [58] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a +Statement [60] *((const byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a +Statement [68] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:3::keyboard_key_pressed:47::keyboard_matrix_read:63 [ main::angle#1 ] main:3::keyboard_key_pressed:52::keyboard_matrix_read:63 [ ] ) always clobbers reg byte a +Statement [69] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:3::keyboard_key_pressed:47::keyboard_matrix_read:63 [ main::angle#1 keyboard_matrix_read::return#0 ] main:3::keyboard_key_pressed:52::keyboard_matrix_read:63 [ keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [71] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ) always clobbers reg byte a +Statement [72] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ) always clobbers reg byte a +Statement [73] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ) always clobbers reg byte a +Statement [74] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8) [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ) always clobbers reg byte a +Statement [75] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ) always clobbers reg byte a +Statement [76] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ) always clobbers reg byte a +Statement [77] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ) always clobbers reg byte a +Statement [78] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ) always clobbers reg byte a +Statement [79] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::$5 renderBob::$6 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::screen#0 renderBob::$5 renderBob::$6 ] ) always clobbers reg byte a +Statement [80] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a +Statement [81] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [82] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a +Statement [83] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [84] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [85] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [86] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [87] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [88] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [89] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [90] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [91] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 ] ) always clobbers reg byte a reg byte y +Statement [98] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:3::mulf8s:26 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s::return#0 ] main:3::mulf8s:32 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s::return#0 ] ) always clobbers reg byte a +Statement [102] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a +Statement [103] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a +Statement [104] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a +Statement [105] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ) always clobbers reg byte a +Statement [106] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a +Statement [110] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ) always clobbers reg byte a +Statement [111] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a Statement asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } always clobbers reg byte a reg byte x -Statement [113] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:3::mulf8s:24::mulf8s_prepared:93::mulf8u_prepared:97 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] main:3::mulf8s:30::mulf8s_prepared:93::mulf8u_prepared:97 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a +Statement [117] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:3::mulf8s:26::mulf8s_prepared:97::mulf8u_prepared:101 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] main:3::mulf8s:32::mulf8s_prepared:97::mulf8u_prepared:101 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a Statement asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } always clobbers reg byte a -Statement [120] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:3::memset:16 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [122] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:3::memset:16 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [126] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 [ renderBobInit::y#2 renderBobInit::$0 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$0 ] ) always clobbers reg byte a -Statement [127] (word~) renderBobInit::$4 ← (word~) renderBobInit::$0 << (byte) 2 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$4 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$4 ] ) always clobbers reg byte a -Statement [128] (word~) renderBobInit::$5 ← (word~) renderBobInit::$4 + (word~) renderBobInit::$0 [ renderBobInit::y#2 renderBobInit::$5 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$5 ] ) always clobbers reg byte a -Statement [129] (word~) renderBobInit::$1 ← (word~) renderBobInit::$5 << (byte) 3 [ renderBobInit::y#2 renderBobInit::$1 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$1 ] ) always clobbers reg byte a -Statement [130] (byte~) renderBobInit::$3 ← (byte) renderBobInit::y#2 << (byte) 1 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$3 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$3 ] ) always clobbers reg byte a -Statement [131] *((const word*) RENDERBOB_YOFFSET + (byte~) renderBobInit::$3) ← (word~) renderBobInit::$1 [ renderBobInit::y#2 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 ] ) always clobbers reg byte a -Statement [140] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 [ prepareBobs::shift_y#2 progress_cursor#15 progress_idx#16 bob_charset_next_id#14 prepareBobs::bob_table_idx#6 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 progress_cursor#15 progress_idx#16 bob_charset_next_id#14 prepareBobs::bob_table_idx#6 ] ) always clobbers reg byte a -Statement [143] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 ] ) always clobbers reg byte a -Statement [147] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ) always clobbers reg byte a -Statement [149] 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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte a -Statement [155] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ) always clobbers reg byte a -Statement [159] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte y -Statement [160] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ) always clobbers reg byte a -Statement [161] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ) always clobbers reg byte a -Statement [165] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 [ progress_cursor#24 progress_idx#8 ] ( main:3::prepareBobs:8::progress_inc:162 [ 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 progress_cursor#24 progress_idx#8 ] ) always clobbers reg byte a -Statement [166] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) [ progress_cursor#24 ] ( main:3::prepareBobs:8::progress_inc:162 [ 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 progress_cursor#24 ] ) always clobbers reg byte a reg byte y -Statement [169] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) [ progress_idx#10 progress_cursor#17 ] ( main:3::prepareBobs:8::progress_inc:162 [ 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 progress_idx#10 progress_cursor#17 ] ) always clobbers reg byte a reg byte y -Statement [173] 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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:138 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:156 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [179] *((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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:138 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:156 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [182] 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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:138 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:156 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [183] 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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:138 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:156 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [187] (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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:138 [ bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:156 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [193] (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:3::prepareBobs:8::shiftProtoBobRight:151 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] main:3::prepareBobs:8::shiftProtoBobRight:153 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] ) always clobbers reg byte a -Statement [197] (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:3::prepareBobs:8::shiftProtoBobRight:151 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] main:3::prepareBobs:8::shiftProtoBobRight:153 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] ) always clobbers reg byte a -Statement [201] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ( main:3::prepareBobs:8::shiftProtoBobRight:151 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] main:3::prepareBobs:8::shiftProtoBobRight:153 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ) always clobbers reg byte a -Statement [205] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ( main:3::prepareBobs:8::shiftProtoBobRight:151 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] main:3::prepareBobs:8::shiftProtoBobRight:153 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ) always clobbers reg byte a -Statement [209] *((const byte*) PROTO_BOB) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [210] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [211] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [213] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a -Statement [214] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a -Statement [215] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a -Statement [221] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a -Statement [223] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a -Statement [224] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:3::mulf_init:6 [ ] ) always clobbers reg byte a -Statement [225] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:3::mulf_init:6 [ ] ) always clobbers reg byte a -Statement [227] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [228] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [230] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a -Statement [236] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a -Statement [241] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a -Statement [242] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Statement [243] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a -Statement [244] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Statement [246] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a +Statement [124] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1 [ renderBobCleanup::i#2 renderBobCleanup::$1 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::$1 ] ) always clobbers reg byte a +Statement [125] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1) [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a +Statement [126] *((byte*) renderBobCleanup::screen#0) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [127] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [128] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [129] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [130] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [131] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [132] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [133] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [134] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0 [ renderBobCleanup::i#2 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 ] ) always clobbers reg byte a reg byte y +Statement [140] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:3::memset:16 [ memset::dst#2 ] ) always clobbers reg byte a +Statement [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:3::memset:16 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [146] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 [ renderBobInit::y#2 renderBobInit::$0 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$0 ] ) always clobbers reg byte a +Statement [147] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$6 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$6 ] ) always clobbers reg byte a +Statement [148] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0 [ renderBobInit::y#2 renderBobInit::$7 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$7 ] ) always clobbers reg byte a +Statement [149] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (byte) 3 [ renderBobInit::y#2 renderBobInit::$1 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$1 ] ) always clobbers reg byte a +Statement [150] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$4 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$4 ] ) always clobbers reg byte a +Statement [151] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1 [ renderBobInit::y#2 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 ] ) always clobbers reg byte a +Statement [155] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1 [ renderBobInit::i#2 renderBobInit::$5 ] ( main:3::renderBobInit:10 [ renderBobInit::i#2 renderBobInit::$5 ] ) always clobbers reg byte a +Statement [156] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN [ renderBobInit::i#2 ] ( main:3::renderBobInit:10 [ renderBobInit::i#2 ] ) always clobbers reg byte a +Statement [165] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 [ prepareBobs::shift_y#2 progress_cursor#15 progress_idx#16 bob_charset_next_id#14 prepareBobs::bob_table_idx#6 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 progress_cursor#15 progress_idx#16 bob_charset_next_id#14 prepareBobs::bob_table_idx#6 ] ) always clobbers reg byte a +Statement [168] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 ] ) always clobbers reg byte a +Statement [172] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ) always clobbers reg byte a +Statement [174] 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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte a +Statement [180] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ) always clobbers reg byte a +Statement [184] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte y +Statement [185] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ) always clobbers reg byte a +Statement [186] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ) always clobbers reg byte a +Statement [190] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 [ progress_cursor#24 progress_idx#8 ] ( main:3::prepareBobs:8::progress_inc:187 [ 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 progress_cursor#24 progress_idx#8 ] ) always clobbers reg byte a +Statement [191] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) [ progress_cursor#24 ] ( main:3::prepareBobs:8::progress_inc:187 [ 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 progress_cursor#24 ] ) always clobbers reg byte a reg byte y +Statement [194] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) [ progress_idx#10 progress_cursor#17 ] ( main:3::prepareBobs:8::progress_inc:187 [ 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 progress_idx#10 progress_cursor#17 ] ) always clobbers reg byte a reg byte y +Statement [198] 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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:163 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:181 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [204] *((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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:163 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:181 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [207] 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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:163 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:181 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [208] 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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:163 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:181 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [212] (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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:163 [ bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:181 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [218] (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:3::prepareBobs:8::shiftProtoBobRight:176 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] main:3::prepareBobs:8::shiftProtoBobRight:178 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] ) always clobbers reg byte a +Statement [222] (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:3::prepareBobs:8::shiftProtoBobRight:176 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] main:3::prepareBobs:8::shiftProtoBobRight:178 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] ) always clobbers reg byte a +Statement [226] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ( main:3::prepareBobs:8::shiftProtoBobRight:176 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] main:3::prepareBobs:8::shiftProtoBobRight:178 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ) always clobbers reg byte a +Statement [230] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ( main:3::prepareBobs:8::shiftProtoBobRight:176 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] main:3::prepareBobs:8::shiftProtoBobRight:178 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ) always clobbers reg byte a +Statement [234] *((const byte*) PROTO_BOB) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [235] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [236] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [238] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a +Statement [239] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a +Statement [240] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a +Statement [246] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a +Statement [248] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a +Statement [249] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:3::mulf_init:6 [ ] ) always clobbers reg byte a +Statement [250] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:3::mulf_init:6 [ ] ) always clobbers reg byte a +Statement [252] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [253] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [255] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a +Statement [261] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a +Statement [266] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a +Statement [267] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [268] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a +Statement [269] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [271] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a Statement [11] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:3 [ ] ) always clobbers reg byte a Statement [13] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a Statement [15] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [18] if(*((const byte*) RASTER)<(byte) $f8) goto main::@2 [ main::angle#6 ] ( main:3 [ main::angle#6 ] ) always clobbers reg byte a -Statement [19] (byte) main::a#7 ← (byte) main::angle#6 [ main::angle#6 main::a#7 ] ( main:3 [ main::angle#6 main::a#7 ] ) always clobbers reg byte a -Statement [21] *((const byte*) BORDERCOL) ← (byte) 1 [ main::angle#6 main::r#2 main::a#2 main::i#2 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 ] ) always clobbers reg byte a -Statement [23] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) main::a#2) [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s::a#0 mulf8s::b#0 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s::a#0 mulf8s::b#0 ] ) always clobbers reg byte y -Statement [25] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s::return#2 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s::return#2 ] ) always clobbers reg byte a -Statement [26] (signed word~) main::$9 ← (signed word) mulf8s::return#2 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::$9 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::$9 ] ) always clobbers reg byte a -Statement [27] (signed word) main::x#0 ← (signed word~) main::$9 + (signed word)(number) $4b*(number) $100 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 ] ) always clobbers reg byte a -Statement [29] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#2) [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s::a#1 mulf8s::b#1 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s::a#1 mulf8s::b#1 ] ) always clobbers reg byte y -Statement [31] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s::return#3 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s::return#3 ] ) always clobbers reg byte a -Statement [32] (signed word~) main::$11 ← (signed word) mulf8s::return#3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::$11 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::$11 ] ) always clobbers reg byte a -Statement [33] (signed word~) main::$12 ← (signed word~) main::$11 << (byte) 1 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::$12 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::$12 ] ) always clobbers reg byte a -Statement [34] (signed word) main::y#0 ← (signed word~) main::$12 + (signed word)(number) $5a*(number) $100 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::y#0 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::y#0 ] ) always clobbers reg byte a -Statement [35] *((const byte*) BORDERCOL) ← (byte) 2 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::y#0 ] ( main:3 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 main::y#0 ] ) always clobbers reg byte a -Statement [36] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 [ main::angle#6 main::r#2 main::i#2 main::a#1 main::x#0 main::y#0 ] ( main:3 [ main::angle#6 main::r#2 main::i#2 main::a#1 main::x#0 main::y#0 ] ) always clobbers reg byte a reg byte x -Statement [37] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 [ main::angle#6 main::i#2 main::r#1 main::a#1 main::x#0 main::y#0 ] ( main:3 [ main::angle#6 main::i#2 main::r#1 main::a#1 main::x#0 main::y#0 ] ) always clobbers reg byte a reg byte x -Statement [38] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 [ main::angle#6 main::i#2 main::r#1 main::a#1 main::y#0 renderBob::xpos#0 ] ( main:3 [ main::angle#6 main::i#2 main::r#1 main::a#1 main::y#0 renderBob::xpos#0 ] ) always clobbers reg byte a -Statement [39] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 ] ( main:3 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 ] ) always clobbers reg byte a -Statement [42] if((byte) main::i#1!=(byte) $1a) goto main::@4 [ main::angle#6 main::r#1 main::a#1 main::i#1 ] ( main:3 [ main::angle#6 main::r#1 main::a#1 main::i#1 ] ) always clobbers reg byte a -Statement [43] (byte) main::angle#1 ← (byte) main::angle#6 + (byte) 3 [ main::angle#1 ] ( main:3 [ main::angle#1 ] ) always clobbers reg byte a reg byte x -Statement [44] *((const byte*) BORDERCOL) ← (byte) 0 [ main::angle#1 ] ( main:3 [ main::angle#1 ] ) always clobbers reg byte a -Statement [54] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [56] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [58] *((const byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [66] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:3::keyboard_key_pressed:45::keyboard_matrix_read:61 [ main::angle#1 ] main:3::keyboard_key_pressed:50::keyboard_matrix_read:61 [ ] ) always clobbers reg byte a -Statement [67] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:3::keyboard_key_pressed:45::keyboard_matrix_read:61 [ main::angle#1 keyboard_matrix_read::return#0 ] main:3::keyboard_key_pressed:50::keyboard_matrix_read:61 [ keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [69] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ) always clobbers reg byte a -Statement [70] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ) always clobbers reg byte a -Statement [71] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ) always clobbers reg byte a -Statement [72] (word) renderBob::y_offset#0 ← *((const word*) RENDERBOB_YOFFSET + (byte~) renderBob::$8) [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ) always clobbers reg byte a -Statement [73] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ) always clobbers reg byte a -Statement [74] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 [ renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ) always clobbers reg byte a -Statement [75] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 [ renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ) always clobbers reg byte a -Statement [76] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 [ renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ) always clobbers reg byte a -Statement [77] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 [ renderBob::screen#0 renderBob::$5 renderBob::$6 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::$5 renderBob::$6 ] ) always clobbers reg byte a -Statement [78] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a -Statement [79] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) [ renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [80] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [81] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [82] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [83] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [84] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [85] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [86] *((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:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y -Statement [87] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ ] ( main:3::renderBob:40 [ main::angle#6 main::i#2 main::r#1 main::a#1 ] ) always clobbers reg byte a reg byte y -Statement [94] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:3::mulf8s:24 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s::return#0 ] main:3::mulf8s:30 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s::return#0 ] ) always clobbers reg byte a -Statement [98] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a -Statement [99] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a -Statement [100] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a -Statement [101] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ) always clobbers reg byte a -Statement [102] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a -Statement [106] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ) always clobbers reg byte a -Statement [107] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:3::mulf8s:24::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] main:3::mulf8s:30::mulf8s_prepared:93 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a +Statement [18] if(*((const byte*) RASTER)<(byte) $f8) goto main::@2 [ main::angle#8 ] ( main:3 [ main::angle#8 ] ) always clobbers reg byte a +Statement [19] *((const byte*) BORDERCOL) ← (byte) $f [ main::angle#8 ] ( main:3 [ main::angle#8 ] ) always clobbers reg byte a +Statement [21] (byte) main::a#6 ← (byte) main::angle#8 [ main::angle#8 main::a#6 ] ( main:3 [ main::angle#8 main::a#6 ] ) always clobbers reg byte a +Statement [23] *((const byte*) BORDERCOL) ← (byte) 1 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 ] ) always clobbers reg byte a +Statement [25] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) main::a#2) [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s::a#0 mulf8s::b#0 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s::a#0 mulf8s::b#0 ] ) always clobbers reg byte y +Statement [27] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s::return#2 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s::return#2 ] ) always clobbers reg byte a +Statement [28] (signed word~) main::$10 ← (signed word) mulf8s::return#2 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::$10 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::$10 ] ) always clobbers reg byte a +Statement [29] (signed word) main::x#0 ← (signed word~) main::$10 + (signed word)(number) $4b*(number) $100 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 ] ) always clobbers reg byte a +Statement [31] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#2) [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s::a#1 mulf8s::b#1 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s::a#1 mulf8s::b#1 ] ) always clobbers reg byte y +Statement [33] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s::return#3 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s::return#3 ] ) always clobbers reg byte a +Statement [34] (signed word~) main::$12 ← (signed word) mulf8s::return#3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::$12 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::$12 ] ) always clobbers reg byte a +Statement [35] (signed word~) main::$13 ← (signed word~) main::$12 << (byte) 1 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::$13 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::$13 ] ) always clobbers reg byte a +Statement [36] (signed word) main::y#0 ← (signed word~) main::$13 + (signed word)(number) $5a*(number) $100 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::y#0 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::y#0 ] ) always clobbers reg byte a +Statement [37] *((const byte*) BORDERCOL) ← (byte) 2 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::y#0 ] ( main:3 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 main::y#0 ] ) always clobbers reg byte a +Statement [38] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 [ main::angle#8 main::r#2 renderBobCleanupNext#17 main::i#2 main::a#1 main::x#0 main::y#0 ] ( main:3 [ main::angle#8 main::r#2 renderBobCleanupNext#17 main::i#2 main::a#1 main::x#0 main::y#0 ] ) always clobbers reg byte a reg byte x +Statement [39] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 main::x#0 main::y#0 ] ( main:3 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 main::x#0 main::y#0 ] ) always clobbers reg byte a reg byte x +Statement [40] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 main::y#0 renderBob::xpos#0 ] ( main:3 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 main::y#0 renderBob::xpos#0 ] ) always clobbers reg byte a +Statement [41] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 ] ( main:3 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 renderBob::xpos#0 renderBob::ypos#0 ] ) always clobbers reg byte a +Statement [44] if((byte) main::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto main::@4 [ main::angle#8 main::r#1 main::a#1 renderBobCleanupNext#13 main::i#1 ] ( main:3 [ main::angle#8 main::r#1 main::a#1 renderBobCleanupNext#13 main::i#1 ] ) always clobbers reg byte a +Statement [45] (byte) main::angle#1 ← (byte) main::angle#8 + (byte) 3 [ main::angle#1 ] ( main:3 [ main::angle#1 ] ) always clobbers reg byte a reg byte x +Statement [46] *((const byte*) BORDERCOL) ← (byte) 0 [ main::angle#1 ] ( main:3 [ main::angle#1 ] ) always clobbers reg byte a +Statement [56] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:3 [ ] ) always clobbers reg byte a +Statement [58] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a +Statement [60] *((const byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a +Statement [68] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:3::keyboard_key_pressed:47::keyboard_matrix_read:63 [ main::angle#1 ] main:3::keyboard_key_pressed:52::keyboard_matrix_read:63 [ ] ) always clobbers reg byte a +Statement [69] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:3::keyboard_key_pressed:47::keyboard_matrix_read:63 [ main::angle#1 keyboard_matrix_read::return#0 ] main:3::keyboard_key_pressed:52::keyboard_matrix_read:63 [ keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [71] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ) always clobbers reg byte a +Statement [72] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ) always clobbers reg byte a +Statement [73] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ) always clobbers reg byte a +Statement [74] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8) [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ) always clobbers reg byte a +Statement [75] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ) always clobbers reg byte a +Statement [76] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ) always clobbers reg byte a +Statement [77] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ) always clobbers reg byte a +Statement [78] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ) always clobbers reg byte a +Statement [79] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::$5 renderBob::$6 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::screen#0 renderBob::$5 renderBob::$6 ] ) always clobbers reg byte a +Statement [80] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a +Statement [81] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [82] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a +Statement [83] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [84] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [85] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [86] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [87] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [88] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [89] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [90] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y +Statement [91] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 ] ( main:3::renderBob:42 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#13 ] ) always clobbers reg byte a reg byte y +Statement [98] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:3::mulf8s:26 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s::return#0 ] main:3::mulf8s:32 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s::return#0 ] ) always clobbers reg byte a +Statement [102] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a +Statement [103] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a +Statement [104] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a +Statement [105] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ) always clobbers reg byte a +Statement [106] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a +Statement [110] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ) always clobbers reg byte a +Statement [111] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:3::mulf8s:26::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] main:3::mulf8s:32::mulf8s_prepared:97 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a Statement asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } always clobbers reg byte a reg byte x -Statement [113] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:3::mulf8s:24::mulf8s_prepared:93::mulf8u_prepared:97 [ main::angle#6 main::r#2 main::a#2 main::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] main:3::mulf8s:30::mulf8s_prepared:93::mulf8u_prepared:97 [ main::angle#6 main::r#2 main::a#2 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a +Statement [117] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:3::mulf8s:26::mulf8s_prepared:97::mulf8u_prepared:101 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] main:3::mulf8s:32::mulf8s_prepared:97::mulf8u_prepared:101 [ main::angle#8 main::r#2 main::a#2 renderBobCleanupNext#17 main::i#2 main::x#0 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a Statement asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } always clobbers reg byte a -Statement [120] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:3::memset:16 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [122] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:3::memset:16 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [126] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 [ renderBobInit::y#2 renderBobInit::$0 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$0 ] ) always clobbers reg byte a -Statement [127] (word~) renderBobInit::$4 ← (word~) renderBobInit::$0 << (byte) 2 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$4 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$4 ] ) always clobbers reg byte a -Statement [128] (word~) renderBobInit::$5 ← (word~) renderBobInit::$4 + (word~) renderBobInit::$0 [ renderBobInit::y#2 renderBobInit::$5 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$5 ] ) always clobbers reg byte a -Statement [129] (word~) renderBobInit::$1 ← (word~) renderBobInit::$5 << (byte) 3 [ renderBobInit::y#2 renderBobInit::$1 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$1 ] ) always clobbers reg byte a -Statement [130] (byte~) renderBobInit::$3 ← (byte) renderBobInit::y#2 << (byte) 1 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$3 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$3 ] ) always clobbers reg byte a -Statement [131] *((const word*) RENDERBOB_YOFFSET + (byte~) renderBobInit::$3) ← (word~) renderBobInit::$1 [ renderBobInit::y#2 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 ] ) always clobbers reg byte a -Statement [140] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 [ prepareBobs::shift_y#2 progress_cursor#15 progress_idx#16 bob_charset_next_id#14 prepareBobs::bob_table_idx#6 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 progress_cursor#15 progress_idx#16 bob_charset_next_id#14 prepareBobs::bob_table_idx#6 ] ) always clobbers reg byte a -Statement [143] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 ] ) always clobbers reg byte a -Statement [147] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ) always clobbers reg byte a -Statement [149] 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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte a -Statement [155] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ) always clobbers reg byte a -Statement [159] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte y -Statement [160] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ) always clobbers reg byte a -Statement [161] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ) always clobbers reg byte a -Statement [165] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 [ progress_cursor#24 progress_idx#8 ] ( main:3::prepareBobs:8::progress_inc:162 [ 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 progress_cursor#24 progress_idx#8 ] ) always clobbers reg byte a -Statement [166] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) [ progress_cursor#24 ] ( main:3::prepareBobs:8::progress_inc:162 [ 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 progress_cursor#24 ] ) always clobbers reg byte a reg byte y -Statement [169] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) [ progress_idx#10 progress_cursor#17 ] ( main:3::prepareBobs:8::progress_inc:162 [ 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 progress_idx#10 progress_cursor#17 ] ) always clobbers reg byte a reg byte y -Statement [173] 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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:138 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:156 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [179] *((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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:138 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:156 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [182] 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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:138 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:156 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [183] 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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:138 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:156 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [187] (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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:138 [ bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:156 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [193] (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:3::prepareBobs:8::shiftProtoBobRight:151 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] main:3::prepareBobs:8::shiftProtoBobRight:153 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] ) always clobbers reg byte a -Statement [197] (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:3::prepareBobs:8::shiftProtoBobRight:151 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] main:3::prepareBobs:8::shiftProtoBobRight:153 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] ) always clobbers reg byte a -Statement [201] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ( main:3::prepareBobs:8::shiftProtoBobRight:151 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] main:3::prepareBobs:8::shiftProtoBobRight:153 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ) always clobbers reg byte a -Statement [205] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ( main:3::prepareBobs:8::shiftProtoBobRight:151 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] main:3::prepareBobs:8::shiftProtoBobRight:153 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ) always clobbers reg byte a -Statement [209] *((const byte*) PROTO_BOB) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [210] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [211] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a -Statement [213] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a -Statement [214] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a -Statement [215] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:145 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a -Statement [221] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a -Statement [223] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a -Statement [224] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:3::mulf_init:6 [ ] ) always clobbers reg byte a -Statement [225] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:3::mulf_init:6 [ ] ) always clobbers reg byte a -Statement [227] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [228] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [230] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a -Statement [236] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a -Statement [241] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a -Statement [242] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Statement [243] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a -Statement [244] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Statement [246] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a -Potential registers zp[1]:2 [ main::angle#6 main::angle#1 ] : zp[1]:2 , +Statement [124] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1 [ renderBobCleanup::i#2 renderBobCleanup::$1 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::$1 ] ) always clobbers reg byte a +Statement [125] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1) [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a +Statement [126] *((byte*) renderBobCleanup::screen#0) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [127] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [128] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [129] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [130] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [131] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [132] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [133] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y +Statement [134] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0 [ renderBobCleanup::i#2 ] ( main:3::renderBobCleanup:20 [ main::angle#8 renderBobCleanup::i#2 ] ) always clobbers reg byte a reg byte y +Statement [140] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:3::memset:16 [ memset::dst#2 ] ) always clobbers reg byte a +Statement [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:3::memset:16 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [146] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 [ renderBobInit::y#2 renderBobInit::$0 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$0 ] ) always clobbers reg byte a +Statement [147] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$6 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$6 ] ) always clobbers reg byte a +Statement [148] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0 [ renderBobInit::y#2 renderBobInit::$7 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$7 ] ) always clobbers reg byte a +Statement [149] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (byte) 3 [ renderBobInit::y#2 renderBobInit::$1 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$1 ] ) always clobbers reg byte a +Statement [150] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$4 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$4 ] ) always clobbers reg byte a +Statement [151] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1 [ renderBobInit::y#2 ] ( main:3::renderBobInit:10 [ renderBobInit::y#2 ] ) always clobbers reg byte a +Statement [155] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1 [ renderBobInit::i#2 renderBobInit::$5 ] ( main:3::renderBobInit:10 [ renderBobInit::i#2 renderBobInit::$5 ] ) always clobbers reg byte a +Statement [156] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN [ renderBobInit::i#2 ] ( main:3::renderBobInit:10 [ renderBobInit::i#2 ] ) always clobbers reg byte a +Statement [165] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 [ prepareBobs::shift_y#2 progress_cursor#15 progress_idx#16 bob_charset_next_id#14 prepareBobs::bob_table_idx#6 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 progress_cursor#15 progress_idx#16 bob_charset_next_id#14 prepareBobs::bob_table_idx#6 ] ) always clobbers reg byte a +Statement [168] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 ] ) always clobbers reg byte a +Statement [172] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ) always clobbers reg byte a +Statement [174] 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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte a +Statement [180] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ) always clobbers reg byte a +Statement [184] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte y +Statement [185] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ) always clobbers reg byte a +Statement [186] (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 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ( main:3::prepareBobs:8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ) always clobbers reg byte a +Statement [190] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 [ progress_cursor#24 progress_idx#8 ] ( main:3::prepareBobs:8::progress_inc:187 [ 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 progress_cursor#24 progress_idx#8 ] ) always clobbers reg byte a +Statement [191] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) [ progress_cursor#24 ] ( main:3::prepareBobs:8::progress_inc:187 [ 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 progress_cursor#24 ] ) always clobbers reg byte a reg byte y +Statement [194] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) [ progress_idx#10 progress_cursor#17 ] ( main:3::prepareBobs:8::progress_inc:187 [ 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 progress_idx#10 progress_cursor#17 ] ) always clobbers reg byte a reg byte y +Statement [198] 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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:163 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:181 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [204] *((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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:163 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i1#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:181 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [207] 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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:163 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:181 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [208] 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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:163 [ bobCharsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::i#2 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:181 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [212] (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:3::prepareBobs:8::bobCharsetFindOrAddGlyph:163 [ bob_charset_next_id#23 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::glyph_id#1 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] main:3::prepareBobs:8::bobCharsetFindOrAddGlyph:181 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 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 [218] (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:3::prepareBobs:8::shiftProtoBobRight:176 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] main:3::prepareBobs:8::shiftProtoBobRight:178 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::$1 ] ) always clobbers reg byte a +Statement [222] (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:3::prepareBobs:8::shiftProtoBobRight:176 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] main:3::prepareBobs:8::shiftProtoBobRight:178 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::j#3 shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::$5 ] ) always clobbers reg byte a +Statement [226] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ( main:3::prepareBobs:8::shiftProtoBobRight:176 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] main:3::prepareBobs:8::shiftProtoBobRight:178 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#2 ] ) always clobbers reg byte a +Statement [230] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f [ shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ( main:3::prepareBobs:8::shiftProtoBobRight:176 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] main:3::prepareBobs:8::shiftProtoBobRight:178 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 shiftProtoBobRight::i#2 shiftProtoBobRight::carry#1 shiftProtoBobRight::j#1 ] ) always clobbers reg byte a +Statement [234] *((const byte*) PROTO_BOB) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [235] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [236] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 [ ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a +Statement [238] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a +Statement [239] *((const byte*) PROTO_BOB+(byte) $18 + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) shiftProtoBobDown::i#2) [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a +Statement [240] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 [ shiftProtoBobDown::i#2 ] ( main:3::prepareBobs:8::shiftProtoBobDown:170 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 shiftProtoBobDown::i#2 ] ) always clobbers reg byte a +Statement [246] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a +Statement [248] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a +Statement [249] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:3::mulf_init:6 [ ] ) always clobbers reg byte a +Statement [250] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:3::mulf_init:6 [ ] ) always clobbers reg byte a +Statement [252] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [253] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [255] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:3::mulf_init:6 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a +Statement [261] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a +Statement [266] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a +Statement [267] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [268] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a +Statement [269] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [271] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:3::mulf_init:6 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a +Potential registers zp[1]:2 [ main::angle#8 main::angle#1 ] : zp[1]:2 , Potential registers zp[1]:3 [ main::r#2 main::r#1 ] : zp[1]:3 , -Potential registers zp[1]:4 [ main::a#2 main::a#1 main::a#7 ] : zp[1]:4 , -Potential registers zp[1]:5 [ main::i#2 main::i#1 ] : zp[1]:5 , -Potential registers zp[1]:6 [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] : zp[1]:6 , reg byte a , reg byte x , -Potential registers zp[1]:7 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] : zp[1]:7 , reg byte x , reg byte y , -Potential registers zp[2]:8 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] : zp[2]:8 , -Potential registers zp[2]:10 [ memset::dst#2 memset::dst#1 ] : zp[2]:10 , -Potential registers zp[1]:12 [ renderBobInit::y#2 renderBobInit::y#1 ] : zp[1]:12 , reg byte x , reg byte y , -Potential registers zp[1]:13 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] : zp[1]:13 , -Potential registers zp[2]:14 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] : zp[2]:14 , -Potential registers zp[1]:16 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] : zp[1]:16 , -Potential registers zp[1]:17 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] : zp[1]:17 , -Potential registers zp[1]:18 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] : zp[1]:18 , -Potential registers zp[1]:19 [ prepareBobs::cell#2 prepareBobs::cell#1 ] : zp[1]:19 , -Potential registers zp[2]:20 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] : zp[2]:20 , -Potential registers zp[2]:22 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] : zp[2]:22 , -Potential registers zp[1]:24 [ 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]:24 , -Potential registers zp[2]:25 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] : zp[2]:25 , -Potential registers zp[1]:27 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] : zp[1]:27 , -Potential registers zp[2]:28 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] : zp[2]:28 , -Potential registers zp[1]:30 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] : zp[1]:30 , reg byte x , reg byte y , -Potential registers zp[1]:31 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] : zp[1]:31 , -Potential registers zp[1]:32 [ bobCharsetFindOrAddGlyph::found#2 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:33 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] : zp[1]:33 , reg byte x , reg byte y , -Potential registers zp[1]:34 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] : zp[1]:34 , reg byte x , reg byte y , -Potential registers zp[1]:35 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] : zp[1]:35 , reg byte x , reg byte y , -Potential registers zp[1]:36 [ shiftProtoBobRight::carry#1 ] : zp[1]:36 , reg byte x , reg byte y , -Potential registers zp[1]:37 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] : zp[1]:37 , reg byte x , reg byte y , -Potential registers zp[2]:38 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] : zp[2]:38 , -Potential registers zp[1]:40 [ mulf_init::c#2 mulf_init::c#1 ] : zp[1]:40 , reg byte x , -Potential registers zp[2]:41 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] : zp[2]:41 , -Potential registers zp[1]:43 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] : zp[1]:43 , reg byte x , -Potential registers zp[2]:44 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] : zp[2]:44 , -Potential registers zp[1]:46 [ mulf_init::x_255#2 mulf_init::x_255#1 ] : zp[1]:46 , reg byte x , -Potential registers zp[2]:47 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] : zp[2]:47 , -Potential registers zp[1]:49 [ mulf_init::dir#2 mulf_init::dir#4 ] : zp[1]:49 , reg byte x , -Potential registers zp[2]:50 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] : zp[2]:50 , -Potential registers zp[2]:52 [ mulf8s::return#2 ] : zp[2]:52 , -Potential registers zp[2]:54 [ main::$9 ] : zp[2]:54 , -Potential registers zp[2]:56 [ main::x#0 ] : zp[2]:56 , -Potential registers zp[2]:58 [ mulf8s::return#3 ] : zp[2]:58 , -Potential registers zp[2]:60 [ main::$11 ] : zp[2]:60 , -Potential registers zp[2]:62 [ main::$12 ] : zp[2]:62 , -Potential registers zp[2]:64 [ main::y#0 ] : zp[2]:64 , -Potential registers zp[1]:66 [ renderBob::xpos#0 ] : zp[1]:66 , reg byte x , reg byte y , -Potential registers zp[1]:67 [ renderBob::ypos#0 ] : zp[1]:67 , reg byte x , reg byte y , -Potential registers zp[1]:68 [ keyboard_key_pressed::return#2 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:69 [ main::$18 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:70 [ keyboard_key_pressed::return#3 ] : zp[1]:70 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:71 [ main::$20 ] : zp[1]:71 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:72 [ keyboard_matrix_read::return#2 ] : zp[1]:72 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:73 [ keyboard_key_pressed::$2 ] : zp[1]:73 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:74 [ keyboard_key_pressed::return#0 ] : zp[1]:74 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:75 [ keyboard_matrix_read::return#0 ] : zp[1]:75 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:76 [ renderBob::x_char_offset#0 ] : zp[1]:76 , reg byte x , reg byte y , -Potential registers zp[1]:77 [ renderBob::y_char_offset#0 ] : zp[1]:77 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:78 [ renderBob::$8 ] : zp[1]:78 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:79 [ renderBob::y_offset#0 ] : zp[2]:79 , -Potential registers zp[2]:81 [ renderBob::$2 ] : zp[2]:81 , -Potential registers zp[2]:83 [ renderBob::screen#0 ] : zp[2]:83 , -Potential registers zp[1]:85 [ renderBob::$4 ] : zp[1]:85 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:86 [ renderBob::$5 ] : zp[1]:86 , reg byte x , reg byte y , -Potential registers zp[1]:87 [ renderBob::$6 ] : zp[1]:87 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:88 [ renderBob::bob_table_idx#0 ] : zp[1]:88 , reg byte x , -Potential registers zp[1]:89 [ mulf8u_prepare::a#0 ] : zp[1]:89 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:90 [ mulf8s_prepared::b#0 ] : zp[1]:90 , reg byte y , -Potential registers zp[2]:91 [ mulf8s::return#0 ] : zp[2]:91 , -Potential registers zp[1]:93 [ mulf8u_prepared::b#0 ] : zp[1]:93 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:94 [ mulf8u_prepared::return#2 ] : zp[2]:94 , -Potential registers zp[1]:96 [ mulf8s_prepared::$8 ] : zp[1]:96 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:97 [ mulf8s_prepared::$15 ] : zp[1]:97 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:98 [ mulf8s_prepared::$12 ] : zp[1]:98 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:99 [ mulf8s_prepared::$16 ] : zp[1]:99 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:100 [ mulf8u_prepared::return#0 ] : zp[2]:100 , -Potential registers zp[2]:102 [ renderBobInit::$0 ] : zp[2]:102 , -Potential registers zp[2]:104 [ renderBobInit::$4 ] : zp[2]:104 , -Potential registers zp[2]:106 [ renderBobInit::$5 ] : zp[2]:106 , -Potential registers zp[2]:108 [ renderBobInit::$1 ] : zp[2]:108 , -Potential registers zp[1]:110 [ renderBobInit::$3 ] : zp[1]:110 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:111 [ bobCharsetFindOrAddGlyph::return#1 ] : zp[1]:111 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:112 [ prepareBobs::$6 ] : zp[1]:112 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:113 [ shiftProtoBobRight::$1 ] : zp[1]:113 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:114 [ shiftProtoBobRight::$5 ] : zp[1]:114 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:115 [ shiftProtoBobRight::$6 ] : zp[1]:115 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:116 [ mulf_init::$1 ] : zp[1]:116 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:117 [ mulf_init::$4 ] : zp[1]:117 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:118 [ mulf_init::$5 ] : zp[1]:118 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ main::a#2 main::a#6 main::a#1 ] : zp[1]:4 , +Potential registers zp[2]:5 [ renderBobCleanupNext#17 renderBobCleanupNext#13 ] : zp[2]:5 , +Potential registers zp[1]:7 [ main::i#2 main::i#1 ] : zp[1]:7 , +Potential registers zp[1]:8 [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] : zp[1]:8 , reg byte a , reg byte x , +Potential registers zp[1]:9 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] : zp[1]:9 , reg byte x , reg byte y , +Potential registers zp[2]:10 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] : zp[2]:10 , +Potential registers zp[1]:12 [ renderBobCleanup::i#2 renderBobCleanup::i#1 ] : zp[1]:12 , reg byte x , +Potential registers zp[2]:13 [ memset::dst#2 memset::dst#1 ] : zp[2]:13 , +Potential registers zp[1]:15 [ renderBobInit::y#2 renderBobInit::y#1 ] : zp[1]:15 , reg byte x , reg byte y , +Potential registers zp[1]:16 [ renderBobInit::i#2 renderBobInit::i#1 ] : zp[1]:16 , reg byte x , reg byte y , +Potential registers zp[1]:17 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] : zp[1]:17 , +Potential registers zp[2]:18 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] : zp[2]:18 , +Potential registers zp[1]:20 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] : zp[1]:20 , +Potential registers zp[1]:21 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] : zp[1]:21 , +Potential registers zp[1]:22 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] : zp[1]:22 , +Potential registers zp[1]:23 [ prepareBobs::cell#2 prepareBobs::cell#1 ] : zp[1]:23 , +Potential registers zp[2]:24 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] : zp[2]:24 , +Potential registers zp[2]:26 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] : zp[2]:26 , +Potential registers zp[1]:28 [ 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]:28 , +Potential registers zp[2]:29 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] : zp[2]:29 , +Potential registers zp[1]:31 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] : zp[1]:31 , +Potential registers zp[2]:32 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] : zp[2]:32 , +Potential registers zp[1]:34 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] : zp[1]:34 , reg byte x , reg byte y , +Potential registers zp[1]:35 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] : zp[1]:35 , +Potential registers zp[1]:36 [ bobCharsetFindOrAddGlyph::found#2 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:37 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] : zp[1]:37 , reg byte x , reg byte y , +Potential registers zp[1]:38 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] : zp[1]:38 , reg byte x , reg byte y , +Potential registers zp[1]:39 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] : zp[1]:39 , reg byte x , reg byte y , +Potential registers zp[1]:40 [ shiftProtoBobRight::carry#1 ] : zp[1]:40 , reg byte x , reg byte y , +Potential registers zp[1]:41 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] : zp[1]:41 , reg byte x , reg byte y , +Potential registers zp[2]:42 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] : zp[2]:42 , +Potential registers zp[1]:44 [ mulf_init::c#2 mulf_init::c#1 ] : zp[1]:44 , reg byte x , +Potential registers zp[2]:45 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] : zp[2]:45 , +Potential registers zp[1]:47 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] : zp[1]:47 , reg byte x , +Potential registers zp[2]:48 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] : zp[2]:48 , +Potential registers zp[1]:50 [ mulf_init::x_255#2 mulf_init::x_255#1 ] : zp[1]:50 , reg byte x , +Potential registers zp[2]:51 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] : zp[2]:51 , +Potential registers zp[1]:53 [ mulf_init::dir#2 mulf_init::dir#4 ] : zp[1]:53 , reg byte x , +Potential registers zp[2]:54 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] : zp[2]:54 , +Potential registers zp[2]:56 [ mulf8s::return#2 ] : zp[2]:56 , +Potential registers zp[2]:58 [ main::$10 ] : zp[2]:58 , +Potential registers zp[2]:60 [ main::x#0 ] : zp[2]:60 , +Potential registers zp[2]:62 [ mulf8s::return#3 ] : zp[2]:62 , +Potential registers zp[2]:64 [ main::$12 ] : zp[2]:64 , +Potential registers zp[2]:66 [ main::$13 ] : zp[2]:66 , +Potential registers zp[2]:68 [ main::y#0 ] : zp[2]:68 , +Potential registers zp[1]:70 [ renderBob::xpos#0 ] : zp[1]:70 , reg byte x , reg byte y , +Potential registers zp[1]:71 [ renderBob::ypos#0 ] : zp[1]:71 , reg byte x , reg byte y , +Potential registers zp[1]:72 [ keyboard_key_pressed::return#2 ] : zp[1]:72 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:73 [ main::$19 ] : zp[1]:73 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:74 [ keyboard_key_pressed::return#3 ] : zp[1]:74 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:75 [ main::$21 ] : zp[1]:75 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:76 [ keyboard_matrix_read::return#2 ] : zp[1]:76 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:77 [ keyboard_key_pressed::$2 ] : zp[1]:77 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:78 [ keyboard_key_pressed::return#0 ] : zp[1]:78 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:79 [ keyboard_matrix_read::return#0 ] : zp[1]:79 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:80 [ renderBob::x_char_offset#0 ] : zp[1]:80 , reg byte x , reg byte y , +Potential registers zp[1]:81 [ renderBob::y_char_offset#0 ] : zp[1]:81 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:82 [ renderBob::$8 ] : zp[1]:82 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:83 [ renderBob::y_offset#0 ] : zp[2]:83 , +Potential registers zp[2]:85 [ renderBob::$2 ] : zp[2]:85 , +Potential registers zp[2]:87 [ renderBob::screen#0 ] : zp[2]:87 , +Potential registers zp[1]:89 [ renderBob::$4 ] : zp[1]:89 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:90 [ renderBob::$5 ] : zp[1]:90 , reg byte x , reg byte y , +Potential registers zp[1]:91 [ renderBob::$6 ] : zp[1]:91 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:92 [ renderBob::bob_table_idx#0 ] : zp[1]:92 , reg byte x , +Potential registers zp[1]:93 [ mulf8u_prepare::a#0 ] : zp[1]:93 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:94 [ mulf8s_prepared::b#0 ] : zp[1]:94 , reg byte y , +Potential registers zp[2]:95 [ mulf8s::return#0 ] : zp[2]:95 , +Potential registers zp[1]:97 [ mulf8u_prepared::b#0 ] : zp[1]:97 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:98 [ mulf8u_prepared::return#2 ] : zp[2]:98 , +Potential registers zp[1]:100 [ mulf8s_prepared::$8 ] : zp[1]:100 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:101 [ mulf8s_prepared::$15 ] : zp[1]:101 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:102 [ mulf8s_prepared::$12 ] : zp[1]:102 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:103 [ mulf8s_prepared::$16 ] : zp[1]:103 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:104 [ mulf8u_prepared::return#0 ] : zp[2]:104 , +Potential registers zp[1]:106 [ renderBobCleanup::$1 ] : zp[1]:106 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:107 [ renderBobCleanup::screen#0 ] : zp[2]:107 , +Potential registers zp[2]:109 [ renderBobInit::$0 ] : zp[2]:109 , +Potential registers zp[2]:111 [ renderBobInit::$6 ] : zp[2]:111 , +Potential registers zp[2]:113 [ renderBobInit::$7 ] : zp[2]:113 , +Potential registers zp[2]:115 [ renderBobInit::$1 ] : zp[2]:115 , +Potential registers zp[1]:117 [ renderBobInit::$4 ] : zp[1]:117 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:118 [ renderBobInit::$5 ] : zp[1]:118 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:119 [ bobCharsetFindOrAddGlyph::return#1 ] : zp[1]:119 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:120 [ prepareBobs::$6 ] : zp[1]:120 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:121 [ shiftProtoBobRight::$1 ] : zp[1]:121 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:122 [ shiftProtoBobRight::$5 ] : zp[1]:122 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:123 [ shiftProtoBobRight::$6 ] : zp[1]:123 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:124 [ mulf_init::$1 ] : zp[1]:124 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:125 [ mulf_init::$4 ] : zp[1]:125 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:126 [ mulf_init::$5 ] : zp[1]:126 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [bobCharsetFindOrAddGlyph] 366,670.33: zp[1]:31 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] 36,670.33: zp[1]:30 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] 30,002.31: zp[2]:28 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] 11,938.75: zp[1]:27 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] 10,001: zp[1]:32 [ bobCharsetFindOrAddGlyph::found#2 ] 9,402.2: zp[2]:25 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] 2,002: zp[1]:111 [ bobCharsetFindOrAddGlyph::return#1 ] -Uplift Scope [shiftProtoBobRight] 5,705.7: zp[1]:34 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] 2,288: zp[1]:35 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] 2,002: zp[1]:113 [ shiftProtoBobRight::$1 ] 2,002: zp[1]:114 [ shiftProtoBobRight::$5 ] 2,002: zp[1]:115 [ shiftProtoBobRight::$6 ] 1,232: zp[1]:33 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] 111.22: zp[1]:36 [ shiftProtoBobRight::carry#1 ] -Uplift Scope [prepareBobs] 2,302.3: zp[1]:19 [ prepareBobs::cell#2 prepareBobs::cell#1 ] 2,002: zp[1]:112 [ prepareBobs::$6 ] 1,257.33: zp[2]:22 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] 929.5: zp[2]:20 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] 218.83: zp[1]:18 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] 70.52: zp[1]:17 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] 23.43: zp[1]:13 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Uplift Scope [] 2,729.71: zp[1]:24 [ 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 ] 338.4: zp[1]:16 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] 324.85: zp[2]:14 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] -Uplift Scope [mulf8s] 472: zp[1]:7 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] 404: zp[1]:6 [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] 202: zp[2]:52 [ mulf8s::return#2 ] 202: zp[2]:58 [ mulf8s::return#3 ] 51: zp[2]:91 [ mulf8s::return#0 ] -Uplift Scope [main] 202: zp[2]:54 [ main::$9 ] 202: zp[2]:60 [ main::$11 ] 202: zp[2]:62 [ main::$12 ] 161.12: zp[1]:5 [ main::i#2 main::i#1 ] 76.79: zp[1]:4 [ main::a#2 main::a#1 main::a#7 ] 57.43: zp[1]:3 [ main::r#2 main::r#1 ] 40.4: zp[2]:64 [ main::y#0 ] 22: zp[1]:69 [ main::$18 ] 22: zp[1]:71 [ main::$20 ] 18.36: zp[2]:56 [ main::x#0 ] 4.94: zp[1]:2 [ main::angle#6 main::angle#1 ] -Uplift Scope [shiftProtoBobDown] 363.6: zp[1]:37 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] -Uplift Scope [mulf_init] 47.67: zp[2]:50 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 26.89: zp[2]:44 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 25.14: zp[2]:38 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 23.1: zp[1]:43 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 22: zp[1]:116 [ mulf_init::$1 ] 22: zp[1]:117 [ mulf_init::$4 ] 22: zp[1]:118 [ mulf_init::$5 ] 15.4: zp[1]:46 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 15.12: zp[1]:49 [ mulf_init::dir#2 mulf_init::dir#4 ] 13.54: zp[1]:40 [ mulf_init::c#2 mulf_init::c#1 ] 11.92: zp[2]:47 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 10.08: zp[2]:41 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] -Uplift Scope [renderBobInit] 22: zp[2]:104 [ renderBobInit::$4 ] 22: zp[2]:106 [ renderBobInit::$5 ] 22: zp[1]:110 [ renderBobInit::$3 ] 21.21: zp[1]:12 [ renderBobInit::y#2 renderBobInit::y#1 ] 16.5: zp[2]:102 [ renderBobInit::$0 ] 11: zp[2]:108 [ renderBobInit::$1 ] -Uplift Scope [renderBob] 15: zp[1]:67 [ renderBob::ypos#0 ] 10.5: zp[1]:66 [ renderBob::xpos#0 ] 4: zp[1]:77 [ renderBob::y_char_offset#0 ] 4: zp[1]:78 [ renderBob::$8 ] 4: zp[2]:79 [ renderBob::y_offset#0 ] 4: zp[2]:81 [ renderBob::$2 ] 4: zp[1]:85 [ renderBob::$4 ] 4: zp[1]:87 [ renderBob::$6 ] 2.22: zp[1]:88 [ renderBob::bob_table_idx#0 ] 2: zp[1]:86 [ renderBob::$5 ] 1.54: zp[2]:83 [ renderBob::screen#0 ] 0.8: zp[1]:76 [ renderBob::x_char_offset#0 ] -Uplift Scope [keyboard_key_pressed] 22: zp[1]:68 [ keyboard_key_pressed::return#2 ] 22: zp[1]:70 [ keyboard_key_pressed::return#3 ] 6: zp[1]:74 [ keyboard_key_pressed::return#0 ] 4: zp[1]:73 [ keyboard_key_pressed::$2 ] -Uplift Scope [memset] 36.67: zp[2]:10 [ memset::dst#2 memset::dst#1 ] -Uplift Scope [mulf8s_prepared] 13.83: zp[2]:8 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] 4: zp[1]:96 [ mulf8s_prepared::$8 ] 4: zp[1]:97 [ mulf8s_prepared::$15 ] 4: zp[1]:98 [ mulf8s_prepared::$12 ] 4: zp[1]:99 [ mulf8s_prepared::$16 ] 0.4: zp[1]:90 [ mulf8s_prepared::b#0 ] -Uplift Scope [mulf8u_prepared] 4: zp[1]:93 [ mulf8u_prepared::b#0 ] 4: zp[2]:94 [ mulf8u_prepared::return#2 ] 1.33: zp[2]:100 [ mulf8u_prepared::return#0 ] -Uplift Scope [keyboard_matrix_read] 4: zp[1]:72 [ keyboard_matrix_read::return#2 ] 1.33: zp[1]:75 [ keyboard_matrix_read::return#0 ] -Uplift Scope [mulf8u_prepare] 4: zp[1]:89 [ mulf8u_prepare::a#0 ] +Uplift Scope [bobCharsetFindOrAddGlyph] 366,670.33: zp[1]:35 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] 36,670.33: zp[1]:34 [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] 30,002.31: zp[2]:32 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] 11,938.75: zp[1]:31 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] 10,001: zp[1]:36 [ bobCharsetFindOrAddGlyph::found#2 ] 9,402.2: zp[2]:29 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] 2,002: zp[1]:119 [ bobCharsetFindOrAddGlyph::return#1 ] +Uplift Scope [shiftProtoBobRight] 5,705.7: zp[1]:38 [ shiftProtoBobRight::j#3 shiftProtoBobRight::j#10 shiftProtoBobRight::j#2 shiftProtoBobRight::j#1 ] 2,288: zp[1]:39 [ shiftProtoBobRight::carry#2 shiftProtoBobRight::carry#10 ] 2,002: zp[1]:121 [ shiftProtoBobRight::$1 ] 2,002: zp[1]:122 [ shiftProtoBobRight::$5 ] 2,002: zp[1]:123 [ shiftProtoBobRight::$6 ] 1,232: zp[1]:37 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] 111.22: zp[1]:40 [ shiftProtoBobRight::carry#1 ] +Uplift Scope [prepareBobs] 2,302.3: zp[1]:23 [ prepareBobs::cell#2 prepareBobs::cell#1 ] 2,002: zp[1]:120 [ prepareBobs::$6 ] 1,257.33: zp[2]:26 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] 929.5: zp[2]:24 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] 218.83: zp[1]:22 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] 70.52: zp[1]:21 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] 23.43: zp[1]:17 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Uplift Scope [] 2,729.71: zp[1]:28 [ 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 ] 338.4: zp[1]:20 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] 324.85: zp[2]:18 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] 10.74: zp[2]:5 [ renderBobCleanupNext#17 renderBobCleanupNext#13 ] +Uplift Scope [mulf8s] 472: zp[1]:9 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] 404: zp[1]:8 [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] 202: zp[2]:56 [ mulf8s::return#2 ] 202: zp[2]:62 [ mulf8s::return#3 ] 51: zp[2]:95 [ mulf8s::return#0 ] +Uplift Scope [main] 202: zp[2]:58 [ main::$10 ] 202: zp[2]:64 [ main::$12 ] 202: zp[2]:66 [ main::$13 ] 161.12: zp[1]:7 [ main::i#2 main::i#1 ] 76.79: zp[1]:4 [ main::a#2 main::a#6 main::a#1 ] 57.43: zp[1]:3 [ main::r#2 main::r#1 ] 40.4: zp[2]:68 [ main::y#0 ] 22: zp[1]:73 [ main::$19 ] 22: zp[1]:75 [ main::$21 ] 18.36: zp[2]:60 [ main::x#0 ] 4.85: zp[1]:2 [ main::angle#8 main::angle#1 ] +Uplift Scope [renderBobCleanup] 202: zp[1]:106 [ renderBobCleanup::$1 ] 176.75: zp[1]:12 [ renderBobCleanup::i#2 renderBobCleanup::i#1 ] 112.22: zp[2]:107 [ renderBobCleanup::screen#0 ] +Uplift Scope [shiftProtoBobDown] 363.6: zp[1]:41 [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] +Uplift Scope [mulf_init] 47.67: zp[2]:54 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 26.89: zp[2]:48 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 25.14: zp[2]:42 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 23.1: zp[1]:47 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 22: zp[1]:124 [ mulf_init::$1 ] 22: zp[1]:125 [ mulf_init::$4 ] 22: zp[1]:126 [ mulf_init::$5 ] 15.4: zp[1]:50 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 15.12: zp[1]:53 [ mulf_init::dir#2 mulf_init::dir#4 ] 13.54: zp[1]:44 [ mulf_init::c#2 mulf_init::c#1 ] 11.92: zp[2]:51 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 10.08: zp[2]:45 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Uplift Scope [renderBobInit] 27.5: zp[1]:16 [ renderBobInit::i#2 renderBobInit::i#1 ] 22: zp[2]:111 [ renderBobInit::$6 ] 22: zp[2]:113 [ renderBobInit::$7 ] 22: zp[1]:117 [ renderBobInit::$4 ] 22: zp[1]:118 [ renderBobInit::$5 ] 21.21: zp[1]:15 [ renderBobInit::y#2 renderBobInit::y#1 ] 16.5: zp[2]:109 [ renderBobInit::$0 ] 11: zp[2]:115 [ renderBobInit::$1 ] +Uplift Scope [renderBob] 15: zp[1]:71 [ renderBob::ypos#0 ] 10.5: zp[1]:70 [ renderBob::xpos#0 ] 4: zp[1]:81 [ renderBob::y_char_offset#0 ] 4: zp[1]:82 [ renderBob::$8 ] 4: zp[2]:83 [ renderBob::y_offset#0 ] 4: zp[2]:85 [ renderBob::$2 ] 4: zp[1]:89 [ renderBob::$4 ] 4: zp[1]:91 [ renderBob::$6 ] 2: zp[1]:90 [ renderBob::$5 ] 1.82: zp[1]:92 [ renderBob::bob_table_idx#0 ] 1.47: zp[2]:87 [ renderBob::screen#0 ] 0.8: zp[1]:80 [ renderBob::x_char_offset#0 ] +Uplift Scope [keyboard_key_pressed] 22: zp[1]:72 [ keyboard_key_pressed::return#2 ] 22: zp[1]:74 [ keyboard_key_pressed::return#3 ] 6: zp[1]:78 [ keyboard_key_pressed::return#0 ] 4: zp[1]:77 [ keyboard_key_pressed::$2 ] +Uplift Scope [memset] 36.67: zp[2]:13 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [mulf8s_prepared] 13.83: zp[2]:10 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] 4: zp[1]:100 [ mulf8s_prepared::$8 ] 4: zp[1]:101 [ mulf8s_prepared::$15 ] 4: zp[1]:102 [ mulf8s_prepared::$12 ] 4: zp[1]:103 [ mulf8s_prepared::$16 ] 0.4: zp[1]:94 [ mulf8s_prepared::b#0 ] +Uplift Scope [mulf8u_prepared] 4: zp[1]:97 [ mulf8u_prepared::b#0 ] 4: zp[2]:98 [ mulf8u_prepared::return#2 ] 1.33: zp[2]:104 [ mulf8u_prepared::return#0 ] +Uplift Scope [keyboard_matrix_read] 4: zp[1]:76 [ keyboard_matrix_read::return#2 ] 1.33: zp[1]:79 [ keyboard_matrix_read::return#0 ] +Uplift Scope [mulf8u_prepare] 4: zp[1]:93 [ mulf8u_prepare::a#0 ] Uplift Scope [RADIX] Uplift Scope [progress_init] Uplift Scope [progress_inc] -Uplifting [bobCharsetFindOrAddGlyph] best 6285979 combination zp[1]:31 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] reg byte y [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] zp[2]:28 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] zp[1]:27 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] reg byte a [ bobCharsetFindOrAddGlyph::found#2 ] zp[2]:25 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] reg byte a [ bobCharsetFindOrAddGlyph::return#1 ] -Uplifting [shiftProtoBobRight] best 6247979 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]:115 [ shiftProtoBobRight::$6 ] zp[1]:33 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] zp[1]:36 [ shiftProtoBobRight::carry#1 ] +Uplifting [bobCharsetFindOrAddGlyph] best 6301828 combination zp[1]:35 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] reg byte y [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] zp[2]:32 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] zp[1]:31 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] reg byte a [ bobCharsetFindOrAddGlyph::found#2 ] zp[2]:29 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] reg byte a [ bobCharsetFindOrAddGlyph::return#1 ] +Uplifting [shiftProtoBobRight] best 6263828 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]:123 [ shiftProtoBobRight::$6 ] zp[1]:37 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] zp[1]:40 [ shiftProtoBobRight::carry#1 ] Limited combination testing to 100 combinations of 5184 possible. -Uplifting [prepareBobs] best 6241979 combination zp[1]:19 [ prepareBobs::cell#2 prepareBobs::cell#1 ] reg byte a [ prepareBobs::$6 ] zp[2]:22 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] zp[2]:20 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] zp[1]:18 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] zp[1]:17 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] zp[1]:13 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Uplifting [] best 6241979 combination zp[1]:24 [ 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 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] zp[2]:14 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] -Uplifting [mulf8s] best 6240773 combination reg byte x [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] reg byte a [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] zp[2]:52 [ mulf8s::return#2 ] zp[2]:58 [ mulf8s::return#3 ] zp[2]:91 [ mulf8s::return#0 ] -Uplifting [main] best 6240653 combination zp[2]:54 [ main::$9 ] zp[2]:60 [ main::$11 ] zp[2]:62 [ main::$12 ] zp[1]:5 [ main::i#2 main::i#1 ] zp[1]:4 [ main::a#2 main::a#1 main::a#7 ] zp[1]:3 [ main::r#2 main::r#1 ] zp[2]:64 [ main::y#0 ] reg byte a [ main::$18 ] reg byte a [ main::$20 ] zp[2]:56 [ main::x#0 ] zp[1]:2 [ main::angle#6 main::angle#1 ] -Uplifting [shiftProtoBobDown] best 6239053 combination reg byte x [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] -Uplifting [mulf_init] best 6238803 combination zp[2]:50 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp[2]:44 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp[2]:38 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$1 ] reg byte a [ mulf_init::$4 ] reg byte a [ mulf_init::$5 ] zp[1]:46 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp[1]:49 [ mulf_init::dir#2 mulf_init::dir#4 ] zp[1]:40 [ mulf_init::c#2 mulf_init::c#1 ] zp[2]:47 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp[2]:41 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Uplifting [prepareBobs] best 6257828 combination zp[1]:23 [ prepareBobs::cell#2 prepareBobs::cell#1 ] reg byte a [ prepareBobs::$6 ] zp[2]:26 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] zp[2]:24 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] zp[1]:22 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] zp[1]:21 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] zp[1]:17 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Uplifting [] best 6257828 combination zp[1]:28 [ 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]:20 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] zp[2]:18 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] zp[2]:5 [ renderBobCleanupNext#17 renderBobCleanupNext#13 ] +Uplifting [mulf8s] best 6256622 combination reg byte x [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] reg byte a [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] zp[2]:56 [ mulf8s::return#2 ] zp[2]:62 [ mulf8s::return#3 ] zp[2]:95 [ mulf8s::return#0 ] +Uplifting [main] best 6256502 combination zp[2]:58 [ main::$10 ] zp[2]:64 [ main::$12 ] zp[2]:66 [ main::$13 ] zp[1]:7 [ main::i#2 main::i#1 ] zp[1]:4 [ main::a#2 main::a#6 main::a#1 ] zp[1]:3 [ main::r#2 main::r#1 ] zp[2]:68 [ main::y#0 ] reg byte a [ main::$19 ] reg byte a [ main::$21 ] zp[2]:60 [ main::x#0 ] zp[1]:2 [ main::angle#8 main::angle#1 ] +Uplifting [renderBobCleanup] best 6255102 combination reg byte a [ renderBobCleanup::$1 ] reg byte x [ renderBobCleanup::i#2 renderBobCleanup::i#1 ] zp[2]:107 [ renderBobCleanup::screen#0 ] +Uplifting [shiftProtoBobDown] best 6253502 combination reg byte x [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] +Uplifting [mulf_init] best 6253252 combination zp[2]:54 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp[2]:48 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp[2]:42 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$1 ] reg byte a [ mulf_init::$4 ] reg byte a [ mulf_init::$5 ] zp[1]:50 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp[1]:53 [ mulf_init::dir#2 mulf_init::dir#4 ] zp[1]:44 [ mulf_init::c#2 mulf_init::c#1 ] zp[2]:51 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp[2]:45 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [renderBobInit] best 6238653 combination zp[2]:104 [ renderBobInit::$4 ] zp[2]:106 [ renderBobInit::$5 ] reg byte a [ renderBobInit::$3 ] reg byte x [ renderBobInit::y#2 renderBobInit::y#1 ] zp[2]:102 [ renderBobInit::$0 ] zp[2]:108 [ renderBobInit::$1 ] -Uplifting [renderBob] best 6238539 combination reg byte x [ renderBob::ypos#0 ] zp[1]:66 [ renderBob::xpos#0 ] reg byte a [ renderBob::y_char_offset#0 ] reg byte a [ renderBob::$8 ] zp[2]:79 [ renderBob::y_offset#0 ] zp[2]:81 [ renderBob::$2 ] zp[1]:85 [ renderBob::$4 ] zp[1]:87 [ renderBob::$6 ] zp[1]:88 [ renderBob::bob_table_idx#0 ] zp[1]:86 [ renderBob::$5 ] zp[2]:83 [ renderBob::screen#0 ] zp[1]:76 [ renderBob::x_char_offset#0 ] +Uplifting [renderBobInit] best 6252962 combination reg byte x [ renderBobInit::i#2 renderBobInit::i#1 ] zp[2]:111 [ renderBobInit::$6 ] zp[2]:113 [ renderBobInit::$7 ] reg byte a [ renderBobInit::$4 ] reg byte a [ renderBobInit::$5 ] reg byte x [ renderBobInit::y#2 renderBobInit::y#1 ] zp[2]:109 [ renderBobInit::$0 ] zp[2]:115 [ renderBobInit::$1 ] +Limited combination testing to 100 combinations of 144 possible. +Uplifting [renderBob] best 6252848 combination reg byte x [ renderBob::ypos#0 ] zp[1]:70 [ renderBob::xpos#0 ] reg byte a [ renderBob::y_char_offset#0 ] reg byte a [ renderBob::$8 ] zp[2]:83 [ renderBob::y_offset#0 ] zp[2]:85 [ renderBob::$2 ] zp[1]:89 [ renderBob::$4 ] zp[1]:91 [ renderBob::$6 ] zp[1]:90 [ renderBob::$5 ] zp[1]:92 [ renderBob::bob_table_idx#0 ] zp[2]:87 [ renderBob::screen#0 ] zp[1]:80 [ renderBob::x_char_offset#0 ] Limited combination testing to 100 combinations of 41472 possible. -Uplifting [keyboard_key_pressed] best 6238350 combination reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#3 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::$2 ] +Uplifting [keyboard_key_pressed] best 6252659 combination reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#3 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::$2 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [memset] best 6238350 combination zp[2]:10 [ memset::dst#2 memset::dst#1 ] -Uplifting [mulf8s_prepared] best 6238326 combination zp[2]:8 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] reg byte a [ mulf8s_prepared::$8 ] reg byte a [ mulf8s_prepared::$15 ] reg byte a [ mulf8s_prepared::$12 ] reg byte a [ mulf8s_prepared::$16 ] zp[1]:90 [ mulf8s_prepared::b#0 ] +Uplifting [memset] best 6252659 combination zp[2]:13 [ memset::dst#2 memset::dst#1 ] +Uplifting [mulf8s_prepared] best 6252635 combination zp[2]:10 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] reg byte a [ mulf8s_prepared::$8 ] reg byte a [ mulf8s_prepared::$15 ] reg byte a [ mulf8s_prepared::$12 ] reg byte a [ mulf8s_prepared::$16 ] zp[1]:94 [ mulf8s_prepared::b#0 ] Limited combination testing to 100 combinations of 512 possible. -Uplifting [mulf8u_prepared] best 6238320 combination reg byte a [ mulf8u_prepared::b#0 ] zp[2]:94 [ mulf8u_prepared::return#2 ] zp[2]:100 [ mulf8u_prepared::return#0 ] -Uplifting [keyboard_matrix_read] best 6238308 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte a [ keyboard_matrix_read::return#0 ] -Uplifting [mulf8u_prepare] best 6238302 combination reg byte a [ mulf8u_prepare::a#0 ] -Uplifting [RADIX] best 6238302 combination -Uplifting [progress_init] best 6238302 combination -Uplifting [progress_inc] best 6238302 combination -Attempting to uplift remaining variables inzp[1]:31 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -Uplifting [bobCharsetFindOrAddGlyph] best 6238302 combination zp[1]:31 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -Attempting to uplift remaining variables inzp[1]:27 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] -Uplifting [bobCharsetFindOrAddGlyph] best 6238302 combination zp[1]:27 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] -Attempting to uplift remaining variables inzp[1]:24 [ 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 6238302 combination zp[1]:24 [ 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]:19 [ prepareBobs::cell#2 prepareBobs::cell#1 ] -Uplifting [prepareBobs] best 6238302 combination zp[1]:19 [ prepareBobs::cell#2 prepareBobs::cell#1 ] -Attempting to uplift remaining variables inzp[1]:115 [ shiftProtoBobRight::$6 ] -Uplifting [shiftProtoBobRight] best 6232302 combination reg byte a [ shiftProtoBobRight::$6 ] -Attempting to uplift remaining variables inzp[1]:33 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] -Uplifting [shiftProtoBobRight] best 6232302 combination zp[1]:33 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] -Attempting to uplift remaining variables inzp[1]:16 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] -Uplifting [] best 6232302 combination zp[1]:16 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] -Attempting to uplift remaining variables inzp[1]:18 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] -Uplifting [prepareBobs] best 6232302 combination zp[1]:18 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] -Attempting to uplift remaining variables inzp[1]:5 [ main::i#2 main::i#1 ] -Uplifting [main] best 6232302 combination zp[1]:5 [ main::i#2 main::i#1 ] -Attempting to uplift remaining variables inzp[1]:36 [ shiftProtoBobRight::carry#1 ] -Uplifting [shiftProtoBobRight] best 6232302 combination zp[1]:36 [ shiftProtoBobRight::carry#1 ] -Attempting to uplift remaining variables inzp[1]:4 [ main::a#2 main::a#1 main::a#7 ] -Uplifting [main] best 6232302 combination zp[1]:4 [ main::a#2 main::a#1 main::a#7 ] -Attempting to uplift remaining variables inzp[1]:17 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] -Uplifting [prepareBobs] best 6232302 combination zp[1]:17 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] +Uplifting [mulf8u_prepared] best 6252629 combination reg byte a [ mulf8u_prepared::b#0 ] zp[2]:98 [ mulf8u_prepared::return#2 ] zp[2]:104 [ mulf8u_prepared::return#0 ] +Uplifting [keyboard_matrix_read] best 6252617 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte a [ keyboard_matrix_read::return#0 ] +Uplifting [mulf8u_prepare] best 6252611 combination reg byte a [ mulf8u_prepare::a#0 ] +Uplifting [RADIX] best 6252611 combination +Uplifting [progress_init] best 6252611 combination +Uplifting [progress_inc] best 6252611 combination +Attempting to uplift remaining variables inzp[1]:35 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +Uplifting [bobCharsetFindOrAddGlyph] best 6252611 combination zp[1]:35 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +Attempting to uplift remaining variables inzp[1]:31 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +Uplifting [bobCharsetFindOrAddGlyph] best 6252611 combination zp[1]:31 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +Attempting to uplift remaining variables inzp[1]:28 [ 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 6252611 combination zp[1]:28 [ 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]:23 [ prepareBobs::cell#2 prepareBobs::cell#1 ] +Uplifting [prepareBobs] best 6252611 combination zp[1]:23 [ prepareBobs::cell#2 prepareBobs::cell#1 ] +Attempting to uplift remaining variables inzp[1]:123 [ shiftProtoBobRight::$6 ] +Uplifting [shiftProtoBobRight] best 6246611 combination reg byte a [ shiftProtoBobRight::$6 ] +Attempting to uplift remaining variables inzp[1]:37 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] +Uplifting [shiftProtoBobRight] best 6246611 combination zp[1]:37 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] +Attempting to uplift remaining variables inzp[1]:20 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] +Uplifting [] best 6246611 combination zp[1]:20 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] +Attempting to uplift remaining variables inzp[1]:22 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] +Uplifting [prepareBobs] best 6246611 combination zp[1]:22 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] +Attempting to uplift remaining variables inzp[1]:7 [ main::i#2 main::i#1 ] +Uplifting [main] best 6246611 combination zp[1]:7 [ main::i#2 main::i#1 ] +Attempting to uplift remaining variables inzp[1]:40 [ shiftProtoBobRight::carry#1 ] +Uplifting [shiftProtoBobRight] best 6246611 combination zp[1]:40 [ shiftProtoBobRight::carry#1 ] +Attempting to uplift remaining variables inzp[1]:4 [ main::a#2 main::a#6 main::a#1 ] +Uplifting [main] best 6246611 combination zp[1]:4 [ main::a#2 main::a#6 main::a#1 ] +Attempting to uplift remaining variables inzp[1]:21 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] +Uplifting [prepareBobs] best 6246611 combination zp[1]:21 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] Attempting to uplift remaining variables inzp[1]:3 [ main::r#2 main::r#1 ] -Uplifting [main] best 6232302 combination zp[1]:3 [ main::r#2 main::r#1 ] -Attempting to uplift remaining variables inzp[1]:13 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Uplifting [prepareBobs] best 6232302 combination zp[1]:13 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] -Attempting to uplift remaining variables inzp[1]:46 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Uplifting [mulf_init] best 6232162 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Attempting to uplift remaining variables inzp[1]:49 [ mulf_init::dir#2 mulf_init::dir#4 ] -Uplifting [mulf_init] best 6232162 combination zp[1]:49 [ mulf_init::dir#2 mulf_init::dir#4 ] -Attempting to uplift remaining variables inzp[1]:40 [ mulf_init::c#2 mulf_init::c#1 ] -Uplifting [mulf_init] best 6232162 combination zp[1]:40 [ mulf_init::c#2 mulf_init::c#1 ] -Attempting to uplift remaining variables inzp[1]:66 [ renderBob::xpos#0 ] -Uplifting [renderBob] best 6232162 combination zp[1]:66 [ renderBob::xpos#0 ] -Attempting to uplift remaining variables inzp[1]:2 [ main::angle#6 main::angle#1 ] -Uplifting [main] best 6232162 combination zp[1]:2 [ main::angle#6 main::angle#1 ] -Attempting to uplift remaining variables inzp[1]:85 [ renderBob::$4 ] -Uplifting [renderBob] best 6232158 combination reg byte a [ renderBob::$4 ] -Attempting to uplift remaining variables inzp[1]:87 [ renderBob::$6 ] -Uplifting [renderBob] best 6232152 combination reg byte a [ renderBob::$6 ] -Attempting to uplift remaining variables inzp[1]:88 [ renderBob::bob_table_idx#0 ] -Uplifting [renderBob] best 6232124 combination reg byte x [ renderBob::bob_table_idx#0 ] -Attempting to uplift remaining variables inzp[1]:86 [ renderBob::$5 ] -Uplifting [renderBob] best 6232124 combination zp[1]:86 [ renderBob::$5 ] -Attempting to uplift remaining variables inzp[1]:76 [ renderBob::x_char_offset#0 ] -Uplifting [renderBob] best 6232124 combination zp[1]:76 [ renderBob::x_char_offset#0 ] -Attempting to uplift remaining variables inzp[1]:90 [ mulf8s_prepared::b#0 ] -Uplifting [mulf8s_prepared] best 6232124 combination zp[1]:90 [ mulf8s_prepared::b#0 ] -Coalescing zero page register [ zp[2]:8 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] ] with [ zp[2]:91 [ mulf8s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:8 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 ] ] with [ zp[2]:94 [ mulf8u_prepared::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:20 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] ] with [ zp[2]:25 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:52 [ mulf8s::return#2 ] ] with [ zp[2]:54 [ main::$9 ] ] - score: 1 -Coalescing zero page register [ zp[2]:58 [ mulf8s::return#3 ] ] with [ zp[2]:60 [ main::$11 ] ] - score: 1 -Coalescing zero page register [ zp[2]:62 [ main::$12 ] ] with [ zp[2]:64 [ main::y#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:79 [ renderBob::y_offset#0 ] ] with [ zp[2]:81 [ renderBob::$2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:102 [ renderBobInit::$0 ] ] with [ zp[2]:106 [ renderBobInit::$5 ] ] - score: 1 -Coalescing zero page register [ zp[2]:8 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 ] ] with [ zp[2]:52 [ mulf8s::return#2 main::$9 ] ] - score: 1 -Coalescing zero page register [ zp[2]:8 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$9 ] ] with [ zp[2]:58 [ mulf8s::return#3 main::$11 ] ] - score: 1 -Coalescing zero page register [ zp[2]:8 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$9 mulf8s::return#3 main::$11 ] ] with [ zp[2]:100 [ mulf8u_prepared::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:79 [ renderBob::y_offset#0 renderBob::$2 ] ] with [ zp[2]:83 [ renderBob::screen#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:102 [ renderBobInit::$0 renderBobInit::$5 ] ] with [ zp[2]:108 [ renderBobInit::$1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:8 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$9 mulf8s::return#3 main::$11 mulf8u_prepared::return#0 ] ] with [ zp[2]:62 [ main::$12 main::y#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:10 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:8 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$9 mulf8s::return#3 main::$11 mulf8u_prepared::return#0 main::$12 main::y#0 ] ] -Coalescing zero page register [ zp[1]:13 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] ] with [ zp[1]:2 [ main::angle#6 main::angle#1 ] ] -Coalescing zero page register [ zp[1]:16 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] ] with [ zp[1]:3 [ main::r#2 main::r#1 ] ] -Coalescing zero page register [ zp[1]:17 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] ] with [ zp[1]:4 [ main::a#2 main::a#1 main::a#7 ] ] -Coalescing zero page register [ zp[1]:18 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] ] with [ zp[1]:5 [ main::i#2 main::i#1 ] ] -Coalescing zero page register [ zp[1]:33 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] ] with [ zp[1]:19 [ prepareBobs::cell#2 prepareBobs::cell#1 ] ] -Coalescing zero page register [ zp[1]:36 [ shiftProtoBobRight::carry#1 ] ] with [ zp[1]:27 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] ] -Coalescing zero page register [ zp[2]:38 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] ] with [ zp[2]:14 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] ] -Coalescing zero page register [ zp[1]:40 [ mulf_init::c#2 mulf_init::c#1 ] ] with [ zp[1]:24 [ 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 ] ] -Coalescing zero page register [ zp[2]:41 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] ] with [ zp[2]:20 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ] -Coalescing zero page register [ zp[2]:44 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] ] with [ zp[2]:22 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] ] -Coalescing zero page register [ zp[2]:47 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ] with [ zp[2]:28 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] ] -Coalescing zero page register [ zp[1]:49 [ mulf_init::dir#2 mulf_init::dir#4 ] ] with [ zp[1]:31 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] ] -Coalescing zero page register [ zp[2]:56 [ main::x#0 ] ] with [ zp[2]:50 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] -Coalescing zero page register [ zp[1]:90 [ mulf8s_prepared::b#0 ] ] with [ zp[1]:66 [ renderBob::xpos#0 ] ] -Coalescing zero page register [ zp[2]:102 [ renderBobInit::$0 renderBobInit::$5 renderBobInit::$1 ] ] with [ zp[2]:79 [ renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 ] ] -Coalescing zero page register [ zp[2]:38 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] ] with [ zp[2]:10 [ memset::dst#2 memset::dst#1 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$9 mulf8s::return#3 main::$11 mulf8u_prepared::return#0 main::$12 main::y#0 ] ] -Coalescing zero page register [ zp[1]:76 [ renderBob::x_char_offset#0 ] ] with [ zp[1]:33 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] ] -Coalescing zero page register [ zp[1]:86 [ renderBob::$5 ] ] with [ zp[1]:36 [ shiftProtoBobRight::carry#1 bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] ] -Coalescing zero page register [ zp[1]:90 [ mulf8s_prepared::b#0 renderBob::xpos#0 ] ] with [ zp[1]:40 [ mulf_init::c#2 mulf_init::c#1 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 ] ] -Coalescing zero page register [ zp[2]:102 [ renderBobInit::$0 renderBobInit::$5 renderBobInit::$1 renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 ] ] with [ zp[2]:41 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ] -Coalescing zero page register [ zp[2]:104 [ renderBobInit::$4 ] ] with [ zp[2]:44 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] ] -Allocated (was zp[1]:13) zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::angle#6 main::angle#1 ] -Allocated (was zp[1]:16) zp[1]:3 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 main::r#2 main::r#1 ] -Allocated (was zp[1]:17) zp[1]:4 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 main::a#2 main::a#1 main::a#7 ] -Allocated (was zp[1]:18) zp[1]:5 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 main::i#2 main::i#1 ] -Allocated (was zp[2]:38) zp[2]:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 memset::dst#2 memset::dst#1 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$9 mulf8s::return#3 main::$11 mulf8u_prepared::return#0 main::$12 main::y#0 ] -Allocated (was zp[2]:47) zp[2]:8 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] -Allocated (was zp[1]:49) zp[1]:10 [ mulf_init::dir#2 mulf_init::dir#4 bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -Allocated (was zp[2]:56) zp[2]:11 [ main::x#0 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] -Allocated (was zp[1]:76) zp[1]:13 [ renderBob::x_char_offset#0 shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] -Allocated (was zp[1]:86) zp[1]:14 [ renderBob::$5 shiftProtoBobRight::carry#1 bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] -Allocated (was zp[1]:90) zp[1]:15 [ mulf8s_prepared::b#0 renderBob::xpos#0 mulf_init::c#2 mulf_init::c#1 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[2]:102) zp[2]:16 [ renderBobInit::$0 renderBobInit::$5 renderBobInit::$1 renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] -Allocated (was zp[2]:104) zp[2]:18 [ renderBobInit::$4 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] +Uplifting [main] best 6246611 combination zp[1]:3 [ main::r#2 main::r#1 ] +Attempting to uplift remaining variables inzp[1]:17 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Uplifting [prepareBobs] best 6246611 combination zp[1]:17 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] +Attempting to uplift remaining variables inzp[1]:50 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Uplifting [mulf_init] best 6246471 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Attempting to uplift remaining variables inzp[1]:53 [ mulf_init::dir#2 mulf_init::dir#4 ] +Uplifting [mulf_init] best 6246471 combination zp[1]:53 [ mulf_init::dir#2 mulf_init::dir#4 ] +Attempting to uplift remaining variables inzp[1]:44 [ mulf_init::c#2 mulf_init::c#1 ] +Uplifting [mulf_init] best 6246471 combination zp[1]:44 [ mulf_init::c#2 mulf_init::c#1 ] +Attempting to uplift remaining variables inzp[1]:70 [ renderBob::xpos#0 ] +Uplifting [renderBob] best 6246471 combination zp[1]:70 [ renderBob::xpos#0 ] +Attempting to uplift remaining variables inzp[1]:2 [ main::angle#8 main::angle#1 ] +Uplifting [main] best 6246471 combination zp[1]:2 [ main::angle#8 main::angle#1 ] +Attempting to uplift remaining variables inzp[1]:89 [ renderBob::$4 ] +Uplifting [renderBob] best 6246467 combination reg byte a [ renderBob::$4 ] +Attempting to uplift remaining variables inzp[1]:91 [ renderBob::$6 ] +Uplifting [renderBob] best 6246461 combination reg byte a [ renderBob::$6 ] +Attempting to uplift remaining variables inzp[1]:90 [ renderBob::$5 ] +Uplifting [renderBob] best 6246461 combination zp[1]:90 [ renderBob::$5 ] +Attempting to uplift remaining variables inzp[1]:92 [ renderBob::bob_table_idx#0 ] +Uplifting [renderBob] best 6246433 combination reg byte x [ renderBob::bob_table_idx#0 ] +Attempting to uplift remaining variables inzp[1]:80 [ renderBob::x_char_offset#0 ] +Uplifting [renderBob] best 6246433 combination zp[1]:80 [ renderBob::x_char_offset#0 ] +Attempting to uplift remaining variables inzp[1]:94 [ mulf8s_prepared::b#0 ] +Uplifting [mulf8s_prepared] best 6246433 combination zp[1]:94 [ mulf8s_prepared::b#0 ] +Coalescing zero page register [ zp[2]:10 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] ] with [ zp[2]:95 [ mulf8s::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:10 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 ] ] with [ zp[2]:98 [ mulf8u_prepared::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:24 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] ] with [ zp[2]:29 [ bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:56 [ mulf8s::return#2 ] ] with [ zp[2]:58 [ main::$10 ] ] - score: 1 +Coalescing zero page register [ zp[2]:62 [ mulf8s::return#3 ] ] with [ zp[2]:64 [ main::$12 ] ] - score: 1 +Coalescing zero page register [ zp[2]:66 [ main::$13 ] ] with [ zp[2]:68 [ main::y#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:83 [ renderBob::y_offset#0 ] ] with [ zp[2]:85 [ renderBob::$2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:109 [ renderBobInit::$0 ] ] with [ zp[2]:113 [ renderBobInit::$7 ] ] - score: 1 +Coalescing zero page register [ zp[2]:10 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 ] ] with [ zp[2]:56 [ mulf8s::return#2 main::$10 ] ] - score: 1 +Coalescing zero page register [ zp[2]:10 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$10 ] ] with [ zp[2]:62 [ mulf8s::return#3 main::$12 ] ] - score: 1 +Coalescing zero page register [ zp[2]:10 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$10 mulf8s::return#3 main::$12 ] ] with [ zp[2]:104 [ mulf8u_prepared::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:83 [ renderBob::y_offset#0 renderBob::$2 ] ] with [ zp[2]:87 [ renderBob::screen#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:109 [ renderBobInit::$0 renderBobInit::$7 ] ] with [ zp[2]:115 [ renderBobInit::$1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:10 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$10 mulf8s::return#3 main::$12 mulf8u_prepared::return#0 ] ] with [ zp[2]:66 [ main::$13 main::y#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:13 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:5 [ renderBobCleanupNext#17 renderBobCleanupNext#13 ] ] +Coalescing zero page register [ zp[1]:17 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] ] with [ zp[1]:2 [ main::angle#8 main::angle#1 ] ] +Coalescing zero page register [ zp[2]:18 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] ] with [ zp[2]:10 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$10 mulf8s::return#3 main::$12 mulf8u_prepared::return#0 main::$13 main::y#0 ] ] +Coalescing zero page register [ zp[1]:20 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] ] with [ zp[1]:3 [ main::r#2 main::r#1 ] ] +Coalescing zero page register [ zp[1]:21 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] ] with [ zp[1]:4 [ main::a#2 main::a#6 main::a#1 ] ] +Coalescing zero page register [ zp[1]:22 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] ] with [ zp[1]:7 [ main::i#2 main::i#1 ] ] +Coalescing zero page register [ zp[1]:37 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 ] ] with [ zp[1]:23 [ prepareBobs::cell#2 prepareBobs::cell#1 ] ] +Coalescing zero page register [ zp[1]:40 [ shiftProtoBobRight::carry#1 ] ] with [ zp[1]:31 [ bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] ] +Coalescing zero page register [ zp[2]:42 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] ] with [ zp[2]:24 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ] +Coalescing zero page register [ zp[1]:44 [ mulf_init::c#2 mulf_init::c#1 ] ] with [ zp[1]:28 [ 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 ] ] +Coalescing zero page register [ zp[2]:45 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] ] with [ zp[2]:26 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] ] +Coalescing zero page register [ zp[2]:48 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] ] with [ zp[2]:32 [ bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] ] +Coalescing zero page register [ zp[1]:53 [ mulf_init::dir#2 mulf_init::dir#4 ] ] with [ zp[1]:35 [ bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] ] +Coalescing zero page register [ zp[2]:60 [ main::x#0 ] ] with [ zp[2]:51 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ] +Coalescing zero page register [ zp[2]:83 [ renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 ] ] with [ zp[2]:54 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] +Coalescing zero page register [ zp[1]:94 [ mulf8s_prepared::b#0 ] ] with [ zp[1]:70 [ renderBob::xpos#0 ] ] +Coalescing zero page register [ zp[2]:109 [ renderBobInit::$0 renderBobInit::$7 renderBobInit::$1 ] ] with [ zp[2]:107 [ renderBobCleanup::screen#0 ] ] +Coalescing zero page register [ zp[2]:42 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] ] with [ zp[2]:13 [ memset::dst#2 memset::dst#1 renderBobCleanupNext#17 renderBobCleanupNext#13 ] ] +Coalescing zero page register [ zp[1]:80 [ renderBob::x_char_offset#0 ] ] with [ zp[1]:37 [ shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] ] +Coalescing zero page register [ zp[2]:83 [ renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] with [ zp[2]:18 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$10 mulf8s::return#3 main::$12 mulf8u_prepared::return#0 main::$13 main::y#0 ] ] +Coalescing zero page register [ zp[1]:90 [ renderBob::$5 ] ] with [ zp[1]:40 [ shiftProtoBobRight::carry#1 bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] ] +Coalescing zero page register [ zp[1]:94 [ mulf8s_prepared::b#0 renderBob::xpos#0 ] ] with [ zp[1]:44 [ mulf_init::c#2 mulf_init::c#1 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 ] ] +Coalescing zero page register [ zp[2]:109 [ renderBobInit::$0 renderBobInit::$7 renderBobInit::$1 renderBobCleanup::screen#0 ] ] with [ zp[2]:45 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] ] +Coalescing zero page register [ zp[2]:111 [ renderBobInit::$6 ] ] with [ zp[2]:48 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] ] +Allocated (was zp[1]:17) zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::angle#8 main::angle#1 ] +Allocated (was zp[1]:20) zp[1]:3 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 main::r#2 main::r#1 ] +Allocated (was zp[1]:21) zp[1]:4 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 main::a#2 main::a#6 main::a#1 ] +Allocated (was zp[1]:22) zp[1]:5 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 main::i#2 main::i#1 ] +Allocated (was zp[2]:42) zp[2]:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 memset::dst#2 memset::dst#1 renderBobCleanupNext#17 renderBobCleanupNext#13 ] +Allocated (was zp[1]:53) zp[1]:8 [ mulf_init::dir#2 mulf_init::dir#4 bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +Allocated (was zp[2]:60) zp[2]:9 [ main::x#0 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] +Allocated (was zp[1]:80) zp[1]:11 [ renderBob::x_char_offset#0 shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] +Allocated (was zp[2]:83) zp[2]:12 [ renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$10 mulf8s::return#3 main::$12 mulf8u_prepared::return#0 main::$13 main::y#0 ] +Allocated (was zp[1]:90) zp[1]:14 [ renderBob::$5 shiftProtoBobRight::carry#1 bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] +Allocated (was zp[1]:94) zp[1]:15 [ mulf8s_prepared::b#0 renderBob::xpos#0 mulf_init::c#2 mulf_init::c#1 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[2]:109) zp[2]:16 [ renderBobInit::$0 renderBobInit::$7 renderBobInit::$1 renderBobCleanup::screen#0 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] +Allocated (was zp[2]:111) zp[2]:18 [ renderBobInit::$6 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -7010,13 +7615,19 @@ ASSEMBLER BEFORE OPTIMIZATION .const BOB_SHIFTS_Y = 8 // The size of a sub-table of BOB_TABLES .const BOB_SUBTABLE_SIZE = BOB_SHIFTS_X*BOB_SHIFTS_Y + // The number of BOBs to render + .const NUM_BOBS = $14 + .const SIZEOF_POINTER = 2 .label COS = SIN+$40 // BOB charset ID of the next glyph to be added .label bob_charset_next_id = $f // Current index within the progress cursor (0-7) .label progress_idx = 3 // Current position of the progress cursor - .label progress_cursor = 6 + .label progress_cursor = $c + // Pointer to the next clean-up to add + // Prepare for next clean-up + .label renderBobCleanupNext = 6 // @begin __bbegin: jmp __b1 @@ -7047,18 +7658,18 @@ main: { .const vicSelectGfxBank2_toDd001_return = 3 .const toD0181_return = (>(BOB_SCREEN&$3fff)*4)|(>BOB_CHARSET)/4&$f .const toD0182_return = (>(SCREEN_BASIC&$3fff)*4)|(>CHARSET_BASIC)/4&$f - .label __9 = 6 - .label __11 = 6 - .label __12 = 6 - .label x = $b - .label y = 6 + .label __10 = $c + .label __12 = $c + .label __13 = $c + .label x = 9 + .label y = $c .label a = 4 .label r = 3 .label i = 5 // Render Rotated BOBs .label angle = 2 // [6] call mulf_init - // [219] phi from main to mulf_init [phi:main->mulf_init] + // [244] phi from main to mulf_init [phi:main->mulf_init] mulf_init_from_main: jsr mulf_init // [7] phi from main to main::@9 [phi:main->main::@9] @@ -7067,7 +7678,7 @@ main: { // main::@9 __b9: // [8] call prepareBobs - // [135] phi from main::@9 to prepareBobs [phi:main::@9->prepareBobs] + // [160] phi from main::@9 to prepareBobs [phi:main::@9->prepareBobs] prepareBobs_from___b9: jsr prepareBobs // [9] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -7076,7 +7687,7 @@ main: { // main::@10 __b10: // [10] call renderBobInit - // [124] phi from main::@10 to renderBobInit [phi:main::@10->renderBobInit] + // [144] phi from main::@10 to renderBobInit [phi:main::@10->renderBobInit] renderBobInit_from___b10: jsr renderBobInit jmp vicSelectGfxBank1 @@ -7108,12 +7719,12 @@ main: { lda #toD0181_return sta D018 // [16] call memset - // [118] phi from main::@7 to memset [phi:main::@7->memset] + // [138] phi from main::@7 to memset [phi:main::@7->memset] memset_from___b7: jsr memset // [17] phi from main::@7 to main::@1 [phi:main::@7->main::@1] __b1_from___b7: - // [17] phi (byte) main::angle#6 = (byte) 0 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 + // [17] phi (byte) main::angle#8 = (byte) 0 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z angle jmp __b1 @@ -7129,75 +7740,91 @@ main: { jmp __b3 // main::@3 __b3: - // [19] (byte) main::a#7 ← (byte) main::angle#6 -- vbuz1=vbuz2 - lda.z angle - sta.z a - // [20] phi from main::@3 to main::@4 [phi:main::@3->main::@4] - __b4_from___b3: - // [20] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@4#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - // [20] phi (byte) main::a#2 = (byte) main::a#7 [phi:main::@3->main::@4#1] -- register_copy - // [20] phi (signed byte) main::r#2 = (signed byte) $1e [phi:main::@3->main::@4#2] -- vbsz1=vbsc1 - lda #$1e - sta.z r - jmp __b4 - // [20] phi from main::@13 to main::@4 [phi:main::@13->main::@4] - __b4_from___b13: - // [20] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@13->main::@4#0] -- register_copy - // [20] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@13->main::@4#1] -- register_copy - // [20] phi (signed byte) main::r#2 = (signed byte) main::r#1 [phi:main::@13->main::@4#2] -- register_copy - jmp __b4 - // main::@4 - __b4: - // [21] *((const byte*) BORDERCOL) ← (byte) 1 -- _deref_pbuc1=vbuc2 - //kickasm {{ .break }} - lda #1 + // [19] *((const byte*) BORDERCOL) ← (byte) $f -- _deref_pbuc1=vbuc2 + lda #$f sta BORDERCOL - // [22] (signed byte) mulf8s::a#0 ← (signed byte) main::r#2 -- vbsaa=vbsz1 - lda.z r - // [23] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) main::a#2) -- vbsxx=pbsc1_derefidx_vbuz1 - ldy.z a - ldx COS,y - // [24] call mulf8s - // [89] phi from main::@4 to mulf8s [phi:main::@4->mulf8s] - mulf8s_from___b4: - // [89] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#0 [phi:main::@4->mulf8s#0] -- register_copy - // [89] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#0 [phi:main::@4->mulf8s#1] -- register_copy - jsr mulf8s - // [25] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 + // [20] call renderBobCleanup + // [122] phi from main::@3 to renderBobCleanup [phi:main::@3->renderBobCleanup] + renderBobCleanup_from___b3: + jsr renderBobCleanup jmp __b11 // main::@11 __b11: - // [26] (signed word~) main::$9 ← (signed word) mulf8s::return#2 - // [27] (signed word) main::x#0 ← (signed word~) main::$9 + (signed word)(number) $4b*(number) $100 -- vwsz1=vwsz2_plus_vwsc1 - lda.z __9 - clc - adc #<$4b*$100 - sta.z x - lda.z __9+1 - adc #>$4b*$100 - sta.z x+1 - // [28] (signed byte) mulf8s::a#1 ← (signed byte) main::r#2 -- vbsaa=vbsz1 + // [21] (byte) main::a#6 ← (byte) main::angle#8 -- vbuz1=vbuz2 + lda.z angle + sta.z a + // [22] phi from main::@11 to main::@4 [phi:main::@11->main::@4] + __b4_from___b11: + // [22] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@4#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // [22] phi (byte**) renderBobCleanupNext#17 = (const byte**) RENDERBOB_CLEANUP [phi:main::@11->main::@4#1] -- pptz1=pptc1 + lda #RENDERBOB_CLEANUP + sta.z renderBobCleanupNext+1 + // [22] phi (byte) main::a#2 = (byte) main::a#6 [phi:main::@11->main::@4#2] -- register_copy + // [22] phi (signed byte) main::r#2 = (signed byte) $1e [phi:main::@11->main::@4#3] -- vbsz1=vbsc1 + lda #$1e + sta.z r + jmp __b4 + // [22] phi from main::@14 to main::@4 [phi:main::@14->main::@4] + __b4_from___b14: + // [22] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@14->main::@4#0] -- register_copy + // [22] phi (byte**) renderBobCleanupNext#17 = (byte**) renderBobCleanupNext#13 [phi:main::@14->main::@4#1] -- register_copy + // [22] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@14->main::@4#2] -- register_copy + // [22] phi (signed byte) main::r#2 = (signed byte) main::r#1 [phi:main::@14->main::@4#3] -- register_copy + jmp __b4 + // main::@4 + __b4: + // [23] *((const byte*) BORDERCOL) ← (byte) 1 -- _deref_pbuc1=vbuc2 + //kickasm {{ .break }} + lda #1 + sta BORDERCOL + // [24] (signed byte) mulf8s::a#0 ← (signed byte) main::r#2 -- vbsaa=vbsz1 lda.z r - // [29] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#2) -- vbsxx=pbsc1_derefidx_vbuz1 + // [25] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) main::a#2) -- vbsxx=pbsc1_derefidx_vbuz1 ldy.z a - ldx SIN,y - // [30] call mulf8s - // [89] phi from main::@11 to mulf8s [phi:main::@11->mulf8s] - mulf8s_from___b11: - // [89] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#1 [phi:main::@11->mulf8s#0] -- register_copy - // [89] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#1 [phi:main::@11->mulf8s#1] -- register_copy + ldx COS,y + // [26] call mulf8s + // [93] phi from main::@4 to mulf8s [phi:main::@4->mulf8s] + mulf8s_from___b4: + // [93] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#0 [phi:main::@4->mulf8s#0] -- register_copy + // [93] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#0 [phi:main::@4->mulf8s#1] -- register_copy jsr mulf8s - // [31] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 + // [27] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 jmp __b12 // main::@12 __b12: - // [32] (signed word~) main::$11 ← (signed word) mulf8s::return#3 - // [33] (signed word~) main::$12 ← (signed word~) main::$11 << (byte) 1 -- vwsz1=vwsz1_rol_1 - asl.z __12 - rol.z __12+1 - // [34] (signed word) main::y#0 ← (signed word~) main::$12 + (signed word)(number) $5a*(number) $100 -- vwsz1=vwsz1_plus_vwsc1 + // [28] (signed word~) main::$10 ← (signed word) mulf8s::return#2 + // [29] (signed word) main::x#0 ← (signed word~) main::$10 + (signed word)(number) $4b*(number) $100 -- vwsz1=vwsz2_plus_vwsc1 + lda.z __10 + clc + adc #<$4b*$100 + sta.z x + lda.z __10+1 + adc #>$4b*$100 + sta.z x+1 + // [30] (signed byte) mulf8s::a#1 ← (signed byte) main::r#2 -- vbsaa=vbsz1 + lda.z r + // [31] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#2) -- vbsxx=pbsc1_derefidx_vbuz1 + ldy.z a + ldx SIN,y + // [32] call mulf8s + // [93] phi from main::@12 to mulf8s [phi:main::@12->mulf8s] + mulf8s_from___b12: + // [93] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#1 [phi:main::@12->mulf8s#0] -- register_copy + // [93] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#1 [phi:main::@12->mulf8s#1] -- register_copy + jsr mulf8s + // [33] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 + jmp __b13 + // main::@13 + __b13: + // [34] (signed word~) main::$12 ← (signed word) mulf8s::return#3 + // [35] (signed word~) main::$13 ← (signed word~) main::$12 << (byte) 1 -- vwsz1=vwsz1_rol_1 + asl.z __13 + rol.z __13+1 + // [36] (signed word) main::y#0 ← (signed word~) main::$13 + (signed word)(number) $5a*(number) $100 -- vwsz1=vwsz1_plus_vwsc1 clc lda.z y adc #<$5a*$100 @@ -7205,86 +7832,86 @@ main: { lda.z y+1 adc #>$5a*$100 sta.z y+1 - // [35] *((const byte*) BORDERCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 + // [37] *((const byte*) BORDERCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 lda #2 sta BORDERCOL - // [36] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 -- vbuz1=vbuz1_plus_vbuc1 + // [38] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 -- vbuz1=vbuz1_plus_vbuc1 lax.z a axs #-[$62] stx.z a - // [37] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 -- vbsz1=vbsz1_plus_vbsc1 + // [39] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 -- vbsz1=vbsz1_plus_vbsc1 lax.z r axs #-[3] stx.z r - // [38] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 -- vbuz1=_hi_vwsz2 + // [40] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 -- vbuz1=_hi_vwsz2 lda.z x+1 sta.z renderBob.xpos - // [39] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 -- vbuxx=_hi_vwsz1 + // [41] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 -- vbuxx=_hi_vwsz1 lda.z y+1 tax - // [40] call renderBob + // [42] call renderBob jsr renderBob - jmp __b13 - // main::@13 - __b13: - // [41] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [42] if((byte) main::i#1!=(byte) $1a) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 - lda #$1a - cmp.z i - bne __b4_from___b13 - jmp __b5 - // main::@5 - __b5: - // [43] (byte) main::angle#1 ← (byte) main::angle#6 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 - lax.z angle - axs #-[3] - stx.z angle - // [44] *((const byte*) BORDERCOL) ← (byte) 0 -- _deref_pbuc1=vbuc2 - lda #0 - sta BORDERCOL - // [45] call keyboard_key_pressed - // [60] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] - keyboard_key_pressed_from___b5: - jsr keyboard_key_pressed - // [46] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 jmp __b14 // main::@14 __b14: - // [47] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#2 - // [48] if((byte) 0!=(byte~) main::$18) goto main::@6 -- vbuc1_neq_vbuaa_then_la1 - cmp #0 - bne __b6_from___b14 - // [17] phi from main::@14 to main::@1 [phi:main::@14->main::@1] - __b1_from___b14: - // [17] phi (byte) main::angle#6 = (byte) main::angle#1 [phi:main::@14->main::@1#0] -- register_copy - jmp __b1 - // Wait for space release - // [49] phi from main::@14 main::@15 to main::@6 [phi:main::@14/main::@15->main::@6] - __b6_from___b14: - __b6_from___b15: - jmp __b6 - // main::@6 - __b6: - // [50] call keyboard_key_pressed - // [60] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed] - keyboard_key_pressed_from___b6: + // [43] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [44] if((byte) main::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 + lda #NUM_BOBS-1+1 + cmp.z i + bne __b4_from___b14 + jmp __b5 + // main::@5 + __b5: + // [45] (byte) main::angle#1 ← (byte) main::angle#8 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + lax.z angle + axs #-[3] + stx.z angle + // [46] *((const byte*) BORDERCOL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + lda #0 + sta BORDERCOL + // [47] call keyboard_key_pressed + // [62] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] + keyboard_key_pressed_from___b5: jsr keyboard_key_pressed - // [51] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 + // [48] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 jmp __b15 // main::@15 __b15: - // [52] (byte~) main::$20 ← (byte) keyboard_key_pressed::return#3 - // [53] if((byte) 0!=(byte~) main::$20) goto main::@6 -- vbuc1_neq_vbuaa_then_la1 + // [49] (byte~) main::$19 ← (byte) keyboard_key_pressed::return#2 + // [50] if((byte) 0!=(byte~) main::$19) goto main::@6 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne __b6_from___b15 + // [17] phi from main::@15 to main::@1 [phi:main::@15->main::@1] + __b1_from___b15: + // [17] phi (byte) main::angle#8 = (byte) main::angle#1 [phi:main::@15->main::@1#0] -- register_copy + jmp __b1 + // Wait for space release + // [51] phi from main::@15 main::@16 to main::@6 [phi:main::@15/main::@16->main::@6] + __b6_from___b15: + __b6_from___b16: + jmp __b6 + // main::@6 + __b6: + // [52] call keyboard_key_pressed + // [62] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed] + keyboard_key_pressed_from___b6: + jsr keyboard_key_pressed + // [53] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 + jmp __b16 + // main::@16 + __b16: + // [54] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#3 + // [55] if((byte) 0!=(byte~) main::$21) goto main::@6 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne __b6_from___b16 jmp vicSelectGfxBank2 // main::vicSelectGfxBank2 vicSelectGfxBank2: - // [54] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [56] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 sta CIA2_PORT_A_DDR - // [55] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001] + // [57] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001] vicSelectGfxBank2_toDd001_from_vicSelectGfxBank2: jmp vicSelectGfxBank2_toDd001 // main::vicSelectGfxBank2_toDd001 @@ -7292,10 +7919,10 @@ main: { jmp vicSelectGfxBank2___b1 // main::vicSelectGfxBank2_@1 vicSelectGfxBank2___b1: - // [56] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [58] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank2_toDd001_return sta CIA2_PORT_A - // [57] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] + // [59] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] toD0182_from_vicSelectGfxBank2___b1: jmp toD0182 // main::toD0182 @@ -7303,13 +7930,13 @@ main: { jmp __b8 // main::@8 __b8: - // [58] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 + // [60] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 lda #toD0182_return sta D018 jmp __breturn // main::@return __breturn: - // [59] return + // [61] return rts } // keyboard_key_pressed @@ -7320,19 +7947,19 @@ main: { keyboard_key_pressed: { .const colidx = KEY_SPACE&7 .label rowidx = KEY_SPACE>>3 - // [61] call keyboard_matrix_read + // [63] call keyboard_matrix_read jsr keyboard_matrix_read - // [62] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + // [64] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 jmp __b1 // keyboard_key_pressed::@1 __b1: - // [63] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 - // [64] (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 + // [65] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 + // [66] (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: - // [65] return + // [67] return rts } // keyboard_matrix_read @@ -7342,16 +7969,16 @@ keyboard_key_pressed: { // 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: { - // [66] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // [68] *((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 - // [67] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + // [69] (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: - // [68] return + // [70] return rts } // renderBob @@ -7360,32 +7987,31 @@ keyboard_matrix_read: { // Y-position is 0-183. Each y-position is 1 pixel high. // renderBob(byte zeropage($f) xpos, byte register(X) ypos) renderBob: { - .label __2 = $10 + .label __2 = $c .label __5 = $e .label xpos = $f - .label x_char_offset = $d - .label y_offset = $10 - .label screen = $10 - // [69] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 -- vbuz1=vbuz2_ror_2 + .label x_char_offset = $b + .label y_offset = $c + .label screen = $c + // [71] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 -- vbuz1=vbuz2_ror_2 lda.z xpos lsr lsr sta.z x_char_offset - // [70] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 -- vbuaa=vbuxx_ror_3 + // [72] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 -- vbuaa=vbuxx_ror_3 txa lsr lsr lsr - // [71] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [73] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [72] (word) renderBob::y_offset#0 ← *((const word*) RENDERBOB_YOFFSET + (byte~) renderBob::$8) -- vwuz1=pwuc1_derefidx_vbuaa - //unsigned int y_offset = (unsigned int)y_char_offset*40; + // [74] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8) -- vwuz1=pwuc1_derefidx_vbuaa tay - lda RENDERBOB_YOFFSET,y + lda MUL40,y sta.z y_offset - lda RENDERBOB_YOFFSET+1,y + lda MUL40+1,y sta.z y_offset+1 - // [73] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz1 + // [75] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __2 adc #BOB_SCREEN sta.z __2+1 - // [74] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz1_plus_vbuz2 + // [76] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz1_plus_vbuz2 lda.z x_char_offset clc adc.z screen @@ -7401,88 +8027,103 @@ renderBob: { bcc !+ inc.z screen+1 !: - // [75] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 -- vbuaa=vbuxx_band_vbuc1 + // [77] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 -- vbuaa=vbuxx_band_vbuc1 txa and #7 - // [76] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 -- vbuz1=vbuaa_rol_2 + // [78] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 -- vbuz1=vbuaa_rol_2 asl asl sta.z __5 - // [77] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 -- vbuaa=vbuz1_band_vbuc1 + // [79] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 -- vbuaa=vbuz1_band_vbuc1 lda #3 and.z xpos - // [78] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 -- vbuxx=vbuz1_plus_vbuaa + // [80] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 -- vbuxx=vbuz1_plus_vbuaa clc adc.z __5 tax - // [79] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [81] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0 -- _deref_pptz1=pbuz2 + ldy #0 + lda.z screen + sta (renderBobCleanupNext),y + iny + lda.z screen+1 + sta (renderBobCleanupNext),y + // [82] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER -- pptz1=pptz1_plus_vbuc1 + lda #SIZEOF_POINTER + clc + adc.z renderBobCleanupNext + sta.z renderBobCleanupNext + bcc !+ + inc.z renderBobCleanupNext+1 + !: + // [83] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda BOB_TABLES,x ldy #0 sta (screen),y - // [80] *((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 + // [84] *((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 ldy #$28 sta (screen),y - // [81] *((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 + // [85] *((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 ldy #$50 sta (screen),y - // [82] *((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 + // [86] *((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 ldy #1 sta (screen),y - // [83] *((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 + // [87] *((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 ldy #$29 sta (screen),y - // [84] *((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 + // [88] *((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 ldy #$51 sta (screen),y - // [85] *((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 + // [89] *((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 ldy #2 sta (screen),y - // [86] *((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 + // [90] *((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 ldy #$2a sta (screen),y - // [87] *((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 + // [91] *((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 ldy #$52 sta (screen),y jmp __breturn // renderBob::@return __breturn: - // [88] return + // [92] return rts } // mulf8s // Fast multiply two signed bytes to a word result // mulf8s(signed byte register(A) a, signed byte register(X) b) mulf8s: { - .label return = 6 + .label return = $c jmp mulf8s_prepare1 // mulf8s::mulf8s_prepare1 mulf8s_prepare1: - // [90] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 - // [91] call mulf8u_prepare + // [94] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 + // [95] call mulf8u_prepare jsr mulf8u_prepare jmp __b1 // mulf8s::@1 __b1: - // [92] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 -- vbsz1=vbsxx + // [96] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 -- vbsz1=vbsxx stx.z mulf8s_prepared.b - // [93] call mulf8s_prepared + // [97] call mulf8s_prepared jsr mulf8s_prepared jmp __b2 // mulf8s::@2 __b2: - // [94] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 + // [98] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 jmp __breturn // mulf8s::@return __breturn: - // [95] return + // [99] return rts } // mulf8s_prepared @@ -7491,63 +8132,63 @@ mulf8s: { // mulf8s_prepared(signed byte zeropage($f) b) mulf8s_prepared: { .label memA = $fd - .label m = 6 + .label m = $c .label b = $f - // [96] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuz1 + // [100] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuz1 lda.z b - // [97] call mulf8u_prepared + // [101] call mulf8u_prepared jsr mulf8u_prepared - // [98] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + // [102] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 jmp __b5 // mulf8s_prepared::@5 __b5: - // [99] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 - // [100] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 + // [103] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 + // [104] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 lda memA cmp #0 bpl __b1_from___b5 jmp __b3 // mulf8s_prepared::@3 __b3: - // [101] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 + // [105] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 lda.z m+1 - // [102] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 + // [106] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 sec sbc.z b - // [103] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuaa + // [107] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuaa sta.z m+1 - // [104] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] + // [108] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] __b1_from___b3: __b1_from___b5: - // [104] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy + // [108] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy jmp __b1 // mulf8s_prepared::@1 __b1: - // [105] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 + // [109] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 lda.z b cmp #0 bpl __b2_from___b1 jmp __b4 // mulf8s_prepared::@4 __b4: - // [106] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 + // [110] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 lda.z m+1 - // [107] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuaa=vbuaa_minus__deref_pbuc1 + // [111] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuaa=vbuaa_minus__deref_pbuc1 sec sbc memA - // [108] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuaa + // [112] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuaa sta.z m+1 - // [109] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] + // [113] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] __b2_from___b1: __b2_from___b4: - // [109] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy + // [113] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy jmp __b2 // mulf8s_prepared::@2 __b2: jmp __breturn // mulf8s_prepared::@return __breturn: - // [110] return + // [114] return rts } // mulf8u_prepared @@ -7557,8 +8198,8 @@ mulf8s_prepared: { mulf8u_prepared: { .label resL = $fe .label memB = $ff - .label return = 6 - // [111] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 -- _deref_pbuc1=vbuaa + .label return = $c + // [115] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 -- _deref_pbuc1=vbuaa sta memB // asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } ldx memB @@ -7573,7 +8214,7 @@ mulf8u_prepared: { sm4: sbc mulf_sqr2_hi,x sta memB - // [113] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + // [117] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda resL sta.z return lda memB @@ -7581,7 +8222,7 @@ mulf8u_prepared: { jmp __breturn // mulf8u_prepared::@return __breturn: - // [114] return + // [118] return rts } // mulf8u_prepare @@ -7589,7 +8230,7 @@ mulf8u_prepared: { // mulf8u_prepare(byte register(A) a) mulf8u_prepare: { .label memA = $fd - // [115] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 -- _deref_pbuc1=vbuaa + // [119] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 -- _deref_pbuc1=vbuaa sta memA // asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } lda memA @@ -7601,7 +8242,78 @@ mulf8u_prepare: { jmp __breturn // mulf8u_prepare::@return __breturn: - // [117] return + // [121] return + rts +} + // renderBobCleanup +// Clean Up the rendered BOB's +renderBobCleanup: { + .label screen = $10 + // [123] phi from renderBobCleanup to renderBobCleanup::@1 [phi:renderBobCleanup->renderBobCleanup::@1] + __b1_from_renderBobCleanup: + // [123] phi (byte) renderBobCleanup::i#2 = (byte) 0 [phi:renderBobCleanup->renderBobCleanup::@1#0] -- vbuxx=vbuc1 + ldx #0 + jmp __b1 + // [123] phi from renderBobCleanup::@1 to renderBobCleanup::@1 [phi:renderBobCleanup::@1->renderBobCleanup::@1] + __b1_from___b1: + // [123] phi (byte) renderBobCleanup::i#2 = (byte) renderBobCleanup::i#1 [phi:renderBobCleanup::@1->renderBobCleanup::@1#0] -- register_copy + jmp __b1 + // renderBobCleanup::@1 + __b1: + // [124] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + txa + asl + // [125] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1) -- pbuz1=pptc1_derefidx_vbuaa + tay + lda RENDERBOB_CLEANUP,y + sta.z screen + lda RENDERBOB_CLEANUP+1,y + sta.z screen+1 + // [126] *((byte*) renderBobCleanup::screen#0) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (screen),y + // [127] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #$28 + sta (screen),y + // [128] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #$50 + sta (screen),y + // [129] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #1 + sta (screen),y + // [130] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #$29 + sta (screen),y + // [131] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #$51 + sta (screen),y + // [132] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #2 + sta (screen),y + // [133] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #$2a + sta (screen),y + // [134] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + lda #0 + ldy #$52 + sta (screen),y + // [135] (byte) renderBobCleanup::i#1 ← ++ (byte) renderBobCleanup::i#2 -- vbuxx=_inc_vbuxx + inx + // [136] if((byte) renderBobCleanup::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobCleanup::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #NUM_BOBS-1+1 + bne __b1_from___b1 + jmp __breturn + // renderBobCleanup::@return + __breturn: + // [137] return rts } // memset @@ -7612,9 +8324,9 @@ memset: { .const num = $3e8 .label end = str+num .label dst = 6 - // [119] phi from memset to memset::@1 [phi:memset->memset::@1] + // [139] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [119] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [139] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -7622,7 +8334,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [120] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [140] 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 @@ -7632,22 +8344,22 @@ memset: { jmp __breturn // memset::@return __breturn: - // [121] return + // [141] return rts // memset::@2 __b2: - // [122] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [123] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [143] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [119] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [139] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [119] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [139] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // renderBobInit @@ -7655,170 +8367,195 @@ memset: { renderBobInit: { .label __0 = $10 .label __1 = $10 - .label __4 = $12 - .label __5 = $10 - // [125] phi from renderBobInit to renderBobInit::@1 [phi:renderBobInit->renderBobInit::@1] + .label __6 = $12 + .label __7 = $10 + // [145] phi from renderBobInit to renderBobInit::@1 [phi:renderBobInit->renderBobInit::@1] __b1_from_renderBobInit: - // [125] phi (byte) renderBobInit::y#2 = (byte) 0 [phi:renderBobInit->renderBobInit::@1#0] -- vbuxx=vbuc1 + // [145] phi (byte) renderBobInit::y#2 = (byte) 0 [phi:renderBobInit->renderBobInit::@1#0] -- vbuxx=vbuc1 ldx #0 jmp __b1 - // [125] phi from renderBobInit::@1 to renderBobInit::@1 [phi:renderBobInit::@1->renderBobInit::@1] + // [145] phi from renderBobInit::@1 to renderBobInit::@1 [phi:renderBobInit::@1->renderBobInit::@1] __b1_from___b1: - // [125] phi (byte) renderBobInit::y#2 = (byte) renderBobInit::y#1 [phi:renderBobInit::@1->renderBobInit::@1#0] -- register_copy + // [145] phi (byte) renderBobInit::y#2 = (byte) renderBobInit::y#1 [phi:renderBobInit::@1->renderBobInit::@1#0] -- register_copy jmp __b1 // renderBobInit::@1 __b1: - // [126] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 -- vwuz1=_word_vbuxx + // [146] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 -- vwuz1=_word_vbuxx txa sta.z __0 lda #0 sta.z __0+1 - // [127] (word~) renderBobInit::$4 ← (word~) renderBobInit::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 + // [147] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 lda.z __0 asl - sta.z __4 + sta.z __6 lda.z __0+1 rol - sta.z __4+1 - asl.z __4 - rol.z __4+1 - // [128] (word~) renderBobInit::$5 ← (word~) renderBobInit::$4 + (word~) renderBobInit::$0 -- vwuz1=vwuz2_plus_vwuz1 - lda.z __5 + sta.z __6+1 + asl.z __6 + rol.z __6+1 + // [148] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0 -- vwuz1=vwuz2_plus_vwuz1 + lda.z __7 clc - adc.z __4 - sta.z __5 - lda.z __5+1 - adc.z __4+1 - sta.z __5+1 - // [129] (word~) renderBobInit::$1 ← (word~) renderBobInit::$5 << (byte) 3 -- vwuz1=vwuz1_rol_3 + adc.z __6 + sta.z __7 + lda.z __7+1 + adc.z __6+1 + sta.z __7+1 + // [149] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __1 rol.z __1+1 asl.z __1 rol.z __1+1 asl.z __1 rol.z __1+1 - // [130] (byte~) renderBobInit::$3 ← (byte) renderBobInit::y#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [150] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [131] *((const word*) RENDERBOB_YOFFSET + (byte~) renderBobInit::$3) ← (word~) renderBobInit::$1 -- pwuc1_derefidx_vbuaa=vwuz1 + // [151] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1 -- pwuc1_derefidx_vbuaa=vwuz1 tay lda.z __1 - sta RENDERBOB_YOFFSET,y + sta MUL40,y lda.z __1+1 - sta RENDERBOB_YOFFSET+1,y - // [132] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2 -- vbuxx=_inc_vbuxx + sta MUL40+1,y + // [152] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2 -- vbuxx=_inc_vbuxx inx - // [133] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1 -- vbuxx_neq_vbuc1_then_la1 + // [153] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$20 bne __b1_from___b1 + // [154] phi from renderBobInit::@1 to renderBobInit::@2 [phi:renderBobInit::@1->renderBobInit::@2] + __b2_from___b1: + // [154] phi (byte) renderBobInit::i#2 = (byte) 0 [phi:renderBobInit::@1->renderBobInit::@2#0] -- vbuxx=vbuc1 + ldx #0 + jmp __b2 + // [154] phi from renderBobInit::@2 to renderBobInit::@2 [phi:renderBobInit::@2->renderBobInit::@2] + __b2_from___b2: + // [154] phi (byte) renderBobInit::i#2 = (byte) renderBobInit::i#1 [phi:renderBobInit::@2->renderBobInit::@2#0] -- register_copy + jmp __b2 + // renderBobInit::@2 + __b2: + // [155] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + txa + asl + // [156] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN -- pptc1_derefidx_vbuaa=pbuc2 + tay + lda #BOB_SCREEN + sta RENDERBOB_CLEANUP+1,y + // [157] (byte) renderBobInit::i#1 ← ++ (byte) renderBobInit::i#2 -- vbuxx=_inc_vbuxx + inx + // [158] if((byte) renderBobInit::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobInit::@2 -- vbuxx_neq_vbuc1_then_la1 + cpx #NUM_BOBS-1+1 + bne __b2_from___b2 jmp __breturn // renderBobInit::@return __breturn: - // [134] return + // [159] return rts } // 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 = $12 + .label bob_table = $10 .label shift_y = 2 // Populate charset and tables - .label bob_glyph = $10 - .label cell = $d + .label bob_glyph = 6 + .label cell = $b .label bob_table_idx = 4 .label shift_x = 5 - // [136] call progress_init - // [217] phi from prepareBobs to progress_init [phi:prepareBobs->progress_init] + // [161] call progress_init + // [242] phi from prepareBobs to progress_init [phi:prepareBobs->progress_init] progress_init_from_prepareBobs: jsr progress_init - // [137] phi from prepareBobs to prepareBobs::@8 [phi:prepareBobs->prepareBobs::@8] + // [162] phi from prepareBobs to prepareBobs::@8 [phi:prepareBobs->prepareBobs::@8] __b8_from_prepareBobs: jmp __b8 // prepareBobs::@8 __b8: - // [138] call bobCharsetFindOrAddGlyph - // [171] phi from prepareBobs::@8 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph] + // [163] call bobCharsetFindOrAddGlyph + // [196] phi from prepareBobs::@8 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph] bobCharsetFindOrAddGlyph_from___b8: - // [171] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph#0] -- pbuz1=pbuc1 + // [196] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph#0] -- pbuz1=pbuc1 lda #PROTO_BOB+$30 sta.z bobCharsetFindOrAddGlyph.bob_glyph+1 - // [171] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph#1] -- vbuz1=vbuc1 + // [196] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph#1] -- vbuz1=vbuc1 lda #0 sta.z bob_charset_next_id jsr bobCharsetFindOrAddGlyph - // [139] phi from prepareBobs::@8 to prepareBobs::@1 [phi:prepareBobs::@8->prepareBobs::@1] + // [164] phi from prepareBobs::@8 to prepareBobs::@1 [phi:prepareBobs::@8->prepareBobs::@1] __b1_from___b8: - // [139] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#0] -- vbuz1=vbuc1 + // [164] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#0] -- vbuz1=vbuc1 lda #0 sta.z bob_table_idx - // [139] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy - // [139] phi (byte) progress_idx#16 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#2] -- vbuz1=vbuc1 + // [164] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy + // [164] phi (byte) progress_idx#16 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#2] -- vbuz1=vbuc1 lda #0 sta.z progress_idx - // [139] phi (byte*) progress_cursor#15 = (const byte*) SCREEN_BASIC [phi:prepareBobs::@8->prepareBobs::@1#3] -- pbuz1=pbuc1 + // [164] phi (byte*) progress_cursor#15 = (const byte*) SCREEN_BASIC [phi:prepareBobs::@8->prepareBobs::@1#3] -- pbuz1=pbuc1 lda #SCREEN_BASIC sta.z progress_cursor+1 - // [139] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#4] -- vbuz1=vbuc1 + // [164] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#4] -- vbuz1=vbuc1 lda #0 sta.z shift_y jmp __b1 // prepareBobs::@1 __b1: - // [140] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 -- vbuz1_lt_vbuc1_then_la1 + // [165] 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: - // [141] return + // [166] return rts - // [142] phi from prepareBobs::@1 to prepareBobs::@2 [phi:prepareBobs::@1->prepareBobs::@2] + // [167] phi from prepareBobs::@1 to prepareBobs::@2 [phi:prepareBobs::@1->prepareBobs::@2] __b2_from___b1: - // [142] phi (byte) progress_idx#31 = (byte) progress_idx#16 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy - // [142] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#15 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy - // [142] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#2] -- register_copy - // [142] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#3] -- register_copy - // [142] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#4] -- vbuz1=vbuc1 + // [167] phi (byte) progress_idx#31 = (byte) progress_idx#16 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy + // [167] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#15 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy + // [167] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#2] -- register_copy + // [167] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#3] -- register_copy + // [167] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#4] -- vbuz1=vbuc1 lda #0 sta.z shift_x jmp __b2 // prepareBobs::@2 __b2: - // [143] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 -- vbuz1_lt_vbuc1_then_la1 + // [168] 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 - // [144] phi from prepareBobs::@2 to prepareBobs::@4 [phi:prepareBobs::@2->prepareBobs::@4] + // [169] phi from prepareBobs::@2 to prepareBobs::@4 [phi:prepareBobs::@2->prepareBobs::@4] __b4_from___b2: jmp __b4 // prepareBobs::@4 __b4: - // [145] call shiftProtoBobDown - // [206] phi from prepareBobs::@4 to shiftProtoBobDown [phi:prepareBobs::@4->shiftProtoBobDown] + // [170] call shiftProtoBobDown + // [231] phi from prepareBobs::@4 to shiftProtoBobDown [phi:prepareBobs::@4->shiftProtoBobDown] shiftProtoBobDown_from___b4: jsr shiftProtoBobDown jmp __b9 // prepareBobs::@9 __b9: - // [146] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 -- vbuz1=_inc_vbuz1 + // [171] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 -- vbuz1=_inc_vbuz1 inc.z shift_y - // [139] phi from prepareBobs::@9 to prepareBobs::@1 [phi:prepareBobs::@9->prepareBobs::@1] + // [164] phi from prepareBobs::@9 to prepareBobs::@1 [phi:prepareBobs::@9->prepareBobs::@1] __b1_from___b9: - // [139] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@9->prepareBobs::@1#0] -- register_copy - // [139] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@9->prepareBobs::@1#1] -- register_copy - // [139] phi (byte) progress_idx#16 = (byte) progress_idx#31 [phi:prepareBobs::@9->prepareBobs::@1#2] -- register_copy - // [139] phi (byte*) progress_cursor#15 = (byte*) progress_cursor#31 [phi:prepareBobs::@9->prepareBobs::@1#3] -- register_copy - // [139] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@9->prepareBobs::@1#4] -- register_copy + // [164] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@9->prepareBobs::@1#0] -- register_copy + // [164] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@9->prepareBobs::@1#1] -- register_copy + // [164] phi (byte) progress_idx#16 = (byte) progress_idx#31 [phi:prepareBobs::@9->prepareBobs::@1#2] -- register_copy + // [164] phi (byte*) progress_cursor#15 = (byte*) progress_cursor#31 [phi:prepareBobs::@9->prepareBobs::@1#3] -- register_copy + // [164] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@9->prepareBobs::@1#4] -- register_copy jmp __b1 // prepareBobs::@3 __b3: - // [147] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 -- pbuz1=pbuc1_plus_vbuz2 + // [172] (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 - // [148] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5] + // [173] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5] __b5_from___b3: - // [148] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#31 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy - // [148] phi (byte) progress_idx#25 = (byte) progress_idx#31 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy - // [148] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#2] -- register_copy - // [148] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@3->prepareBobs::@5#3] -- register_copy - // [148] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#4] -- pbuz1=pbuc1 + // [173] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#31 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy + // [173] phi (byte) progress_idx#25 = (byte) progress_idx#31 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy + // [173] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#2] -- register_copy + // [173] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@3->prepareBobs::@5#3] -- register_copy + // [173] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#4] -- pbuz1=pbuc1 lda #PROTO_BOB sta.z bob_glyph+1 - // [148] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#5] -- vbuz1=vbuc1 + // [173] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#5] -- vbuz1=vbuc1 lda #0 sta.z cell jmp __b5 // prepareBobs::@5 __b5: - // [149] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 -- vbuz1_lt_vbuc1_then_la1 + // [174] 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: - // [150] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 + // [175] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 inc.z bob_table_idx - // [151] call shiftProtoBobRight - // [189] phi from prepareBobs::@7 to shiftProtoBobRight [phi:prepareBobs::@7->shiftProtoBobRight] + // [176] call shiftProtoBobRight + // [214] phi from prepareBobs::@7 to shiftProtoBobRight [phi:prepareBobs::@7->shiftProtoBobRight] shiftProtoBobRight_from___b7: jsr shiftProtoBobRight - // [152] phi from prepareBobs::@7 to prepareBobs::@12 [phi:prepareBobs::@7->prepareBobs::@12] + // [177] phi from prepareBobs::@7 to prepareBobs::@12 [phi:prepareBobs::@7->prepareBobs::@12] __b12_from___b7: jmp __b12 // prepareBobs::@12 __b12: - // [153] call shiftProtoBobRight - // [189] phi from prepareBobs::@12 to shiftProtoBobRight [phi:prepareBobs::@12->shiftProtoBobRight] + // [178] call shiftProtoBobRight + // [214] phi from prepareBobs::@12 to shiftProtoBobRight [phi:prepareBobs::@12->shiftProtoBobRight] shiftProtoBobRight_from___b12: jsr shiftProtoBobRight jmp __b13 // prepareBobs::@13 __b13: - // [154] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 -- vbuz1=_inc_vbuz1 + // [179] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 -- vbuz1=_inc_vbuz1 inc.z shift_x - // [142] phi from prepareBobs::@13 to prepareBobs::@2 [phi:prepareBobs::@13->prepareBobs::@2] + // [167] phi from prepareBobs::@13 to prepareBobs::@2 [phi:prepareBobs::@13->prepareBobs::@2] __b2_from___b13: - // [142] phi (byte) progress_idx#31 = (byte) progress_idx#25 [phi:prepareBobs::@13->prepareBobs::@2#0] -- register_copy - // [142] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#24 [phi:prepareBobs::@13->prepareBobs::@2#1] -- register_copy - // [142] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@13->prepareBobs::@2#2] -- register_copy - // [142] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@13->prepareBobs::@2#3] -- register_copy - // [142] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@13->prepareBobs::@2#4] -- register_copy + // [167] phi (byte) progress_idx#31 = (byte) progress_idx#25 [phi:prepareBobs::@13->prepareBobs::@2#0] -- register_copy + // [167] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#24 [phi:prepareBobs::@13->prepareBobs::@2#1] -- register_copy + // [167] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@13->prepareBobs::@2#2] -- register_copy + // [167] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@13->prepareBobs::@2#3] -- register_copy + // [167] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@13->prepareBobs::@2#4] -- register_copy jmp __b2 // prepareBobs::@6 __b6: - // [155] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 - // [156] call bobCharsetFindOrAddGlyph - // [171] phi from prepareBobs::@6 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph] + // [180] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + // [181] call bobCharsetFindOrAddGlyph + // [196] phi from prepareBobs::@6 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph] bobCharsetFindOrAddGlyph_from___b6: - // [171] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#0] -- register_copy - // [171] phi (byte) bob_charset_next_id#23 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#1] -- register_copy + // [196] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#0] -- register_copy + // [196] phi (byte) bob_charset_next_id#23 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#1] -- register_copy jsr bobCharsetFindOrAddGlyph - // [157] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuaa=vbuz1 + // [182] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuaa=vbuz1 lda.z bobCharsetFindOrAddGlyph.glyph_id jmp __b10 // prepareBobs::@10 __b10: - // [158] (byte~) prepareBobs::$6 ← (byte) bobCharsetFindOrAddGlyph::return#1 - // [159] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 -- _deref_pbuz1=vbuaa + // [183] (byte~) prepareBobs::$6 ← (byte) bobCharsetFindOrAddGlyph::return#1 + // [184] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 -- _deref_pbuz1=vbuaa // Look for an existing char in BOB_CHARSET ldy #0 sta (bob_table),y - // [160] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [185] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 // Move to the next glyph lda #8 clc @@ -7906,7 +8643,7 @@ prepareBobs: { bcc !+ inc.z bob_glyph+1 !: - // [161] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y -- pbuz1=pbuz1_plus_vbuc1 + // [186] (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 @@ -7915,60 +8652,60 @@ prepareBobs: { bcc !+ inc.z bob_table+1 !: - // [162] call progress_inc + // [187] call progress_inc jsr progress_inc jmp __b11 // prepareBobs::@11 __b11: - // [163] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 + // [188] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 inc.z cell - // [148] phi from prepareBobs::@11 to prepareBobs::@5 [phi:prepareBobs::@11->prepareBobs::@5] + // [173] phi from prepareBobs::@11 to prepareBobs::@5 [phi:prepareBobs::@11->prepareBobs::@5] __b5_from___b11: - // [148] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#17 [phi:prepareBobs::@11->prepareBobs::@5#0] -- register_copy - // [148] phi (byte) progress_idx#25 = (byte) progress_idx#10 [phi:prepareBobs::@11->prepareBobs::@5#1] -- register_copy - // [148] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@11->prepareBobs::@5#2] -- register_copy - // [148] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@11->prepareBobs::@5#3] -- register_copy - // [148] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@11->prepareBobs::@5#4] -- register_copy - // [148] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@11->prepareBobs::@5#5] -- register_copy + // [173] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#17 [phi:prepareBobs::@11->prepareBobs::@5#0] -- register_copy + // [173] phi (byte) progress_idx#25 = (byte) progress_idx#10 [phi:prepareBobs::@11->prepareBobs::@5#1] -- register_copy + // [173] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@11->prepareBobs::@5#2] -- register_copy + // [173] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@11->prepareBobs::@5#3] -- register_copy + // [173] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@11->prepareBobs::@5#4] -- register_copy + // [173] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@11->prepareBobs::@5#5] -- register_copy jmp __b5 } // progress_inc // Increase PETSCII progress one bit // Done by increasing the character until the idx is 8 and then moving to the next char progress_inc: { - // [164] (byte) progress_idx#8 ← ++ (byte) progress_idx#25 -- vbuz1=_inc_vbuz1 + // [189] (byte) progress_idx#8 ← ++ (byte) progress_idx#25 -- vbuz1=_inc_vbuz1 inc.z progress_idx - // [165] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 -- vbuz1_neq_vbuc1_then_la1 + // [190] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z progress_idx bne __b1_from_progress_inc jmp __b2 // progress_inc::@2 __b2: - // [166] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) -- _deref_pbuz1=_deref_pbuc1 + // [191] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) -- _deref_pbuz1=_deref_pbuc1 lda progress_chars+8 ldy #0 sta (progress_cursor),y - // [167] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24 -- pbuz1=_inc_pbuz1 + // [192] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24 -- pbuz1=_inc_pbuz1 inc.z progress_cursor bne !+ inc.z progress_cursor+1 !: - // [168] phi from progress_inc::@2 to progress_inc::@1 [phi:progress_inc::@2->progress_inc::@1] + // [193] phi from progress_inc::@2 to progress_inc::@1 [phi:progress_inc::@2->progress_inc::@1] __b1_from___b2: - // [168] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#8 [phi:progress_inc::@2->progress_inc::@1#0] -- register_copy - // [168] phi (byte) progress_idx#10 = (byte) 0 [phi:progress_inc::@2->progress_inc::@1#1] -- vbuz1=vbuc1 + // [193] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#8 [phi:progress_inc::@2->progress_inc::@1#0] -- register_copy + // [193] phi (byte) progress_idx#10 = (byte) 0 [phi:progress_inc::@2->progress_inc::@1#1] -- vbuz1=vbuc1 lda #0 sta.z progress_idx jmp __b1 - // [168] phi from progress_inc to progress_inc::@1 [phi:progress_inc->progress_inc::@1] + // [193] phi from progress_inc to progress_inc::@1 [phi:progress_inc->progress_inc::@1] __b1_from_progress_inc: - // [168] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#24 [phi:progress_inc->progress_inc::@1#0] -- register_copy - // [168] phi (byte) progress_idx#10 = (byte) progress_idx#8 [phi:progress_inc->progress_inc::@1#1] -- register_copy + // [193] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#24 [phi:progress_inc->progress_inc::@1#0] -- register_copy + // [193] phi (byte) progress_idx#10 = (byte) progress_idx#8 [phi:progress_inc->progress_inc::@1#1] -- register_copy jmp __b1 // progress_inc::@1 __b1: - // [169] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [194] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z progress_idx lda progress_chars,y ldy #0 @@ -7976,7 +8713,7 @@ progress_inc: { jmp __breturn // progress_inc::@return __breturn: - // [170] return + // [195] return rts // Progress characters progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0 @@ -7985,85 +8722,85 @@ progress_inc: { // 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($10) bob_glyph) +// bobCharsetFindOrAddGlyph(byte* zeropage(6) bob_glyph) bobCharsetFindOrAddGlyph: { - .label bob_glyph = $10 - .label i = $a + .label bob_glyph = 6 + .label i = 8 .label glyph_id = $e - .label glyph_cursor = 8 - // [172] phi from bobCharsetFindOrAddGlyph to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1] + .label glyph_cursor = $12 + // [197] phi from bobCharsetFindOrAddGlyph to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1] __b1_from_bobCharsetFindOrAddGlyph: - // [172] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (const byte*) BOB_CHARSET [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#0] -- pbuz1=pbuc1 + // [197] 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 - // [172] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) 0 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#1] -- vbuz1=vbuc1 + // [197] 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: - // [173] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 -- vbuz1_neq_vbuz2_then_la1 + // [198] 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 - // [174] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7] + // [199] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7] __b7_from___b1: - // [174] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7#0] -- vbuyy=vbuc1 + // [199] 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: - // [175] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 -- vbuyy_lt_vbuc1_then_la1 + // [200] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 -- vbuyy_lt_vbuc1_then_la1 cpy #8 bcc __b8 jmp __b9 // bobCharsetFindOrAddGlyph::@9 __b9: - // [176] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 + // [201] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 inc.z bob_charset_next_id - // [177] phi from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 to bobCharsetFindOrAddGlyph::@return [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return] + // [202] phi from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 to bobCharsetFindOrAddGlyph::@return [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return] __breturn_from___b5: __breturn_from___b9: - // [177] phi (byte) bob_charset_next_id#16 = (byte) bob_charset_next_id#23 [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return#0] -- register_copy + // [202] 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: - // [178] return + // [203] return rts // bobCharsetFindOrAddGlyph::@8 __b8: - // [179] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) -- pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy + // [204] *((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 - // [180] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 -- vbuyy=_inc_vbuyy + // [205] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 -- vbuyy=_inc_vbuyy iny - // [174] phi from bobCharsetFindOrAddGlyph::@8 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7] + // [199] phi from bobCharsetFindOrAddGlyph::@8 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7] __b7_from___b8: - // [174] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) bobCharsetFindOrAddGlyph::i1#1 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7#0] -- register_copy + // [199] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) bobCharsetFindOrAddGlyph::i1#1 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7#0] -- register_copy jmp __b7 - // [181] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2] + // [206] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2] __b2_from___b1: - // [181] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2#0] -- vbuz1=vbuc1 + // [206] 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: - // [182] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 -- vbuz1_lt_vbuc1_then_la1 + // [207] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #8 bcc __b3 - // [184] phi from bobCharsetFindOrAddGlyph::@2 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5] + // [209] phi from bobCharsetFindOrAddGlyph::@2 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5] __b5_from___b2: - // [184] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 1 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 + // [209] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 1 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 lda #1 jmp __b5 // bobCharsetFindOrAddGlyph::@3 __b3: - // [183] 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 + // [208] 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 @@ -8072,22 +8809,22 @@ bobCharsetFindOrAddGlyph: { sty.z $ff cpx.z $ff beq __b4 - // [184] phi from bobCharsetFindOrAddGlyph::@3 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5] + // [209] phi from bobCharsetFindOrAddGlyph::@3 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5] __b5_from___b3: - // [184] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 + // [209] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 lda #0 jmp __b5 // bobCharsetFindOrAddGlyph::@5 __b5: - // [185] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 -- vbuc1_eq_vbuaa_then_la1 + // [210] 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: - // [186] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=_inc_vbuz1 + // [211] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=_inc_vbuz1 inc.z glyph_id - // [187] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [212] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z glyph_cursor @@ -8095,112 +8832,112 @@ bobCharsetFindOrAddGlyph: { bcc !+ inc.z glyph_cursor+1 !: - // [172] phi from bobCharsetFindOrAddGlyph::@6 to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1] + // [197] phi from bobCharsetFindOrAddGlyph::@6 to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1] __b1_from___b6: - // [172] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#0] -- register_copy - // [172] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) bobCharsetFindOrAddGlyph::glyph_id#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#1] -- register_copy + // [197] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#0] -- register_copy + // [197] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) bobCharsetFindOrAddGlyph::glyph_id#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#1] -- register_copy jmp __b1 // bobCharsetFindOrAddGlyph::@4 __b4: - // [188] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 -- vbuz1=_inc_vbuz1 + // [213] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [181] phi from bobCharsetFindOrAddGlyph::@4 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2] + // [206] phi from bobCharsetFindOrAddGlyph::@4 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2] __b2_from___b4: - // [181] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) bobCharsetFindOrAddGlyph::i#1 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2#0] -- register_copy + // [206] 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 = $e - .label i = $d - // [190] phi from shiftProtoBobRight to shiftProtoBobRight::@1 [phi:shiftProtoBobRight->shiftProtoBobRight::@1] + .label i = $b + // [215] phi from shiftProtoBobRight to shiftProtoBobRight::@1 [phi:shiftProtoBobRight->shiftProtoBobRight::@1] __b1_from_shiftProtoBobRight: - // [190] phi (byte) shiftProtoBobRight::carry#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#0] -- vbuyy=vbuc1 + // [215] phi (byte) shiftProtoBobRight::carry#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#0] -- vbuyy=vbuc1 ldy #0 - // [190] phi (byte) shiftProtoBobRight::j#3 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#1] -- vbuxx=vbuc1 + // [215] phi (byte) shiftProtoBobRight::j#3 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#1] -- vbuxx=vbuc1 ldx #0 - // [190] phi (byte) shiftProtoBobRight::i#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#2] -- vbuz1=vbuc1 + // [215] phi (byte) shiftProtoBobRight::i#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#2] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b1 // shiftProtoBobRight::@1 __b1: - // [191] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 -- vbuz1_lt_vbuc1_then_la1 + // [216] 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: - // [192] return + // [217] return rts // shiftProtoBobRight::@2 __b2: - // [193] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_band_vbuc2 + // [218] (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 - // [194] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 -- vbuc1_neq_vbuaa_then_la1 + // [219] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne __b3_from___b2 - // [196] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4] + // [221] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4] __b4_from___b2: - // [196] phi (byte) shiftProtoBobRight::carry#1 = (byte) 0 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 + // [221] phi (byte) shiftProtoBobRight::carry#1 = (byte) 0 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 lda #0 sta.z carry jmp __b4 - // [195] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@3 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@3] + // [220] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@3 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@3] __b3_from___b2: jmp __b3 // shiftProtoBobRight::@3 __b3: - // [196] phi from shiftProtoBobRight::@3 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4] + // [221] phi from shiftProtoBobRight::@3 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4] __b4_from___b3: - // [196] phi (byte) shiftProtoBobRight::carry#1 = (byte) $80 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 + // [221] 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: - // [197] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1 + // [222] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1 lda PROTO_BOB,x lsr - // [198] (byte~) shiftProtoBobRight::$6 ← (byte) shiftProtoBobRight::carry#2 | (byte~) shiftProtoBobRight::$5 -- vbuaa=vbuyy_bor_vbuaa + // [223] (byte~) shiftProtoBobRight::$6 ← (byte) shiftProtoBobRight::carry#2 | (byte~) shiftProtoBobRight::$5 -- vbuaa=vbuyy_bor_vbuaa sty.z $ff ora.z $ff - // [199] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 -- pbuc1_derefidx_vbuxx=vbuaa + // [224] *((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 - // [200] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 -- vbuxx_ge_vbuc1_then_la1 + // [225] 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: - // [201] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 -- vbuxx=vbuxx_plus_vbuc1 + // [226] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 -- vbuxx=vbuxx_plus_vbuc1 txa axs #-[$18] - // [202] phi from shiftProtoBobRight::@5 shiftProtoBobRight::@7 to shiftProtoBobRight::@6 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6] + // [227] phi from shiftProtoBobRight::@5 shiftProtoBobRight::@7 to shiftProtoBobRight::@6 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6] __b6_from___b5: __b6_from___b7: - // [202] phi (byte) shiftProtoBobRight::j#10 = (byte) shiftProtoBobRight::j#1 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6#0] -- register_copy + // [227] phi (byte) shiftProtoBobRight::j#10 = (byte) shiftProtoBobRight::j#1 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6#0] -- register_copy jmp __b6 // shiftProtoBobRight::@6 __b6: - // [203] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 -- vbuz1=_inc_vbuz1 + // [228] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [204] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 -- vbuyy=vbuz1 + // [229] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 -- vbuyy=vbuz1 ldy.z carry - // [190] phi from shiftProtoBobRight::@6 to shiftProtoBobRight::@1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1] + // [215] phi from shiftProtoBobRight::@6 to shiftProtoBobRight::@1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1] __b1_from___b6: - // [190] phi (byte) shiftProtoBobRight::carry#2 = (byte) shiftProtoBobRight::carry#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#0] -- register_copy - // [190] phi (byte) shiftProtoBobRight::j#3 = (byte) shiftProtoBobRight::j#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#1] -- register_copy - // [190] phi (byte) shiftProtoBobRight::i#2 = (byte) shiftProtoBobRight::i#1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#2] -- register_copy + // [215] phi (byte) shiftProtoBobRight::carry#2 = (byte) shiftProtoBobRight::carry#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#0] -- register_copy + // [215] phi (byte) shiftProtoBobRight::j#3 = (byte) shiftProtoBobRight::j#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#1] -- register_copy + // [215] phi (byte) shiftProtoBobRight::i#2 = (byte) shiftProtoBobRight::i#1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#2] -- register_copy jmp __b1 // shiftProtoBobRight::@5 __b5: - // [205] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f -- vbuxx=vbuxx_minus_vbuc1 + // [230] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f -- vbuxx=vbuxx_minus_vbuc1 txa axs #$2f jmp __b6_from___b5 @@ -8209,49 +8946,49 @@ shiftProtoBobRight: { // Shift PROTO_BOB down one Y pixel // At the same time restore PROTO_BOB X by shifting 8 pixels left shiftProtoBobDown: { - // [207] phi from shiftProtoBobDown to shiftProtoBobDown::@1 [phi:shiftProtoBobDown->shiftProtoBobDown::@1] + // [232] phi from shiftProtoBobDown to shiftProtoBobDown::@1 [phi:shiftProtoBobDown->shiftProtoBobDown::@1] __b1_from_shiftProtoBobDown: - // [207] phi (byte) shiftProtoBobDown::i#2 = (byte) $17 [phi:shiftProtoBobDown->shiftProtoBobDown::@1#0] -- vbuxx=vbuc1 + // [232] phi (byte) shiftProtoBobDown::i#2 = (byte) $17 [phi:shiftProtoBobDown->shiftProtoBobDown::@1#0] -- vbuxx=vbuc1 ldx #$17 jmp __b1 // shiftProtoBobDown::@1 __b1: - // [208] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 -- vbuxx_gt_0_then_la1 + // [233] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 -- vbuxx_gt_0_then_la1 cpx #0 bne __b2 jmp __b3 // shiftProtoBobDown::@3 __b3: - // [209] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [234] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PROTO_BOB - // [210] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [235] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PROTO_BOB+$18 - // [211] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [236] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PROTO_BOB+$30 jmp __breturn // shiftProtoBobDown::@return __breturn: - // [212] return + // [237] return rts // shiftProtoBobDown::@2 __b2: - // [213] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [238] *((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 - // [214] *((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 + // [239] *((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 - // [215] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [240] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta PROTO_BOB+$30,x - // [216] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 -- vbuxx=_dec_vbuxx + // [241] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 -- vbuxx=_dec_vbuxx dex - // [207] phi from shiftProtoBobDown::@2 to shiftProtoBobDown::@1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1] + // [232] phi from shiftProtoBobDown::@2 to shiftProtoBobDown::@1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1] __b1_from___b2: - // [207] phi (byte) shiftProtoBobDown::i#2 = (byte) shiftProtoBobDown::i#1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1#0] -- register_copy + // [232] phi (byte) shiftProtoBobDown::i#2 = (byte) shiftProtoBobDown::i#1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1#0] -- register_copy jmp __b1 } // progress_init @@ -8260,7 +8997,7 @@ progress_init: { jmp __breturn // progress_init::@return __breturn: - // [218] return + // [243] return rts } // mulf_init @@ -8271,31 +9008,31 @@ mulf_init: { // Counter used for determining x%2==0 .label sqr1_hi = $10 // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 - .label sqr = $b + .label sqr = $c .label sqr1_lo = 6 // Decrease or increase x_255 - initially we decrease - .label sqr2_hi = 8 + .label sqr2_hi = 9 .label sqr2_lo = $12 //Start with g(0)=f(255) - .label dir = $a - // [220] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + .label dir = 8 + // [245] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] __b1_from_mulf_init: - // [220] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 + // [245] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [220] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + // [245] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [220] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [245] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 lda #<0 sta.z sqr lda #>0 sta.z sqr+1 - // [220] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + // [245] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 lda #0 sta.z c - // [220] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + // [245] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 lda #mulf_sqr1_lo+1 @@ -8303,26 +9040,26 @@ mulf_init: { jmp __b1 // mulf_init::@1 __b1: - // [221] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [246] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr1_lo+1 cmp #>mulf_sqr1_lo+$200 bne __b2 lda.z sqr1_lo cmp #mulf_init::@5] + // [247] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5] __b5_from___b1: - // [222] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + // [247] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 lda #$ff sta.z dir - // [222] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + // [247] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 lda #mulf_sqr2_hi sta.z sqr2_hi+1 - // [222] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 + // [247] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 ldx #-1 - // [222] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + // [247] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 lda #mulf_sqr2_lo @@ -8330,7 +9067,7 @@ mulf_init: { jmp __b5 // mulf_init::@5 __b5: - // [223] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + // [248] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr2_lo+1 cmp #>mulf_sqr2_lo+$1ff bne __b6 @@ -8340,114 +9077,114 @@ mulf_init: { jmp __b7 // mulf_init::@7 __b7: - // [224] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [249] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 // Set the very last value g(511) = f(256) lda mulf_sqr1_lo+$100 sta mulf_sqr2_lo+$1ff - // [225] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [250] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 lda mulf_sqr1_hi+$100 sta mulf_sqr2_hi+$1ff jmp __breturn // mulf_init::@return __breturn: - // [226] return + // [251] return rts // mulf_init::@6 __b6: - // [227] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [252] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_lo,x ldy #0 sta (sqr2_lo),y - // [228] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [253] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_hi,x ldy #0 sta (sqr2_hi),y - // [229] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 + // [254] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_hi bne !+ inc.z sqr2_hi+1 !: - // [230] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 + // [255] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 txa clc adc.z dir tax - // [231] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 + // [256] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 cpx #0 bne __b9_from___b6 - // [233] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] + // [258] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] __b8_from___b6: - // [233] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + // [258] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 lda #1 sta.z dir jmp __b8 - // [232] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // [257] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] __b9_from___b6: jmp __b9 // mulf_init::@9 __b9: - // [233] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [258] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] __b8_from___b9: - // [233] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // [258] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy jmp __b8 // mulf_init::@8 __b8: - // [234] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + // [259] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_lo bne !+ inc.z sqr2_lo+1 !: - // [222] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [247] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] __b5_from___b8: - // [222] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy - // [222] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy - // [222] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy - // [222] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + // [247] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [247] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [247] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [247] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy jmp __b5 // mulf_init::@2 __b2: - // [235] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + // [260] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 inc.z c - // [236] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 + // [261] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 lda #1 and.z c - // [237] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 + // [262] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 cmp #0 bne __b3_from___b2 jmp __b4 // mulf_init::@4 __b4: - // [238] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx + // [263] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx inx - // [239] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + // [264] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 inc.z sqr bne !+ inc.z sqr+1 !: - // [240] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [265] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] __b3_from___b2: __b3_from___b4: - // [240] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy - // [240] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // [265] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [265] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy jmp __b3 // mulf_init::@3 __b3: - // [241] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 + // [266] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 lda.z sqr - // [242] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuaa + // [267] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuaa ldy #0 sta (sqr1_lo),y - // [243] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 + // [268] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 lda.z sqr+1 - // [244] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa + // [269] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa ldy #0 sta (sqr1_hi),y - // [245] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + // [270] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_hi bne !+ inc.z sqr1_hi+1 !: - // [246] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx + // [271] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx txa clc adc.z sqr @@ -8455,18 +9192,18 @@ mulf_init: { bcc !+ inc.z sqr+1 !: - // [247] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + // [272] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_lo bne !+ inc.z sqr1_lo+1 !: - // [220] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [245] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] __b1_from___b3: - // [220] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy - // [220] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy - // [220] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy - // [220] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy - // [220] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + // [245] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [245] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [245] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [245] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [245] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy jmp __b1 } // File Data @@ -8509,8 +9246,10 @@ SIN: // 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]; BOB_TABLES: .fill 9*8*4, 0 - // Table for getting BOB screen offset from the BOB Y-position - RENDERBOB_YOFFSET: .fill 2*$20, 0 + // Table used for deleting rendered BOB's. Contains pointers to first char of each BOB. + RENDERBOB_CLEANUP: .fill 2*NUM_BOBS, 0 + // *40 Table unsigned int[0x20] MUL40 = { ((unsigned int)i)*40 }; + MUL40: .fill 2*$20, 0 ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 @@ -8526,14 +9265,15 @@ Removing instruction jmp __b7 Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __b3 -Removing instruction jmp __b4 Removing instruction jmp __b11 +Removing instruction jmp __b4 Removing instruction jmp __b12 Removing instruction jmp __b13 -Removing instruction jmp __b5 Removing instruction jmp __b14 -Removing instruction jmp __b6 +Removing instruction jmp __b5 Removing instruction jmp __b15 +Removing instruction jmp __b6 +Removing instruction jmp __b16 Removing instruction jmp vicSelectGfxBank2 Removing instruction jmp vicSelectGfxBank2_toDd001 Removing instruction jmp vicSelectGfxBank2___b1 @@ -8560,6 +9300,9 @@ Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __breturn Removing instruction jmp __b8 Removing instruction jmp __b1 Removing instruction jmp __breturn @@ -8602,6 +9345,15 @@ Removing instruction jmp __b3 Succesful ASM optimization Pass5NextJumpElimination Replacing instruction ldx memB with TAX Removing instruction lda memA +Replacing instruction ldy #0 with TAY +Removing instruction lda #0 +Removing instruction lda #0 +Removing instruction lda #0 +Removing instruction lda #0 +Removing instruction lda #0 +Removing instruction lda #0 +Removing instruction lda #0 +Removing instruction lda #0 Removing instruction lda #0 Replacing instruction lda #0 with TXA Removing instruction lda #0 @@ -8613,13 +9365,15 @@ Removing instruction ldy #0 Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __bbegin with __b1 -Replacing label __b4_from___b13 with __b4 -Replacing label __b6_from___b14 with __b6 -Replacing label __b1 with __b2 +Replacing label __b4_from___b14 with __b4 Replacing label __b6_from___b15 with __b6 +Replacing label __b1 with __b2 +Replacing label __b6_from___b16 with __b6 Replacing label __b1_from___b5 with __b1 Replacing label __b2_from___b1 with __b2 Replacing label __b1_from___b1 with __b1 +Replacing label __b1_from___b1 with __b1 +Replacing label __b2_from___b2 with __b2 Replacing label __b1_from_progress_inc with __b1 Replacing label __breturn_from___b5 with __breturn Replacing label __b3_from___b2 with __b3 @@ -8639,9 +9393,9 @@ Removing instruction vicSelectGfxBank1_toDd001: Removing instruction toD0181_from_vicSelectGfxBank1___b1: Removing instruction toD0181: Removing instruction __b1: -Removing instruction __b4_from___b13: -Removing instruction __b6_from___b14: +Removing instruction __b4_from___b14: Removing instruction __b6_from___b15: +Removing instruction __b6_from___b16: Removing instruction keyboard_key_pressed_from___b6: Removing instruction vicSelectGfxBank2_toDd001_from_vicSelectGfxBank2: Removing instruction vicSelectGfxBank2_toDd001: @@ -8654,6 +9408,8 @@ Removing instruction __b2_from___b1: Removing instruction __b2_from___b4: Removing instruction __breturn: Removing instruction __b1_from___b1: +Removing instruction __b1_from___b1: +Removing instruction __b2_from___b2: Removing instruction __b8_from_prepareBobs: Removing instruction bobCharsetFindOrAddGlyph_from___b8: Removing instruction __b4_from___b2: @@ -8685,17 +9441,19 @@ Removing instruction __b7: Removing instruction memset_from___b7: Removing instruction __b1_from___b7: Removing instruction __b3: -Removing instruction __b4_from___b3: -Removing instruction mulf8s_from___b4: +Removing instruction renderBobCleanup_from___b3: Removing instruction __b11: -Removing instruction mulf8s_from___b11: +Removing instruction __b4_from___b11: +Removing instruction mulf8s_from___b4: Removing instruction __b12: +Removing instruction mulf8s_from___b12: Removing instruction __b13: +Removing instruction __b14: Removing instruction __b5: Removing instruction keyboard_key_pressed_from___b5: -Removing instruction __b14: -Removing instruction __b1_from___b14: Removing instruction __b15: +Removing instruction __b1_from___b15: +Removing instruction __b16: Removing instruction vicSelectGfxBank2: Removing instruction vicSelectGfxBank2___b1: Removing instruction __b8: @@ -8712,10 +9470,13 @@ Removing instruction __b3: Removing instruction __b4: Removing instruction __breturn: Removing instruction __breturn: +Removing instruction __b1_from_renderBobCleanup: +Removing instruction __breturn: Removing instruction __b1_from_memset: Removing instruction __breturn: Removing instruction __b1_from___b2: Removing instruction __b1_from_renderBobInit: +Removing instruction __b2_from___b1: Removing instruction __breturn: Removing instruction progress_init_from_prepareBobs: Removing instruction __b8: @@ -8774,6 +9535,8 @@ Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp __b4 Removing instruction jmp __b1 Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __b1 Removing instruction jmp __b8 Succesful ASM optimization Pass5NextJumpElimination Removing instruction __b1: @@ -8800,6 +9563,8 @@ FINAL SYMBOL TABLE (const signed byte*) COS = (const signed byte*) SIN+(byte) $40 (const byte*) D018 = (byte*) 53272 (const byte) KEY_SPACE = (number) $3c +(const word*) MUL40 = { fill( $20, 0) } +(const byte) NUM_BOBS = (number) $14 (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++) @@ -8810,11 +9575,12 @@ FINAL SYMBOL TABLE (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) RASTER = (byte*) 53266 -(const word*) RENDERBOB_YOFFSET = { fill( $20, 0) } +(const byte**) RENDERBOB_CLEANUP = { fill( NUM_BOBS, 0) } (const byte*) SCREEN_BASIC = (byte*) 1024 (const signed byte*) SIN = kickasm {{ .for(var i=0;i<$140;i++) .byte >round($7fff*sin(i*2*PI/256)) }} +(const byte) SIZEOF_POINTER = (byte) 2 (byte()) bobCharsetFindOrAddGlyph((byte*) bobCharsetFindOrAddGlyph::bob_glyph) (label) bobCharsetFindOrAddGlyph::@1 (label) bobCharsetFindOrAddGlyph::@2 @@ -8827,19 +9593,19 @@ FINAL SYMBOL TABLE (label) bobCharsetFindOrAddGlyph::@9 (label) bobCharsetFindOrAddGlyph::@return (byte*) bobCharsetFindOrAddGlyph::bob_glyph -(byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 bob_glyph zp[2]:16 2002.0 -(byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 bob_glyph zp[2]:16 7400.200000000001 +(byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 bob_glyph zp[2]:6 2002.0 +(byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 bob_glyph zp[2]:6 7400.200000000001 (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]:8 20002.0 -(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 glyph_cursor zp[2]:8 10000.307692307691 +(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 glyph_cursor zp[2]:18 20002.0 +(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 glyph_cursor zp[2]:18 10000.307692307691 (byte) bobCharsetFindOrAddGlyph::glyph_id (byte) bobCharsetFindOrAddGlyph::glyph_id#1 glyph_id zp[1]:14 10001.0 (byte) bobCharsetFindOrAddGlyph::glyph_id#11 glyph_id zp[1]:14 1937.75 (byte) bobCharsetFindOrAddGlyph::i -(byte) bobCharsetFindOrAddGlyph::i#1 i zp[1]:10 200002.0 -(byte) bobCharsetFindOrAddGlyph::i#2 i zp[1]:10 166668.3333333333 +(byte) bobCharsetFindOrAddGlyph::i#1 i zp[1]:8 200002.0 +(byte) bobCharsetFindOrAddGlyph::i#2 i zp[1]:8 166668.3333333333 (byte) bobCharsetFindOrAddGlyph::i1 (byte) bobCharsetFindOrAddGlyph::i1#1 reg byte y 20002.0 (byte) bobCharsetFindOrAddGlyph::i1#2 reg byte y 16668.333333333332 @@ -8875,11 +9641,11 @@ FINAL SYMBOL TABLE (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() -(signed word~) main::$11 zp[2]:6 202.0 -(signed word~) main::$12 zp[2]:6 202.0 -(byte~) main::$18 reg byte a 22.0 -(byte~) main::$20 reg byte a 22.0 -(signed word~) main::$9 zp[2]:6 202.0 +(signed word~) main::$10 zp[2]:12 202.0 +(signed word~) main::$12 zp[2]:12 202.0 +(signed word~) main::$13 zp[2]:12 202.0 +(byte~) main::$19 reg byte a 22.0 +(byte~) main::$21 reg byte a 22.0 (label) main::@1 (label) main::@10 (label) main::@11 @@ -8887,6 +9653,7 @@ FINAL SYMBOL TABLE (label) main::@13 (label) main::@14 (label) main::@15 +(label) main::@16 (label) main::@2 (label) main::@3 (label) main::@4 @@ -8899,10 +9666,10 @@ FINAL SYMBOL TABLE (byte) main::a (byte) main::a#1 a zp[1]:4 28.857142857142858 (byte) main::a#2 a zp[1]:4 25.9375 -(byte) main::a#7 a zp[1]:4 22.0 +(byte) main::a#6 a zp[1]:4 22.0 (byte) main::angle (byte) main::angle#1 angle zp[1]:2 3.6666666666666665 -(byte) main::angle#6 angle zp[1]:2 1.2692307692307692 +(byte) main::angle#8 angle zp[1]:2 1.1785714285714286 (byte) main::i (byte) main::i#1 i zp[1]:5 151.5 (byte) main::i#2 i zp[1]:5 9.619047619047619 @@ -8934,9 +9701,9 @@ FINAL SYMBOL TABLE (byte) main::vicSelectGfxBank2_toDd001_return (const byte) main::vicSelectGfxBank2_toDd001_return#0 vicSelectGfxBank2_toDd001_return = (byte) 3 (signed word) main::x -(signed word) main::x#0 x zp[2]:11 18.363636363636363 +(signed word) main::x#0 x zp[2]:9 18.363636363636363 (signed word) main::y -(signed word) main::y#0 y zp[2]:6 40.4 +(signed word) main::y#0 y zp[2]:12 40.4 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -8968,9 +9735,9 @@ FINAL SYMBOL TABLE (signed byte) mulf8s::mulf8s_prepare1_a (signed byte) mulf8s::mulf8s_prepare1_a#0 reg byte a 202.0 (signed word) mulf8s::return -(signed word) mulf8s::return#0 return zp[2]:6 51.0 -(signed word) mulf8s::return#2 return zp[2]:6 202.0 -(signed word) mulf8s::return#3 return zp[2]:6 202.0 +(signed word) mulf8s::return#0 return zp[2]:12 51.0 +(signed word) mulf8s::return#2 return zp[2]:12 202.0 +(signed word) mulf8s::return#3 return zp[2]:12 202.0 (signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) (byte~) mulf8s_prepared::$12 reg byte a 4.0 (byte~) mulf8s_prepared::$15 reg byte a 4.0 @@ -8985,11 +9752,11 @@ FINAL SYMBOL TABLE (signed byte) mulf8s_prepared::b (signed byte) mulf8s_prepared::b#0 b zp[1]:15 0.4 (word) mulf8s_prepared::m -(word) mulf8s_prepared::m#0 m zp[2]:6 2.0 -(word) mulf8s_prepared::m#1 m zp[2]:6 4.0 -(word) mulf8s_prepared::m#2 m zp[2]:6 4.0 -(word) mulf8s_prepared::m#4 m zp[2]:6 1.3333333333333333 -(word) mulf8s_prepared::m#5 m zp[2]:6 2.5 +(word) mulf8s_prepared::m#0 m zp[2]:12 2.0 +(word) mulf8s_prepared::m#1 m zp[2]:12 4.0 +(word) mulf8s_prepared::m#2 m zp[2]:12 4.0 +(word) mulf8s_prepared::m#4 m zp[2]:12 1.3333333333333333 +(word) mulf8s_prepared::m#5 m zp[2]:12 2.5 (const signed byte*) mulf8s_prepared::memA = (signed byte*) 253 (signed word) mulf8s_prepared::return (void()) mulf8u_prepare((byte) mulf8u_prepare::a) @@ -9004,8 +9771,8 @@ FINAL SYMBOL TABLE (const byte*) mulf8u_prepared::memB = (byte*) 255 (const byte*) mulf8u_prepared::resL = (byte*) 254 (word) mulf8u_prepared::return -(word) mulf8u_prepared::return#0 return zp[2]:6 1.3333333333333333 -(word) mulf8u_prepared::return#2 return zp[2]:6 4.0 +(word) mulf8u_prepared::return#0 return zp[2]:12 1.3333333333333333 +(word) mulf8u_prepared::return#2 return zp[2]:12 4.0 (void()) mulf_init() (byte~) mulf_init::$1 reg byte a 22.0 (byte~) mulf_init::$4 reg byte a 22.0 @@ -9024,13 +9791,13 @@ FINAL SYMBOL TABLE (byte) mulf_init::c#1 c zp[1]:15 2.5384615384615383 (byte) mulf_init::c#2 c zp[1]:15 11.0 (byte) mulf_init::dir -(byte) mulf_init::dir#2 dir zp[1]:10 4.125 -(byte) mulf_init::dir#4 dir zp[1]:10 11.0 +(byte) mulf_init::dir#2 dir zp[1]:8 4.125 +(byte) mulf_init::dir#4 dir zp[1]:8 11.0 (word) mulf_init::sqr -(word) mulf_init::sqr#1 sqr zp[2]:11 11.0 -(word) mulf_init::sqr#2 sqr zp[2]:11 22.0 -(word) mulf_init::sqr#3 sqr zp[2]:11 9.166666666666666 -(word) mulf_init::sqr#4 sqr zp[2]:11 5.5 +(word) mulf_init::sqr#1 sqr zp[2]:12 11.0 +(word) mulf_init::sqr#2 sqr zp[2]:12 22.0 +(word) mulf_init::sqr#3 sqr zp[2]:12 9.166666666666666 +(word) mulf_init::sqr#4 sqr zp[2]:12 5.5 (byte*) mulf_init::sqr1_hi (byte*) mulf_init::sqr1_hi#1 sqr1_hi zp[2]:16 7.333333333333333 (byte*) mulf_init::sqr1_hi#2 sqr1_hi zp[2]:16 2.75 @@ -9038,8 +9805,8 @@ FINAL SYMBOL TABLE (byte*) mulf_init::sqr1_lo#1 sqr1_lo zp[2]:6 22.0 (byte*) mulf_init::sqr1_lo#2 sqr1_lo zp[2]:6 3.142857142857143 (byte*) mulf_init::sqr2_hi -(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp[2]:8 3.6666666666666665 -(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp[2]:8 8.25 +(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp[2]:9 3.6666666666666665 +(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp[2]:9 8.25 (byte*) mulf_init::sqr2_lo (byte*) mulf_init::sqr2_lo#1 sqr2_lo zp[2]:18 22.0 (byte*) mulf_init::sqr2_lo#2 sqr2_lo zp[2]:18 4.888888888888889 @@ -9071,19 +9838,19 @@ FINAL SYMBOL TABLE (label) prepareBobs::@9 (label) prepareBobs::@return (byte*) prepareBobs::bob_glyph -(byte*) prepareBobs::bob_glyph#1 bob_glyph zp[2]:16 500.5 -(byte*) prepareBobs::bob_glyph#2 bob_glyph zp[2]:16 429.0 +(byte*) prepareBobs::bob_glyph#1 bob_glyph zp[2]:6 500.5 +(byte*) prepareBobs::bob_glyph#2 bob_glyph zp[2]:6 429.0 (byte*) prepareBobs::bob_table -(byte*) prepareBobs::bob_table#0 bob_table zp[2]:18 202.0 -(byte*) prepareBobs::bob_table#1 bob_table zp[2]:18 667.3333333333334 -(byte*) prepareBobs::bob_table#2 bob_table zp[2]:18 388.0 +(byte*) prepareBobs::bob_table#0 bob_table zp[2]:16 202.0 +(byte*) prepareBobs::bob_table#1 bob_table zp[2]:16 667.3333333333334 +(byte*) prepareBobs::bob_table#2 bob_table zp[2]:16 388.0 (byte) prepareBobs::bob_table_idx (byte) prepareBobs::bob_table_idx#1 bob_table_idx zp[1]:4 40.4 (byte) prepareBobs::bob_table_idx#12 bob_table_idx zp[1]:4 19.11764705882353 (byte) prepareBobs::bob_table_idx#6 bob_table_idx zp[1]:4 11.0 (byte) prepareBobs::cell -(byte) prepareBobs::cell#1 cell zp[1]:13 2002.0 -(byte) prepareBobs::cell#2 cell zp[1]:13 300.29999999999995 +(byte) prepareBobs::cell#1 cell zp[1]:11 2002.0 +(byte) prepareBobs::cell#2 cell zp[1]:11 300.29999999999995 (byte) prepareBobs::shift_x (byte) prepareBobs::shift_x#1 shift_x zp[1]:5 202.0 (byte) prepareBobs::shift_x#2 shift_x zp[1]:5 16.833333333333332 @@ -9091,11 +9858,11 @@ 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.4347826086956523 (byte*) progress_cursor -(byte*) progress_cursor#15 progress_cursor zp[2]:6 11.0 -(byte*) progress_cursor#17 progress_cursor zp[2]:6 201.4 -(byte*) progress_cursor#24 progress_cursor zp[2]:6 71.11764705882355 -(byte*) progress_cursor#31 progress_cursor zp[2]:6 37.33333333333333 -(byte*) progress_cursor#8 progress_cursor zp[2]:6 4.0 +(byte*) progress_cursor#15 progress_cursor zp[2]:12 11.0 +(byte*) progress_cursor#17 progress_cursor zp[2]:12 201.4 +(byte*) progress_cursor#24 progress_cursor zp[2]:12 71.11764705882355 +(byte*) progress_cursor#31 progress_cursor zp[2]:12 37.33333333333333 +(byte*) progress_cursor#8 progress_cursor zp[2]:12 4.0 (byte) progress_idx (byte) progress_idx#10 progress_idx zp[1]:3 201.0 (byte) progress_idx#16 progress_idx zp[1]:3 11.0 @@ -9111,34 +9878,51 @@ FINAL SYMBOL TABLE (label) progress_init::@return (byte*) progress_init::line (void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos) -(byte*~) renderBob::$2 zp[2]:16 4.0 +(byte*~) renderBob::$2 zp[2]:12 4.0 (byte~) renderBob::$4 reg byte a 4.0 (byte~) renderBob::$5 zp[1]:14 2.0 (byte~) renderBob::$6 reg byte a 4.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 reg byte x 1.8181818181818186 (byte*) renderBob::screen -(byte*) renderBob::screen#0 screen zp[2]:16 1.5384615384615383 +(byte*) renderBob::screen#0 screen zp[2]:12 1.4666666666666666 (byte) renderBob::x_char_offset -(byte) renderBob::x_char_offset#0 x_char_offset zp[1]:13 0.8 +(byte) renderBob::x_char_offset#0 x_char_offset zp[1]:11 0.8 (byte) renderBob::xpos (byte) renderBob::xpos#0 xpos zp[1]:15 10.499999999999998 (byte) renderBob::y_char_offset (byte) renderBob::y_char_offset#0 reg byte a 4.0 (word) renderBob::y_offset -(word) renderBob::y_offset#0 y_offset zp[2]:16 4.0 +(word) renderBob::y_offset#0 y_offset zp[2]:12 4.0 (byte) renderBob::ypos (byte) renderBob::ypos#0 reg byte x 15.000000000000002 +(void()) renderBobCleanup() +(byte~) renderBobCleanup::$1 reg byte a 202.0 +(label) renderBobCleanup::@1 +(label) renderBobCleanup::@return +(byte) renderBobCleanup::i +(byte) renderBobCleanup::i#1 reg byte x 151.5 +(byte) renderBobCleanup::i#2 reg byte x 25.25 +(byte*) renderBobCleanup::screen +(byte*) renderBobCleanup::screen#0 screen zp[2]:16 112.22222222222223 +(byte**) renderBobCleanupNext +(byte**) renderBobCleanupNext#13 renderBobCleanupNext zp[2]:6 7.357142857142858 +(byte**) renderBobCleanupNext#17 renderBobCleanupNext zp[2]:6 3.3870967741935485 (void()) renderBobInit() (word~) renderBobInit::$0 zp[2]:16 16.5 (word~) renderBobInit::$1 zp[2]:16 11.0 -(byte~) renderBobInit::$3 reg byte a 22.0 -(word~) renderBobInit::$4 zp[2]:18 22.0 -(word~) renderBobInit::$5 zp[2]:16 22.0 +(byte~) renderBobInit::$4 reg byte a 22.0 +(byte~) renderBobInit::$5 reg byte a 22.0 +(word~) renderBobInit::$6 zp[2]:18 22.0 +(word~) renderBobInit::$7 zp[2]:16 22.0 (label) renderBobInit::@1 +(label) renderBobInit::@2 (label) renderBobInit::@return +(byte) renderBobInit::i +(byte) renderBobInit::i#1 reg byte x 16.5 +(byte) renderBobInit::i#2 reg byte x 11.0 (byte) renderBobInit::y (byte) renderBobInit::y#1 reg byte x 16.5 (byte) renderBobInit::y#2 reg byte x 4.714285714285714 @@ -9167,8 +9951,8 @@ FINAL SYMBOL TABLE (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]:13 1001.0 -(byte) shiftProtoBobRight::i#2 i zp[1]:13 231.0 +(byte) shiftProtoBobRight::i#1 i zp[1]:11 1001.0 +(byte) shiftProtoBobRight::i#2 i zp[1]:11 231.0 (byte) shiftProtoBobRight::j (byte) shiftProtoBobRight::j#1 reg byte x 2002.0 (byte) shiftProtoBobRight::j#10 reg byte x 1001.0 @@ -9178,34 +9962,36 @@ FINAL SYMBOL TABLE reg byte a [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] reg byte x [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] +reg byte x [ renderBobCleanup::i#2 renderBobCleanup::i#1 ] reg byte x [ renderBobInit::y#2 renderBobInit::y#1 ] -zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::angle#6 main::angle#1 ] +reg byte x [ renderBobInit::i#2 renderBobInit::i#1 ] +zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::angle#8 main::angle#1 ] zp[1]:3 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 main::r#2 main::r#1 ] -zp[1]:4 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 main::a#2 main::a#1 main::a#7 ] +zp[1]:4 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 main::a#2 main::a#6 main::a#1 ] zp[1]:5 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 main::i#2 main::i#1 ] reg byte y [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] reg byte a [ bobCharsetFindOrAddGlyph::found#2 ] 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 x [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] -zp[2]:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 memset::dst#2 memset::dst#1 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$9 mulf8s::return#3 main::$11 mulf8u_prepared::return#0 main::$12 main::y#0 ] +zp[2]:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 memset::dst#2 memset::dst#1 renderBobCleanupNext#17 renderBobCleanupNext#13 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] -zp[2]:8 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] -zp[1]:10 [ mulf_init::dir#2 mulf_init::dir#4 bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -zp[2]:11 [ main::x#0 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] +zp[1]:8 [ mulf_init::dir#2 mulf_init::dir#4 bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +zp[2]:9 [ main::x#0 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] reg byte x [ renderBob::ypos#0 ] reg byte a [ keyboard_key_pressed::return#2 ] -reg byte a [ main::$18 ] +reg byte a [ main::$19 ] reg byte a [ keyboard_key_pressed::return#3 ] -reg byte a [ main::$20 ] +reg byte a [ main::$21 ] 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]:13 [ renderBob::x_char_offset#0 shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] +zp[1]:11 [ renderBob::x_char_offset#0 shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] reg byte a [ renderBob::y_char_offset#0 ] reg byte a [ renderBob::$8 ] +zp[2]:12 [ renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$10 mulf8s::return#3 main::$12 mulf8u_prepared::return#0 main::$13 main::y#0 ] reg byte a [ renderBob::$4 ] zp[1]:14 [ renderBob::$5 shiftProtoBobRight::carry#1 bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] reg byte a [ renderBob::$6 ] @@ -9217,9 +10003,11 @@ reg byte a [ mulf8s_prepared::$8 ] reg byte a [ mulf8s_prepared::$15 ] reg byte a [ mulf8s_prepared::$12 ] reg byte a [ mulf8s_prepared::$16 ] -zp[2]:16 [ renderBobInit::$0 renderBobInit::$5 renderBobInit::$1 renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] -zp[2]:18 [ renderBobInit::$4 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] -reg byte a [ renderBobInit::$3 ] +reg byte a [ renderBobCleanup::$1 ] +zp[2]:16 [ renderBobInit::$0 renderBobInit::$7 renderBobInit::$1 renderBobCleanup::screen#0 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] +zp[2]:18 [ renderBobInit::$6 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] +reg byte a [ renderBobInit::$4 ] +reg byte a [ renderBobInit::$5 ] reg byte a [ bobCharsetFindOrAddGlyph::return#1 ] reg byte a [ prepareBobs::$6 ] reg byte a [ shiftProtoBobRight::$1 ] @@ -9231,7 +10019,7 @@ reg byte a [ mulf_init::$5 ] FINAL ASSEMBLER -Score: 5790209 +Score: 5801955 // File Comments // Pre-calculated bobs inside a charset (pre-moved to all x/y-combinations) @@ -9266,13 +10054,19 @@ Score: 5790209 .const BOB_SHIFTS_Y = 8 // The size of a sub-table of BOB_TABLES .const BOB_SUBTABLE_SIZE = BOB_SHIFTS_X*BOB_SHIFTS_Y + // The number of BOBs to render + .const NUM_BOBS = $14 + .const SIZEOF_POINTER = 2 .label COS = SIN+$40 // BOB charset ID of the next glyph to be added .label bob_charset_next_id = $f // Current index within the progress cursor (0-7) .label progress_idx = 3 // Current position of the progress cursor - .label progress_cursor = 6 + .label progress_cursor = $c + // Pointer to the next clean-up to add + // Prepare for next clean-up + .label renderBobCleanupNext = 6 // @begin // @1 // kickasm @@ -9293,11 +10087,11 @@ main: { .const vicSelectGfxBank2_toDd001_return = 3 .const toD0181_return = (>(BOB_SCREEN&$3fff)*4)|(>BOB_CHARSET)/4&$f .const toD0182_return = (>(SCREEN_BASIC&$3fff)*4)|(>CHARSET_BASIC)/4&$f - .label __9 = 6 - .label __11 = 6 - .label __12 = 6 - .label x = $b - .label y = 6 + .label __10 = $c + .label __12 = $c + .label __13 = $c + .label x = 9 + .label y = $c .label a = 4 .label r = 3 .label i = 5 @@ -9305,19 +10099,19 @@ main: { .label angle = 2 // mulf_init() // [6] call mulf_init - // [219] phi from main to mulf_init [phi:main->mulf_init] + // [244] phi from main to mulf_init [phi:main->mulf_init] jsr mulf_init // [7] phi from main to main::@9 [phi:main->main::@9] // main::@9 // prepareBobs() // [8] call prepareBobs - // [135] phi from main::@9 to prepareBobs [phi:main::@9->prepareBobs] + // [160] phi from main::@9 to prepareBobs [phi:main::@9->prepareBobs] jsr prepareBobs // [9] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // renderBobInit() // [10] call renderBobInit - // [124] phi from main::@10 to renderBobInit [phi:main::@10->renderBobInit] + // [144] phi from main::@10 to renderBobInit [phi:main::@10->renderBobInit] jsr renderBobInit // main::vicSelectGfxBank1 // *CIA2_PORT_A_DDR = %00000011 @@ -9340,10 +10134,10 @@ main: { sta D018 // memset(BOB_SCREEN, 0x00, 1000) // [16] call memset - // [118] phi from main::@7 to memset [phi:main::@7->memset] + // [138] phi from main::@7 to memset [phi:main::@7->memset] jsr memset // [17] phi from main::@7 to main::@1 [phi:main::@7->main::@1] - // [17] phi (byte) main::angle#6 = (byte) 0 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 + // [17] phi (byte) main::angle#8 = (byte) 0 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z angle // main::@1 @@ -9355,73 +10149,88 @@ main: { cmp #$f8 bcc __b2 // main::@3 - // [19] (byte) main::a#7 ← (byte) main::angle#6 -- vbuz1=vbuz2 + // *BORDERCOL = 0xf + // [19] *((const byte*) BORDERCOL) ← (byte) $f -- _deref_pbuc1=vbuc2 + lda #$f + sta BORDERCOL + // renderBobCleanup() + // [20] call renderBobCleanup + // [122] phi from main::@3 to renderBobCleanup [phi:main::@3->renderBobCleanup] + jsr renderBobCleanup + // main::@11 + // [21] (byte) main::a#6 ← (byte) main::angle#8 -- vbuz1=vbuz2 lda.z angle sta.z a - // [20] phi from main::@3 to main::@4 [phi:main::@3->main::@4] - // [20] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@4#0] -- vbuz1=vbuc1 + // [22] phi from main::@11 to main::@4 [phi:main::@11->main::@4] + // [22] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@4#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [20] phi (byte) main::a#2 = (byte) main::a#7 [phi:main::@3->main::@4#1] -- register_copy - // [20] phi (signed byte) main::r#2 = (signed byte) $1e [phi:main::@3->main::@4#2] -- vbsz1=vbsc1 + // [22] phi (byte**) renderBobCleanupNext#17 = (const byte**) RENDERBOB_CLEANUP [phi:main::@11->main::@4#1] -- pptz1=pptc1 + lda #RENDERBOB_CLEANUP + sta.z renderBobCleanupNext+1 + // [22] phi (byte) main::a#2 = (byte) main::a#6 [phi:main::@11->main::@4#2] -- register_copy + // [22] phi (signed byte) main::r#2 = (signed byte) $1e [phi:main::@11->main::@4#3] -- vbsz1=vbsc1 lda #$1e sta.z r - // [20] phi from main::@13 to main::@4 [phi:main::@13->main::@4] - // [20] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@13->main::@4#0] -- register_copy - // [20] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@13->main::@4#1] -- register_copy - // [20] phi (signed byte) main::r#2 = (signed byte) main::r#1 [phi:main::@13->main::@4#2] -- register_copy + // [22] phi from main::@14 to main::@4 [phi:main::@14->main::@4] + // [22] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@14->main::@4#0] -- register_copy + // [22] phi (byte**) renderBobCleanupNext#17 = (byte**) renderBobCleanupNext#13 [phi:main::@14->main::@4#1] -- register_copy + // [22] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@14->main::@4#2] -- register_copy + // [22] phi (signed byte) main::r#2 = (signed byte) main::r#1 [phi:main::@14->main::@4#3] -- register_copy // main::@4 __b4: // *BORDERCOL = 1 - // [21] *((const byte*) BORDERCOL) ← (byte) 1 -- _deref_pbuc1=vbuc2 + // [23] *((const byte*) BORDERCOL) ← (byte) 1 -- _deref_pbuc1=vbuc2 //kickasm {{ .break }} lda #1 sta BORDERCOL // mulf8s(r, COS[a]) - // [22] (signed byte) mulf8s::a#0 ← (signed byte) main::r#2 -- vbsaa=vbsz1 + // [24] (signed byte) mulf8s::a#0 ← (signed byte) main::r#2 -- vbsaa=vbsz1 lda.z r - // [23] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) main::a#2) -- vbsxx=pbsc1_derefidx_vbuz1 + // [25] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) main::a#2) -- vbsxx=pbsc1_derefidx_vbuz1 ldy.z a ldx COS,y - // [24] call mulf8s - // [89] phi from main::@4 to mulf8s [phi:main::@4->mulf8s] - // [89] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#0 [phi:main::@4->mulf8s#0] -- register_copy - // [89] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#0 [phi:main::@4->mulf8s#1] -- register_copy + // [26] call mulf8s + // [93] phi from main::@4 to mulf8s [phi:main::@4->mulf8s] + // [93] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#0 [phi:main::@4->mulf8s#0] -- register_copy + // [93] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#0 [phi:main::@4->mulf8s#1] -- register_copy jsr mulf8s // mulf8s(r, COS[a]) - // [25] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 - // main::@11 - // [26] (signed word~) main::$9 ← (signed word) mulf8s::return#2 + // [27] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 + // main::@12 + // [28] (signed word~) main::$10 ← (signed word) mulf8s::return#2 // x = mulf8s(r, COS[a]) + 75*0x100 - // [27] (signed word) main::x#0 ← (signed word~) main::$9 + (signed word)(number) $4b*(number) $100 -- vwsz1=vwsz2_plus_vwsc1 - lda.z __9 + // [29] (signed word) main::x#0 ← (signed word~) main::$10 + (signed word)(number) $4b*(number) $100 -- vwsz1=vwsz2_plus_vwsc1 + lda.z __10 clc adc #<$4b*$100 sta.z x - lda.z __9+1 + lda.z __10+1 adc #>$4b*$100 sta.z x+1 // mulf8s(r, SIN[a]) - // [28] (signed byte) mulf8s::a#1 ← (signed byte) main::r#2 -- vbsaa=vbsz1 + // [30] (signed byte) mulf8s::a#1 ← (signed byte) main::r#2 -- vbsaa=vbsz1 lda.z r - // [29] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#2) -- vbsxx=pbsc1_derefidx_vbuz1 + // [31] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) main::a#2) -- vbsxx=pbsc1_derefidx_vbuz1 ldy.z a ldx SIN,y - // [30] call mulf8s - // [89] phi from main::@11 to mulf8s [phi:main::@11->mulf8s] - // [89] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#1 [phi:main::@11->mulf8s#0] -- register_copy - // [89] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#1 [phi:main::@11->mulf8s#1] -- register_copy + // [32] call mulf8s + // [93] phi from main::@12 to mulf8s [phi:main::@12->mulf8s] + // [93] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#1 [phi:main::@12->mulf8s#0] -- register_copy + // [93] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#1 [phi:main::@12->mulf8s#1] -- register_copy jsr mulf8s // mulf8s(r, SIN[a]) - // [31] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 - // main::@12 - // [32] (signed word~) main::$11 ← (signed word) mulf8s::return#3 + // [33] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 + // main::@13 + // [34] (signed word~) main::$12 ← (signed word) mulf8s::return#3 // mulf8s(r, SIN[a])*2 - // [33] (signed word~) main::$12 ← (signed word~) main::$11 << (byte) 1 -- vwsz1=vwsz1_rol_1 - asl.z __12 - rol.z __12+1 + // [35] (signed word~) main::$13 ← (signed word~) main::$12 << (byte) 1 -- vwsz1=vwsz1_rol_1 + asl.z __13 + rol.z __13+1 // y = mulf8s(r, SIN[a])*2 + 90*0x100 - // [34] (signed word) main::y#0 ← (signed word~) main::$12 + (signed word)(number) $5a*(number) $100 -- vwsz1=vwsz1_plus_vwsc1 + // [36] (signed word) main::y#0 ← (signed word~) main::$13 + (signed word)(number) $5a*(number) $100 -- vwsz1=vwsz1_plus_vwsc1 clc lda.z y adc #<$5a*$100 @@ -9430,99 +10239,99 @@ main: { adc #>$5a*$100 sta.z y+1 // *BORDERCOL = 2 - // [35] *((const byte*) BORDERCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 + // [37] *((const byte*) BORDERCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 lda #2 sta BORDERCOL // a += 98 - // [36] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 -- vbuz1=vbuz1_plus_vbuc1 + // [38] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 -- vbuz1=vbuz1_plus_vbuc1 lax.z a axs #-[$62] stx.z a // r += 3 - // [37] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 -- vbsz1=vbsz1_plus_vbsc1 + // [39] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 -- vbsz1=vbsz1_plus_vbsc1 lax.z r axs #-[3] stx.z r // renderBob(>x, >y) - // [38] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 -- vbuz1=_hi_vwsz2 + // [40] (byte) renderBob::xpos#0 ← > (signed word) main::x#0 -- vbuz1=_hi_vwsz2 lda.z x+1 sta.z renderBob.xpos - // [39] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 -- vbuxx=_hi_vwsz1 + // [41] (byte) renderBob::ypos#0 ← > (signed word) main::y#0 -- vbuxx=_hi_vwsz1 lda.z y+1 tax - // [40] call renderBob + // [42] call renderBob jsr renderBob - // main::@13 - // for(char i: 0..25) - // [41] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // main::@14 + // for(char i: 0..NUM_BOBS-1) + // [43] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [42] if((byte) main::i#1!=(byte) $1a) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 - lda #$1a + // [44] if((byte) main::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 + lda #NUM_BOBS-1+1 cmp.z i bne __b4 // main::@5 // angle += 3 - // [43] (byte) main::angle#1 ← (byte) main::angle#6 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [45] (byte) main::angle#1 ← (byte) main::angle#8 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax.z angle axs #-[3] stx.z angle // *BORDERCOL = 0 - // [44] *((const byte*) BORDERCOL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [46] *((const byte*) BORDERCOL) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta BORDERCOL // keyboard_key_pressed(KEY_SPACE) - // [45] call keyboard_key_pressed - // [60] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] + // [47] call keyboard_key_pressed + // [62] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] jsr keyboard_key_pressed // keyboard_key_pressed(KEY_SPACE) - // [46] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 - // main::@14 - // [47] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#2 + // [48] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + // main::@15 + // [49] (byte~) main::$19 ← (byte) keyboard_key_pressed::return#2 // if(keyboard_key_pressed(KEY_SPACE)) - // [48] if((byte) 0!=(byte~) main::$18) goto main::@6 -- vbuc1_neq_vbuaa_then_la1 + // [50] if((byte) 0!=(byte~) main::$19) goto main::@6 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne __b6 - // [17] phi from main::@14 to main::@1 [phi:main::@14->main::@1] - // [17] phi (byte) main::angle#6 = (byte) main::angle#1 [phi:main::@14->main::@1#0] -- register_copy + // [17] phi from main::@15 to main::@1 [phi:main::@15->main::@1] + // [17] phi (byte) main::angle#8 = (byte) main::angle#1 [phi:main::@15->main::@1#0] -- register_copy jmp __b2 // Wait for space release - // [49] phi from main::@14 main::@15 to main::@6 [phi:main::@14/main::@15->main::@6] + // [51] phi from main::@15 main::@16 to main::@6 [phi:main::@15/main::@16->main::@6] // main::@6 __b6: // keyboard_key_pressed(KEY_SPACE) - // [50] call keyboard_key_pressed - // [60] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed] + // [52] call keyboard_key_pressed + // [62] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed] jsr keyboard_key_pressed // keyboard_key_pressed(KEY_SPACE) - // [51] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 - // main::@15 - // [52] (byte~) main::$20 ← (byte) keyboard_key_pressed::return#3 + // [53] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 + // main::@16 + // [54] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#3 // while(keyboard_key_pressed(KEY_SPACE)) - // [53] if((byte) 0!=(byte~) main::$20) goto main::@6 -- vbuc1_neq_vbuaa_then_la1 + // [55] if((byte) 0!=(byte~) main::$21) goto main::@6 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne __b6 // main::vicSelectGfxBank2 // *CIA2_PORT_A_DDR = %00000011 - // [54] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [56] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 sta CIA2_PORT_A_DDR - // [55] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001] + // [57] 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) - // [56] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [58] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank2_toDd001_return sta CIA2_PORT_A - // [57] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] + // [59] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] // main::toD0182 // main::@8 // *D018 = toD018(SCREEN_BASIC, CHARSET_BASIC) - // [58] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 + // [60] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 lda #toD0182_return sta D018 // main::@return // } - // [59] return + // [61] return rts } // keyboard_key_pressed @@ -9534,17 +10343,17 @@ keyboard_key_pressed: { .const colidx = KEY_SPACE&7 .label rowidx = KEY_SPACE>>3 // keyboard_matrix_read(rowidx) - // [61] call keyboard_matrix_read + // [63] call keyboard_matrix_read jsr keyboard_matrix_read - // [62] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + // [64] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 // keyboard_key_pressed::@1 - // [63] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 + // [65] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 // keyboard_matrix_read(rowidx) & keyboard_matrix_col_bitmask[colidx] - // [64] (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 + // [66] (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 // } - // [65] return + // [67] return rts } // keyboard_matrix_read @@ -9555,16 +10364,16 @@ keyboard_key_pressed: { // 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] - // [66] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // [68] *((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 - // [67] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + // [69] (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 // } - // [68] return + // [70] return rts } // renderBob @@ -9573,36 +10382,35 @@ keyboard_matrix_read: { // Y-position is 0-183. Each y-position is 1 pixel high. // renderBob(byte zeropage($f) xpos, byte register(X) ypos) renderBob: { - .label __2 = $10 + .label __2 = $c .label __5 = $e .label xpos = $f - .label x_char_offset = $d - .label y_offset = $10 - .label screen = $10 + .label x_char_offset = $b + .label y_offset = $c + .label screen = $c // x_char_offset = xpos/BOB_SHIFTS_X - // [69] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 -- vbuz1=vbuz2_ror_2 + // [71] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 -- vbuz1=vbuz2_ror_2 lda.z xpos lsr lsr sta.z x_char_offset // y_char_offset = ypos/BOB_SHIFTS_Y - // [70] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 -- vbuaa=vbuxx_ror_3 + // [72] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 -- vbuaa=vbuxx_ror_3 txa lsr lsr lsr - // y_offset = RENDERBOB_YOFFSET[y_char_offset] - // [71] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // y_offset = MUL40[y_char_offset] + // [73] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [72] (word) renderBob::y_offset#0 ← *((const word*) RENDERBOB_YOFFSET + (byte~) renderBob::$8) -- vwuz1=pwuc1_derefidx_vbuaa - //unsigned int y_offset = (unsigned int)y_char_offset*40; + // [74] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8) -- vwuz1=pwuc1_derefidx_vbuaa tay - lda RENDERBOB_YOFFSET,y + lda MUL40,y sta.z y_offset - lda RENDERBOB_YOFFSET+1,y + lda MUL40+1,y sta.z y_offset+1 // BOB_SCREEN+y_offset - // [73] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz1 + // [75] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __2 adc #BOB_SCREEN sta.z __2+1 // screen = BOB_SCREEN+y_offset+x_char_offset - // [74] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz1_plus_vbuz2 + // [76] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz1_plus_vbuz2 lda.z x_char_offset clc adc.z screen @@ -9620,94 +10428,111 @@ renderBob: { inc.z screen+1 !: // ypos&7 - // [75] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 -- vbuaa=vbuxx_band_vbuc1 + // [77] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 -- vbuaa=vbuxx_band_vbuc1 txa and #7 // (ypos&7)*BOB_SHIFTS_X - // [76] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 -- vbuz1=vbuaa_rol_2 + // [78] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 -- vbuz1=vbuaa_rol_2 asl asl sta.z __5 // xpos&3 - // [77] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 -- vbuaa=vbuz1_band_vbuc1 + // [79] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 -- vbuaa=vbuz1_band_vbuc1 lda #3 and.z xpos // bob_table_idx = (ypos&7)*BOB_SHIFTS_X+(xpos&3) - // [78] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 -- vbuxx=vbuz1_plus_vbuaa + // [80] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 -- vbuxx=vbuz1_plus_vbuaa clc adc.z __5 tax + // *renderBobCleanupNext++ = screen + // [81] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0 -- _deref_pptz1=pbuz2 + ldy #0 + lda.z screen + sta (renderBobCleanupNext),y + iny + lda.z screen+1 + sta (renderBobCleanupNext),y + // *renderBobCleanupNext++ = screen; + // [82] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER -- pptz1=pptz1_plus_vbuc1 + lda #SIZEOF_POINTER + clc + adc.z renderBobCleanupNext + sta.z renderBobCleanupNext + bcc !+ + inc.z renderBobCleanupNext+1 + !: // screen[0] = (BOB_TABLES+0*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [79] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [83] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda BOB_TABLES,x ldy #0 sta (screen),y // screen[40] = (BOB_TABLES+1*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [80] *((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 + // [84] *((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 ldy #$28 sta (screen),y // screen[80] = (BOB_TABLES+2*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [81] *((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 + // [85] *((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 ldy #$50 sta (screen),y // screen[1] = (BOB_TABLES+3*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [82] *((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 + // [86] *((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 ldy #1 sta (screen),y // screen[41] = (BOB_TABLES+4*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [83] *((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 + // [87] *((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 ldy #$29 sta (screen),y // screen[81] = (BOB_TABLES+5*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [84] *((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 + // [88] *((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 ldy #$51 sta (screen),y // screen[2] = (BOB_TABLES+6*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [85] *((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 + // [89] *((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 ldy #2 sta (screen),y // screen[42] = (BOB_TABLES+7*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [86] *((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 + // [90] *((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 ldy #$2a sta (screen),y // screen[82] = (BOB_TABLES+8*BOB_SUBTABLE_SIZE)[bob_table_idx] - // [87] *((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 + // [91] *((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 ldy #$52 sta (screen),y // renderBob::@return // } - // [88] return + // [92] return rts } // mulf8s // Fast multiply two signed bytes to a word result // mulf8s(signed byte register(A) a, signed byte register(X) b) mulf8s: { - .label return = 6 + .label return = $c // mulf8s::mulf8s_prepare1 // mulf8u_prepare((byte)a) - // [90] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 - // [91] call mulf8u_prepare + // [94] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 + // [95] call mulf8u_prepare jsr mulf8u_prepare // mulf8s::@1 // mulf8s_prepared(b) - // [92] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 -- vbsz1=vbsxx + // [96] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 -- vbsz1=vbsxx stx.z mulf8s_prepared.b - // [93] call mulf8s_prepared + // [97] call mulf8s_prepared jsr mulf8s_prepared // mulf8s::@2 - // [94] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 + // [98] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 // mulf8s::@return // } - // [95] return + // [99] return rts } // mulf8s_prepared @@ -9716,58 +10541,58 @@ mulf8s: { // mulf8s_prepared(signed byte zeropage($f) b) mulf8s_prepared: { .label memA = $fd - .label m = 6 + .label m = $c .label b = $f // mulf8u_prepared((byte) b) - // [96] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuz1 + // [100] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuz1 lda.z b - // [97] call mulf8u_prepared + // [101] call mulf8u_prepared jsr mulf8u_prepared - // [98] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + // [102] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 // mulf8s_prepared::@5 // m = mulf8u_prepared((byte) b) - // [99] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 + // [103] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 // if(*memA<0) - // [100] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 + // [104] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 lda memA cmp #0 bpl __b1 // mulf8s_prepared::@3 // >m - // [101] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 + // [105] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 lda.z m+1 // >m = (>m)-(byte)b - // [102] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 + // [106] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 sec sbc.z b - // [103] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuaa + // [107] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuaa sta.z m+1 - // [104] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] - // [104] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy + // [108] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] + // [108] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy // mulf8s_prepared::@1 __b1: // if(b<0) - // [105] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 + // [109] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 lda.z b cmp #0 bpl __b2 // mulf8s_prepared::@4 // >m - // [106] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 + // [110] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 lda.z m+1 // >m = (>m)-(byte)*memA - // [107] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuaa=vbuaa_minus__deref_pbuc1 + // [111] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuaa=vbuaa_minus__deref_pbuc1 sec sbc memA - // [108] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuaa + // [112] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuaa sta.z m+1 - // [109] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] - // [109] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy + // [113] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] + // [113] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy // mulf8s_prepared::@2 __b2: // mulf8s_prepared::@return // } - // [110] return + // [114] return rts } // mulf8u_prepared @@ -9777,9 +10602,9 @@ mulf8s_prepared: { mulf8u_prepared: { .label resL = $fe .label memB = $ff - .label return = 6 + .label return = $c // *memB = b - // [111] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 -- _deref_pbuc1=vbuaa + // [115] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 -- _deref_pbuc1=vbuaa sta memB // asm // asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } @@ -9796,14 +10621,14 @@ mulf8u_prepared: { sbc mulf_sqr2_hi,x sta memB // return { *memB, *resL }; - // [113] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + // [117] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda resL sta.z return lda memB sta.z return+1 // mulf8u_prepared::@return // } - // [114] return + // [118] return rts } // mulf8u_prepare @@ -9812,7 +10637,7 @@ mulf8u_prepared: { mulf8u_prepare: { .label memA = $fd // *memA = a - // [115] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 -- _deref_pbuc1=vbuaa + // [119] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 -- _deref_pbuc1=vbuaa sta memA // asm // asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } @@ -9823,7 +10648,76 @@ mulf8u_prepare: { sta mulf8u_prepared.sm4+1 // mulf8u_prepare::@return // } - // [117] return + // [121] return + rts +} + // renderBobCleanup +// Clean Up the rendered BOB's +renderBobCleanup: { + .label screen = $10 + // [123] phi from renderBobCleanup to renderBobCleanup::@1 [phi:renderBobCleanup->renderBobCleanup::@1] + // [123] phi (byte) renderBobCleanup::i#2 = (byte) 0 [phi:renderBobCleanup->renderBobCleanup::@1#0] -- vbuxx=vbuc1 + ldx #0 + // [123] phi from renderBobCleanup::@1 to renderBobCleanup::@1 [phi:renderBobCleanup::@1->renderBobCleanup::@1] + // [123] phi (byte) renderBobCleanup::i#2 = (byte) renderBobCleanup::i#1 [phi:renderBobCleanup::@1->renderBobCleanup::@1#0] -- register_copy + // renderBobCleanup::@1 + __b1: + // screen = RENDERBOB_CLEANUP[i] + // [124] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + txa + asl + // [125] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1) -- pbuz1=pptc1_derefidx_vbuaa + tay + lda RENDERBOB_CLEANUP,y + sta.z screen + lda RENDERBOB_CLEANUP+1,y + sta.z screen+1 + // screen[0] = 0 + // [126] *((byte*) renderBobCleanup::screen#0) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + tay + sta (screen),y + // screen[40] = 0 + // [127] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + ldy #$28 + sta (screen),y + // screen[80] = 0 + // [128] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + ldy #$50 + sta (screen),y + // screen[1] = 0 + // [129] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + ldy #1 + sta (screen),y + // screen[41] = 0 + // [130] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + ldy #$29 + sta (screen),y + // screen[81] = 0 + // [131] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + ldy #$51 + sta (screen),y + // screen[2] = 0 + // [132] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + ldy #2 + sta (screen),y + // screen[42] = 0 + // [133] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + ldy #$2a + sta (screen),y + // screen[82] = 0 + // [134] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 + ldy #$52 + sta (screen),y + // for(char i: 0..NUM_BOBS-1) + // [135] (byte) renderBobCleanup::i#1 ← ++ (byte) renderBobCleanup::i#2 -- vbuxx=_inc_vbuxx + inx + // [136] if((byte) renderBobCleanup::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobCleanup::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #NUM_BOBS-1+1 + bne __b1 + // renderBobCleanup::@return + // } + // [137] return rts } // memset @@ -9834,8 +10728,8 @@ memset: { .const num = $3e8 .label end = str+num .label dst = 6 - // [119] phi from memset to memset::@1 [phi:memset->memset::@1] - // [119] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [139] phi from memset to memset::@1 [phi:memset->memset::@1] + // [139] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -9843,7 +10737,7 @@ memset: { // memset::@1 __b1: // for(char* dst = str; dst!=end; dst++) - // [120] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [140] 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 @@ -9852,23 +10746,23 @@ memset: { bne __b2 // memset::@return // } - // [121] return + // [141] return rts // memset::@2 __b2: // *dst = c - // [122] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [123] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [143] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [119] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [119] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [139] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [139] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // renderBobInit @@ -9876,159 +10770,182 @@ memset: { renderBobInit: { .label __0 = $10 .label __1 = $10 - .label __4 = $12 - .label __5 = $10 - // [125] phi from renderBobInit to renderBobInit::@1 [phi:renderBobInit->renderBobInit::@1] - // [125] phi (byte) renderBobInit::y#2 = (byte) 0 [phi:renderBobInit->renderBobInit::@1#0] -- vbuxx=vbuc1 + .label __6 = $12 + .label __7 = $10 + // [145] phi from renderBobInit to renderBobInit::@1 [phi:renderBobInit->renderBobInit::@1] + // [145] phi (byte) renderBobInit::y#2 = (byte) 0 [phi:renderBobInit->renderBobInit::@1#0] -- vbuxx=vbuc1 ldx #0 - // [125] phi from renderBobInit::@1 to renderBobInit::@1 [phi:renderBobInit::@1->renderBobInit::@1] - // [125] phi (byte) renderBobInit::y#2 = (byte) renderBobInit::y#1 [phi:renderBobInit::@1->renderBobInit::@1#0] -- register_copy + // [145] phi from renderBobInit::@1 to renderBobInit::@1 [phi:renderBobInit::@1->renderBobInit::@1] + // [145] phi (byte) renderBobInit::y#2 = (byte) renderBobInit::y#1 [phi:renderBobInit::@1->renderBobInit::@1#0] -- register_copy // renderBobInit::@1 __b1: // (unsigned int)y - // [126] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 -- vwuz1=_word_vbuxx + // [146] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 -- vwuz1=_word_vbuxx txa sta.z __0 lda #0 sta.z __0+1 // ((unsigned int)y)*40 - // [127] (word~) renderBobInit::$4 ← (word~) renderBobInit::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 + // [147] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 lda.z __0 asl - sta.z __4 + sta.z __6 lda.z __0+1 rol - sta.z __4+1 - asl.z __4 - rol.z __4+1 - // [128] (word~) renderBobInit::$5 ← (word~) renderBobInit::$4 + (word~) renderBobInit::$0 -- vwuz1=vwuz2_plus_vwuz1 - lda.z __5 + sta.z __6+1 + asl.z __6 + rol.z __6+1 + // [148] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0 -- vwuz1=vwuz2_plus_vwuz1 + lda.z __7 clc - adc.z __4 - sta.z __5 - lda.z __5+1 - adc.z __4+1 - sta.z __5+1 - // [129] (word~) renderBobInit::$1 ← (word~) renderBobInit::$5 << (byte) 3 -- vwuz1=vwuz1_rol_3 + adc.z __6 + sta.z __7 + lda.z __7+1 + adc.z __6+1 + sta.z __7+1 + // [149] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __1 rol.z __1+1 asl.z __1 rol.z __1+1 asl.z __1 rol.z __1+1 - // RENDERBOB_YOFFSET[y] = ((unsigned int)y)*40 - // [130] (byte~) renderBobInit::$3 ← (byte) renderBobInit::y#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // MUL40[y] = ((unsigned int)y)*40 + // [150] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [131] *((const word*) RENDERBOB_YOFFSET + (byte~) renderBobInit::$3) ← (word~) renderBobInit::$1 -- pwuc1_derefidx_vbuaa=vwuz1 + // [151] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1 -- pwuc1_derefidx_vbuaa=vwuz1 tay lda.z __1 - sta RENDERBOB_YOFFSET,y + sta MUL40,y lda.z __1+1 - sta RENDERBOB_YOFFSET+1,y + sta MUL40+1,y // for(char y: 0..0x1f) - // [132] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2 -- vbuxx=_inc_vbuxx + // [152] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2 -- vbuxx=_inc_vbuxx inx - // [133] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1 -- vbuxx_neq_vbuc1_then_la1 + // [153] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$20 bne __b1 + // [154] phi from renderBobInit::@1 to renderBobInit::@2 [phi:renderBobInit::@1->renderBobInit::@2] + // [154] phi (byte) renderBobInit::i#2 = (byte) 0 [phi:renderBobInit::@1->renderBobInit::@2#0] -- vbuxx=vbuc1 + ldx #0 + // [154] phi from renderBobInit::@2 to renderBobInit::@2 [phi:renderBobInit::@2->renderBobInit::@2] + // [154] phi (byte) renderBobInit::i#2 = (byte) renderBobInit::i#1 [phi:renderBobInit::@2->renderBobInit::@2#0] -- register_copy + // renderBobInit::@2 + __b2: + // RENDERBOB_CLEANUP[i] = BOB_SCREEN + // [155] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + txa + asl + // [156] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN -- pptc1_derefidx_vbuaa=pbuc2 + tay + lda #BOB_SCREEN + sta RENDERBOB_CLEANUP+1,y + // for(char i: 0..NUM_BOBS-1) + // [157] (byte) renderBobInit::i#1 ← ++ (byte) renderBobInit::i#2 -- vbuxx=_inc_vbuxx + inx + // [158] if((byte) renderBobInit::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobInit::@2 -- vbuxx_neq_vbuc1_then_la1 + cpx #NUM_BOBS-1+1 + bne __b2 // renderBobInit::@return // } - // [134] return + // [159] return rts } // 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 = $12 + .label bob_table = $10 .label shift_y = 2 // Populate charset and tables - .label bob_glyph = $10 - .label cell = $d + .label bob_glyph = 6 + .label cell = $b .label bob_table_idx = 4 .label shift_x = 5 // progress_init(SCREEN_BASIC) - // [136] call progress_init - // [217] phi from prepareBobs to progress_init [phi:prepareBobs->progress_init] + // [161] call progress_init + // [242] phi from prepareBobs to progress_init [phi:prepareBobs->progress_init] jsr progress_init - // [137] phi from prepareBobs to prepareBobs::@8 [phi:prepareBobs->prepareBobs::@8] + // [162] phi from prepareBobs to prepareBobs::@8 [phi:prepareBobs->prepareBobs::@8] // prepareBobs::@8 // bobCharsetFindOrAddGlyph(PROTO_BOB+48) - // [138] call bobCharsetFindOrAddGlyph - // [171] phi from prepareBobs::@8 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph] - // [171] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph#0] -- pbuz1=pbuc1 + // [163] call bobCharsetFindOrAddGlyph + // [196] phi from prepareBobs::@8 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph] + // [196] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph#0] -- pbuz1=pbuc1 lda #PROTO_BOB+$30 sta.z bobCharsetFindOrAddGlyph.bob_glyph+1 - // [171] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph#1] -- vbuz1=vbuc1 + // [196] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs::@8->bobCharsetFindOrAddGlyph#1] -- vbuz1=vbuc1 lda #0 sta.z bob_charset_next_id jsr bobCharsetFindOrAddGlyph - // [139] phi from prepareBobs::@8 to prepareBobs::@1 [phi:prepareBobs::@8->prepareBobs::@1] - // [139] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#0] -- vbuz1=vbuc1 + // [164] phi from prepareBobs::@8 to prepareBobs::@1 [phi:prepareBobs::@8->prepareBobs::@1] + // [164] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#0] -- vbuz1=vbuc1 lda #0 sta.z bob_table_idx - // [139] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy - // [139] phi (byte) progress_idx#16 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#2] -- vbuz1=vbuc1 + // [164] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy + // [164] phi (byte) progress_idx#16 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#2] -- vbuz1=vbuc1 sta.z progress_idx - // [139] phi (byte*) progress_cursor#15 = (const byte*) SCREEN_BASIC [phi:prepareBobs::@8->prepareBobs::@1#3] -- pbuz1=pbuc1 + // [164] phi (byte*) progress_cursor#15 = (const byte*) SCREEN_BASIC [phi:prepareBobs::@8->prepareBobs::@1#3] -- pbuz1=pbuc1 lda #SCREEN_BASIC sta.z progress_cursor+1 - // [139] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#4] -- vbuz1=vbuc1 + // [164] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#4] -- vbuz1=vbuc1 lda #0 sta.z shift_y // prepareBobs::@1 __b1: // for(char shift_y=0;shift_yprepareBobs::@2] + // [167] phi from prepareBobs::@1 to prepareBobs::@2 [phi:prepareBobs::@1->prepareBobs::@2] b1: - // [142] phi (byte) progress_idx#31 = (byte) progress_idx#16 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy - // [142] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#15 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy - // [142] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#2] -- register_copy - // [142] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#3] -- register_copy - // [142] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#4] -- vbuz1=vbuc1 + // [167] phi (byte) progress_idx#31 = (byte) progress_idx#16 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy + // [167] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#15 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy + // [167] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#2] -- register_copy + // [167] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#3] -- register_copy + // [167] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#4] -- vbuz1=vbuc1 lda #0 sta.z shift_x // prepareBobs::@2 __b2: // for(char shift_x=0;shift_xprepareBobs::@4] + // [169] phi from prepareBobs::@2 to prepareBobs::@4 [phi:prepareBobs::@2->prepareBobs::@4] // prepareBobs::@4 // shiftProtoBobDown() - // [145] call shiftProtoBobDown - // [206] phi from prepareBobs::@4 to shiftProtoBobDown [phi:prepareBobs::@4->shiftProtoBobDown] + // [170] call shiftProtoBobDown + // [231] phi from prepareBobs::@4 to shiftProtoBobDown [phi:prepareBobs::@4->shiftProtoBobDown] jsr shiftProtoBobDown // prepareBobs::@9 // for(char shift_y=0;shift_yprepareBobs::@1] - // [139] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@9->prepareBobs::@1#0] -- register_copy - // [139] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@9->prepareBobs::@1#1] -- register_copy - // [139] phi (byte) progress_idx#16 = (byte) progress_idx#31 [phi:prepareBobs::@9->prepareBobs::@1#2] -- register_copy - // [139] phi (byte*) progress_cursor#15 = (byte*) progress_cursor#31 [phi:prepareBobs::@9->prepareBobs::@1#3] -- register_copy - // [139] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@9->prepareBobs::@1#4] -- register_copy + // [164] phi from prepareBobs::@9 to prepareBobs::@1 [phi:prepareBobs::@9->prepareBobs::@1] + // [164] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@9->prepareBobs::@1#0] -- register_copy + // [164] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@9->prepareBobs::@1#1] -- register_copy + // [164] phi (byte) progress_idx#16 = (byte) progress_idx#31 [phi:prepareBobs::@9->prepareBobs::@1#2] -- register_copy + // [164] phi (byte*) progress_cursor#15 = (byte*) progress_cursor#31 [phi:prepareBobs::@9->prepareBobs::@1#3] -- register_copy + // [164] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@9->prepareBobs::@1#4] -- register_copy jmp __b1 // prepareBobs::@3 __b3: // bob_table = BOB_TABLES + bob_table_idx - // [147] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 -- pbuz1=pbuc1_plus_vbuz2 + // [172] (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 - // [148] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5] - // [148] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#31 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy - // [148] phi (byte) progress_idx#25 = (byte) progress_idx#31 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy - // [148] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#2] -- register_copy - // [148] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@3->prepareBobs::@5#3] -- register_copy - // [148] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#4] -- pbuz1=pbuc1 + // [173] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5] + // [173] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#31 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy + // [173] phi (byte) progress_idx#25 = (byte) progress_idx#31 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy + // [173] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#2] -- register_copy + // [173] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@3->prepareBobs::@5#3] -- register_copy + // [173] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#4] -- pbuz1=pbuc1 lda #PROTO_BOB sta.z bob_glyph+1 - // [148] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#5] -- vbuz1=vbuc1 + // [173] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#5] -- vbuz1=vbuc1 lda #0 sta.z cell // prepareBobs::@5 __b5: // for(char cell = 0; cell<9; cell++) - // [149] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 -- vbuz1_lt_vbuc1_then_la1 + // [174] 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++; - // [150] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 + // [175] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 inc.z bob_table_idx // shiftProtoBobRight() - // [151] call shiftProtoBobRight - // [189] phi from prepareBobs::@7 to shiftProtoBobRight [phi:prepareBobs::@7->shiftProtoBobRight] + // [176] call shiftProtoBobRight + // [214] phi from prepareBobs::@7 to shiftProtoBobRight [phi:prepareBobs::@7->shiftProtoBobRight] jsr shiftProtoBobRight - // [152] phi from prepareBobs::@7 to prepareBobs::@12 [phi:prepareBobs::@7->prepareBobs::@12] + // [177] phi from prepareBobs::@7 to prepareBobs::@12 [phi:prepareBobs::@7->prepareBobs::@12] // prepareBobs::@12 // shiftProtoBobRight() - // [153] call shiftProtoBobRight - // [189] phi from prepareBobs::@12 to shiftProtoBobRight [phi:prepareBobs::@12->shiftProtoBobRight] + // [178] call shiftProtoBobRight + // [214] phi from prepareBobs::@12 to shiftProtoBobRight [phi:prepareBobs::@12->shiftProtoBobRight] jsr shiftProtoBobRight // prepareBobs::@13 // for(char shift_x=0;shift_xprepareBobs::@2] - // [142] phi (byte) progress_idx#31 = (byte) progress_idx#25 [phi:prepareBobs::@13->prepareBobs::@2#0] -- register_copy - // [142] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#24 [phi:prepareBobs::@13->prepareBobs::@2#1] -- register_copy - // [142] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@13->prepareBobs::@2#2] -- register_copy - // [142] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@13->prepareBobs::@2#3] -- register_copy - // [142] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@13->prepareBobs::@2#4] -- register_copy + // [167] phi from prepareBobs::@13 to prepareBobs::@2 [phi:prepareBobs::@13->prepareBobs::@2] + // [167] phi (byte) progress_idx#31 = (byte) progress_idx#25 [phi:prepareBobs::@13->prepareBobs::@2#0] -- register_copy + // [167] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#24 [phi:prepareBobs::@13->prepareBobs::@2#1] -- register_copy + // [167] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@13->prepareBobs::@2#2] -- register_copy + // [167] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@13->prepareBobs::@2#3] -- register_copy + // [167] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@13->prepareBobs::@2#4] -- register_copy jmp __b2 // prepareBobs::@6 __b6: // bobCharsetFindOrAddGlyph(bob_glyph) - // [155] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 - // [156] call bobCharsetFindOrAddGlyph - // [171] phi from prepareBobs::@6 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph] - // [171] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#0] -- register_copy - // [171] phi (byte) bob_charset_next_id#23 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#1] -- register_copy + // [180] (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + // [181] call bobCharsetFindOrAddGlyph + // [196] phi from prepareBobs::@6 to bobCharsetFindOrAddGlyph [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph] + // [196] phi (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 = (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 [phi:prepareBobs::@6->bobCharsetFindOrAddGlyph#0] -- register_copy + // [196] 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) - // [157] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuaa=vbuz1 + // [182] (byte) bobCharsetFindOrAddGlyph::return#1 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuaa=vbuz1 lda.z bobCharsetFindOrAddGlyph.glyph_id // prepareBobs::@10 - // [158] (byte~) prepareBobs::$6 ← (byte) bobCharsetFindOrAddGlyph::return#1 + // [183] (byte~) prepareBobs::$6 ← (byte) bobCharsetFindOrAddGlyph::return#1 // *bob_table = bobCharsetFindOrAddGlyph(bob_glyph) - // [159] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 -- _deref_pbuz1=vbuaa + // [184] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 -- _deref_pbuz1=vbuaa // Look for an existing char in BOB_CHARSET ldy #0 sta (bob_table),y // bob_glyph+=8 - // [160] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [185] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 // Move to the next glyph lda #8 clc @@ -10111,7 +11028,7 @@ prepareBobs: { inc.z bob_glyph+1 !: // bob_table += BOB_SHIFTS_X*BOB_SHIFTS_Y - // [161] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y -- pbuz1=pbuz1_plus_vbuc1 + // [186] (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 @@ -10121,19 +11038,19 @@ prepareBobs: { inc.z bob_table+1 !: // progress_inc() - // [162] call progress_inc + // [187] call progress_inc jsr progress_inc // prepareBobs::@11 // for(char cell = 0; cell<9; cell++) - // [163] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 + // [188] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 inc.z cell - // [148] phi from prepareBobs::@11 to prepareBobs::@5 [phi:prepareBobs::@11->prepareBobs::@5] - // [148] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#17 [phi:prepareBobs::@11->prepareBobs::@5#0] -- register_copy - // [148] phi (byte) progress_idx#25 = (byte) progress_idx#10 [phi:prepareBobs::@11->prepareBobs::@5#1] -- register_copy - // [148] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@11->prepareBobs::@5#2] -- register_copy - // [148] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@11->prepareBobs::@5#3] -- register_copy - // [148] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@11->prepareBobs::@5#4] -- register_copy - // [148] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@11->prepareBobs::@5#5] -- register_copy + // [173] phi from prepareBobs::@11 to prepareBobs::@5 [phi:prepareBobs::@11->prepareBobs::@5] + // [173] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#17 [phi:prepareBobs::@11->prepareBobs::@5#0] -- register_copy + // [173] phi (byte) progress_idx#25 = (byte) progress_idx#10 [phi:prepareBobs::@11->prepareBobs::@5#1] -- register_copy + // [173] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@11->prepareBobs::@5#2] -- register_copy + // [173] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@11->prepareBobs::@5#3] -- register_copy + // [173] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@11->prepareBobs::@5#4] -- register_copy + // [173] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@11->prepareBobs::@5#5] -- register_copy jmp __b5 } // progress_inc @@ -10141,43 +11058,43 @@ prepareBobs: { // Done by increasing the character until the idx is 8 and then moving to the next char progress_inc: { // if(++progress_idx==8) - // [164] (byte) progress_idx#8 ← ++ (byte) progress_idx#25 -- vbuz1=_inc_vbuz1 + // [189] (byte) progress_idx#8 ← ++ (byte) progress_idx#25 -- vbuz1=_inc_vbuz1 inc.z progress_idx - // [165] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 -- vbuz1_neq_vbuc1_then_la1 + // [190] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z progress_idx bne __b1 // progress_inc::@2 // *progress_cursor = progress_chars[8] - // [166] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) -- _deref_pbuz1=_deref_pbuc1 + // [191] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) -- _deref_pbuz1=_deref_pbuc1 lda progress_chars+8 ldy #0 sta (progress_cursor),y // progress_cursor++; - // [167] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24 -- pbuz1=_inc_pbuz1 + // [192] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24 -- pbuz1=_inc_pbuz1 inc.z progress_cursor bne !+ inc.z progress_cursor+1 !: - // [168] phi from progress_inc::@2 to progress_inc::@1 [phi:progress_inc::@2->progress_inc::@1] - // [168] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#8 [phi:progress_inc::@2->progress_inc::@1#0] -- register_copy - // [168] phi (byte) progress_idx#10 = (byte) 0 [phi:progress_inc::@2->progress_inc::@1#1] -- vbuz1=vbuc1 + // [193] phi from progress_inc::@2 to progress_inc::@1 [phi:progress_inc::@2->progress_inc::@1] + // [193] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#8 [phi:progress_inc::@2->progress_inc::@1#0] -- register_copy + // [193] phi (byte) progress_idx#10 = (byte) 0 [phi:progress_inc::@2->progress_inc::@1#1] -- vbuz1=vbuc1 lda #0 sta.z progress_idx - // [168] phi from progress_inc to progress_inc::@1 [phi:progress_inc->progress_inc::@1] - // [168] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#24 [phi:progress_inc->progress_inc::@1#0] -- register_copy - // [168] phi (byte) progress_idx#10 = (byte) progress_idx#8 [phi:progress_inc->progress_inc::@1#1] -- register_copy + // [193] phi from progress_inc to progress_inc::@1 [phi:progress_inc->progress_inc::@1] + // [193] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#24 [phi:progress_inc->progress_inc::@1#0] -- register_copy + // [193] phi (byte) progress_idx#10 = (byte) progress_idx#8 [phi:progress_inc->progress_inc::@1#1] -- register_copy // progress_inc::@1 __b1: // *progress_cursor = progress_chars[progress_idx] - // [169] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [194] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z progress_idx lda progress_chars,y ldy #0 sta (progress_cursor),y // progress_inc::@return // } - // [170] return + // [195] return rts // Progress characters progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0 @@ -10186,80 +11103,80 @@ progress_inc: { // 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($10) bob_glyph) +// bobCharsetFindOrAddGlyph(byte* zeropage(6) bob_glyph) bobCharsetFindOrAddGlyph: { - .label bob_glyph = $10 - .label i = $a + .label bob_glyph = 6 + .label i = 8 .label glyph_id = $e - .label glyph_cursor = 8 - // [172] phi from bobCharsetFindOrAddGlyph to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1] - // [172] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (const byte*) BOB_CHARSET [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#0] -- pbuz1=pbuc1 + .label glyph_cursor = $12 + // [197] phi from bobCharsetFindOrAddGlyph to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1] + // [197] 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 - // [172] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) 0 [phi:bobCharsetFindOrAddGlyph->bobCharsetFindOrAddGlyph::@1#1] -- vbuz1=vbuc1 + // [197] 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) - // [173] if((byte) bobCharsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto bobCharsetFindOrAddGlyph::@2 -- vbuz1_neq_vbuz2_then_la1 + // [198] 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 - // [174] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7] - // [174] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7#0] -- vbuyy=vbuc1 + // [199] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@7] + // [199] 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++) - // [175] if((byte) bobCharsetFindOrAddGlyph::i1#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@8 -- vbuyy_lt_vbuc1_then_la1 + // [200] 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++; - // [176] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 + // [201] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 inc.z bob_charset_next_id - // [177] phi from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 to bobCharsetFindOrAddGlyph::@return [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return] - // [177] phi (byte) bob_charset_next_id#16 = (byte) bob_charset_next_id#23 [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return#0] -- register_copy + // [202] phi from bobCharsetFindOrAddGlyph::@5 bobCharsetFindOrAddGlyph::@9 to bobCharsetFindOrAddGlyph::@return [phi:bobCharsetFindOrAddGlyph::@5/bobCharsetFindOrAddGlyph::@9->bobCharsetFindOrAddGlyph::@return] + // [202] 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 // } - // [178] return + // [203] return rts // bobCharsetFindOrAddGlyph::@8 __b8: // glyph_cursor[i]=bob_glyph[i] - // [179] *((byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) bobCharsetFindOrAddGlyph::i1#2) ← *((byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 + (byte) bobCharsetFindOrAddGlyph::i1#2) -- pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy + // [204] *((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++) - // [180] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 -- vbuyy=_inc_vbuyy + // [205] (byte) bobCharsetFindOrAddGlyph::i1#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i1#2 -- vbuyy=_inc_vbuyy iny - // [174] phi from bobCharsetFindOrAddGlyph::@8 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7] - // [174] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) bobCharsetFindOrAddGlyph::i1#1 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7#0] -- register_copy + // [199] phi from bobCharsetFindOrAddGlyph::@8 to bobCharsetFindOrAddGlyph::@7 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7] + // [199] phi (byte) bobCharsetFindOrAddGlyph::i1#2 = (byte) bobCharsetFindOrAddGlyph::i1#1 [phi:bobCharsetFindOrAddGlyph::@8->bobCharsetFindOrAddGlyph::@7#0] -- register_copy jmp __b7 - // [181] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2] + // [206] phi from bobCharsetFindOrAddGlyph::@1 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2] b1: - // [181] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@1->bobCharsetFindOrAddGlyph::@2#0] -- vbuz1=vbuc1 + // [206] 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++) - // [182] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 -- vbuz1_lt_vbuc1_then_la1 + // [207] if((byte) bobCharsetFindOrAddGlyph::i#2<(byte) 8) goto bobCharsetFindOrAddGlyph::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #8 bcc __b3 - // [184] phi from bobCharsetFindOrAddGlyph::@2 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5] - // [184] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 1 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 + // [209] phi from bobCharsetFindOrAddGlyph::@2 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@2->bobCharsetFindOrAddGlyph::@5] + // [209] 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]) - // [183] 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 + // [208] 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 @@ -10268,23 +11185,23 @@ bobCharsetFindOrAddGlyph: { sty.z $ff cpx.z $ff beq __b4 - // [184] phi from bobCharsetFindOrAddGlyph::@3 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5] - // [184] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 + // [209] phi from bobCharsetFindOrAddGlyph::@3 to bobCharsetFindOrAddGlyph::@5 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5] + // [209] phi (byte) bobCharsetFindOrAddGlyph::found#2 = (byte) 0 [phi:bobCharsetFindOrAddGlyph::@3->bobCharsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 lda #0 // bobCharsetFindOrAddGlyph::@5 __b5: // if(found) - // [185] if((byte) 0==(byte) bobCharsetFindOrAddGlyph::found#2) goto bobCharsetFindOrAddGlyph::@6 -- vbuc1_eq_vbuaa_then_la1 + // [210] 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++; - // [186] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=_inc_vbuz1 + // [211] (byte) bobCharsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) bobCharsetFindOrAddGlyph::glyph_id#11 -- vbuz1=_inc_vbuz1 inc.z glyph_id // glyph_cursor +=8 - // [187] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [212] (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z glyph_cursor @@ -10292,107 +11209,107 @@ bobCharsetFindOrAddGlyph: { bcc !+ inc.z glyph_cursor+1 !: - // [172] phi from bobCharsetFindOrAddGlyph::@6 to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1] - // [172] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#0] -- register_copy - // [172] phi (byte) bobCharsetFindOrAddGlyph::glyph_id#11 = (byte) bobCharsetFindOrAddGlyph::glyph_id#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#1] -- register_copy + // [197] phi from bobCharsetFindOrAddGlyph::@6 to bobCharsetFindOrAddGlyph::@1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1] + // [197] phi (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 = (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 [phi:bobCharsetFindOrAddGlyph::@6->bobCharsetFindOrAddGlyph::@1#0] -- register_copy + // [197] 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++) - // [188] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 -- vbuz1=_inc_vbuz1 + // [213] (byte) bobCharsetFindOrAddGlyph::i#1 ← ++ (byte) bobCharsetFindOrAddGlyph::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [181] phi from bobCharsetFindOrAddGlyph::@4 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2] - // [181] phi (byte) bobCharsetFindOrAddGlyph::i#2 = (byte) bobCharsetFindOrAddGlyph::i#1 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2#0] -- register_copy + // [206] phi from bobCharsetFindOrAddGlyph::@4 to bobCharsetFindOrAddGlyph::@2 [phi:bobCharsetFindOrAddGlyph::@4->bobCharsetFindOrAddGlyph::@2] + // [206] 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 = $e - .label i = $d - // [190] phi from shiftProtoBobRight to shiftProtoBobRight::@1 [phi:shiftProtoBobRight->shiftProtoBobRight::@1] - // [190] phi (byte) shiftProtoBobRight::carry#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#0] -- vbuyy=vbuc1 + .label i = $b + // [215] phi from shiftProtoBobRight to shiftProtoBobRight::@1 [phi:shiftProtoBobRight->shiftProtoBobRight::@1] + // [215] phi (byte) shiftProtoBobRight::carry#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#0] -- vbuyy=vbuc1 ldy #0 - // [190] phi (byte) shiftProtoBobRight::j#3 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#1] -- vbuxx=vbuc1 + // [215] phi (byte) shiftProtoBobRight::j#3 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#1] -- vbuxx=vbuc1 ldx #0 - // [190] phi (byte) shiftProtoBobRight::i#2 = (byte) 0 [phi:shiftProtoBobRight->shiftProtoBobRight::@1#2] -- vbuz1=vbuc1 + // [215] 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++) - // [191] if((byte) shiftProtoBobRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto shiftProtoBobRight::@2 -- vbuz1_lt_vbuc1_then_la1 + // [216] 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 // } - // [192] return + // [217] return rts // shiftProtoBobRight::@2 __b2: // PROTO_BOB[j]&1 - // [193] (byte~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_band_vbuc2 + // [218] (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 - // [194] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 -- vbuc1_neq_vbuaa_then_la1 + // [219] if((byte) 0!=(byte~) shiftProtoBobRight::$1) goto shiftProtoBobRight::@3 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne __b3 - // [196] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4] - // [196] phi (byte) shiftProtoBobRight::carry#1 = (byte) 0 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 + // [221] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4] + // [221] phi (byte) shiftProtoBobRight::carry#1 = (byte) 0 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 lda #0 sta.z carry jmp __b4 - // [195] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@3 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@3] + // [220] phi from shiftProtoBobRight::@2 to shiftProtoBobRight::@3 [phi:shiftProtoBobRight::@2->shiftProtoBobRight::@3] // shiftProtoBobRight::@3 __b3: - // [196] phi from shiftProtoBobRight::@3 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4] - // [196] phi (byte) shiftProtoBobRight::carry#1 = (byte) $80 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4#0] -- vbuz1=vbuc1 + // [221] phi from shiftProtoBobRight::@3 to shiftProtoBobRight::@4 [phi:shiftProtoBobRight::@3->shiftProtoBobRight::@4] + // [221] 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 - // [197] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1 + // [222] (byte~) shiftProtoBobRight::$5 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) >> (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1 lda PROTO_BOB,x lsr // carry | PROTO_BOB[j]>>1 - // [198] (byte~) shiftProtoBobRight::$6 ← (byte) shiftProtoBobRight::carry#2 | (byte~) shiftProtoBobRight::$5 -- vbuaa=vbuyy_bor_vbuaa + // [223] (byte~) shiftProtoBobRight::$6 ← (byte) shiftProtoBobRight::carry#2 | (byte~) shiftProtoBobRight::$5 -- vbuaa=vbuyy_bor_vbuaa sty.z $ff ora.z $ff // PROTO_BOB[j] = carry | PROTO_BOB[j]>>1 - // [199] *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) ← (byte~) shiftProtoBobRight::$6 -- pbuc1_derefidx_vbuxx=vbuaa + // [224] *((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) - // [200] if((byte) shiftProtoBobRight::j#3>=(byte) $30) goto shiftProtoBobRight::@5 -- vbuxx_ge_vbuc1_then_la1 + // [225] 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 - // [201] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 -- vbuxx=vbuxx_plus_vbuc1 + // [226] (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#3 + (byte) $18 -- vbuxx=vbuxx_plus_vbuc1 txa axs #-[$18] - // [202] phi from shiftProtoBobRight::@5 shiftProtoBobRight::@7 to shiftProtoBobRight::@6 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6] - // [202] phi (byte) shiftProtoBobRight::j#10 = (byte) shiftProtoBobRight::j#1 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6#0] -- register_copy + // [227] phi from shiftProtoBobRight::@5 shiftProtoBobRight::@7 to shiftProtoBobRight::@6 [phi:shiftProtoBobRight::@5/shiftProtoBobRight::@7->shiftProtoBobRight::@6] + // [227] 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++) - // [203] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 -- vbuz1=_inc_vbuz1 + // [228] (byte) shiftProtoBobRight::i#1 ← ++ (byte) shiftProtoBobRight::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [204] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 -- vbuyy=vbuz1 + // [229] (byte) shiftProtoBobRight::carry#10 ← (byte) shiftProtoBobRight::carry#1 -- vbuyy=vbuz1 ldy.z carry - // [190] phi from shiftProtoBobRight::@6 to shiftProtoBobRight::@1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1] - // [190] phi (byte) shiftProtoBobRight::carry#2 = (byte) shiftProtoBobRight::carry#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#0] -- register_copy - // [190] phi (byte) shiftProtoBobRight::j#3 = (byte) shiftProtoBobRight::j#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#1] -- register_copy - // [190] phi (byte) shiftProtoBobRight::i#2 = (byte) shiftProtoBobRight::i#1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#2] -- register_copy + // [215] phi from shiftProtoBobRight::@6 to shiftProtoBobRight::@1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1] + // [215] phi (byte) shiftProtoBobRight::carry#2 = (byte) shiftProtoBobRight::carry#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#0] -- register_copy + // [215] phi (byte) shiftProtoBobRight::j#3 = (byte) shiftProtoBobRight::j#10 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#1] -- register_copy + // [215] phi (byte) shiftProtoBobRight::i#2 = (byte) shiftProtoBobRight::i#1 [phi:shiftProtoBobRight::@6->shiftProtoBobRight::@1#2] -- register_copy jmp __b1 // shiftProtoBobRight::@5 __b5: // j-=47 - // [205] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f -- vbuxx=vbuxx_minus_vbuc1 + // [230] (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#3 - (byte) $2f -- vbuxx=vbuxx_minus_vbuc1 txa axs #$2f jmp __b6 @@ -10401,49 +11318,49 @@ shiftProtoBobRight: { // Shift PROTO_BOB down one Y pixel // At the same time restore PROTO_BOB X by shifting 8 pixels left shiftProtoBobDown: { - // [207] phi from shiftProtoBobDown to shiftProtoBobDown::@1 [phi:shiftProtoBobDown->shiftProtoBobDown::@1] - // [207] phi (byte) shiftProtoBobDown::i#2 = (byte) $17 [phi:shiftProtoBobDown->shiftProtoBobDown::@1#0] -- vbuxx=vbuc1 + // [232] phi from shiftProtoBobDown to shiftProtoBobDown::@1 [phi:shiftProtoBobDown->shiftProtoBobDown::@1] + // [232] 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--) - // [208] if((byte) shiftProtoBobDown::i#2>(byte) 0) goto shiftProtoBobDown::@2 -- vbuxx_gt_0_then_la1 + // [233] 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 - // [209] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [234] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PROTO_BOB // PROTO_BOB[24] = 0 - // [210] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [235] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta PROTO_BOB+$18 // PROTO_BOB[48] = 0 - // [211] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [236] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta PROTO_BOB+$30 // shiftProtoBobDown::@return // } - // [212] return + // [237] return rts // shiftProtoBobDown::@2 __b2: // PROTO_BOB[i] = (PROTO_BOB+23)[i] - // [213] *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) shiftProtoBobDown::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [238] *((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] - // [214] *((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 + // [239] *((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 - // [215] *((const byte*) PROTO_BOB+(byte) $30 + (byte) shiftProtoBobDown::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [240] *((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--) - // [216] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 -- vbuxx=_dec_vbuxx + // [241] (byte) shiftProtoBobDown::i#1 ← -- (byte) shiftProtoBobDown::i#2 -- vbuxx=_dec_vbuxx dex - // [207] phi from shiftProtoBobDown::@2 to shiftProtoBobDown::@1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1] - // [207] phi (byte) shiftProtoBobDown::i#2 = (byte) shiftProtoBobDown::i#1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1#0] -- register_copy + // [232] phi from shiftProtoBobDown::@2 to shiftProtoBobDown::@1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1] + // [232] phi (byte) shiftProtoBobDown::i#2 = (byte) shiftProtoBobDown::i#1 [phi:shiftProtoBobDown::@2->shiftProtoBobDown::@1#0] -- register_copy jmp __b1 } // progress_init @@ -10451,7 +11368,7 @@ shiftProtoBobDown: { progress_init: { // progress_init::@return // } - // [218] return + // [243] return rts } // mulf_init @@ -10462,28 +11379,28 @@ mulf_init: { // Counter used for determining x%2==0 .label sqr1_hi = $10 // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 - .label sqr = $b + .label sqr = $c .label sqr1_lo = 6 // Decrease or increase x_255 - initially we decrease - .label sqr2_hi = 8 + .label sqr2_hi = 9 .label sqr2_lo = $12 //Start with g(0)=f(255) - .label dir = $a - // [220] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] - // [220] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 + .label dir = 8 + // [245] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + // [245] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [220] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + // [245] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [220] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [245] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 txa sta.z sqr sta.z sqr+1 - // [220] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + // [245] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 sta.z c - // [220] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + // [245] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 lda #mulf_sqr1_lo+1 @@ -10491,25 +11408,25 @@ mulf_init: { // mulf_init::@1 __b1: // for(byte* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++) - // [221] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [246] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr1_lo+1 cmp #>mulf_sqr1_lo+$200 bne __b2 lda.z sqr1_lo cmp #mulf_init::@5] - // [222] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + // [247] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5] + // [247] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 lda #$ff sta.z dir - // [222] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + // [247] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 lda #mulf_sqr2_hi sta.z sqr2_hi+1 - // [222] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 + // [247] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 ldx #-1 - // [222] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + // [247] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 lda #mulf_sqr2_lo @@ -10517,7 +11434,7 @@ mulf_init: { // mulf_init::@5 __b5: // for(byte* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++) - // [223] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + // [248] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr2_lo+1 cmp #>mulf_sqr2_lo+$1ff bne __b6 @@ -10526,116 +11443,116 @@ mulf_init: { bne __b6 // mulf_init::@7 // *(mulf_sqr2_lo+511) = *(mulf_sqr1_lo+256) - // [224] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [249] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 // Set the very last value g(511) = f(256) lda mulf_sqr1_lo+$100 sta mulf_sqr2_lo+$1ff // *(mulf_sqr2_hi+511) = *(mulf_sqr1_hi+256) - // [225] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [250] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 lda mulf_sqr1_hi+$100 sta mulf_sqr2_hi+$1ff // mulf_init::@return // } - // [226] return + // [251] return rts // mulf_init::@6 __b6: // *sqr2_lo = mulf_sqr1_lo[x_255] - // [227] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [252] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_lo,x ldy #0 sta (sqr2_lo),y // *sqr2_hi++ = mulf_sqr1_hi[x_255] - // [228] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [253] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_hi,x sta (sqr2_hi),y // *sqr2_hi++ = mulf_sqr1_hi[x_255]; - // [229] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 + // [254] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_hi bne !+ inc.z sqr2_hi+1 !: // x_255 = x_255 + dir - // [230] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 + // [255] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 txa clc adc.z dir tax // if(x_255==0) - // [231] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 + // [256] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 cpx #0 bne __b8 - // [233] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] - // [233] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + // [258] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] + // [258] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 lda #1 sta.z dir - // [232] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // [257] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] // mulf_init::@9 - // [233] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] - // [233] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // [258] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [258] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy // mulf_init::@8 __b8: // for(byte* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++) - // [234] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + // [259] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_lo bne !+ inc.z sqr2_lo+1 !: - // [222] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] - // [222] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy - // [222] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy - // [222] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy - // [222] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + // [247] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [247] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [247] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [247] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [247] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy jmp __b5 // mulf_init::@2 __b2: // if((++c&1)==0) - // [235] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + // [260] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 inc.z c // ++c&1 - // [236] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 + // [261] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 lda #1 and.z c // if((++c&1)==0) - // [237] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 + // [262] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 cmp #0 bne __b3 // mulf_init::@4 // x_2++; - // [238] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx + // [263] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx inx // sqr++; - // [239] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + // [264] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 inc.z sqr bne !+ inc.z sqr+1 !: - // [240] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] - // [240] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy - // [240] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // [265] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [265] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [265] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy // mulf_init::@3 __b3: // sqr - // [243] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 + // [268] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 lda.z sqr+1 // *sqr1_hi++ = >sqr - // [244] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa + // [269] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa sta (sqr1_hi),y // *sqr1_hi++ = >sqr; - // [245] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + // [270] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_hi bne !+ inc.z sqr1_hi+1 !: // sqr = sqr + x_2 - // [246] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx + // [271] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx txa clc adc.z sqr @@ -10644,17 +11561,17 @@ mulf_init: { inc.z sqr+1 !: // for(byte* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++) - // [247] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + // [272] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_lo bne !+ inc.z sqr1_lo+1 !: - // [220] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] - // [220] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy - // [220] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy - // [220] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy - // [220] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy - // [220] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + // [245] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [245] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [245] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [245] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [245] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [245] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy jmp __b1 } // File Data @@ -10697,6 +11614,8 @@ SIN: // 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]; BOB_TABLES: .fill 9*8*4, 0 - // Table for getting BOB screen offset from the BOB Y-position - RENDERBOB_YOFFSET: .fill 2*$20, 0 + // Table used for deleting rendered BOB's. Contains pointers to first char of each BOB. + RENDERBOB_CLEANUP: .fill 2*NUM_BOBS, 0 + // *40 Table unsigned int[0x20] MUL40 = { ((unsigned int)i)*40 }; + MUL40: .fill 2*$20, 0 diff --git a/src/test/ref/complex/prebob/prebob.sym b/src/test/ref/complex/prebob/vogel-bobs.sym similarity index 74% rename from src/test/ref/complex/prebob/prebob.sym rename to src/test/ref/complex/prebob/vogel-bobs.sym index cb4d38c0e..2b194f0cf 100644 --- a/src/test/ref/complex/prebob/prebob.sym +++ b/src/test/ref/complex/prebob/vogel-bobs.sym @@ -17,6 +17,8 @@ (const signed byte*) COS = (const signed byte*) SIN+(byte) $40 (const byte*) D018 = (byte*) 53272 (const byte) KEY_SPACE = (number) $3c +(const word*) MUL40 = { fill( $20, 0) } +(const byte) NUM_BOBS = (number) $14 (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++) @@ -27,11 +29,12 @@ (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) RASTER = (byte*) 53266 -(const word*) RENDERBOB_YOFFSET = { fill( $20, 0) } +(const byte**) RENDERBOB_CLEANUP = { fill( NUM_BOBS, 0) } (const byte*) SCREEN_BASIC = (byte*) 1024 (const signed byte*) SIN = kickasm {{ .for(var i=0;i<$140;i++) .byte >round($7fff*sin(i*2*PI/256)) }} +(const byte) SIZEOF_POINTER = (byte) 2 (byte()) bobCharsetFindOrAddGlyph((byte*) bobCharsetFindOrAddGlyph::bob_glyph) (label) bobCharsetFindOrAddGlyph::@1 (label) bobCharsetFindOrAddGlyph::@2 @@ -44,19 +47,19 @@ (label) bobCharsetFindOrAddGlyph::@9 (label) bobCharsetFindOrAddGlyph::@return (byte*) bobCharsetFindOrAddGlyph::bob_glyph -(byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 bob_glyph zp[2]:16 2002.0 -(byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 bob_glyph zp[2]:16 7400.200000000001 +(byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 bob_glyph zp[2]:6 2002.0 +(byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 bob_glyph zp[2]:6 7400.200000000001 (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]:8 20002.0 -(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 glyph_cursor zp[2]:8 10000.307692307691 +(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#1 glyph_cursor zp[2]:18 20002.0 +(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 glyph_cursor zp[2]:18 10000.307692307691 (byte) bobCharsetFindOrAddGlyph::glyph_id (byte) bobCharsetFindOrAddGlyph::glyph_id#1 glyph_id zp[1]:14 10001.0 (byte) bobCharsetFindOrAddGlyph::glyph_id#11 glyph_id zp[1]:14 1937.75 (byte) bobCharsetFindOrAddGlyph::i -(byte) bobCharsetFindOrAddGlyph::i#1 i zp[1]:10 200002.0 -(byte) bobCharsetFindOrAddGlyph::i#2 i zp[1]:10 166668.3333333333 +(byte) bobCharsetFindOrAddGlyph::i#1 i zp[1]:8 200002.0 +(byte) bobCharsetFindOrAddGlyph::i#2 i zp[1]:8 166668.3333333333 (byte) bobCharsetFindOrAddGlyph::i1 (byte) bobCharsetFindOrAddGlyph::i1#1 reg byte y 20002.0 (byte) bobCharsetFindOrAddGlyph::i1#2 reg byte y 16668.333333333332 @@ -92,11 +95,11 @@ (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() -(signed word~) main::$11 zp[2]:6 202.0 -(signed word~) main::$12 zp[2]:6 202.0 -(byte~) main::$18 reg byte a 22.0 -(byte~) main::$20 reg byte a 22.0 -(signed word~) main::$9 zp[2]:6 202.0 +(signed word~) main::$10 zp[2]:12 202.0 +(signed word~) main::$12 zp[2]:12 202.0 +(signed word~) main::$13 zp[2]:12 202.0 +(byte~) main::$19 reg byte a 22.0 +(byte~) main::$21 reg byte a 22.0 (label) main::@1 (label) main::@10 (label) main::@11 @@ -104,6 +107,7 @@ (label) main::@13 (label) main::@14 (label) main::@15 +(label) main::@16 (label) main::@2 (label) main::@3 (label) main::@4 @@ -116,10 +120,10 @@ (byte) main::a (byte) main::a#1 a zp[1]:4 28.857142857142858 (byte) main::a#2 a zp[1]:4 25.9375 -(byte) main::a#7 a zp[1]:4 22.0 +(byte) main::a#6 a zp[1]:4 22.0 (byte) main::angle (byte) main::angle#1 angle zp[1]:2 3.6666666666666665 -(byte) main::angle#6 angle zp[1]:2 1.2692307692307692 +(byte) main::angle#8 angle zp[1]:2 1.1785714285714286 (byte) main::i (byte) main::i#1 i zp[1]:5 151.5 (byte) main::i#2 i zp[1]:5 9.619047619047619 @@ -151,9 +155,9 @@ (byte) main::vicSelectGfxBank2_toDd001_return (const byte) main::vicSelectGfxBank2_toDd001_return#0 vicSelectGfxBank2_toDd001_return = (byte) 3 (signed word) main::x -(signed word) main::x#0 x zp[2]:11 18.363636363636363 +(signed word) main::x#0 x zp[2]:9 18.363636363636363 (signed word) main::y -(signed word) main::y#0 y zp[2]:6 40.4 +(signed word) main::y#0 y zp[2]:12 40.4 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -185,9 +189,9 @@ (signed byte) mulf8s::mulf8s_prepare1_a (signed byte) mulf8s::mulf8s_prepare1_a#0 reg byte a 202.0 (signed word) mulf8s::return -(signed word) mulf8s::return#0 return zp[2]:6 51.0 -(signed word) mulf8s::return#2 return zp[2]:6 202.0 -(signed word) mulf8s::return#3 return zp[2]:6 202.0 +(signed word) mulf8s::return#0 return zp[2]:12 51.0 +(signed word) mulf8s::return#2 return zp[2]:12 202.0 +(signed word) mulf8s::return#3 return zp[2]:12 202.0 (signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) (byte~) mulf8s_prepared::$12 reg byte a 4.0 (byte~) mulf8s_prepared::$15 reg byte a 4.0 @@ -202,11 +206,11 @@ (signed byte) mulf8s_prepared::b (signed byte) mulf8s_prepared::b#0 b zp[1]:15 0.4 (word) mulf8s_prepared::m -(word) mulf8s_prepared::m#0 m zp[2]:6 2.0 -(word) mulf8s_prepared::m#1 m zp[2]:6 4.0 -(word) mulf8s_prepared::m#2 m zp[2]:6 4.0 -(word) mulf8s_prepared::m#4 m zp[2]:6 1.3333333333333333 -(word) mulf8s_prepared::m#5 m zp[2]:6 2.5 +(word) mulf8s_prepared::m#0 m zp[2]:12 2.0 +(word) mulf8s_prepared::m#1 m zp[2]:12 4.0 +(word) mulf8s_prepared::m#2 m zp[2]:12 4.0 +(word) mulf8s_prepared::m#4 m zp[2]:12 1.3333333333333333 +(word) mulf8s_prepared::m#5 m zp[2]:12 2.5 (const signed byte*) mulf8s_prepared::memA = (signed byte*) 253 (signed word) mulf8s_prepared::return (void()) mulf8u_prepare((byte) mulf8u_prepare::a) @@ -221,8 +225,8 @@ (const byte*) mulf8u_prepared::memB = (byte*) 255 (const byte*) mulf8u_prepared::resL = (byte*) 254 (word) mulf8u_prepared::return -(word) mulf8u_prepared::return#0 return zp[2]:6 1.3333333333333333 -(word) mulf8u_prepared::return#2 return zp[2]:6 4.0 +(word) mulf8u_prepared::return#0 return zp[2]:12 1.3333333333333333 +(word) mulf8u_prepared::return#2 return zp[2]:12 4.0 (void()) mulf_init() (byte~) mulf_init::$1 reg byte a 22.0 (byte~) mulf_init::$4 reg byte a 22.0 @@ -241,13 +245,13 @@ (byte) mulf_init::c#1 c zp[1]:15 2.5384615384615383 (byte) mulf_init::c#2 c zp[1]:15 11.0 (byte) mulf_init::dir -(byte) mulf_init::dir#2 dir zp[1]:10 4.125 -(byte) mulf_init::dir#4 dir zp[1]:10 11.0 +(byte) mulf_init::dir#2 dir zp[1]:8 4.125 +(byte) mulf_init::dir#4 dir zp[1]:8 11.0 (word) mulf_init::sqr -(word) mulf_init::sqr#1 sqr zp[2]:11 11.0 -(word) mulf_init::sqr#2 sqr zp[2]:11 22.0 -(word) mulf_init::sqr#3 sqr zp[2]:11 9.166666666666666 -(word) mulf_init::sqr#4 sqr zp[2]:11 5.5 +(word) mulf_init::sqr#1 sqr zp[2]:12 11.0 +(word) mulf_init::sqr#2 sqr zp[2]:12 22.0 +(word) mulf_init::sqr#3 sqr zp[2]:12 9.166666666666666 +(word) mulf_init::sqr#4 sqr zp[2]:12 5.5 (byte*) mulf_init::sqr1_hi (byte*) mulf_init::sqr1_hi#1 sqr1_hi zp[2]:16 7.333333333333333 (byte*) mulf_init::sqr1_hi#2 sqr1_hi zp[2]:16 2.75 @@ -255,8 +259,8 @@ (byte*) mulf_init::sqr1_lo#1 sqr1_lo zp[2]:6 22.0 (byte*) mulf_init::sqr1_lo#2 sqr1_lo zp[2]:6 3.142857142857143 (byte*) mulf_init::sqr2_hi -(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp[2]:8 3.6666666666666665 -(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp[2]:8 8.25 +(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp[2]:9 3.6666666666666665 +(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp[2]:9 8.25 (byte*) mulf_init::sqr2_lo (byte*) mulf_init::sqr2_lo#1 sqr2_lo zp[2]:18 22.0 (byte*) mulf_init::sqr2_lo#2 sqr2_lo zp[2]:18 4.888888888888889 @@ -288,19 +292,19 @@ (label) prepareBobs::@9 (label) prepareBobs::@return (byte*) prepareBobs::bob_glyph -(byte*) prepareBobs::bob_glyph#1 bob_glyph zp[2]:16 500.5 -(byte*) prepareBobs::bob_glyph#2 bob_glyph zp[2]:16 429.0 +(byte*) prepareBobs::bob_glyph#1 bob_glyph zp[2]:6 500.5 +(byte*) prepareBobs::bob_glyph#2 bob_glyph zp[2]:6 429.0 (byte*) prepareBobs::bob_table -(byte*) prepareBobs::bob_table#0 bob_table zp[2]:18 202.0 -(byte*) prepareBobs::bob_table#1 bob_table zp[2]:18 667.3333333333334 -(byte*) prepareBobs::bob_table#2 bob_table zp[2]:18 388.0 +(byte*) prepareBobs::bob_table#0 bob_table zp[2]:16 202.0 +(byte*) prepareBobs::bob_table#1 bob_table zp[2]:16 667.3333333333334 +(byte*) prepareBobs::bob_table#2 bob_table zp[2]:16 388.0 (byte) prepareBobs::bob_table_idx (byte) prepareBobs::bob_table_idx#1 bob_table_idx zp[1]:4 40.4 (byte) prepareBobs::bob_table_idx#12 bob_table_idx zp[1]:4 19.11764705882353 (byte) prepareBobs::bob_table_idx#6 bob_table_idx zp[1]:4 11.0 (byte) prepareBobs::cell -(byte) prepareBobs::cell#1 cell zp[1]:13 2002.0 -(byte) prepareBobs::cell#2 cell zp[1]:13 300.29999999999995 +(byte) prepareBobs::cell#1 cell zp[1]:11 2002.0 +(byte) prepareBobs::cell#2 cell zp[1]:11 300.29999999999995 (byte) prepareBobs::shift_x (byte) prepareBobs::shift_x#1 shift_x zp[1]:5 202.0 (byte) prepareBobs::shift_x#2 shift_x zp[1]:5 16.833333333333332 @@ -308,11 +312,11 @@ (byte) prepareBobs::shift_y#1 shift_y zp[1]:2 22.0 (byte) prepareBobs::shift_y#2 shift_y zp[1]:2 1.4347826086956523 (byte*) progress_cursor -(byte*) progress_cursor#15 progress_cursor zp[2]:6 11.0 -(byte*) progress_cursor#17 progress_cursor zp[2]:6 201.4 -(byte*) progress_cursor#24 progress_cursor zp[2]:6 71.11764705882355 -(byte*) progress_cursor#31 progress_cursor zp[2]:6 37.33333333333333 -(byte*) progress_cursor#8 progress_cursor zp[2]:6 4.0 +(byte*) progress_cursor#15 progress_cursor zp[2]:12 11.0 +(byte*) progress_cursor#17 progress_cursor zp[2]:12 201.4 +(byte*) progress_cursor#24 progress_cursor zp[2]:12 71.11764705882355 +(byte*) progress_cursor#31 progress_cursor zp[2]:12 37.33333333333333 +(byte*) progress_cursor#8 progress_cursor zp[2]:12 4.0 (byte) progress_idx (byte) progress_idx#10 progress_idx zp[1]:3 201.0 (byte) progress_idx#16 progress_idx zp[1]:3 11.0 @@ -328,34 +332,51 @@ (label) progress_init::@return (byte*) progress_init::line (void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos) -(byte*~) renderBob::$2 zp[2]:16 4.0 +(byte*~) renderBob::$2 zp[2]:12 4.0 (byte~) renderBob::$4 reg byte a 4.0 (byte~) renderBob::$5 zp[1]:14 2.0 (byte~) renderBob::$6 reg byte a 4.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 reg byte x 1.8181818181818186 (byte*) renderBob::screen -(byte*) renderBob::screen#0 screen zp[2]:16 1.5384615384615383 +(byte*) renderBob::screen#0 screen zp[2]:12 1.4666666666666666 (byte) renderBob::x_char_offset -(byte) renderBob::x_char_offset#0 x_char_offset zp[1]:13 0.8 +(byte) renderBob::x_char_offset#0 x_char_offset zp[1]:11 0.8 (byte) renderBob::xpos (byte) renderBob::xpos#0 xpos zp[1]:15 10.499999999999998 (byte) renderBob::y_char_offset (byte) renderBob::y_char_offset#0 reg byte a 4.0 (word) renderBob::y_offset -(word) renderBob::y_offset#0 y_offset zp[2]:16 4.0 +(word) renderBob::y_offset#0 y_offset zp[2]:12 4.0 (byte) renderBob::ypos (byte) renderBob::ypos#0 reg byte x 15.000000000000002 +(void()) renderBobCleanup() +(byte~) renderBobCleanup::$1 reg byte a 202.0 +(label) renderBobCleanup::@1 +(label) renderBobCleanup::@return +(byte) renderBobCleanup::i +(byte) renderBobCleanup::i#1 reg byte x 151.5 +(byte) renderBobCleanup::i#2 reg byte x 25.25 +(byte*) renderBobCleanup::screen +(byte*) renderBobCleanup::screen#0 screen zp[2]:16 112.22222222222223 +(byte**) renderBobCleanupNext +(byte**) renderBobCleanupNext#13 renderBobCleanupNext zp[2]:6 7.357142857142858 +(byte**) renderBobCleanupNext#17 renderBobCleanupNext zp[2]:6 3.3870967741935485 (void()) renderBobInit() (word~) renderBobInit::$0 zp[2]:16 16.5 (word~) renderBobInit::$1 zp[2]:16 11.0 -(byte~) renderBobInit::$3 reg byte a 22.0 -(word~) renderBobInit::$4 zp[2]:18 22.0 -(word~) renderBobInit::$5 zp[2]:16 22.0 +(byte~) renderBobInit::$4 reg byte a 22.0 +(byte~) renderBobInit::$5 reg byte a 22.0 +(word~) renderBobInit::$6 zp[2]:18 22.0 +(word~) renderBobInit::$7 zp[2]:16 22.0 (label) renderBobInit::@1 +(label) renderBobInit::@2 (label) renderBobInit::@return +(byte) renderBobInit::i +(byte) renderBobInit::i#1 reg byte x 16.5 +(byte) renderBobInit::i#2 reg byte x 11.0 (byte) renderBobInit::y (byte) renderBobInit::y#1 reg byte x 16.5 (byte) renderBobInit::y#2 reg byte x 4.714285714285714 @@ -384,8 +405,8 @@ (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]:13 1001.0 -(byte) shiftProtoBobRight::i#2 i zp[1]:13 231.0 +(byte) shiftProtoBobRight::i#1 i zp[1]:11 1001.0 +(byte) shiftProtoBobRight::i#2 i zp[1]:11 231.0 (byte) shiftProtoBobRight::j (byte) shiftProtoBobRight::j#1 reg byte x 2002.0 (byte) shiftProtoBobRight::j#10 reg byte x 1001.0 @@ -395,34 +416,36 @@ reg byte a [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] reg byte x [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] +reg byte x [ renderBobCleanup::i#2 renderBobCleanup::i#1 ] reg byte x [ renderBobInit::y#2 renderBobInit::y#1 ] -zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::angle#6 main::angle#1 ] +reg byte x [ renderBobInit::i#2 renderBobInit::i#1 ] +zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::angle#8 main::angle#1 ] zp[1]:3 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 main::r#2 main::r#1 ] -zp[1]:4 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 main::a#2 main::a#1 main::a#7 ] +zp[1]:4 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 main::a#2 main::a#6 main::a#1 ] zp[1]:5 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 main::i#2 main::i#1 ] reg byte y [ bobCharsetFindOrAddGlyph::i1#2 bobCharsetFindOrAddGlyph::i1#1 ] reg byte a [ bobCharsetFindOrAddGlyph::found#2 ] 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 x [ shiftProtoBobDown::i#2 shiftProtoBobDown::i#1 ] -zp[2]:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 memset::dst#2 memset::dst#1 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$9 mulf8s::return#3 main::$11 mulf8u_prepared::return#0 main::$12 main::y#0 ] +zp[2]:6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 memset::dst#2 memset::dst#1 renderBobCleanupNext#17 renderBobCleanupNext#13 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] -zp[2]:8 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] -zp[1]:10 [ mulf_init::dir#2 mulf_init::dir#4 bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] -zp[2]:11 [ main::x#0 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] +zp[1]:8 [ mulf_init::dir#2 mulf_init::dir#4 bobCharsetFindOrAddGlyph::i#2 bobCharsetFindOrAddGlyph::i#1 ] +zp[2]:9 [ main::x#0 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] reg byte x [ renderBob::ypos#0 ] reg byte a [ keyboard_key_pressed::return#2 ] -reg byte a [ main::$18 ] +reg byte a [ main::$19 ] reg byte a [ keyboard_key_pressed::return#3 ] -reg byte a [ main::$20 ] +reg byte a [ main::$21 ] 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]:13 [ renderBob::x_char_offset#0 shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] +zp[1]:11 [ renderBob::x_char_offset#0 shiftProtoBobRight::i#2 shiftProtoBobRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] reg byte a [ renderBob::y_char_offset#0 ] reg byte a [ renderBob::$8 ] +zp[2]:12 [ renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 main::$10 mulf8s::return#3 main::$12 mulf8u_prepared::return#0 main::$13 main::y#0 ] reg byte a [ renderBob::$4 ] zp[1]:14 [ renderBob::$5 shiftProtoBobRight::carry#1 bobCharsetFindOrAddGlyph::glyph_id#11 bobCharsetFindOrAddGlyph::glyph_id#1 ] reg byte a [ renderBob::$6 ] @@ -434,9 +457,11 @@ reg byte a [ mulf8s_prepared::$8 ] reg byte a [ mulf8s_prepared::$15 ] reg byte a [ mulf8s_prepared::$12 ] reg byte a [ mulf8s_prepared::$16 ] -zp[2]:16 [ renderBobInit::$0 renderBobInit::$5 renderBobInit::$1 renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::bob_glyph#1 ] -zp[2]:18 [ renderBobInit::$4 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] -reg byte a [ renderBobInit::$3 ] +reg byte a [ renderBobCleanup::$1 ] +zp[2]:16 [ renderBobInit::$0 renderBobInit::$7 renderBobInit::$1 renderBobCleanup::screen#0 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] +zp[2]:18 [ renderBobInit::$6 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 bobCharsetFindOrAddGlyph::glyph_cursor#11 bobCharsetFindOrAddGlyph::glyph_cursor#1 ] +reg byte a [ renderBobInit::$4 ] +reg byte a [ renderBobInit::$5 ] reg byte a [ bobCharsetFindOrAddGlyph::return#1 ] reg byte a [ prepareBobs::$6 ] reg byte a [ shiftProtoBobRight::$1 ] diff --git a/src/test/ref/complex/prebob/vogel-sprites.asm b/src/test/ref/complex/prebob/vogel-sprites.asm new file mode 100644 index 000000000..a254e4cfe --- /dev/null +++ b/src/test/ref/complex/prebob/vogel-sprites.asm @@ -0,0 +1,644 @@ +// Same animation using a multiplexer +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label BORDERCOL = $d020 + .label SPRITES_COLS = $d027 + .label D011 = $d011 + .const VIC_RST8 = $80 + .const VIC_DEN = $10 + .const VIC_RSEL = 8 + // 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 + // The colors of the C64 + .const BLACK = 0 + .const GREEN = 5 + // The number of sprites in the multiplexer + .const PLEX_COUNT = $20 + .const KEY_SPACE = $3c + // The BASIC screen + .label SCREEN = $400 + // The number of BOBs to render + .const NUM_BOBS = $10 + .label COS = SIN+$40 + // The address of the sprite pointers on the current screen (screen+$3f8). + .label PLEX_SCREEN_PTR = SCREEN+$3f8 + // The MSB bit of the next sprite to use for showing + .label plex_sprite_msb = 5 + // The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown. + .label plex_free_next = 2 + // The index the next sprite to use for showing (sprites are used round-robin) + .label plex_sprite_idx = 3 + // The index in the PLEX tables of the next sprite to show + // Prepare for showing the sprites + .label plex_show_idx = 4 +main: { + sei + jsr init + jsr loop + jsr exit + cli + rts +} +// Exit the program +exit: { + b1: + // Wait for space release + jsr keyboard_key_pressed + cmp #0 + bne b1 + 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 +} +// The main loop +loop: { + .label __1 = 7 + .label __2 = 7 + .label __5 = 7 + .label __6 = 7 + .label x = 7 + .label y = 7 + .label a = 3 + .label r = 2 + .label i = 4 + // Render Rotated BOBs + .label angle = 6 + .label plexFreeNextYpos1_return = $11 + .label i1 = $12 + lda #0 + sta.z angle + __b2: + lda RASTER + cmp #$d8 + bcc __b2 + lda #$f + sta BORDERCOL + lda.z angle + sta.z a + lda #0 + sta.z i + lda #$1e + sta.z r + __b4: + //kickasm {{ .break }} + lda #6 + sta BORDERCOL + lda.z r + ldy.z a + ldx COS,y + jsr mulf8s + asl.z __2 + rol.z __2+1 + clc + lda.z x + adc #<$7d*$100 + sta.z x + lda.z x+1 + adc #>$7d*$100 + sta.z x+1 + tax + lda.z i + asl + tay + txa + sta PLEX_XPOS,y + lda.z r + ldy.z a + ldx SIN,y + jsr mulf8s + asl.z __6 + rol.z __6+1 + clc + lda.z y + adc #<$7d*$100 + sta.z y + lda.z y+1 + adc #>$7d*$100 + sta.z y+1 + ldy.z i + sta PLEX_YPOS,y + lax.z a + axs #-[$62] + stx.z a + lax.z r + axs #-[3] + stx.z r + inc.z i + lda #NUM_BOBS-1+1 + cmp.z i + bne __b4 + lda #3 + sta BORDERCOL + jsr plexSort + lax.z angle + axs #-[3] + stx.z angle + lda #BLACK + sta BORDERCOL + // Sort the sprites by y-position + __b6: + lda #VIC_RST8 + and D011 + cmp #0 + bne __b6 + lda #0 + sta.z i1 + lda #1 + sta.z plex_sprite_msb + lda #0 + sta.z plex_show_idx + sta.z plex_sprite_idx + sta.z plex_free_next + // Show the sprites + __b7: + lda #BLACK + sta BORDERCOL + ldy.z plex_free_next + lda PLEX_FREE_YPOS,y + sta.z plexFreeNextYpos1_return + __b8: + lda RASTER + cmp.z plexFreeNextYpos1_return + bcc __b8 + inc BORDERCOL + jsr plexShowSprite + inc.z i1 + lda #PLEX_COUNT-1+1 + cmp.z i1 + bne __b7 + lda #BLACK + sta BORDERCOL + jsr keyboard_key_pressed + cmp #0 + bne __breturn + jmp __b2 + __breturn: + rts +} +// Show the next sprite. +// plexSort() prepares showing the sprites +plexShowSprite: { + .label plex_sprite_idx2 = $11 + lda.z plex_sprite_idx + asl + sta.z plex_sprite_idx2 + ldx.z plex_show_idx + ldy PLEX_SORTED_IDX,x + lda PLEX_YPOS,y + ldy.z plex_sprite_idx2 + sta SPRITES_YPOS,y + clc + adc #$15 + ldy.z plex_free_next + sta PLEX_FREE_YPOS,y + ldx.z plex_free_next + inx + lda #7 + sax.z plex_free_next + ldx.z plex_show_idx + ldy PLEX_SORTED_IDX,x + lda PLEX_PTR,y + ldx.z plex_sprite_idx + sta PLEX_SCREEN_PTR,x + ldy.z plex_show_idx + lda PLEX_SORTED_IDX,y + asl + tax + lda PLEX_XPOS,x + ldy.z plex_sprite_idx2 + sta SPRITES_XPOS,y + lda PLEX_XPOS+1,x + cmp #0 + bne __b1 + lda #$ff + eor.z plex_sprite_msb + and SPRITES_XMSB + sta SPRITES_XMSB + __b2: + ldx.z plex_sprite_idx + inx + lda #7 + sax.z plex_sprite_idx + inc.z plex_show_idx + asl.z plex_sprite_msb + lda.z plex_sprite_msb + cmp #0 + bne __b5 + lda #1 + sta.z plex_sprite_msb + rts + __b5: + rts + __b1: + lda SPRITES_XMSB + ora.z plex_sprite_msb + sta SPRITES_XMSB + jmp __b2 +} +// Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions in PLEX_YPOS +// Assumes that the positions are nearly sorted already (as each sprite just moves a bit) +// Uses an insertion sort: +// 1. Moves a marker (m) from the start to end of the array. Every time the marker moves forward all elements before the marker are sorted correctly. +// 2a. If the next element after the marker is larger that the current element +// the marker can be moved forwards (as the sorting is correct). +// 2b. If the next element after the marker is smaller than the current element: +// elements before the marker are shifted right one at a time until encountering one smaller than the current one. +// It is then inserted at the spot. Now the marker can move forward. +plexSort: { + .label nxt_idx = $11 + .label nxt_y = $12 + .label m = 5 + lda #0 + sta.z m + __b1: + ldy.z m + lda PLEX_SORTED_IDX+1,y + sta.z nxt_idx + tay + lda PLEX_YPOS,y + sta.z nxt_y + ldx.z m + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcs __b2 + __b3: + lda PLEX_SORTED_IDX,x + sta PLEX_SORTED_IDX+1,x + dex + cpx #$ff + beq __b4 + lda.z nxt_y + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcc __b3 + __b4: + inx + lda.z nxt_idx + sta PLEX_SORTED_IDX,x + __b2: + inc.z m + lda #PLEX_COUNT-2+1 + cmp.z m + bne __b1 + ldx #0 + plexFreePrepare1___b1: + lda #0 + sta PLEX_FREE_YPOS,x + inx + cpx #8 + bne plexFreePrepare1___b1 + rts +} +// Fast multiply two signed bytes to a word result +// mulf8s(signed byte register(A) a, signed byte register(X) b) +mulf8s: { + .label return = 7 + jsr mulf8u_prepare + stx.z mulf8s_prepared.b + jsr mulf8s_prepared + rts +} +// Calculate fast multiply with a prepared unsigned byte to a word result +// The prepared number is set by calling mulf8s_prepare(byte a) +// mulf8s_prepared(signed byte zeropage($12) b) +mulf8s_prepared: { + .label memA = $fd + .label m = 7 + .label b = $12 + lda.z b + jsr mulf8u_prepared + lda memA + cmp #0 + bpl __b1 + lda.z m+1 + sec + sbc.z b + sta.z m+1 + __b1: + lda.z b + cmp #0 + bpl __b2 + lda.z m+1 + sec + sbc memA + sta.z m+1 + __b2: + rts +} +// Calculate fast multiply with a prepared unsigned byte to a word result +// The prepared number is set by calling mulf8u_prepare(byte a) +// mulf8u_prepared(byte register(A) b) +mulf8u_prepared: { + .label resL = $fe + .label memB = $ff + .label return = 7 + sta memB + tax + sec + sm1: + lda mulf_sqr1_lo,x + sm2: + sbc mulf_sqr2_lo,x + sta resL + sm3: + lda mulf_sqr1_hi,x + sm4: + sbc mulf_sqr2_hi,x + sta memB + lda resL + sta.z return + lda memB + sta.z return+1 + rts +} +// Prepare for fast multiply with an unsigned byte to a word result +// mulf8u_prepare(byte register(A) a) +mulf8u_prepare: { + .label memA = $fd + sta memA + sta mulf8u_prepared.sm1+1 + sta mulf8u_prepared.sm3+1 + eor #$ff + sta mulf8u_prepared.sm2+1 + sta mulf8u_prepared.sm4+1 + rts +} +// Initialize the program +init: { + .label i = 6 + lda #VIC_DEN|VIC_RSEL|3 + sta D011 + jsr plexInit + lda #0 + sta.z i + // Set the sprite pointers & initial positions + __b1: + lda #$ff&SPRITE/$40 + ldy.z i + sta PLEX_PTR,y + tya + asl + asl + clc + adc.z i + tax + axs #-[$18] + tya + asl + tay + txa + sta PLEX_XPOS,y + lda.z i + asl + asl + asl + clc + adc #$32 + ldy.z i + sta PLEX_YPOS,y + inc.z i + lda #PLEX_COUNT-1+1 + cmp.z i + bne __b1 + // Enable & initialize sprites + lda #$ff + sta SPRITES_ENABLE + ldx #0 + __b3: + lda #GREEN + sta SPRITES_COLS,x + inx + cpx #8 + bne __b3 + jsr mulf_init + jsr memset + rts +} +// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +memset: { + .label str = SCREEN + .const c = ' ' + .const num = $3e8 + .label end = str+num + .label dst = 7 + lda #str + sta.z dst+1 + __b1: + lda.z dst+1 + cmp #>end + bne __b2 + lda.z dst + cmp #mulf_sqr1_hi+1 + sta.z sqr1_hi+1 + txa + sta.z sqr + sta.z sqr+1 + sta.z c + lda #mulf_sqr1_lo+1 + sta.z sqr1_lo+1 + __b1: + lda.z sqr1_lo+1 + cmp #>mulf_sqr1_lo+$200 + bne __b2 + lda.z sqr1_lo + cmp #mulf_sqr2_hi + sta.z sqr2_hi+1 + ldx #-1 + lda #mulf_sqr2_lo + sta.z sqr2_lo+1 + __b5: + lda.z sqr2_lo+1 + cmp #>mulf_sqr2_lo+$1ff + bne __b6 + lda.z sqr2_lo + cmp #f(x) = >(( x * x )/4) + .align $100 + mulf_sqr1_hi: .fill $200, 0 + // g(x) = >((( x - 255) * ( x - 255 ))/4) + .align $100 + mulf_sqr2_hi: .fill $200, 0 + // 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 BOB sprite + .align $1000 +SPRITE: +.var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) + .for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + + // Sine and Cosine tables + // Angles: $00=0, $80=PI,$100=2*PI + // Sine/Cosine: signed fixed [-$7f,$7f] + .align $40 +SIN: +.for(var i=0;i<$140;i++) + .byte >round($7fff*sin(i*2*PI/256)) + diff --git a/src/test/ref/complex/prebob/vogel-sprites.cfg b/src/test/ref/complex/prebob/vogel-sprites.cfg new file mode 100644 index 000000000..e93e40eaa --- /dev/null +++ b/src/test/ref/complex/prebob/vogel-sprites.cfg @@ -0,0 +1,453 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() + +(void()) main() +main: scope:[main] from @1 + asm { sei } + [5] call init + to:main::@1 +main::@1: scope:[main] from main + [6] phi() + [7] call loop + to:main::@2 +main::@2: scope:[main] from main::@1 + [8] phi() + [9] call exit + to:main::@3 +main::@3: scope:[main] from main::@2 + asm { cli } + to:main::@return +main::@return: scope:[main] from main::@3 + [11] return + to:@return + +(void()) exit() +exit: scope:[exit] from main::@2 + [12] phi() + to:exit::@1 +exit::@1: scope:[exit] from exit exit::@2 + [13] phi() + [14] call keyboard_key_pressed + [15] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + to:exit::@2 +exit::@2: scope:[exit] from exit::@1 + [16] (byte~) exit::$0 ← (byte) keyboard_key_pressed::return#2 + [17] if((byte) 0!=(byte~) exit::$0) goto exit::@1 + to:exit::@return +exit::@return: scope:[exit] from exit::@2 + [18] return + to:@return + +(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) +keyboard_key_pressed: scope:[keyboard_key_pressed] from exit::@1 loop::@10 + [19] phi() + [20] call keyboard_matrix_read + [21] (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 + [22] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 + [23] (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 + [24] return + to:@return + +(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) +keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed + [25] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [26] (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 + [27] return + to:@return + +(void()) loop() +loop: scope:[loop] from main::@1 + [28] phi() + to:loop::@1 +loop::@1: scope:[loop] from loop loop::@15 + [29] (byte) loop::angle#6 ← phi( loop/(byte) 0 loop::@15/(byte) loop::angle#1 ) + to:loop::@2 +loop::@2: scope:[loop] from loop::@1 loop::@2 + [30] if(*((const byte*) RASTER)<(byte) $d8) goto loop::@2 + to:loop::@3 +loop::@3: scope:[loop] from loop::@2 + [31] *((const byte*) BORDERCOL) ← (byte) $f + [32] (byte) loop::a#6 ← (byte) loop::angle#6 + to:loop::@4 +loop::@4: scope:[loop] from loop::@12 loop::@3 + [33] (byte) loop::i#2 ← phi( loop::@12/(byte) loop::i#1 loop::@3/(byte) 0 ) + [33] (byte) loop::a#2 ← phi( loop::@12/(byte) loop::a#1 loop::@3/(byte) loop::a#6 ) + [33] (signed byte) loop::r#2 ← phi( loop::@12/(signed byte) loop::r#1 loop::@3/(signed byte) $1e ) + [34] *((const byte*) BORDERCOL) ← (byte) 6 + [35] (signed byte) mulf8s::a#0 ← (signed byte) loop::r#2 + [36] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) loop::a#2) + [37] call mulf8s + [38] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 + to:loop::@11 +loop::@11: scope:[loop] from loop::@4 + [39] (signed word~) loop::$1 ← (signed word) mulf8s::return#2 + [40] (signed word~) loop::$2 ← (signed word~) loop::$1 << (byte) 1 + [41] (signed word) loop::x#0 ← (signed word~) loop::$2 + (signed word)(number) $7d*(number) $100 + [42] (byte~) loop::$4 ← > (signed word) loop::x#0 + [43] (byte~) loop::$20 ← (byte) loop::i#2 << (byte) 1 + [44] *((const word*) PLEX_XPOS + (byte~) loop::$20) ← (byte~) loop::$4 + [45] (signed byte) mulf8s::a#1 ← (signed byte) loop::r#2 + [46] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) loop::a#2) + [47] call mulf8s + [48] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 + to:loop::@12 +loop::@12: scope:[loop] from loop::@11 + [49] (signed word~) loop::$5 ← (signed word) mulf8s::return#3 + [50] (signed word~) loop::$6 ← (signed word~) loop::$5 << (byte) 1 + [51] (signed word) loop::y#0 ← (signed word~) loop::$6 + (signed word)(number) $7d*(number) $100 + [52] (byte~) loop::$8 ← > (signed word) loop::y#0 + [53] *((const byte*) PLEX_YPOS + (byte) loop::i#2) ← (byte~) loop::$8 + [54] (byte) loop::a#1 ← (byte) loop::a#2 + (byte) $62 + [55] (signed byte) loop::r#1 ← (signed byte) loop::r#2 + (signed byte) 3 + [56] (byte) loop::i#1 ← ++ (byte) loop::i#2 + [57] if((byte) loop::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto loop::@4 + to:loop::@5 +loop::@5: scope:[loop] from loop::@12 + [58] *((const byte*) BORDERCOL) ← (byte) 3 + [59] call plexSort + to:loop::@13 +loop::@13: scope:[loop] from loop::@5 + [60] (byte) loop::angle#1 ← (byte) loop::angle#6 + (byte) 3 + [61] *((const byte*) BORDERCOL) ← (const byte) BLACK + to:loop::@6 +loop::@6: scope:[loop] from loop::@13 loop::@6 + [62] (byte~) loop::$11 ← *((const byte*) D011) & (const byte) VIC_RST8 + [63] if((byte~) loop::$11!=(byte) 0) goto loop::@6 + to:loop::@7 +loop::@7: scope:[loop] from loop::@14 loop::@6 + [64] (byte) loop::i1#5 ← phi( loop::@6/(byte) 0 loop::@14/(byte) loop::i1#1 ) + [64] (byte) plex_sprite_msb#43 ← phi( loop::@6/(byte) 1 loop::@14/(byte) plex_sprite_msb#16 ) + [64] (byte) plex_show_idx#43 ← phi( loop::@6/(byte) 0 loop::@14/(byte) plex_show_idx#15 ) + [64] (byte) plex_sprite_idx#43 ← phi( loop::@6/(byte) 0 loop::@14/(byte) plex_sprite_idx#15 ) + [64] (byte) plex_free_next#17 ← phi( loop::@6/(byte) 0 loop::@14/(byte) plex_free_next#13 ) + [65] *((const byte*) BORDERCOL) ← (const byte) BLACK + to:loop::plexFreeNextYpos1 +loop::plexFreeNextYpos1: scope:[loop] from loop::@7 + [66] (byte) loop::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next#17) + to:loop::@8 +loop::@8: scope:[loop] from loop::@8 loop::plexFreeNextYpos1 + [67] if(*((const byte*) RASTER)<(byte) loop::plexFreeNextYpos1_return#0) goto loop::@8 + to:loop::@9 +loop::@9: scope:[loop] from loop::@8 + [68] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) + [69] call plexShowSprite + to:loop::@14 +loop::@14: scope:[loop] from loop::@9 + [70] (byte) loop::i1#1 ← ++ (byte) loop::i1#5 + [71] if((byte) loop::i1#1!=(const byte) PLEX_COUNT-(byte) 1+(byte) 1) goto loop::@7 + to:loop::@10 +loop::@10: scope:[loop] from loop::@14 + [72] *((const byte*) BORDERCOL) ← (const byte) BLACK + [73] call keyboard_key_pressed + [74] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 + to:loop::@15 +loop::@15: scope:[loop] from loop::@10 + [75] (byte~) loop::$18 ← (byte) keyboard_key_pressed::return#3 + [76] if((byte) 0!=(byte~) loop::$18) goto loop::@return + to:loop::@1 +loop::@return: scope:[loop] from loop::@15 + [77] return + to:@return + +(void()) plexShowSprite() +plexShowSprite: scope:[plexShowSprite] from loop::@9 + [78] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#43 << (byte) 1 + [79] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43)) + [80] *((const byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + to:plexShowSprite::plexFreeAdd1 +plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite + [81] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 + [82] *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next#17) ← (byte~) plexShowSprite::plexFreeAdd1_$0 + [83] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (byte) plex_free_next#17 + (byte) 1 + [84] (byte) plex_free_next#13 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 + to:plexShowSprite::@4 +plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 + [85] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#43) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43)) + [86] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43) + [87] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 + [88] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) + [89] *((const byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 + [90] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) + [91] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 + to:plexShowSprite::@3 +plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@4 + [92] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb#43 + [93] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 + to:plexShowSprite::@2 +plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3 + [94] (byte~) plexShowSprite::$5 ← (byte) plex_sprite_idx#43 + (byte) 1 + [95] (byte) plex_sprite_idx#15 ← (byte~) plexShowSprite::$5 & (byte) 7 + [96] (byte) plex_show_idx#15 ← ++ (byte) plex_show_idx#43 + [97] (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#43 << (byte) 1 + [98] if((byte) plex_sprite_msb#3!=(byte) 0) goto plexShowSprite::@5 + to:plexShowSprite::@return +plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::@2 + [99] phi() + to:plexShowSprite::@return +plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@5 + [100] (byte) plex_sprite_msb#16 ← phi( plexShowSprite::@5/(byte) plex_sprite_msb#3 plexShowSprite::@2/(byte) 1 ) + [101] return + to:@return +plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@4 + [102] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) plex_sprite_msb#43 + to:plexShowSprite::@2 + +(void()) plexSort() +plexSort: scope:[plexSort] from loop::@5 + [103] phi() + to:plexSort::@1 +plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 + [104] (byte) plexSort::m#2 ← phi( plexSort/(byte) 0 plexSort::@2/(byte) plexSort::m#1 ) + [105] (byte) plexSort::nxt_idx#0 ← *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::m#2) + [106] (byte) plexSort::nxt_y#0 ← *((const byte*) PLEX_YPOS + (byte) plexSort::nxt_idx#0) + [107] if((byte) plexSort::nxt_y#0>=*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2))) goto plexSort::@2 + to:plexSort::@5 +plexSort::@5: scope:[plexSort] from plexSort::@1 + [108] (byte) plexSort::s#6 ← (byte) plexSort::m#2 + to:plexSort::@3 +plexSort::@3: scope:[plexSort] from plexSort::@5 plexSort::@6 + [109] (byte) plexSort::s#3 ← phi( plexSort::@6/(byte) plexSort::s#1 plexSort::@5/(byte) plexSort::s#6 ) + [110] *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::s#3) ← *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#3) + [111] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 + [112] if((byte) plexSort::s#1==(byte) $ff) goto plexSort::@4 + to:plexSort::@6 +plexSort::@6: scope:[plexSort] from plexSort::@3 + [113] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 + to:plexSort::@4 +plexSort::@4: scope:[plexSort] from plexSort::@3 plexSort::@6 + [114] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 + [115] *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 + to:plexSort::@2 +plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@4 + [116] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 + [117] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT-(byte) 2+(byte) 1) goto plexSort::@1 + to:plexSort::plexFreePrepare1 +plexSort::plexFreePrepare1: scope:[plexSort] from plexSort::@2 + [118] phi() + to:plexSort::plexFreePrepare1_@1 +plexSort::plexFreePrepare1_@1: scope:[plexSort] from plexSort::plexFreePrepare1 plexSort::plexFreePrepare1_@1 + [119] (byte) plexSort::plexFreePrepare1_s#2 ← phi( plexSort::plexFreePrepare1/(byte) 0 plexSort::plexFreePrepare1_@1/(byte) plexSort::plexFreePrepare1_s#1 ) + [120] *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 + [121] (byte) plexSort::plexFreePrepare1_s#1 ← ++ (byte) plexSort::plexFreePrepare1_s#2 + [122] if((byte) plexSort::plexFreePrepare1_s#1!=(byte) 8) goto plexSort::plexFreePrepare1_@1 + to:plexSort::@return +plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@1 + [123] return + to:@return + +(signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) +mulf8s: scope:[mulf8s] from loop::@11 loop::@4 + [124] (signed byte) mulf8s::b#2 ← phi( loop::@11/(signed byte) mulf8s::b#1 loop::@4/(signed byte) mulf8s::b#0 ) + [124] (signed byte) mulf8s::mulf8s_prepare1_a#0 ← phi( loop::@11/(signed byte) mulf8s::a#1 loop::@4/(signed byte) mulf8s::a#0 ) + to:mulf8s::mulf8s_prepare1 +mulf8s::mulf8s_prepare1: scope:[mulf8s] from mulf8s + [125] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 + [126] call mulf8u_prepare + to:mulf8s::@1 +mulf8s::@1: scope:[mulf8s] from mulf8s::mulf8s_prepare1 + [127] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 + [128] call mulf8s_prepared + to:mulf8s::@2 +mulf8s::@2: scope:[mulf8s] from mulf8s::@1 + [129] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 + to:mulf8s::@return +mulf8s::@return: scope:[mulf8s] from mulf8s::@2 + [130] return + to:@return + +(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) +mulf8s_prepared: scope:[mulf8s_prepared] from mulf8s::@1 + [131] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 + [132] call mulf8u_prepared + [133] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + to:mulf8s_prepared::@5 +mulf8s_prepared::@5: scope:[mulf8s_prepared] from mulf8s_prepared + [134] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 + [135] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 + to:mulf8s_prepared::@3 +mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@5 + [136] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 + [137] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 + [138] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 + to:mulf8s_prepared::@1 +mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@5 + [139] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 ) + [140] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 + to:mulf8s_prepared::@4 +mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1 + [141] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 + [142] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) + [143] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 + to:mulf8s_prepared::@2 +mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4 + [144] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 ) + to:mulf8s_prepared::@return +mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2 + [145] return + to:@return + +(word()) mulf8u_prepared((byte) mulf8u_prepared::b) +mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared + [146] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 + asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } + [148] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) + to:mulf8u_prepared::@return +mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared + [149] return + to:@return + +(void()) mulf8u_prepare((byte) mulf8u_prepare::a) +mulf8u_prepare: scope:[mulf8u_prepare] from mulf8s::mulf8s_prepare1 + [150] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 + asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } + to:mulf8u_prepare::@return +mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare + [152] return + to:@return + +(void()) init() +init: scope:[init] from main + [153] *((const byte*) D011) ← (const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 + [154] call plexInit + to:init::@1 +init::@1: scope:[init] from init init::@1 + [155] (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init/(byte) 0 ) + [156] *((const byte*) PLEX_PTR + (byte) init::i#2) ← (byte)(const byte*) SPRITE/(byte) $40 + [157] (byte~) init::$10 ← (byte) init::i#2 << (byte) 2 + [158] (byte~) init::$3 ← (byte~) init::$10 + (byte) init::i#2 + [159] (byte~) init::$4 ← (byte) $18 + (byte~) init::$3 + [160] (byte~) init::$9 ← (byte) init::i#2 << (byte) 1 + [161] *((const word*) PLEX_XPOS + (byte~) init::$9) ← (byte~) init::$4 + [162] (byte~) init::$5 ← (byte) init::i#2 << (byte) 3 + [163] (byte~) init::$6 ← (byte) $32 + (byte~) init::$5 + [164] *((const byte*) PLEX_YPOS + (byte) init::i#2) ← (byte~) init::$6 + [165] (byte) init::i#1 ← ++ (byte) init::i#2 + [166] if((byte) init::i#1!=(const byte) PLEX_COUNT-(byte) 1+(byte) 1) goto init::@1 + to:init::@2 +init::@2: scope:[init] from init::@1 + [167] *((const byte*) SPRITES_ENABLE) ← (byte) $ff + to:init::@3 +init::@3: scope:[init] from init::@2 init::@3 + [168] (byte) init::i1#2 ← phi( init::@2/(byte) 0 init::@3/(byte) init::i1#1 ) + [169] *((const byte*) SPRITES_COLS + (byte) init::i1#2) ← (const byte) GREEN + [170] (byte) init::i1#1 ← ++ (byte) init::i1#2 + [171] if((byte) init::i1#1!=(byte) 8) goto init::@3 + to:init::@4 +init::@4: scope:[init] from init::@3 + [172] phi() + [173] call mulf_init + to:init::@5 +init::@5: scope:[init] from init::@4 + [174] phi() + [175] call memset + to:init::@return +init::@return: scope:[init] from init::@5 + [176] return + to:@return + +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +memset: scope:[memset] from init::@5 + [177] phi() + to:memset::@1 +memset::@1: scope:[memset] from memset memset::@2 + [178] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) + [179] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 + to:memset::@return +memset::@return: scope:[memset] from memset::@1 + [180] return + to:@return +memset::@2: scope:[memset] from memset::@1 + [181] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [182] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + to:memset::@1 + +(void()) mulf_init() +mulf_init: scope:[mulf_init] from init::@4 + [183] phi() + to:mulf_init::@1 +mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 + [184] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) + [184] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) + [184] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [184] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) + [184] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) + [185] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 + to:mulf_init::@5 +mulf_init::@5: scope:[mulf_init] from mulf_init::@1 mulf_init::@8 + [186] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) + [186] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi ) + [186] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) + [186] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo ) + [187] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 + to:mulf_init::@7 +mulf_init::@7: scope:[mulf_init] from mulf_init::@5 + [188] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) + [189] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) + to:mulf_init::@return +mulf_init::@return: scope:[mulf_init] from mulf_init::@7 + [190] return + to:@return +mulf_init::@6: scope:[mulf_init] from mulf_init::@5 + [191] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) + [192] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) + [193] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 + [194] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 + [195] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 + to:mulf_init::@8 +mulf_init::@9: scope:[mulf_init] from mulf_init::@6 + [196] phi() + to:mulf_init::@8 +mulf_init::@8: scope:[mulf_init] from mulf_init::@6 mulf_init::@9 + [197] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) + [198] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 + to:mulf_init::@5 +mulf_init::@2: scope:[mulf_init] from mulf_init::@1 + [199] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 + [200] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 + [201] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 + to:mulf_init::@4 +mulf_init::@4: scope:[mulf_init] from mulf_init::@2 + [202] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 + [203] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 + to:mulf_init::@3 +mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4 + [204] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) + [204] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) + [205] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 + [206] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 + [207] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 + [208] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 + [209] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 + [210] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 + [211] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 + to:mulf_init::@1 + +(void()) plexInit((byte*) plexInit::screen) +plexInit: scope:[plexInit] from init + [212] phi() + to:plexInit::plexSetScreen1 +plexInit::plexSetScreen1: scope:[plexInit] from plexInit + [213] phi() + to:plexInit::@1 +plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1 + [214] (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::plexSetScreen1/(byte) 0 ) + [215] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 + [216] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 + [217] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1 + to:plexInit::@return +plexInit::@return: scope:[plexInit] from plexInit::@1 + [218] return + to:@return diff --git a/src/test/ref/complex/prebob/vogel-sprites.log b/src/test/ref/complex/prebob/vogel-sprites.log new file mode 100644 index 000000000..031740cfc --- /dev/null +++ b/src/test/ref/complex/prebob/vogel-sprites.log @@ -0,0 +1,8637 @@ +Fixing pointer array-indexing *((const word*) PLEX_XPOS + (byte) plexShowSprite::xpos_idx) +Fixing pointer array-indexing *((const word*) PLEX_XPOS + (byte) plexShowSprite::xpos_idx) +Fixing pointer array-indexing *((const word*) PLEX_XPOS + (byte) init::i) +Fixing pointer array-indexing *((const word*) PLEX_XPOS + (byte) loop::i) +Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition (byte~) exit::$0 +Warning! Adding boolean cast to non-boolean sub-expression (byte~) loop::$18 +Identified constant variable (signed byte*) COS +Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx +Inlined call call plexSetScreen (byte*) plexInit::screen +Inlined call call plexFreePrepare +Inlined call call plexFreeAdd (byte) plexShowSprite::ypos +Inlined call call mulf8s_prepare (signed byte) mulf8s::a +Inlined call (byte~) loop::$13 ← call plexFreeNextYpos +Culled Empty Block (label) @1 +Culled Empty Block (label) @2 +Culled Empty Block (label) @3 +Culled Empty Block (label) plexInit::plexSetScreen1_@return +Culled Empty Block (label) plexInit::@2 +Culled Empty Block (label) @5 +Culled Empty Block (label) @6 +Culled Empty Block (label) plexSort::plexFreePrepare1_@return +Culled Empty Block (label) plexSort::@7 +Culled Empty Block (label) @7 +Culled Empty Block (label) plexShowSprite::plexFreeAdd1_@return +Culled Empty Block (label) plexShowSprite::@5 +Culled Empty Block (label) plexShowSprite::@3 +Culled Empty Block (label) @8 +Culled Empty Block (label) @10 +Culled Empty Block (label) @11 +Culled Empty Block (label) @12 +Culled Empty Block (label) mulf_init::@5 +Culled Empty Block (label) mulf_init::@6 +Culled Empty Block (label) mulf_init::@8 +Culled Empty Block (label) mulf_init::@13 +Culled Empty Block (label) mulf_init::@14 +Culled Empty Block (label) mulf_init::@16 +Culled Empty Block (label) @13 +Culled Empty Block (label) @14 +Culled Empty Block (label) mulf8u_prepared::@1 +Culled Empty Block (label) @15 +Culled Empty Block (label) @16 +Culled Empty Block (label) @17 +Culled Empty Block (label) mulf8s_prepared::@5 +Culled Empty Block (label) @18 +Culled Empty Block (label) mulf8s::mulf8s_prepare1_@return +Culled Empty Block (label) mulf8s::@1 +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) memset::@7 +Culled Empty Block (label) memset::@6 +Culled Empty Block (label) memset::@8 +Culled Empty Block (label) memset::@9 +Culled Empty Block (label) memset::@3 +Culled Empty Block (label) @24 +Culled Empty Block (label) @25 +Culled Empty Block (label) @26 +Culled Empty Block (label) keyboard_matrix_read::@1 +Culled Empty Block (label) @27 +Culled Empty Block (label) keyboard_key_pressed::@1 +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) exit::@2 +Culled Empty Block (label) exit::@4 +Culled Empty Block (label) exit::@3 +Culled Empty Block (label) exit::@5 +Culled Empty Block (label) exit::@6 +Culled Empty Block (label) @35 +Culled Empty Block (label) loop::@2 +Culled Empty Block (label) loop::@26 +Culled Empty Block (label) loop::@3 +Culled Empty Block (label) loop::@27 +Culled Empty Block (label) loop::@9 +Culled Empty Block (label) loop::@11 +Culled Empty Block (label) loop::@12 +Culled Empty Block (label) loop::@13 +Culled Empty Block (label) loop::plexFreeNextYpos1_@1 +Culled Empty Block (label) loop::@16 +Culled Empty Block (label) loop::@18 +Culled Empty Block (label) loop::@19 +Culled Empty Block (label) loop::@20 +Culled Empty Block (label) loop::@24 +Culled Empty Block (label) loop::@22 +Culled Empty Block (label) loop::@25 +Culled Empty Block (label) loop::@23 +Culled Empty Block (label) loop::@28 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + to:@4 +@4: scope:[] from @begin + (byte*) PLEX_SCREEN_PTR#0 ← ((byte*)) (number) $400+(number) $3f8 + (byte) plex_show_idx#0 ← (number) 0 + (byte) plex_sprite_idx#0 ← (number) 0 + (byte) plex_sprite_msb#0 ← (number) 1 + to:@9 + +(void()) plexInit((byte*) plexInit::screen) +plexInit: scope:[plexInit] from init + (byte*) plexInit::screen#1 ← phi( init/(byte*) plexInit::screen#0 ) + (byte*) plexInit::plexSetScreen1_screen#0 ← (byte*) plexInit::screen#1 + to:plexInit::plexSetScreen1 +plexInit::plexSetScreen1: scope:[plexInit] from plexInit + (byte*) plexInit::plexSetScreen1_screen#1 ← phi( plexInit/(byte*) plexInit::plexSetScreen1_screen#0 ) + (byte*~) plexInit::plexSetScreen1_$0 ← (byte*) plexInit::plexSetScreen1_screen#1 + (number) $3f8 + (byte*) PLEX_SCREEN_PTR#1 ← (byte*~) plexInit::plexSetScreen1_$0 + to:plexInit::@3 +plexInit::@3: scope:[plexInit] from plexInit::plexSetScreen1 + (byte*) PLEX_SCREEN_PTR#22 ← phi( plexInit::plexSetScreen1/(byte*) PLEX_SCREEN_PTR#1 ) + (byte) plexInit::i#0 ← (byte) 0 + to:plexInit::@1 +plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::@3 + (byte*) PLEX_SCREEN_PTR#15 ← phi( plexInit::@1/(byte*) PLEX_SCREEN_PTR#15 plexInit::@3/(byte*) PLEX_SCREEN_PTR#22 ) + (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::@3/(byte) plexInit::i#0 ) + *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 + (byte) plexInit::i#1 ← (byte) plexInit::i#2 + rangenext(0,PLEX_COUNT-1) + (bool~) plexInit::$1 ← (byte) plexInit::i#1 != rangelast(0,PLEX_COUNT-1) + if((bool~) plexInit::$1) goto plexInit::@1 + to:plexInit::@return +plexInit::@return: scope:[plexInit] from plexInit::@1 + (byte*) PLEX_SCREEN_PTR#8 ← phi( plexInit::@1/(byte*) PLEX_SCREEN_PTR#15 ) + (byte*) PLEX_SCREEN_PTR#2 ← (byte*) PLEX_SCREEN_PTR#8 + return + to:@return + +(void()) plexSort() +plexSort: scope:[plexSort] from loop::@7 + (byte) plexSort::m#0 ← (byte) 0 + to:plexSort::@1 +plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 + (byte) plexSort::m#2 ← phi( plexSort/(byte) plexSort::m#0 plexSort::@2/(byte) plexSort::m#1 ) + (number~) plexSort::$1 ← (byte) plexSort::m#2 + (number) 1 + (byte) plexSort::nxt_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (number~) plexSort::$1) + (byte) plexSort::nxt_y#0 ← *((const byte*) PLEX_YPOS + (byte) plexSort::nxt_idx#0) + (bool~) plexSort::$2 ← (byte) plexSort::nxt_y#0 < *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2)) + (bool~) plexSort::$3 ← ! (bool~) plexSort::$2 + if((bool~) plexSort::$3) goto plexSort::@2 + to:plexSort::@5 +plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@4 + (byte) plexSort::m#3 ← phi( plexSort::@1/(byte) plexSort::m#2 plexSort::@4/(byte) plexSort::m#5 ) + (byte) plexSort::m#1 ← (byte) plexSort::m#3 + rangenext(0,PLEX_COUNT-2) + (bool~) plexSort::$8 ← (byte) plexSort::m#1 != rangelast(0,PLEX_COUNT-2) + if((bool~) plexSort::$8) goto plexSort::@1 + to:plexSort::@6 +plexSort::@5: scope:[plexSort] from plexSort::@1 + (byte) plexSort::nxt_idx#3 ← phi( plexSort::@1/(byte) plexSort::nxt_idx#0 ) + (byte) plexSort::nxt_y#2 ← phi( plexSort::@1/(byte) plexSort::nxt_y#0 ) + (byte) plexSort::m#4 ← phi( plexSort::@1/(byte) plexSort::m#2 ) + (byte) plexSort::s#0 ← (byte) plexSort::m#4 + to:plexSort::@3 +plexSort::@3: scope:[plexSort] from plexSort::@3 plexSort::@5 + (byte) plexSort::m#6 ← phi( plexSort::@3/(byte) plexSort::m#6 plexSort::@5/(byte) plexSort::m#4 ) + (byte) plexSort::nxt_idx#2 ← phi( plexSort::@3/(byte) plexSort::nxt_idx#2 plexSort::@5/(byte) plexSort::nxt_idx#3 ) + (byte) plexSort::nxt_y#1 ← phi( plexSort::@3/(byte) plexSort::nxt_y#1 plexSort::@5/(byte) plexSort::nxt_y#2 ) + (byte) plexSort::s#3 ← phi( plexSort::@3/(byte) plexSort::s#1 plexSort::@5/(byte) plexSort::s#0 ) + (number~) plexSort::$4 ← (byte) plexSort::s#3 + (number) 1 + *((const byte*) PLEX_SORTED_IDX + (number~) plexSort::$4) ← *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#3) + (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 + (bool~) plexSort::$5 ← (byte) plexSort::s#1 != (number) $ff + (bool~) plexSort::$6 ← (byte) plexSort::nxt_y#1 < *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1)) + (bool~) plexSort::$7 ← (bool~) plexSort::$5 && (bool~) plexSort::$6 + if((bool~) plexSort::$7) goto plexSort::@3 + to:plexSort::@4 +plexSort::@4: scope:[plexSort] from plexSort::@3 + (byte) plexSort::m#5 ← phi( plexSort::@3/(byte) plexSort::m#6 ) + (byte) plexSort::nxt_idx#1 ← phi( plexSort::@3/(byte) plexSort::nxt_idx#2 ) + (byte) plexSort::s#4 ← phi( plexSort::@3/(byte) plexSort::s#1 ) + (byte) plexSort::s#2 ← ++ (byte) plexSort::s#4 + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#1 + to:plexSort::@2 +plexSort::@6: scope:[plexSort] from plexSort::@2 + (byte) plex_show_idx#1 ← (number) 0 + (byte) plex_sprite_idx#1 ← (number) 0 + (byte) plex_sprite_msb#1 ← (number) 1 + to:plexSort::plexFreePrepare1 +plexSort::plexFreePrepare1: scope:[plexSort] from plexSort::@6 + (byte) plex_sprite_msb#40 ← phi( plexSort::@6/(byte) plex_sprite_msb#1 ) + (byte) plex_sprite_idx#41 ← phi( plexSort::@6/(byte) plex_sprite_idx#1 ) + (byte) plex_show_idx#41 ← phi( plexSort::@6/(byte) plex_show_idx#1 ) + (byte) plexSort::plexFreePrepare1_s#0 ← (byte) 0 + to:plexSort::plexFreePrepare1_@1 +plexSort::plexFreePrepare1_@1: scope:[plexSort] from plexSort::plexFreePrepare1 plexSort::plexFreePrepare1_@1 + (byte) plex_sprite_msb#32 ← phi( plexSort::plexFreePrepare1/(byte) plex_sprite_msb#40 plexSort::plexFreePrepare1_@1/(byte) plex_sprite_msb#32 ) + (byte) plex_sprite_idx#34 ← phi( plexSort::plexFreePrepare1/(byte) plex_sprite_idx#41 plexSort::plexFreePrepare1_@1/(byte) plex_sprite_idx#34 ) + (byte) plex_show_idx#34 ← phi( plexSort::plexFreePrepare1/(byte) plex_show_idx#41 plexSort::plexFreePrepare1_@1/(byte) plex_show_idx#34 ) + (byte) plexSort::plexFreePrepare1_s#2 ← phi( plexSort::plexFreePrepare1/(byte) plexSort::plexFreePrepare1_s#0 plexSort::plexFreePrepare1_@1/(byte) plexSort::plexFreePrepare1_s#1 ) + *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (number) 0 + (byte) plexSort::plexFreePrepare1_s#1 ← (byte) plexSort::plexFreePrepare1_s#2 + rangenext(0,7) + (bool~) plexSort::plexFreePrepare1_$0 ← (byte) plexSort::plexFreePrepare1_s#1 != rangelast(0,7) + if((bool~) plexSort::plexFreePrepare1_$0) goto plexSort::plexFreePrepare1_@1 + to:plexSort::plexFreePrepare1_@2 +plexSort::plexFreePrepare1_@2: scope:[plexSort] from plexSort::plexFreePrepare1_@1 + (byte) plex_sprite_msb#23 ← phi( plexSort::plexFreePrepare1_@1/(byte) plex_sprite_msb#32 ) + (byte) plex_sprite_idx#22 ← phi( plexSort::plexFreePrepare1_@1/(byte) plex_sprite_idx#34 ) + (byte) plex_show_idx#22 ← phi( plexSort::plexFreePrepare1_@1/(byte) plex_show_idx#34 ) + (byte) plex_free_next#0 ← (number) 0 + to:plexSort::@return +plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@2 + (byte) plex_free_next#11 ← phi( plexSort::plexFreePrepare1_@2/(byte) plex_free_next#0 ) + (byte) plex_sprite_msb#12 ← phi( plexSort::plexFreePrepare1_@2/(byte) plex_sprite_msb#23 ) + (byte) plex_sprite_idx#11 ← phi( plexSort::plexFreePrepare1_@2/(byte) plex_sprite_idx#22 ) + (byte) plex_show_idx#11 ← phi( plexSort::plexFreePrepare1_@2/(byte) plex_show_idx#22 ) + (byte) plex_show_idx#2 ← (byte) plex_show_idx#11 + (byte) plex_sprite_idx#2 ← (byte) plex_sprite_idx#11 + (byte) plex_sprite_msb#2 ← (byte) plex_sprite_msb#12 + (byte) plex_free_next#1 ← (byte) plex_free_next#11 + return + to:@return + +(void()) plexShowSprite() +plexShowSprite: scope:[plexShowSprite] from loop::@17 + (byte) plex_sprite_msb#41 ← phi( loop::@17/(byte) plex_sprite_msb#28 ) + (byte*) PLEX_SCREEN_PTR#23 ← phi( loop::@17/(byte*) PLEX_SCREEN_PTR#27 ) + (byte) plex_free_next#21 ← phi( loop::@17/(byte) plex_free_next#28 ) + (byte) plex_show_idx#12 ← phi( loop::@17/(byte) plex_show_idx#23 ) + (byte) plex_sprite_idx#12 ← phi( loop::@17/(byte) plex_sprite_idx#23 ) + (number~) plexShowSprite::$0 ← (byte) plex_sprite_idx#12 * (number) 2 + (byte) plexShowSprite::plex_sprite_idx2#0 ← (number~) plexShowSprite::$0 + (byte) plexShowSprite::ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#12)) + *((const byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::ypos#0 + (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← (byte) plexShowSprite::ypos#0 + to:plexShowSprite::plexFreeAdd1 +plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite + (byte) plex_sprite_msb#33 ← phi( plexShowSprite/(byte) plex_sprite_msb#41 ) + (byte) plexShowSprite::plex_sprite_idx2#2 ← phi( plexShowSprite/(byte) plexShowSprite::plex_sprite_idx2#0 ) + (byte) plex_sprite_idx#24 ← phi( plexShowSprite/(byte) plex_sprite_idx#12 ) + (byte*) PLEX_SCREEN_PTR#16 ← phi( plexShowSprite/(byte*) PLEX_SCREEN_PTR#23 ) + (byte) plex_show_idx#24 ← phi( plexShowSprite/(byte) plex_show_idx#12 ) + (byte) plex_free_next#12 ← phi( plexShowSprite/(byte) plex_free_next#21 ) + (byte) plexShowSprite::plexFreeAdd1_ypos#1 ← phi( plexShowSprite/(byte) plexShowSprite::plexFreeAdd1_ypos#0 ) + (number~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#1 + (number) $15 + *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next#12) ← (number~) plexShowSprite::plexFreeAdd1_$0 + (number~) plexShowSprite::plexFreeAdd1_$1 ← (byte) plex_free_next#12 + (number) 1 + (number~) plexShowSprite::plexFreeAdd1_$2 ← (number~) plexShowSprite::plexFreeAdd1_$1 & (number) 7 + (byte) plex_free_next#2 ← (number~) plexShowSprite::plexFreeAdd1_$2 + to:plexShowSprite::@7 +plexShowSprite::@7: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 + (byte) plex_free_next#40 ← phi( plexShowSprite::plexFreeAdd1/(byte) plex_free_next#2 ) + (byte) plex_sprite_msb#24 ← phi( plexShowSprite::plexFreeAdd1/(byte) plex_sprite_msb#33 ) + (byte) plexShowSprite::plex_sprite_idx2#1 ← phi( plexShowSprite::plexFreeAdd1/(byte) plexShowSprite::plex_sprite_idx2#2 ) + (byte) plex_sprite_idx#13 ← phi( plexShowSprite::plexFreeAdd1/(byte) plex_sprite_idx#24 ) + (byte*) PLEX_SCREEN_PTR#9 ← phi( plexShowSprite::plexFreeAdd1/(byte*) PLEX_SCREEN_PTR#16 ) + (byte) plex_show_idx#13 ← phi( plexShowSprite::plexFreeAdd1/(byte) plex_show_idx#24 ) + *((byte*) PLEX_SCREEN_PTR#9 + (byte) plex_sprite_idx#13) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#13)) + (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#13) + (byte~) plexShowSprite::$10 ← (byte) plexShowSprite::xpos_idx#0 * (const byte) SIZEOF_WORD + (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$10) + *((const byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#1) ← (byte~) plexShowSprite::$2 + (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 * (const byte) SIZEOF_WORD + (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) + (bool~) plexShowSprite::$4 ← (byte~) plexShowSprite::$3 != (number) 0 + if((bool~) plexShowSprite::$4) goto plexShowSprite::@1 + to:plexShowSprite::@4 +plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@7 + (byte) plex_free_next#32 ← phi( plexShowSprite::@7/(byte) plex_free_next#40 ) + (byte) plex_show_idx#25 ← phi( plexShowSprite::@7/(byte) plex_show_idx#13 ) + (byte) plex_sprite_idx#25 ← phi( plexShowSprite::@7/(byte) plex_sprite_idx#13 ) + (byte) plex_sprite_msb#13 ← phi( plexShowSprite::@7/(byte) plex_sprite_msb#24 ) + *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) plex_sprite_msb#13 + to:plexShowSprite::@2 +plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@7 + (byte) plex_free_next#33 ← phi( plexShowSprite::@7/(byte) plex_free_next#40 ) + (byte) plex_show_idx#26 ← phi( plexShowSprite::@7/(byte) plex_show_idx#13 ) + (byte) plex_sprite_idx#26 ← phi( plexShowSprite::@7/(byte) plex_sprite_idx#13 ) + (byte) plex_sprite_msb#14 ← phi( plexShowSprite::@7/(byte) plex_sprite_msb#24 ) + (number~) plexShowSprite::$9 ← (number) $ff ^ (byte) plex_sprite_msb#14 + *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (number~) plexShowSprite::$9 + to:plexShowSprite::@2 +plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@4 + (byte) plex_free_next#22 ← phi( plexShowSprite::@1/(byte) plex_free_next#32 plexShowSprite::@4/(byte) plex_free_next#33 ) + (byte) plex_sprite_msb#15 ← phi( plexShowSprite::@1/(byte) plex_sprite_msb#13 plexShowSprite::@4/(byte) plex_sprite_msb#14 ) + (byte) plex_show_idx#14 ← phi( plexShowSprite::@1/(byte) plex_show_idx#25 plexShowSprite::@4/(byte) plex_show_idx#26 ) + (byte) plex_sprite_idx#14 ← phi( plexShowSprite::@1/(byte) plex_sprite_idx#25 plexShowSprite::@4/(byte) plex_sprite_idx#26 ) + (number~) plexShowSprite::$5 ← (byte) plex_sprite_idx#14 + (number) 1 + (number~) plexShowSprite::$6 ← (number~) plexShowSprite::$5 & (number) 7 + (byte) plex_sprite_idx#3 ← (number~) plexShowSprite::$6 + (byte) plex_show_idx#3 ← ++ (byte) plex_show_idx#14 + (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#15 * (number) 2 + (bool~) plexShowSprite::$7 ← (byte) plex_sprite_msb#3 == (number) 0 + (bool~) plexShowSprite::$8 ← ! (bool~) plexShowSprite::$7 + if((bool~) plexShowSprite::$8) goto plexShowSprite::@return + to:plexShowSprite::@6 +plexShowSprite::@6: scope:[plexShowSprite] from plexShowSprite::@2 + (byte) plex_show_idx#27 ← phi( plexShowSprite::@2/(byte) plex_show_idx#3 ) + (byte) plex_sprite_idx#27 ← phi( plexShowSprite::@2/(byte) plex_sprite_idx#3 ) + (byte) plex_free_next#23 ← phi( plexShowSprite::@2/(byte) plex_free_next#22 ) + (byte) plex_sprite_msb#4 ← (number) 1 + to:plexShowSprite::@return +plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@6 + (byte) plex_sprite_msb#16 ← phi( plexShowSprite::@2/(byte) plex_sprite_msb#3 plexShowSprite::@6/(byte) plex_sprite_msb#4 ) + (byte) plex_show_idx#15 ← phi( plexShowSprite::@2/(byte) plex_show_idx#3 plexShowSprite::@6/(byte) plex_show_idx#27 ) + (byte) plex_sprite_idx#15 ← phi( plexShowSprite::@2/(byte) plex_sprite_idx#3 plexShowSprite::@6/(byte) plex_sprite_idx#27 ) + (byte) plex_free_next#13 ← phi( plexShowSprite::@2/(byte) plex_free_next#22 plexShowSprite::@6/(byte) plex_free_next#23 ) + (byte) plex_free_next#3 ← (byte) plex_free_next#13 + (byte) plex_sprite_idx#4 ← (byte) plex_sprite_idx#15 + (byte) plex_show_idx#4 ← (byte) plex_show_idx#15 + (byte) plex_sprite_msb#5 ← (byte) plex_sprite_msb#16 + return + to:@return +@9: scope:[] from @4 + (byte) plex_sprite_msb#39 ← phi( @4/(byte) plex_sprite_msb#0 ) + (byte) plex_sprite_idx#40 ← phi( @4/(byte) plex_sprite_idx#0 ) + (byte) plex_show_idx#40 ← phi( @4/(byte) plex_show_idx#0 ) + (byte*) PLEX_SCREEN_PTR#26 ← phi( @4/(byte*) PLEX_SCREEN_PTR#0 ) + (byte) plex_free_next#4 ← (number) 0 + to:@36 + +(void()) mulf_init() +mulf_init: scope:[mulf_init] from init::@4 + (word) mulf_init::sqr#0 ← (number) 0 + (byte) mulf_init::x_2#0 ← (number) 0 + (byte) mulf_init::c#0 ← (number) 0 + (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 + (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 + to:mulf_init::@1 +mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@4 + (byte) mulf_init::x_2#5 ← phi( mulf_init/(byte) mulf_init::x_2#0 mulf_init::@4/(byte) mulf_init::x_2#2 ) + (byte*) mulf_init::sqr1_hi#5 ← phi( mulf_init/(byte*) mulf_init::sqr1_hi#0 mulf_init::@4/(byte*) mulf_init::sqr1_hi#1 ) + (word) mulf_init::sqr#6 ← phi( mulf_init/(word) mulf_init::sqr#0 mulf_init::@4/(word) mulf_init::sqr#1 ) + (byte) mulf_init::c#3 ← phi( mulf_init/(byte) mulf_init::c#0 mulf_init::@4/(byte) mulf_init::c#4 ) + (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(byte*) mulf_init::sqr1_lo#0 mulf_init::@4/(byte*) mulf_init::sqr1_lo#1 ) + (bool~) mulf_init::$0 ← (byte*) mulf_init::sqr1_lo#2 != (const byte*) mulf_sqr1_lo+(number) $200 + if((bool~) mulf_init::$0) goto mulf_init::@2 + to:mulf_init::@3 +mulf_init::@2: scope:[mulf_init] from mulf_init::@1 + (byte) mulf_init::x_2#4 ← phi( mulf_init::@1/(byte) mulf_init::x_2#5 ) + (byte*) mulf_init::sqr1_hi#3 ← phi( mulf_init::@1/(byte*) mulf_init::sqr1_hi#5 ) + (byte*) mulf_init::sqr1_lo#4 ← phi( mulf_init::@1/(byte*) mulf_init::sqr1_lo#2 ) + (word) mulf_init::sqr#5 ← phi( mulf_init::@1/(word) mulf_init::sqr#6 ) + (byte) mulf_init::c#2 ← phi( mulf_init::@1/(byte) mulf_init::c#3 ) + (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 + (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (number) 1 + (bool~) mulf_init::$2 ← (number~) mulf_init::$1 == (number) 0 + (bool~) mulf_init::$3 ← ! (bool~) mulf_init::$2 + if((bool~) mulf_init::$3) goto mulf_init::@4 + to:mulf_init::@7 +mulf_init::@3: scope:[mulf_init] from mulf_init::@1 + (byte) mulf_init::x_255#0 ← (byte)(number) -1 + (byte) mulf_init::dir#0 ← (number) $ff + (byte*) mulf_init::sqr2_hi#0 ← (const byte*) mulf_sqr2_hi + (byte*) mulf_init::sqr2_lo#0 ← (const byte*) mulf_sqr2_lo + to:mulf_init::@9 +mulf_init::@4: scope:[mulf_init] from mulf_init::@2 mulf_init::@7 + (byte) mulf_init::c#4 ← phi( mulf_init::@2/(byte) mulf_init::c#1 mulf_init::@7/(byte) mulf_init::c#5 ) + (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#4 mulf_init::@7/(byte) mulf_init::x_2#1 ) + (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init::@2/(byte*) mulf_init::sqr1_hi#3 mulf_init::@7/(byte*) mulf_init::sqr1_hi#4 ) + (byte*) mulf_init::sqr1_lo#3 ← phi( mulf_init::@2/(byte*) mulf_init::sqr1_lo#4 mulf_init::@7/(byte*) mulf_init::sqr1_lo#5 ) + (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#5 mulf_init::@7/(word) mulf_init::sqr#2 ) + (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 + *((byte*) mulf_init::sqr1_lo#3) ← (byte~) mulf_init::$4 + (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 + *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 + (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 + (word~) mulf_init::$6 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 + (word) mulf_init::sqr#1 ← (word~) mulf_init::$6 + (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#3 + to:mulf_init::@1 +mulf_init::@7: scope:[mulf_init] from mulf_init::@2 + (byte) mulf_init::c#5 ← phi( mulf_init::@2/(byte) mulf_init::c#1 ) + (byte*) mulf_init::sqr1_hi#4 ← phi( mulf_init::@2/(byte*) mulf_init::sqr1_hi#3 ) + (byte*) mulf_init::sqr1_lo#5 ← phi( mulf_init::@2/(byte*) mulf_init::sqr1_lo#4 ) + (word) mulf_init::sqr#4 ← phi( mulf_init::@2/(word) mulf_init::sqr#5 ) + (byte) mulf_init::x_2#3 ← phi( mulf_init::@2/(byte) mulf_init::x_2#4 ) + (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 + (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 + to:mulf_init::@4 +mulf_init::@9: scope:[mulf_init] from mulf_init::@12 mulf_init::@3 + (byte) mulf_init::dir#3 ← phi( mulf_init::@12/(byte) mulf_init::dir#4 mulf_init::@3/(byte) mulf_init::dir#0 ) + (byte*) mulf_init::sqr2_hi#3 ← phi( mulf_init::@12/(byte*) mulf_init::sqr2_hi#4 mulf_init::@3/(byte*) mulf_init::sqr2_hi#0 ) + (byte) mulf_init::x_255#3 ← phi( mulf_init::@12/(byte) mulf_init::x_255#4 mulf_init::@3/(byte) mulf_init::x_255#0 ) + (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@12/(byte*) mulf_init::sqr2_lo#1 mulf_init::@3/(byte*) mulf_init::sqr2_lo#0 ) + (bool~) mulf_init::$7 ← (byte*) mulf_init::sqr2_lo#2 != (const byte*) mulf_sqr2_lo+(number) $1ff + if((bool~) mulf_init::$7) goto mulf_init::@10 + to:mulf_init::@11 +mulf_init::@10: scope:[mulf_init] from mulf_init::@9 + (byte) mulf_init::dir#2 ← phi( mulf_init::@9/(byte) mulf_init::dir#3 ) + (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@9/(byte*) mulf_init::sqr2_hi#3 ) + (byte*) mulf_init::sqr2_lo#3 ← phi( mulf_init::@9/(byte*) mulf_init::sqr2_lo#2 ) + (byte) mulf_init::x_255#2 ← phi( mulf_init::@9/(byte) mulf_init::x_255#3 ) + *((byte*) mulf_init::sqr2_lo#3) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) + *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) + (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 + (byte~) mulf_init::$8 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 + (byte) mulf_init::x_255#1 ← (byte~) mulf_init::$8 + (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (number) 0 + (bool~) mulf_init::$10 ← ! (bool~) mulf_init::$9 + if((bool~) mulf_init::$10) goto mulf_init::@12 + to:mulf_init::@15 +mulf_init::@11: scope:[mulf_init] from mulf_init::@9 + *((const byte*) mulf_sqr2_lo+(number) $1ff) ← *((const byte*) mulf_sqr1_lo+(number) $100) + *((const byte*) mulf_sqr2_hi+(number) $1ff) ← *((const byte*) mulf_sqr1_hi+(number) $100) + to:mulf_init::@return +mulf_init::@12: scope:[mulf_init] from mulf_init::@10 mulf_init::@15 + (byte) mulf_init::dir#4 ← phi( mulf_init::@10/(byte) mulf_init::dir#2 mulf_init::@15/(byte) mulf_init::dir#1 ) + (byte*) mulf_init::sqr2_hi#4 ← phi( mulf_init::@10/(byte*) mulf_init::sqr2_hi#1 mulf_init::@15/(byte*) mulf_init::sqr2_hi#5 ) + (byte) mulf_init::x_255#4 ← phi( mulf_init::@10/(byte) mulf_init::x_255#1 mulf_init::@15/(byte) mulf_init::x_255#5 ) + (byte*) mulf_init::sqr2_lo#4 ← phi( mulf_init::@10/(byte*) mulf_init::sqr2_lo#3 mulf_init::@15/(byte*) mulf_init::sqr2_lo#5 ) + (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#4 + to:mulf_init::@9 +mulf_init::@15: scope:[mulf_init] from mulf_init::@10 + (byte*) mulf_init::sqr2_hi#5 ← phi( mulf_init::@10/(byte*) mulf_init::sqr2_hi#1 ) + (byte) mulf_init::x_255#5 ← phi( mulf_init::@10/(byte) mulf_init::x_255#1 ) + (byte*) mulf_init::sqr2_lo#5 ← phi( mulf_init::@10/(byte*) mulf_init::sqr2_lo#3 ) + (byte) mulf_init::dir#1 ← (number) 1 + to:mulf_init::@12 +mulf_init::@return: scope:[mulf_init] from mulf_init::@11 + return + to:@return + +(void()) mulf8u_prepare((byte) mulf8u_prepare::a) +mulf8u_prepare: scope:[mulf8u_prepare] from mulf8s::mulf8s_prepare1 + (byte) mulf8u_prepare::a#1 ← phi( mulf8s::mulf8s_prepare1/(byte) mulf8u_prepare::a#0 ) + *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#1 + asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } + to:mulf8u_prepare::@return +mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare + return + to:@return + +(word()) mulf8u_prepared((byte) mulf8u_prepared::b) +mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared + (byte) mulf8u_prepared::b#1 ← phi( mulf8s_prepared/(byte) mulf8u_prepared::b#0 ) + *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#1 + asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } + (word) mulf8u_prepared::return#0 ← ((word)) { *((const byte*) mulf8u_prepared::memB), *((const byte*) mulf8u_prepared::resL) } + to:mulf8u_prepared::@return +mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared + (word) mulf8u_prepared::return#3 ← phi( mulf8u_prepared/(word) mulf8u_prepared::return#0 ) + (word) mulf8u_prepared::return#1 ← (word) mulf8u_prepared::return#3 + return + to:@return + +(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) +mulf8s_prepared: scope:[mulf8s_prepared] from mulf8s::@2 + (signed byte) mulf8s_prepared::b#1 ← phi( mulf8s::@2/(signed byte) mulf8s_prepared::b#0 ) + (byte~) mulf8s_prepared::$0 ← ((byte)) (signed byte) mulf8s_prepared::b#1 + (byte) mulf8u_prepared::b#0 ← (byte~) mulf8s_prepared::$0 + call mulf8u_prepared + (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#1 + to:mulf8s_prepared::@6 +mulf8s_prepared::@6: scope:[mulf8s_prepared] from mulf8s_prepared + (signed byte) mulf8s_prepared::b#4 ← phi( mulf8s_prepared/(signed byte) mulf8s_prepared::b#1 ) + (word) mulf8u_prepared::return#4 ← phi( mulf8s_prepared/(word) mulf8u_prepared::return#2 ) + (word~) mulf8s_prepared::$1 ← (word) mulf8u_prepared::return#4 + (word) mulf8s_prepared::m#0 ← (word~) mulf8s_prepared::$1 + (bool~) mulf8s_prepared::$2 ← *((const signed byte*) mulf8s_prepared::memA) < (number) 0 + (bool~) mulf8s_prepared::$3 ← ! (bool~) mulf8s_prepared::$2 + if((bool~) mulf8s_prepared::$3) goto mulf8s_prepared::@1 + to:mulf8s_prepared::@3 +mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@6 + (word) mulf8s_prepared::m#6 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@6/(word) mulf8s_prepared::m#0 ) + (signed byte) mulf8s_prepared::b#2 ← phi( mulf8s_prepared::@3/(signed byte) mulf8s_prepared::b#3 mulf8s_prepared::@6/(signed byte) mulf8s_prepared::b#4 ) + (bool~) mulf8s_prepared::$4 ← (signed byte) mulf8s_prepared::b#2 < (number) 0 + (bool~) mulf8s_prepared::$5 ← ! (bool~) mulf8s_prepared::$4 + if((bool~) mulf8s_prepared::$5) goto mulf8s_prepared::@2 + to:mulf8s_prepared::@4 +mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@6 + (signed byte) mulf8s_prepared::b#3 ← phi( mulf8s_prepared::@6/(signed byte) mulf8s_prepared::b#4 ) + (word) mulf8s_prepared::m#3 ← phi( mulf8s_prepared::@6/(word) mulf8s_prepared::m#0 ) + (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#3 + (byte~) mulf8s_prepared::$9 ← ((byte)) (signed byte) mulf8s_prepared::b#3 + (byte~) mulf8s_prepared::$10 ← (byte~) mulf8s_prepared::$8 - (byte~) mulf8s_prepared::$9 + (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$10 + (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#3 hi= (byte~) mulf8s_prepared::$15 + to:mulf8s_prepared::@1 +mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4 + (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#6 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 ) + (signed word~) mulf8s_prepared::$6 ← ((signed word)) (word) mulf8s_prepared::m#4 + (signed word) mulf8s_prepared::return#0 ← (signed word~) mulf8s_prepared::$6 + to:mulf8s_prepared::@return +mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1 + (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#6 ) + (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 + (byte~) mulf8s_prepared::$13 ← ((byte)) *((const signed byte*) mulf8s_prepared::memA) + (byte~) mulf8s_prepared::$14 ← (byte~) mulf8s_prepared::$12 - (byte~) mulf8s_prepared::$13 + (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$14 + (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 + to:mulf8s_prepared::@2 +mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2 + (signed word) mulf8s_prepared::return#3 ← phi( mulf8s_prepared::@2/(signed word) mulf8s_prepared::return#0 ) + (signed word) mulf8s_prepared::return#1 ← (signed word) mulf8s_prepared::return#3 + return + to:@return + +(signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) +mulf8s: scope:[mulf8s] from loop::@30 loop::@6 + (signed byte) mulf8s::b#5 ← phi( loop::@30/(signed byte) mulf8s::b#1 loop::@6/(signed byte) mulf8s::b#0 ) + (signed byte) mulf8s::a#2 ← phi( loop::@30/(signed byte) mulf8s::a#1 loop::@6/(signed byte) mulf8s::a#0 ) + (signed byte) mulf8s::mulf8s_prepare1_a#0 ← (signed byte) mulf8s::a#2 + to:mulf8s::mulf8s_prepare1 +mulf8s::mulf8s_prepare1: scope:[mulf8s] from mulf8s + (signed byte) mulf8s::b#4 ← phi( mulf8s/(signed byte) mulf8s::b#5 ) + (signed byte) mulf8s::mulf8s_prepare1_a#1 ← phi( mulf8s/(signed byte) mulf8s::mulf8s_prepare1_a#0 ) + (byte~) mulf8s::mulf8s_prepare1_$0 ← ((byte)) (signed byte) mulf8s::mulf8s_prepare1_a#1 + (byte) mulf8u_prepare::a#0 ← (byte~) mulf8s::mulf8s_prepare1_$0 + call mulf8u_prepare + to:mulf8s::@3 +mulf8s::@3: scope:[mulf8s] from mulf8s::mulf8s_prepare1 + (signed byte) mulf8s::b#3 ← phi( mulf8s::mulf8s_prepare1/(signed byte) mulf8s::b#4 ) + to:mulf8s::@2 +mulf8s::@2: scope:[mulf8s] from mulf8s::@3 + (signed byte) mulf8s::b#2 ← phi( mulf8s::@3/(signed byte) mulf8s::b#3 ) + (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 + call mulf8s_prepared + (signed word) mulf8s_prepared::return#2 ← (signed word) mulf8s_prepared::return#1 + to:mulf8s::@4 +mulf8s::@4: scope:[mulf8s] from mulf8s::@2 + (signed word) mulf8s_prepared::return#4 ← phi( mulf8s::@2/(signed word) mulf8s_prepared::return#2 ) + (signed word~) mulf8s::$1 ← (signed word) mulf8s_prepared::return#4 + (signed word) mulf8s::return#0 ← (signed word~) mulf8s::$1 + to:mulf8s::@return +mulf8s::@return: scope:[mulf8s] from mulf8s::@4 + (signed word) mulf8s::return#4 ← phi( mulf8s::@4/(signed word) mulf8s::return#0 ) + (signed word) mulf8s::return#1 ← (signed word) mulf8s::return#4 + return + to:@return + +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +memset: scope:[memset] from init::@6 + (byte) memset::c#4 ← phi( init::@6/(byte) memset::c#0 ) + (void*) memset::str#3 ← phi( init::@6/(void*) memset::str#0 ) + (word) memset::num#1 ← phi( init::@6/(word) memset::num#0 ) + (bool~) memset::$0 ← (word) memset::num#1 > (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 + 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::end#0 ← (byte*~) memset::$3 + (byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#2 + 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::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 ) + (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::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 + 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 exit::@1 loop::@21 + (byte) keyboard_key_pressed::key#2 ← phi( exit::@1/(byte) keyboard_key_pressed::key#0 loop::@21/(byte) keyboard_key_pressed::key#1 ) + (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#2 & (number) 7 + (byte) keyboard_key_pressed::colidx#0 ← (number~) keyboard_key_pressed::$0 + (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_key_pressed::key#2 >> (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#4 ← phi( keyboard_key_pressed::@2/(byte) keyboard_key_pressed::return#0 ) + (byte) keyboard_key_pressed::return#1 ← (byte) keyboard_key_pressed::return#4 + return + to:@return + +(void()) main() +main: scope:[main] from @36 + (byte) plex_free_next#34 ← phi( @36/(byte) plex_free_next#31 ) + (byte) plex_sprite_msb#34 ← phi( @36/(byte) plex_sprite_msb#31 ) + (byte) plex_sprite_idx#35 ← phi( @36/(byte) plex_sprite_idx#33 ) + (byte) plex_show_idx#35 ← phi( @36/(byte) plex_show_idx#33 ) + (byte*) PLEX_SCREEN_PTR#17 ← phi( @36/(byte*) PLEX_SCREEN_PTR#21 ) + asm { sei } + call init + to:main::@1 +main::@1: scope:[main] from main + (byte) plex_free_next#24 ← phi( main/(byte) plex_free_next#34 ) + (byte) plex_sprite_msb#25 ← phi( main/(byte) plex_sprite_msb#34 ) + (byte) plex_sprite_idx#28 ← phi( main/(byte) plex_sprite_idx#35 ) + (byte) plex_show_idx#28 ← phi( main/(byte) plex_show_idx#35 ) + (byte*) PLEX_SCREEN_PTR#10 ← phi( main/(byte*) PLEX_SCREEN_PTR#6 ) + (byte*) PLEX_SCREEN_PTR#3 ← (byte*) PLEX_SCREEN_PTR#10 + call loop + to:main::@2 +main::@2: scope:[main] from main::@1 + (byte*) PLEX_SCREEN_PTR#24 ← phi( main::@1/(byte*) PLEX_SCREEN_PTR#3 ) + (byte) plex_free_next#14 ← phi( main::@1/(byte) plex_free_next#9 ) + (byte) plex_sprite_msb#17 ← phi( main::@1/(byte) plex_sprite_msb#10 ) + (byte) plex_sprite_idx#16 ← phi( main::@1/(byte) plex_sprite_idx#9 ) + (byte) plex_show_idx#16 ← phi( main::@1/(byte) plex_show_idx#9 ) + (byte) plex_show_idx#5 ← (byte) plex_show_idx#16 + (byte) plex_sprite_idx#5 ← (byte) plex_sprite_idx#16 + (byte) plex_sprite_msb#6 ← (byte) plex_sprite_msb#17 + (byte) plex_free_next#5 ← (byte) plex_free_next#14 + call exit + to:main::@3 +main::@3: scope:[main] from main::@2 + (byte) plex_free_next#25 ← phi( main::@2/(byte) plex_free_next#5 ) + (byte) plex_sprite_msb#26 ← phi( main::@2/(byte) plex_sprite_msb#6 ) + (byte) plex_sprite_idx#29 ← phi( main::@2/(byte) plex_sprite_idx#5 ) + (byte) plex_show_idx#29 ← phi( main::@2/(byte) plex_show_idx#5 ) + (byte*) PLEX_SCREEN_PTR#18 ← phi( main::@2/(byte*) PLEX_SCREEN_PTR#24 ) + asm { cli } + to:main::@return +main::@return: scope:[main] from main::@3 + (byte) plex_free_next#15 ← phi( main::@3/(byte) plex_free_next#25 ) + (byte) plex_sprite_msb#18 ← phi( main::@3/(byte) plex_sprite_msb#26 ) + (byte) plex_sprite_idx#17 ← phi( main::@3/(byte) plex_sprite_idx#29 ) + (byte) plex_show_idx#17 ← phi( main::@3/(byte) plex_show_idx#29 ) + (byte*) PLEX_SCREEN_PTR#11 ← phi( main::@3/(byte*) PLEX_SCREEN_PTR#18 ) + (byte*) PLEX_SCREEN_PTR#4 ← (byte*) PLEX_SCREEN_PTR#11 + (byte) plex_show_idx#6 ← (byte) plex_show_idx#17 + (byte) plex_sprite_idx#6 ← (byte) plex_sprite_idx#17 + (byte) plex_sprite_msb#7 ← (byte) plex_sprite_msb#18 + (byte) plex_free_next#6 ← (byte) plex_free_next#15 + return + to:@return + +(void()) init() +init: scope:[init] from main + (byte*) PLEX_SCREEN_PTR#19 ← phi( main/(byte*) PLEX_SCREEN_PTR#17 ) + *((const byte*) D011) ← (const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 + (byte*) plexInit::screen#0 ← (const byte*) SCREEN + call plexInit + to:init::@5 +init::@5: scope:[init] from init + (byte*) PLEX_SCREEN_PTR#12 ← phi( init/(byte*) PLEX_SCREEN_PTR#2 ) + (byte*) PLEX_SCREEN_PTR#5 ← (byte*) PLEX_SCREEN_PTR#12 + (byte) init::i#0 ← (byte) 0 + to:init::@1 +init::@1: scope:[init] from init::@1 init::@5 + (byte*) PLEX_SCREEN_PTR#33 ← phi( init::@1/(byte*) PLEX_SCREEN_PTR#33 init::@5/(byte*) PLEX_SCREEN_PTR#5 ) + (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@5/(byte) init::i#0 ) + *((const byte*) PLEX_PTR + (byte) init::i#2) ← (byte)(const byte*) SPRITE/(number) $40 + (number~) init::$3 ← (byte) init::i#2 * (number) 5 + (number~) init::$4 ← (number) $18 + (number~) init::$3 + (byte~) init::$9 ← (byte) init::i#2 * (const byte) SIZEOF_WORD + *((const word*) PLEX_XPOS + (byte~) init::$9) ← (number~) init::$4 + (number~) init::$5 ← (byte) init::i#2 * (number) 8 + (number~) init::$6 ← (number) $32 + (number~) init::$5 + *((const byte*) PLEX_YPOS + (byte) init::i#2) ← (number~) init::$6 + (byte) init::i#1 ← (byte) init::i#2 + rangenext(0,PLEX_COUNT-1) + (bool~) init::$7 ← (byte) init::i#1 != rangelast(0,PLEX_COUNT-1) + if((bool~) init::$7) goto init::@1 + to:init::@2 +init::@2: scope:[init] from init::@1 + (byte*) PLEX_SCREEN_PTR#31 ← phi( init::@1/(byte*) PLEX_SCREEN_PTR#33 ) + *((const byte*) SPRITES_ENABLE) ← (number) $ff + (byte) init::i1#0 ← (byte) 0 + to:init::@3 +init::@3: scope:[init] from init::@2 init::@3 + (byte*) PLEX_SCREEN_PTR#29 ← phi( init::@2/(byte*) PLEX_SCREEN_PTR#31 init::@3/(byte*) PLEX_SCREEN_PTR#29 ) + (byte) init::i1#2 ← phi( init::@2/(byte) init::i1#0 init::@3/(byte) init::i1#1 ) + *((const byte*) SPRITES_COLS + (byte) init::i1#2) ← (const byte) GREEN + (byte) init::i1#1 ← (byte) init::i1#2 + rangenext(0,7) + (bool~) init::$8 ← (byte) init::i1#1 != rangelast(0,7) + if((bool~) init::$8) goto init::@3 + to:init::@4 +init::@4: scope:[init] from init::@3 + (byte*) PLEX_SCREEN_PTR#28 ← phi( init::@3/(byte*) PLEX_SCREEN_PTR#29 ) + call mulf_init + to:init::@6 +init::@6: scope:[init] from init::@4 + (byte*) PLEX_SCREEN_PTR#25 ← phi( init::@4/(byte*) PLEX_SCREEN_PTR#28 ) + (void*) memset::str#0 ← (void*)(const byte*) SCREEN + (byte) memset::c#0 ← (byte) ' ' + (word) memset::num#0 ← (number) $3e8 + call memset + (void*) memset::return#2 ← (void*) memset::return#1 + to:init::@7 +init::@7: scope:[init] from init::@6 + (byte*) PLEX_SCREEN_PTR#20 ← phi( init::@6/(byte*) PLEX_SCREEN_PTR#25 ) + to:init::@return +init::@return: scope:[init] from init::@7 + (byte*) PLEX_SCREEN_PTR#13 ← phi( init::@7/(byte*) PLEX_SCREEN_PTR#20 ) + (byte*) PLEX_SCREEN_PTR#6 ← (byte*) PLEX_SCREEN_PTR#13 + return + to:@return + +(void()) exit() +exit: scope:[exit] from main::@2 + to:exit::@1 +exit::@1: scope:[exit] from exit exit::@7 + (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:exit::@7 +exit::@7: scope:[exit] from exit::@1 + (byte) keyboard_key_pressed::return#5 ← phi( exit::@1/(byte) keyboard_key_pressed::return#2 ) + (byte~) exit::$0 ← (byte) keyboard_key_pressed::return#5 + (bool~) exit::$1 ← (number) 0 != (byte~) exit::$0 + if((bool~) exit::$1) goto exit::@1 + to:exit::@return +exit::@return: scope:[exit] from exit::@7 + return + to:@return + +(void()) loop() +loop: scope:[loop] from main::@1 + (byte*) PLEX_SCREEN_PTR#48 ← phi( main::@1/(byte*) PLEX_SCREEN_PTR#3 ) + (byte) plex_free_next#35 ← phi( main::@1/(byte) plex_free_next#24 ) + (byte) plex_sprite_msb#35 ← phi( main::@1/(byte) plex_sprite_msb#25 ) + (byte) plex_sprite_idx#36 ← phi( main::@1/(byte) plex_sprite_idx#28 ) + (byte) plex_show_idx#36 ← phi( main::@1/(byte) plex_show_idx#28 ) + (byte) loop::angle#0 ← (number) 0 + to:loop::@1 +loop::@1: scope:[loop] from loop loop::@34 + (byte*) PLEX_SCREEN_PTR#47 ← phi( loop/(byte*) PLEX_SCREEN_PTR#48 loop::@34/(byte*) PLEX_SCREEN_PTR#49 ) + (byte) loop::angle#6 ← phi( loop/(byte) loop::angle#0 loop::@34/(byte) loop::angle#8 ) + (byte) plex_free_next#29 ← phi( loop/(byte) plex_free_next#35 loop::@34/(byte) plex_free_next#30 ) + (byte) plex_sprite_msb#29 ← phi( loop/(byte) plex_sprite_msb#35 loop::@34/(byte) plex_sprite_msb#30 ) + (byte) plex_sprite_idx#31 ← phi( loop/(byte) plex_sprite_idx#36 loop::@34/(byte) plex_sprite_idx#32 ) + (byte) plex_show_idx#31 ← phi( loop/(byte) plex_show_idx#36 loop::@34/(byte) plex_show_idx#32 ) + if(true) goto loop::@4 + to:loop::@return +loop::@4: scope:[loop] from loop::@1 loop::@4 + (byte*) PLEX_SCREEN_PTR#46 ← phi( loop::@1/(byte*) PLEX_SCREEN_PTR#47 loop::@4/(byte*) PLEX_SCREEN_PTR#46 ) + (byte) plex_free_next#47 ← phi( loop::@1/(byte) plex_free_next#29 loop::@4/(byte) plex_free_next#47 ) + (byte) plex_sprite_msb#48 ← phi( loop::@1/(byte) plex_sprite_msb#29 loop::@4/(byte) plex_sprite_msb#48 ) + (byte) plex_sprite_idx#48 ← phi( loop::@1/(byte) plex_sprite_idx#31 loop::@4/(byte) plex_sprite_idx#48 ) + (byte) plex_show_idx#48 ← phi( loop::@1/(byte) plex_show_idx#31 loop::@4/(byte) plex_show_idx#48 ) + (byte) loop::angle#4 ← phi( loop::@1/(byte) loop::angle#6 loop::@4/(byte) loop::angle#4 ) + (bool~) loop::$0 ← *((const byte*) RASTER) < (number) $d8 + if((bool~) loop::$0) goto loop::@4 + to:loop::@5 +loop::@5: scope:[loop] from loop::@4 + (byte*) PLEX_SCREEN_PTR#45 ← phi( loop::@4/(byte*) PLEX_SCREEN_PTR#46 ) + (byte) plex_free_next#46 ← phi( loop::@4/(byte) plex_free_next#47 ) + (byte) plex_sprite_msb#46 ← phi( loop::@4/(byte) plex_sprite_msb#48 ) + (byte) plex_sprite_idx#46 ← phi( loop::@4/(byte) plex_sprite_idx#48 ) + (byte) plex_show_idx#46 ← phi( loop::@4/(byte) plex_show_idx#48 ) + (byte) loop::angle#2 ← phi( loop::@4/(byte) loop::angle#4 ) + *((const byte*) BORDERCOL) ← (number) $f + (signed byte) loop::r#0 ← (number) $1e + (byte) loop::a#0 ← (byte) loop::angle#2 + (byte) loop::i#0 ← (byte) 0 + to:loop::@6 +loop::@6: scope:[loop] from loop::@31 loop::@5 + (byte*) PLEX_SCREEN_PTR#44 ← phi( loop::@31/(byte*) PLEX_SCREEN_PTR#42 loop::@5/(byte*) PLEX_SCREEN_PTR#45 ) + (byte) loop::angle#10 ← phi( loop::@31/(byte) loop::angle#7 loop::@5/(byte) loop::angle#2 ) + (byte) plex_free_next#44 ← phi( loop::@31/(byte) plex_free_next#36 loop::@5/(byte) plex_free_next#46 ) + (byte) plex_sprite_msb#44 ← phi( loop::@31/(byte) plex_sprite_msb#36 loop::@5/(byte) plex_sprite_msb#46 ) + (byte) plex_sprite_idx#44 ← phi( loop::@31/(byte) plex_sprite_idx#37 loop::@5/(byte) plex_sprite_idx#46 ) + (byte) plex_show_idx#44 ← phi( loop::@31/(byte) plex_show_idx#37 loop::@5/(byte) plex_show_idx#46 ) + (byte) loop::i#4 ← phi( loop::@31/(byte) loop::i#1 loop::@5/(byte) loop::i#0 ) + (byte) loop::a#2 ← phi( loop::@31/(byte) loop::a#1 loop::@5/(byte) loop::a#0 ) + (signed byte) loop::r#2 ← phi( loop::@31/(signed byte) loop::r#1 loop::@5/(signed byte) loop::r#0 ) + *((const byte*) BORDERCOL) ← (number) 6 + (signed byte) mulf8s::a#0 ← (signed byte) loop::r#2 + (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) loop::a#2) + call mulf8s + (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#1 + to:loop::@30 +loop::@30: scope:[loop] from loop::@6 + (byte*) PLEX_SCREEN_PTR#43 ← phi( loop::@6/(byte*) PLEX_SCREEN_PTR#44 ) + (byte) loop::angle#9 ← phi( loop::@6/(byte) loop::angle#10 ) + (byte) plex_free_next#41 ← phi( loop::@6/(byte) plex_free_next#44 ) + (byte) plex_sprite_msb#42 ← phi( loop::@6/(byte) plex_sprite_msb#44 ) + (byte) plex_sprite_idx#42 ← phi( loop::@6/(byte) plex_sprite_idx#44 ) + (byte) plex_show_idx#42 ← phi( loop::@6/(byte) plex_show_idx#44 ) + (byte) loop::a#3 ← phi( loop::@6/(byte) loop::a#2 ) + (signed byte) loop::r#3 ← phi( loop::@6/(signed byte) loop::r#2 ) + (byte) loop::i#2 ← phi( loop::@6/(byte) loop::i#4 ) + (signed word) mulf8s::return#5 ← phi( loop::@6/(signed word) mulf8s::return#2 ) + (signed word~) loop::$1 ← (signed word) mulf8s::return#5 + (number~) loop::$2 ← (signed word~) loop::$1 * (number) 2 + (number~) loop::$3 ← (number~) loop::$2 + (number) $7d*(number) $100 + (signed word) loop::x#0 ← (number~) loop::$3 + (byte~) loop::$4 ← > (signed word) loop::x#0 + (byte~) loop::$20 ← (byte) loop::i#2 * (const byte) SIZEOF_WORD + *((const word*) PLEX_XPOS + (byte~) loop::$20) ← (byte~) loop::$4 + (signed byte) mulf8s::a#1 ← (signed byte) loop::r#3 + (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) loop::a#3) + call mulf8s + (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#1 + to:loop::@31 +loop::@31: scope:[loop] from loop::@30 + (byte*) PLEX_SCREEN_PTR#42 ← phi( loop::@30/(byte*) PLEX_SCREEN_PTR#43 ) + (byte) loop::angle#7 ← phi( loop::@30/(byte) loop::angle#9 ) + (byte) plex_free_next#36 ← phi( loop::@30/(byte) plex_free_next#41 ) + (byte) plex_sprite_msb#36 ← phi( loop::@30/(byte) plex_sprite_msb#42 ) + (byte) plex_sprite_idx#37 ← phi( loop::@30/(byte) plex_sprite_idx#42 ) + (byte) plex_show_idx#37 ← phi( loop::@30/(byte) plex_show_idx#42 ) + (signed byte) loop::r#4 ← phi( loop::@30/(signed byte) loop::r#3 ) + (byte) loop::a#4 ← phi( loop::@30/(byte) loop::a#3 ) + (byte) loop::i#3 ← phi( loop::@30/(byte) loop::i#2 ) + (signed word) mulf8s::return#6 ← phi( loop::@30/(signed word) mulf8s::return#3 ) + (signed word~) loop::$5 ← (signed word) mulf8s::return#6 + (number~) loop::$6 ← (signed word~) loop::$5 * (number) 2 + (number~) loop::$7 ← (number~) loop::$6 + (number) $7d*(number) $100 + (signed word) loop::y#0 ← (number~) loop::$7 + (byte~) loop::$8 ← > (signed word) loop::y#0 + *((const byte*) PLEX_YPOS + (byte) loop::i#3) ← (byte~) loop::$8 + (byte) loop::a#1 ← (byte) loop::a#4 + (number) $62 + (signed byte) loop::r#1 ← (signed byte) loop::r#4 + (number) 3 + (byte) loop::i#1 ← (byte) loop::i#3 + rangenext(0,NUM_BOBS-1) + (bool~) loop::$9 ← (byte) loop::i#1 != rangelast(0,NUM_BOBS-1) + if((bool~) loop::$9) goto loop::@6 + to:loop::@7 +loop::@7: scope:[loop] from loop::@31 + (byte*) PLEX_SCREEN_PTR#41 ← phi( loop::@31/(byte*) PLEX_SCREEN_PTR#42 ) + (byte) loop::angle#5 ← phi( loop::@31/(byte) loop::angle#7 ) + (byte) plex_free_next#26 ← phi( loop::@31/(byte) plex_free_next#36 ) + (byte) plex_sprite_msb#27 ← phi( loop::@31/(byte) plex_sprite_msb#36 ) + (byte) plex_sprite_idx#30 ← phi( loop::@31/(byte) plex_sprite_idx#37 ) + (byte) plex_show_idx#30 ← phi( loop::@31/(byte) plex_show_idx#37 ) + *((const byte*) BORDERCOL) ← (number) 3 + call plexSort + to:loop::@32 +loop::@32: scope:[loop] from loop::@7 + (byte*) PLEX_SCREEN_PTR#40 ← phi( loop::@7/(byte*) PLEX_SCREEN_PTR#41 ) + (byte) loop::angle#3 ← phi( loop::@7/(byte) loop::angle#5 ) + (byte) plex_free_next#16 ← phi( loop::@7/(byte) plex_free_next#1 ) + (byte) plex_sprite_msb#19 ← phi( loop::@7/(byte) plex_sprite_msb#2 ) + (byte) plex_sprite_idx#18 ← phi( loop::@7/(byte) plex_sprite_idx#2 ) + (byte) plex_show_idx#18 ← phi( loop::@7/(byte) plex_show_idx#2 ) + (byte) plex_show_idx#7 ← (byte) plex_show_idx#18 + (byte) plex_sprite_idx#7 ← (byte) plex_sprite_idx#18 + (byte) plex_sprite_msb#8 ← (byte) plex_sprite_msb#19 + (byte) plex_free_next#7 ← (byte) plex_free_next#16 + (byte) loop::angle#1 ← (byte) loop::angle#3 + (number) 3 + *((const byte*) BORDERCOL) ← (const byte) BLACK + to:loop::@8 +loop::@8: scope:[loop] from loop::@32 loop::@8 + (byte) loop::angle#20 ← phi( loop::@32/(byte) loop::angle#1 loop::@8/(byte) loop::angle#20 ) + (byte*) PLEX_SCREEN_PTR#39 ← phi( loop::@32/(byte*) PLEX_SCREEN_PTR#40 loop::@8/(byte*) PLEX_SCREEN_PTR#39 ) + (byte) plex_sprite_msb#51 ← phi( loop::@32/(byte) plex_sprite_msb#8 loop::@8/(byte) plex_sprite_msb#51 ) + (byte) plex_show_idx#51 ← phi( loop::@32/(byte) plex_show_idx#7 loop::@8/(byte) plex_show_idx#51 ) + (byte) plex_sprite_idx#51 ← phi( loop::@32/(byte) plex_sprite_idx#7 loop::@8/(byte) plex_sprite_idx#51 ) + (byte) plex_free_next#42 ← phi( loop::@32/(byte) plex_free_next#7 loop::@8/(byte) plex_free_next#42 ) + (byte~) loop::$11 ← *((const byte*) D011) & (const byte) VIC_RST8 + (bool~) loop::$12 ← (byte~) loop::$11 != (number) 0 + if((bool~) loop::$12) goto loop::@8 + to:loop::@10 +loop::@10: scope:[loop] from loop::@8 + (byte) loop::angle#19 ← phi( loop::@8/(byte) loop::angle#20 ) + (byte*) PLEX_SCREEN_PTR#37 ← phi( loop::@8/(byte*) PLEX_SCREEN_PTR#39 ) + (byte) plex_sprite_msb#50 ← phi( loop::@8/(byte) plex_sprite_msb#51 ) + (byte) plex_show_idx#50 ← phi( loop::@8/(byte) plex_show_idx#51 ) + (byte) plex_sprite_idx#50 ← phi( loop::@8/(byte) plex_sprite_idx#51 ) + (byte) plex_free_next#37 ← phi( loop::@8/(byte) plex_free_next#42 ) + (byte) loop::i1#0 ← (byte) 0 + to:loop::@14 +loop::@14: scope:[loop] from loop::@10 loop::@33 + (byte) loop::angle#18 ← phi( loop::@10/(byte) loop::angle#19 loop::@33/(byte) loop::angle#12 ) + (byte*) PLEX_SCREEN_PTR#36 ← phi( loop::@10/(byte*) PLEX_SCREEN_PTR#37 loop::@33/(byte*) PLEX_SCREEN_PTR#38 ) + (byte) loop::i1#8 ← phi( loop::@10/(byte) loop::i1#0 loop::@33/(byte) loop::i1#1 ) + (byte) plex_sprite_msb#49 ← phi( loop::@10/(byte) plex_sprite_msb#50 loop::@33/(byte) plex_sprite_msb#9 ) + (byte) plex_show_idx#49 ← phi( loop::@10/(byte) plex_show_idx#50 loop::@33/(byte) plex_show_idx#8 ) + (byte) plex_sprite_idx#49 ← phi( loop::@10/(byte) plex_sprite_idx#50 loop::@33/(byte) plex_sprite_idx#8 ) + (byte) plex_free_next#27 ← phi( loop::@10/(byte) plex_free_next#37 loop::@33/(byte) plex_free_next#8 ) + *((const byte*) BORDERCOL) ← (const byte) BLACK + to:loop::plexFreeNextYpos1 +loop::plexFreeNextYpos1: scope:[loop] from loop::@14 + (byte) loop::angle#17 ← phi( loop::@14/(byte) loop::angle#18 ) + (byte*) PLEX_SCREEN_PTR#35 ← phi( loop::@14/(byte*) PLEX_SCREEN_PTR#36 ) + (byte) loop::i1#7 ← phi( loop::@14/(byte) loop::i1#8 ) + (byte) plex_sprite_msb#47 ← phi( loop::@14/(byte) plex_sprite_msb#49 ) + (byte) plex_show_idx#47 ← phi( loop::@14/(byte) plex_show_idx#49 ) + (byte) plex_sprite_idx#47 ← phi( loop::@14/(byte) plex_sprite_idx#49 ) + (byte) plex_free_next#17 ← phi( loop::@14/(byte) plex_free_next#27 ) + (byte) loop::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next#17) + to:loop::plexFreeNextYpos1_@return +loop::plexFreeNextYpos1_@return: scope:[loop] from loop::plexFreeNextYpos1 + (byte) loop::angle#16 ← phi( loop::plexFreeNextYpos1/(byte) loop::angle#17 ) + (byte*) PLEX_SCREEN_PTR#34 ← phi( loop::plexFreeNextYpos1/(byte*) PLEX_SCREEN_PTR#35 ) + (byte) loop::i1#6 ← phi( loop::plexFreeNextYpos1/(byte) loop::i1#7 ) + (byte) plex_sprite_msb#45 ← phi( loop::plexFreeNextYpos1/(byte) plex_sprite_msb#47 ) + (byte) plex_free_next#45 ← phi( loop::plexFreeNextYpos1/(byte) plex_free_next#17 ) + (byte) plex_show_idx#45 ← phi( loop::plexFreeNextYpos1/(byte) plex_show_idx#47 ) + (byte) plex_sprite_idx#45 ← phi( loop::plexFreeNextYpos1/(byte) plex_sprite_idx#47 ) + (byte) loop::plexFreeNextYpos1_return#2 ← phi( loop::plexFreeNextYpos1/(byte) loop::plexFreeNextYpos1_return#0 ) + (byte) loop::plexFreeNextYpos1_return#1 ← (byte) loop::plexFreeNextYpos1_return#2 + to:loop::@29 +loop::@29: scope:[loop] from loop::plexFreeNextYpos1_@return + (byte) loop::angle#15 ← phi( loop::plexFreeNextYpos1_@return/(byte) loop::angle#16 ) + (byte*) PLEX_SCREEN_PTR#32 ← phi( loop::plexFreeNextYpos1_@return/(byte*) PLEX_SCREEN_PTR#34 ) + (byte) loop::i1#5 ← phi( loop::plexFreeNextYpos1_@return/(byte) loop::i1#6 ) + (byte) plex_sprite_msb#43 ← phi( loop::plexFreeNextYpos1_@return/(byte) plex_sprite_msb#45 ) + (byte) plex_free_next#43 ← phi( loop::plexFreeNextYpos1_@return/(byte) plex_free_next#45 ) + (byte) plex_show_idx#43 ← phi( loop::plexFreeNextYpos1_@return/(byte) plex_show_idx#45 ) + (byte) plex_sprite_idx#43 ← phi( loop::plexFreeNextYpos1_@return/(byte) plex_sprite_idx#45 ) + (byte) loop::plexFreeNextYpos1_return#3 ← phi( loop::plexFreeNextYpos1_@return/(byte) loop::plexFreeNextYpos1_return#1 ) + (byte~) loop::$13 ← (byte) loop::plexFreeNextYpos1_return#3 + (byte) loop::rasterY#0 ← (byte~) loop::$13 + to:loop::@15 +loop::@15: scope:[loop] from loop::@15 loop::@29 + (byte) loop::angle#14 ← phi( loop::@15/(byte) loop::angle#14 loop::@29/(byte) loop::angle#15 ) + (byte*) PLEX_SCREEN_PTR#30 ← phi( loop::@15/(byte*) PLEX_SCREEN_PTR#30 loop::@29/(byte*) PLEX_SCREEN_PTR#32 ) + (byte) loop::i1#4 ← phi( loop::@15/(byte) loop::i1#4 loop::@29/(byte) loop::i1#5 ) + (byte) plex_sprite_msb#37 ← phi( loop::@15/(byte) plex_sprite_msb#37 loop::@29/(byte) plex_sprite_msb#43 ) + (byte) plex_free_next#38 ← phi( loop::@15/(byte) plex_free_next#38 loop::@29/(byte) plex_free_next#43 ) + (byte) plex_show_idx#38 ← phi( loop::@15/(byte) plex_show_idx#38 loop::@29/(byte) plex_show_idx#43 ) + (byte) plex_sprite_idx#38 ← phi( loop::@15/(byte) plex_sprite_idx#38 loop::@29/(byte) plex_sprite_idx#43 ) + (byte) loop::rasterY#1 ← phi( loop::@15/(byte) loop::rasterY#1 loop::@29/(byte) loop::rasterY#0 ) + (bool~) loop::$14 ← *((const byte*) RASTER) < (byte) loop::rasterY#1 + if((bool~) loop::$14) goto loop::@15 + to:loop::@17 +loop::@17: scope:[loop] from loop::@15 + (byte) loop::angle#13 ← phi( loop::@15/(byte) loop::angle#14 ) + (byte*) PLEX_SCREEN_PTR#27 ← phi( loop::@15/(byte*) PLEX_SCREEN_PTR#30 ) + (byte) loop::i1#3 ← phi( loop::@15/(byte) loop::i1#4 ) + (byte) plex_sprite_msb#28 ← phi( loop::@15/(byte) plex_sprite_msb#37 ) + (byte) plex_free_next#28 ← phi( loop::@15/(byte) plex_free_next#38 ) + (byte) plex_show_idx#23 ← phi( loop::@15/(byte) plex_show_idx#38 ) + (byte) plex_sprite_idx#23 ← phi( loop::@15/(byte) plex_sprite_idx#38 ) + *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) + call plexShowSprite + to:loop::@33 +loop::@33: scope:[loop] from loop::@17 + (byte*) PLEX_SCREEN_PTR#38 ← phi( loop::@17/(byte*) PLEX_SCREEN_PTR#27 ) + (byte) loop::angle#12 ← phi( loop::@17/(byte) loop::angle#13 ) + (byte) loop::i1#2 ← phi( loop::@17/(byte) loop::i1#3 ) + (byte) plex_sprite_msb#20 ← phi( loop::@17/(byte) plex_sprite_msb#5 ) + (byte) plex_show_idx#19 ← phi( loop::@17/(byte) plex_show_idx#4 ) + (byte) plex_sprite_idx#19 ← phi( loop::@17/(byte) plex_sprite_idx#4 ) + (byte) plex_free_next#18 ← phi( loop::@17/(byte) plex_free_next#3 ) + (byte) plex_free_next#8 ← (byte) plex_free_next#18 + (byte) plex_sprite_idx#8 ← (byte) plex_sprite_idx#19 + (byte) plex_show_idx#8 ← (byte) plex_show_idx#19 + (byte) plex_sprite_msb#9 ← (byte) plex_sprite_msb#20 + (byte) loop::i1#1 ← (byte) loop::i1#2 + rangenext(0,PLEX_COUNT-1) + (bool~) loop::$17 ← (byte) loop::i1#1 != rangelast(0,PLEX_COUNT-1) + if((bool~) loop::$17) goto loop::@14 + to:loop::@21 +loop::@21: scope:[loop] from loop::@33 + (byte*) PLEX_SCREEN_PTR#50 ← phi( loop::@33/(byte*) PLEX_SCREEN_PTR#38 ) + (byte) loop::angle#11 ← phi( loop::@33/(byte) loop::angle#12 ) + (byte) plex_free_next#39 ← phi( loop::@33/(byte) plex_free_next#8 ) + (byte) plex_sprite_msb#38 ← phi( loop::@33/(byte) plex_sprite_msb#9 ) + (byte) plex_sprite_idx#39 ← phi( loop::@33/(byte) plex_sprite_idx#8 ) + (byte) plex_show_idx#39 ← phi( loop::@33/(byte) plex_show_idx#8 ) + *((const byte*) BORDERCOL) ← (const byte) BLACK + (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:loop::@34 +loop::@34: scope:[loop] from loop::@21 + (byte*) PLEX_SCREEN_PTR#49 ← phi( loop::@21/(byte*) PLEX_SCREEN_PTR#50 ) + (byte) loop::angle#8 ← phi( loop::@21/(byte) loop::angle#11 ) + (byte) plex_free_next#30 ← phi( loop::@21/(byte) plex_free_next#39 ) + (byte) plex_sprite_msb#30 ← phi( loop::@21/(byte) plex_sprite_msb#38 ) + (byte) plex_sprite_idx#32 ← phi( loop::@21/(byte) plex_sprite_idx#39 ) + (byte) plex_show_idx#32 ← phi( loop::@21/(byte) plex_show_idx#39 ) + (byte) keyboard_key_pressed::return#6 ← phi( loop::@21/(byte) keyboard_key_pressed::return#3 ) + (byte~) loop::$18 ← (byte) keyboard_key_pressed::return#6 + (bool~) loop::$21 ← (number) 0 != (byte~) loop::$18 + (bool~) loop::$19 ← ! (bool~) loop::$21 + if((bool~) loop::$19) goto loop::@1 + to:loop::@return +loop::@return: scope:[loop] from loop::@1 loop::@34 + (byte) plex_free_next#19 ← phi( loop::@1/(byte) plex_free_next#29 loop::@34/(byte) plex_free_next#30 ) + (byte) plex_sprite_msb#21 ← phi( loop::@1/(byte) plex_sprite_msb#29 loop::@34/(byte) plex_sprite_msb#30 ) + (byte) plex_sprite_idx#20 ← phi( loop::@1/(byte) plex_sprite_idx#31 loop::@34/(byte) plex_sprite_idx#32 ) + (byte) plex_show_idx#20 ← phi( loop::@1/(byte) plex_show_idx#31 loop::@34/(byte) plex_show_idx#32 ) + (byte) plex_show_idx#9 ← (byte) plex_show_idx#20 + (byte) plex_sprite_idx#9 ← (byte) plex_sprite_idx#20 + (byte) plex_sprite_msb#10 ← (byte) plex_sprite_msb#21 + (byte) plex_free_next#9 ← (byte) plex_free_next#19 + return + to:@return +@36: scope:[] from @9 + (byte) plex_free_next#31 ← phi( @9/(byte) plex_free_next#4 ) + (byte) plex_sprite_msb#31 ← phi( @9/(byte) plex_sprite_msb#39 ) + (byte) plex_sprite_idx#33 ← phi( @9/(byte) plex_sprite_idx#40 ) + (byte) plex_show_idx#33 ← phi( @9/(byte) plex_show_idx#40 ) + (byte*) PLEX_SCREEN_PTR#21 ← phi( @9/(byte*) PLEX_SCREEN_PTR#26 ) + call main + to:@37 +@37: scope:[] from @36 + (byte) plex_free_next#20 ← phi( @36/(byte) plex_free_next#6 ) + (byte) plex_sprite_msb#22 ← phi( @36/(byte) plex_sprite_msb#7 ) + (byte) plex_sprite_idx#21 ← phi( @36/(byte) plex_sprite_idx#6 ) + (byte) plex_show_idx#21 ← phi( @36/(byte) plex_show_idx#6 ) + (byte*) PLEX_SCREEN_PTR#14 ← phi( @36/(byte*) PLEX_SCREEN_PTR#4 ) + (byte*) PLEX_SCREEN_PTR#7 ← (byte*) PLEX_SCREEN_PTR#14 + (byte) plex_show_idx#10 ← (byte) plex_show_idx#21 + (byte) plex_sprite_idx#10 ← (byte) plex_sprite_idx#21 + (byte) plex_sprite_msb#11 ← (byte) plex_sprite_msb#22 + (byte) plex_free_next#10 ← (byte) plex_free_next#20 + to:@end +@end: scope:[] from @37 + +SYMBOL TABLE SSA +(label) @36 +(label) @37 +(label) @4 +(label) @9 +(label) @begin +(label) @end +(const byte) BLACK = (number) 0 +(const byte*) BORDERCOL = (byte*)(number) $d020 +(const byte*) CIA1_PORT_A = (byte*)(number) $dc00 +(const byte*) CIA1_PORT_B = (byte*)(number) $dc01 +(const signed byte*) COS = (const signed byte*) SIN+(number) $40 +(const byte*) D011 = (byte*)(number) $d011 +(const byte) GREEN = (number) 5 +(const byte) KEY_SPACE = (number) $3c +(const byte) NUM_BOBS = (number) $10 +(const byte) PLEX_COUNT = (number) $20 +(const byte*) PLEX_FREE_YPOS = { fill( 8, 0) } +(const byte*) PLEX_PTR = { fill( PLEX_COUNT, 0) } +(byte*) PLEX_SCREEN_PTR +(byte*) PLEX_SCREEN_PTR#0 +(byte*) PLEX_SCREEN_PTR#1 +(byte*) PLEX_SCREEN_PTR#10 +(byte*) PLEX_SCREEN_PTR#11 +(byte*) PLEX_SCREEN_PTR#12 +(byte*) PLEX_SCREEN_PTR#13 +(byte*) PLEX_SCREEN_PTR#14 +(byte*) PLEX_SCREEN_PTR#15 +(byte*) PLEX_SCREEN_PTR#16 +(byte*) PLEX_SCREEN_PTR#17 +(byte*) PLEX_SCREEN_PTR#18 +(byte*) PLEX_SCREEN_PTR#19 +(byte*) PLEX_SCREEN_PTR#2 +(byte*) PLEX_SCREEN_PTR#20 +(byte*) PLEX_SCREEN_PTR#21 +(byte*) PLEX_SCREEN_PTR#22 +(byte*) PLEX_SCREEN_PTR#23 +(byte*) PLEX_SCREEN_PTR#24 +(byte*) PLEX_SCREEN_PTR#25 +(byte*) PLEX_SCREEN_PTR#26 +(byte*) PLEX_SCREEN_PTR#27 +(byte*) PLEX_SCREEN_PTR#28 +(byte*) PLEX_SCREEN_PTR#29 +(byte*) PLEX_SCREEN_PTR#3 +(byte*) PLEX_SCREEN_PTR#30 +(byte*) PLEX_SCREEN_PTR#31 +(byte*) PLEX_SCREEN_PTR#32 +(byte*) PLEX_SCREEN_PTR#33 +(byte*) PLEX_SCREEN_PTR#34 +(byte*) PLEX_SCREEN_PTR#35 +(byte*) PLEX_SCREEN_PTR#36 +(byte*) PLEX_SCREEN_PTR#37 +(byte*) PLEX_SCREEN_PTR#38 +(byte*) PLEX_SCREEN_PTR#39 +(byte*) PLEX_SCREEN_PTR#4 +(byte*) PLEX_SCREEN_PTR#40 +(byte*) PLEX_SCREEN_PTR#41 +(byte*) PLEX_SCREEN_PTR#42 +(byte*) PLEX_SCREEN_PTR#43 +(byte*) PLEX_SCREEN_PTR#44 +(byte*) PLEX_SCREEN_PTR#45 +(byte*) PLEX_SCREEN_PTR#46 +(byte*) PLEX_SCREEN_PTR#47 +(byte*) PLEX_SCREEN_PTR#48 +(byte*) PLEX_SCREEN_PTR#49 +(byte*) PLEX_SCREEN_PTR#5 +(byte*) PLEX_SCREEN_PTR#50 +(byte*) PLEX_SCREEN_PTR#6 +(byte*) PLEX_SCREEN_PTR#7 +(byte*) PLEX_SCREEN_PTR#8 +(byte*) PLEX_SCREEN_PTR#9 +(const byte*) PLEX_SORTED_IDX = { fill( PLEX_COUNT, 0) } +(const word*) PLEX_XPOS = { fill( PLEX_COUNT, 0) } +(const byte*) PLEX_YPOS = { fill( PLEX_COUNT, 0) } +(const byte*) RASTER = (byte*)(number) $d012 +(const byte*) SCREEN = (byte*)(number) $400 +(const signed byte*) SIN = kickasm {{ .for(var i=0;i<$140;i++) + .byte >round($7fff*sin(i*2*PI/256)) + }} +(const byte) SIZEOF_WORD = (byte) 2 +(const byte*) SPRITE = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) + .for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + }} +(const byte*) SPRITES_COLS = (byte*)(number) $d027 +(const byte*) SPRITES_ENABLE = (byte*)(number) $d015 +(const byte*) SPRITES_XMSB = (byte*)(number) $d010 +(const byte*) SPRITES_XPOS = (byte*)(number) $d000 +(const byte*) SPRITES_YPOS = (byte*)(number) $d001 +(const byte) VIC_DEN = (number) $10 +(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RST8 = (number) $80 +(void()) exit() +(byte~) exit::$0 +(bool~) exit::$1 +(label) exit::@1 +(label) exit::@7 +(label) exit::@return +(void()) init() +(number~) init::$3 +(number~) init::$4 +(number~) init::$5 +(number~) init::$6 +(bool~) init::$7 +(bool~) init::$8 +(byte~) init::$9 +(label) init::@1 +(label) init::@2 +(label) init::@3 +(label) init::@4 +(label) init::@5 +(label) init::@6 +(label) init::@7 +(label) init::@return +(byte) init::i +(byte) init::i#0 +(byte) init::i#1 +(byte) init::i#2 +(byte) init::i1 +(byte) init::i1#0 +(byte) init::i1#1 +(byte) init::i1#2 +(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::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::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()) loop() +(bool~) loop::$0 +(signed word~) loop::$1 +(byte~) loop::$11 +(bool~) loop::$12 +(byte~) loop::$13 +(bool~) loop::$14 +(bool~) loop::$17 +(byte~) loop::$18 +(bool~) loop::$19 +(number~) loop::$2 +(byte~) loop::$20 +(bool~) loop::$21 +(number~) loop::$3 +(byte~) loop::$4 +(signed word~) loop::$5 +(number~) loop::$6 +(number~) loop::$7 +(byte~) loop::$8 +(bool~) loop::$9 +(label) loop::@1 +(label) loop::@10 +(label) loop::@14 +(label) loop::@15 +(label) loop::@17 +(label) loop::@21 +(label) loop::@29 +(label) loop::@30 +(label) loop::@31 +(label) loop::@32 +(label) loop::@33 +(label) loop::@34 +(label) loop::@4 +(label) loop::@5 +(label) loop::@6 +(label) loop::@7 +(label) loop::@8 +(label) loop::@return +(byte) loop::a +(byte) loop::a#0 +(byte) loop::a#1 +(byte) loop::a#2 +(byte) loop::a#3 +(byte) loop::a#4 +(byte) loop::angle +(byte) loop::angle#0 +(byte) loop::angle#1 +(byte) loop::angle#10 +(byte) loop::angle#11 +(byte) loop::angle#12 +(byte) loop::angle#13 +(byte) loop::angle#14 +(byte) loop::angle#15 +(byte) loop::angle#16 +(byte) loop::angle#17 +(byte) loop::angle#18 +(byte) loop::angle#19 +(byte) loop::angle#2 +(byte) loop::angle#20 +(byte) loop::angle#3 +(byte) loop::angle#4 +(byte) loop::angle#5 +(byte) loop::angle#6 +(byte) loop::angle#7 +(byte) loop::angle#8 +(byte) loop::angle#9 +(byte) loop::i +(byte) loop::i#0 +(byte) loop::i#1 +(byte) loop::i#2 +(byte) loop::i#3 +(byte) loop::i#4 +(byte) loop::i1 +(byte) loop::i1#0 +(byte) loop::i1#1 +(byte) loop::i1#2 +(byte) loop::i1#3 +(byte) loop::i1#4 +(byte) loop::i1#5 +(byte) loop::i1#6 +(byte) loop::i1#7 +(byte) loop::i1#8 +(label) loop::plexFreeNextYpos1 +(label) loop::plexFreeNextYpos1_@return +(byte) loop::plexFreeNextYpos1_return +(byte) loop::plexFreeNextYpos1_return#0 +(byte) loop::plexFreeNextYpos1_return#1 +(byte) loop::plexFreeNextYpos1_return#2 +(byte) loop::plexFreeNextYpos1_return#3 +(signed byte) loop::r +(signed byte) loop::r#0 +(signed byte) loop::r#1 +(signed byte) loop::r#2 +(signed byte) loop::r#3 +(signed byte) loop::r#4 +(byte) loop::rasterY +(byte) loop::rasterY#0 +(byte) loop::rasterY#1 +(signed word) loop::x +(signed word) loop::x#0 +(signed word) loop::y +(signed word) loop::y#0 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@return +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +(bool~) memset::$0 +(bool~) memset::$1 +(byte*~) memset::$2 +(byte*~) memset::$3 +(bool~) memset::$4 +(label) memset::@1 +(label) memset::@2 +(label) memset::@4 +(label) memset::@5 +(label) memset::@return +(byte) memset::c +(byte) memset::c#0 +(byte) memset::c#1 +(byte) memset::c#2 +(byte) memset::c#3 +(byte) memset::c#4 +(byte*) memset::dst +(byte*) memset::dst#0 +(byte*) memset::dst#1 +(byte*) memset::dst#2 +(byte*) memset::dst#3 +(byte*) memset::end +(byte*) memset::end#0 +(byte*) memset::end#1 +(byte*) memset::end#2 +(word) memset::num +(word) memset::num#0 +(word) memset::num#1 +(word) memset::num#2 +(void*) memset::return +(void*) memset::return#0 +(void*) memset::return#1 +(void*) memset::return#2 +(void*) memset::return#3 +(void*) memset::str +(void*) memset::str#0 +(void*) memset::str#1 +(void*) memset::str#2 +(void*) memset::str#3 +(void*) memset::str#4 +(void*) memset::str#5 +(signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) +(signed word~) mulf8s::$1 +(label) mulf8s::@2 +(label) mulf8s::@3 +(label) mulf8s::@4 +(label) mulf8s::@return +(signed byte) mulf8s::a +(signed byte) mulf8s::a#0 +(signed byte) mulf8s::a#1 +(signed byte) mulf8s::a#2 +(signed byte) mulf8s::b +(signed byte) mulf8s::b#0 +(signed byte) mulf8s::b#1 +(signed byte) mulf8s::b#2 +(signed byte) mulf8s::b#3 +(signed byte) mulf8s::b#4 +(signed byte) mulf8s::b#5 +(label) mulf8s::mulf8s_prepare1 +(byte~) mulf8s::mulf8s_prepare1_$0 +(signed byte) mulf8s::mulf8s_prepare1_a +(signed byte) mulf8s::mulf8s_prepare1_a#0 +(signed byte) mulf8s::mulf8s_prepare1_a#1 +(signed word) mulf8s::return +(signed word) mulf8s::return#0 +(signed word) mulf8s::return#1 +(signed word) mulf8s::return#2 +(signed word) mulf8s::return#3 +(signed word) mulf8s::return#4 +(signed word) mulf8s::return#5 +(signed word) mulf8s::return#6 +(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) +(byte~) mulf8s_prepared::$0 +(word~) mulf8s_prepared::$1 +(byte~) mulf8s_prepared::$10 +(byte~) mulf8s_prepared::$12 +(byte~) mulf8s_prepared::$13 +(byte~) mulf8s_prepared::$14 +(byte~) mulf8s_prepared::$15 +(byte~) mulf8s_prepared::$16 +(bool~) mulf8s_prepared::$2 +(bool~) mulf8s_prepared::$3 +(bool~) mulf8s_prepared::$4 +(bool~) mulf8s_prepared::$5 +(signed word~) mulf8s_prepared::$6 +(byte~) mulf8s_prepared::$8 +(byte~) mulf8s_prepared::$9 +(label) mulf8s_prepared::@1 +(label) mulf8s_prepared::@2 +(label) mulf8s_prepared::@3 +(label) mulf8s_prepared::@4 +(label) mulf8s_prepared::@6 +(label) mulf8s_prepared::@return +(signed byte) mulf8s_prepared::b +(signed byte) mulf8s_prepared::b#0 +(signed byte) mulf8s_prepared::b#1 +(signed byte) mulf8s_prepared::b#2 +(signed byte) mulf8s_prepared::b#3 +(signed byte) mulf8s_prepared::b#4 +(word) mulf8s_prepared::m +(word) mulf8s_prepared::m#0 +(word) mulf8s_prepared::m#1 +(word) mulf8s_prepared::m#2 +(word) mulf8s_prepared::m#3 +(word) mulf8s_prepared::m#4 +(word) mulf8s_prepared::m#5 +(word) mulf8s_prepared::m#6 +(const signed byte*) mulf8s_prepared::memA = (signed byte*)(number) $fd +(signed word) mulf8s_prepared::return +(signed word) mulf8s_prepared::return#0 +(signed word) mulf8s_prepared::return#1 +(signed word) mulf8s_prepared::return#2 +(signed word) mulf8s_prepared::return#3 +(signed word) mulf8s_prepared::return#4 +(void()) mulf8u_prepare((byte) mulf8u_prepare::a) +(label) mulf8u_prepare::@return +(byte) mulf8u_prepare::a +(byte) mulf8u_prepare::a#0 +(byte) mulf8u_prepare::a#1 +(const byte*) mulf8u_prepare::memA = (byte*)(number) $fd +(word()) mulf8u_prepared((byte) mulf8u_prepared::b) +(label) mulf8u_prepared::@return +(byte) mulf8u_prepared::b +(byte) mulf8u_prepared::b#0 +(byte) mulf8u_prepared::b#1 +(const byte*) mulf8u_prepared::memB = (byte*)(number) $ff +(const byte*) mulf8u_prepared::resL = (byte*)(number) $fe +(word) mulf8u_prepared::return +(word) mulf8u_prepared::return#0 +(word) mulf8u_prepared::return#1 +(word) mulf8u_prepared::return#2 +(word) mulf8u_prepared::return#3 +(word) mulf8u_prepared::return#4 +(void()) mulf_init() +(bool~) mulf_init::$0 +(number~) mulf_init::$1 +(bool~) mulf_init::$10 +(bool~) mulf_init::$2 +(bool~) mulf_init::$3 +(byte~) mulf_init::$4 +(byte~) mulf_init::$5 +(word~) mulf_init::$6 +(bool~) mulf_init::$7 +(byte~) mulf_init::$8 +(bool~) mulf_init::$9 +(label) mulf_init::@1 +(label) mulf_init::@10 +(label) mulf_init::@11 +(label) mulf_init::@12 +(label) mulf_init::@15 +(label) mulf_init::@2 +(label) mulf_init::@3 +(label) mulf_init::@4 +(label) mulf_init::@7 +(label) mulf_init::@9 +(label) mulf_init::@return +(byte) mulf_init::c +(byte) mulf_init::c#0 +(byte) mulf_init::c#1 +(byte) mulf_init::c#2 +(byte) mulf_init::c#3 +(byte) mulf_init::c#4 +(byte) mulf_init::c#5 +(byte) mulf_init::dir +(byte) mulf_init::dir#0 +(byte) mulf_init::dir#1 +(byte) mulf_init::dir#2 +(byte) mulf_init::dir#3 +(byte) mulf_init::dir#4 +(word) mulf_init::sqr +(word) mulf_init::sqr#0 +(word) mulf_init::sqr#1 +(word) mulf_init::sqr#2 +(word) mulf_init::sqr#3 +(word) mulf_init::sqr#4 +(word) mulf_init::sqr#5 +(word) mulf_init::sqr#6 +(byte*) mulf_init::sqr1_hi +(byte*) mulf_init::sqr1_hi#0 +(byte*) mulf_init::sqr1_hi#1 +(byte*) mulf_init::sqr1_hi#2 +(byte*) mulf_init::sqr1_hi#3 +(byte*) mulf_init::sqr1_hi#4 +(byte*) mulf_init::sqr1_hi#5 +(byte*) mulf_init::sqr1_lo +(byte*) mulf_init::sqr1_lo#0 +(byte*) mulf_init::sqr1_lo#1 +(byte*) mulf_init::sqr1_lo#2 +(byte*) mulf_init::sqr1_lo#3 +(byte*) mulf_init::sqr1_lo#4 +(byte*) mulf_init::sqr1_lo#5 +(byte*) mulf_init::sqr2_hi +(byte*) mulf_init::sqr2_hi#0 +(byte*) mulf_init::sqr2_hi#1 +(byte*) mulf_init::sqr2_hi#2 +(byte*) mulf_init::sqr2_hi#3 +(byte*) mulf_init::sqr2_hi#4 +(byte*) mulf_init::sqr2_hi#5 +(byte*) mulf_init::sqr2_lo +(byte*) mulf_init::sqr2_lo#0 +(byte*) mulf_init::sqr2_lo#1 +(byte*) mulf_init::sqr2_lo#2 +(byte*) mulf_init::sqr2_lo#3 +(byte*) mulf_init::sqr2_lo#4 +(byte*) mulf_init::sqr2_lo#5 +(byte) mulf_init::x_2 +(byte) mulf_init::x_2#0 +(byte) mulf_init::x_2#1 +(byte) mulf_init::x_2#2 +(byte) mulf_init::x_2#3 +(byte) mulf_init::x_2#4 +(byte) mulf_init::x_2#5 +(byte) mulf_init::x_255 +(byte) mulf_init::x_255#0 +(byte) mulf_init::x_255#1 +(byte) mulf_init::x_255#2 +(byte) mulf_init::x_255#3 +(byte) mulf_init::x_255#4 +(byte) mulf_init::x_255#5 +(const byte*) mulf_sqr1_hi = { fill( $200, 0) } +(const byte*) mulf_sqr1_lo = { fill( $200, 0) } +(const byte*) mulf_sqr2_hi = { fill( $200, 0) } +(const byte*) mulf_sqr2_lo = { fill( $200, 0) } +(void()) plexInit((byte*) plexInit::screen) +(bool~) plexInit::$1 +(label) plexInit::@1 +(label) plexInit::@3 +(label) plexInit::@return +(byte) plexInit::i +(byte) plexInit::i#0 +(byte) plexInit::i#1 +(byte) plexInit::i#2 +(label) plexInit::plexSetScreen1 +(byte*~) plexInit::plexSetScreen1_$0 +(byte*) plexInit::plexSetScreen1_screen +(byte*) plexInit::plexSetScreen1_screen#0 +(byte*) plexInit::plexSetScreen1_screen#1 +(byte*) plexInit::screen +(byte*) plexInit::screen#0 +(byte*) plexInit::screen#1 +(void()) plexShowSprite() +(number~) plexShowSprite::$0 +(byte~) plexShowSprite::$10 +(byte~) plexShowSprite::$11 +(byte~) plexShowSprite::$2 +(byte~) plexShowSprite::$3 +(bool~) plexShowSprite::$4 +(number~) plexShowSprite::$5 +(number~) plexShowSprite::$6 +(bool~) plexShowSprite::$7 +(bool~) plexShowSprite::$8 +(number~) plexShowSprite::$9 +(label) plexShowSprite::@1 +(label) plexShowSprite::@2 +(label) plexShowSprite::@4 +(label) plexShowSprite::@6 +(label) plexShowSprite::@7 +(label) plexShowSprite::@return +(label) plexShowSprite::plexFreeAdd1 +(number~) plexShowSprite::plexFreeAdd1_$0 +(number~) plexShowSprite::plexFreeAdd1_$1 +(number~) plexShowSprite::plexFreeAdd1_$2 +(byte) plexShowSprite::plexFreeAdd1_ypos +(byte) plexShowSprite::plexFreeAdd1_ypos#0 +(byte) plexShowSprite::plexFreeAdd1_ypos#1 +(byte) plexShowSprite::plex_sprite_idx2 +(byte) plexShowSprite::plex_sprite_idx2#0 +(byte) plexShowSprite::plex_sprite_idx2#1 +(byte) plexShowSprite::plex_sprite_idx2#2 +(byte) plexShowSprite::xpos_idx +(byte) plexShowSprite::xpos_idx#0 +(byte) plexShowSprite::ypos +(byte) plexShowSprite::ypos#0 +(void()) plexSort() +(number~) plexSort::$1 +(bool~) plexSort::$2 +(bool~) plexSort::$3 +(number~) plexSort::$4 +(bool~) plexSort::$5 +(bool~) plexSort::$6 +(bool~) plexSort::$7 +(bool~) plexSort::$8 +(label) plexSort::@1 +(label) plexSort::@2 +(label) plexSort::@3 +(label) plexSort::@4 +(label) plexSort::@5 +(label) plexSort::@6 +(label) plexSort::@return +(byte) plexSort::m +(byte) plexSort::m#0 +(byte) plexSort::m#1 +(byte) plexSort::m#2 +(byte) plexSort::m#3 +(byte) plexSort::m#4 +(byte) plexSort::m#5 +(byte) plexSort::m#6 +(byte) plexSort::nxt_idx +(byte) plexSort::nxt_idx#0 +(byte) plexSort::nxt_idx#1 +(byte) plexSort::nxt_idx#2 +(byte) plexSort::nxt_idx#3 +(byte) plexSort::nxt_y +(byte) plexSort::nxt_y#0 +(byte) plexSort::nxt_y#1 +(byte) plexSort::nxt_y#2 +(label) plexSort::plexFreePrepare1 +(bool~) plexSort::plexFreePrepare1_$0 +(label) plexSort::plexFreePrepare1_@1 +(label) plexSort::plexFreePrepare1_@2 +(byte) plexSort::plexFreePrepare1_s +(byte) plexSort::plexFreePrepare1_s#0 +(byte) plexSort::plexFreePrepare1_s#1 +(byte) plexSort::plexFreePrepare1_s#2 +(byte) plexSort::s +(byte) plexSort::s#0 +(byte) plexSort::s#1 +(byte) plexSort::s#2 +(byte) plexSort::s#3 +(byte) plexSort::s#4 +(byte) plex_free_next +(byte) plex_free_next#0 +(byte) plex_free_next#1 +(byte) plex_free_next#10 +(byte) plex_free_next#11 +(byte) plex_free_next#12 +(byte) plex_free_next#13 +(byte) plex_free_next#14 +(byte) plex_free_next#15 +(byte) plex_free_next#16 +(byte) plex_free_next#17 +(byte) plex_free_next#18 +(byte) plex_free_next#19 +(byte) plex_free_next#2 +(byte) plex_free_next#20 +(byte) plex_free_next#21 +(byte) plex_free_next#22 +(byte) plex_free_next#23 +(byte) plex_free_next#24 +(byte) plex_free_next#25 +(byte) plex_free_next#26 +(byte) plex_free_next#27 +(byte) plex_free_next#28 +(byte) plex_free_next#29 +(byte) plex_free_next#3 +(byte) plex_free_next#30 +(byte) plex_free_next#31 +(byte) plex_free_next#32 +(byte) plex_free_next#33 +(byte) plex_free_next#34 +(byte) plex_free_next#35 +(byte) plex_free_next#36 +(byte) plex_free_next#37 +(byte) plex_free_next#38 +(byte) plex_free_next#39 +(byte) plex_free_next#4 +(byte) plex_free_next#40 +(byte) plex_free_next#41 +(byte) plex_free_next#42 +(byte) plex_free_next#43 +(byte) plex_free_next#44 +(byte) plex_free_next#45 +(byte) plex_free_next#46 +(byte) plex_free_next#47 +(byte) plex_free_next#5 +(byte) plex_free_next#6 +(byte) plex_free_next#7 +(byte) plex_free_next#8 +(byte) plex_free_next#9 +(byte) plex_show_idx +(byte) plex_show_idx#0 +(byte) plex_show_idx#1 +(byte) plex_show_idx#10 +(byte) plex_show_idx#11 +(byte) plex_show_idx#12 +(byte) plex_show_idx#13 +(byte) plex_show_idx#14 +(byte) plex_show_idx#15 +(byte) plex_show_idx#16 +(byte) plex_show_idx#17 +(byte) plex_show_idx#18 +(byte) plex_show_idx#19 +(byte) plex_show_idx#2 +(byte) plex_show_idx#20 +(byte) plex_show_idx#21 +(byte) plex_show_idx#22 +(byte) plex_show_idx#23 +(byte) plex_show_idx#24 +(byte) plex_show_idx#25 +(byte) plex_show_idx#26 +(byte) plex_show_idx#27 +(byte) plex_show_idx#28 +(byte) plex_show_idx#29 +(byte) plex_show_idx#3 +(byte) plex_show_idx#30 +(byte) plex_show_idx#31 +(byte) plex_show_idx#32 +(byte) plex_show_idx#33 +(byte) plex_show_idx#34 +(byte) plex_show_idx#35 +(byte) plex_show_idx#36 +(byte) plex_show_idx#37 +(byte) plex_show_idx#38 +(byte) plex_show_idx#39 +(byte) plex_show_idx#4 +(byte) plex_show_idx#40 +(byte) plex_show_idx#41 +(byte) plex_show_idx#42 +(byte) plex_show_idx#43 +(byte) plex_show_idx#44 +(byte) plex_show_idx#45 +(byte) plex_show_idx#46 +(byte) plex_show_idx#47 +(byte) plex_show_idx#48 +(byte) plex_show_idx#49 +(byte) plex_show_idx#5 +(byte) plex_show_idx#50 +(byte) plex_show_idx#51 +(byte) plex_show_idx#6 +(byte) plex_show_idx#7 +(byte) plex_show_idx#8 +(byte) plex_show_idx#9 +(byte) plex_sprite_idx +(byte) plex_sprite_idx#0 +(byte) plex_sprite_idx#1 +(byte) plex_sprite_idx#10 +(byte) plex_sprite_idx#11 +(byte) plex_sprite_idx#12 +(byte) plex_sprite_idx#13 +(byte) plex_sprite_idx#14 +(byte) plex_sprite_idx#15 +(byte) plex_sprite_idx#16 +(byte) plex_sprite_idx#17 +(byte) plex_sprite_idx#18 +(byte) plex_sprite_idx#19 +(byte) plex_sprite_idx#2 +(byte) plex_sprite_idx#20 +(byte) plex_sprite_idx#21 +(byte) plex_sprite_idx#22 +(byte) plex_sprite_idx#23 +(byte) plex_sprite_idx#24 +(byte) plex_sprite_idx#25 +(byte) plex_sprite_idx#26 +(byte) plex_sprite_idx#27 +(byte) plex_sprite_idx#28 +(byte) plex_sprite_idx#29 +(byte) plex_sprite_idx#3 +(byte) plex_sprite_idx#30 +(byte) plex_sprite_idx#31 +(byte) plex_sprite_idx#32 +(byte) plex_sprite_idx#33 +(byte) plex_sprite_idx#34 +(byte) plex_sprite_idx#35 +(byte) plex_sprite_idx#36 +(byte) plex_sprite_idx#37 +(byte) plex_sprite_idx#38 +(byte) plex_sprite_idx#39 +(byte) plex_sprite_idx#4 +(byte) plex_sprite_idx#40 +(byte) plex_sprite_idx#41 +(byte) plex_sprite_idx#42 +(byte) plex_sprite_idx#43 +(byte) plex_sprite_idx#44 +(byte) plex_sprite_idx#45 +(byte) plex_sprite_idx#46 +(byte) plex_sprite_idx#47 +(byte) plex_sprite_idx#48 +(byte) plex_sprite_idx#49 +(byte) plex_sprite_idx#5 +(byte) plex_sprite_idx#50 +(byte) plex_sprite_idx#51 +(byte) plex_sprite_idx#6 +(byte) plex_sprite_idx#7 +(byte) plex_sprite_idx#8 +(byte) plex_sprite_idx#9 +(byte) plex_sprite_msb +(byte) plex_sprite_msb#0 +(byte) plex_sprite_msb#1 +(byte) plex_sprite_msb#10 +(byte) plex_sprite_msb#11 +(byte) plex_sprite_msb#12 +(byte) plex_sprite_msb#13 +(byte) plex_sprite_msb#14 +(byte) plex_sprite_msb#15 +(byte) plex_sprite_msb#16 +(byte) plex_sprite_msb#17 +(byte) plex_sprite_msb#18 +(byte) plex_sprite_msb#19 +(byte) plex_sprite_msb#2 +(byte) plex_sprite_msb#20 +(byte) plex_sprite_msb#21 +(byte) plex_sprite_msb#22 +(byte) plex_sprite_msb#23 +(byte) plex_sprite_msb#24 +(byte) plex_sprite_msb#25 +(byte) plex_sprite_msb#26 +(byte) plex_sprite_msb#27 +(byte) plex_sprite_msb#28 +(byte) plex_sprite_msb#29 +(byte) plex_sprite_msb#3 +(byte) plex_sprite_msb#30 +(byte) plex_sprite_msb#31 +(byte) plex_sprite_msb#32 +(byte) plex_sprite_msb#33 +(byte) plex_sprite_msb#34 +(byte) plex_sprite_msb#35 +(byte) plex_sprite_msb#36 +(byte) plex_sprite_msb#37 +(byte) plex_sprite_msb#38 +(byte) plex_sprite_msb#39 +(byte) plex_sprite_msb#4 +(byte) plex_sprite_msb#40 +(byte) plex_sprite_msb#41 +(byte) plex_sprite_msb#42 +(byte) plex_sprite_msb#43 +(byte) plex_sprite_msb#44 +(byte) plex_sprite_msb#45 +(byte) plex_sprite_msb#46 +(byte) plex_sprite_msb#47 +(byte) plex_sprite_msb#48 +(byte) plex_sprite_msb#49 +(byte) plex_sprite_msb#5 +(byte) plex_sprite_msb#50 +(byte) plex_sprite_msb#51 +(byte) plex_sprite_msb#6 +(byte) plex_sprite_msb#7 +(byte) plex_sprite_msb#8 +(byte) plex_sprite_msb#9 + +Fixing inline constructor with mulf8u_prepared::$0 ← (byte)*(mulf8u_prepared::memB) w= (byte)*(mulf8u_prepared::resL) +Successful SSA optimization Pass2FixInlineConstructors +Adding number conversion cast (unumber) $40 in +Adding number conversion cast (unumber) 0 in (byte) plex_show_idx#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (byte) plex_sprite_idx#0 ← (number) 0 +Adding number conversion cast (unumber) 1 in (byte) plex_sprite_msb#0 ← (number) 1 +Adding number conversion cast (unumber) $3f8 in (byte*~) plexInit::plexSetScreen1_$0 ← (byte*) plexInit::plexSetScreen1_screen#1 + (number) $3f8 +Adding number conversion cast (unumber) 1 in (byte) plexInit::i#1 ← (byte) plexInit::i#2 + rangenext(0,PLEX_COUNT-1) +Adding number conversion cast (unumber) 1 in (number~) plexSort::$1 ← (byte) plexSort::m#2 + (number) 1 +Adding number conversion cast (unumber) plexSort::$1 in (number~) plexSort::$1 ← (byte) plexSort::m#2 + (unumber)(number) 1 +Adding number conversion cast (unumber) 2 in (byte) plexSort::m#1 ← (byte) plexSort::m#3 + rangenext(0,PLEX_COUNT-2) +Adding number conversion cast (unumber) 1 in (number~) plexSort::$4 ← (byte) plexSort::s#3 + (number) 1 +Adding number conversion cast (unumber) plexSort::$4 in (number~) plexSort::$4 ← (byte) plexSort::s#3 + (unumber)(number) 1 +Adding number conversion cast (unumber) $ff in (bool~) plexSort::$5 ← (byte) plexSort::s#1 != (number) $ff +Adding number conversion cast (unumber) 0 in (byte) plex_show_idx#1 ← (number) 0 +Adding number conversion cast (unumber) 0 in (byte) plex_sprite_idx#1 ← (number) 0 +Adding number conversion cast (unumber) 1 in (byte) plex_sprite_msb#1 ← (number) 1 +Adding number conversion cast (unumber) 0 in *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (number) 0 +Adding number conversion cast (unumber) 0 in (byte) plex_free_next#0 ← (number) 0 +Adding number conversion cast (unumber) 2 in (number~) plexShowSprite::$0 ← (byte) plex_sprite_idx#12 * (number) 2 +Adding number conversion cast (unumber) plexShowSprite::$0 in (number~) plexShowSprite::$0 ← (byte) plex_sprite_idx#12 * (unumber)(number) 2 +Adding number conversion cast (unumber) $15 in (number~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#1 + (number) $15 +Adding number conversion cast (unumber) plexShowSprite::plexFreeAdd1_$0 in (number~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#1 + (unumber)(number) $15 +Adding number conversion cast (unumber) 1 in (number~) plexShowSprite::plexFreeAdd1_$1 ← (byte) plex_free_next#12 + (number) 1 +Adding number conversion cast (unumber) plexShowSprite::plexFreeAdd1_$1 in (number~) plexShowSprite::plexFreeAdd1_$1 ← (byte) plex_free_next#12 + (unumber)(number) 1 +Adding number conversion cast (unumber) 7 in (number~) plexShowSprite::plexFreeAdd1_$2 ← (unumber~) plexShowSprite::plexFreeAdd1_$1 & (number) 7 +Adding number conversion cast (unumber) plexShowSprite::plexFreeAdd1_$2 in (number~) plexShowSprite::plexFreeAdd1_$2 ← (unumber~) plexShowSprite::plexFreeAdd1_$1 & (unumber)(number) 7 +Adding number conversion cast (unumber) 0 in (bool~) plexShowSprite::$4 ← (byte~) plexShowSprite::$3 != (number) 0 +Adding number conversion cast (unumber) $ff in (number~) plexShowSprite::$9 ← (number) $ff ^ (byte) plex_sprite_msb#14 +Adding number conversion cast (unumber) plexShowSprite::$9 in (number~) plexShowSprite::$9 ← (unumber)(number) $ff ^ (byte) plex_sprite_msb#14 +Adding number conversion cast (unumber) 1 in (number~) plexShowSprite::$5 ← (byte) plex_sprite_idx#14 + (number) 1 +Adding number conversion cast (unumber) plexShowSprite::$5 in (number~) plexShowSprite::$5 ← (byte) plex_sprite_idx#14 + (unumber)(number) 1 +Adding number conversion cast (unumber) 7 in (number~) plexShowSprite::$6 ← (unumber~) plexShowSprite::$5 & (number) 7 +Adding number conversion cast (unumber) plexShowSprite::$6 in (number~) plexShowSprite::$6 ← (unumber~) plexShowSprite::$5 & (unumber)(number) 7 +Adding number conversion cast (unumber) 2 in (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#15 * (number) 2 +Adding number conversion cast (unumber) 0 in (bool~) plexShowSprite::$7 ← (byte) plex_sprite_msb#3 == (number) 0 +Adding number conversion cast (unumber) 1 in (byte) plex_sprite_msb#4 ← (number) 1 +Adding number conversion cast (unumber) 0 in (byte) plex_free_next#4 ← (number) 0 +Adding number conversion cast (unumber) 0 in (word) mulf_init::sqr#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (byte) mulf_init::x_2#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (byte) mulf_init::c#0 ← (number) 0 +Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 +Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 +Adding number conversion cast (unumber) $200 in (bool~) mulf_init::$0 ← (byte*) mulf_init::sqr1_lo#2 != (const byte*) mulf_sqr1_lo+(number) $200 +Adding number conversion cast (unumber) 1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (number) 1 +Adding number conversion cast (unumber) mulf_init::$1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (unumber)(number) 1 +Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$2 ← (unumber~) mulf_init::$1 == (number) 0 +Adding number conversion cast (unumber) $ff in (byte) mulf_init::dir#0 ← (number) $ff +Adding number conversion cast (unumber) $1ff in (bool~) mulf_init::$7 ← (byte*) mulf_init::sqr2_lo#2 != (const byte*) mulf_sqr2_lo+(number) $1ff +Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (number) 0 +Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr2_lo+(number) $1ff) ← *((const byte*) mulf_sqr1_lo+(number) $100) +Adding number conversion cast (unumber) $1ff in *((const byte*) mulf_sqr2_lo+(number) $1ff) ← *((const byte*) mulf_sqr1_lo+(unumber)(number) $100) +Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr2_hi+(number) $1ff) ← *((const byte*) mulf_sqr1_hi+(number) $100) +Adding number conversion cast (unumber) $1ff in *((const byte*) mulf_sqr2_hi+(number) $1ff) ← *((const byte*) mulf_sqr1_hi+(unumber)(number) $100) +Adding number conversion cast (unumber) 1 in (byte) mulf_init::dir#1 ← (number) 1 +Adding number conversion cast (snumber) 0 in (bool~) mulf8s_prepared::$2 ← *((const signed byte*) mulf8s_prepared::memA) < (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) mulf8s_prepared::$4 ← (signed byte) mulf8s_prepared::b#2 < (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 7 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#2 & (number) 7 +Adding number conversion cast (unumber) keyboard_key_pressed::$0 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#2 & (unumber)(number) 7 +Adding number conversion cast (unumber) 3 in (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_key_pressed::key#2 >> (number) 3 +Adding number conversion cast (unumber) VIC_DEN|VIC_RSEL|3 in *((const byte*) D011) ← (const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 +Adding number conversion cast (unumber) 3 in *((const byte*) D011) ← ((unumber)) (const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 +Adding number conversion cast (unumber) $40 in *((const byte*) PLEX_PTR + (byte) init::i#2) ← (byte)(const byte*) SPRITE/(number) $40 +Adding number conversion cast (unumber) 5 in (number~) init::$3 ← (byte) init::i#2 * (number) 5 +Adding number conversion cast (unumber) init::$3 in (number~) init::$3 ← (byte) init::i#2 * (unumber)(number) 5 +Adding number conversion cast (unumber) $18 in (number~) init::$4 ← (number) $18 + (unumber~) init::$3 +Adding number conversion cast (unumber) init::$4 in (number~) init::$4 ← (unumber)(number) $18 + (unumber~) init::$3 +Adding number conversion cast (unumber) 8 in (number~) init::$5 ← (byte) init::i#2 * (number) 8 +Adding number conversion cast (unumber) init::$5 in (number~) init::$5 ← (byte) init::i#2 * (unumber)(number) 8 +Adding number conversion cast (unumber) $32 in (number~) init::$6 ← (number) $32 + (unumber~) init::$5 +Adding number conversion cast (unumber) init::$6 in (number~) init::$6 ← (unumber)(number) $32 + (unumber~) init::$5 +Adding number conversion cast (unumber) 1 in (byte) init::i#1 ← (byte) init::i#2 + rangenext(0,PLEX_COUNT-1) +Adding number conversion cast (unumber) $ff in *((const byte*) SPRITES_ENABLE) ← (number) $ff +Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 +Adding number conversion cast (unumber) 0 in (bool~) exit::$1 ← (number) 0 != (byte~) exit::$0 +Adding number conversion cast (unumber) 0 in (byte) loop::angle#0 ← (number) 0 +Adding number conversion cast (unumber) $d8 in (bool~) loop::$0 ← *((const byte*) RASTER) < (number) $d8 +Adding number conversion cast (unumber) $f in *((const byte*) BORDERCOL) ← (number) $f +Adding number conversion cast (snumber) $1e in (signed byte) loop::r#0 ← (number) $1e +Adding number conversion cast (unumber) 6 in *((const byte*) BORDERCOL) ← (number) 6 +Adding number conversion cast (snumber) 2 in (number~) loop::$2 ← (signed word~) loop::$1 * (number) 2 +Adding number conversion cast (snumber) loop::$2 in (number~) loop::$2 ← (signed word~) loop::$1 * (snumber)(number) 2 +Adding number conversion cast (snumber) $7d*$100 in (number~) loop::$3 ← (snumber~) loop::$2 + (number) $7d*(number) $100 +Adding number conversion cast (snumber) loop::$3 in (number~) loop::$3 ← (snumber~) loop::$2 + (snumber)(number) $7d*(number) $100 +Adding number conversion cast (snumber) 2 in (number~) loop::$6 ← (signed word~) loop::$5 * (number) 2 +Adding number conversion cast (snumber) loop::$6 in (number~) loop::$6 ← (signed word~) loop::$5 * (snumber)(number) 2 +Adding number conversion cast (snumber) $7d*$100 in (number~) loop::$7 ← (snumber~) loop::$6 + (number) $7d*(number) $100 +Adding number conversion cast (snumber) loop::$7 in (number~) loop::$7 ← (snumber~) loop::$6 + (snumber)(number) $7d*(number) $100 +Adding number conversion cast (unumber) $62 in (byte) loop::a#1 ← (byte) loop::a#4 + (number) $62 +Adding number conversion cast (snumber) 3 in (signed byte) loop::r#1 ← (signed byte) loop::r#4 + (number) 3 +Adding number conversion cast (unumber) 1 in (byte) loop::i#1 ← (byte) loop::i#3 + rangenext(0,NUM_BOBS-1) +Adding number conversion cast (unumber) 3 in *((const byte*) BORDERCOL) ← (number) 3 +Adding number conversion cast (unumber) 3 in (byte) loop::angle#1 ← (byte) loop::angle#3 + (number) 3 +Adding number conversion cast (unumber) 0 in (bool~) loop::$12 ← (byte~) loop::$11 != (number) 0 +Adding number conversion cast (unumber) 1 in (byte) loop::i1#1 ← (byte) loop::i1#2 + rangenext(0,PLEX_COUNT-1) +Adding number conversion cast (unumber) 0 in (bool~) loop::$21 ← (number) 0 != (byte~) loop::$18 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast (byte*) PLEX_SCREEN_PTR#0 ← (byte*)(number) $400+(number) $3f8 +Inlining cast (byte) plex_show_idx#0 ← (unumber)(number) 0 +Inlining cast (byte) plex_sprite_idx#0 ← (unumber)(number) 0 +Inlining cast (byte) plex_sprite_msb#0 ← (unumber)(number) 1 +Inlining cast (byte) plex_show_idx#1 ← (unumber)(number) 0 +Inlining cast (byte) plex_sprite_idx#1 ← (unumber)(number) 0 +Inlining cast (byte) plex_sprite_msb#1 ← (unumber)(number) 1 +Inlining cast *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (unumber)(number) 0 +Inlining cast (byte) plex_free_next#0 ← (unumber)(number) 0 +Inlining cast (byte) plex_sprite_msb#4 ← (unumber)(number) 1 +Inlining cast (byte) plex_free_next#4 ← (unumber)(number) 0 +Inlining cast (word) mulf_init::sqr#0 ← (unumber)(number) 0 +Inlining cast (byte) mulf_init::x_2#0 ← (unumber)(number) 0 +Inlining cast (byte) mulf_init::c#0 ← (unumber)(number) 0 +Inlining cast (byte) mulf_init::dir#0 ← (unumber)(number) $ff +Inlining cast (byte) mulf_init::dir#1 ← (unumber)(number) 1 +Inlining cast (byte~) mulf8s_prepared::$0 ← (byte)(signed byte) mulf8s_prepared::b#1 +Inlining cast (byte~) mulf8s_prepared::$9 ← (byte)(signed byte) mulf8s_prepared::b#3 +Inlining cast (signed word~) mulf8s_prepared::$6 ← (signed word)(word) mulf8s_prepared::m#4 +Inlining cast (byte~) mulf8s_prepared::$13 ← (byte)*((const signed byte*) mulf8s_prepared::memA) +Inlining cast (byte~) mulf8s::mulf8s_prepare1_$0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#1 +Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2 +Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 +Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 +Inlining cast *((const byte*) SPRITES_ENABLE) ← (unumber)(number) $ff +Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 +Inlining cast (byte) loop::angle#0 ← (unumber)(number) 0 +Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) $f +Inlining cast (signed byte) loop::r#0 ← (snumber)(number) $1e +Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 6 +Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 3 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (byte*) 53248 +Simplifying constant pointer cast (byte*) 53249 +Simplifying constant pointer cast (byte*) 53264 +Simplifying constant pointer cast (byte*) 53266 +Simplifying constant pointer cast (byte*) 53269 +Simplifying constant pointer cast (byte*) 53280 +Simplifying constant pointer cast (byte*) 53287 +Simplifying constant pointer cast (byte*) 53265 +Simplifying constant pointer cast (byte*) 56320 +Simplifying constant pointer cast (byte*) 56321 +Simplifying constant pointer cast (byte*) 253 +Simplifying constant pointer cast (byte*) 254 +Simplifying constant pointer cast (byte*) 255 +Simplifying constant pointer cast (signed byte*) 253 +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 integer cast $40 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast $3f8 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast 1 +Simplifying constant integer cast $ff +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 2 +Simplifying constant integer cast $15 +Simplifying constant integer cast 1 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast $ff +Simplifying constant integer cast 1 +Simplifying constant integer cast 7 +Simplifying constant integer cast 2 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast $200 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast -1 +Simplifying constant integer cast $ff +Simplifying constant integer cast $1ff +Simplifying constant integer cast 0 +Simplifying constant integer cast $100 +Simplifying constant integer cast $1ff +Simplifying constant integer cast $100 +Simplifying constant integer cast $1ff +Simplifying constant integer cast 1 +Simplifying constant integer cast *((const byte*) mulf8u_prepared::memB) +Simplifying constant integer cast *((const byte*) mulf8u_prepared::resL) +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 3 +Simplifying constant integer cast (const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 +Simplifying constant integer cast 3 +Simplifying constant integer cast $40 +Simplifying constant integer cast 5 +Simplifying constant integer cast $18 +Simplifying constant integer cast 8 +Simplifying constant integer cast $32 +Simplifying constant integer cast 1 +Simplifying constant integer cast $ff +Simplifying constant integer cast $3e8 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $d8 +Simplifying constant integer cast $f +Simplifying constant integer cast $1e +Simplifying constant integer cast 6 +Simplifying constant integer cast 2 +Simplifying constant integer cast 2 +Simplifying constant integer cast $62 +Simplifying constant integer cast 3 +Simplifying constant integer cast 1 +Simplifying constant integer cast 3 +Simplifying constant integer cast 3 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) $40 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (word) $3f8 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) $ff +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) $15 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 7 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $ff +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 7 +Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (word) $200 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $ff +Finalized unsigned number type (word) $1ff +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (word) $100 +Finalized unsigned number type (word) $1ff +Finalized unsigned number type (word) $100 +Finalized unsigned number type (word) $1ff +Finalized unsigned number type (byte) 1 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +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) 5 +Finalized unsigned number type (byte) $18 +Finalized unsigned number type (byte) 8 +Finalized unsigned number type (byte) $32 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) $ff +Finalized unsigned number type (word) $3e8 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $d8 +Finalized unsigned number type (byte) $f +Finalized signed number type (signed byte) $1e +Finalized unsigned number type (byte) 6 +Finalized signed number type (signed byte) 2 +Finalized signed number type (signed byte) 2 +Finalized unsigned number type (byte) $62 +Finalized signed number type (signed byte) 3 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 3 +Finalized unsigned number type (byte) 3 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to byte in (unumber~) plexSort::$1 ← (byte) plexSort::m#2 + (byte) 1 +Inferred type updated to byte in (unumber~) plexSort::$4 ← (byte) plexSort::s#3 + (byte) 1 +Inferred type updated to byte in (unumber~) plexShowSprite::$0 ← (byte) plex_sprite_idx#12 * (byte) 2 +Inferred type updated to byte in (unumber~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#1 + (byte) $15 +Inferred type updated to byte in (unumber~) plexShowSprite::plexFreeAdd1_$1 ← (byte) plex_free_next#12 + (byte) 1 +Inferred type updated to byte in (unumber~) plexShowSprite::plexFreeAdd1_$2 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 +Inferred type updated to byte in (unumber~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb#14 +Inferred type updated to byte in (unumber~) plexShowSprite::$5 ← (byte) plex_sprite_idx#14 + (byte) 1 +Inferred type updated to byte in (unumber~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7 +Inferred type updated to byte in (unumber~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 +Inferred type updated to byte in (unumber~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#2 & (byte) 7 +Inferred type updated to byte in (unumber~) init::$3 ← (byte) init::i#2 * (byte) 5 +Inferred type updated to byte in (unumber~) init::$4 ← (byte) $18 + (byte~) init::$3 +Inferred type updated to byte in (unumber~) init::$5 ← (byte) init::i#2 * (byte) 8 +Inferred type updated to byte in (unumber~) init::$6 ← (byte) $32 + (byte~) init::$5 +Inferred type updated to signed word in (snumber~) loop::$2 ← (signed word~) loop::$1 * (signed byte) 2 +Inferred type updated to signed word in (snumber~) loop::$3 ← (signed word~) loop::$2 + (signed word)(number) $7d*(number) $100 +Inferred type updated to signed word in (snumber~) loop::$6 ← (signed word~) loop::$5 * (signed byte) 2 +Inferred type updated to signed word in (snumber~) loop::$7 ← (signed word~) loop::$6 + (signed word)(number) $7d*(number) $100 +Inversing boolean not [25] (bool~) plexSort::$3 ← (byte) plexSort::nxt_y#0 >= *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2)) from [24] (bool~) plexSort::$2 ← (byte) plexSort::nxt_y#0 < *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2)) +Inversing boolean not [96] (bool~) plexShowSprite::$8 ← (byte) plex_sprite_msb#3 != (byte) 0 from [95] (bool~) plexShowSprite::$7 ← (byte) plex_sprite_msb#3 == (byte) 0 +Inversing boolean not [120] (bool~) mulf_init::$3 ← (byte~) mulf_init::$1 != (byte) 0 from [119] (bool~) mulf_init::$2 ← (byte~) mulf_init::$1 == (byte) 0 +Inversing boolean not [148] (bool~) mulf_init::$10 ← (byte) mulf_init::x_255#1 != (byte) 0 from [147] (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (byte) 0 +Inversing boolean not [178] (bool~) mulf8s_prepared::$3 ← *((const signed byte*) mulf8s_prepared::memA) >= (signed byte) 0 from [177] (bool~) mulf8s_prepared::$2 ← *((const signed byte*) mulf8s_prepared::memA) < (signed byte) 0 +Inversing boolean not [182] (bool~) mulf8s_prepared::$5 ← (signed byte) mulf8s_prepared::b#2 >= (signed byte) 0 from [181] (bool~) mulf8s_prepared::$4 ← (signed byte) mulf8s_prepared::b#2 < (signed byte) 0 +Inversing boolean not [221] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [220] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0 +Inversing boolean not [419] (bool~) loop::$19 ← (byte) 0 == (byte~) loop::$18 from [418] (bool~) loop::$21 ← (byte) 0 != (byte~) loop::$18 +Successful SSA optimization Pass2UnaryNotSimplification +Alias (byte*) plexInit::plexSetScreen1_screen#0 = (byte*) plexInit::screen#1 (byte*) plexInit::plexSetScreen1_screen#1 +Alias (byte*) PLEX_SCREEN_PTR#1 = (byte*~) plexInit::plexSetScreen1_$0 (byte*) PLEX_SCREEN_PTR#22 +Alias (byte*) PLEX_SCREEN_PTR#15 = (byte*) PLEX_SCREEN_PTR#8 (byte*) PLEX_SCREEN_PTR#2 +Alias (byte) plexSort::m#2 = (byte) plexSort::m#4 (byte) plexSort::s#0 +Alias (byte) plexSort::nxt_y#0 = (byte) plexSort::nxt_y#2 +Alias (byte) plexSort::nxt_idx#0 = (byte) plexSort::nxt_idx#3 +Alias (byte) plexSort::s#1 = (byte) plexSort::s#4 +Alias (byte) plexSort::nxt_idx#1 = (byte) plexSort::nxt_idx#2 +Alias (byte) plexSort::m#5 = (byte) plexSort::m#6 +Alias (byte) plex_show_idx#1 = (byte) plex_show_idx#41 +Alias (byte) plex_sprite_idx#1 = (byte) plex_sprite_idx#41 +Alias (byte) plex_sprite_msb#1 = (byte) plex_sprite_msb#40 +Alias (byte) plex_show_idx#11 = (byte) plex_show_idx#22 (byte) plex_show_idx#34 (byte) plex_show_idx#2 +Alias (byte) plex_sprite_idx#11 = (byte) plex_sprite_idx#22 (byte) plex_sprite_idx#34 (byte) plex_sprite_idx#2 +Alias (byte) plex_sprite_msb#12 = (byte) plex_sprite_msb#23 (byte) plex_sprite_msb#32 (byte) plex_sprite_msb#2 +Alias (byte) plex_free_next#0 = (byte) plex_free_next#11 (byte) plex_free_next#1 +Alias (byte) plexShowSprite::plex_sprite_idx2#0 = (byte~) plexShowSprite::$0 (byte) plexShowSprite::plex_sprite_idx2#2 (byte) plexShowSprite::plex_sprite_idx2#1 +Alias (byte) plexShowSprite::plexFreeAdd1_ypos#0 = (byte) plexShowSprite::ypos#0 (byte) plexShowSprite::plexFreeAdd1_ypos#1 +Alias (byte) plex_free_next#12 = (byte) plex_free_next#21 +Alias (byte) plex_show_idx#12 = (byte) plex_show_idx#24 (byte) plex_show_idx#13 (byte) plex_show_idx#25 (byte) plex_show_idx#26 +Alias (byte*) PLEX_SCREEN_PTR#16 = (byte*) PLEX_SCREEN_PTR#23 (byte*) PLEX_SCREEN_PTR#9 +Alias (byte) plex_sprite_idx#12 = (byte) plex_sprite_idx#24 (byte) plex_sprite_idx#13 (byte) plex_sprite_idx#25 (byte) plex_sprite_idx#26 +Alias (byte) plex_sprite_msb#13 = (byte) plex_sprite_msb#33 (byte) plex_sprite_msb#41 (byte) plex_sprite_msb#24 (byte) plex_sprite_msb#14 +Alias (byte) plex_free_next#2 = (byte~) plexShowSprite::plexFreeAdd1_$2 (byte) plex_free_next#40 (byte) plex_free_next#32 (byte) plex_free_next#33 +Alias (byte) plex_sprite_idx#27 = (byte) plex_sprite_idx#3 (byte~) plexShowSprite::$6 +Alias (byte) plex_free_next#22 = (byte) plex_free_next#23 +Alias (byte) plex_show_idx#27 = (byte) plex_show_idx#3 +Alias (byte) plex_free_next#13 = (byte) plex_free_next#3 +Alias (byte) plex_sprite_idx#15 = (byte) plex_sprite_idx#4 +Alias (byte) plex_show_idx#15 = (byte) plex_show_idx#4 +Alias (byte) plex_sprite_msb#16 = (byte) plex_sprite_msb#5 +Alias (byte*) PLEX_SCREEN_PTR#0 = (byte*) PLEX_SCREEN_PTR#26 (byte*) PLEX_SCREEN_PTR#21 +Alias (byte) plex_show_idx#0 = (byte) plex_show_idx#40 (byte) plex_show_idx#33 +Alias (byte) plex_sprite_idx#0 = (byte) plex_sprite_idx#40 (byte) plex_sprite_idx#33 +Alias (byte) plex_sprite_msb#0 = (byte) plex_sprite_msb#39 (byte) plex_sprite_msb#31 +Alias (byte) mulf_init::c#2 = (byte) mulf_init::c#3 +Alias (word) mulf_init::sqr#4 = (word) mulf_init::sqr#5 (word) mulf_init::sqr#6 +Alias (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#4 (byte*) mulf_init::sqr1_lo#5 +Alias (byte*) mulf_init::sqr1_hi#3 = (byte*) mulf_init::sqr1_hi#5 (byte*) mulf_init::sqr1_hi#4 +Alias (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#4 (byte) mulf_init::x_2#5 +Alias (word) mulf_init::sqr#1 = (word~) mulf_init::$6 +Alias (byte) mulf_init::c#1 = (byte) mulf_init::c#5 +Alias (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#3 +Alias (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#3 (byte*) mulf_init::sqr2_lo#5 +Alias (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#3 +Alias (byte) mulf_init::dir#2 = (byte) mulf_init::dir#3 +Alias (byte) mulf_init::x_255#1 = (byte~) mulf_init::$8 (byte) mulf_init::x_255#5 +Alias (byte*) mulf_init::sqr2_hi#1 = (byte*) mulf_init::sqr2_hi#5 +Alias (word) mulf8u_prepared::return#0 = (word~) mulf8u_prepared::$0 (word) mulf8u_prepared::return#3 (word) mulf8u_prepared::return#1 +Alias (byte) mulf8u_prepared::b#0 = (byte~) mulf8s_prepared::$0 +Alias (word) mulf8u_prepared::return#2 = (word) mulf8u_prepared::return#4 +Alias (signed byte) mulf8s_prepared::b#1 = (signed byte) mulf8s_prepared::b#4 (signed byte) mulf8s_prepared::b#3 +Alias (word) mulf8s_prepared::m#0 = (word~) mulf8s_prepared::$1 (word) mulf8s_prepared::m#3 +Alias (byte~) mulf8s_prepared::$15 = (byte~) mulf8s_prepared::$10 +Alias (signed word) mulf8s_prepared::return#0 = (signed word~) mulf8s_prepared::$6 (signed word) mulf8s_prepared::return#3 (signed word) mulf8s_prepared::return#1 +Alias (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#6 +Alias (byte~) mulf8s_prepared::$16 = (byte~) mulf8s_prepared::$14 +Alias (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#2 (signed byte) mulf8s::mulf8s_prepare1_a#1 +Alias (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#4 (signed byte) mulf8s::b#5 (signed byte) mulf8s::b#3 +Alias (byte) mulf8u_prepare::a#0 = (byte~) mulf8s::mulf8s_prepare1_$0 +Alias (signed word) mulf8s_prepared::return#2 = (signed word) mulf8s_prepared::return#4 +Alias (signed word) mulf8s::return#0 = (signed word~) mulf8s::$1 (signed word) mulf8s::return#4 (signed word) mulf8s::return#1 +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 (byte*) memset::end#0 = (byte*~) memset::$3 +Alias (byte) memset::c#1 = (byte) memset::c#2 +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) 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#4 (byte) keyboard_key_pressed::return#1 +Alias (byte) plex_show_idx#28 = (byte) plex_show_idx#35 +Alias (byte) plex_sprite_idx#28 = (byte) plex_sprite_idx#35 +Alias (byte) plex_sprite_msb#25 = (byte) plex_sprite_msb#34 +Alias (byte) plex_free_next#24 = (byte) plex_free_next#34 +Alias (byte*) PLEX_SCREEN_PTR#10 = (byte*) PLEX_SCREEN_PTR#3 (byte*) PLEX_SCREEN_PTR#24 (byte*) PLEX_SCREEN_PTR#18 (byte*) PLEX_SCREEN_PTR#11 (byte*) PLEX_SCREEN_PTR#4 +Alias (byte) plex_show_idx#16 = (byte) plex_show_idx#5 (byte) plex_show_idx#29 (byte) plex_show_idx#17 (byte) plex_show_idx#6 +Alias (byte) plex_sprite_idx#16 = (byte) plex_sprite_idx#5 (byte) plex_sprite_idx#29 (byte) plex_sprite_idx#17 (byte) plex_sprite_idx#6 +Alias (byte) plex_sprite_msb#17 = (byte) plex_sprite_msb#6 (byte) plex_sprite_msb#26 (byte) plex_sprite_msb#18 (byte) plex_sprite_msb#7 +Alias (byte) plex_free_next#14 = (byte) plex_free_next#5 (byte) plex_free_next#25 (byte) plex_free_next#15 (byte) plex_free_next#6 +Alias (byte*) PLEX_SCREEN_PTR#12 = (byte*) PLEX_SCREEN_PTR#5 +Alias (byte*) PLEX_SCREEN_PTR#31 = (byte*) PLEX_SCREEN_PTR#33 +Alias (byte*) PLEX_SCREEN_PTR#13 = (byte*) PLEX_SCREEN_PTR#28 (byte*) PLEX_SCREEN_PTR#29 (byte*) PLEX_SCREEN_PTR#25 (byte*) PLEX_SCREEN_PTR#20 (byte*) PLEX_SCREEN_PTR#6 +Alias (byte) keyboard_key_pressed::return#2 = (byte) keyboard_key_pressed::return#5 +Alias (byte) loop::angle#2 = (byte) loop::angle#4 (byte) loop::a#0 +Alias (byte) plex_show_idx#46 = (byte) plex_show_idx#48 +Alias (byte) plex_sprite_idx#46 = (byte) plex_sprite_idx#48 +Alias (byte) plex_sprite_msb#46 = (byte) plex_sprite_msb#48 +Alias (byte) plex_free_next#46 = (byte) plex_free_next#47 +Alias (byte*) PLEX_SCREEN_PTR#45 = (byte*) PLEX_SCREEN_PTR#46 +Alias (signed word) mulf8s::return#2 = (signed word) mulf8s::return#5 +Alias (byte) loop::i#2 = (byte) loop::i#4 (byte) loop::i#3 +Alias (signed byte) loop::r#2 = (signed byte) loop::r#3 (signed byte) loop::r#4 +Alias (byte) loop::a#2 = (byte) loop::a#3 (byte) loop::a#4 +Alias (byte) plex_show_idx#30 = (byte) plex_show_idx#42 (byte) plex_show_idx#44 (byte) plex_show_idx#37 +Alias (byte) plex_sprite_idx#30 = (byte) plex_sprite_idx#42 (byte) plex_sprite_idx#44 (byte) plex_sprite_idx#37 +Alias (byte) plex_sprite_msb#27 = (byte) plex_sprite_msb#42 (byte) plex_sprite_msb#44 (byte) plex_sprite_msb#36 +Alias (byte) plex_free_next#26 = (byte) plex_free_next#41 (byte) plex_free_next#44 (byte) plex_free_next#36 +Alias (byte) loop::angle#10 = (byte) loop::angle#9 (byte) loop::angle#7 (byte) loop::angle#5 (byte) loop::angle#3 +Alias (byte*) PLEX_SCREEN_PTR#40 = (byte*) PLEX_SCREEN_PTR#43 (byte*) PLEX_SCREEN_PTR#44 (byte*) PLEX_SCREEN_PTR#42 (byte*) PLEX_SCREEN_PTR#41 +Alias (signed word) loop::x#0 = (signed word~) loop::$3 +Alias (signed word) mulf8s::return#3 = (signed word) mulf8s::return#6 +Alias (signed word) loop::y#0 = (signed word~) loop::$7 +Alias (byte) plex_show_idx#18 = (byte) plex_show_idx#7 +Alias (byte) plex_sprite_idx#18 = (byte) plex_sprite_idx#7 +Alias (byte) plex_sprite_msb#19 = (byte) plex_sprite_msb#8 +Alias (byte) plex_free_next#16 = (byte) plex_free_next#7 +Alias (byte) plex_free_next#37 = (byte) plex_free_next#42 +Alias (byte) plex_sprite_idx#50 = (byte) plex_sprite_idx#51 +Alias (byte) plex_show_idx#50 = (byte) plex_show_idx#51 +Alias (byte) plex_sprite_msb#50 = (byte) plex_sprite_msb#51 +Alias (byte*) PLEX_SCREEN_PTR#37 = (byte*) PLEX_SCREEN_PTR#39 +Alias (byte) loop::angle#19 = (byte) loop::angle#20 +Alias (byte) plex_free_next#17 = (byte) plex_free_next#27 (byte) plex_free_next#45 (byte) plex_free_next#43 +Alias (byte) plex_sprite_idx#43 = (byte) plex_sprite_idx#47 (byte) plex_sprite_idx#49 (byte) plex_sprite_idx#45 +Alias (byte) plex_show_idx#43 = (byte) plex_show_idx#47 (byte) plex_show_idx#49 (byte) plex_show_idx#45 +Alias (byte) plex_sprite_msb#43 = (byte) plex_sprite_msb#47 (byte) plex_sprite_msb#49 (byte) plex_sprite_msb#45 +Alias (byte) loop::i1#5 = (byte) loop::i1#7 (byte) loop::i1#8 (byte) loop::i1#6 +Alias (byte*) PLEX_SCREEN_PTR#32 = (byte*) PLEX_SCREEN_PTR#35 (byte*) PLEX_SCREEN_PTR#36 (byte*) PLEX_SCREEN_PTR#34 +Alias (byte) loop::angle#15 = (byte) loop::angle#17 (byte) loop::angle#18 (byte) loop::angle#16 +Alias (byte) loop::plexFreeNextYpos1_return#0 = (byte) loop::plexFreeNextYpos1_return#2 (byte) loop::plexFreeNextYpos1_return#1 (byte) loop::plexFreeNextYpos1_return#3 (byte~) loop::$13 (byte) loop::rasterY#0 +Alias (byte) plex_sprite_idx#23 = (byte) plex_sprite_idx#38 +Alias (byte) plex_show_idx#23 = (byte) plex_show_idx#38 +Alias (byte) plex_free_next#28 = (byte) plex_free_next#38 +Alias (byte) plex_sprite_msb#28 = (byte) plex_sprite_msb#37 +Alias (byte) loop::i1#2 = (byte) loop::i1#3 (byte) loop::i1#4 +Alias (byte*) PLEX_SCREEN_PTR#27 = (byte*) PLEX_SCREEN_PTR#30 (byte*) PLEX_SCREEN_PTR#38 (byte*) PLEX_SCREEN_PTR#50 (byte*) PLEX_SCREEN_PTR#49 +Alias (byte) loop::angle#11 = (byte) loop::angle#13 (byte) loop::angle#14 (byte) loop::angle#12 (byte) loop::angle#8 +Alias (byte) plex_free_next#18 = (byte) plex_free_next#8 (byte) plex_free_next#39 (byte) plex_free_next#30 +Alias (byte) plex_sprite_idx#19 = (byte) plex_sprite_idx#8 (byte) plex_sprite_idx#39 (byte) plex_sprite_idx#32 +Alias (byte) plex_show_idx#19 = (byte) plex_show_idx#8 (byte) plex_show_idx#39 (byte) plex_show_idx#32 +Alias (byte) plex_sprite_msb#20 = (byte) plex_sprite_msb#9 (byte) plex_sprite_msb#38 (byte) plex_sprite_msb#30 +Alias (byte) keyboard_key_pressed::return#3 = (byte) keyboard_key_pressed::return#6 +Alias (byte) plex_show_idx#20 = (byte) plex_show_idx#9 +Alias (byte) plex_sprite_idx#20 = (byte) plex_sprite_idx#9 +Alias (byte) plex_sprite_msb#10 = (byte) plex_sprite_msb#21 +Alias (byte) plex_free_next#19 = (byte) plex_free_next#9 +Alias (byte) plex_free_next#31 = (byte) plex_free_next#4 +Alias (byte*) PLEX_SCREEN_PTR#14 = (byte*) PLEX_SCREEN_PTR#7 +Alias (byte) plex_show_idx#10 = (byte) plex_show_idx#21 +Alias (byte) plex_sprite_idx#10 = (byte) plex_sprite_idx#21 +Alias (byte) plex_sprite_msb#11 = (byte) plex_sprite_msb#22 +Alias (byte) plex_free_next#10 = (byte) plex_free_next#20 +Successful SSA optimization Pass2AliasElimination +Alias (byte) plex_sprite_idx#12 = (byte) plex_sprite_idx#14 +Alias (byte) plex_show_idx#12 = (byte) plex_show_idx#14 +Alias (byte) plex_sprite_msb#13 = (byte) plex_sprite_msb#15 +Alias (byte) plex_free_next#13 = (byte) plex_free_next#22 (byte) plex_free_next#2 +Alias (byte) plex_sprite_idx#15 = (byte) plex_sprite_idx#27 +Alias (byte) plex_show_idx#15 = (byte) plex_show_idx#27 +Alias (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#3 +Alias (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#3 +Alias (byte) mulf_init::c#1 = (byte) mulf_init::c#4 +Alias (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#4 +Alias (byte) mulf_init::x_255#1 = (byte) mulf_init::x_255#4 +Alias (byte*) mulf_init::sqr2_hi#1 = (byte*) mulf_init::sqr2_hi#4 +Alias (signed byte) mulf8s_prepared::b#1 = (signed byte) mulf8s_prepared::b#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte*) plexInit::plexSetScreen1_screen#0 (byte*) plexInit::screen#0 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#15 (byte*) PLEX_SCREEN_PTR#1 +Identical Phi Values (byte) plexSort::nxt_y#1 (byte) plexSort::nxt_y#0 +Identical Phi Values (byte) plexSort::nxt_idx#1 (byte) plexSort::nxt_idx#0 +Identical Phi Values (byte) plexSort::m#5 (byte) plexSort::m#2 +Identical Phi Values (byte) plex_show_idx#11 (byte) plex_show_idx#1 +Identical Phi Values (byte) plex_sprite_idx#11 (byte) plex_sprite_idx#1 +Identical Phi Values (byte) plex_sprite_msb#12 (byte) plex_sprite_msb#1 +Identical Phi Values (byte) plex_sprite_idx#12 (byte) plex_sprite_idx#23 +Identical Phi Values (byte) plex_show_idx#12 (byte) plex_show_idx#23 +Identical Phi Values (byte) plex_free_next#12 (byte) plex_free_next#28 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#16 (byte*) PLEX_SCREEN_PTR#27 +Identical Phi Values (byte) plex_sprite_msb#13 (byte) plex_sprite_msb#28 +Identical Phi Values (byte) mulf8u_prepare::a#1 (byte) mulf8u_prepare::a#0 +Identical Phi Values (byte) mulf8u_prepared::b#1 (byte) mulf8u_prepared::b#0 +Identical Phi Values (signed byte) mulf8s_prepared::b#1 (signed byte) mulf8s_prepared::b#0 +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 (byte) keyboard_matrix_read::rowid#1 (byte) keyboard_matrix_read::rowid#0 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#17 (byte*) PLEX_SCREEN_PTR#0 +Identical Phi Values (byte) plex_show_idx#28 (byte) plex_show_idx#0 +Identical Phi Values (byte) plex_sprite_idx#28 (byte) plex_sprite_idx#0 +Identical Phi Values (byte) plex_sprite_msb#25 (byte) plex_sprite_msb#0 +Identical Phi Values (byte) plex_free_next#24 (byte) plex_free_next#31 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#10 (byte*) PLEX_SCREEN_PTR#13 +Identical Phi Values (byte) plex_show_idx#16 (byte) plex_show_idx#20 +Identical Phi Values (byte) plex_sprite_idx#16 (byte) plex_sprite_idx#20 +Identical Phi Values (byte) plex_sprite_msb#17 (byte) plex_sprite_msb#10 +Identical Phi Values (byte) plex_free_next#14 (byte) plex_free_next#19 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#19 (byte*) PLEX_SCREEN_PTR#17 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#12 (byte*) PLEX_SCREEN_PTR#15 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#31 (byte*) PLEX_SCREEN_PTR#12 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#13 (byte*) PLEX_SCREEN_PTR#31 +Identical Phi Values (byte) plex_show_idx#36 (byte) plex_show_idx#28 +Identical Phi Values (byte) plex_sprite_idx#36 (byte) plex_sprite_idx#28 +Identical Phi Values (byte) plex_sprite_msb#35 (byte) plex_sprite_msb#25 +Identical Phi Values (byte) plex_free_next#35 (byte) plex_free_next#24 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#48 (byte*) PLEX_SCREEN_PTR#10 +Identical Phi Values (byte) loop::angle#2 (byte) loop::angle#6 +Identical Phi Values (byte) plex_show_idx#46 (byte) plex_show_idx#31 +Identical Phi Values (byte) plex_sprite_idx#46 (byte) plex_sprite_idx#31 +Identical Phi Values (byte) plex_sprite_msb#46 (byte) plex_sprite_msb#29 +Identical Phi Values (byte) plex_free_next#46 (byte) plex_free_next#29 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#45 (byte*) PLEX_SCREEN_PTR#47 +Identical Phi Values (byte) plex_show_idx#30 (byte) plex_show_idx#46 +Identical Phi Values (byte) plex_sprite_idx#30 (byte) plex_sprite_idx#46 +Identical Phi Values (byte) plex_sprite_msb#27 (byte) plex_sprite_msb#46 +Identical Phi Values (byte) plex_free_next#26 (byte) plex_free_next#46 +Identical Phi Values (byte) loop::angle#10 (byte) loop::angle#2 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#40 (byte*) PLEX_SCREEN_PTR#45 +Identical Phi Values (byte) plex_show_idx#18 (byte) plex_show_idx#11 +Identical Phi Values (byte) plex_sprite_idx#18 (byte) plex_sprite_idx#11 +Identical Phi Values (byte) plex_sprite_msb#19 (byte) plex_sprite_msb#12 +Identical Phi Values (byte) plex_free_next#16 (byte) plex_free_next#0 +Identical Phi Values (byte) plex_free_next#37 (byte) plex_free_next#16 +Identical Phi Values (byte) plex_sprite_idx#50 (byte) plex_sprite_idx#18 +Identical Phi Values (byte) plex_show_idx#50 (byte) plex_show_idx#18 +Identical Phi Values (byte) plex_sprite_msb#50 (byte) plex_sprite_msb#19 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#37 (byte*) PLEX_SCREEN_PTR#40 +Identical Phi Values (byte) loop::angle#19 (byte) loop::angle#1 +Identical Phi Values (byte) loop::rasterY#1 (byte) loop::plexFreeNextYpos1_return#0 +Identical Phi Values (byte) plex_sprite_idx#23 (byte) plex_sprite_idx#43 +Identical Phi Values (byte) plex_show_idx#23 (byte) plex_show_idx#43 +Identical Phi Values (byte) plex_free_next#28 (byte) plex_free_next#17 +Identical Phi Values (byte) plex_sprite_msb#28 (byte) plex_sprite_msb#43 +Identical Phi Values (byte) loop::i1#2 (byte) loop::i1#5 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#27 (byte*) PLEX_SCREEN_PTR#32 +Identical Phi Values (byte) loop::angle#11 (byte) loop::angle#15 +Identical Phi Values (byte) plex_free_next#18 (byte) plex_free_next#13 +Identical Phi Values (byte) plex_sprite_idx#19 (byte) plex_sprite_idx#15 +Identical Phi Values (byte) plex_show_idx#19 (byte) plex_show_idx#15 +Identical Phi Values (byte) plex_sprite_msb#20 (byte) plex_sprite_msb#16 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#14 (byte*) PLEX_SCREEN_PTR#10 +Identical Phi Values (byte) plex_show_idx#10 (byte) plex_show_idx#16 +Identical Phi Values (byte) plex_sprite_idx#10 (byte) plex_sprite_idx#16 +Identical Phi Values (byte) plex_sprite_msb#11 (byte) plex_sprite_msb#17 +Identical Phi Values (byte) plex_free_next#10 (byte) plex_free_next#14 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) plexSort::m#3 (byte) plexSort::m#2 +Identical Phi Values (void*) memset::return#0 (void*) memset::str#0 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#32 (byte*) PLEX_SCREEN_PTR#47 +Identical Phi Values (byte) loop::angle#15 (byte) loop::angle#1 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) PLEX_SCREEN_PTR#47 (byte*) PLEX_SCREEN_PTR#1 +Successful SSA optimization Pass2IdenticalPhiElimination +Identified duplicate assignment right side [80] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 * (const byte) SIZEOF_WORD +Successful SSA optimization Pass2DuplicateRValueIdentification +Simple Condition (bool~) plexInit::$1 [15] if((byte) plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 +Simple Condition (bool~) plexSort::$3 [26] if((byte) plexSort::nxt_y#0>=*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2))) goto plexSort::@2 +Simple Condition (bool~) plexSort::$8 [30] if((byte) plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1 +Simple Condition (bool~) plexSort::plexFreePrepare1_$0 [53] if((byte) plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 +Simple Condition (bool~) plexShowSprite::$4 [83] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 +Simple Condition (bool~) plexShowSprite::$8 [97] if((byte) plex_sprite_msb#3!=(byte) 0) goto plexShowSprite::@return +Simple Condition (bool~) mulf_init::$0 [115] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 +Simple Condition (bool~) mulf_init::$3 [121] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@4 +Simple Condition (bool~) mulf_init::$7 [140] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@10 +Simple Condition (bool~) mulf_init::$10 [149] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@12 +Simple Condition (bool~) mulf8s_prepared::$3 [179] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 +Simple Condition (bool~) mulf8s_prepared::$5 [183] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 +Simple Condition (bool~) memset::$1 [222] if((word) memset::num#0<=(byte) 0) goto memset::@1 +Simple Condition (bool~) memset::$4 [232] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 +Simple Condition (bool~) init::$7 [301] if((byte) init::i#1!=rangelast(0,PLEX_COUNT-1)) goto init::@1 +Simple Condition (bool~) init::$8 [309] if((byte) init::i1#1!=rangelast(0,7)) goto init::@3 +Simple Condition (bool~) exit::$1 [328] if((byte) 0!=(byte~) exit::$0) goto exit::@1 +Simple Condition (bool~) loop::$0 [336] if(*((const byte*) RASTER)<(byte) $d8) goto loop::@4 +Simple Condition (bool~) loop::$9 [371] if((byte) loop::i#1!=rangelast(0,NUM_BOBS-1)) goto loop::@6 +Simple Condition (bool~) loop::$12 [385] if((byte~) loop::$11!=(byte) 0) goto loop::@8 +Simple Condition (bool~) loop::$14 [399] if(*((const byte*) RASTER)<(byte) loop::plexFreeNextYpos1_return#0) goto loop::@15 +Simple Condition (bool~) loop::$17 [410] if((byte) loop::i1#1!=rangelast(0,PLEX_COUNT-1)) goto loop::@14 +Simple Condition (bool~) loop::$19 [420] if((byte) 0==(byte~) loop::$18) goto loop::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Rewriting && if()-condition to two if()s [39] (bool~) plexSort::$7 ← (bool~) plexSort::$5 && (bool~) plexSort::$6 +Successful SSA optimization Pass2ConditionalAndOrRewriting +Negating conditional jump and destination [420] if((byte) 0!=(byte~) loop::$18) goto loop::@return +Constant right-side identified [0] (byte*) PLEX_SCREEN_PTR#0 ← (byte*)(number) $400+(number) $3f8 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte*) PLEX_SCREEN_PTR#0 = (byte*)$400+$3f8 +Constant (const byte) plex_show_idx#0 = 0 +Constant (const byte) plex_sprite_idx#0 = 0 +Constant (const byte) plex_sprite_msb#0 = 1 +Constant (const byte) plexInit::i#0 = 0 +Constant (const byte) plexSort::m#0 = 0 +Constant (const byte) plex_show_idx#1 = 0 +Constant (const byte) plex_sprite_idx#1 = 0 +Constant (const byte) plex_sprite_msb#1 = 1 +Constant (const byte) plexSort::plexFreePrepare1_s#0 = 0 +Constant (const byte) plex_free_next#0 = 0 +Constant (const byte) plex_sprite_msb#4 = 1 +Constant (const byte) plex_free_next#31 = 0 +Constant (const word) mulf_init::sqr#0 = 0 +Constant (const byte) mulf_init::x_2#0 = 0 +Constant (const byte) mulf_init::c#0 = 0 +Constant (const byte*) mulf_init::sqr1_hi#0 = mulf_sqr1_hi+1 +Constant (const byte*) mulf_init::sqr1_lo#0 = mulf_sqr1_lo+1 +Constant (const byte) mulf_init::x_255#0 = -1 +Constant (const byte) mulf_init::dir#0 = $ff +Constant (const byte*) mulf_init::sqr2_hi#0 = mulf_sqr2_hi +Constant (const byte*) mulf_init::sqr2_lo#0 = mulf_sqr2_lo +Constant (const byte) mulf_init::dir#1 = 1 +Constant (const byte*) plexInit::screen#0 = SCREEN +Constant (const byte) init::i#0 = 0 +Constant (const byte) init::i1#0 = 0 +Constant (const void*) memset::str#0 = (void*)SCREEN +Constant (const byte) memset::c#0 = ' ' +Constant (const word) memset::num#0 = $3e8 +Constant (const byte) keyboard_key_pressed::key#0 = KEY_SPACE +Constant (const byte) loop::angle#0 = 0 +Constant (const signed byte) loop::r#0 = $1e +Constant (const byte) loop::i#0 = 0 +Constant (const byte) loop::i1#0 = 0 +Constant (const byte) keyboard_key_pressed::key#1 = KEY_SPACE +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 void*) memset::return#2 = memset::str#0 +Successful SSA optimization Pass2ConstantIdentification +if() condition always false - eliminating [222] if((const word) memset::num#0<=(byte) 0) goto memset::@1 +Removing PHI-reference to removed block (loop::@1) in block loop::@return +Removing PHI-reference to removed block (loop::@1) in block loop::@return +Removing PHI-reference to removed block (loop::@1) in block loop::@return +Removing PHI-reference to removed block (loop::@1) in block loop::@return +if() condition always true - replacing block destination [333] if(true) goto loop::@4 +Successful SSA optimization Pass2ConstantIfs +Resolved ranged next value [13] plexInit::i#1 ← ++ plexInit::i#2 to ++ +Resolved ranged comparison value [15] if(plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 to (const byte) PLEX_COUNT-(byte) 1+(number) 1 +Resolved ranged next value [28] plexSort::m#1 ← ++ plexSort::m#2 to ++ +Resolved ranged comparison value [30] if(plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1 to (const byte) PLEX_COUNT-(byte) 2+(number) 1 +Resolved ranged next value [51] plexSort::plexFreePrepare1_s#1 ← ++ plexSort::plexFreePrepare1_s#2 to ++ +Resolved ranged comparison value [53] if(plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 to (number) 8 +Resolved ranged next value [299] init::i#1 ← ++ init::i#2 to ++ +Resolved ranged comparison value [301] if(init::i#1!=rangelast(0,PLEX_COUNT-1)) goto init::@1 to (const byte) PLEX_COUNT-(byte) 1+(number) 1 +Resolved ranged next value [307] init::i1#1 ← ++ init::i1#2 to ++ +Resolved ranged comparison value [309] if(init::i1#1!=rangelast(0,7)) goto init::@3 to (number) 8 +Resolved ranged next value [369] loop::i#1 ← ++ loop::i#2 to ++ +Resolved ranged comparison value [371] if(loop::i#1!=rangelast(0,NUM_BOBS-1)) goto loop::@6 to (const byte) NUM_BOBS-(byte) 1+(number) 1 +Resolved ranged next value [408] loop::i1#1 ← ++ loop::i1#5 to ++ +Resolved ranged comparison value [410] if(loop::i1#1!=rangelast(0,PLEX_COUNT-1)) goto loop::@14 to (const byte) PLEX_COUNT-(byte) 1+(number) 1 +Eliminating unused variable - keeping the phi block (byte) plex_show_idx#31 +Eliminating unused variable - keeping the phi block (byte) plex_sprite_idx#31 +Eliminating unused variable - keeping the phi block (byte) plex_sprite_msb#29 +Eliminating unused variable - keeping the phi block (byte) plex_free_next#29 +Eliminating unused variable - keeping the phi block (byte) plex_show_idx#20 +Eliminating unused variable - keeping the phi block (byte) plex_sprite_idx#20 +Eliminating unused variable - keeping the phi block (byte) plex_sprite_msb#10 +Eliminating unused variable - keeping the phi block (byte) plex_free_next#19 +Eliminating unused constant (const void*) memset::return#2 +Eliminating unused constant (const byte*) PLEX_SCREEN_PTR#0 +Successful SSA optimization PassNEliminateUnusedVars +Eliminating unused constant (const byte) plex_show_idx#0 +Eliminating unused constant (const byte) plex_sprite_idx#0 +Eliminating unused constant (const byte) plex_sprite_msb#0 +Eliminating unused constant (const byte) plex_free_next#31 +Successful SSA optimization PassNEliminateUnusedVars +Adding number conversion cast (unumber) PLEX_COUNT-1+1 in if((byte) plexInit::i#1!=(const byte) PLEX_COUNT-(byte) 1+(number) 1) goto plexInit::@1 +Adding number conversion cast (unumber) 1 in if((byte) plexInit::i#1!=(unumber)(const byte) PLEX_COUNT-(byte) 1+(number) 1) goto plexInit::@1 +Adding number conversion cast (unumber) PLEX_COUNT-2+1 in if((byte) plexSort::m#1!=(const byte) PLEX_COUNT-(byte) 2+(number) 1) goto plexSort::@1 +Adding number conversion cast (unumber) 1 in if((byte) plexSort::m#1!=(unumber)(const byte) PLEX_COUNT-(byte) 2+(number) 1) goto plexSort::@1 +Adding number conversion cast (unumber) 8 in if((byte) plexSort::plexFreePrepare1_s#1!=(number) 8) goto plexSort::plexFreePrepare1_@1 +Adding number conversion cast (unumber) PLEX_COUNT-1+1 in if((byte) init::i#1!=(const byte) PLEX_COUNT-(byte) 1+(number) 1) goto init::@1 +Adding number conversion cast (unumber) 1 in if((byte) init::i#1!=(unumber)(const byte) PLEX_COUNT-(byte) 1+(number) 1) goto init::@1 +Adding number conversion cast (unumber) 8 in if((byte) init::i1#1!=(number) 8) goto init::@3 +Adding number conversion cast (unumber) NUM_BOBS-1+1 in if((byte) loop::i#1!=(const byte) NUM_BOBS-(byte) 1+(number) 1) goto loop::@6 +Adding number conversion cast (unumber) 1 in if((byte) loop::i#1!=(unumber)(const byte) NUM_BOBS-(byte) 1+(number) 1) goto loop::@6 +Adding number conversion cast (unumber) PLEX_COUNT-1+1 in if((byte) loop::i1#1!=(const byte) PLEX_COUNT-(byte) 1+(number) 1) goto loop::@14 +Adding number conversion cast (unumber) 1 in if((byte) loop::i1#1!=(unumber)(const byte) PLEX_COUNT-(byte) 1+(number) 1) goto loop::@14 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast (const byte) PLEX_COUNT-(byte) 1+(unumber)(number) 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast (const byte) PLEX_COUNT-(byte) 2+(unumber)(number) 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 8 +Simplifying constant integer cast (const byte) PLEX_COUNT-(byte) 1+(unumber)(number) 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 8 +Simplifying constant integer cast (const byte) NUM_BOBS-(byte) 1+(unumber)(number) 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast (const byte) PLEX_COUNT-(byte) 1+(unumber)(number) 1 +Simplifying constant integer cast 1 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 8 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 8 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte~) plexShowSprite::$11 = (byte~) plexShowSprite::$10 +Successful SSA optimization Pass2AliasElimination +Simple Condition (bool~) plexSort::$5 [19] if((byte) plexSort::s#1!=(byte) $ff) goto plexSort::@8 +Simple Condition (bool~) plexSort::$6 [212] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 +Successful SSA optimization Pass2ConditionalJumpSimplification +Negating conditional jump and destination [19] if((byte) plexSort::s#1==(byte) $ff) goto plexSort::@4 +Successful SSA optimization Pass2ConditionalJumpSequenceImprovement +Constant right-side identified [0] (byte*) PLEX_SCREEN_PTR#1 ← (const byte*) plexInit::screen#0 + (word) $3f8 +Constant right-side identified [112] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte*) PLEX_SCREEN_PTR#1 = plexInit::screen#0+$3f8 +Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining Noop Cast [90] (byte~) mulf8s_prepared::$9 ← (byte)(signed byte) mulf8s_prepared::b#0 keeping mulf8s_prepared::b#0 +Inlining Noop Cast [94] (signed word) mulf8s_prepared::return#0 ← (signed word)(word) mulf8s_prepared::m#4 keeping mulf8s_prepared::m#4 +Inlining Noop Cast [96] (byte~) mulf8s_prepared::$13 ← (byte)*((const signed byte*) mulf8s_prepared::memA) keeping *(mulf8s_prepared::memA) +Successful SSA optimization Pass2NopCastInlining +Inlining Noop Cast [105] (signed word) mulf8s_prepared::return#2 ← (signed word)(word) mulf8s_prepared::m#4 keeping mulf8s_prepared::m#4 +Successful SSA optimization Pass2NopCastInlining +Rewriting multiplication to use shift [24] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#43 * (byte) 2 +Rewriting multiplication to use shift [33] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [44] (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#43 * (byte) 2 +Rewriting multiplication to use shift and addition[135] (byte~) init::$3 ← (byte) init::i#2 * (byte) 5 +Rewriting multiplication to use shift [137] (byte~) init::$9 ← (byte) init::i#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [139] (byte~) init::$5 ← (byte) init::i#2 * (byte) 8 +Rewriting multiplication to use shift [167] (signed word~) loop::$2 ← (signed word~) loop::$1 * (signed byte) 2 +Rewriting multiplication to use shift [170] (byte~) loop::$20 ← (byte) loop::i#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [177] (signed word~) loop::$6 ← (signed word~) loop::$5 * (signed byte) 2 +Successful SSA optimization Pass2MultiplyToShiftRewriting +Inlining constant with var siblings (const byte) plexInit::i#0 +Inlining constant with var siblings (const byte) plexSort::m#0 +Inlining constant with var siblings (const byte) plexSort::plexFreePrepare1_s#0 +Inlining constant with var siblings (const word) mulf_init::sqr#0 +Inlining constant with var siblings (const byte) mulf_init::x_2#0 +Inlining constant with var siblings (const byte) mulf_init::c#0 +Inlining constant with var siblings (const byte*) mulf_init::sqr1_hi#0 +Inlining constant with var siblings (const byte*) mulf_init::sqr1_lo#0 +Inlining constant with var siblings (const byte) mulf_init::x_255#0 +Inlining constant with var siblings (const byte) mulf_init::dir#0 +Inlining constant with var siblings (const byte*) mulf_init::sqr2_hi#0 +Inlining constant with var siblings (const byte*) mulf_init::sqr2_lo#0 +Inlining constant with var siblings (const byte) mulf_init::dir#1 +Inlining constant with var siblings (const byte*) memset::dst#0 +Inlining constant with var siblings (const byte) keyboard_key_pressed::key#0 +Inlining constant with var siblings (const byte) keyboard_key_pressed::key#1 +Inlining constant with var siblings (const byte) init::i#0 +Inlining constant with var siblings (const byte) init::i1#0 +Inlining constant with var siblings (const byte) loop::angle#0 +Inlining constant with var siblings (const signed byte) loop::r#0 +Inlining constant with var siblings (const byte) loop::i#0 +Inlining constant with var siblings (const byte) loop::i1#0 +Inlining constant with var siblings (const byte) plex_show_idx#1 +Inlining constant with var siblings (const byte) plex_sprite_idx#1 +Inlining constant with var siblings (const byte) plex_sprite_msb#1 +Inlining constant with var siblings (const byte) plex_free_next#0 +Inlining constant with var siblings (const byte) plex_sprite_msb#4 +Constant inlined mulf_init::c#0 = (byte) 0 +Constant inlined mulf_init::sqr2_lo#0 = (const byte*) mulf_sqr2_lo +Constant inlined init::i#0 = (byte) 0 +Constant inlined mulf_init::sqr2_hi#0 = (const byte*) mulf_sqr2_hi +Constant inlined plexSort::plexFreePrepare1_s#0 = (byte) 0 +Constant inlined plexInit::i#0 = (byte) 0 +Constant inlined plexSort::m#0 = (byte) 0 +Constant inlined mulf_init::dir#1 = (byte) 1 +Constant inlined plex_sprite_msb#4 = (byte) 1 +Constant inlined memset::$2 = (byte*)(const void*) memset::str#0 +Constant inlined mulf_init::dir#0 = (byte) $ff +Constant inlined plex_show_idx#1 = (byte) 0 +Constant inlined plex_sprite_idx#1 = (byte) 0 +Constant inlined plex_sprite_msb#1 = (byte) 1 +Constant inlined plex_free_next#0 = (byte) 0 +Constant inlined mulf_init::x_255#0 = (byte) -1 +Constant inlined mulf_init::x_2#0 = (byte) 0 +Constant inlined keyboard_key_pressed::key#0 = (const byte) KEY_SPACE +Constant inlined keyboard_key_pressed::key#1 = (const byte) KEY_SPACE +Constant inlined mulf_init::sqr#0 = (byte) 0 +Constant inlined loop::i1#0 = (byte) 0 +Constant inlined plexInit::screen#0 = (const byte*) SCREEN +Constant inlined loop::angle#0 = (byte) 0 +Constant inlined loop::i#0 = (byte) 0 +Constant inlined mulf_init::sqr1_hi#0 = (const byte*) mulf_sqr1_hi+(byte) 1 +Constant inlined init::i1#0 = (byte) 0 +Constant inlined mulf_init::sqr1_lo#0 = (const byte*) mulf_sqr1_lo+(byte) 1 +Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 +Constant inlined loop::r#0 = (signed byte) $1e +Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in assignment *(PLEX_SORTED_IDX+1 + plexSort::$1) +Consolidated array index constant in assignment *(PLEX_SORTED_IDX+1 + plexSort::$4) +Successful SSA optimization Pass2ConstantAdditionElimination +Alias (byte) plexSort::m#2 = (byte~) plexSort::$1 +Alias (byte) plexSort::s#3 = (byte~) plexSort::$4 +Alias (byte~) init::$3 = (byte~) init::$11 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) keyboard_key_pressed::key#2 (const byte) KEY_SPACE +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [113] (byte) keyboard_key_pressed::colidx#0 ← (const byte) KEY_SPACE & (byte) 7 +Constant right-side identified [114] (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 +Eliminating unused constant (const byte) SIZEOF_WORD +Successful SSA optimization PassNEliminateUnusedVars +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 plexInit::@4(between plexInit::@1 and plexInit::@1) +Added new block during phi lifting plexSort::@9(between plexSort::@2 and plexSort::@1) +Added new block during phi lifting plexSort::@10(between plexSort::@8 and plexSort::@3) +Added new block during phi lifting plexSort::@11(between plexSort::plexFreePrepare1_@1 and plexSort::plexFreePrepare1_@1) +Added new block during phi lifting plexShowSprite::@8(between plexShowSprite::@2 and plexShowSprite::@return) +Added new block during phi lifting mulf_init::@17(between mulf_init::@2 and mulf_init::@4) +Added new block during phi lifting mulf_init::@18(between mulf_init::@10 and mulf_init::@12) +Added new block during phi lifting mulf8s_prepared::@7(between mulf8s_prepared::@6 and mulf8s_prepared::@1) +Added new block during phi lifting mulf8s_prepared::@8(between mulf8s_prepared::@1 and mulf8s_prepared::@2) +Added new block during phi lifting init::@8(between init::@1 and init::@1) +Added new block during phi lifting init::@9(between init::@3 and init::@3) +Added new block during phi lifting loop::@35(between loop::@34 and loop::@1) +Added new block during phi lifting loop::@36(between loop::@31 and loop::@6) +Added new block during phi lifting loop::@37(between loop::@33 and loop::@14) +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @4 +Adding NOP phi() at start of @9 +Adding NOP phi() at start of @36 +Adding NOP phi() at start of @37 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of exit +Adding NOP phi() at start of exit::@1 +Adding NOP phi() at start of keyboard_key_pressed +Adding NOP phi() at start of loop +Adding NOP phi() at start of loop::@10 +Adding NOP phi() at start of loop::plexFreeNextYpos1_@return +Adding NOP phi() at start of loop::@29 +Adding NOP phi() at start of plexShowSprite::@6 +Adding NOP phi() at start of plexSort +Adding NOP phi() at start of plexSort::@6 +Adding NOP phi() at start of plexSort::plexFreePrepare1 +Adding NOP phi() at start of plexSort::plexFreePrepare1_@2 +Adding NOP phi() at start of mulf8s::@3 +Adding NOP phi() at start of init::@5 +Adding NOP phi() at start of init::@4 +Adding NOP phi() at start of init::@6 +Adding NOP phi() at start of init::@7 +Adding NOP phi() at start of memset +Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of memset::@1 +Adding NOP phi() at start of mulf_init +Adding NOP phi() at start of mulf_init::@3 +Adding NOP phi() at start of mulf_init::@15 +Adding NOP phi() at start of plexInit +Adding NOP phi() at start of plexInit::plexSetScreen1 +Adding NOP phi() at start of plexInit::@3 +CALL GRAPH +Calls in [] to main:4 +Calls in [main] to init:8 loop:10 exit:12 +Calls in [exit] to keyboard_key_pressed:17 +Calls in [keyboard_key_pressed] to keyboard_matrix_read:23 +Calls in [loop] to mulf8s:42 mulf8s:54 plexSort:66 plexShowSprite:79 keyboard_key_pressed:83 +Calls in [mulf8s] to mulf8u_prepare:151 mulf8s_prepared:154 +Calls in [mulf8s_prepared] to mulf8u_prepared:158 +Calls in [init] to plexInit:184 mulf_init:204 memset:206 + +Created 33 initial phi equivalence classes +Not coalescing [35] loop::a#6 ← loop::angle#6 +Coalesced [40] mulf8s::mulf8s_prepare1_a#3 ← mulf8s::a#0 +Coalesced [41] mulf8s::b#7 ← mulf8s::b#0 +Coalesced [52] mulf8s::mulf8s_prepare1_a#2 ← mulf8s::a#1 +Coalesced [53] mulf8s::b#6 ← mulf8s::b#1 +Coalesced [87] loop::angle#21 ← loop::angle#1 +Coalesced [89] plex_free_next#48 ← plex_free_next#13 +Coalesced [90] plex_sprite_idx#52 ← plex_sprite_idx#15 +Coalesced [91] plex_show_idx#52 ← plex_show_idx#15 +Coalesced [92] plex_sprite_msb#53 ← plex_sprite_msb#16 +Coalesced [93] loop::i1#9 ← loop::i1#1 +Coalesced [94] loop::r#5 ← loop::r#1 +Coalesced [95] loop::a#5 ← loop::a#1 +Coalesced [96] loop::i#5 ← loop::i#1 +Coalesced [121] plex_sprite_msb#52 ← plex_sprite_msb#3 +Not coalescing [128] plexSort::s#6 ← plexSort::m#2 +Coalesced [146] plexSort::plexFreePrepare1_s#3 ← plexSort::plexFreePrepare1_s#1 +Coalesced [147] plexSort::m#7 ← plexSort::m#1 +Coalesced [148] plexSort::s#5 ← plexSort::s#1 +Coalesced [165] mulf8s_prepared::m#7 ← mulf8s_prepared::m#1 +Coalesced [171] mulf8s_prepared::m#10 ← mulf8s_prepared::m#2 +Coalesced [174] mulf8s_prepared::m#9 ← mulf8s_prepared::m#5 +Coalesced [175] mulf8s_prepared::m#8 ← mulf8s_prepared::m#0 +Coalesced [209] init::i1#3 ← init::i1#1 +Coalesced [210] init::i#3 ← init::i#1 +Coalesced [219] memset::dst#4 ← memset::dst#1 +Coalesced [237] mulf_init::sqr2_lo#6 ← mulf_init::sqr2_lo#1 +Coalesced [238] mulf_init::x_255#6 ← mulf_init::x_255#1 +Coalesced [239] mulf_init::sqr2_hi#6 ← mulf_init::sqr2_hi#1 +Coalesced [240] mulf_init::dir#5 ← mulf_init::dir#4 +Coalesced (already) [241] mulf_init::dir#6 ← mulf_init::dir#2 +Coalesced [247] mulf_init::sqr#9 ← mulf_init::sqr#2 +Coalesced [248] mulf_init::x_2#8 ← mulf_init::x_2#1 +Coalesced [257] mulf_init::sqr1_lo#6 ← mulf_init::sqr1_lo#1 +Coalesced [258] mulf_init::c#6 ← mulf_init::c#1 +Coalesced [259] mulf_init::sqr#7 ← mulf_init::sqr#1 +Coalesced [260] mulf_init::sqr1_hi#6 ← mulf_init::sqr1_hi#1 +Coalesced [261] mulf_init::x_2#6 ← mulf_init::x_2#2 +Coalesced [262] mulf_init::sqr#8 ← mulf_init::sqr#4 +Coalesced (already) [263] mulf_init::x_2#7 ← mulf_init::x_2#3 +Coalesced [272] plexInit::i#3 ← plexInit::i#1 +Coalesced down to 28 phi equivalence classes +Culled Empty Block (label) @4 +Culled Empty Block (label) @9 +Culled Empty Block (label) @37 +Culled Empty Block (label) loop::@10 +Culled Empty Block (label) loop::plexFreeNextYpos1_@return +Culled Empty Block (label) loop::@29 +Culled Empty Block (label) loop::@35 +Culled Empty Block (label) loop::@37 +Culled Empty Block (label) loop::@36 +Culled Empty Block (label) plexShowSprite::@6 +Culled Empty Block (label) plexSort::@6 +Culled Empty Block (label) plexSort::plexFreePrepare1_@2 +Culled Empty Block (label) plexSort::@11 +Culled Empty Block (label) plexSort::@9 +Culled Empty Block (label) plexSort::@10 +Culled Empty Block (label) mulf8s::@3 +Culled Empty Block (label) mulf8s_prepared::@8 +Culled Empty Block (label) mulf8s_prepared::@7 +Culled Empty Block (label) init::@5 +Culled Empty Block (label) init::@7 +Culled Empty Block (label) init::@9 +Culled Empty Block (label) init::@8 +Culled Empty Block (label) memset::@2 +Culled Empty Block (label) memset::@1 +Culled Empty Block (label) mulf_init::@3 +Culled Empty Block (label) mulf_init::@15 +Culled Empty Block (label) mulf_init::@17 +Culled Empty Block (label) plexInit::@3 +Culled Empty Block (label) plexInit::@4 +Renumbering block @36 to @1 +Renumbering block plexSort::@8 to plexSort::@6 +Renumbering block plexShowSprite::@4 to plexShowSprite::@3 +Renumbering block plexShowSprite::@7 to plexShowSprite::@4 +Renumbering block plexShowSprite::@8 to plexShowSprite::@5 +Renumbering block mulf_init::@4 to mulf_init::@3 +Renumbering block mulf_init::@7 to mulf_init::@4 +Renumbering block mulf_init::@9 to mulf_init::@5 +Renumbering block mulf_init::@10 to mulf_init::@6 +Renumbering block mulf_init::@11 to mulf_init::@7 +Renumbering block mulf_init::@12 to mulf_init::@8 +Renumbering block mulf_init::@18 to mulf_init::@9 +Renumbering block mulf8s_prepared::@6 to mulf8s_prepared::@5 +Renumbering block mulf8s::@2 to mulf8s::@1 +Renumbering block mulf8s::@4 to mulf8s::@2 +Renumbering block memset::@4 to memset::@1 +Renumbering block memset::@5 to memset::@2 +Renumbering block keyboard_key_pressed::@2 to keyboard_key_pressed::@1 +Renumbering block init::@6 to init::@5 +Renumbering block exit::@7 to exit::@2 +Renumbering block loop::@4 to loop::@2 +Renumbering block loop::@5 to loop::@3 +Renumbering block loop::@6 to loop::@4 +Renumbering block loop::@7 to loop::@5 +Renumbering block loop::@8 to loop::@6 +Renumbering block loop::@14 to loop::@7 +Renumbering block loop::@15 to loop::@8 +Renumbering block loop::@17 to loop::@9 +Renumbering block loop::@21 to loop::@10 +Renumbering block loop::@30 to loop::@11 +Renumbering block loop::@31 to loop::@12 +Renumbering block loop::@32 to loop::@13 +Renumbering block loop::@33 to loop::@14 +Renumbering block loop::@34 to loop::@15 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of exit +Adding NOP phi() at start of exit::@1 +Adding NOP phi() at start of keyboard_key_pressed +Adding NOP phi() at start of loop +Adding NOP phi() at start of plexShowSprite::@5 +Adding NOP phi() at start of plexSort +Adding NOP phi() at start of plexSort::plexFreePrepare1 +Adding NOP phi() at start of init::@4 +Adding NOP phi() at start of init::@5 +Adding NOP phi() at start of memset +Adding NOP phi() at start of mulf_init +Adding NOP phi() at start of mulf_init::@9 +Adding NOP phi() at start of plexInit +Adding NOP phi() at start of plexInit::plexSetScreen1 + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() + +(void()) main() +main: scope:[main] from @1 + asm { sei } + [5] call init + to:main::@1 +main::@1: scope:[main] from main + [6] phi() + [7] call loop + to:main::@2 +main::@2: scope:[main] from main::@1 + [8] phi() + [9] call exit + to:main::@3 +main::@3: scope:[main] from main::@2 + asm { cli } + to:main::@return +main::@return: scope:[main] from main::@3 + [11] return + to:@return + +(void()) exit() +exit: scope:[exit] from main::@2 + [12] phi() + to:exit::@1 +exit::@1: scope:[exit] from exit exit::@2 + [13] phi() + [14] call keyboard_key_pressed + [15] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + to:exit::@2 +exit::@2: scope:[exit] from exit::@1 + [16] (byte~) exit::$0 ← (byte) keyboard_key_pressed::return#2 + [17] if((byte) 0!=(byte~) exit::$0) goto exit::@1 + to:exit::@return +exit::@return: scope:[exit] from exit::@2 + [18] return + to:@return + +(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) +keyboard_key_pressed: scope:[keyboard_key_pressed] from exit::@1 loop::@10 + [19] phi() + [20] call keyboard_matrix_read + [21] (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 + [22] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 + [23] (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 + [24] return + to:@return + +(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) +keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed + [25] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [26] (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 + [27] return + to:@return + +(void()) loop() +loop: scope:[loop] from main::@1 + [28] phi() + to:loop::@1 +loop::@1: scope:[loop] from loop loop::@15 + [29] (byte) loop::angle#6 ← phi( loop/(byte) 0 loop::@15/(byte) loop::angle#1 ) + to:loop::@2 +loop::@2: scope:[loop] from loop::@1 loop::@2 + [30] if(*((const byte*) RASTER)<(byte) $d8) goto loop::@2 + to:loop::@3 +loop::@3: scope:[loop] from loop::@2 + [31] *((const byte*) BORDERCOL) ← (byte) $f + [32] (byte) loop::a#6 ← (byte) loop::angle#6 + to:loop::@4 +loop::@4: scope:[loop] from loop::@12 loop::@3 + [33] (byte) loop::i#2 ← phi( loop::@12/(byte) loop::i#1 loop::@3/(byte) 0 ) + [33] (byte) loop::a#2 ← phi( loop::@12/(byte) loop::a#1 loop::@3/(byte) loop::a#6 ) + [33] (signed byte) loop::r#2 ← phi( loop::@12/(signed byte) loop::r#1 loop::@3/(signed byte) $1e ) + [34] *((const byte*) BORDERCOL) ← (byte) 6 + [35] (signed byte) mulf8s::a#0 ← (signed byte) loop::r#2 + [36] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) loop::a#2) + [37] call mulf8s + [38] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 + to:loop::@11 +loop::@11: scope:[loop] from loop::@4 + [39] (signed word~) loop::$1 ← (signed word) mulf8s::return#2 + [40] (signed word~) loop::$2 ← (signed word~) loop::$1 << (byte) 1 + [41] (signed word) loop::x#0 ← (signed word~) loop::$2 + (signed word)(number) $7d*(number) $100 + [42] (byte~) loop::$4 ← > (signed word) loop::x#0 + [43] (byte~) loop::$20 ← (byte) loop::i#2 << (byte) 1 + [44] *((const word*) PLEX_XPOS + (byte~) loop::$20) ← (byte~) loop::$4 + [45] (signed byte) mulf8s::a#1 ← (signed byte) loop::r#2 + [46] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) loop::a#2) + [47] call mulf8s + [48] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 + to:loop::@12 +loop::@12: scope:[loop] from loop::@11 + [49] (signed word~) loop::$5 ← (signed word) mulf8s::return#3 + [50] (signed word~) loop::$6 ← (signed word~) loop::$5 << (byte) 1 + [51] (signed word) loop::y#0 ← (signed word~) loop::$6 + (signed word)(number) $7d*(number) $100 + [52] (byte~) loop::$8 ← > (signed word) loop::y#0 + [53] *((const byte*) PLEX_YPOS + (byte) loop::i#2) ← (byte~) loop::$8 + [54] (byte) loop::a#1 ← (byte) loop::a#2 + (byte) $62 + [55] (signed byte) loop::r#1 ← (signed byte) loop::r#2 + (signed byte) 3 + [56] (byte) loop::i#1 ← ++ (byte) loop::i#2 + [57] if((byte) loop::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto loop::@4 + to:loop::@5 +loop::@5: scope:[loop] from loop::@12 + [58] *((const byte*) BORDERCOL) ← (byte) 3 + [59] call plexSort + to:loop::@13 +loop::@13: scope:[loop] from loop::@5 + [60] (byte) loop::angle#1 ← (byte) loop::angle#6 + (byte) 3 + [61] *((const byte*) BORDERCOL) ← (const byte) BLACK + to:loop::@6 +loop::@6: scope:[loop] from loop::@13 loop::@6 + [62] (byte~) loop::$11 ← *((const byte*) D011) & (const byte) VIC_RST8 + [63] if((byte~) loop::$11!=(byte) 0) goto loop::@6 + to:loop::@7 +loop::@7: scope:[loop] from loop::@14 loop::@6 + [64] (byte) loop::i1#5 ← phi( loop::@6/(byte) 0 loop::@14/(byte) loop::i1#1 ) + [64] (byte) plex_sprite_msb#43 ← phi( loop::@6/(byte) 1 loop::@14/(byte) plex_sprite_msb#16 ) + [64] (byte) plex_show_idx#43 ← phi( loop::@6/(byte) 0 loop::@14/(byte) plex_show_idx#15 ) + [64] (byte) plex_sprite_idx#43 ← phi( loop::@6/(byte) 0 loop::@14/(byte) plex_sprite_idx#15 ) + [64] (byte) plex_free_next#17 ← phi( loop::@6/(byte) 0 loop::@14/(byte) plex_free_next#13 ) + [65] *((const byte*) BORDERCOL) ← (const byte) BLACK + to:loop::plexFreeNextYpos1 +loop::plexFreeNextYpos1: scope:[loop] from loop::@7 + [66] (byte) loop::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next#17) + to:loop::@8 +loop::@8: scope:[loop] from loop::@8 loop::plexFreeNextYpos1 + [67] if(*((const byte*) RASTER)<(byte) loop::plexFreeNextYpos1_return#0) goto loop::@8 + to:loop::@9 +loop::@9: scope:[loop] from loop::@8 + [68] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) + [69] call plexShowSprite + to:loop::@14 +loop::@14: scope:[loop] from loop::@9 + [70] (byte) loop::i1#1 ← ++ (byte) loop::i1#5 + [71] if((byte) loop::i1#1!=(const byte) PLEX_COUNT-(byte) 1+(byte) 1) goto loop::@7 + to:loop::@10 +loop::@10: scope:[loop] from loop::@14 + [72] *((const byte*) BORDERCOL) ← (const byte) BLACK + [73] call keyboard_key_pressed + [74] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 + to:loop::@15 +loop::@15: scope:[loop] from loop::@10 + [75] (byte~) loop::$18 ← (byte) keyboard_key_pressed::return#3 + [76] if((byte) 0!=(byte~) loop::$18) goto loop::@return + to:loop::@1 +loop::@return: scope:[loop] from loop::@15 + [77] return + to:@return + +(void()) plexShowSprite() +plexShowSprite: scope:[plexShowSprite] from loop::@9 + [78] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#43 << (byte) 1 + [79] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43)) + [80] *((const byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + to:plexShowSprite::plexFreeAdd1 +plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite + [81] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 + [82] *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next#17) ← (byte~) plexShowSprite::plexFreeAdd1_$0 + [83] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (byte) plex_free_next#17 + (byte) 1 + [84] (byte) plex_free_next#13 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 + to:plexShowSprite::@4 +plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 + [85] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#43) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43)) + [86] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43) + [87] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 + [88] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) + [89] *((const byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 + [90] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) + [91] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 + to:plexShowSprite::@3 +plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@4 + [92] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb#43 + [93] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 + to:plexShowSprite::@2 +plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3 + [94] (byte~) plexShowSprite::$5 ← (byte) plex_sprite_idx#43 + (byte) 1 + [95] (byte) plex_sprite_idx#15 ← (byte~) plexShowSprite::$5 & (byte) 7 + [96] (byte) plex_show_idx#15 ← ++ (byte) plex_show_idx#43 + [97] (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#43 << (byte) 1 + [98] if((byte) plex_sprite_msb#3!=(byte) 0) goto plexShowSprite::@5 + to:plexShowSprite::@return +plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::@2 + [99] phi() + to:plexShowSprite::@return +plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@5 + [100] (byte) plex_sprite_msb#16 ← phi( plexShowSprite::@5/(byte) plex_sprite_msb#3 plexShowSprite::@2/(byte) 1 ) + [101] return + to:@return +plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@4 + [102] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) plex_sprite_msb#43 + to:plexShowSprite::@2 + +(void()) plexSort() +plexSort: scope:[plexSort] from loop::@5 + [103] phi() + to:plexSort::@1 +plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 + [104] (byte) plexSort::m#2 ← phi( plexSort/(byte) 0 plexSort::@2/(byte) plexSort::m#1 ) + [105] (byte) plexSort::nxt_idx#0 ← *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::m#2) + [106] (byte) plexSort::nxt_y#0 ← *((const byte*) PLEX_YPOS + (byte) plexSort::nxt_idx#0) + [107] if((byte) plexSort::nxt_y#0>=*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2))) goto plexSort::@2 + to:plexSort::@5 +plexSort::@5: scope:[plexSort] from plexSort::@1 + [108] (byte) plexSort::s#6 ← (byte) plexSort::m#2 + to:plexSort::@3 +plexSort::@3: scope:[plexSort] from plexSort::@5 plexSort::@6 + [109] (byte) plexSort::s#3 ← phi( plexSort::@6/(byte) plexSort::s#1 plexSort::@5/(byte) plexSort::s#6 ) + [110] *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::s#3) ← *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#3) + [111] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 + [112] if((byte) plexSort::s#1==(byte) $ff) goto plexSort::@4 + to:plexSort::@6 +plexSort::@6: scope:[plexSort] from plexSort::@3 + [113] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 + to:plexSort::@4 +plexSort::@4: scope:[plexSort] from plexSort::@3 plexSort::@6 + [114] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 + [115] *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 + to:plexSort::@2 +plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@4 + [116] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 + [117] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT-(byte) 2+(byte) 1) goto plexSort::@1 + to:plexSort::plexFreePrepare1 +plexSort::plexFreePrepare1: scope:[plexSort] from plexSort::@2 + [118] phi() + to:plexSort::plexFreePrepare1_@1 +plexSort::plexFreePrepare1_@1: scope:[plexSort] from plexSort::plexFreePrepare1 plexSort::plexFreePrepare1_@1 + [119] (byte) plexSort::plexFreePrepare1_s#2 ← phi( plexSort::plexFreePrepare1/(byte) 0 plexSort::plexFreePrepare1_@1/(byte) plexSort::plexFreePrepare1_s#1 ) + [120] *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 + [121] (byte) plexSort::plexFreePrepare1_s#1 ← ++ (byte) plexSort::plexFreePrepare1_s#2 + [122] if((byte) plexSort::plexFreePrepare1_s#1!=(byte) 8) goto plexSort::plexFreePrepare1_@1 + to:plexSort::@return +plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@1 + [123] return + to:@return + +(signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) +mulf8s: scope:[mulf8s] from loop::@11 loop::@4 + [124] (signed byte) mulf8s::b#2 ← phi( loop::@11/(signed byte) mulf8s::b#1 loop::@4/(signed byte) mulf8s::b#0 ) + [124] (signed byte) mulf8s::mulf8s_prepare1_a#0 ← phi( loop::@11/(signed byte) mulf8s::a#1 loop::@4/(signed byte) mulf8s::a#0 ) + to:mulf8s::mulf8s_prepare1 +mulf8s::mulf8s_prepare1: scope:[mulf8s] from mulf8s + [125] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 + [126] call mulf8u_prepare + to:mulf8s::@1 +mulf8s::@1: scope:[mulf8s] from mulf8s::mulf8s_prepare1 + [127] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 + [128] call mulf8s_prepared + to:mulf8s::@2 +mulf8s::@2: scope:[mulf8s] from mulf8s::@1 + [129] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 + to:mulf8s::@return +mulf8s::@return: scope:[mulf8s] from mulf8s::@2 + [130] return + to:@return + +(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) +mulf8s_prepared: scope:[mulf8s_prepared] from mulf8s::@1 + [131] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 + [132] call mulf8u_prepared + [133] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + to:mulf8s_prepared::@5 +mulf8s_prepared::@5: scope:[mulf8s_prepared] from mulf8s_prepared + [134] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 + [135] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 + to:mulf8s_prepared::@3 +mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@5 + [136] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 + [137] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 + [138] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 + to:mulf8s_prepared::@1 +mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@5 + [139] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 ) + [140] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 + to:mulf8s_prepared::@4 +mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1 + [141] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 + [142] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) + [143] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 + to:mulf8s_prepared::@2 +mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4 + [144] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 ) + to:mulf8s_prepared::@return +mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2 + [145] return + to:@return + +(word()) mulf8u_prepared((byte) mulf8u_prepared::b) +mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared + [146] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 + asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } + [148] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) + to:mulf8u_prepared::@return +mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared + [149] return + to:@return + +(void()) mulf8u_prepare((byte) mulf8u_prepare::a) +mulf8u_prepare: scope:[mulf8u_prepare] from mulf8s::mulf8s_prepare1 + [150] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 + asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } + to:mulf8u_prepare::@return +mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare + [152] return + to:@return + +(void()) init() +init: scope:[init] from main + [153] *((const byte*) D011) ← (const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 + [154] call plexInit + to:init::@1 +init::@1: scope:[init] from init init::@1 + [155] (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init/(byte) 0 ) + [156] *((const byte*) PLEX_PTR + (byte) init::i#2) ← (byte)(const byte*) SPRITE/(byte) $40 + [157] (byte~) init::$10 ← (byte) init::i#2 << (byte) 2 + [158] (byte~) init::$3 ← (byte~) init::$10 + (byte) init::i#2 + [159] (byte~) init::$4 ← (byte) $18 + (byte~) init::$3 + [160] (byte~) init::$9 ← (byte) init::i#2 << (byte) 1 + [161] *((const word*) PLEX_XPOS + (byte~) init::$9) ← (byte~) init::$4 + [162] (byte~) init::$5 ← (byte) init::i#2 << (byte) 3 + [163] (byte~) init::$6 ← (byte) $32 + (byte~) init::$5 + [164] *((const byte*) PLEX_YPOS + (byte) init::i#2) ← (byte~) init::$6 + [165] (byte) init::i#1 ← ++ (byte) init::i#2 + [166] if((byte) init::i#1!=(const byte) PLEX_COUNT-(byte) 1+(byte) 1) goto init::@1 + to:init::@2 +init::@2: scope:[init] from init::@1 + [167] *((const byte*) SPRITES_ENABLE) ← (byte) $ff + to:init::@3 +init::@3: scope:[init] from init::@2 init::@3 + [168] (byte) init::i1#2 ← phi( init::@2/(byte) 0 init::@3/(byte) init::i1#1 ) + [169] *((const byte*) SPRITES_COLS + (byte) init::i1#2) ← (const byte) GREEN + [170] (byte) init::i1#1 ← ++ (byte) init::i1#2 + [171] if((byte) init::i1#1!=(byte) 8) goto init::@3 + to:init::@4 +init::@4: scope:[init] from init::@3 + [172] phi() + [173] call mulf_init + to:init::@5 +init::@5: scope:[init] from init::@4 + [174] phi() + [175] call memset + to:init::@return +init::@return: scope:[init] from init::@5 + [176] return + to:@return + +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +memset: scope:[memset] from init::@5 + [177] phi() + to:memset::@1 +memset::@1: scope:[memset] from memset memset::@2 + [178] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) + [179] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 + to:memset::@return +memset::@return: scope:[memset] from memset::@1 + [180] return + to:@return +memset::@2: scope:[memset] from memset::@1 + [181] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [182] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + to:memset::@1 + +(void()) mulf_init() +mulf_init: scope:[mulf_init] from init::@4 + [183] phi() + to:mulf_init::@1 +mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 + [184] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) + [184] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) + [184] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [184] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) + [184] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) + [185] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 + to:mulf_init::@5 +mulf_init::@5: scope:[mulf_init] from mulf_init::@1 mulf_init::@8 + [186] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) + [186] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi ) + [186] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) + [186] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo ) + [187] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 + to:mulf_init::@7 +mulf_init::@7: scope:[mulf_init] from mulf_init::@5 + [188] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) + [189] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) + to:mulf_init::@return +mulf_init::@return: scope:[mulf_init] from mulf_init::@7 + [190] return + to:@return +mulf_init::@6: scope:[mulf_init] from mulf_init::@5 + [191] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) + [192] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) + [193] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 + [194] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 + [195] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 + to:mulf_init::@8 +mulf_init::@9: scope:[mulf_init] from mulf_init::@6 + [196] phi() + to:mulf_init::@8 +mulf_init::@8: scope:[mulf_init] from mulf_init::@6 mulf_init::@9 + [197] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) + [198] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 + to:mulf_init::@5 +mulf_init::@2: scope:[mulf_init] from mulf_init::@1 + [199] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 + [200] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 + [201] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 + to:mulf_init::@4 +mulf_init::@4: scope:[mulf_init] from mulf_init::@2 + [202] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 + [203] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 + to:mulf_init::@3 +mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4 + [204] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) + [204] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) + [205] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 + [206] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 + [207] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 + [208] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 + [209] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 + [210] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 + [211] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 + to:mulf_init::@1 + +(void()) plexInit((byte*) plexInit::screen) +plexInit: scope:[plexInit] from init + [212] phi() + to:plexInit::plexSetScreen1 +plexInit::plexSetScreen1: scope:[plexInit] from plexInit + [213] phi() + to:plexInit::@1 +plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1 + [214] (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::plexSetScreen1/(byte) 0 ) + [215] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 + [216] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 + [217] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1 + to:plexInit::@return +plexInit::@return: scope:[plexInit] from plexInit::@1 + [218] return + to:@return + + +VARIABLE REGISTER WEIGHTS +(byte*) PLEX_SCREEN_PTR +(void()) exit() +(byte~) exit::$0 22.0 +(void()) init() +(byte~) init::$10 22.0 +(byte~) init::$3 22.0 +(byte~) init::$4 11.0 +(byte~) init::$5 22.0 +(byte~) init::$6 22.0 +(byte~) init::$9 22.0 +(byte) init::i +(byte) init::i#1 16.5 +(byte) init::i#2 8.799999999999999 +(byte) init::i1 +(byte) init::i1#1 16.5 +(byte) init::i1#2 16.5 +(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 6.0 +(byte) keyboard_key_pressed::return#2 22.0 +(byte) keyboard_key_pressed::return#3 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()) loop() +(signed word~) loop::$1 202.0 +(byte~) loop::$11 202.0 +(byte~) loop::$18 22.0 +(signed word~) loop::$2 202.0 +(byte~) loop::$20 202.0 +(byte~) loop::$4 101.0 +(signed word~) loop::$5 202.0 +(signed word~) loop::$6 202.0 +(byte~) loop::$8 202.0 +(byte) loop::a +(byte) loop::a#1 50.5 +(byte) loop::a#2 19.761904761904763 +(byte) loop::a#6 22.0 +(byte) loop::angle +(byte) loop::angle#1 1.2941176470588236 +(byte) loop::angle#6 1.064516129032258 +(byte) loop::i +(byte) loop::i#1 151.5 +(byte) loop::i#2 17.565217391304348 +(byte) loop::i1 +(byte) loop::i1#1 151.5 +(byte) loop::i1#5 33.666666666666664 +(byte) loop::plexFreeNextYpos1_return +(byte) loop::plexFreeNextYpos1_return#0 551.0 +(signed byte) loop::r +(signed byte) loop::r#1 67.33333333333333 +(signed byte) loop::r#2 18.363636363636363 +(byte) loop::rasterY +(signed word) loop::x +(signed word) loop::x#0 202.0 +(signed word) loop::y +(signed word) loop::y#0 202.0 +(void()) main() +(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::end +(word) memset::num +(void*) memset::return +(void*) memset::str +(signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) +(signed byte) mulf8s::a +(signed byte) mulf8s::a#0 101.0 +(signed byte) mulf8s::a#1 101.0 +(signed byte) mulf8s::b +(signed byte) mulf8s::b#0 202.0 +(signed byte) mulf8s::b#1 202.0 +(signed byte) mulf8s::b#2 68.0 +(signed byte) mulf8s::mulf8s_prepare1_a +(signed byte) mulf8s::mulf8s_prepare1_a#0 202.0 +(signed word) mulf8s::return +(signed word) mulf8s::return#0 51.0 +(signed word) mulf8s::return#2 202.0 +(signed word) mulf8s::return#3 202.0 +(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) +(byte~) mulf8s_prepared::$12 4.0 +(byte~) mulf8s_prepared::$15 4.0 +(byte~) mulf8s_prepared::$16 4.0 +(byte~) mulf8s_prepared::$8 4.0 +(signed byte) mulf8s_prepared::b +(signed byte) mulf8s_prepared::b#0 0.4 +(word) mulf8s_prepared::m +(word) mulf8s_prepared::m#0 2.0 +(word) mulf8s_prepared::m#1 4.0 +(word) mulf8s_prepared::m#2 4.0 +(word) mulf8s_prepared::m#4 1.3333333333333333 +(word) mulf8s_prepared::m#5 2.5 +(signed word) mulf8s_prepared::return +(void()) mulf8u_prepare((byte) mulf8u_prepare::a) +(byte) mulf8u_prepare::a +(byte) mulf8u_prepare::a#0 4.0 +(word()) mulf8u_prepared((byte) mulf8u_prepared::b) +(byte) mulf8u_prepared::b +(byte) mulf8u_prepared::b#0 4.0 +(word) mulf8u_prepared::return +(word) mulf8u_prepared::return#0 1.3333333333333333 +(word) mulf8u_prepared::return#2 4.0 +(void()) mulf_init() +(byte~) mulf_init::$1 22.0 +(byte~) mulf_init::$4 22.0 +(byte~) mulf_init::$5 22.0 +(byte) mulf_init::c +(byte) mulf_init::c#1 2.5384615384615383 +(byte) mulf_init::c#2 11.0 +(byte) mulf_init::dir +(byte) mulf_init::dir#2 4.125 +(byte) mulf_init::dir#4 11.0 +(word) mulf_init::sqr +(word) mulf_init::sqr#1 11.0 +(word) mulf_init::sqr#2 22.0 +(word) mulf_init::sqr#3 9.166666666666666 +(word) mulf_init::sqr#4 5.5 +(byte*) mulf_init::sqr1_hi +(byte*) mulf_init::sqr1_hi#1 7.333333333333333 +(byte*) mulf_init::sqr1_hi#2 2.75 +(byte*) mulf_init::sqr1_lo +(byte*) mulf_init::sqr1_lo#1 22.0 +(byte*) mulf_init::sqr1_lo#2 3.142857142857143 +(byte*) mulf_init::sqr2_hi +(byte*) mulf_init::sqr2_hi#1 3.6666666666666665 +(byte*) mulf_init::sqr2_hi#2 8.25 +(byte*) mulf_init::sqr2_lo +(byte*) mulf_init::sqr2_lo#1 22.0 +(byte*) mulf_init::sqr2_lo#2 4.888888888888889 +(byte) mulf_init::x_2 +(byte) mulf_init::x_2#1 11.0 +(byte) mulf_init::x_2#2 5.5 +(byte) mulf_init::x_2#3 6.6000000000000005 +(byte) mulf_init::x_255 +(byte) mulf_init::x_255#1 6.6000000000000005 +(byte) mulf_init::x_255#2 8.8 +(void()) plexInit((byte*) plexInit::screen) +(byte) plexInit::i +(byte) plexInit::i#1 16.5 +(byte) plexInit::i#2 22.0 +(byte*) plexInit::plexSetScreen1_screen +(byte*) plexInit::screen +(void()) plexShowSprite() +(byte~) plexShowSprite::$11 2.0 +(byte~) plexShowSprite::$2 4.0 +(byte~) plexShowSprite::$3 4.0 +(byte~) plexShowSprite::$5 4.0 +(byte~) plexShowSprite::$9 4.0 +(byte~) plexShowSprite::plexFreeAdd1_$0 4.0 +(byte~) plexShowSprite::plexFreeAdd1_$1 4.0 +(byte) plexShowSprite::plexFreeAdd1_ypos +(byte) plexShowSprite::plexFreeAdd1_ypos#0 3.0 +(byte) plexShowSprite::plex_sprite_idx2 +(byte) plexShowSprite::plex_sprite_idx2#0 0.5454545454545454 +(byte) plexShowSprite::xpos_idx +(byte) plexShowSprite::xpos_idx#0 4.0 +(byte) plexShowSprite::ypos +(void()) plexSort() +(byte) plexSort::m +(byte) plexSort::m#1 151.5 +(byte) plexSort::m#2 42.08333333333333 +(byte) plexSort::nxt_idx +(byte) plexSort::nxt_idx#0 30.299999999999997 +(byte) plexSort::nxt_y +(byte) plexSort::nxt_y#0 150.375 +(byte) plexSort::plexFreePrepare1_s +(byte) plexSort::plexFreePrepare1_s#1 151.5 +(byte) plexSort::plexFreePrepare1_s#2 151.5 +(byte) plexSort::s +(byte) plexSort::s#1 1368.3333333333335 +(byte) plexSort::s#2 202.0 +(byte) plexSort::s#3 2052.5 +(byte) plexSort::s#6 202.0 +(byte) plex_free_next +(byte) plex_free_next#13 4.681818181818182 +(byte) plex_free_next#17 20.599999999999998 +(byte) plex_show_idx +(byte) plex_show_idx#15 11.444444444444443 +(byte) plex_show_idx#43 4.541666666666665 +(byte) plex_sprite_idx +(byte) plex_sprite_idx#15 10.299999999999999 +(byte) plex_sprite_idx#43 4.863636363636363 +(byte) plex_sprite_msb +(byte) plex_sprite_msb#16 20.599999999999998 +(byte) plex_sprite_msb#3 2.0 +(byte) plex_sprite_msb#43 4.28 + +Initial phi equivalence classes +[ loop::angle#6 loop::angle#1 ] +[ loop::r#2 loop::r#1 ] +[ loop::a#2 loop::a#1 loop::a#6 ] +[ loop::i#2 loop::i#1 ] +[ plex_free_next#17 plex_free_next#13 ] +[ plex_sprite_idx#43 plex_sprite_idx#15 ] +[ plex_show_idx#43 plex_show_idx#15 ] +[ plex_sprite_msb#43 plex_sprite_msb#16 plex_sprite_msb#3 ] +[ loop::i1#5 loop::i1#1 ] +[ plexSort::m#2 plexSort::m#1 ] +[ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +[ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +[ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] +[ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] +[ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] +[ init::i#2 init::i#1 ] +[ init::i1#2 init::i1#1 ] +[ memset::dst#2 memset::dst#1 ] +[ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] +[ mulf_init::c#2 mulf_init::c#1 ] +[ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +[ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +[ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] +[ mulf_init::x_255#2 mulf_init::x_255#1 ] +[ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] +[ mulf_init::dir#2 mulf_init::dir#4 ] +[ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] +[ plexInit::i#2 plexInit::i#1 ] +Added variable keyboard_key_pressed::return#2 to zero page equivalence class [ keyboard_key_pressed::return#2 ] +Added variable exit::$0 to zero page equivalence class [ exit::$0 ] +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 mulf8s::return#2 to zero page equivalence class [ mulf8s::return#2 ] +Added variable loop::$1 to zero page equivalence class [ loop::$1 ] +Added variable loop::$2 to zero page equivalence class [ loop::$2 ] +Added variable loop::x#0 to zero page equivalence class [ loop::x#0 ] +Added variable loop::$4 to zero page equivalence class [ loop::$4 ] +Added variable loop::$20 to zero page equivalence class [ loop::$20 ] +Added variable mulf8s::return#3 to zero page equivalence class [ mulf8s::return#3 ] +Added variable loop::$5 to zero page equivalence class [ loop::$5 ] +Added variable loop::$6 to zero page equivalence class [ loop::$6 ] +Added variable loop::y#0 to zero page equivalence class [ loop::y#0 ] +Added variable loop::$8 to zero page equivalence class [ loop::$8 ] +Added variable loop::$11 to zero page equivalence class [ loop::$11 ] +Added variable loop::plexFreeNextYpos1_return#0 to zero page equivalence class [ loop::plexFreeNextYpos1_return#0 ] +Added variable keyboard_key_pressed::return#3 to zero page equivalence class [ keyboard_key_pressed::return#3 ] +Added variable loop::$18 to zero page equivalence class [ loop::$18 ] +Added variable plexShowSprite::plex_sprite_idx2#0 to zero page equivalence class [ plexShowSprite::plex_sprite_idx2#0 ] +Added variable plexShowSprite::plexFreeAdd1_ypos#0 to zero page equivalence class [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Added variable plexShowSprite::plexFreeAdd1_$0 to zero page equivalence class [ plexShowSprite::plexFreeAdd1_$0 ] +Added variable plexShowSprite::plexFreeAdd1_$1 to zero page equivalence class [ plexShowSprite::plexFreeAdd1_$1 ] +Added variable plexShowSprite::xpos_idx#0 to zero page equivalence class [ plexShowSprite::xpos_idx#0 ] +Added variable plexShowSprite::$11 to zero page equivalence class [ plexShowSprite::$11 ] +Added variable plexShowSprite::$2 to zero page equivalence class [ plexShowSprite::$2 ] +Added variable plexShowSprite::$3 to zero page equivalence class [ plexShowSprite::$3 ] +Added variable plexShowSprite::$9 to zero page equivalence class [ plexShowSprite::$9 ] +Added variable plexShowSprite::$5 to zero page equivalence class [ plexShowSprite::$5 ] +Added variable plexSort::nxt_idx#0 to zero page equivalence class [ plexSort::nxt_idx#0 ] +Added variable plexSort::nxt_y#0 to zero page equivalence class [ plexSort::nxt_y#0 ] +Added variable plexSort::s#2 to zero page equivalence class [ plexSort::s#2 ] +Added variable mulf8u_prepare::a#0 to zero page equivalence class [ mulf8u_prepare::a#0 ] +Added variable mulf8s_prepared::b#0 to zero page equivalence class [ mulf8s_prepared::b#0 ] +Added variable mulf8s::return#0 to zero page equivalence class [ mulf8s::return#0 ] +Added variable mulf8u_prepared::b#0 to zero page equivalence class [ mulf8u_prepared::b#0 ] +Added variable mulf8u_prepared::return#2 to zero page equivalence class [ mulf8u_prepared::return#2 ] +Added variable mulf8s_prepared::$8 to zero page equivalence class [ mulf8s_prepared::$8 ] +Added variable mulf8s_prepared::$15 to zero page equivalence class [ mulf8s_prepared::$15 ] +Added variable mulf8s_prepared::$12 to zero page equivalence class [ mulf8s_prepared::$12 ] +Added variable mulf8s_prepared::$16 to zero page equivalence class [ mulf8s_prepared::$16 ] +Added variable mulf8u_prepared::return#0 to zero page equivalence class [ mulf8u_prepared::return#0 ] +Added variable init::$10 to zero page equivalence class [ init::$10 ] +Added variable init::$3 to zero page equivalence class [ init::$3 ] +Added variable init::$4 to zero page equivalence class [ init::$4 ] +Added variable init::$9 to zero page equivalence class [ init::$9 ] +Added variable init::$5 to zero page equivalence class [ init::$5 ] +Added variable init::$6 to zero page equivalence class [ init::$6 ] +Added variable mulf_init::$1 to zero page equivalence class [ mulf_init::$1 ] +Added variable mulf_init::$4 to zero page equivalence class [ mulf_init::$4 ] +Added variable mulf_init::$5 to zero page equivalence class [ mulf_init::$5 ] +Complete equivalence classes +[ loop::angle#6 loop::angle#1 ] +[ loop::r#2 loop::r#1 ] +[ loop::a#2 loop::a#1 loop::a#6 ] +[ loop::i#2 loop::i#1 ] +[ plex_free_next#17 plex_free_next#13 ] +[ plex_sprite_idx#43 plex_sprite_idx#15 ] +[ plex_show_idx#43 plex_show_idx#15 ] +[ plex_sprite_msb#43 plex_sprite_msb#16 plex_sprite_msb#3 ] +[ loop::i1#5 loop::i1#1 ] +[ plexSort::m#2 plexSort::m#1 ] +[ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +[ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +[ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] +[ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] +[ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] +[ init::i#2 init::i#1 ] +[ init::i1#2 init::i1#1 ] +[ memset::dst#2 memset::dst#1 ] +[ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] +[ mulf_init::c#2 mulf_init::c#1 ] +[ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +[ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +[ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] +[ mulf_init::x_255#2 mulf_init::x_255#1 ] +[ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] +[ mulf_init::dir#2 mulf_init::dir#4 ] +[ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] +[ plexInit::i#2 plexInit::i#1 ] +[ keyboard_key_pressed::return#2 ] +[ exit::$0 ] +[ keyboard_matrix_read::return#2 ] +[ keyboard_key_pressed::$2 ] +[ keyboard_key_pressed::return#0 ] +[ keyboard_matrix_read::return#0 ] +[ mulf8s::return#2 ] +[ loop::$1 ] +[ loop::$2 ] +[ loop::x#0 ] +[ loop::$4 ] +[ loop::$20 ] +[ mulf8s::return#3 ] +[ loop::$5 ] +[ loop::$6 ] +[ loop::y#0 ] +[ loop::$8 ] +[ loop::$11 ] +[ loop::plexFreeNextYpos1_return#0 ] +[ keyboard_key_pressed::return#3 ] +[ loop::$18 ] +[ plexShowSprite::plex_sprite_idx2#0 ] +[ plexShowSprite::plexFreeAdd1_ypos#0 ] +[ plexShowSprite::plexFreeAdd1_$0 ] +[ plexShowSprite::plexFreeAdd1_$1 ] +[ plexShowSprite::xpos_idx#0 ] +[ plexShowSprite::$11 ] +[ plexShowSprite::$2 ] +[ plexShowSprite::$3 ] +[ plexShowSprite::$9 ] +[ plexShowSprite::$5 ] +[ plexSort::nxt_idx#0 ] +[ plexSort::nxt_y#0 ] +[ plexSort::s#2 ] +[ mulf8u_prepare::a#0 ] +[ mulf8s_prepared::b#0 ] +[ mulf8s::return#0 ] +[ mulf8u_prepared::b#0 ] +[ mulf8u_prepared::return#2 ] +[ mulf8s_prepared::$8 ] +[ mulf8s_prepared::$15 ] +[ mulf8s_prepared::$12 ] +[ mulf8s_prepared::$16 ] +[ mulf8u_prepared::return#0 ] +[ init::$10 ] +[ init::$3 ] +[ init::$4 ] +[ init::$9 ] +[ init::$5 ] +[ init::$6 ] +[ mulf_init::$1 ] +[ mulf_init::$4 ] +[ mulf_init::$5 ] +Allocated zp[1]:2 [ loop::angle#6 loop::angle#1 ] +Allocated zp[1]:3 [ loop::r#2 loop::r#1 ] +Allocated zp[1]:4 [ loop::a#2 loop::a#1 loop::a#6 ] +Allocated zp[1]:5 [ loop::i#2 loop::i#1 ] +Allocated zp[1]:6 [ plex_free_next#17 plex_free_next#13 ] +Allocated zp[1]:7 [ plex_sprite_idx#43 plex_sprite_idx#15 ] +Allocated zp[1]:8 [ plex_show_idx#43 plex_show_idx#15 ] +Allocated zp[1]:9 [ plex_sprite_msb#43 plex_sprite_msb#16 plex_sprite_msb#3 ] +Allocated zp[1]:10 [ loop::i1#5 loop::i1#1 ] +Allocated zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] +Allocated zp[1]:12 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +Allocated zp[1]:13 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +Allocated zp[1]:14 [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] +Allocated zp[1]:15 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] +Allocated zp[2]:16 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] +Allocated zp[1]:18 [ init::i#2 init::i#1 ] +Allocated zp[1]:19 [ init::i1#2 init::i1#1 ] +Allocated zp[2]:20 [ memset::dst#2 memset::dst#1 ] +Allocated zp[2]:22 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] +Allocated zp[1]:24 [ mulf_init::c#2 mulf_init::c#1 ] +Allocated zp[2]:25 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Allocated zp[1]:27 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Allocated zp[2]:28 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] +Allocated zp[1]:30 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Allocated zp[2]:31 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] +Allocated zp[1]:33 [ mulf_init::dir#2 mulf_init::dir#4 ] +Allocated zp[2]:34 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] +Allocated zp[1]:36 [ plexInit::i#2 plexInit::i#1 ] +Allocated zp[1]:37 [ keyboard_key_pressed::return#2 ] +Allocated zp[1]:38 [ exit::$0 ] +Allocated zp[1]:39 [ keyboard_matrix_read::return#2 ] +Allocated zp[1]:40 [ keyboard_key_pressed::$2 ] +Allocated zp[1]:41 [ keyboard_key_pressed::return#0 ] +Allocated zp[1]:42 [ keyboard_matrix_read::return#0 ] +Allocated zp[2]:43 [ mulf8s::return#2 ] +Allocated zp[2]:45 [ loop::$1 ] +Allocated zp[2]:47 [ loop::$2 ] +Allocated zp[2]:49 [ loop::x#0 ] +Allocated zp[1]:51 [ loop::$4 ] +Allocated zp[1]:52 [ loop::$20 ] +Allocated zp[2]:53 [ mulf8s::return#3 ] +Allocated zp[2]:55 [ loop::$5 ] +Allocated zp[2]:57 [ loop::$6 ] +Allocated zp[2]:59 [ loop::y#0 ] +Allocated zp[1]:61 [ loop::$8 ] +Allocated zp[1]:62 [ loop::$11 ] +Allocated zp[1]:63 [ loop::plexFreeNextYpos1_return#0 ] +Allocated zp[1]:64 [ keyboard_key_pressed::return#3 ] +Allocated zp[1]:65 [ loop::$18 ] +Allocated zp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] +Allocated zp[1]:67 [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Allocated zp[1]:68 [ plexShowSprite::plexFreeAdd1_$0 ] +Allocated zp[1]:69 [ plexShowSprite::plexFreeAdd1_$1 ] +Allocated zp[1]:70 [ plexShowSprite::xpos_idx#0 ] +Allocated zp[1]:71 [ plexShowSprite::$11 ] +Allocated zp[1]:72 [ plexShowSprite::$2 ] +Allocated zp[1]:73 [ plexShowSprite::$3 ] +Allocated zp[1]:74 [ plexShowSprite::$9 ] +Allocated zp[1]:75 [ plexShowSprite::$5 ] +Allocated zp[1]:76 [ plexSort::nxt_idx#0 ] +Allocated zp[1]:77 [ plexSort::nxt_y#0 ] +Allocated zp[1]:78 [ plexSort::s#2 ] +Allocated zp[1]:79 [ mulf8u_prepare::a#0 ] +Allocated zp[1]:80 [ mulf8s_prepared::b#0 ] +Allocated zp[2]:81 [ mulf8s::return#0 ] +Allocated zp[1]:83 [ mulf8u_prepared::b#0 ] +Allocated zp[2]:84 [ mulf8u_prepared::return#2 ] +Allocated zp[1]:86 [ mulf8s_prepared::$8 ] +Allocated zp[1]:87 [ mulf8s_prepared::$15 ] +Allocated zp[1]:88 [ mulf8s_prepared::$12 ] +Allocated zp[1]:89 [ mulf8s_prepared::$16 ] +Allocated zp[2]:90 [ mulf8u_prepared::return#0 ] +Allocated zp[1]:92 [ init::$10 ] +Allocated zp[1]:93 [ init::$3 ] +Allocated zp[1]:94 [ init::$4 ] +Allocated zp[1]:95 [ init::$9 ] +Allocated zp[1]:96 [ init::$5 ] +Allocated zp[1]:97 [ init::$6 ] +Allocated zp[1]:98 [ mulf_init::$1 ] +Allocated zp[1]:99 [ mulf_init::$4 ] +Allocated zp[1]:100 [ mulf_init::$5 ] + +INITIAL ASM +Target platform is c64basic / MOS6502X + // File Comments +// Same animation using a multiplexer + // Upstart +.pc = $801 "Basic" +:BasicUpstart(__bbegin) +.pc = $80d "Program" + // Global Constants & labels + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label BORDERCOL = $d020 + .label SPRITES_COLS = $d027 + .label D011 = $d011 + .const VIC_RST8 = $80 + .const VIC_DEN = $10 + .const VIC_RSEL = 8 + // 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 + // The colors of the C64 + .const BLACK = 0 + .const GREEN = 5 + // The number of sprites in the multiplexer + .const PLEX_COUNT = $20 + .const KEY_SPACE = $3c + // The BASIC screen + .label SCREEN = $400 + // The number of BOBs to render + .const NUM_BOBS = $10 + .label COS = SIN+$40 + // The address of the sprite pointers on the current screen (screen+$3f8). + .label PLEX_SCREEN_PTR = SCREEN+$3f8 + // The MSB bit of the next sprite to use for showing + .label plex_sprite_msb = 9 + // The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown. + .label plex_free_next = 6 + // The index the next sprite to use for showing (sprites are used round-robin) + .label plex_sprite_idx = 7 + // The index in the PLEX tables of the next sprite to show + // Prepare for showing the sprites + .label plex_show_idx = 8 + // @begin +__bbegin: + // [1] phi from @begin to @1 [phi:@begin->@1] +__b1_from___bbegin: + jmp __b1 + // @1 +__b1: + // [2] call main + jsr main + // [3] phi from @1 to @end [phi:@1->@end] +__bend_from___b1: + jmp __bend + // @end +__bend: + // main +main: { + // asm { sei } + sei + // [5] call init + jsr init + // [6] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + jmp __b1 + // main::@1 + __b1: + // [7] call loop + // [28] phi from main::@1 to loop [phi:main::@1->loop] + loop_from___b1: + jsr loop + // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + __b2_from___b1: + jmp __b2 + // main::@2 + __b2: + // [9] call exit + // [12] phi from main::@2 to exit [phi:main::@2->exit] + exit_from___b2: + jsr exit + jmp __b3 + // main::@3 + __b3: + // asm { cli } + cli + jmp __breturn + // main::@return + __breturn: + // [11] return + rts +} + // exit +// Exit the program +exit: { + .label __0 = $26 + // [13] phi from exit exit::@2 to exit::@1 [phi:exit/exit::@2->exit::@1] + __b1_from_exit: + __b1_from___b2: + jmp __b1 + // Wait for space release + // exit::@1 + __b1: + // [14] call keyboard_key_pressed + // [19] phi from exit::@1 to keyboard_key_pressed [phi:exit::@1->keyboard_key_pressed] + keyboard_key_pressed_from___b1: + jsr keyboard_key_pressed + // [15] (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 __b2 + // exit::@2 + __b2: + // [16] (byte~) exit::$0 ← (byte) keyboard_key_pressed::return#2 -- vbuz1=vbuz2 + lda.z keyboard_key_pressed.return_1 + sta.z __0 + // [17] if((byte) 0!=(byte~) exit::$0) goto exit::@1 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp.z __0 + bne __b1_from___b2 + jmp __breturn + // exit::@return + __breturn: + // [18] 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 = $28 + .label return = $29 + .label return_1 = $25 + .label return_2 = $40 + // [20] call keyboard_matrix_read + jsr keyboard_matrix_read + // [21] (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: + // [22] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuz2 + lda.z keyboard_matrix_read.return_1 + sta.z __2 + // [23] (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: + // [24] 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 = $2a + .label return_1 = $27 + // [25] *((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 + // [26] (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: + // [27] return + rts +} + // loop +// The main loop +loop: { + .label __1 = $2d + .label __2 = $2f + .label __4 = $33 + .label __5 = $37 + .label __6 = $39 + .label __8 = $3d + .label __11 = $3e + .label __18 = $41 + .label __20 = $34 + .label x = $31 + .label y = $3b + .label a = 4 + .label r = 3 + .label i = 5 + // Render Rotated BOBs + .label angle = 2 + .label plexFreeNextYpos1_return = $3f + .label i1 = $a + // [29] phi from loop to loop::@1 [phi:loop->loop::@1] + __b1_from_loop: + // [29] phi (byte) loop::angle#6 = (byte) 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z angle + jmp __b1 + // loop::@1 + __b1: + jmp __b2 + // loop::@2 + __b2: + // [30] if(*((const byte*) RASTER)<(byte) $d8) goto loop::@2 -- _deref_pbuc1_lt_vbuc2_then_la1 + lda RASTER + cmp #$d8 + bcc __b2 + jmp __b3 + // loop::@3 + __b3: + // [31] *((const byte*) BORDERCOL) ← (byte) $f -- _deref_pbuc1=vbuc2 + lda #$f + sta BORDERCOL + // [32] (byte) loop::a#6 ← (byte) loop::angle#6 -- vbuz1=vbuz2 + lda.z angle + sta.z a + // [33] phi from loop::@3 to loop::@4 [phi:loop::@3->loop::@4] + __b4_from___b3: + // [33] phi (byte) loop::i#2 = (byte) 0 [phi:loop::@3->loop::@4#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // [33] phi (byte) loop::a#2 = (byte) loop::a#6 [phi:loop::@3->loop::@4#1] -- register_copy + // [33] phi (signed byte) loop::r#2 = (signed byte) $1e [phi:loop::@3->loop::@4#2] -- vbsz1=vbsc1 + lda #$1e + sta.z r + jmp __b4 + // [33] phi from loop::@12 to loop::@4 [phi:loop::@12->loop::@4] + __b4_from___b12: + // [33] phi (byte) loop::i#2 = (byte) loop::i#1 [phi:loop::@12->loop::@4#0] -- register_copy + // [33] phi (byte) loop::a#2 = (byte) loop::a#1 [phi:loop::@12->loop::@4#1] -- register_copy + // [33] phi (signed byte) loop::r#2 = (signed byte) loop::r#1 [phi:loop::@12->loop::@4#2] -- register_copy + jmp __b4 + // loop::@4 + __b4: + // [34] *((const byte*) BORDERCOL) ← (byte) 6 -- _deref_pbuc1=vbuc2 + //kickasm {{ .break }} + lda #6 + sta BORDERCOL + // [35] (signed byte) mulf8s::a#0 ← (signed byte) loop::r#2 -- vbsz1=vbsz2 + lda.z r + sta.z mulf8s.a + // [36] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) loop::a#2) -- vbsz1=pbsc1_derefidx_vbuz2 + ldy.z a + lda COS,y + sta.z mulf8s.b + // [37] call mulf8s + // [124] phi from loop::@4 to mulf8s [phi:loop::@4->mulf8s] + mulf8s_from___b4: + // [124] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#0 [phi:loop::@4->mulf8s#0] -- register_copy + // [124] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#0 [phi:loop::@4->mulf8s#1] -- register_copy + jsr mulf8s + // [38] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 -- vwsz1=vwsz2 + lda.z mulf8s.return + sta.z mulf8s.return_1 + lda.z mulf8s.return+1 + sta.z mulf8s.return_1+1 + jmp __b11 + // loop::@11 + __b11: + // [39] (signed word~) loop::$1 ← (signed word) mulf8s::return#2 -- vwsz1=vwsz2 + lda.z mulf8s.return_1 + sta.z __1 + lda.z mulf8s.return_1+1 + sta.z __1+1 + // [40] (signed word~) loop::$2 ← (signed word~) loop::$1 << (byte) 1 -- vwsz1=vwsz2_rol_1 + lda.z __1 + asl + sta.z __2 + lda.z __1+1 + rol + sta.z __2+1 + // [41] (signed word) loop::x#0 ← (signed word~) loop::$2 + (signed word)(number) $7d*(number) $100 -- vwsz1=vwsz2_plus_vwsc1 + lda.z __2 + clc + adc #<$7d*$100 + sta.z x + lda.z __2+1 + adc #>$7d*$100 + sta.z x+1 + // [42] (byte~) loop::$4 ← > (signed word) loop::x#0 -- vbuz1=_hi_vwsz2 + lda.z x+1 + sta.z __4 + // [43] (byte~) loop::$20 ← (byte) loop::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z i + asl + sta.z __20 + // [44] *((const word*) PLEX_XPOS + (byte~) loop::$20) ← (byte~) loop::$4 -- pwuc1_derefidx_vbuz1=vbuz2 + lda.z __20 + ldx.z __4 + tay + txa + sta PLEX_XPOS,y + // [45] (signed byte) mulf8s::a#1 ← (signed byte) loop::r#2 -- vbsz1=vbsz2 + lda.z r + sta.z mulf8s.a + // [46] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) loop::a#2) -- vbsz1=pbsc1_derefidx_vbuz2 + ldy.z a + lda SIN,y + sta.z mulf8s.b + // [47] call mulf8s + // [124] phi from loop::@11 to mulf8s [phi:loop::@11->mulf8s] + mulf8s_from___b11: + // [124] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#1 [phi:loop::@11->mulf8s#0] -- register_copy + // [124] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#1 [phi:loop::@11->mulf8s#1] -- register_copy + jsr mulf8s + // [48] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 -- vwsz1=vwsz2 + lda.z mulf8s.return + sta.z mulf8s.return_2 + lda.z mulf8s.return+1 + sta.z mulf8s.return_2+1 + jmp __b12 + // loop::@12 + __b12: + // [49] (signed word~) loop::$5 ← (signed word) mulf8s::return#3 -- vwsz1=vwsz2 + lda.z mulf8s.return_2 + sta.z __5 + lda.z mulf8s.return_2+1 + sta.z __5+1 + // [50] (signed word~) loop::$6 ← (signed word~) loop::$5 << (byte) 1 -- vwsz1=vwsz2_rol_1 + lda.z __5 + asl + sta.z __6 + lda.z __5+1 + rol + sta.z __6+1 + // [51] (signed word) loop::y#0 ← (signed word~) loop::$6 + (signed word)(number) $7d*(number) $100 -- vwsz1=vwsz2_plus_vwsc1 + lda.z __6 + clc + adc #<$7d*$100 + sta.z y + lda.z __6+1 + adc #>$7d*$100 + sta.z y+1 + // [52] (byte~) loop::$8 ← > (signed word) loop::y#0 -- vbuz1=_hi_vwsz2 + lda.z y+1 + sta.z __8 + // [53] *((const byte*) PLEX_YPOS + (byte) loop::i#2) ← (byte~) loop::$8 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z __8 + ldy.z i + sta PLEX_YPOS,y + // [54] (byte) loop::a#1 ← (byte) loop::a#2 + (byte) $62 -- vbuz1=vbuz1_plus_vbuc1 + lax.z a + axs #-[$62] + stx.z a + // [55] (signed byte) loop::r#1 ← (signed byte) loop::r#2 + (signed byte) 3 -- vbsz1=vbsz1_plus_vbsc1 + lax.z r + axs #-[3] + stx.z r + // [56] (byte) loop::i#1 ← ++ (byte) loop::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [57] if((byte) loop::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto loop::@4 -- vbuz1_neq_vbuc1_then_la1 + lda #NUM_BOBS-1+1 + cmp.z i + bne __b4_from___b12 + jmp __b5 + // loop::@5 + __b5: + // [58] *((const byte*) BORDERCOL) ← (byte) 3 -- _deref_pbuc1=vbuc2 + lda #3 + sta BORDERCOL + // [59] call plexSort + // [103] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + plexSort_from___b5: + jsr plexSort + jmp __b13 + // loop::@13 + __b13: + // [60] (byte) loop::angle#1 ← (byte) loop::angle#6 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + lax.z angle + axs #-[3] + stx.z angle + // [61] *((const byte*) BORDERCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 + lda #BLACK + sta BORDERCOL + jmp __b6 + // Sort the sprites by y-position + // loop::@6 + __b6: + // [62] (byte~) loop::$11 ← *((const byte*) D011) & (const byte) VIC_RST8 -- vbuz1=_deref_pbuc1_band_vbuc2 + lda #VIC_RST8 + and D011 + sta.z __11 + // [63] if((byte~) loop::$11!=(byte) 0) goto loop::@6 -- vbuz1_neq_0_then_la1 + lda.z __11 + cmp #0 + bne __b6 + // [64] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7] + __b7_from___b6: + // [64] phi (byte) loop::i1#5 = (byte) 0 [phi:loop::@6->loop::@7#0] -- vbuz1=vbuc1 + lda #0 + sta.z i1 + // [64] phi (byte) plex_sprite_msb#43 = (byte) 1 [phi:loop::@6->loop::@7#1] -- vbuz1=vbuc1 + lda #1 + sta.z plex_sprite_msb + // [64] phi (byte) plex_show_idx#43 = (byte) 0 [phi:loop::@6->loop::@7#2] -- vbuz1=vbuc1 + lda #0 + sta.z plex_show_idx + // [64] phi (byte) plex_sprite_idx#43 = (byte) 0 [phi:loop::@6->loop::@7#3] -- vbuz1=vbuc1 + lda #0 + sta.z plex_sprite_idx + // [64] phi (byte) plex_free_next#17 = (byte) 0 [phi:loop::@6->loop::@7#4] -- vbuz1=vbuc1 + lda #0 + sta.z plex_free_next + jmp __b7 + // Show the sprites + // [64] phi from loop::@14 to loop::@7 [phi:loop::@14->loop::@7] + __b7_from___b14: + // [64] phi (byte) loop::i1#5 = (byte) loop::i1#1 [phi:loop::@14->loop::@7#0] -- register_copy + // [64] phi (byte) plex_sprite_msb#43 = (byte) plex_sprite_msb#16 [phi:loop::@14->loop::@7#1] -- register_copy + // [64] phi (byte) plex_show_idx#43 = (byte) plex_show_idx#15 [phi:loop::@14->loop::@7#2] -- register_copy + // [64] phi (byte) plex_sprite_idx#43 = (byte) plex_sprite_idx#15 [phi:loop::@14->loop::@7#3] -- register_copy + // [64] phi (byte) plex_free_next#17 = (byte) plex_free_next#13 [phi:loop::@14->loop::@7#4] -- register_copy + jmp __b7 + // loop::@7 + __b7: + // [65] *((const byte*) BORDERCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 + lda #BLACK + sta BORDERCOL + jmp plexFreeNextYpos1 + // loop::plexFreeNextYpos1 + plexFreeNextYpos1: + // [66] (byte) loop::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next#17) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z plex_free_next + lda PLEX_FREE_YPOS,y + sta.z plexFreeNextYpos1_return + jmp __b8 + // loop::@8 + __b8: + // [67] if(*((const byte*) RASTER)<(byte) loop::plexFreeNextYpos1_return#0) goto loop::@8 -- _deref_pbuc1_lt_vbuz1_then_la1 + lda RASTER + cmp.z plexFreeNextYpos1_return + bcc __b8 + jmp __b9 + // loop::@9 + __b9: + // [68] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + // [69] call plexShowSprite + jsr plexShowSprite + jmp __b14 + // loop::@14 + __b14: + // [70] (byte) loop::i1#1 ← ++ (byte) loop::i1#5 -- vbuz1=_inc_vbuz1 + inc.z i1 + // [71] if((byte) loop::i1#1!=(const byte) PLEX_COUNT-(byte) 1+(byte) 1) goto loop::@7 -- vbuz1_neq_vbuc1_then_la1 + lda #PLEX_COUNT-1+1 + cmp.z i1 + bne __b7_from___b14 + jmp __b10 + // loop::@10 + __b10: + // [72] *((const byte*) BORDERCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 + lda #BLACK + sta BORDERCOL + // [73] call keyboard_key_pressed + // [19] phi from loop::@10 to keyboard_key_pressed [phi:loop::@10->keyboard_key_pressed] + keyboard_key_pressed_from___b10: + jsr keyboard_key_pressed + // [74] (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 __b15 + // loop::@15 + __b15: + // [75] (byte~) loop::$18 ← (byte) keyboard_key_pressed::return#3 -- vbuz1=vbuz2 + lda.z keyboard_key_pressed.return_2 + sta.z __18 + // [76] if((byte) 0!=(byte~) loop::$18) goto loop::@return -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp.z __18 + bne __breturn + // [29] phi from loop::@15 to loop::@1 [phi:loop::@15->loop::@1] + __b1_from___b15: + // [29] phi (byte) loop::angle#6 = (byte) loop::angle#1 [phi:loop::@15->loop::@1#0] -- register_copy + jmp __b1 + // loop::@return + __breturn: + // [77] return + rts +} + // plexShowSprite +// Show the next sprite. +// plexSort() prepares showing the sprites +plexShowSprite: { + .label __2 = $48 + .label __3 = $49 + .label __5 = $4b + .label __9 = $4a + .label __11 = $47 + .label plexFreeAdd1___0 = $44 + .label plexFreeAdd1___1 = $45 + .label plex_sprite_idx2 = $42 + .label plexFreeAdd1_ypos = $43 + .label xpos_idx = $46 + // [78] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#43 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z plex_sprite_idx + asl + sta.z plex_sprite_idx2 + // [79] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43)) -- vbuz1=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) + ldx.z plex_show_idx + ldy PLEX_SORTED_IDX,x + ldx PLEX_YPOS,y + stx.z plexFreeAdd1_ypos + // [80] *((const byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z plexFreeAdd1_ypos + ldy.z plex_sprite_idx2 + sta SPRITES_YPOS,y + jmp plexFreeAdd1 + // plexShowSprite::plexFreeAdd1 + plexFreeAdd1: + // [81] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 -- vbuz1=vbuz2_plus_vbuc1 + lax.z plexFreeAdd1_ypos + axs #-[$15] + stx.z plexFreeAdd1___0 + // [82] *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next#17) ← (byte~) plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z plexFreeAdd1___0 + ldy.z plex_free_next + sta PLEX_FREE_YPOS,y + // [83] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (byte) plex_free_next#17 + (byte) 1 -- vbuz1=vbuz2_plus_1 + ldy.z plex_free_next + iny + sty.z plexFreeAdd1___1 + // [84] (byte) plex_free_next#13 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + lda #7 + and.z plexFreeAdd1___1 + sta.z plex_free_next + jmp __b4 + // plexShowSprite::@4 + __b4: + // [85] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#43) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43)) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz2) + ldx.z plex_show_idx + ldy PLEX_SORTED_IDX,x + lda PLEX_PTR,y + ldx.z plex_sprite_idx + sta PLEX_SCREEN_PTR,x + // [86] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z plex_show_idx + lda PLEX_SORTED_IDX,y + sta.z xpos_idx + // [87] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z xpos_idx + asl + sta.z __11 + // [88] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuz1=_lo_pwuc1_derefidx_vbuz2 + ldy.z __11 + lda PLEX_XPOS,y + sta.z __2 + // [89] *((const byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z __2 + ldy.z plex_sprite_idx2 + sta SPRITES_XPOS,y + // [90] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuz1=_hi_pwuc1_derefidx_vbuz2 + ldy.z __11 + lda PLEX_XPOS+1,y + sta.z __3 + // [91] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 -- vbuz1_neq_0_then_la1 + lda.z __3 + cmp #0 + bne __b1 + jmp __b3 + // plexShowSprite::@3 + __b3: + // [92] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb#43 -- vbuz1=vbuc1_bxor_vbuz2 + lda #$ff + eor.z plex_sprite_msb + sta.z __9 + // [93] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1 + lda SPRITES_XMSB + and.z __9 + sta SPRITES_XMSB + jmp __b2 + // plexShowSprite::@2 + __b2: + // [94] (byte~) plexShowSprite::$5 ← (byte) plex_sprite_idx#43 + (byte) 1 -- vbuz1=vbuz2_plus_1 + ldy.z plex_sprite_idx + iny + sty.z __5 + // [95] (byte) plex_sprite_idx#15 ← (byte~) plexShowSprite::$5 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + lda #7 + and.z __5 + sta.z plex_sprite_idx + // [96] (byte) plex_show_idx#15 ← ++ (byte) plex_show_idx#43 -- vbuz1=_inc_vbuz1 + inc.z plex_show_idx + // [97] (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#43 << (byte) 1 -- vbuz1=vbuz1_rol_1 + asl.z plex_sprite_msb + // [98] if((byte) plex_sprite_msb#3!=(byte) 0) goto plexShowSprite::@5 -- vbuz1_neq_0_then_la1 + lda.z plex_sprite_msb + cmp #0 + bne __b5_from___b2 + // [100] phi from plexShowSprite::@2 to plexShowSprite::@return [phi:plexShowSprite::@2->plexShowSprite::@return] + __breturn_from___b2: + // [100] phi (byte) plex_sprite_msb#16 = (byte) 1 [phi:plexShowSprite::@2->plexShowSprite::@return#0] -- vbuz1=vbuc1 + lda #1 + sta.z plex_sprite_msb + jmp __breturn + // [99] phi from plexShowSprite::@2 to plexShowSprite::@5 [phi:plexShowSprite::@2->plexShowSprite::@5] + __b5_from___b2: + jmp __b5 + // plexShowSprite::@5 + __b5: + // [100] phi from plexShowSprite::@5 to plexShowSprite::@return [phi:plexShowSprite::@5->plexShowSprite::@return] + __breturn_from___b5: + // [100] phi (byte) plex_sprite_msb#16 = (byte) plex_sprite_msb#3 [phi:plexShowSprite::@5->plexShowSprite::@return#0] -- register_copy + jmp __breturn + // plexShowSprite::@return + __breturn: + // [101] return + rts + // plexShowSprite::@1 + __b1: + // [102] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) plex_sprite_msb#43 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + lda SPRITES_XMSB + ora.z plex_sprite_msb + sta SPRITES_XMSB + jmp __b2 +} + // plexSort +// Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions in PLEX_YPOS +// Assumes that the positions are nearly sorted already (as each sprite just moves a bit) +// Uses an insertion sort: +// 1. Moves a marker (m) from the start to end of the array. Every time the marker moves forward all elements before the marker are sorted correctly. +// 2a. If the next element after the marker is larger that the current element +// the marker can be moved forwards (as the sorting is correct). +// 2b. If the next element after the marker is smaller than the current element: +// elements before the marker are shifted right one at a time until encountering one smaller than the current one. +// It is then inserted at the spot. Now the marker can move forward. +plexSort: { + .label nxt_idx = $4c + .label nxt_y = $4d + .label m = $b + .label s = $c + .label s_1 = $4e + .label plexFreePrepare1_s = $d + // [104] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] + __b1_from_plexSort: + // [104] phi (byte) plexSort::m#2 = (byte) 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z m + jmp __b1 + // [104] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] + __b1_from___b2: + // [104] phi (byte) plexSort::m#2 = (byte) plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy + jmp __b1 + // plexSort::@1 + __b1: + // [105] (byte) plexSort::nxt_idx#0 ← *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::m#2) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z m + lda PLEX_SORTED_IDX+1,y + sta.z nxt_idx + // [106] (byte) plexSort::nxt_y#0 ← *((const byte*) PLEX_YPOS + (byte) plexSort::nxt_idx#0) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z nxt_idx + lda PLEX_YPOS,y + sta.z nxt_y + // [107] if((byte) plexSort::nxt_y#0>=*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2))) goto plexSort::@2 -- vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1 + lda.z nxt_y + ldx.z m + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcs __b2 + jmp __b5 + // plexSort::@5 + __b5: + // [108] (byte) plexSort::s#6 ← (byte) plexSort::m#2 -- vbuz1=vbuz2 + lda.z m + sta.z s + // [109] phi from plexSort::@5 plexSort::@6 to plexSort::@3 [phi:plexSort::@5/plexSort::@6->plexSort::@3] + __b3_from___b5: + __b3_from___b6: + // [109] phi (byte) plexSort::s#3 = (byte) plexSort::s#6 [phi:plexSort::@5/plexSort::@6->plexSort::@3#0] -- register_copy + jmp __b3 + // plexSort::@3 + __b3: + // [110] *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::s#3) ← *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#3) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy.z s + lda PLEX_SORTED_IDX,y + sta PLEX_SORTED_IDX+1,y + // [111] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 -- vbuz1=_dec_vbuz1 + dec.z s + // [112] if((byte) plexSort::s#1==(byte) $ff) goto plexSort::@4 -- vbuz1_eq_vbuc1_then_la1 + lda #$ff + cmp.z s + beq __b4 + jmp __b6 + // plexSort::@6 + __b6: + // [113] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 -- vbuz1_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1 + lda.z nxt_y + ldx.z s + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcc __b3_from___b6 + jmp __b4 + // plexSort::@4 + __b4: + // [114] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 -- vbuz1=_inc_vbuz2 + ldy.z s + iny + sty.z s_1 + // [115] *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z nxt_idx + ldy.z s_1 + sta PLEX_SORTED_IDX,y + jmp __b2 + // plexSort::@2 + __b2: + // [116] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 -- vbuz1=_inc_vbuz1 + inc.z m + // [117] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT-(byte) 2+(byte) 1) goto plexSort::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #PLEX_COUNT-2+1 + cmp.z m + bne __b1_from___b2 + // [118] phi from plexSort::@2 to plexSort::plexFreePrepare1 [phi:plexSort::@2->plexSort::plexFreePrepare1] + plexFreePrepare1_from___b2: + jmp plexFreePrepare1 + // plexSort::plexFreePrepare1 + plexFreePrepare1: + // [119] phi from plexSort::plexFreePrepare1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1] + plexFreePrepare1___b1_from_plexFreePrepare1: + // [119] phi (byte) plexSort::plexFreePrepare1_s#2 = (byte) 0 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z plexFreePrepare1_s + jmp plexFreePrepare1___b1 + // [119] phi from plexSort::plexFreePrepare1_@1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1] + plexFreePrepare1___b1_from_plexFreePrepare1___b1: + // [119] phi (byte) plexSort::plexFreePrepare1_s#2 = (byte) plexSort::plexFreePrepare1_s#1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1#0] -- register_copy + jmp plexFreePrepare1___b1 + // plexSort::plexFreePrepare1_@1 + plexFreePrepare1___b1: + // [120] *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + lda #0 + ldy.z plexFreePrepare1_s + sta PLEX_FREE_YPOS,y + // [121] (byte) plexSort::plexFreePrepare1_s#1 ← ++ (byte) plexSort::plexFreePrepare1_s#2 -- vbuz1=_inc_vbuz1 + inc.z plexFreePrepare1_s + // [122] if((byte) plexSort::plexFreePrepare1_s#1!=(byte) 8) goto plexSort::plexFreePrepare1_@1 -- vbuz1_neq_vbuc1_then_la1 + lda #8 + cmp.z plexFreePrepare1_s + bne plexFreePrepare1___b1_from_plexFreePrepare1___b1 + jmp __breturn + // plexSort::@return + __breturn: + // [123] return + rts +} + // mulf8s +// Fast multiply two signed bytes to a word result +// mulf8s(signed byte zeropage($e) a, signed byte zeropage($f) b) +mulf8s: { + .label mulf8s_prepare1_a = $e + .label return = $51 + .label a = $e + .label b = $f + .label return_1 = $2b + .label return_2 = $35 + jmp mulf8s_prepare1 + // mulf8s::mulf8s_prepare1 + mulf8s_prepare1: + // [125] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 -- vbuz1=vbuz2 + lda.z mulf8s_prepare1_a + sta.z mulf8u_prepare.a + // [126] call mulf8u_prepare + jsr mulf8u_prepare + jmp __b1 + // mulf8s::@1 + __b1: + // [127] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 -- vbsz1=vbsz2 + lda.z b + sta.z mulf8s_prepared.b + // [128] call mulf8s_prepared + jsr mulf8s_prepared + jmp __b2 + // mulf8s::@2 + __b2: + // [129] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 -- vwsz1=vwsz2 + lda.z mulf8s_prepared.m + sta.z return + lda.z mulf8s_prepared.m+1 + sta.z return+1 + jmp __breturn + // mulf8s::@return + __breturn: + // [130] return + rts +} + // mulf8s_prepared +// Calculate fast multiply with a prepared unsigned byte to a word result +// The prepared number is set by calling mulf8s_prepare(byte a) +// mulf8s_prepared(signed byte zeropage($50) b) +mulf8s_prepared: { + .label memA = $fd + .label __8 = $56 + .label __12 = $58 + .label __15 = $57 + .label __16 = $59 + .label m = $10 + .label b = $50 + // [131] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuz1=vbuz2 + lda.z b + sta.z mulf8u_prepared.b + // [132] call mulf8u_prepared + jsr mulf8u_prepared + // [133] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 -- vwuz1=vwuz2 + lda.z mulf8u_prepared.return + sta.z mulf8u_prepared.return_1 + lda.z mulf8u_prepared.return+1 + sta.z mulf8u_prepared.return_1+1 + jmp __b5 + // mulf8s_prepared::@5 + __b5: + // [134] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 -- vwuz1=vwuz2 + lda.z mulf8u_prepared.return_1 + sta.z m + lda.z mulf8u_prepared.return_1+1 + sta.z m+1 + // [135] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 + lda memA + cmp #0 + bpl __b1_from___b5 + jmp __b3 + // mulf8s_prepared::@3 + __b3: + // [136] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuz1=_hi_vwuz2 + lda.z m+1 + sta.z __8 + // [137] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuz1=vbuz2_minus_vbuz3 + lda.z __8 + sec + sbc.z b + sta.z __15 + // [138] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuz2 + lda.z __15 + sta.z m+1 + // [139] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] + __b1_from___b3: + __b1_from___b5: + // [139] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy + jmp __b1 + // mulf8s_prepared::@1 + __b1: + // [140] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 + lda.z b + cmp #0 + bpl __b2_from___b1 + jmp __b4 + // mulf8s_prepared::@4 + __b4: + // [141] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuz1=_hi_vwuz2 + lda.z m+1 + sta.z __12 + // [142] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuz1=vbuz2_minus__deref_pbuc1 + lda.z __12 + sec + sbc memA + sta.z __16 + // [143] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuz2 + lda.z __16 + sta.z m+1 + // [144] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] + __b2_from___b1: + __b2_from___b4: + // [144] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy + jmp __b2 + // mulf8s_prepared::@2 + __b2: + jmp __breturn + // mulf8s_prepared::@return + __breturn: + // [145] return + rts +} + // mulf8u_prepared +// Calculate fast multiply with a prepared unsigned byte to a word result +// The prepared number is set by calling mulf8u_prepare(byte a) +// mulf8u_prepared(byte zeropage($53) b) +mulf8u_prepared: { + .label resL = $fe + .label memB = $ff + .label return = $5a + .label b = $53 + .label return_1 = $54 + // [146] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 -- _deref_pbuc1=vbuz1 + lda.z b + sta memB + // asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } + ldx memB + sec + sm1: + lda mulf_sqr1_lo,x + sm2: + sbc mulf_sqr2_lo,x + sta resL + sm3: + lda mulf_sqr1_hi,x + sm4: + sbc mulf_sqr2_hi,x + sta memB + // [148] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + lda resL + sta.z return + lda memB + sta.z return+1 + jmp __breturn + // mulf8u_prepared::@return + __breturn: + // [149] return + rts +} + // mulf8u_prepare +// Prepare for fast multiply with an unsigned byte to a word result +// mulf8u_prepare(byte zeropage($4f) a) +mulf8u_prepare: { + .label memA = $fd + .label a = $4f + // [150] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 -- _deref_pbuc1=vbuz1 + lda.z a + sta memA + // asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } + lda memA + sta mulf8u_prepared.sm1+1 + sta mulf8u_prepared.sm3+1 + eor #$ff + sta mulf8u_prepared.sm2+1 + sta mulf8u_prepared.sm4+1 + jmp __breturn + // mulf8u_prepare::@return + __breturn: + // [152] return + rts +} + // init +// Initialize the program +init: { + .label __3 = $5d + .label __4 = $5e + .label __5 = $60 + .label __6 = $61 + .label __9 = $5f + .label i = $12 + .label i1 = $13 + .label __10 = $5c + // [153] *((const byte*) D011) ← (const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 + lda #VIC_DEN|VIC_RSEL|3 + sta D011 + // [154] call plexInit + // [212] phi from init to plexInit [phi:init->plexInit] + plexInit_from_init: + jsr plexInit + // [155] phi from init to init::@1 [phi:init->init::@1] + __b1_from_init: + // [155] phi (byte) init::i#2 = (byte) 0 [phi:init->init::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp __b1 + // Set the sprite pointers & initial positions + // [155] phi from init::@1 to init::@1 [phi:init::@1->init::@1] + __b1_from___b1: + // [155] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@1->init::@1#0] -- register_copy + jmp __b1 + // init::@1 + __b1: + // [156] *((const byte*) PLEX_PTR + (byte) init::i#2) ← (byte)(const byte*) SPRITE/(byte) $40 -- pbuc1_derefidx_vbuz1=vbuc2 + lda #$ff&SPRITE/$40 + ldy.z i + sta PLEX_PTR,y + // [157] (byte~) init::$10 ← (byte) init::i#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 + lda.z i + asl + asl + sta.z __10 + // [158] (byte~) init::$3 ← (byte~) init::$10 + (byte) init::i#2 -- vbuz1=vbuz2_plus_vbuz3 + lda.z __10 + clc + adc.z i + sta.z __3 + // [159] (byte~) init::$4 ← (byte) $18 + (byte~) init::$3 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __3 + axs #-[$18] + stx.z __4 + // [160] (byte~) init::$9 ← (byte) init::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z i + asl + sta.z __9 + // [161] *((const word*) PLEX_XPOS + (byte~) init::$9) ← (byte~) init::$4 -- pwuc1_derefidx_vbuz1=vbuz2 + lda.z __9 + ldx.z __4 + tay + txa + sta PLEX_XPOS,y + // [162] (byte~) init::$5 ← (byte) init::i#2 << (byte) 3 -- vbuz1=vbuz2_rol_3 + lda.z i + asl + asl + asl + sta.z __5 + // [163] (byte~) init::$6 ← (byte) $32 + (byte~) init::$5 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __5 + axs #-[$32] + stx.z __6 + // [164] *((const byte*) PLEX_YPOS + (byte) init::i#2) ← (byte~) init::$6 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z __6 + ldy.z i + sta PLEX_YPOS,y + // [165] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [166] if((byte) init::i#1!=(const byte) PLEX_COUNT-(byte) 1+(byte) 1) goto init::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #PLEX_COUNT-1+1 + cmp.z i + bne __b1_from___b1 + jmp __b2 + // init::@2 + __b2: + // [167] *((const byte*) SPRITES_ENABLE) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // Enable & initialize sprites + lda #$ff + sta SPRITES_ENABLE + // [168] phi from init::@2 to init::@3 [phi:init::@2->init::@3] + __b3_from___b2: + // [168] phi (byte) init::i1#2 = (byte) 0 [phi:init::@2->init::@3#0] -- vbuz1=vbuc1 + lda #0 + sta.z i1 + jmp __b3 + // [168] phi from init::@3 to init::@3 [phi:init::@3->init::@3] + __b3_from___b3: + // [168] phi (byte) init::i1#2 = (byte) init::i1#1 [phi:init::@3->init::@3#0] -- register_copy + jmp __b3 + // init::@3 + __b3: + // [169] *((const byte*) SPRITES_COLS + (byte) init::i1#2) ← (const byte) GREEN -- pbuc1_derefidx_vbuz1=vbuc2 + lda #GREEN + ldy.z i1 + sta SPRITES_COLS,y + // [170] (byte) init::i1#1 ← ++ (byte) init::i1#2 -- vbuz1=_inc_vbuz1 + inc.z i1 + // [171] if((byte) init::i1#1!=(byte) 8) goto init::@3 -- vbuz1_neq_vbuc1_then_la1 + lda #8 + cmp.z i1 + bne __b3_from___b3 + // [172] phi from init::@3 to init::@4 [phi:init::@3->init::@4] + __b4_from___b3: + jmp __b4 + // init::@4 + __b4: + // [173] call mulf_init + // [183] phi from init::@4 to mulf_init [phi:init::@4->mulf_init] + mulf_init_from___b4: + jsr mulf_init + // [174] phi from init::@4 to init::@5 [phi:init::@4->init::@5] + __b5_from___b4: + jmp __b5 + // init::@5 + __b5: + // [175] call memset + // [177] phi from init::@5 to memset [phi:init::@5->memset] + memset_from___b5: + jsr memset + jmp __breturn + // init::@return + __breturn: + // [176] 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: { + .label str = SCREEN + .const c = ' ' + .const num = $3e8 + .label end = str+num + .label dst = $14 + // [178] phi from memset to memset::@1 [phi:memset->memset::@1] + __b1_from_memset: + // [178] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + lda #str + sta.z dst+1 + jmp __b1 + // memset::@1 + __b1: + // [179] 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 #memset::@1] + __b1_from___b2: + // [178] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + jmp __b1 +} + // mulf_init +// Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4) +mulf_init: { + .label __1 = $62 + .label __4 = $63 + .label __5 = $64 + // x/2 + .label c = $18 + // Counter used for determining x%2==0 + .label sqr1_hi = $19 + // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 + .label sqr = $22 + .label sqr1_lo = $16 + // sqr = (x*x)/4 + .label x_2 = $1b + // Decrease or increase x_255 - initially we decrease + .label sqr2_hi = $1f + // Fill mulf_sqr2 = g(x) = f(x-255) : If x-255<0 then g(x)=f(255-x) (because x*x = -x*-x) + // g(0) = f(255), g(1) = f(254), ..., g(254) = f(1), g(255) = f(0), g(256) = f(1), ..., g(510) = f(255), g(511) = f(256) + .label x_255 = $1e + .label sqr2_lo = $1c + //Start with g(0)=f(255) + .label dir = $21 + // [184] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + __b1_from_mulf_init: + // [184] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z x_2 + // [184] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + lda #mulf_sqr1_hi+1 + sta.z sqr1_hi+1 + // [184] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + lda #<0 + sta.z sqr + lda #>0 + sta.z sqr+1 + // [184] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + lda #0 + sta.z c + // [184] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + lda #mulf_sqr1_lo+1 + sta.z sqr1_lo+1 + jmp __b1 + // mulf_init::@1 + __b1: + // [185] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + lda.z sqr1_lo+1 + cmp #>mulf_sqr1_lo+$200 + bne __b2 + lda.z sqr1_lo + cmp #mulf_init::@5] + __b5_from___b1: + // [186] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + lda #$ff + sta.z dir + // [186] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + lda #mulf_sqr2_hi + sta.z sqr2_hi+1 + // [186] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuz1=vbuc1 + lda #-1 + sta.z x_255 + // [186] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + lda #mulf_sqr2_lo + sta.z sqr2_lo+1 + jmp __b5 + // mulf_init::@5 + __b5: + // [187] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + lda.z sqr2_lo+1 + cmp #>mulf_sqr2_lo+$1ff + bne __b6 + lda.z sqr2_lo + cmp #mulf_init::@8] + __b8_from___b6: + // [197] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + lda #1 + sta.z dir + jmp __b8 + // [196] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + __b9_from___b6: + jmp __b9 + // mulf_init::@9 + __b9: + // [197] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + __b8_from___b9: + // [197] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + jmp __b8 + // mulf_init::@8 + __b8: + // [198] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + inc.z sqr2_lo + bne !+ + inc.z sqr2_lo+1 + !: + // [186] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + __b5_from___b8: + // [186] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [186] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [186] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [186] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + jmp __b5 + // mulf_init::@2 + __b2: + // [199] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + inc.z c + // [200] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + lda #1 + and.z c + sta.z __1 + // [201] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuz1_neq_0_then_la1 + lda.z __1 + cmp #0 + bne __b3_from___b2 + jmp __b4 + // mulf_init::@4 + __b4: + // [202] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuz1=_inc_vbuz1 + inc.z x_2 + // [203] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + inc.z sqr + bne !+ + inc.z sqr+1 + !: + // [204] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + __b3_from___b2: + __b3_from___b4: + // [204] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [204] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + jmp __b3 + // mulf_init::@3 + __b3: + // [205] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuz1=_lo_vwuz2 + lda.z sqr + sta.z __4 + // [206] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuz2 + lda.z __4 + ldy #0 + sta (sqr1_lo),y + // [207] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuz1=_hi_vwuz2 + lda.z sqr+1 + sta.z __5 + // [208] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuz2 + lda.z __5 + ldy #0 + sta (sqr1_hi),y + // [209] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + inc.z sqr1_hi + bne !+ + inc.z sqr1_hi+1 + !: + // [210] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuz2 + lda.z x_2 + clc + adc.z sqr + sta.z sqr + bcc !+ + inc.z sqr+1 + !: + // [211] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + inc.z sqr1_lo + bne !+ + inc.z sqr1_lo+1 + !: + // [184] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + __b1_from___b3: + // [184] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [184] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [184] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [184] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [184] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + jmp __b1 +} + // plexInit +// Initialize the multiplexer data structures +plexInit: { + .label i = $24 + // [213] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] + plexSetScreen1_from_plexInit: + jmp plexSetScreen1 + // plexInit::plexSetScreen1 + plexSetScreen1: + // [214] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] + __b1_from_plexSetScreen1: + // [214] phi (byte) plexInit::i#2 = (byte) 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp __b1 + // [214] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] + __b1_from___b1: + // [214] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy + jmp __b1 + // plexInit::@1 + __b1: + // [215] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 -- pbuc1_derefidx_vbuz1=vbuz1 + ldy.z i + tya + sta PLEX_SORTED_IDX,y + // [216] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [217] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #PLEX_COUNT-1+1 + cmp.z i + bne __b1_from___b1 + jmp __breturn + // plexInit::@return + __breturn: + // [218] return + rts +} + // File Data + // The x-positions of the multiplexer sprites ($000-$1ff) + PLEX_XPOS: .fill 2*PLEX_COUNT, 0 + // The y-positions of the multiplexer sprites. + PLEX_YPOS: .fill PLEX_COUNT, 0 + // The sprite pointers for the multiplexed sprites + PLEX_PTR: .fill PLEX_COUNT, 0 + // Indexes of the plex-sprites sorted by sprite y-position. Each call to plexSort() will fix the sorting if changes to the Y-positions have ruined it. + PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 + // Contains the Y-position where each sprite is free again. PLEX_FREE_YPOS[s] holds the Y-position where sprite s is free to use again. + PLEX_FREE_YPOS: .fill 8, 0 + // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). + // f(x) = >(( x * x )/4) + .align $100 + mulf_sqr1_hi: .fill $200, 0 + // g(x) = >((( x - 255) * ( x - 255 ))/4) + .align $100 + mulf_sqr2_hi: .fill $200, 0 + // 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 BOB sprite + .align $1000 +SPRITE: +.var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) + .for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + + // Sine and Cosine tables + // Angles: $00=0, $80=PI,$100=2*PI + // Sine/Cosine: signed fixed [-$7f,$7f] + .align $40 +SIN: +.for(var i=0;i<$140;i++) + .byte >round($7fff*sin(i*2*PI/256)) + + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [25] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::exit:9::keyboard_key_pressed:14::keyboard_matrix_read:20 [ ] main:2::loop:7::keyboard_key_pressed:73::keyboard_matrix_read:20 [ loop::angle#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:2 [ loop::angle#6 loop::angle#1 ] +Statement [26] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::exit:9::keyboard_key_pressed:14::keyboard_matrix_read:20 [ keyboard_matrix_read::return#0 ] main:2::loop:7::keyboard_key_pressed:73::keyboard_matrix_read:20 [ loop::angle#1 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [30] if(*((const byte*) RASTER)<(byte) $d8) goto loop::@2 [ loop::angle#6 ] ( main:2::loop:7 [ loop::angle#6 ] ) always clobbers reg byte a +Statement [31] *((const byte*) BORDERCOL) ← (byte) $f [ loop::angle#6 ] ( main:2::loop:7 [ loop::angle#6 ] ) always clobbers reg byte a +Statement [34] *((const byte*) BORDERCOL) ← (byte) 6 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:3 [ loop::r#2 loop::r#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:4 [ loop::a#2 loop::a#1 loop::a#6 ] +Removing always clobbered register reg byte a as potential for zp[1]:5 [ loop::i#2 loop::i#1 ] +Statement [38] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] ) always clobbers reg byte a +Statement [39] (signed word~) loop::$1 ← (signed word) mulf8s::return#2 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] ) always clobbers reg byte a +Statement [40] (signed word~) loop::$2 ← (signed word~) loop::$1 << (byte) 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] ) always clobbers reg byte a +Statement [41] (signed word) loop::x#0 ← (signed word~) loop::$2 + (signed word)(number) $7d*(number) $100 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] ) always clobbers reg byte a +Statement [42] (byte~) loop::$4 ← > (signed word) loop::x#0 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 ] ) always clobbers reg byte a +Statement [43] (byte~) loop::$20 ← (byte) loop::i#2 << (byte) 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:51 [ loop::$4 ] +Statement [44] *((const word*) PLEX_XPOS + (byte~) loop::$20) ← (byte~) loop::$4 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ) always clobbers reg byte a +Statement [48] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] ) always clobbers reg byte a +Statement [49] (signed word~) loop::$5 ← (signed word) mulf8s::return#3 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] ) always clobbers reg byte a +Statement [50] (signed word~) loop::$6 ← (signed word~) loop::$5 << (byte) 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] ) always clobbers reg byte a +Statement [51] (signed word) loop::y#0 ← (signed word~) loop::$6 + (signed word)(number) $7d*(number) $100 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] ) always clobbers reg byte a +Statement [52] (byte~) loop::$8 ← > (signed word) loop::y#0 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$8 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$8 ] ) always clobbers reg byte a +Statement [54] (byte) loop::a#1 ← (byte) loop::a#2 + (byte) $62 [ loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] ) always clobbers reg byte a +Statement [55] (signed byte) loop::r#1 ← (signed byte) loop::r#2 + (signed byte) 3 [ loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] ( main:2::loop:7 [ loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] ) always clobbers reg byte a +Statement [58] *((const byte*) BORDERCOL) ← (byte) 3 [ loop::angle#6 ] ( main:2::loop:7 [ loop::angle#6 ] ) always clobbers reg byte a +Statement [60] (byte) loop::angle#1 ← (byte) loop::angle#6 + (byte) 3 [ loop::angle#1 ] ( main:2::loop:7 [ loop::angle#1 ] ) always clobbers reg byte a +Statement [61] *((const byte*) BORDERCOL) ← (const byte) BLACK [ loop::angle#1 ] ( main:2::loop:7 [ loop::angle#1 ] ) always clobbers reg byte a +Statement [62] (byte~) loop::$11 ← *((const byte*) D011) & (const byte) VIC_RST8 [ loop::angle#1 loop::$11 ] ( main:2::loop:7 [ loop::angle#1 loop::$11 ] ) always clobbers reg byte a +Statement [65] *((const byte*) BORDERCOL) ← (const byte) BLACK [ loop::angle#1 plex_free_next#17 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 loop::i1#5 ] ( main:2::loop:7 [ loop::angle#1 plex_free_next#17 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 loop::i1#5 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:6 [ plex_free_next#17 plex_free_next#13 ] +Removing always clobbered register reg byte a as potential for zp[1]:7 [ plex_sprite_idx#43 plex_sprite_idx#15 ] +Removing always clobbered register reg byte a as potential for zp[1]:8 [ plex_show_idx#43 plex_show_idx#15 ] +Removing always clobbered register reg byte a as potential for zp[1]:9 [ plex_sprite_msb#43 plex_sprite_msb#16 plex_sprite_msb#3 ] +Removing always clobbered register reg byte a as potential for zp[1]:10 [ loop::i1#5 loop::i1#1 ] +Statement [72] *((const byte*) BORDERCOL) ← (const byte) BLACK [ loop::angle#1 ] ( main:2::loop:7 [ loop::angle#1 ] ) always clobbers reg byte a +Statement [78] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#43 << (byte) 1 [ plex_free_next#17 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plexShowSprite::plex_sprite_idx2#0 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_free_next#17 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a +Statement [85] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#43) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43)) [ plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] +Statement [87] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [ plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ) always clobbers reg byte a +Statement [88] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:71 [ plexShowSprite::$11 ] +Statement [90] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::$3 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::$3 ] ) always clobbers reg byte a +Statement [92] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb#43 [ plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::$9 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::$9 ] ) always clobbers reg byte a +Statement [93] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [ plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 ] ) always clobbers reg byte a +Statement [102] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) plex_sprite_msb#43 [ plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 ] ) always clobbers reg byte a +Statement [110] *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::s#3) ← *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:2::loop:7::plexSort:59 [ loop::angle#6 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:76 [ plexSort::nxt_idx#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:77 [ plexSort::nxt_y#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +Statement [113] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::loop:7::plexSort:59 [ loop::angle#6 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) always clobbers reg byte a +Statement [115] *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:2::loop:7::plexSort:59 [ loop::angle#6 plexSort::m#2 ] ) always clobbers reg byte a +Statement [120] *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 [ plexSort::plexFreePrepare1_s#2 ] ( main:2::loop:7::plexSort:59 [ loop::angle#6 plexSort::plexFreePrepare1_s#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:13 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +Statement [129] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:2::loop:7::mulf8s:37 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] main:2::loop:7::mulf8s:47 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] ) always clobbers reg byte a +Statement [133] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:80 [ mulf8s_prepared::b#0 ] +Statement [134] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a +Statement [135] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a +Statement [136] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ) always clobbers reg byte a +Statement [137] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a +Statement [141] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ) always clobbers reg byte a +Statement [142] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a +Statement asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } always clobbers reg byte a reg byte x +Removing always clobbered register reg byte x as potential for zp[1]:2 [ loop::angle#6 loop::angle#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:3 [ loop::r#2 loop::r#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:4 [ loop::a#2 loop::a#1 loop::a#6 ] +Removing always clobbered register reg byte x as potential for zp[1]:5 [ loop::i#2 loop::i#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:80 [ mulf8s_prepared::b#0 ] +Statement [148] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128::mulf8u_prepared:132 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128::mulf8u_prepared:132 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a +Statement asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:15 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] +Statement [153] *((const byte*) D011) ← (const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a +Statement [156] *((const byte*) PLEX_PTR + (byte) init::i#2) ← (byte)(const byte*) SPRITE/(byte) $40 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:18 [ init::i#2 init::i#1 ] +Statement [157] (byte~) init::$10 ← (byte) init::i#2 << (byte) 2 [ init::i#2 init::$10 ] ( main:2::init:5 [ init::i#2 init::$10 ] ) always clobbers reg byte a +Statement [158] (byte~) init::$3 ← (byte~) init::$10 + (byte) init::i#2 [ init::i#2 init::$3 ] ( main:2::init:5 [ init::i#2 init::$3 ] ) always clobbers reg byte a +Statement [160] (byte~) init::$9 ← (byte) init::i#2 << (byte) 1 [ init::i#2 init::$4 init::$9 ] ( main:2::init:5 [ init::i#2 init::$4 init::$9 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:94 [ init::$4 ] +Statement [161] *((const word*) PLEX_XPOS + (byte~) init::$9) ← (byte~) init::$4 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a +Statement [162] (byte~) init::$5 ← (byte) init::i#2 << (byte) 3 [ init::i#2 init::$5 ] ( main:2::init:5 [ init::i#2 init::$5 ] ) always clobbers reg byte a +Statement [167] *((const byte*) SPRITES_ENABLE) ← (byte) $ff [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a +Statement [169] *((const byte*) SPRITES_COLS + (byte) init::i1#2) ← (const byte) GREEN [ init::i1#2 ] ( main:2::init:5 [ init::i1#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:19 [ init::i1#2 init::i1#1 ] +Statement [179] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::init:5::memset:175 [ memset::dst#2 ] ) always clobbers reg byte a +Statement [181] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::init:5::memset:175 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [185] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:24 [ mulf_init::c#2 mulf_init::c#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:27 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Statement [187] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:30 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:33 [ mulf_init::dir#2 mulf_init::dir#4 ] +Statement [188] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:2::init:5::mulf_init:173 [ ] ) always clobbers reg byte a +Statement [189] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:2::init:5::mulf_init:173 [ ] ) always clobbers reg byte a +Statement [191] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:30 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:33 [ mulf_init::dir#2 mulf_init::dir#4 ] +Statement [192] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [194] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a +Statement [200] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a +Statement [205] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a +Statement [206] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:24 [ mulf_init::c#2 mulf_init::c#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:27 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Statement [207] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a +Statement [208] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [210] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a +Statement [25] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::exit:9::keyboard_key_pressed:14::keyboard_matrix_read:20 [ ] main:2::loop:7::keyboard_key_pressed:73::keyboard_matrix_read:20 [ loop::angle#1 ] ) always clobbers reg byte a +Statement [26] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::exit:9::keyboard_key_pressed:14::keyboard_matrix_read:20 [ keyboard_matrix_read::return#0 ] main:2::loop:7::keyboard_key_pressed:73::keyboard_matrix_read:20 [ loop::angle#1 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [30] if(*((const byte*) RASTER)<(byte) $d8) goto loop::@2 [ loop::angle#6 ] ( main:2::loop:7 [ loop::angle#6 ] ) always clobbers reg byte a +Statement [31] *((const byte*) BORDERCOL) ← (byte) $f [ loop::angle#6 ] ( main:2::loop:7 [ loop::angle#6 ] ) always clobbers reg byte a +Statement [34] *((const byte*) BORDERCOL) ← (byte) 6 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ) always clobbers reg byte a +Statement [38] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] ) always clobbers reg byte a +Statement [39] (signed word~) loop::$1 ← (signed word) mulf8s::return#2 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] ) always clobbers reg byte a +Statement [40] (signed word~) loop::$2 ← (signed word~) loop::$1 << (byte) 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] ) always clobbers reg byte a +Statement [41] (signed word) loop::x#0 ← (signed word~) loop::$2 + (signed word)(number) $7d*(number) $100 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] ) always clobbers reg byte a +Statement [42] (byte~) loop::$4 ← > (signed word) loop::x#0 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 ] ) always clobbers reg byte a +Statement [43] (byte~) loop::$20 ← (byte) loop::i#2 << (byte) 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] ) always clobbers reg byte a +Statement [44] *((const word*) PLEX_XPOS + (byte~) loop::$20) ← (byte~) loop::$4 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ) always clobbers reg byte a +Statement [48] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] ) always clobbers reg byte a +Statement [49] (signed word~) loop::$5 ← (signed word) mulf8s::return#3 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] ) always clobbers reg byte a +Statement [50] (signed word~) loop::$6 ← (signed word~) loop::$5 << (byte) 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] ) always clobbers reg byte a +Statement [51] (signed word) loop::y#0 ← (signed word~) loop::$6 + (signed word)(number) $7d*(number) $100 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] ) always clobbers reg byte a +Statement [52] (byte~) loop::$8 ← > (signed word) loop::y#0 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$8 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$8 ] ) always clobbers reg byte a +Statement [54] (byte) loop::a#1 ← (byte) loop::a#2 + (byte) $62 [ loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] ( main:2::loop:7 [ loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] ) always clobbers reg byte a +Statement [55] (signed byte) loop::r#1 ← (signed byte) loop::r#2 + (signed byte) 3 [ loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] ( main:2::loop:7 [ loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] ) always clobbers reg byte a +Statement [58] *((const byte*) BORDERCOL) ← (byte) 3 [ loop::angle#6 ] ( main:2::loop:7 [ loop::angle#6 ] ) always clobbers reg byte a +Statement [60] (byte) loop::angle#1 ← (byte) loop::angle#6 + (byte) 3 [ loop::angle#1 ] ( main:2::loop:7 [ loop::angle#1 ] ) always clobbers reg byte a +Statement [61] *((const byte*) BORDERCOL) ← (const byte) BLACK [ loop::angle#1 ] ( main:2::loop:7 [ loop::angle#1 ] ) always clobbers reg byte a +Statement [62] (byte~) loop::$11 ← *((const byte*) D011) & (const byte) VIC_RST8 [ loop::angle#1 loop::$11 ] ( main:2::loop:7 [ loop::angle#1 loop::$11 ] ) always clobbers reg byte a +Statement [65] *((const byte*) BORDERCOL) ← (const byte) BLACK [ loop::angle#1 plex_free_next#17 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 loop::i1#5 ] ( main:2::loop:7 [ loop::angle#1 plex_free_next#17 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 loop::i1#5 ] ) always clobbers reg byte a +Statement [72] *((const byte*) BORDERCOL) ← (const byte) BLACK [ loop::angle#1 ] ( main:2::loop:7 [ loop::angle#1 ] ) always clobbers reg byte a +Statement [78] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#43 << (byte) 1 [ plex_free_next#17 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plexShowSprite::plex_sprite_idx2#0 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_free_next#17 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a +Statement [85] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#43) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43)) [ plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a +Statement [87] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [ plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ) always clobbers reg byte a +Statement [88] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ) always clobbers reg byte a +Statement [90] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::$3 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::$3 ] ) always clobbers reg byte a +Statement [92] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb#43 [ plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::$9 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 plexShowSprite::$9 ] ) always clobbers reg byte a +Statement [93] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [ plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 ] ) always clobbers reg byte a +Statement [102] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) plex_sprite_msb#43 [ plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 ] ( main:2::loop:7::plexShowSprite:69 [ loop::angle#1 loop::i1#5 plex_sprite_idx#43 plex_show_idx#43 plex_sprite_msb#43 plex_free_next#13 ] ) always clobbers reg byte a +Statement [107] if((byte) plexSort::nxt_y#0>=*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2))) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:2::loop:7::plexSort:59 [ loop::angle#6 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) always clobbers reg byte a +Statement [110] *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::s#3) ← *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:2::loop:7::plexSort:59 [ loop::angle#6 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) always clobbers reg byte a +Statement [113] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::loop:7::plexSort:59 [ loop::angle#6 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) always clobbers reg byte a +Statement [115] *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:2::loop:7::plexSort:59 [ loop::angle#6 plexSort::m#2 ] ) always clobbers reg byte a +Statement [120] *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 [ plexSort::plexFreePrepare1_s#2 ] ( main:2::loop:7::plexSort:59 [ loop::angle#6 plexSort::plexFreePrepare1_s#2 ] ) always clobbers reg byte a +Statement [129] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:2::loop:7::mulf8s:37 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] main:2::loop:7::mulf8s:47 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] ) always clobbers reg byte a +Statement [133] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a +Statement [134] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a +Statement [135] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a +Statement [136] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ) always clobbers reg byte a +Statement [137] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a +Statement [141] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ) always clobbers reg byte a +Statement [142] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a +Statement asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } always clobbers reg byte a reg byte x +Statement [148] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:2::loop:7::mulf8s:37::mulf8s_prepared:128::mulf8u_prepared:132 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] main:2::loop:7::mulf8s:47::mulf8s_prepared:128::mulf8u_prepared:132 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a +Statement asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } always clobbers reg byte a +Statement [153] *((const byte*) D011) ← (const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a +Statement [156] *((const byte*) PLEX_PTR + (byte) init::i#2) ← (byte)(const byte*) SPRITE/(byte) $40 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a +Statement [157] (byte~) init::$10 ← (byte) init::i#2 << (byte) 2 [ init::i#2 init::$10 ] ( main:2::init:5 [ init::i#2 init::$10 ] ) always clobbers reg byte a +Statement [158] (byte~) init::$3 ← (byte~) init::$10 + (byte) init::i#2 [ init::i#2 init::$3 ] ( main:2::init:5 [ init::i#2 init::$3 ] ) always clobbers reg byte a +Statement [160] (byte~) init::$9 ← (byte) init::i#2 << (byte) 1 [ init::i#2 init::$4 init::$9 ] ( main:2::init:5 [ init::i#2 init::$4 init::$9 ] ) always clobbers reg byte a +Statement [161] *((const word*) PLEX_XPOS + (byte~) init::$9) ← (byte~) init::$4 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a +Statement [162] (byte~) init::$5 ← (byte) init::i#2 << (byte) 3 [ init::i#2 init::$5 ] ( main:2::init:5 [ init::i#2 init::$5 ] ) always clobbers reg byte a +Statement [167] *((const byte*) SPRITES_ENABLE) ← (byte) $ff [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a +Statement [169] *((const byte*) SPRITES_COLS + (byte) init::i1#2) ← (const byte) GREEN [ init::i1#2 ] ( main:2::init:5 [ init::i1#2 ] ) always clobbers reg byte a +Statement [179] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::init:5::memset:175 [ memset::dst#2 ] ) always clobbers reg byte a +Statement [181] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::init:5::memset:175 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [185] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a +Statement [187] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a +Statement [188] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:2::init:5::mulf_init:173 [ ] ) always clobbers reg byte a +Statement [189] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:2::init:5::mulf_init:173 [ ] ) always clobbers reg byte a +Statement [191] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [192] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [194] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a +Statement [200] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a +Statement [205] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a +Statement [206] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [207] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a +Statement [208] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [210] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::init:5::mulf_init:173 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a +Potential registers zp[1]:2 [ loop::angle#6 loop::angle#1 ] : zp[1]:2 , reg byte y , +Potential registers zp[1]:3 [ loop::r#2 loop::r#1 ] : zp[1]:3 , reg byte y , +Potential registers zp[1]:4 [ loop::a#2 loop::a#1 loop::a#6 ] : zp[1]:4 , reg byte y , +Potential registers zp[1]:5 [ loop::i#2 loop::i#1 ] : zp[1]:5 , reg byte y , +Potential registers zp[1]:6 [ plex_free_next#17 plex_free_next#13 ] : zp[1]:6 , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plex_sprite_idx#43 plex_sprite_idx#15 ] : zp[1]:7 , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plex_show_idx#43 plex_show_idx#15 ] : zp[1]:8 , reg byte x , reg byte y , +Potential registers zp[1]:9 [ plex_sprite_msb#43 plex_sprite_msb#16 plex_sprite_msb#3 ] : zp[1]:9 , reg byte x , reg byte y , +Potential registers zp[1]:10 [ loop::i1#5 loop::i1#1 ] : zp[1]:10 , reg byte x , reg byte y , +Potential registers zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] : zp[1]:11 , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:13 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] : zp[1]:13 , reg byte x , reg byte y , +Potential registers zp[1]:14 [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:15 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] : zp[1]:15 , reg byte x , reg byte y , +Potential registers zp[2]:16 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] : zp[2]:16 , +Potential registers zp[1]:18 [ init::i#2 init::i#1 ] : zp[1]:18 , reg byte x , reg byte y , +Potential registers zp[1]:19 [ init::i1#2 init::i1#1 ] : zp[1]:19 , reg byte x , reg byte y , +Potential registers zp[2]:20 [ memset::dst#2 memset::dst#1 ] : zp[2]:20 , +Potential registers zp[2]:22 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] : zp[2]:22 , +Potential registers zp[1]:24 [ mulf_init::c#2 mulf_init::c#1 ] : zp[1]:24 , reg byte x , +Potential registers zp[2]:25 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] : zp[2]:25 , +Potential registers zp[1]:27 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] : zp[1]:27 , reg byte x , +Potential registers zp[2]:28 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] : zp[2]:28 , +Potential registers zp[1]:30 [ mulf_init::x_255#2 mulf_init::x_255#1 ] : zp[1]:30 , reg byte x , +Potential registers zp[2]:31 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] : zp[2]:31 , +Potential registers zp[1]:33 [ mulf_init::dir#2 mulf_init::dir#4 ] : zp[1]:33 , reg byte x , +Potential registers zp[2]:34 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] : zp[2]:34 , +Potential registers zp[1]:36 [ plexInit::i#2 plexInit::i#1 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:37 [ keyboard_key_pressed::return#2 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:38 [ exit::$0 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:39 [ keyboard_matrix_read::return#2 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:40 [ keyboard_key_pressed::$2 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:41 [ keyboard_key_pressed::return#0 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:42 [ keyboard_matrix_read::return#0 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:43 [ mulf8s::return#2 ] : zp[2]:43 , +Potential registers zp[2]:45 [ loop::$1 ] : zp[2]:45 , +Potential registers zp[2]:47 [ loop::$2 ] : zp[2]:47 , +Potential registers zp[2]:49 [ loop::x#0 ] : zp[2]:49 , +Potential registers zp[1]:51 [ loop::$4 ] : zp[1]:51 , reg byte x , reg byte y , +Potential registers zp[1]:52 [ loop::$20 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:53 [ mulf8s::return#3 ] : zp[2]:53 , +Potential registers zp[2]:55 [ loop::$5 ] : zp[2]:55 , +Potential registers zp[2]:57 [ loop::$6 ] : zp[2]:57 , +Potential registers zp[2]:59 [ loop::y#0 ] : zp[2]:59 , +Potential registers zp[1]:61 [ loop::$8 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:62 [ loop::$11 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:63 [ loop::plexFreeNextYpos1_return#0 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:64 [ keyboard_key_pressed::return#3 ] : zp[1]:64 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:65 [ loop::$18 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] : zp[1]:66 , reg byte x , reg byte y , +Potential registers zp[1]:67 [ plexShowSprite::plexFreeAdd1_ypos#0 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:68 [ plexShowSprite::plexFreeAdd1_$0 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:69 [ plexShowSprite::plexFreeAdd1_$1 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:70 [ plexShowSprite::xpos_idx#0 ] : zp[1]:70 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:71 [ plexShowSprite::$11 ] : zp[1]:71 , reg byte x , reg byte y , +Potential registers zp[1]:72 [ plexShowSprite::$2 ] : zp[1]:72 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:73 [ plexShowSprite::$3 ] : zp[1]:73 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:74 [ plexShowSprite::$9 ] : zp[1]:74 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:75 [ plexShowSprite::$5 ] : zp[1]:75 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:76 [ plexSort::nxt_idx#0 ] : zp[1]:76 , reg byte x , reg byte y , +Potential registers zp[1]:77 [ plexSort::nxt_y#0 ] : zp[1]:77 , reg byte x , reg byte y , +Potential registers zp[1]:78 [ plexSort::s#2 ] : zp[1]:78 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:79 [ mulf8u_prepare::a#0 ] : zp[1]:79 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:80 [ mulf8s_prepared::b#0 ] : zp[1]:80 , reg byte y , +Potential registers zp[2]:81 [ mulf8s::return#0 ] : zp[2]:81 , +Potential registers zp[1]:83 [ mulf8u_prepared::b#0 ] : zp[1]:83 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:84 [ mulf8u_prepared::return#2 ] : zp[2]:84 , +Potential registers zp[1]:86 [ mulf8s_prepared::$8 ] : zp[1]:86 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:87 [ mulf8s_prepared::$15 ] : zp[1]:87 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:88 [ mulf8s_prepared::$12 ] : zp[1]:88 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:89 [ mulf8s_prepared::$16 ] : zp[1]:89 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:90 [ mulf8u_prepared::return#0 ] : zp[2]:90 , +Potential registers zp[1]:92 [ init::$10 ] : zp[1]:92 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:93 [ init::$3 ] : zp[1]:93 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:94 [ init::$4 ] : zp[1]:94 , reg byte x , reg byte y , +Potential registers zp[1]:95 [ init::$9 ] : zp[1]:95 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:96 [ init::$5 ] : zp[1]:96 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:97 [ init::$6 ] : zp[1]:97 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:98 [ mulf_init::$1 ] : zp[1]:98 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:99 [ mulf_init::$4 ] : zp[1]:99 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:100 [ mulf_init::$5 ] : zp[1]:100 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plexSort] 3,622.83: zp[1]:12 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] 303: zp[1]:13 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] 202: zp[1]:78 [ plexSort::s#2 ] 193.58: zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] 150.38: zp[1]:77 [ plexSort::nxt_y#0 ] 30.3: zp[1]:76 [ plexSort::nxt_idx#0 ] +Uplift Scope [loop] 551: zp[1]:63 [ loop::plexFreeNextYpos1_return#0 ] 202: zp[2]:45 [ loop::$1 ] 202: zp[2]:47 [ loop::$2 ] 202: zp[2]:49 [ loop::x#0 ] 202: zp[1]:52 [ loop::$20 ] 202: zp[2]:55 [ loop::$5 ] 202: zp[2]:57 [ loop::$6 ] 202: zp[2]:59 [ loop::y#0 ] 202: zp[1]:61 [ loop::$8 ] 202: zp[1]:62 [ loop::$11 ] 185.17: zp[1]:10 [ loop::i1#5 loop::i1#1 ] 169.07: zp[1]:5 [ loop::i#2 loop::i#1 ] 101: zp[1]:51 [ loop::$4 ] 92.26: zp[1]:4 [ loop::a#2 loop::a#1 loop::a#6 ] 85.7: zp[1]:3 [ loop::r#2 loop::r#1 ] 22: zp[1]:65 [ loop::$18 ] 2.36: zp[1]:2 [ loop::angle#6 loop::angle#1 ] +Uplift Scope [mulf8s] 472: zp[1]:15 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] 404: zp[1]:14 [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] 202: zp[2]:43 [ mulf8s::return#2 ] 202: zp[2]:53 [ mulf8s::return#3 ] 51: zp[2]:81 [ mulf8s::return#0 ] +Uplift Scope [mulf_init] 47.67: zp[2]:34 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 26.89: zp[2]:28 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 25.14: zp[2]:22 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 23.1: zp[1]:27 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 22: zp[1]:98 [ mulf_init::$1 ] 22: zp[1]:99 [ mulf_init::$4 ] 22: zp[1]:100 [ mulf_init::$5 ] 15.4: zp[1]:30 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 15.12: zp[1]:33 [ mulf_init::dir#2 mulf_init::dir#4 ] 13.54: zp[1]:24 [ mulf_init::c#2 mulf_init::c#1 ] 11.92: zp[2]:31 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 10.08: zp[2]:25 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Uplift Scope [init] 33: zp[1]:19 [ init::i1#2 init::i1#1 ] 25.3: zp[1]:18 [ init::i#2 init::i#1 ] 22: zp[1]:92 [ init::$10 ] 22: zp[1]:93 [ init::$3 ] 22: zp[1]:95 [ init::$9 ] 22: zp[1]:96 [ init::$5 ] 22: zp[1]:97 [ init::$6 ] 11: zp[1]:94 [ init::$4 ] +Uplift Scope [] 26.88: zp[1]:9 [ plex_sprite_msb#43 plex_sprite_msb#16 plex_sprite_msb#3 ] 25.28: zp[1]:6 [ plex_free_next#17 plex_free_next#13 ] 15.99: zp[1]:8 [ plex_show_idx#43 plex_show_idx#15 ] 15.16: zp[1]:7 [ plex_sprite_idx#43 plex_sprite_idx#15 ] +Uplift Scope [keyboard_key_pressed] 22: zp[1]:37 [ keyboard_key_pressed::return#2 ] 22: zp[1]:64 [ keyboard_key_pressed::return#3 ] 6: zp[1]:41 [ keyboard_key_pressed::return#0 ] 4: zp[1]:40 [ keyboard_key_pressed::$2 ] +Uplift Scope [plexInit] 38.5: zp[1]:36 [ plexInit::i#2 plexInit::i#1 ] +Uplift Scope [memset] 36.67: zp[2]:20 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [plexShowSprite] 4: zp[1]:68 [ plexShowSprite::plexFreeAdd1_$0 ] 4: zp[1]:69 [ plexShowSprite::plexFreeAdd1_$1 ] 4: zp[1]:70 [ plexShowSprite::xpos_idx#0 ] 4: zp[1]:72 [ plexShowSprite::$2 ] 4: zp[1]:73 [ plexShowSprite::$3 ] 4: zp[1]:74 [ plexShowSprite::$9 ] 4: zp[1]:75 [ plexShowSprite::$5 ] 3: zp[1]:67 [ plexShowSprite::plexFreeAdd1_ypos#0 ] 2: zp[1]:71 [ plexShowSprite::$11 ] 0.55: zp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplift Scope [mulf8s_prepared] 13.83: zp[2]:16 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] 4: zp[1]:86 [ mulf8s_prepared::$8 ] 4: zp[1]:87 [ mulf8s_prepared::$15 ] 4: zp[1]:88 [ mulf8s_prepared::$12 ] 4: zp[1]:89 [ mulf8s_prepared::$16 ] 0.4: zp[1]:80 [ mulf8s_prepared::b#0 ] +Uplift Scope [exit] 22: zp[1]:38 [ exit::$0 ] +Uplift Scope [mulf8u_prepared] 4: zp[1]:83 [ mulf8u_prepared::b#0 ] 4: zp[2]:84 [ mulf8u_prepared::return#2 ] 1.33: zp[2]:90 [ mulf8u_prepared::return#0 ] +Uplift Scope [keyboard_matrix_read] 4: zp[1]:39 [ keyboard_matrix_read::return#2 ] 1.33: zp[1]:42 [ keyboard_matrix_read::return#0 ] +Uplift Scope [mulf8u_prepare] 4: zp[1]:79 [ mulf8u_prepare::a#0 ] +Uplift Scope [main] + +Uplifting [plexSort] best 106800 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] reg byte x [ plexSort::s#2 ] zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] zp[1]:77 [ plexSort::nxt_y#0 ] zp[1]:76 [ plexSort::nxt_idx#0 ] +Limited combination testing to 100 combinations of 972 possible. +Uplifting [loop] best 105000 combination zp[1]:63 [ loop::plexFreeNextYpos1_return#0 ] zp[2]:45 [ loop::$1 ] zp[2]:47 [ loop::$2 ] zp[2]:49 [ loop::x#0 ] reg byte a [ loop::$20 ] zp[2]:55 [ loop::$5 ] zp[2]:57 [ loop::$6 ] zp[2]:59 [ loop::y#0 ] reg byte a [ loop::$8 ] reg byte a [ loop::$11 ] zp[1]:10 [ loop::i1#5 loop::i1#1 ] zp[1]:5 [ loop::i#2 loop::i#1 ] zp[1]:51 [ loop::$4 ] zp[1]:4 [ loop::a#2 loop::a#1 loop::a#6 ] zp[1]:3 [ loop::r#2 loop::r#1 ] zp[1]:65 [ loop::$18 ] zp[1]:2 [ loop::angle#6 loop::angle#1 ] +Limited combination testing to 100 combinations of 147456 possible. +Uplifting [mulf8s] best 103794 combination reg byte x [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] reg byte a [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] zp[2]:43 [ mulf8s::return#2 ] zp[2]:53 [ mulf8s::return#3 ] zp[2]:81 [ mulf8s::return#0 ] +Uplifting [mulf_init] best 103544 combination zp[2]:34 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp[2]:28 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp[2]:22 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$1 ] reg byte a [ mulf_init::$4 ] reg byte a [ mulf_init::$5 ] zp[1]:30 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp[1]:33 [ mulf_init::dir#2 mulf_init::dir#4 ] zp[1]:24 [ mulf_init::c#2 mulf_init::c#1 ] zp[2]:31 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp[2]:25 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Limited combination testing to 100 combinations of 1024 possible. +Uplifting [init] best 103324 combination reg byte x [ init::i1#2 init::i1#1 ] zp[1]:18 [ init::i#2 init::i#1 ] reg byte a [ init::$10 ] reg byte a [ init::$3 ] zp[1]:95 [ init::$9 ] zp[1]:96 [ init::$5 ] zp[1]:97 [ init::$6 ] zp[1]:94 [ init::$4 ] +Limited combination testing to 100 combinations of 27648 possible. +Uplifting [] best 103324 combination zp[1]:9 [ plex_sprite_msb#43 plex_sprite_msb#16 plex_sprite_msb#3 ] zp[1]:6 [ plex_free_next#17 plex_free_next#13 ] zp[1]:8 [ plex_show_idx#43 plex_show_idx#15 ] zp[1]:7 [ plex_sprite_idx#43 plex_sprite_idx#15 ] +Uplifting [keyboard_key_pressed] best 103135 combination reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#3 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::$2 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plexInit] best 103015 combination reg byte x [ plexInit::i#2 plexInit::i#1 ] +Uplifting [memset] best 103015 combination zp[2]:20 [ memset::dst#2 memset::dst#1 ] +Uplifting [plexShowSprite] best 102993 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte x [ plexShowSprite::plexFreeAdd1_$1 ] reg byte a [ plexShowSprite::xpos_idx#0 ] reg byte a [ plexShowSprite::$2 ] zp[1]:73 [ plexShowSprite::$3 ] zp[1]:74 [ plexShowSprite::$9 ] zp[1]:75 [ plexShowSprite::$5 ] zp[1]:67 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:71 [ plexShowSprite::$11 ] zp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] +Limited combination testing to 100 combinations of 589824 possible. +Uplifting [mulf8s_prepared] best 102969 combination zp[2]:16 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] reg byte a [ mulf8s_prepared::$8 ] reg byte a [ mulf8s_prepared::$15 ] reg byte a [ mulf8s_prepared::$12 ] reg byte a [ mulf8s_prepared::$16 ] zp[1]:80 [ mulf8s_prepared::b#0 ] +Limited combination testing to 100 combinations of 512 possible. +Uplifting [exit] best 102909 combination reg byte a [ exit::$0 ] +Uplifting [mulf8u_prepared] best 102903 combination reg byte a [ mulf8u_prepared::b#0 ] zp[2]:84 [ mulf8u_prepared::return#2 ] zp[2]:90 [ mulf8u_prepared::return#0 ] +Uplifting [keyboard_matrix_read] best 102891 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte a [ keyboard_matrix_read::return#0 ] +Uplifting [mulf8u_prepare] best 102885 combination reg byte a [ mulf8u_prepare::a#0 ] +Uplifting [main] best 102885 combination +Attempting to uplift remaining variables inzp[1]:63 [ loop::plexFreeNextYpos1_return#0 ] +Uplifting [loop] best 102885 combination zp[1]:63 [ loop::plexFreeNextYpos1_return#0 ] +Attempting to uplift remaining variables inzp[1]:11 [ plexSort::m#2 plexSort::m#1 ] +Uplifting [plexSort] best 102885 combination zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] +Attempting to uplift remaining variables inzp[1]:10 [ loop::i1#5 loop::i1#1 ] +Uplifting [loop] best 102885 combination zp[1]:10 [ loop::i1#5 loop::i1#1 ] +Attempting to uplift remaining variables inzp[1]:5 [ loop::i#2 loop::i#1 ] +Uplifting [loop] best 102885 combination zp[1]:5 [ loop::i#2 loop::i#1 ] +Attempting to uplift remaining variables inzp[1]:77 [ plexSort::nxt_y#0 ] +Uplifting [plexSort] best 102885 combination zp[1]:77 [ plexSort::nxt_y#0 ] +Attempting to uplift remaining variables inzp[1]:51 [ loop::$4 ] +Uplifting [loop] best 102485 combination reg byte x [ loop::$4 ] +Attempting to uplift remaining variables inzp[1]:4 [ loop::a#2 loop::a#1 loop::a#6 ] +Uplifting [loop] best 102485 combination zp[1]:4 [ loop::a#2 loop::a#1 loop::a#6 ] +Attempting to uplift remaining variables inzp[1]:3 [ loop::r#2 loop::r#1 ] +Uplifting [loop] best 102485 combination zp[1]:3 [ loop::r#2 loop::r#1 ] +Attempting to uplift remaining variables inzp[1]:76 [ plexSort::nxt_idx#0 ] +Uplifting [plexSort] best 102485 combination zp[1]:76 [ plexSort::nxt_idx#0 ] +Attempting to uplift remaining variables inzp[1]:9 [ plex_sprite_msb#43 plex_sprite_msb#16 plex_sprite_msb#3 ] +Uplifting [] best 102485 combination zp[1]:9 [ plex_sprite_msb#43 plex_sprite_msb#16 plex_sprite_msb#3 ] +Attempting to uplift remaining variables inzp[1]:18 [ init::i#2 init::i#1 ] +Uplifting [init] best 102485 combination zp[1]:18 [ init::i#2 init::i#1 ] +Attempting to uplift remaining variables inzp[1]:6 [ plex_free_next#17 plex_free_next#13 ] +Uplifting [] best 102485 combination zp[1]:6 [ plex_free_next#17 plex_free_next#13 ] +Attempting to uplift remaining variables inzp[1]:65 [ loop::$18 ] +Uplifting [loop] best 102425 combination reg byte a [ loop::$18 ] +Attempting to uplift remaining variables inzp[1]:95 [ init::$9 ] +Uplifting [init] best 102365 combination reg byte a [ init::$9 ] +Attempting to uplift remaining variables inzp[1]:96 [ init::$5 ] +Uplifting [init] best 102325 combination reg byte a [ init::$5 ] +Attempting to uplift remaining variables inzp[1]:97 [ init::$6 ] +Uplifting [init] best 102265 combination reg byte a [ init::$6 ] +Attempting to uplift remaining variables inzp[1]:8 [ plex_show_idx#43 plex_show_idx#15 ] +Uplifting [] best 102265 combination zp[1]:8 [ plex_show_idx#43 plex_show_idx#15 ] +Attempting to uplift remaining variables inzp[1]:30 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Uplifting [mulf_init] best 102125 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Attempting to uplift remaining variables inzp[1]:7 [ plex_sprite_idx#43 plex_sprite_idx#15 ] +Uplifting [] best 102125 combination zp[1]:7 [ plex_sprite_idx#43 plex_sprite_idx#15 ] +Attempting to uplift remaining variables inzp[1]:33 [ mulf_init::dir#2 mulf_init::dir#4 ] +Uplifting [mulf_init] best 102125 combination zp[1]:33 [ mulf_init::dir#2 mulf_init::dir#4 ] +Attempting to uplift remaining variables inzp[1]:24 [ mulf_init::c#2 mulf_init::c#1 ] +Uplifting [mulf_init] best 102125 combination zp[1]:24 [ mulf_init::c#2 mulf_init::c#1 ] +Attempting to uplift remaining variables inzp[1]:94 [ init::$4 ] +Uplifting [init] best 102065 combination reg byte x [ init::$4 ] +Attempting to uplift remaining variables inzp[1]:73 [ plexShowSprite::$3 ] +Uplifting [plexShowSprite] best 102059 combination reg byte a [ plexShowSprite::$3 ] +Attempting to uplift remaining variables inzp[1]:74 [ plexShowSprite::$9 ] +Uplifting [plexShowSprite] best 102053 combination reg byte a [ plexShowSprite::$9 ] +Attempting to uplift remaining variables inzp[1]:75 [ plexShowSprite::$5 ] +Uplifting [plexShowSprite] best 102047 combination reg byte x [ plexShowSprite::$5 ] +Attempting to uplift remaining variables inzp[1]:67 [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Uplifting [plexShowSprite] best 102038 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Attempting to uplift remaining variables inzp[1]:2 [ loop::angle#6 loop::angle#1 ] +Uplifting [loop] best 102038 combination zp[1]:2 [ loop::angle#6 loop::angle#1 ] +Attempting to uplift remaining variables inzp[1]:71 [ plexShowSprite::$11 ] +Uplifting [plexShowSprite] best 102031 combination reg byte x [ plexShowSprite::$11 ] +Attempting to uplift remaining variables inzp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplifting [plexShowSprite] best 102031 combination zp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] +Attempting to uplift remaining variables inzp[1]:80 [ mulf8s_prepared::b#0 ] +Uplifting [mulf8s_prepared] best 102031 combination zp[1]:80 [ mulf8s_prepared::b#0 ] +Coalescing zero page register [ zp[2]:16 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] ] with [ zp[2]:81 [ mulf8s::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:16 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 ] ] with [ zp[2]:84 [ mulf8u_prepared::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:43 [ mulf8s::return#2 ] ] with [ zp[2]:45 [ loop::$1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:47 [ loop::$2 ] ] with [ zp[2]:49 [ loop::x#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:53 [ mulf8s::return#3 ] ] with [ zp[2]:55 [ loop::$5 ] ] - score: 1 +Coalescing zero page register [ zp[2]:57 [ loop::$6 ] ] with [ zp[2]:59 [ loop::y#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:16 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 ] ] with [ zp[2]:43 [ mulf8s::return#2 loop::$1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:16 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 loop::$1 ] ] with [ zp[2]:53 [ mulf8s::return#3 loop::$5 ] ] - score: 1 +Coalescing zero page register [ zp[2]:16 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 loop::$1 mulf8s::return#3 loop::$5 ] ] with [ zp[2]:90 [ mulf8u_prepared::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:16 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 loop::$1 mulf8s::return#3 loop::$5 mulf8u_prepared::return#0 ] ] with [ zp[2]:47 [ loop::$2 loop::x#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:16 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 loop::$1 mulf8s::return#3 loop::$5 mulf8u_prepared::return#0 loop::$2 loop::x#0 ] ] with [ zp[2]:57 [ loop::$6 loop::y#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:6 [ plex_free_next#17 plex_free_next#13 ] ] with [ zp[1]:3 [ loop::r#2 loop::r#1 ] ] +Coalescing zero page register [ zp[1]:7 [ plex_sprite_idx#43 plex_sprite_idx#15 ] ] with [ zp[1]:4 [ loop::a#2 loop::a#1 loop::a#6 ] ] +Coalescing zero page register [ zp[1]:8 [ plex_show_idx#43 plex_show_idx#15 ] ] with [ zp[1]:5 [ loop::i#2 loop::i#1 ] ] +Coalescing zero page register [ zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] ] with [ zp[1]:9 [ plex_sprite_msb#43 plex_sprite_msb#16 plex_sprite_msb#3 ] ] +Coalescing zero page register [ zp[1]:18 [ init::i#2 init::i#1 ] ] with [ zp[1]:2 [ loop::angle#6 loop::angle#1 ] ] +Coalescing zero page register [ zp[2]:20 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:16 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 loop::$1 mulf8s::return#3 loop::$5 mulf8u_prepared::return#0 loop::$2 loop::x#0 loop::$6 loop::y#0 ] ] +Coalescing zero page register [ zp[1]:24 [ mulf_init::c#2 mulf_init::c#1 ] ] with [ zp[1]:10 [ loop::i1#5 loop::i1#1 ] ] +Coalescing zero page register [ zp[1]:63 [ loop::plexFreeNextYpos1_return#0 ] ] with [ zp[1]:33 [ mulf_init::dir#2 mulf_init::dir#4 ] ] +Coalescing zero page register [ zp[1]:76 [ plexSort::nxt_idx#0 ] ] with [ zp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] ] +Coalescing zero page register [ zp[1]:80 [ mulf8s_prepared::b#0 ] ] with [ zp[1]:77 [ plexSort::nxt_y#0 ] ] +Coalescing zero page register [ zp[2]:22 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] ] with [ zp[2]:20 [ memset::dst#2 memset::dst#1 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 loop::$1 mulf8s::return#3 loop::$5 mulf8u_prepared::return#0 loop::$2 loop::x#0 loop::$6 loop::y#0 ] ] +Coalescing zero page register [ zp[1]:76 [ plexSort::nxt_idx#0 plexShowSprite::plex_sprite_idx2#0 ] ] with [ zp[1]:63 [ loop::plexFreeNextYpos1_return#0 mulf_init::dir#2 mulf_init::dir#4 ] ] +Coalescing zero page register [ zp[1]:80 [ mulf8s_prepared::b#0 plexSort::nxt_y#0 ] ] with [ zp[1]:24 [ mulf_init::c#2 mulf_init::c#1 loop::i1#5 loop::i1#1 ] ] +Allocated (was zp[1]:6) zp[1]:2 [ plex_free_next#17 plex_free_next#13 loop::r#2 loop::r#1 ] +Allocated (was zp[1]:7) zp[1]:3 [ plex_sprite_idx#43 plex_sprite_idx#15 loop::a#2 loop::a#1 loop::a#6 ] +Allocated (was zp[1]:8) zp[1]:4 [ plex_show_idx#43 plex_show_idx#15 loop::i#2 loop::i#1 ] +Allocated (was zp[1]:11) zp[1]:5 [ plexSort::m#2 plexSort::m#1 plex_sprite_msb#43 plex_sprite_msb#16 plex_sprite_msb#3 ] +Allocated (was zp[1]:18) zp[1]:6 [ init::i#2 init::i#1 loop::angle#6 loop::angle#1 ] +Allocated (was zp[2]:22) zp[2]:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 memset::dst#2 memset::dst#1 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 loop::$1 mulf8s::return#3 loop::$5 mulf8u_prepared::return#0 loop::$2 loop::x#0 loop::$6 loop::y#0 ] +Allocated (was zp[2]:25) zp[2]:9 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Allocated (was zp[2]:28) zp[2]:11 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] +Allocated (was zp[2]:31) zp[2]:13 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] +Allocated (was zp[2]:34) zp[2]:15 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] +Allocated (was zp[1]:76) zp[1]:17 [ plexSort::nxt_idx#0 plexShowSprite::plex_sprite_idx2#0 loop::plexFreeNextYpos1_return#0 mulf_init::dir#2 mulf_init::dir#4 ] +Allocated (was zp[1]:80) zp[1]:18 [ mulf8s_prepared::b#0 plexSort::nxt_y#0 mulf_init::c#2 mulf_init::c#1 loop::i1#5 loop::i1#1 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Same animation using a multiplexer + // Upstart +.pc = $801 "Basic" +:BasicUpstart(__bbegin) +.pc = $80d "Program" + // Global Constants & labels + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label BORDERCOL = $d020 + .label SPRITES_COLS = $d027 + .label D011 = $d011 + .const VIC_RST8 = $80 + .const VIC_DEN = $10 + .const VIC_RSEL = 8 + // 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 + // The colors of the C64 + .const BLACK = 0 + .const GREEN = 5 + // The number of sprites in the multiplexer + .const PLEX_COUNT = $20 + .const KEY_SPACE = $3c + // The BASIC screen + .label SCREEN = $400 + // The number of BOBs to render + .const NUM_BOBS = $10 + .label COS = SIN+$40 + // The address of the sprite pointers on the current screen (screen+$3f8). + .label PLEX_SCREEN_PTR = SCREEN+$3f8 + // The MSB bit of the next sprite to use for showing + .label plex_sprite_msb = 5 + // The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown. + .label plex_free_next = 2 + // The index the next sprite to use for showing (sprites are used round-robin) + .label plex_sprite_idx = 3 + // The index in the PLEX tables of the next sprite to show + // Prepare for showing the sprites + .label plex_show_idx = 4 + // @begin +__bbegin: + // [1] phi from @begin to @1 [phi:@begin->@1] +__b1_from___bbegin: + jmp __b1 + // @1 +__b1: + // [2] call main + jsr main + // [3] phi from @1 to @end [phi:@1->@end] +__bend_from___b1: + jmp __bend + // @end +__bend: + // main +main: { + // asm { sei } + sei + // [5] call init + jsr init + // [6] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + jmp __b1 + // main::@1 + __b1: + // [7] call loop + // [28] phi from main::@1 to loop [phi:main::@1->loop] + loop_from___b1: + jsr loop + // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + __b2_from___b1: + jmp __b2 + // main::@2 + __b2: + // [9] call exit + // [12] phi from main::@2 to exit [phi:main::@2->exit] + exit_from___b2: + jsr exit + jmp __b3 + // main::@3 + __b3: + // asm { cli } + cli + jmp __breturn + // main::@return + __breturn: + // [11] return + rts +} + // exit +// Exit the program +exit: { + // [13] phi from exit exit::@2 to exit::@1 [phi:exit/exit::@2->exit::@1] + __b1_from_exit: + __b1_from___b2: + jmp __b1 + // Wait for space release + // exit::@1 + __b1: + // [14] call keyboard_key_pressed + // [19] phi from exit::@1 to keyboard_key_pressed [phi:exit::@1->keyboard_key_pressed] + keyboard_key_pressed_from___b1: + jsr keyboard_key_pressed + // [15] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + jmp __b2 + // exit::@2 + __b2: + // [16] (byte~) exit::$0 ← (byte) keyboard_key_pressed::return#2 + // [17] if((byte) 0!=(byte~) exit::$0) goto exit::@1 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne __b1_from___b2 + jmp __breturn + // exit::@return + __breturn: + // [18] 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 + // [20] call keyboard_matrix_read + jsr keyboard_matrix_read + // [21] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + jmp __b1 + // keyboard_key_pressed::@1 + __b1: + // [22] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 + // [23] (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: + // [24] 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: { + // [25] *((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 + // [26] (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: + // [27] return + rts +} + // loop +// The main loop +loop: { + .label __1 = 7 + .label __2 = 7 + .label __5 = 7 + .label __6 = 7 + .label x = 7 + .label y = 7 + .label a = 3 + .label r = 2 + .label i = 4 + // Render Rotated BOBs + .label angle = 6 + .label plexFreeNextYpos1_return = $11 + .label i1 = $12 + // [29] phi from loop to loop::@1 [phi:loop->loop::@1] + __b1_from_loop: + // [29] phi (byte) loop::angle#6 = (byte) 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z angle + jmp __b1 + // loop::@1 + __b1: + jmp __b2 + // loop::@2 + __b2: + // [30] if(*((const byte*) RASTER)<(byte) $d8) goto loop::@2 -- _deref_pbuc1_lt_vbuc2_then_la1 + lda RASTER + cmp #$d8 + bcc __b2 + jmp __b3 + // loop::@3 + __b3: + // [31] *((const byte*) BORDERCOL) ← (byte) $f -- _deref_pbuc1=vbuc2 + lda #$f + sta BORDERCOL + // [32] (byte) loop::a#6 ← (byte) loop::angle#6 -- vbuz1=vbuz2 + lda.z angle + sta.z a + // [33] phi from loop::@3 to loop::@4 [phi:loop::@3->loop::@4] + __b4_from___b3: + // [33] phi (byte) loop::i#2 = (byte) 0 [phi:loop::@3->loop::@4#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // [33] phi (byte) loop::a#2 = (byte) loop::a#6 [phi:loop::@3->loop::@4#1] -- register_copy + // [33] phi (signed byte) loop::r#2 = (signed byte) $1e [phi:loop::@3->loop::@4#2] -- vbsz1=vbsc1 + lda #$1e + sta.z r + jmp __b4 + // [33] phi from loop::@12 to loop::@4 [phi:loop::@12->loop::@4] + __b4_from___b12: + // [33] phi (byte) loop::i#2 = (byte) loop::i#1 [phi:loop::@12->loop::@4#0] -- register_copy + // [33] phi (byte) loop::a#2 = (byte) loop::a#1 [phi:loop::@12->loop::@4#1] -- register_copy + // [33] phi (signed byte) loop::r#2 = (signed byte) loop::r#1 [phi:loop::@12->loop::@4#2] -- register_copy + jmp __b4 + // loop::@4 + __b4: + // [34] *((const byte*) BORDERCOL) ← (byte) 6 -- _deref_pbuc1=vbuc2 + //kickasm {{ .break }} + lda #6 + sta BORDERCOL + // [35] (signed byte) mulf8s::a#0 ← (signed byte) loop::r#2 -- vbsaa=vbsz1 + lda.z r + // [36] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) loop::a#2) -- vbsxx=pbsc1_derefidx_vbuz1 + ldy.z a + ldx COS,y + // [37] call mulf8s + // [124] phi from loop::@4 to mulf8s [phi:loop::@4->mulf8s] + mulf8s_from___b4: + // [124] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#0 [phi:loop::@4->mulf8s#0] -- register_copy + // [124] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#0 [phi:loop::@4->mulf8s#1] -- register_copy + jsr mulf8s + // [38] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 + jmp __b11 + // loop::@11 + __b11: + // [39] (signed word~) loop::$1 ← (signed word) mulf8s::return#2 + // [40] (signed word~) loop::$2 ← (signed word~) loop::$1 << (byte) 1 -- vwsz1=vwsz1_rol_1 + asl.z __2 + rol.z __2+1 + // [41] (signed word) loop::x#0 ← (signed word~) loop::$2 + (signed word)(number) $7d*(number) $100 -- vwsz1=vwsz1_plus_vwsc1 + clc + lda.z x + adc #<$7d*$100 + sta.z x + lda.z x+1 + adc #>$7d*$100 + sta.z x+1 + // [42] (byte~) loop::$4 ← > (signed word) loop::x#0 -- vbuxx=_hi_vwsz1 + lda.z x+1 + tax + // [43] (byte~) loop::$20 ← (byte) loop::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z i + asl + // [44] *((const word*) PLEX_XPOS + (byte~) loop::$20) ← (byte~) loop::$4 -- pwuc1_derefidx_vbuaa=vbuxx + tay + txa + sta PLEX_XPOS,y + // [45] (signed byte) mulf8s::a#1 ← (signed byte) loop::r#2 -- vbsaa=vbsz1 + lda.z r + // [46] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) loop::a#2) -- vbsxx=pbsc1_derefidx_vbuz1 + ldy.z a + ldx SIN,y + // [47] call mulf8s + // [124] phi from loop::@11 to mulf8s [phi:loop::@11->mulf8s] + mulf8s_from___b11: + // [124] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#1 [phi:loop::@11->mulf8s#0] -- register_copy + // [124] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#1 [phi:loop::@11->mulf8s#1] -- register_copy + jsr mulf8s + // [48] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 + jmp __b12 + // loop::@12 + __b12: + // [49] (signed word~) loop::$5 ← (signed word) mulf8s::return#3 + // [50] (signed word~) loop::$6 ← (signed word~) loop::$5 << (byte) 1 -- vwsz1=vwsz1_rol_1 + asl.z __6 + rol.z __6+1 + // [51] (signed word) loop::y#0 ← (signed word~) loop::$6 + (signed word)(number) $7d*(number) $100 -- vwsz1=vwsz1_plus_vwsc1 + clc + lda.z y + adc #<$7d*$100 + sta.z y + lda.z y+1 + adc #>$7d*$100 + sta.z y+1 + // [52] (byte~) loop::$8 ← > (signed word) loop::y#0 -- vbuaa=_hi_vwsz1 + lda.z y+1 + // [53] *((const byte*) PLEX_YPOS + (byte) loop::i#2) ← (byte~) loop::$8 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z i + sta PLEX_YPOS,y + // [54] (byte) loop::a#1 ← (byte) loop::a#2 + (byte) $62 -- vbuz1=vbuz1_plus_vbuc1 + lax.z a + axs #-[$62] + stx.z a + // [55] (signed byte) loop::r#1 ← (signed byte) loop::r#2 + (signed byte) 3 -- vbsz1=vbsz1_plus_vbsc1 + lax.z r + axs #-[3] + stx.z r + // [56] (byte) loop::i#1 ← ++ (byte) loop::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [57] if((byte) loop::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto loop::@4 -- vbuz1_neq_vbuc1_then_la1 + lda #NUM_BOBS-1+1 + cmp.z i + bne __b4_from___b12 + jmp __b5 + // loop::@5 + __b5: + // [58] *((const byte*) BORDERCOL) ← (byte) 3 -- _deref_pbuc1=vbuc2 + lda #3 + sta BORDERCOL + // [59] call plexSort + // [103] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + plexSort_from___b5: + jsr plexSort + jmp __b13 + // loop::@13 + __b13: + // [60] (byte) loop::angle#1 ← (byte) loop::angle#6 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + lax.z angle + axs #-[3] + stx.z angle + // [61] *((const byte*) BORDERCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 + lda #BLACK + sta BORDERCOL + jmp __b6 + // Sort the sprites by y-position + // loop::@6 + __b6: + // [62] (byte~) loop::$11 ← *((const byte*) D011) & (const byte) VIC_RST8 -- vbuaa=_deref_pbuc1_band_vbuc2 + lda #VIC_RST8 + and D011 + // [63] if((byte~) loop::$11!=(byte) 0) goto loop::@6 -- vbuaa_neq_0_then_la1 + cmp #0 + bne __b6 + // [64] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7] + __b7_from___b6: + // [64] phi (byte) loop::i1#5 = (byte) 0 [phi:loop::@6->loop::@7#0] -- vbuz1=vbuc1 + lda #0 + sta.z i1 + // [64] phi (byte) plex_sprite_msb#43 = (byte) 1 [phi:loop::@6->loop::@7#1] -- vbuz1=vbuc1 + lda #1 + sta.z plex_sprite_msb + // [64] phi (byte) plex_show_idx#43 = (byte) 0 [phi:loop::@6->loop::@7#2] -- vbuz1=vbuc1 + lda #0 + sta.z plex_show_idx + // [64] phi (byte) plex_sprite_idx#43 = (byte) 0 [phi:loop::@6->loop::@7#3] -- vbuz1=vbuc1 + lda #0 + sta.z plex_sprite_idx + // [64] phi (byte) plex_free_next#17 = (byte) 0 [phi:loop::@6->loop::@7#4] -- vbuz1=vbuc1 + lda #0 + sta.z plex_free_next + jmp __b7 + // Show the sprites + // [64] phi from loop::@14 to loop::@7 [phi:loop::@14->loop::@7] + __b7_from___b14: + // [64] phi (byte) loop::i1#5 = (byte) loop::i1#1 [phi:loop::@14->loop::@7#0] -- register_copy + // [64] phi (byte) plex_sprite_msb#43 = (byte) plex_sprite_msb#16 [phi:loop::@14->loop::@7#1] -- register_copy + // [64] phi (byte) plex_show_idx#43 = (byte) plex_show_idx#15 [phi:loop::@14->loop::@7#2] -- register_copy + // [64] phi (byte) plex_sprite_idx#43 = (byte) plex_sprite_idx#15 [phi:loop::@14->loop::@7#3] -- register_copy + // [64] phi (byte) plex_free_next#17 = (byte) plex_free_next#13 [phi:loop::@14->loop::@7#4] -- register_copy + jmp __b7 + // loop::@7 + __b7: + // [65] *((const byte*) BORDERCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 + lda #BLACK + sta BORDERCOL + jmp plexFreeNextYpos1 + // loop::plexFreeNextYpos1 + plexFreeNextYpos1: + // [66] (byte) loop::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next#17) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z plex_free_next + lda PLEX_FREE_YPOS,y + sta.z plexFreeNextYpos1_return + jmp __b8 + // loop::@8 + __b8: + // [67] if(*((const byte*) RASTER)<(byte) loop::plexFreeNextYpos1_return#0) goto loop::@8 -- _deref_pbuc1_lt_vbuz1_then_la1 + lda RASTER + cmp.z plexFreeNextYpos1_return + bcc __b8 + jmp __b9 + // loop::@9 + __b9: + // [68] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + // [69] call plexShowSprite + jsr plexShowSprite + jmp __b14 + // loop::@14 + __b14: + // [70] (byte) loop::i1#1 ← ++ (byte) loop::i1#5 -- vbuz1=_inc_vbuz1 + inc.z i1 + // [71] if((byte) loop::i1#1!=(const byte) PLEX_COUNT-(byte) 1+(byte) 1) goto loop::@7 -- vbuz1_neq_vbuc1_then_la1 + lda #PLEX_COUNT-1+1 + cmp.z i1 + bne __b7_from___b14 + jmp __b10 + // loop::@10 + __b10: + // [72] *((const byte*) BORDERCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 + lda #BLACK + sta BORDERCOL + // [73] call keyboard_key_pressed + // [19] phi from loop::@10 to keyboard_key_pressed [phi:loop::@10->keyboard_key_pressed] + keyboard_key_pressed_from___b10: + jsr keyboard_key_pressed + // [74] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 + jmp __b15 + // loop::@15 + __b15: + // [75] (byte~) loop::$18 ← (byte) keyboard_key_pressed::return#3 + // [76] if((byte) 0!=(byte~) loop::$18) goto loop::@return -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne __breturn + // [29] phi from loop::@15 to loop::@1 [phi:loop::@15->loop::@1] + __b1_from___b15: + // [29] phi (byte) loop::angle#6 = (byte) loop::angle#1 [phi:loop::@15->loop::@1#0] -- register_copy + jmp __b1 + // loop::@return + __breturn: + // [77] return + rts +} + // plexShowSprite +// Show the next sprite. +// plexSort() prepares showing the sprites +plexShowSprite: { + .label plex_sprite_idx2 = $11 + // [78] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#43 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z plex_sprite_idx + asl + sta.z plex_sprite_idx2 + // [79] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43)) -- vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) + ldx.z plex_show_idx + ldy PLEX_SORTED_IDX,x + lda PLEX_YPOS,y + // [80] *((const byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z plex_sprite_idx2 + sta SPRITES_YPOS,y + jmp plexFreeAdd1 + // plexShowSprite::plexFreeAdd1 + plexFreeAdd1: + // [81] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 -- vbuaa=vbuaa_plus_vbuc1 + clc + adc #$15 + // [82] *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next#17) ← (byte~) plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z plex_free_next + sta PLEX_FREE_YPOS,y + // [83] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (byte) plex_free_next#17 + (byte) 1 -- vbuxx=vbuz1_plus_1 + ldx.z plex_free_next + inx + // [84] (byte) plex_free_next#13 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 + lda #7 + sax.z plex_free_next + jmp __b4 + // plexShowSprite::@4 + __b4: + // [85] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#43) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43)) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz2) + ldx.z plex_show_idx + ldy PLEX_SORTED_IDX,x + lda PLEX_PTR,y + ldx.z plex_sprite_idx + sta PLEX_SCREEN_PTR,x + // [86] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43) -- vbuaa=pbuc1_derefidx_vbuz1 + ldy.z plex_show_idx + lda PLEX_SORTED_IDX,y + // [87] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 -- vbuxx=vbuaa_rol_1 + asl + tax + // [88] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuaa=_lo_pwuc1_derefidx_vbuxx + lda PLEX_XPOS,x + // [89] *((const byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z plex_sprite_idx2 + sta SPRITES_XPOS,y + // [90] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuaa=_hi_pwuc1_derefidx_vbuxx + lda PLEX_XPOS+1,x + // [91] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1 + cmp #0 + bne __b1 + jmp __b3 + // plexShowSprite::@3 + __b3: + // [92] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb#43 -- vbuaa=vbuc1_bxor_vbuz1 + lda #$ff + eor.z plex_sprite_msb + // [93] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa + and SPRITES_XMSB + sta SPRITES_XMSB + jmp __b2 + // plexShowSprite::@2 + __b2: + // [94] (byte~) plexShowSprite::$5 ← (byte) plex_sprite_idx#43 + (byte) 1 -- vbuxx=vbuz1_plus_1 + ldx.z plex_sprite_idx + inx + // [95] (byte) plex_sprite_idx#15 ← (byte~) plexShowSprite::$5 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 + lda #7 + sax.z plex_sprite_idx + // [96] (byte) plex_show_idx#15 ← ++ (byte) plex_show_idx#43 -- vbuz1=_inc_vbuz1 + inc.z plex_show_idx + // [97] (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#43 << (byte) 1 -- vbuz1=vbuz1_rol_1 + asl.z plex_sprite_msb + // [98] if((byte) plex_sprite_msb#3!=(byte) 0) goto plexShowSprite::@5 -- vbuz1_neq_0_then_la1 + lda.z plex_sprite_msb + cmp #0 + bne __b5_from___b2 + // [100] phi from plexShowSprite::@2 to plexShowSprite::@return [phi:plexShowSprite::@2->plexShowSprite::@return] + __breturn_from___b2: + // [100] phi (byte) plex_sprite_msb#16 = (byte) 1 [phi:plexShowSprite::@2->plexShowSprite::@return#0] -- vbuz1=vbuc1 + lda #1 + sta.z plex_sprite_msb + jmp __breturn + // [99] phi from plexShowSprite::@2 to plexShowSprite::@5 [phi:plexShowSprite::@2->plexShowSprite::@5] + __b5_from___b2: + jmp __b5 + // plexShowSprite::@5 + __b5: + // [100] phi from plexShowSprite::@5 to plexShowSprite::@return [phi:plexShowSprite::@5->plexShowSprite::@return] + __breturn_from___b5: + // [100] phi (byte) plex_sprite_msb#16 = (byte) plex_sprite_msb#3 [phi:plexShowSprite::@5->plexShowSprite::@return#0] -- register_copy + jmp __breturn + // plexShowSprite::@return + __breturn: + // [101] return + rts + // plexShowSprite::@1 + __b1: + // [102] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) plex_sprite_msb#43 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + lda SPRITES_XMSB + ora.z plex_sprite_msb + sta SPRITES_XMSB + jmp __b2 +} + // plexSort +// Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions in PLEX_YPOS +// Assumes that the positions are nearly sorted already (as each sprite just moves a bit) +// Uses an insertion sort: +// 1. Moves a marker (m) from the start to end of the array. Every time the marker moves forward all elements before the marker are sorted correctly. +// 2a. If the next element after the marker is larger that the current element +// the marker can be moved forwards (as the sorting is correct). +// 2b. If the next element after the marker is smaller than the current element: +// elements before the marker are shifted right one at a time until encountering one smaller than the current one. +// It is then inserted at the spot. Now the marker can move forward. +plexSort: { + .label nxt_idx = $11 + .label nxt_y = $12 + .label m = 5 + // [104] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] + __b1_from_plexSort: + // [104] phi (byte) plexSort::m#2 = (byte) 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z m + jmp __b1 + // [104] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] + __b1_from___b2: + // [104] phi (byte) plexSort::m#2 = (byte) plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy + jmp __b1 + // plexSort::@1 + __b1: + // [105] (byte) plexSort::nxt_idx#0 ← *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::m#2) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z m + lda PLEX_SORTED_IDX+1,y + sta.z nxt_idx + // [106] (byte) plexSort::nxt_y#0 ← *((const byte*) PLEX_YPOS + (byte) plexSort::nxt_idx#0) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z nxt_idx + lda PLEX_YPOS,y + sta.z nxt_y + // [107] if((byte) plexSort::nxt_y#0>=*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2))) goto plexSort::@2 -- vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1 + lda.z nxt_y + ldx.z m + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcs __b2 + jmp __b5 + // plexSort::@5 + __b5: + // [108] (byte) plexSort::s#6 ← (byte) plexSort::m#2 -- vbuxx=vbuz1 + ldx.z m + // [109] phi from plexSort::@5 plexSort::@6 to plexSort::@3 [phi:plexSort::@5/plexSort::@6->plexSort::@3] + __b3_from___b5: + __b3_from___b6: + // [109] phi (byte) plexSort::s#3 = (byte) plexSort::s#6 [phi:plexSort::@5/plexSort::@6->plexSort::@3#0] -- register_copy + jmp __b3 + // plexSort::@3 + __b3: + // [110] *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::s#3) ← *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#3) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda PLEX_SORTED_IDX,x + sta PLEX_SORTED_IDX+1,x + // [111] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 -- vbuxx=_dec_vbuxx + dex + // [112] if((byte) plexSort::s#1==(byte) $ff) goto plexSort::@4 -- vbuxx_eq_vbuc1_then_la1 + cpx #$ff + beq __b4 + jmp __b6 + // plexSort::@6 + __b6: + // [113] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 -- vbuz1_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 + lda.z nxt_y + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcc __b3_from___b6 + jmp __b4 + // plexSort::@4 + __b4: + // [114] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 -- vbuxx=_inc_vbuxx + inx + // [115] *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 -- pbuc1_derefidx_vbuxx=vbuz1 + lda.z nxt_idx + sta PLEX_SORTED_IDX,x + jmp __b2 + // plexSort::@2 + __b2: + // [116] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 -- vbuz1=_inc_vbuz1 + inc.z m + // [117] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT-(byte) 2+(byte) 1) goto plexSort::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #PLEX_COUNT-2+1 + cmp.z m + bne __b1_from___b2 + // [118] phi from plexSort::@2 to plexSort::plexFreePrepare1 [phi:plexSort::@2->plexSort::plexFreePrepare1] + plexFreePrepare1_from___b2: + jmp plexFreePrepare1 + // plexSort::plexFreePrepare1 + plexFreePrepare1: + // [119] phi from plexSort::plexFreePrepare1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1] + plexFreePrepare1___b1_from_plexFreePrepare1: + // [119] phi (byte) plexSort::plexFreePrepare1_s#2 = (byte) 0 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1#0] -- vbuxx=vbuc1 + ldx #0 + jmp plexFreePrepare1___b1 + // [119] phi from plexSort::plexFreePrepare1_@1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1] + plexFreePrepare1___b1_from_plexFreePrepare1___b1: + // [119] phi (byte) plexSort::plexFreePrepare1_s#2 = (byte) plexSort::plexFreePrepare1_s#1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1#0] -- register_copy + jmp plexFreePrepare1___b1 + // plexSort::plexFreePrepare1_@1 + plexFreePrepare1___b1: + // [120] *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + lda #0 + sta PLEX_FREE_YPOS,x + // [121] (byte) plexSort::plexFreePrepare1_s#1 ← ++ (byte) plexSort::plexFreePrepare1_s#2 -- vbuxx=_inc_vbuxx + inx + // [122] if((byte) plexSort::plexFreePrepare1_s#1!=(byte) 8) goto plexSort::plexFreePrepare1_@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #8 + bne plexFreePrepare1___b1_from_plexFreePrepare1___b1 + jmp __breturn + // plexSort::@return + __breturn: + // [123] return + rts +} + // mulf8s +// Fast multiply two signed bytes to a word result +// mulf8s(signed byte register(A) a, signed byte register(X) b) +mulf8s: { + .label return = 7 + jmp mulf8s_prepare1 + // mulf8s::mulf8s_prepare1 + mulf8s_prepare1: + // [125] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 + // [126] call mulf8u_prepare + jsr mulf8u_prepare + jmp __b1 + // mulf8s::@1 + __b1: + // [127] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 -- vbsz1=vbsxx + stx.z mulf8s_prepared.b + // [128] call mulf8s_prepared + jsr mulf8s_prepared + jmp __b2 + // mulf8s::@2 + __b2: + // [129] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 + jmp __breturn + // mulf8s::@return + __breturn: + // [130] return + rts +} + // mulf8s_prepared +// Calculate fast multiply with a prepared unsigned byte to a word result +// The prepared number is set by calling mulf8s_prepare(byte a) +// mulf8s_prepared(signed byte zeropage($12) b) +mulf8s_prepared: { + .label memA = $fd + .label m = 7 + .label b = $12 + // [131] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuz1 + lda.z b + // [132] call mulf8u_prepared + jsr mulf8u_prepared + // [133] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + jmp __b5 + // mulf8s_prepared::@5 + __b5: + // [134] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 + // [135] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 + lda memA + cmp #0 + bpl __b1_from___b5 + jmp __b3 + // mulf8s_prepared::@3 + __b3: + // [136] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 + lda.z m+1 + // [137] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 + sec + sbc.z b + // [138] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuaa + sta.z m+1 + // [139] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] + __b1_from___b3: + __b1_from___b5: + // [139] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy + jmp __b1 + // mulf8s_prepared::@1 + __b1: + // [140] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 + lda.z b + cmp #0 + bpl __b2_from___b1 + jmp __b4 + // mulf8s_prepared::@4 + __b4: + // [141] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 + lda.z m+1 + // [142] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuaa=vbuaa_minus__deref_pbuc1 + sec + sbc memA + // [143] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuaa + sta.z m+1 + // [144] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] + __b2_from___b1: + __b2_from___b4: + // [144] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy + jmp __b2 + // mulf8s_prepared::@2 + __b2: + jmp __breturn + // mulf8s_prepared::@return + __breturn: + // [145] return + rts +} + // mulf8u_prepared +// Calculate fast multiply with a prepared unsigned byte to a word result +// The prepared number is set by calling mulf8u_prepare(byte a) +// mulf8u_prepared(byte register(A) b) +mulf8u_prepared: { + .label resL = $fe + .label memB = $ff + .label return = 7 + // [146] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 -- _deref_pbuc1=vbuaa + sta memB + // asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } + ldx memB + sec + sm1: + lda mulf_sqr1_lo,x + sm2: + sbc mulf_sqr2_lo,x + sta resL + sm3: + lda mulf_sqr1_hi,x + sm4: + sbc mulf_sqr2_hi,x + sta memB + // [148] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + lda resL + sta.z return + lda memB + sta.z return+1 + jmp __breturn + // mulf8u_prepared::@return + __breturn: + // [149] return + rts +} + // mulf8u_prepare +// Prepare for fast multiply with an unsigned byte to a word result +// mulf8u_prepare(byte register(A) a) +mulf8u_prepare: { + .label memA = $fd + // [150] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 -- _deref_pbuc1=vbuaa + sta memA + // asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } + lda memA + sta mulf8u_prepared.sm1+1 + sta mulf8u_prepared.sm3+1 + eor #$ff + sta mulf8u_prepared.sm2+1 + sta mulf8u_prepared.sm4+1 + jmp __breturn + // mulf8u_prepare::@return + __breturn: + // [152] return + rts +} + // init +// Initialize the program +init: { + .label i = 6 + // [153] *((const byte*) D011) ← (const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 + lda #VIC_DEN|VIC_RSEL|3 + sta D011 + // [154] call plexInit + // [212] phi from init to plexInit [phi:init->plexInit] + plexInit_from_init: + jsr plexInit + // [155] phi from init to init::@1 [phi:init->init::@1] + __b1_from_init: + // [155] phi (byte) init::i#2 = (byte) 0 [phi:init->init::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp __b1 + // Set the sprite pointers & initial positions + // [155] phi from init::@1 to init::@1 [phi:init::@1->init::@1] + __b1_from___b1: + // [155] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@1->init::@1#0] -- register_copy + jmp __b1 + // init::@1 + __b1: + // [156] *((const byte*) PLEX_PTR + (byte) init::i#2) ← (byte)(const byte*) SPRITE/(byte) $40 -- pbuc1_derefidx_vbuz1=vbuc2 + lda #$ff&SPRITE/$40 + ldy.z i + sta PLEX_PTR,y + // [157] (byte~) init::$10 ← (byte) init::i#2 << (byte) 2 -- vbuaa=vbuz1_rol_2 + lda.z i + asl + asl + // [158] (byte~) init::$3 ← (byte~) init::$10 + (byte) init::i#2 -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z i + // [159] (byte~) init::$4 ← (byte) $18 + (byte~) init::$3 -- vbuxx=vbuc1_plus_vbuaa + tax + axs #-[$18] + // [160] (byte~) init::$9 ← (byte) init::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z i + asl + // [161] *((const word*) PLEX_XPOS + (byte~) init::$9) ← (byte~) init::$4 -- pwuc1_derefidx_vbuaa=vbuxx + tay + txa + sta PLEX_XPOS,y + // [162] (byte~) init::$5 ← (byte) init::i#2 << (byte) 3 -- vbuaa=vbuz1_rol_3 + lda.z i + asl + asl + asl + // [163] (byte~) init::$6 ← (byte) $32 + (byte~) init::$5 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #$32 + // [164] *((const byte*) PLEX_YPOS + (byte) init::i#2) ← (byte~) init::$6 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z i + sta PLEX_YPOS,y + // [165] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [166] if((byte) init::i#1!=(const byte) PLEX_COUNT-(byte) 1+(byte) 1) goto init::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #PLEX_COUNT-1+1 + cmp.z i + bne __b1_from___b1 + jmp __b2 + // init::@2 + __b2: + // [167] *((const byte*) SPRITES_ENABLE) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // Enable & initialize sprites + lda #$ff + sta SPRITES_ENABLE + // [168] phi from init::@2 to init::@3 [phi:init::@2->init::@3] + __b3_from___b2: + // [168] phi (byte) init::i1#2 = (byte) 0 [phi:init::@2->init::@3#0] -- vbuxx=vbuc1 + ldx #0 + jmp __b3 + // [168] phi from init::@3 to init::@3 [phi:init::@3->init::@3] + __b3_from___b3: + // [168] phi (byte) init::i1#2 = (byte) init::i1#1 [phi:init::@3->init::@3#0] -- register_copy + jmp __b3 + // init::@3 + __b3: + // [169] *((const byte*) SPRITES_COLS + (byte) init::i1#2) ← (const byte) GREEN -- pbuc1_derefidx_vbuxx=vbuc2 + lda #GREEN + sta SPRITES_COLS,x + // [170] (byte) init::i1#1 ← ++ (byte) init::i1#2 -- vbuxx=_inc_vbuxx + inx + // [171] if((byte) init::i1#1!=(byte) 8) goto init::@3 -- vbuxx_neq_vbuc1_then_la1 + cpx #8 + bne __b3_from___b3 + // [172] phi from init::@3 to init::@4 [phi:init::@3->init::@4] + __b4_from___b3: + jmp __b4 + // init::@4 + __b4: + // [173] call mulf_init + // [183] phi from init::@4 to mulf_init [phi:init::@4->mulf_init] + mulf_init_from___b4: + jsr mulf_init + // [174] phi from init::@4 to init::@5 [phi:init::@4->init::@5] + __b5_from___b4: + jmp __b5 + // init::@5 + __b5: + // [175] call memset + // [177] phi from init::@5 to memset [phi:init::@5->memset] + memset_from___b5: + jsr memset + jmp __breturn + // init::@return + __breturn: + // [176] 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: { + .label str = SCREEN + .const c = ' ' + .const num = $3e8 + .label end = str+num + .label dst = 7 + // [178] phi from memset to memset::@1 [phi:memset->memset::@1] + __b1_from_memset: + // [178] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + lda #str + sta.z dst+1 + jmp __b1 + // memset::@1 + __b1: + // [179] 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 #memset::@1] + __b1_from___b2: + // [178] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + jmp __b1 +} + // mulf_init +// Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4) +mulf_init: { + // x/2 + .label c = $12 + // Counter used for determining x%2==0 + .label sqr1_hi = 9 + // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 + .label sqr = $f + .label sqr1_lo = 7 + // Decrease or increase x_255 - initially we decrease + .label sqr2_hi = $d + .label sqr2_lo = $b + //Start with g(0)=f(255) + .label dir = $11 + // [184] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + __b1_from_mulf_init: + // [184] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 + ldx #0 + // [184] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + lda #mulf_sqr1_hi+1 + sta.z sqr1_hi+1 + // [184] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + lda #<0 + sta.z sqr + lda #>0 + sta.z sqr+1 + // [184] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + lda #0 + sta.z c + // [184] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + lda #mulf_sqr1_lo+1 + sta.z sqr1_lo+1 + jmp __b1 + // mulf_init::@1 + __b1: + // [185] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + lda.z sqr1_lo+1 + cmp #>mulf_sqr1_lo+$200 + bne __b2 + lda.z sqr1_lo + cmp #mulf_init::@5] + __b5_from___b1: + // [186] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + lda #$ff + sta.z dir + // [186] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + lda #mulf_sqr2_hi + sta.z sqr2_hi+1 + // [186] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 + ldx #-1 + // [186] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + lda #mulf_sqr2_lo + sta.z sqr2_lo+1 + jmp __b5 + // mulf_init::@5 + __b5: + // [187] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + lda.z sqr2_lo+1 + cmp #>mulf_sqr2_lo+$1ff + bne __b6 + lda.z sqr2_lo + cmp #mulf_init::@8] + __b8_from___b6: + // [197] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + lda #1 + sta.z dir + jmp __b8 + // [196] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + __b9_from___b6: + jmp __b9 + // mulf_init::@9 + __b9: + // [197] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + __b8_from___b9: + // [197] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + jmp __b8 + // mulf_init::@8 + __b8: + // [198] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + inc.z sqr2_lo + bne !+ + inc.z sqr2_lo+1 + !: + // [186] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + __b5_from___b8: + // [186] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [186] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [186] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [186] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + jmp __b5 + // mulf_init::@2 + __b2: + // [199] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + inc.z c + // [200] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 + lda #1 + and.z c + // [201] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 + cmp #0 + bne __b3_from___b2 + jmp __b4 + // mulf_init::@4 + __b4: + // [202] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx + inx + // [203] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + inc.z sqr + bne !+ + inc.z sqr+1 + !: + // [204] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + __b3_from___b2: + __b3_from___b4: + // [204] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [204] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + jmp __b3 + // mulf_init::@3 + __b3: + // [205] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 + lda.z sqr + // [206] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuaa + ldy #0 + sta (sqr1_lo),y + // [207] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 + lda.z sqr+1 + // [208] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa + ldy #0 + sta (sqr1_hi),y + // [209] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + inc.z sqr1_hi + bne !+ + inc.z sqr1_hi+1 + !: + // [210] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx + txa + clc + adc.z sqr + sta.z sqr + bcc !+ + inc.z sqr+1 + !: + // [211] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + inc.z sqr1_lo + bne !+ + inc.z sqr1_lo+1 + !: + // [184] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + __b1_from___b3: + // [184] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [184] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [184] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [184] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [184] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + jmp __b1 +} + // plexInit +// Initialize the multiplexer data structures +plexInit: { + // [213] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] + plexSetScreen1_from_plexInit: + jmp plexSetScreen1 + // plexInit::plexSetScreen1 + plexSetScreen1: + // [214] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] + __b1_from_plexSetScreen1: + // [214] phi (byte) plexInit::i#2 = (byte) 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 + ldx #0 + jmp __b1 + // [214] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] + __b1_from___b1: + // [214] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy + jmp __b1 + // plexInit::@1 + __b1: + // [215] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx + txa + sta PLEX_SORTED_IDX,x + // [216] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 -- vbuxx=_inc_vbuxx + inx + // [217] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #PLEX_COUNT-1+1 + bne __b1_from___b1 + jmp __breturn + // plexInit::@return + __breturn: + // [218] return + rts +} + // File Data + // The x-positions of the multiplexer sprites ($000-$1ff) + PLEX_XPOS: .fill 2*PLEX_COUNT, 0 + // The y-positions of the multiplexer sprites. + PLEX_YPOS: .fill PLEX_COUNT, 0 + // The sprite pointers for the multiplexed sprites + PLEX_PTR: .fill PLEX_COUNT, 0 + // Indexes of the plex-sprites sorted by sprite y-position. Each call to plexSort() will fix the sorting if changes to the Y-positions have ruined it. + PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 + // Contains the Y-position where each sprite is free again. PLEX_FREE_YPOS[s] holds the Y-position where sprite s is free to use again. + PLEX_FREE_YPOS: .fill 8, 0 + // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). + // f(x) = >(( x * x )/4) + .align $100 + mulf_sqr1_hi: .fill $200, 0 + // g(x) = >((( x - 255) * ( x - 255 ))/4) + .align $100 + mulf_sqr2_hi: .fill $200, 0 + // 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 BOB sprite + .align $1000 +SPRITE: +.var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) + .for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + + // Sine and Cosine tables + // Angles: $00=0, $80=PI,$100=2*PI + // Sine/Cosine: signed fixed [-$7f,$7f] + .align $40 +SIN: +.for(var i=0;i<$140;i++) + .byte >round($7fff*sin(i*2*PI/256)) + + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __bend +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __b3 +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 __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __b4 +Removing instruction jmp __b11 +Removing instruction jmp __b12 +Removing instruction jmp __b5 +Removing instruction jmp __b13 +Removing instruction jmp __b6 +Removing instruction jmp __b7 +Removing instruction jmp plexFreeNextYpos1 +Removing instruction jmp __b8 +Removing instruction jmp __b9 +Removing instruction jmp __b14 +Removing instruction jmp __b10 +Removing instruction jmp __b15 +Removing instruction jmp plexFreeAdd1 +Removing instruction jmp __b4 +Removing instruction jmp __b3 +Removing instruction jmp __b2 +Removing instruction jmp __b5 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b5 +Removing instruction jmp __b3 +Removing instruction jmp __b6 +Removing instruction jmp __b4 +Removing instruction jmp __b2 +Removing instruction jmp plexFreePrepare1 +Removing instruction jmp plexFreePrepare1___b1 +Removing instruction jmp __breturn +Removing instruction jmp mulf8s_prepare1 +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Removing instruction jmp __b5 +Removing instruction jmp __b3 +Removing instruction jmp __b1 +Removing instruction jmp __b4 +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __b4 +Removing instruction jmp __b5 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b5 +Removing instruction jmp __b7 +Removing instruction jmp __breturn +Removing instruction jmp __b9 +Removing instruction jmp __b8 +Removing instruction jmp __b4 +Removing instruction jmp __b3 +Removing instruction jmp plexSetScreen1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda.z x+1 +Removing instruction lda.z y+1 +Removing instruction lda #0 +Removing instruction lda #0 +Replacing instruction ldy.z nxt_idx with TAY +Removing instruction lda.z nxt_y +Replacing instruction ldx memB with TAX +Removing instruction lda memA +Replacing instruction lda.z i with TYA +Replacing instruction lda.z i with TYA +Replacing instruction lda #<0 with TXA +Removing instruction lda #>0 +Removing instruction lda #0 +Removing instruction ldy #0 +Removing instruction ldy #0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label __bbegin with __b1 +Replacing label __b4_from___b12 with __b4 +Replacing label __b7_from___b14 with __b7 +Replacing label __b1 with __b2 +Replacing label __b5_from___b2 with __b5 +Replacing label __breturn with __b5 +Replacing label __b3_from___b6 with __b3 +Replacing label __b1_from___b2 with __b1 +Replacing label plexFreePrepare1___b1_from_plexFreePrepare1___b1 with plexFreePrepare1___b1 +Replacing label __b1_from___b5 with __b1 +Replacing label __b2_from___b1 with __b2 +Replacing label __b1_from___b1 with __b1 +Replacing label __b3_from___b3 with __b3 +Replacing label __b9_from___b6 with __b8 +Replacing label __b3_from___b2 with __b3 +Replacing label __b1_from___b1 with __b1 +Removing instruction __bbegin: +Removing instruction __b1_from___bbegin: +Removing instruction __bend_from___b1: +Removing instruction __b1_from_main: +Removing instruction loop_from___b1: +Removing instruction __b2_from___b1: +Removing instruction exit_from___b2: +Removing instruction __b1_from_exit: +Removing instruction keyboard_key_pressed_from___b1: +Removing instruction __b1: +Removing instruction __b4_from___b12: +Removing instruction __b7_from___b14: +Removing instruction __b5_from___b2: +Removing instruction __breturn_from___b5: +Removing instruction __breturn: +Removing instruction __b1_from___b2: +Removing instruction __b3_from___b5: +Removing instruction __b3_from___b6: +Removing instruction plexFreePrepare1_from___b2: +Removing instruction plexFreePrepare1___b1_from_plexFreePrepare1: +Removing instruction plexFreePrepare1___b1_from_plexFreePrepare1___b1: +Removing instruction __breturn: +Removing instruction __b1_from___b3: +Removing instruction __b1_from___b5: +Removing instruction __b2_from___b1: +Removing instruction __b2_from___b4: +Removing instruction __breturn: +Removing instruction __b1_from___b1: +Removing instruction __b3_from___b3: +Removing instruction __b4_from___b3: +Removing instruction mulf_init_from___b4: +Removing instruction __b5_from___b4: +Removing instruction memset_from___b5: +Removing instruction __b9_from___b6: +Removing instruction __b9: +Removing instruction __b8_from___b9: +Removing instruction __b3_from___b2: +Removing instruction __b3_from___b4: +Removing instruction plexSetScreen1_from_plexInit: +Removing instruction __b1_from_plexSetScreen1: +Removing instruction __b1_from___b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __bend: +Removing instruction __b1: +Removing instruction __b2: +Removing instruction __b3: +Removing instruction __breturn: +Removing instruction __b1: +Removing instruction __b2: +Removing instruction __breturn: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_loop: +Removing instruction __b3: +Removing instruction __b4_from___b3: +Removing instruction mulf8s_from___b4: +Removing instruction __b11: +Removing instruction mulf8s_from___b11: +Removing instruction __b12: +Removing instruction __b5: +Removing instruction plexSort_from___b5: +Removing instruction __b13: +Removing instruction __b7_from___b6: +Removing instruction plexFreeNextYpos1: +Removing instruction __b9: +Removing instruction __b14: +Removing instruction __b10: +Removing instruction keyboard_key_pressed_from___b10: +Removing instruction __b15: +Removing instruction __b1_from___b15: +Removing instruction plexFreeAdd1: +Removing instruction __b4: +Removing instruction __b3: +Removing instruction __breturn_from___b2: +Removing instruction __b1_from_plexSort: +Removing instruction __b5: +Removing instruction __b6: +Removing instruction plexFreePrepare1: +Removing instruction __breturn: +Removing instruction mulf8s_prepare1: +Removing instruction __b1: +Removing instruction __b2: +Removing instruction __b5: +Removing instruction __b3: +Removing instruction __b4: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction plexInit_from_init: +Removing instruction __b1_from_init: +Removing instruction __b2: +Removing instruction __b3_from___b2: +Removing instruction __b4: +Removing instruction __b5: +Removing instruction __breturn: +Removing instruction __b1_from_memset: +Removing instruction __breturn: +Removing instruction __b1_from___b2: +Removing instruction __b1_from_mulf_init: +Removing instruction __b5_from___b1: +Removing instruction __b7: +Removing instruction __breturn: +Removing instruction __b8_from___b6: +Removing instruction __b5_from___b8: +Removing instruction __b4: +Removing instruction __b1_from___b3: +Removing instruction plexSetScreen1: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Replacing jump to rts with rts in jmp __b5 +Succesful ASM optimization Pass5DoubleJumpElimination +Relabelling long label __b1_from___b2 to b1 +Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp __b4 +Removing instruction jmp __b7 +Removing instruction jmp __b1 +Removing instruction jmp plexFreePrepare1___b1 +Removing instruction jmp __b1 +Removing instruction jmp __b3 +Removing instruction jmp __b8 +Removing instruction jmp __b1 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction ldx.z m +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Removing instruction __b1: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(const byte) BLACK = (number) 0 +(const byte*) BORDERCOL = (byte*) 53280 +(const byte*) CIA1_PORT_A = (byte*) 56320 +(const byte*) CIA1_PORT_B = (byte*) 56321 +(const signed byte*) COS = (const signed byte*) SIN+(byte) $40 +(const byte*) D011 = (byte*) 53265 +(const byte) GREEN = (number) 5 +(const byte) KEY_SPACE = (number) $3c +(const byte) NUM_BOBS = (number) $10 +(const byte) PLEX_COUNT = (number) $20 +(const byte*) PLEX_FREE_YPOS = { fill( 8, 0) } +(const byte*) PLEX_PTR = { fill( PLEX_COUNT, 0) } +(byte*) PLEX_SCREEN_PTR +(const byte*) PLEX_SCREEN_PTR#1 PLEX_SCREEN_PTR = (const byte*) SCREEN+(word) $3f8 +(const byte*) PLEX_SORTED_IDX = { fill( PLEX_COUNT, 0) } +(const word*) PLEX_XPOS = { fill( PLEX_COUNT, 0) } +(const byte*) PLEX_YPOS = { fill( PLEX_COUNT, 0) } +(const byte*) RASTER = (byte*) 53266 +(const byte*) SCREEN = (byte*) 1024 +(const signed byte*) SIN = kickasm {{ .for(var i=0;i<$140;i++) + .byte >round($7fff*sin(i*2*PI/256)) + }} +(const byte*) SPRITE = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) + .for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + }} +(const byte*) SPRITES_COLS = (byte*) 53287 +(const byte*) SPRITES_ENABLE = (byte*) 53269 +(const byte*) SPRITES_XMSB = (byte*) 53264 +(const byte*) SPRITES_XPOS = (byte*) 53248 +(const byte*) SPRITES_YPOS = (byte*) 53249 +(const byte) VIC_DEN = (number) $10 +(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RST8 = (number) $80 +(void()) exit() +(byte~) exit::$0 reg byte a 22.0 +(label) exit::@1 +(label) exit::@2 +(label) exit::@return +(void()) init() +(byte~) init::$10 reg byte a 22.0 +(byte~) init::$3 reg byte a 22.0 +(byte~) init::$4 reg byte x 11.0 +(byte~) init::$5 reg byte a 22.0 +(byte~) init::$6 reg byte a 22.0 +(byte~) init::$9 reg byte a 22.0 +(label) init::@1 +(label) init::@2 +(label) init::@3 +(label) init::@4 +(label) init::@5 +(label) init::@return +(byte) init::i +(byte) init::i#1 i zp[1]:6 16.5 +(byte) init::i#2 i zp[1]:6 8.799999999999999 +(byte) init::i1 +(byte) init::i1#1 reg byte x 16.5 +(byte) init::i1#2 reg byte x 16.5 +(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 6.0 +(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::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()) loop() +(signed word~) loop::$1 zp[2]:7 202.0 +(byte~) loop::$11 reg byte a 202.0 +(byte~) loop::$18 reg byte a 22.0 +(signed word~) loop::$2 zp[2]:7 202.0 +(byte~) loop::$20 reg byte a 202.0 +(byte~) loop::$4 reg byte x 101.0 +(signed word~) loop::$5 zp[2]:7 202.0 +(signed word~) loop::$6 zp[2]:7 202.0 +(byte~) loop::$8 reg byte a 202.0 +(label) loop::@1 +(label) loop::@10 +(label) loop::@11 +(label) loop::@12 +(label) loop::@13 +(label) loop::@14 +(label) loop::@15 +(label) loop::@2 +(label) loop::@3 +(label) loop::@4 +(label) loop::@5 +(label) loop::@6 +(label) loop::@7 +(label) loop::@8 +(label) loop::@9 +(label) loop::@return +(byte) loop::a +(byte) loop::a#1 a zp[1]:3 50.5 +(byte) loop::a#2 a zp[1]:3 19.761904761904763 +(byte) loop::a#6 a zp[1]:3 22.0 +(byte) loop::angle +(byte) loop::angle#1 angle zp[1]:6 1.2941176470588236 +(byte) loop::angle#6 angle zp[1]:6 1.064516129032258 +(byte) loop::i +(byte) loop::i#1 i zp[1]:4 151.5 +(byte) loop::i#2 i zp[1]:4 17.565217391304348 +(byte) loop::i1 +(byte) loop::i1#1 i1 zp[1]:18 151.5 +(byte) loop::i1#5 i1 zp[1]:18 33.666666666666664 +(label) loop::plexFreeNextYpos1 +(byte) loop::plexFreeNextYpos1_return +(byte) loop::plexFreeNextYpos1_return#0 plexFreeNextYpos1_return zp[1]:17 551.0 +(signed byte) loop::r +(signed byte) loop::r#1 r zp[1]:2 67.33333333333333 +(signed byte) loop::r#2 r zp[1]:2 18.363636363636363 +(byte) loop::rasterY +(signed word) loop::x +(signed word) loop::x#0 x zp[2]:7 202.0 +(signed word) loop::y +(signed word) loop::y#0 y zp[2]:7 202.0 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@return +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +(label) memset::@1 +(label) memset::@2 +(label) memset::@return +(byte) memset::c +(const byte) memset::c#0 c = (byte) ' ' +(byte*) memset::dst +(byte*) memset::dst#1 dst zp[2]:7 22.0 +(byte*) memset::dst#2 dst zp[2]:7 14.666666666666666 +(byte*) memset::end +(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 +(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 +(signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) +(label) mulf8s::@1 +(label) mulf8s::@2 +(label) mulf8s::@return +(signed byte) mulf8s::a +(signed byte) mulf8s::a#0 reg byte a 101.0 +(signed byte) mulf8s::a#1 reg byte a 101.0 +(signed byte) mulf8s::b +(signed byte) mulf8s::b#0 reg byte x 202.0 +(signed byte) mulf8s::b#1 reg byte x 202.0 +(signed byte) mulf8s::b#2 reg byte x 68.0 +(label) mulf8s::mulf8s_prepare1 +(signed byte) mulf8s::mulf8s_prepare1_a +(signed byte) mulf8s::mulf8s_prepare1_a#0 reg byte a 202.0 +(signed word) mulf8s::return +(signed word) mulf8s::return#0 return zp[2]:7 51.0 +(signed word) mulf8s::return#2 return zp[2]:7 202.0 +(signed word) mulf8s::return#3 return zp[2]:7 202.0 +(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) +(byte~) mulf8s_prepared::$12 reg byte a 4.0 +(byte~) mulf8s_prepared::$15 reg byte a 4.0 +(byte~) mulf8s_prepared::$16 reg byte a 4.0 +(byte~) mulf8s_prepared::$8 reg byte a 4.0 +(label) mulf8s_prepared::@1 +(label) mulf8s_prepared::@2 +(label) mulf8s_prepared::@3 +(label) mulf8s_prepared::@4 +(label) mulf8s_prepared::@5 +(label) mulf8s_prepared::@return +(signed byte) mulf8s_prepared::b +(signed byte) mulf8s_prepared::b#0 b zp[1]:18 0.4 +(word) mulf8s_prepared::m +(word) mulf8s_prepared::m#0 m zp[2]:7 2.0 +(word) mulf8s_prepared::m#1 m zp[2]:7 4.0 +(word) mulf8s_prepared::m#2 m zp[2]:7 4.0 +(word) mulf8s_prepared::m#4 m zp[2]:7 1.3333333333333333 +(word) mulf8s_prepared::m#5 m zp[2]:7 2.5 +(const signed byte*) mulf8s_prepared::memA = (signed byte*) 253 +(signed word) mulf8s_prepared::return +(void()) mulf8u_prepare((byte) mulf8u_prepare::a) +(label) mulf8u_prepare::@return +(byte) mulf8u_prepare::a +(byte) mulf8u_prepare::a#0 reg byte a 4.0 +(const byte*) mulf8u_prepare::memA = (byte*) 253 +(word()) mulf8u_prepared((byte) mulf8u_prepared::b) +(label) mulf8u_prepared::@return +(byte) mulf8u_prepared::b +(byte) mulf8u_prepared::b#0 reg byte a 4.0 +(const byte*) mulf8u_prepared::memB = (byte*) 255 +(const byte*) mulf8u_prepared::resL = (byte*) 254 +(word) mulf8u_prepared::return +(word) mulf8u_prepared::return#0 return zp[2]:7 1.3333333333333333 +(word) mulf8u_prepared::return#2 return zp[2]:7 4.0 +(void()) mulf_init() +(byte~) mulf_init::$1 reg byte a 22.0 +(byte~) mulf_init::$4 reg byte a 22.0 +(byte~) mulf_init::$5 reg byte a 22.0 +(label) mulf_init::@1 +(label) mulf_init::@2 +(label) mulf_init::@3 +(label) mulf_init::@4 +(label) mulf_init::@5 +(label) mulf_init::@6 +(label) mulf_init::@7 +(label) mulf_init::@8 +(label) mulf_init::@9 +(label) mulf_init::@return +(byte) mulf_init::c +(byte) mulf_init::c#1 c zp[1]:18 2.5384615384615383 +(byte) mulf_init::c#2 c zp[1]:18 11.0 +(byte) mulf_init::dir +(byte) mulf_init::dir#2 dir zp[1]:17 4.125 +(byte) mulf_init::dir#4 dir zp[1]:17 11.0 +(word) mulf_init::sqr +(word) mulf_init::sqr#1 sqr zp[2]:15 11.0 +(word) mulf_init::sqr#2 sqr zp[2]:15 22.0 +(word) mulf_init::sqr#3 sqr zp[2]:15 9.166666666666666 +(word) mulf_init::sqr#4 sqr zp[2]:15 5.5 +(byte*) mulf_init::sqr1_hi +(byte*) mulf_init::sqr1_hi#1 sqr1_hi zp[2]:9 7.333333333333333 +(byte*) mulf_init::sqr1_hi#2 sqr1_hi zp[2]:9 2.75 +(byte*) mulf_init::sqr1_lo +(byte*) mulf_init::sqr1_lo#1 sqr1_lo zp[2]:7 22.0 +(byte*) mulf_init::sqr1_lo#2 sqr1_lo zp[2]:7 3.142857142857143 +(byte*) mulf_init::sqr2_hi +(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp[2]:13 3.6666666666666665 +(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp[2]:13 8.25 +(byte*) mulf_init::sqr2_lo +(byte*) mulf_init::sqr2_lo#1 sqr2_lo zp[2]:11 22.0 +(byte*) mulf_init::sqr2_lo#2 sqr2_lo zp[2]:11 4.888888888888889 +(byte) mulf_init::x_2 +(byte) mulf_init::x_2#1 reg byte x 11.0 +(byte) mulf_init::x_2#2 reg byte x 5.5 +(byte) mulf_init::x_2#3 reg byte x 6.6000000000000005 +(byte) mulf_init::x_255 +(byte) mulf_init::x_255#1 reg byte x 6.6000000000000005 +(byte) mulf_init::x_255#2 reg byte x 8.8 +(const byte*) mulf_sqr1_hi = { fill( $200, 0) } +(const byte*) mulf_sqr1_lo = { fill( $200, 0) } +(const byte*) mulf_sqr2_hi = { fill( $200, 0) } +(const byte*) mulf_sqr2_lo = { fill( $200, 0) } +(void()) plexInit((byte*) plexInit::screen) +(label) plexInit::@1 +(label) plexInit::@return +(byte) plexInit::i +(byte) plexInit::i#1 reg byte x 16.5 +(byte) plexInit::i#2 reg byte x 22.0 +(label) plexInit::plexSetScreen1 +(byte*) plexInit::plexSetScreen1_screen +(byte*) plexInit::screen +(void()) plexShowSprite() +(byte~) plexShowSprite::$11 reg byte x 2.0 +(byte~) plexShowSprite::$2 reg byte a 4.0 +(byte~) plexShowSprite::$3 reg byte a 4.0 +(byte~) plexShowSprite::$5 reg byte x 4.0 +(byte~) plexShowSprite::$9 reg byte a 4.0 +(label) plexShowSprite::@1 +(label) plexShowSprite::@2 +(label) plexShowSprite::@3 +(label) plexShowSprite::@4 +(label) plexShowSprite::@5 +(label) plexShowSprite::@return +(label) plexShowSprite::plexFreeAdd1 +(byte~) plexShowSprite::plexFreeAdd1_$0 reg byte a 4.0 +(byte~) plexShowSprite::plexFreeAdd1_$1 reg byte x 4.0 +(byte) plexShowSprite::plexFreeAdd1_ypos +(byte) plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 3.0 +(byte) plexShowSprite::plex_sprite_idx2 +(byte) plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:17 0.5454545454545454 +(byte) plexShowSprite::xpos_idx +(byte) plexShowSprite::xpos_idx#0 reg byte a 4.0 +(byte) plexShowSprite::ypos +(void()) plexSort() +(label) plexSort::@1 +(label) plexSort::@2 +(label) plexSort::@3 +(label) plexSort::@4 +(label) plexSort::@5 +(label) plexSort::@6 +(label) plexSort::@return +(byte) plexSort::m +(byte) plexSort::m#1 m zp[1]:5 151.5 +(byte) plexSort::m#2 m zp[1]:5 42.08333333333333 +(byte) plexSort::nxt_idx +(byte) plexSort::nxt_idx#0 nxt_idx zp[1]:17 30.299999999999997 +(byte) plexSort::nxt_y +(byte) plexSort::nxt_y#0 nxt_y zp[1]:18 150.375 +(label) plexSort::plexFreePrepare1 +(label) plexSort::plexFreePrepare1_@1 +(byte) plexSort::plexFreePrepare1_s +(byte) plexSort::plexFreePrepare1_s#1 reg byte x 151.5 +(byte) plexSort::plexFreePrepare1_s#2 reg byte x 151.5 +(byte) plexSort::s +(byte) plexSort::s#1 reg byte x 1368.3333333333335 +(byte) plexSort::s#2 reg byte x 202.0 +(byte) plexSort::s#3 reg byte x 2052.5 +(byte) plexSort::s#6 reg byte x 202.0 +(byte) plex_free_next +(byte) plex_free_next#13 plex_free_next zp[1]:2 4.681818181818182 +(byte) plex_free_next#17 plex_free_next zp[1]:2 20.599999999999998 +(byte) plex_show_idx +(byte) plex_show_idx#15 plex_show_idx zp[1]:4 11.444444444444443 +(byte) plex_show_idx#43 plex_show_idx zp[1]:4 4.541666666666665 +(byte) plex_sprite_idx +(byte) plex_sprite_idx#15 plex_sprite_idx zp[1]:3 10.299999999999999 +(byte) plex_sprite_idx#43 plex_sprite_idx zp[1]:3 4.863636363636363 +(byte) plex_sprite_msb +(byte) plex_sprite_msb#16 plex_sprite_msb zp[1]:5 20.599999999999998 +(byte) plex_sprite_msb#3 plex_sprite_msb zp[1]:5 2.0 +(byte) plex_sprite_msb#43 plex_sprite_msb zp[1]:5 4.28 + +zp[1]:2 [ plex_free_next#17 plex_free_next#13 loop::r#2 loop::r#1 ] +zp[1]:3 [ plex_sprite_idx#43 plex_sprite_idx#15 loop::a#2 loop::a#1 loop::a#6 ] +zp[1]:4 [ plex_show_idx#43 plex_show_idx#15 loop::i#2 loop::i#1 ] +zp[1]:5 [ plexSort::m#2 plexSort::m#1 plex_sprite_msb#43 plex_sprite_msb#16 plex_sprite_msb#3 ] +reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +reg byte a [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] +reg byte x [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] +zp[1]:6 [ init::i#2 init::i#1 loop::angle#6 loop::angle#1 ] +reg byte x [ init::i1#2 init::i1#1 ] +zp[2]:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 memset::dst#2 memset::dst#1 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 loop::$1 mulf8s::return#3 loop::$5 mulf8u_prepared::return#0 loop::$2 loop::x#0 loop::$6 loop::y#0 ] +zp[2]:9 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +zp[2]:11 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] +reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] +zp[2]:13 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] +zp[2]:15 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] +reg byte x [ plexInit::i#2 plexInit::i#1 ] +reg byte a [ keyboard_key_pressed::return#2 ] +reg byte a [ exit::$0 ] +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 ] +reg byte x [ loop::$4 ] +reg byte a [ loop::$20 ] +reg byte a [ loop::$8 ] +reg byte a [ loop::$11 ] +reg byte a [ keyboard_key_pressed::return#3 ] +reg byte a [ loop::$18 ] +reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] +reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] +reg byte x [ plexShowSprite::plexFreeAdd1_$1 ] +reg byte a [ plexShowSprite::xpos_idx#0 ] +reg byte x [ plexShowSprite::$11 ] +reg byte a [ plexShowSprite::$2 ] +reg byte a [ plexShowSprite::$3 ] +reg byte a [ plexShowSprite::$9 ] +reg byte x [ plexShowSprite::$5 ] +zp[1]:17 [ plexSort::nxt_idx#0 plexShowSprite::plex_sprite_idx2#0 loop::plexFreeNextYpos1_return#0 mulf_init::dir#2 mulf_init::dir#4 ] +reg byte x [ plexSort::s#2 ] +reg byte a [ mulf8u_prepare::a#0 ] +zp[1]:18 [ mulf8s_prepared::b#0 plexSort::nxt_y#0 mulf_init::c#2 mulf_init::c#1 loop::i1#5 loop::i1#1 ] +reg byte a [ mulf8u_prepared::b#0 ] +reg byte a [ mulf8s_prepared::$8 ] +reg byte a [ mulf8s_prepared::$15 ] +reg byte a [ mulf8s_prepared::$12 ] +reg byte a [ mulf8s_prepared::$16 ] +reg byte a [ init::$10 ] +reg byte a [ init::$3 ] +reg byte x [ init::$4 ] +reg byte a [ init::$9 ] +reg byte a [ init::$5 ] +reg byte a [ init::$6 ] +reg byte a [ mulf_init::$1 ] +reg byte a [ mulf_init::$4 ] +reg byte a [ mulf_init::$5 ] + + +FINAL ASSEMBLER +Score: 75580 + + // File Comments +// Same animation using a multiplexer + // Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // Global Constants & labels + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label BORDERCOL = $d020 + .label SPRITES_COLS = $d027 + .label D011 = $d011 + .const VIC_RST8 = $80 + .const VIC_DEN = $10 + .const VIC_RSEL = 8 + // 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 + // The colors of the C64 + .const BLACK = 0 + .const GREEN = 5 + // The number of sprites in the multiplexer + .const PLEX_COUNT = $20 + .const KEY_SPACE = $3c + // The BASIC screen + .label SCREEN = $400 + // The number of BOBs to render + .const NUM_BOBS = $10 + .label COS = SIN+$40 + // The address of the sprite pointers on the current screen (screen+$3f8). + .label PLEX_SCREEN_PTR = SCREEN+$3f8 + // The MSB bit of the next sprite to use for showing + .label plex_sprite_msb = 5 + // The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown. + .label plex_free_next = 2 + // The index the next sprite to use for showing (sprites are used round-robin) + .label plex_sprite_idx = 3 + // The index in the PLEX tables of the next sprite to show + // Prepare for showing the sprites + .label plex_show_idx = 4 + // @begin + // [1] phi from @begin to @1 [phi:@begin->@1] + // @1 + // [2] call main + // [3] phi from @1 to @end [phi:@1->@end] + // @end + // main +main: { + // asm + // asm { sei } + sei + // init() + // [5] call init + jsr init + // [6] phi from main to main::@1 [phi:main->main::@1] + // main::@1 + // loop() + // [7] call loop + // [28] phi from main::@1 to loop [phi:main::@1->loop] + jsr loop + // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // main::@2 + // exit() + // [9] call exit + // [12] phi from main::@2 to exit [phi:main::@2->exit] + jsr exit + // main::@3 + // asm + // asm { cli } + cli + // main::@return + // } + // [11] return + rts +} + // exit +// Exit the program +exit: { + // [13] phi from exit exit::@2 to exit::@1 [phi:exit/exit::@2->exit::@1] + b1: + // Wait for space release + // exit::@1 + // keyboard_key_pressed(KEY_SPACE) + // [14] call keyboard_key_pressed + // [19] phi from exit::@1 to keyboard_key_pressed [phi:exit::@1->keyboard_key_pressed] + jsr keyboard_key_pressed + // keyboard_key_pressed(KEY_SPACE) + // [15] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 + // exit::@2 + // [16] (byte~) exit::$0 ← (byte) keyboard_key_pressed::return#2 + // while(keyboard_key_pressed(KEY_SPACE)) + // [17] if((byte) 0!=(byte~) exit::$0) goto exit::@1 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne b1 + // exit::@return + // } + // [18] 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) + // [20] call keyboard_matrix_read + jsr keyboard_matrix_read + // [21] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + // keyboard_key_pressed::@1 + // [22] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 + // keyboard_matrix_read(rowidx) & keyboard_matrix_col_bitmask[colidx] + // [23] (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 + // } + // [24] 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] + // [25] *((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 + // [26] (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 + // } + // [27] return + rts +} + // loop +// The main loop +loop: { + .label __1 = 7 + .label __2 = 7 + .label __5 = 7 + .label __6 = 7 + .label x = 7 + .label y = 7 + .label a = 3 + .label r = 2 + .label i = 4 + // Render Rotated BOBs + .label angle = 6 + .label plexFreeNextYpos1_return = $11 + .label i1 = $12 + // [29] phi from loop to loop::@1 [phi:loop->loop::@1] + // [29] phi (byte) loop::angle#6 = (byte) 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z angle + // loop::@1 + // loop::@2 + __b2: + // while (*RASTER<0xd8) + // [30] if(*((const byte*) RASTER)<(byte) $d8) goto loop::@2 -- _deref_pbuc1_lt_vbuc2_then_la1 + lda RASTER + cmp #$d8 + bcc __b2 + // loop::@3 + // *BORDERCOL = 0xf + // [31] *((const byte*) BORDERCOL) ← (byte) $f -- _deref_pbuc1=vbuc2 + lda #$f + sta BORDERCOL + // [32] (byte) loop::a#6 ← (byte) loop::angle#6 -- vbuz1=vbuz2 + lda.z angle + sta.z a + // [33] phi from loop::@3 to loop::@4 [phi:loop::@3->loop::@4] + // [33] phi (byte) loop::i#2 = (byte) 0 [phi:loop::@3->loop::@4#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // [33] phi (byte) loop::a#2 = (byte) loop::a#6 [phi:loop::@3->loop::@4#1] -- register_copy + // [33] phi (signed byte) loop::r#2 = (signed byte) $1e [phi:loop::@3->loop::@4#2] -- vbsz1=vbsc1 + lda #$1e + sta.z r + // [33] phi from loop::@12 to loop::@4 [phi:loop::@12->loop::@4] + // [33] phi (byte) loop::i#2 = (byte) loop::i#1 [phi:loop::@12->loop::@4#0] -- register_copy + // [33] phi (byte) loop::a#2 = (byte) loop::a#1 [phi:loop::@12->loop::@4#1] -- register_copy + // [33] phi (signed byte) loop::r#2 = (signed byte) loop::r#1 [phi:loop::@12->loop::@4#2] -- register_copy + // loop::@4 + __b4: + // *BORDERCOL = 6 + // [34] *((const byte*) BORDERCOL) ← (byte) 6 -- _deref_pbuc1=vbuc2 + //kickasm {{ .break }} + lda #6 + sta BORDERCOL + // mulf8s(r, COS[a]) + // [35] (signed byte) mulf8s::a#0 ← (signed byte) loop::r#2 -- vbsaa=vbsz1 + lda.z r + // [36] (signed byte) mulf8s::b#0 ← *((const signed byte*) COS + (byte) loop::a#2) -- vbsxx=pbsc1_derefidx_vbuz1 + ldy.z a + ldx COS,y + // [37] call mulf8s + // [124] phi from loop::@4 to mulf8s [phi:loop::@4->mulf8s] + // [124] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#0 [phi:loop::@4->mulf8s#0] -- register_copy + // [124] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#0 [phi:loop::@4->mulf8s#1] -- register_copy + jsr mulf8s + // mulf8s(r, COS[a]) + // [38] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 + // loop::@11 + // [39] (signed word~) loop::$1 ← (signed word) mulf8s::return#2 + // mulf8s(r, COS[a])*2 + // [40] (signed word~) loop::$2 ← (signed word~) loop::$1 << (byte) 1 -- vwsz1=vwsz1_rol_1 + asl.z __2 + rol.z __2+1 + // x = mulf8s(r, COS[a])*2 + 125*0x100 + // [41] (signed word) loop::x#0 ← (signed word~) loop::$2 + (signed word)(number) $7d*(number) $100 -- vwsz1=vwsz1_plus_vwsc1 + clc + lda.z x + adc #<$7d*$100 + sta.z x + lda.z x+1 + adc #>$7d*$100 + sta.z x+1 + // >x + // [42] (byte~) loop::$4 ← > (signed word) loop::x#0 -- vbuxx=_hi_vwsz1 + tax + // PLEX_XPOS[i] = >x + // [43] (byte~) loop::$20 ← (byte) loop::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z i + asl + // [44] *((const word*) PLEX_XPOS + (byte~) loop::$20) ← (byte~) loop::$4 -- pwuc1_derefidx_vbuaa=vbuxx + tay + txa + sta PLEX_XPOS,y + // mulf8s(r, SIN[a]) + // [45] (signed byte) mulf8s::a#1 ← (signed byte) loop::r#2 -- vbsaa=vbsz1 + lda.z r + // [46] (signed byte) mulf8s::b#1 ← *((const signed byte*) SIN + (byte) loop::a#2) -- vbsxx=pbsc1_derefidx_vbuz1 + ldy.z a + ldx SIN,y + // [47] call mulf8s + // [124] phi from loop::@11 to mulf8s [phi:loop::@11->mulf8s] + // [124] phi (signed byte) mulf8s::b#2 = (signed byte) mulf8s::b#1 [phi:loop::@11->mulf8s#0] -- register_copy + // [124] phi (signed byte) mulf8s::mulf8s_prepare1_a#0 = (signed byte) mulf8s::a#1 [phi:loop::@11->mulf8s#1] -- register_copy + jsr mulf8s + // mulf8s(r, SIN[a]) + // [48] (signed word) mulf8s::return#3 ← (signed word) mulf8s::return#0 + // loop::@12 + // [49] (signed word~) loop::$5 ← (signed word) mulf8s::return#3 + // mulf8s(r, SIN[a])*2 + // [50] (signed word~) loop::$6 ← (signed word~) loop::$5 << (byte) 1 -- vwsz1=vwsz1_rol_1 + asl.z __6 + rol.z __6+1 + // y = mulf8s(r, SIN[a])*2 + 125*0x100 + // [51] (signed word) loop::y#0 ← (signed word~) loop::$6 + (signed word)(number) $7d*(number) $100 -- vwsz1=vwsz1_plus_vwsc1 + clc + lda.z y + adc #<$7d*$100 + sta.z y + lda.z y+1 + adc #>$7d*$100 + sta.z y+1 + // >y + // [52] (byte~) loop::$8 ← > (signed word) loop::y#0 -- vbuaa=_hi_vwsz1 + // PLEX_YPOS[i] = >y + // [53] *((const byte*) PLEX_YPOS + (byte) loop::i#2) ← (byte~) loop::$8 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z i + sta PLEX_YPOS,y + // a += 98 + // [54] (byte) loop::a#1 ← (byte) loop::a#2 + (byte) $62 -- vbuz1=vbuz1_plus_vbuc1 + lax.z a + axs #-[$62] + stx.z a + // r += 3 + // [55] (signed byte) loop::r#1 ← (signed byte) loop::r#2 + (signed byte) 3 -- vbsz1=vbsz1_plus_vbsc1 + lax.z r + axs #-[3] + stx.z r + // for(char i: 0..NUM_BOBS-1) + // [56] (byte) loop::i#1 ← ++ (byte) loop::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [57] if((byte) loop::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto loop::@4 -- vbuz1_neq_vbuc1_then_la1 + lda #NUM_BOBS-1+1 + cmp.z i + bne __b4 + // loop::@5 + // *BORDERCOL = 3 + // [58] *((const byte*) BORDERCOL) ← (byte) 3 -- _deref_pbuc1=vbuc2 + lda #3 + sta BORDERCOL + // plexSort() + // [59] call plexSort + // [103] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + jsr plexSort + // loop::@13 + // angle += 3 + // [60] (byte) loop::angle#1 ← (byte) loop::angle#6 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + lax.z angle + axs #-[3] + stx.z angle + // *BORDERCOL = BLACK + // [61] *((const byte*) BORDERCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 + lda #BLACK + sta BORDERCOL + // Sort the sprites by y-position + // loop::@6 + __b6: + // *D011&VIC_RST8 + // [62] (byte~) loop::$11 ← *((const byte*) D011) & (const byte) VIC_RST8 -- vbuaa=_deref_pbuc1_band_vbuc2 + lda #VIC_RST8 + and D011 + // while((*D011&VIC_RST8)!=0) + // [63] if((byte~) loop::$11!=(byte) 0) goto loop::@6 -- vbuaa_neq_0_then_la1 + cmp #0 + bne __b6 + // [64] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7] + // [64] phi (byte) loop::i1#5 = (byte) 0 [phi:loop::@6->loop::@7#0] -- vbuz1=vbuc1 + lda #0 + sta.z i1 + // [64] phi (byte) plex_sprite_msb#43 = (byte) 1 [phi:loop::@6->loop::@7#1] -- vbuz1=vbuc1 + lda #1 + sta.z plex_sprite_msb + // [64] phi (byte) plex_show_idx#43 = (byte) 0 [phi:loop::@6->loop::@7#2] -- vbuz1=vbuc1 + lda #0 + sta.z plex_show_idx + // [64] phi (byte) plex_sprite_idx#43 = (byte) 0 [phi:loop::@6->loop::@7#3] -- vbuz1=vbuc1 + sta.z plex_sprite_idx + // [64] phi (byte) plex_free_next#17 = (byte) 0 [phi:loop::@6->loop::@7#4] -- vbuz1=vbuc1 + sta.z plex_free_next + // Show the sprites + // [64] phi from loop::@14 to loop::@7 [phi:loop::@14->loop::@7] + // [64] phi (byte) loop::i1#5 = (byte) loop::i1#1 [phi:loop::@14->loop::@7#0] -- register_copy + // [64] phi (byte) plex_sprite_msb#43 = (byte) plex_sprite_msb#16 [phi:loop::@14->loop::@7#1] -- register_copy + // [64] phi (byte) plex_show_idx#43 = (byte) plex_show_idx#15 [phi:loop::@14->loop::@7#2] -- register_copy + // [64] phi (byte) plex_sprite_idx#43 = (byte) plex_sprite_idx#15 [phi:loop::@14->loop::@7#3] -- register_copy + // [64] phi (byte) plex_free_next#17 = (byte) plex_free_next#13 [phi:loop::@14->loop::@7#4] -- register_copy + // loop::@7 + __b7: + // *BORDERCOL = BLACK + // [65] *((const byte*) BORDERCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 + lda #BLACK + sta BORDERCOL + // loop::plexFreeNextYpos1 + // return PLEX_FREE_YPOS[plex_free_next]; + // [66] (byte) loop::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next#17) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z plex_free_next + lda PLEX_FREE_YPOS,y + sta.z plexFreeNextYpos1_return + // loop::@8 + __b8: + // while(*RASTERkeyboard_key_pressed] + jsr keyboard_key_pressed + // keyboard_key_pressed(KEY_SPACE) + // [74] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 + // loop::@15 + // [75] (byte~) loop::$18 ← (byte) keyboard_key_pressed::return#3 + // if(keyboard_key_pressed(KEY_SPACE)) + // [76] if((byte) 0!=(byte~) loop::$18) goto loop::@return -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne __breturn + // [29] phi from loop::@15 to loop::@1 [phi:loop::@15->loop::@1] + // [29] phi (byte) loop::angle#6 = (byte) loop::angle#1 [phi:loop::@15->loop::@1#0] -- register_copy + jmp __b2 + // loop::@return + __breturn: + // } + // [77] return + rts +} + // plexShowSprite +// Show the next sprite. +// plexSort() prepares showing the sprites +plexShowSprite: { + .label plex_sprite_idx2 = $11 + // plex_sprite_idx2 = plex_sprite_idx*2 + // [78] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#43 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z plex_sprite_idx + asl + sta.z plex_sprite_idx2 + // ypos = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] + // [79] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43)) -- vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) + ldx.z plex_show_idx + ldy PLEX_SORTED_IDX,x + lda PLEX_YPOS,y + // SPRITES_YPOS[plex_sprite_idx2] = ypos + // [80] *((const byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z plex_sprite_idx2 + sta SPRITES_YPOS,y + // plexShowSprite::plexFreeAdd1 + // ypos+21 + // [81] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 -- vbuaa=vbuaa_plus_vbuc1 + clc + adc #$15 + // PLEX_FREE_YPOS[plex_free_next] = ypos+21 + // [82] *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next#17) ← (byte~) plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z plex_free_next + sta PLEX_FREE_YPOS,y + // plex_free_next+1 + // [83] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (byte) plex_free_next#17 + (byte) 1 -- vbuxx=vbuz1_plus_1 + ldx.z plex_free_next + inx + // plex_free_next = (plex_free_next+1)&7 + // [84] (byte) plex_free_next#13 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 + lda #7 + sax.z plex_free_next + // plexShowSprite::@4 + // PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] + // [85] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#43) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43)) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz2) + ldx.z plex_show_idx + ldy PLEX_SORTED_IDX,x + lda PLEX_PTR,y + ldx.z plex_sprite_idx + sta PLEX_SCREEN_PTR,x + // xpos_idx = PLEX_SORTED_IDX[plex_show_idx] + // [86] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx#43) -- vbuaa=pbuc1_derefidx_vbuz1 + ldy.z plex_show_idx + lda PLEX_SORTED_IDX,y + // PLEX_XPOS[xpos_idx] + // [90] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuaa=_hi_pwuc1_derefidx_vbuxx + lda PLEX_XPOS+1,x + // if(>PLEX_XPOS[xpos_idx]!=0) + // [91] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1 + cmp #0 + bne __b1 + // plexShowSprite::@3 + // $ff^plex_sprite_msb + // [92] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb#43 -- vbuaa=vbuc1_bxor_vbuz1 + lda #$ff + eor.z plex_sprite_msb + // *SPRITES_XMSB &= ($ff^plex_sprite_msb) + // [93] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa + and SPRITES_XMSB + sta SPRITES_XMSB + // plexShowSprite::@2 + __b2: + // plex_sprite_idx+1 + // [94] (byte~) plexShowSprite::$5 ← (byte) plex_sprite_idx#43 + (byte) 1 -- vbuxx=vbuz1_plus_1 + ldx.z plex_sprite_idx + inx + // plex_sprite_idx = (plex_sprite_idx+1)&7 + // [95] (byte) plex_sprite_idx#15 ← (byte~) plexShowSprite::$5 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 + lda #7 + sax.z plex_sprite_idx + // plex_show_idx++; + // [96] (byte) plex_show_idx#15 ← ++ (byte) plex_show_idx#43 -- vbuz1=_inc_vbuz1 + inc.z plex_show_idx + // plex_sprite_msb *=2 + // [97] (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#43 << (byte) 1 -- vbuz1=vbuz1_rol_1 + asl.z plex_sprite_msb + // if(plex_sprite_msb==0) + // [98] if((byte) plex_sprite_msb#3!=(byte) 0) goto plexShowSprite::@5 -- vbuz1_neq_0_then_la1 + lda.z plex_sprite_msb + cmp #0 + bne __b5 + // [100] phi from plexShowSprite::@2 to plexShowSprite::@return [phi:plexShowSprite::@2->plexShowSprite::@return] + // [100] phi (byte) plex_sprite_msb#16 = (byte) 1 [phi:plexShowSprite::@2->plexShowSprite::@return#0] -- vbuz1=vbuc1 + lda #1 + sta.z plex_sprite_msb + rts + // [99] phi from plexShowSprite::@2 to plexShowSprite::@5 [phi:plexShowSprite::@2->plexShowSprite::@5] + // plexShowSprite::@5 + __b5: + // [100] phi from plexShowSprite::@5 to plexShowSprite::@return [phi:plexShowSprite::@5->plexShowSprite::@return] + // [100] phi (byte) plex_sprite_msb#16 = (byte) plex_sprite_msb#3 [phi:plexShowSprite::@5->plexShowSprite::@return#0] -- register_copy + // plexShowSprite::@return + // } + // [101] return + rts + // plexShowSprite::@1 + __b1: + // *SPRITES_XMSB |= plex_sprite_msb + // [102] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) plex_sprite_msb#43 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + lda SPRITES_XMSB + ora.z plex_sprite_msb + sta SPRITES_XMSB + jmp __b2 +} + // plexSort +// Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions in PLEX_YPOS +// Assumes that the positions are nearly sorted already (as each sprite just moves a bit) +// Uses an insertion sort: +// 1. Moves a marker (m) from the start to end of the array. Every time the marker moves forward all elements before the marker are sorted correctly. +// 2a. If the next element after the marker is larger that the current element +// the marker can be moved forwards (as the sorting is correct). +// 2b. If the next element after the marker is smaller than the current element: +// elements before the marker are shifted right one at a time until encountering one smaller than the current one. +// It is then inserted at the spot. Now the marker can move forward. +plexSort: { + .label nxt_idx = $11 + .label nxt_y = $12 + .label m = 5 + // [104] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] + // [104] phi (byte) plexSort::m#2 = (byte) 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z m + // [104] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] + // [104] phi (byte) plexSort::m#2 = (byte) plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy + // plexSort::@1 + __b1: + // nxt_idx = PLEX_SORTED_IDX[m+1] + // [105] (byte) plexSort::nxt_idx#0 ← *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::m#2) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z m + lda PLEX_SORTED_IDX+1,y + sta.z nxt_idx + // nxt_y = PLEX_YPOS[nxt_idx] + // [106] (byte) plexSort::nxt_y#0 ← *((const byte*) PLEX_YPOS + (byte) plexSort::nxt_idx#0) -- vbuz1=pbuc1_derefidx_vbuz2 + tay + lda PLEX_YPOS,y + sta.z nxt_y + // if(nxt_y=*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2))) goto plexSort::@2 -- vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1 + ldx.z m + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcs __b2 + // plexSort::@5 + // [108] (byte) plexSort::s#6 ← (byte) plexSort::m#2 -- vbuxx=vbuz1 + // [109] phi from plexSort::@5 plexSort::@6 to plexSort::@3 [phi:plexSort::@5/plexSort::@6->plexSort::@3] + // [109] phi (byte) plexSort::s#3 = (byte) plexSort::s#6 [phi:plexSort::@5/plexSort::@6->plexSort::@3#0] -- register_copy + // plexSort::@3 + __b3: + // PLEX_SORTED_IDX[s+1] = PLEX_SORTED_IDX[s] + // [110] *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::s#3) ← *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#3) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda PLEX_SORTED_IDX,x + sta PLEX_SORTED_IDX+1,x + // s--; + // [111] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 -- vbuxx=_dec_vbuxx + dex + // while((s!=$ff) && (nxt_yplexSort::plexFreePrepare1] + // plexSort::plexFreePrepare1 + // [119] phi from plexSort::plexFreePrepare1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1] + // [119] phi (byte) plexSort::plexFreePrepare1_s#2 = (byte) 0 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1#0] -- vbuxx=vbuc1 + ldx #0 + // [119] phi from plexSort::plexFreePrepare1_@1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1] + // [119] phi (byte) plexSort::plexFreePrepare1_s#2 = (byte) plexSort::plexFreePrepare1_s#1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1#0] -- register_copy + // plexSort::plexFreePrepare1_@1 + plexFreePrepare1___b1: + // PLEX_FREE_YPOS[s] = 0 + // [120] *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + lda #0 + sta PLEX_FREE_YPOS,x + // for( byte s: 0..7) + // [121] (byte) plexSort::plexFreePrepare1_s#1 ← ++ (byte) plexSort::plexFreePrepare1_s#2 -- vbuxx=_inc_vbuxx + inx + // [122] if((byte) plexSort::plexFreePrepare1_s#1!=(byte) 8) goto plexSort::plexFreePrepare1_@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #8 + bne plexFreePrepare1___b1 + // plexSort::@return + // } + // [123] return + rts +} + // mulf8s +// Fast multiply two signed bytes to a word result +// mulf8s(signed byte register(A) a, signed byte register(X) b) +mulf8s: { + .label return = 7 + // mulf8s::mulf8s_prepare1 + // mulf8u_prepare((byte)a) + // [125] (byte) mulf8u_prepare::a#0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#0 + // [126] call mulf8u_prepare + jsr mulf8u_prepare + // mulf8s::@1 + // mulf8s_prepared(b) + // [127] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#2 -- vbsz1=vbsxx + stx.z mulf8s_prepared.b + // [128] call mulf8s_prepared + jsr mulf8s_prepared + // mulf8s::@2 + // [129] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 + // mulf8s::@return + // } + // [130] return + rts +} + // mulf8s_prepared +// Calculate fast multiply with a prepared unsigned byte to a word result +// The prepared number is set by calling mulf8s_prepare(byte a) +// mulf8s_prepared(signed byte zeropage($12) b) +mulf8s_prepared: { + .label memA = $fd + .label m = 7 + .label b = $12 + // mulf8u_prepared((byte) b) + // [131] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuz1 + lda.z b + // [132] call mulf8u_prepared + jsr mulf8u_prepared + // [133] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + // mulf8s_prepared::@5 + // m = mulf8u_prepared((byte) b) + // [134] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 + // if(*memA<0) + // [135] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 + lda memA + cmp #0 + bpl __b1 + // mulf8s_prepared::@3 + // >m + // [136] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 + lda.z m+1 + // >m = (>m)-(byte)b + // [137] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 + sec + sbc.z b + // [138] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuaa + sta.z m+1 + // [139] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] + // [139] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy + // mulf8s_prepared::@1 + __b1: + // if(b<0) + // [140] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 + lda.z b + cmp #0 + bpl __b2 + // mulf8s_prepared::@4 + // >m + // [141] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 + lda.z m+1 + // >m = (>m)-(byte)*memA + // [142] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuaa=vbuaa_minus__deref_pbuc1 + sec + sbc memA + // [143] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuaa + sta.z m+1 + // [144] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] + // [144] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy + // mulf8s_prepared::@2 + __b2: + // mulf8s_prepared::@return + // } + // [145] return + rts +} + // mulf8u_prepared +// Calculate fast multiply with a prepared unsigned byte to a word result +// The prepared number is set by calling mulf8u_prepare(byte a) +// mulf8u_prepared(byte register(A) b) +mulf8u_prepared: { + .label resL = $fe + .label memB = $ff + .label return = 7 + // *memB = b + // [146] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#0 -- _deref_pbuc1=vbuaa + sta memB + // asm + // asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } + tax + sec + sm1: + lda mulf_sqr1_lo,x + sm2: + sbc mulf_sqr2_lo,x + sta resL + sm3: + lda mulf_sqr1_hi,x + sm4: + sbc mulf_sqr2_hi,x + sta memB + // return { *memB, *resL }; + // [148] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + lda resL + sta.z return + lda memB + sta.z return+1 + // mulf8u_prepared::@return + // } + // [149] return + rts +} + // mulf8u_prepare +// Prepare for fast multiply with an unsigned byte to a word result +// mulf8u_prepare(byte register(A) a) +mulf8u_prepare: { + .label memA = $fd + // *memA = a + // [150] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#0 -- _deref_pbuc1=vbuaa + sta memA + // asm + // asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } + sta mulf8u_prepared.sm1+1 + sta mulf8u_prepared.sm3+1 + eor #$ff + sta mulf8u_prepared.sm2+1 + sta mulf8u_prepared.sm4+1 + // mulf8u_prepare::@return + // } + // [152] return + rts +} + // init +// Initialize the program +init: { + .label i = 6 + // *D011 = VIC_DEN | VIC_RSEL | 3 + // [153] *((const byte*) D011) ← (const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 + lda #VIC_DEN|VIC_RSEL|3 + sta D011 + // plexInit(SCREEN) + // [154] call plexInit + // [212] phi from init to plexInit [phi:init->plexInit] + jsr plexInit + // [155] phi from init to init::@1 [phi:init->init::@1] + // [155] phi (byte) init::i#2 = (byte) 0 [phi:init->init::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // Set the sprite pointers & initial positions + // [155] phi from init::@1 to init::@1 [phi:init::@1->init::@1] + // [155] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@1->init::@1#0] -- register_copy + // init::@1 + __b1: + // PLEX_PTR[i] = (char)(SPRITE/0x40) + // [156] *((const byte*) PLEX_PTR + (byte) init::i#2) ← (byte)(const byte*) SPRITE/(byte) $40 -- pbuc1_derefidx_vbuz1=vbuc2 + lda #$ff&SPRITE/$40 + ldy.z i + sta PLEX_PTR,y + // i*5 + // [157] (byte~) init::$10 ← (byte) init::i#2 << (byte) 2 -- vbuaa=vbuz1_rol_2 + tya + asl + asl + // [158] (byte~) init::$3 ← (byte~) init::$10 + (byte) init::i#2 -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z i + // 24+i*5 + // [159] (byte~) init::$4 ← (byte) $18 + (byte~) init::$3 -- vbuxx=vbuc1_plus_vbuaa + tax + axs #-[$18] + // PLEX_XPOS[i] = 24+i*5 + // [160] (byte~) init::$9 ← (byte) init::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + tya + asl + // [161] *((const word*) PLEX_XPOS + (byte~) init::$9) ← (byte~) init::$4 -- pwuc1_derefidx_vbuaa=vbuxx + tay + txa + sta PLEX_XPOS,y + // i*8 + // [162] (byte~) init::$5 ← (byte) init::i#2 << (byte) 3 -- vbuaa=vbuz1_rol_3 + lda.z i + asl + asl + asl + // 50+i*8 + // [163] (byte~) init::$6 ← (byte) $32 + (byte~) init::$5 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #$32 + // PLEX_YPOS[i] = 50+i*8 + // [164] *((const byte*) PLEX_YPOS + (byte) init::i#2) ← (byte~) init::$6 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z i + sta PLEX_YPOS,y + // for(char i: 0..PLEX_COUNT-1) + // [165] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [166] if((byte) init::i#1!=(const byte) PLEX_COUNT-(byte) 1+(byte) 1) goto init::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #PLEX_COUNT-1+1 + cmp.z i + bne __b1 + // init::@2 + // *SPRITES_ENABLE = 0xff + // [167] *((const byte*) SPRITES_ENABLE) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // Enable & initialize sprites + lda #$ff + sta SPRITES_ENABLE + // [168] phi from init::@2 to init::@3 [phi:init::@2->init::@3] + // [168] phi (byte) init::i1#2 = (byte) 0 [phi:init::@2->init::@3#0] -- vbuxx=vbuc1 + ldx #0 + // [168] phi from init::@3 to init::@3 [phi:init::@3->init::@3] + // [168] phi (byte) init::i1#2 = (byte) init::i1#1 [phi:init::@3->init::@3#0] -- register_copy + // init::@3 + __b3: + // SPRITES_COLS[i] = GREEN + // [169] *((const byte*) SPRITES_COLS + (byte) init::i1#2) ← (const byte) GREEN -- pbuc1_derefidx_vbuxx=vbuc2 + lda #GREEN + sta SPRITES_COLS,x + // for(char i: 0..7) + // [170] (byte) init::i1#1 ← ++ (byte) init::i1#2 -- vbuxx=_inc_vbuxx + inx + // [171] if((byte) init::i1#1!=(byte) 8) goto init::@3 -- vbuxx_neq_vbuc1_then_la1 + cpx #8 + bne __b3 + // [172] phi from init::@3 to init::@4 [phi:init::@3->init::@4] + // init::@4 + // mulf_init() + // [173] call mulf_init + // [183] phi from init::@4 to mulf_init [phi:init::@4->mulf_init] + jsr mulf_init + // [174] phi from init::@4 to init::@5 [phi:init::@4->init::@5] + // init::@5 + // memset(SCREEN, ' ', 1000) + // [175] call memset + // [177] phi from init::@5 to memset [phi:init::@5->memset] + jsr memset + // init::@return + // } + // [176] 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: { + .label str = SCREEN + .const c = ' ' + .const num = $3e8 + .label end = str+num + .label dst = 7 + // [178] phi from memset to memset::@1 [phi:memset->memset::@1] + // [178] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + lda #str + sta.z dst+1 + // memset::@1 + __b1: + // for(char* dst = str; dst!=end; dst++) + // [179] 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 #memset::@1] + // [178] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + jmp __b1 +} + // mulf_init +// Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4) +mulf_init: { + // x/2 + .label c = $12 + // Counter used for determining x%2==0 + .label sqr1_hi = 9 + // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 + .label sqr = $f + .label sqr1_lo = 7 + // Decrease or increase x_255 - initially we decrease + .label sqr2_hi = $d + .label sqr2_lo = $b + //Start with g(0)=f(255) + .label dir = $11 + // [184] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + // [184] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 + ldx #0 + // [184] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + lda #mulf_sqr1_hi+1 + sta.z sqr1_hi+1 + // [184] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + txa + sta.z sqr + sta.z sqr+1 + // [184] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + sta.z c + // [184] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + lda #mulf_sqr1_lo+1 + sta.z sqr1_lo+1 + // mulf_init::@1 + __b1: + // for(byte* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++) + // [185] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + lda.z sqr1_lo+1 + cmp #>mulf_sqr1_lo+$200 + bne __b2 + lda.z sqr1_lo + cmp #mulf_init::@5] + // [186] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + lda #$ff + sta.z dir + // [186] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + lda #mulf_sqr2_hi + sta.z sqr2_hi+1 + // [186] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 + ldx #-1 + // [186] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + lda #mulf_sqr2_lo + sta.z sqr2_lo+1 + // mulf_init::@5 + __b5: + // for(byte* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++) + // [187] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + lda.z sqr2_lo+1 + cmp #>mulf_sqr2_lo+$1ff + bne __b6 + lda.z sqr2_lo + cmp #mulf_init::@8] + // [197] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + lda #1 + sta.z dir + // [196] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // mulf_init::@9 + // [197] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [197] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // mulf_init::@8 + __b8: + // for(byte* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++) + // [198] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + inc.z sqr2_lo + bne !+ + inc.z sqr2_lo+1 + !: + // [186] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [186] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [186] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [186] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [186] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + jmp __b5 + // mulf_init::@2 + __b2: + // if((++c&1)==0) + // [199] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + inc.z c + // ++c&1 + // [200] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 + lda #1 + and.z c + // if((++c&1)==0) + // [201] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 + cmp #0 + bne __b3 + // mulf_init::@4 + // x_2++; + // [202] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx + inx + // sqr++; + // [203] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + inc.z sqr + bne !+ + inc.z sqr+1 + !: + // [204] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [204] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [204] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // mulf_init::@3 + __b3: + // sqr + // [207] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 + lda.z sqr+1 + // *sqr1_hi++ = >sqr + // [208] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa + sta (sqr1_hi),y + // *sqr1_hi++ = >sqr; + // [209] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + inc.z sqr1_hi + bne !+ + inc.z sqr1_hi+1 + !: + // sqr = sqr + x_2 + // [210] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx + txa + clc + adc.z sqr + sta.z sqr + bcc !+ + inc.z sqr+1 + !: + // for(byte* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++) + // [211] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + inc.z sqr1_lo + bne !+ + inc.z sqr1_lo+1 + !: + // [184] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [184] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [184] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [184] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [184] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [184] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + jmp __b1 +} + // plexInit +// Initialize the multiplexer data structures +plexInit: { + // [213] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] + // plexInit::plexSetScreen1 + // [214] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] + // [214] phi (byte) plexInit::i#2 = (byte) 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 + ldx #0 + // [214] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] + // [214] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy + // plexInit::@1 + __b1: + // PLEX_SORTED_IDX[i] = i + // [215] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx + txa + sta PLEX_SORTED_IDX,x + // for(byte i: 0..PLEX_COUNT-1) + // [216] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 -- vbuxx=_inc_vbuxx + inx + // [217] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #PLEX_COUNT-1+1 + bne __b1 + // plexInit::@return + // } + // [218] return + rts +} + // File Data + // The x-positions of the multiplexer sprites ($000-$1ff) + PLEX_XPOS: .fill 2*PLEX_COUNT, 0 + // The y-positions of the multiplexer sprites. + PLEX_YPOS: .fill PLEX_COUNT, 0 + // The sprite pointers for the multiplexed sprites + PLEX_PTR: .fill PLEX_COUNT, 0 + // Indexes of the plex-sprites sorted by sprite y-position. Each call to plexSort() will fix the sorting if changes to the Y-positions have ruined it. + PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 + // Contains the Y-position where each sprite is free again. PLEX_FREE_YPOS[s] holds the Y-position where sprite s is free to use again. + PLEX_FREE_YPOS: .fill 8, 0 + // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). + // f(x) = >(( x * x )/4) + .align $100 + mulf_sqr1_hi: .fill $200, 0 + // g(x) = >((( x - 255) * ( x - 255 ))/4) + .align $100 + mulf_sqr2_hi: .fill $200, 0 + // 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 BOB sprite + .align $1000 +SPRITE: +.var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) + .for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + + // Sine and Cosine tables + // Angles: $00=0, $80=PI,$100=2*PI + // Sine/Cosine: signed fixed [-$7f,$7f] + .align $40 +SIN: +.for(var i=0;i<$140;i++) + .byte >round($7fff*sin(i*2*PI/256)) + + diff --git a/src/test/ref/complex/prebob/vogel-sprites.sym b/src/test/ref/complex/prebob/vogel-sprites.sym new file mode 100644 index 000000000..87ef1b590 --- /dev/null +++ b/src/test/ref/complex/prebob/vogel-sprites.sym @@ -0,0 +1,383 @@ +(label) @1 +(label) @begin +(label) @end +(const byte) BLACK = (number) 0 +(const byte*) BORDERCOL = (byte*) 53280 +(const byte*) CIA1_PORT_A = (byte*) 56320 +(const byte*) CIA1_PORT_B = (byte*) 56321 +(const signed byte*) COS = (const signed byte*) SIN+(byte) $40 +(const byte*) D011 = (byte*) 53265 +(const byte) GREEN = (number) 5 +(const byte) KEY_SPACE = (number) $3c +(const byte) NUM_BOBS = (number) $10 +(const byte) PLEX_COUNT = (number) $20 +(const byte*) PLEX_FREE_YPOS = { fill( 8, 0) } +(const byte*) PLEX_PTR = { fill( PLEX_COUNT, 0) } +(byte*) PLEX_SCREEN_PTR +(const byte*) PLEX_SCREEN_PTR#1 PLEX_SCREEN_PTR = (const byte*) SCREEN+(word) $3f8 +(const byte*) PLEX_SORTED_IDX = { fill( PLEX_COUNT, 0) } +(const word*) PLEX_XPOS = { fill( PLEX_COUNT, 0) } +(const byte*) PLEX_YPOS = { fill( PLEX_COUNT, 0) } +(const byte*) RASTER = (byte*) 53266 +(const byte*) SCREEN = (byte*) 1024 +(const signed byte*) SIN = kickasm {{ .for(var i=0;i<$140;i++) + .byte >round($7fff*sin(i*2*PI/256)) + }} +(const byte*) SPRITE = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) + .for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + }} +(const byte*) SPRITES_COLS = (byte*) 53287 +(const byte*) SPRITES_ENABLE = (byte*) 53269 +(const byte*) SPRITES_XMSB = (byte*) 53264 +(const byte*) SPRITES_XPOS = (byte*) 53248 +(const byte*) SPRITES_YPOS = (byte*) 53249 +(const byte) VIC_DEN = (number) $10 +(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RST8 = (number) $80 +(void()) exit() +(byte~) exit::$0 reg byte a 22.0 +(label) exit::@1 +(label) exit::@2 +(label) exit::@return +(void()) init() +(byte~) init::$10 reg byte a 22.0 +(byte~) init::$3 reg byte a 22.0 +(byte~) init::$4 reg byte x 11.0 +(byte~) init::$5 reg byte a 22.0 +(byte~) init::$6 reg byte a 22.0 +(byte~) init::$9 reg byte a 22.0 +(label) init::@1 +(label) init::@2 +(label) init::@3 +(label) init::@4 +(label) init::@5 +(label) init::@return +(byte) init::i +(byte) init::i#1 i zp[1]:6 16.5 +(byte) init::i#2 i zp[1]:6 8.799999999999999 +(byte) init::i1 +(byte) init::i1#1 reg byte x 16.5 +(byte) init::i1#2 reg byte x 16.5 +(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 6.0 +(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::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()) loop() +(signed word~) loop::$1 zp[2]:7 202.0 +(byte~) loop::$11 reg byte a 202.0 +(byte~) loop::$18 reg byte a 22.0 +(signed word~) loop::$2 zp[2]:7 202.0 +(byte~) loop::$20 reg byte a 202.0 +(byte~) loop::$4 reg byte x 101.0 +(signed word~) loop::$5 zp[2]:7 202.0 +(signed word~) loop::$6 zp[2]:7 202.0 +(byte~) loop::$8 reg byte a 202.0 +(label) loop::@1 +(label) loop::@10 +(label) loop::@11 +(label) loop::@12 +(label) loop::@13 +(label) loop::@14 +(label) loop::@15 +(label) loop::@2 +(label) loop::@3 +(label) loop::@4 +(label) loop::@5 +(label) loop::@6 +(label) loop::@7 +(label) loop::@8 +(label) loop::@9 +(label) loop::@return +(byte) loop::a +(byte) loop::a#1 a zp[1]:3 50.5 +(byte) loop::a#2 a zp[1]:3 19.761904761904763 +(byte) loop::a#6 a zp[1]:3 22.0 +(byte) loop::angle +(byte) loop::angle#1 angle zp[1]:6 1.2941176470588236 +(byte) loop::angle#6 angle zp[1]:6 1.064516129032258 +(byte) loop::i +(byte) loop::i#1 i zp[1]:4 151.5 +(byte) loop::i#2 i zp[1]:4 17.565217391304348 +(byte) loop::i1 +(byte) loop::i1#1 i1 zp[1]:18 151.5 +(byte) loop::i1#5 i1 zp[1]:18 33.666666666666664 +(label) loop::plexFreeNextYpos1 +(byte) loop::plexFreeNextYpos1_return +(byte) loop::plexFreeNextYpos1_return#0 plexFreeNextYpos1_return zp[1]:17 551.0 +(signed byte) loop::r +(signed byte) loop::r#1 r zp[1]:2 67.33333333333333 +(signed byte) loop::r#2 r zp[1]:2 18.363636363636363 +(byte) loop::rasterY +(signed word) loop::x +(signed word) loop::x#0 x zp[2]:7 202.0 +(signed word) loop::y +(signed word) loop::y#0 y zp[2]:7 202.0 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@return +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +(label) memset::@1 +(label) memset::@2 +(label) memset::@return +(byte) memset::c +(const byte) memset::c#0 c = (byte) ' ' +(byte*) memset::dst +(byte*) memset::dst#1 dst zp[2]:7 22.0 +(byte*) memset::dst#2 dst zp[2]:7 14.666666666666666 +(byte*) memset::end +(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 +(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 +(signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) +(label) mulf8s::@1 +(label) mulf8s::@2 +(label) mulf8s::@return +(signed byte) mulf8s::a +(signed byte) mulf8s::a#0 reg byte a 101.0 +(signed byte) mulf8s::a#1 reg byte a 101.0 +(signed byte) mulf8s::b +(signed byte) mulf8s::b#0 reg byte x 202.0 +(signed byte) mulf8s::b#1 reg byte x 202.0 +(signed byte) mulf8s::b#2 reg byte x 68.0 +(label) mulf8s::mulf8s_prepare1 +(signed byte) mulf8s::mulf8s_prepare1_a +(signed byte) mulf8s::mulf8s_prepare1_a#0 reg byte a 202.0 +(signed word) mulf8s::return +(signed word) mulf8s::return#0 return zp[2]:7 51.0 +(signed word) mulf8s::return#2 return zp[2]:7 202.0 +(signed word) mulf8s::return#3 return zp[2]:7 202.0 +(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) +(byte~) mulf8s_prepared::$12 reg byte a 4.0 +(byte~) mulf8s_prepared::$15 reg byte a 4.0 +(byte~) mulf8s_prepared::$16 reg byte a 4.0 +(byte~) mulf8s_prepared::$8 reg byte a 4.0 +(label) mulf8s_prepared::@1 +(label) mulf8s_prepared::@2 +(label) mulf8s_prepared::@3 +(label) mulf8s_prepared::@4 +(label) mulf8s_prepared::@5 +(label) mulf8s_prepared::@return +(signed byte) mulf8s_prepared::b +(signed byte) mulf8s_prepared::b#0 b zp[1]:18 0.4 +(word) mulf8s_prepared::m +(word) mulf8s_prepared::m#0 m zp[2]:7 2.0 +(word) mulf8s_prepared::m#1 m zp[2]:7 4.0 +(word) mulf8s_prepared::m#2 m zp[2]:7 4.0 +(word) mulf8s_prepared::m#4 m zp[2]:7 1.3333333333333333 +(word) mulf8s_prepared::m#5 m zp[2]:7 2.5 +(const signed byte*) mulf8s_prepared::memA = (signed byte*) 253 +(signed word) mulf8s_prepared::return +(void()) mulf8u_prepare((byte) mulf8u_prepare::a) +(label) mulf8u_prepare::@return +(byte) mulf8u_prepare::a +(byte) mulf8u_prepare::a#0 reg byte a 4.0 +(const byte*) mulf8u_prepare::memA = (byte*) 253 +(word()) mulf8u_prepared((byte) mulf8u_prepared::b) +(label) mulf8u_prepared::@return +(byte) mulf8u_prepared::b +(byte) mulf8u_prepared::b#0 reg byte a 4.0 +(const byte*) mulf8u_prepared::memB = (byte*) 255 +(const byte*) mulf8u_prepared::resL = (byte*) 254 +(word) mulf8u_prepared::return +(word) mulf8u_prepared::return#0 return zp[2]:7 1.3333333333333333 +(word) mulf8u_prepared::return#2 return zp[2]:7 4.0 +(void()) mulf_init() +(byte~) mulf_init::$1 reg byte a 22.0 +(byte~) mulf_init::$4 reg byte a 22.0 +(byte~) mulf_init::$5 reg byte a 22.0 +(label) mulf_init::@1 +(label) mulf_init::@2 +(label) mulf_init::@3 +(label) mulf_init::@4 +(label) mulf_init::@5 +(label) mulf_init::@6 +(label) mulf_init::@7 +(label) mulf_init::@8 +(label) mulf_init::@9 +(label) mulf_init::@return +(byte) mulf_init::c +(byte) mulf_init::c#1 c zp[1]:18 2.5384615384615383 +(byte) mulf_init::c#2 c zp[1]:18 11.0 +(byte) mulf_init::dir +(byte) mulf_init::dir#2 dir zp[1]:17 4.125 +(byte) mulf_init::dir#4 dir zp[1]:17 11.0 +(word) mulf_init::sqr +(word) mulf_init::sqr#1 sqr zp[2]:15 11.0 +(word) mulf_init::sqr#2 sqr zp[2]:15 22.0 +(word) mulf_init::sqr#3 sqr zp[2]:15 9.166666666666666 +(word) mulf_init::sqr#4 sqr zp[2]:15 5.5 +(byte*) mulf_init::sqr1_hi +(byte*) mulf_init::sqr1_hi#1 sqr1_hi zp[2]:9 7.333333333333333 +(byte*) mulf_init::sqr1_hi#2 sqr1_hi zp[2]:9 2.75 +(byte*) mulf_init::sqr1_lo +(byte*) mulf_init::sqr1_lo#1 sqr1_lo zp[2]:7 22.0 +(byte*) mulf_init::sqr1_lo#2 sqr1_lo zp[2]:7 3.142857142857143 +(byte*) mulf_init::sqr2_hi +(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp[2]:13 3.6666666666666665 +(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp[2]:13 8.25 +(byte*) mulf_init::sqr2_lo +(byte*) mulf_init::sqr2_lo#1 sqr2_lo zp[2]:11 22.0 +(byte*) mulf_init::sqr2_lo#2 sqr2_lo zp[2]:11 4.888888888888889 +(byte) mulf_init::x_2 +(byte) mulf_init::x_2#1 reg byte x 11.0 +(byte) mulf_init::x_2#2 reg byte x 5.5 +(byte) mulf_init::x_2#3 reg byte x 6.6000000000000005 +(byte) mulf_init::x_255 +(byte) mulf_init::x_255#1 reg byte x 6.6000000000000005 +(byte) mulf_init::x_255#2 reg byte x 8.8 +(const byte*) mulf_sqr1_hi = { fill( $200, 0) } +(const byte*) mulf_sqr1_lo = { fill( $200, 0) } +(const byte*) mulf_sqr2_hi = { fill( $200, 0) } +(const byte*) mulf_sqr2_lo = { fill( $200, 0) } +(void()) plexInit((byte*) plexInit::screen) +(label) plexInit::@1 +(label) plexInit::@return +(byte) plexInit::i +(byte) plexInit::i#1 reg byte x 16.5 +(byte) plexInit::i#2 reg byte x 22.0 +(label) plexInit::plexSetScreen1 +(byte*) plexInit::plexSetScreen1_screen +(byte*) plexInit::screen +(void()) plexShowSprite() +(byte~) plexShowSprite::$11 reg byte x 2.0 +(byte~) plexShowSprite::$2 reg byte a 4.0 +(byte~) plexShowSprite::$3 reg byte a 4.0 +(byte~) plexShowSprite::$5 reg byte x 4.0 +(byte~) plexShowSprite::$9 reg byte a 4.0 +(label) plexShowSprite::@1 +(label) plexShowSprite::@2 +(label) plexShowSprite::@3 +(label) plexShowSprite::@4 +(label) plexShowSprite::@5 +(label) plexShowSprite::@return +(label) plexShowSprite::plexFreeAdd1 +(byte~) plexShowSprite::plexFreeAdd1_$0 reg byte a 4.0 +(byte~) plexShowSprite::plexFreeAdd1_$1 reg byte x 4.0 +(byte) plexShowSprite::plexFreeAdd1_ypos +(byte) plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 3.0 +(byte) plexShowSprite::plex_sprite_idx2 +(byte) plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:17 0.5454545454545454 +(byte) plexShowSprite::xpos_idx +(byte) plexShowSprite::xpos_idx#0 reg byte a 4.0 +(byte) plexShowSprite::ypos +(void()) plexSort() +(label) plexSort::@1 +(label) plexSort::@2 +(label) plexSort::@3 +(label) plexSort::@4 +(label) plexSort::@5 +(label) plexSort::@6 +(label) plexSort::@return +(byte) plexSort::m +(byte) plexSort::m#1 m zp[1]:5 151.5 +(byte) plexSort::m#2 m zp[1]:5 42.08333333333333 +(byte) plexSort::nxt_idx +(byte) plexSort::nxt_idx#0 nxt_idx zp[1]:17 30.299999999999997 +(byte) plexSort::nxt_y +(byte) plexSort::nxt_y#0 nxt_y zp[1]:18 150.375 +(label) plexSort::plexFreePrepare1 +(label) plexSort::plexFreePrepare1_@1 +(byte) plexSort::plexFreePrepare1_s +(byte) plexSort::plexFreePrepare1_s#1 reg byte x 151.5 +(byte) plexSort::plexFreePrepare1_s#2 reg byte x 151.5 +(byte) plexSort::s +(byte) plexSort::s#1 reg byte x 1368.3333333333335 +(byte) plexSort::s#2 reg byte x 202.0 +(byte) plexSort::s#3 reg byte x 2052.5 +(byte) plexSort::s#6 reg byte x 202.0 +(byte) plex_free_next +(byte) plex_free_next#13 plex_free_next zp[1]:2 4.681818181818182 +(byte) plex_free_next#17 plex_free_next zp[1]:2 20.599999999999998 +(byte) plex_show_idx +(byte) plex_show_idx#15 plex_show_idx zp[1]:4 11.444444444444443 +(byte) plex_show_idx#43 plex_show_idx zp[1]:4 4.541666666666665 +(byte) plex_sprite_idx +(byte) plex_sprite_idx#15 plex_sprite_idx zp[1]:3 10.299999999999999 +(byte) plex_sprite_idx#43 plex_sprite_idx zp[1]:3 4.863636363636363 +(byte) plex_sprite_msb +(byte) plex_sprite_msb#16 plex_sprite_msb zp[1]:5 20.599999999999998 +(byte) plex_sprite_msb#3 plex_sprite_msb zp[1]:5 2.0 +(byte) plex_sprite_msb#43 plex_sprite_msb zp[1]:5 4.28 + +zp[1]:2 [ plex_free_next#17 plex_free_next#13 loop::r#2 loop::r#1 ] +zp[1]:3 [ plex_sprite_idx#43 plex_sprite_idx#15 loop::a#2 loop::a#1 loop::a#6 ] +zp[1]:4 [ plex_show_idx#43 plex_show_idx#15 loop::i#2 loop::i#1 ] +zp[1]:5 [ plexSort::m#2 plexSort::m#1 plex_sprite_msb#43 plex_sprite_msb#16 plex_sprite_msb#3 ] +reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +reg byte a [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] +reg byte x [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] +zp[1]:6 [ init::i#2 init::i#1 loop::angle#6 loop::angle#1 ] +reg byte x [ init::i1#2 init::i1#1 ] +zp[2]:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 memset::dst#2 memset::dst#1 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#2 mulf8s::return#2 loop::$1 mulf8s::return#3 loop::$5 mulf8u_prepared::return#0 loop::$2 loop::x#0 loop::$6 loop::y#0 ] +zp[2]:9 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +zp[2]:11 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] +reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] +zp[2]:13 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] +zp[2]:15 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] +reg byte x [ plexInit::i#2 plexInit::i#1 ] +reg byte a [ keyboard_key_pressed::return#2 ] +reg byte a [ exit::$0 ] +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 ] +reg byte x [ loop::$4 ] +reg byte a [ loop::$20 ] +reg byte a [ loop::$8 ] +reg byte a [ loop::$11 ] +reg byte a [ keyboard_key_pressed::return#3 ] +reg byte a [ loop::$18 ] +reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] +reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] +reg byte x [ plexShowSprite::plexFreeAdd1_$1 ] +reg byte a [ plexShowSprite::xpos_idx#0 ] +reg byte x [ plexShowSprite::$11 ] +reg byte a [ plexShowSprite::$2 ] +reg byte a [ plexShowSprite::$3 ] +reg byte a [ plexShowSprite::$9 ] +reg byte x [ plexShowSprite::$5 ] +zp[1]:17 [ plexSort::nxt_idx#0 plexShowSprite::plex_sprite_idx2#0 loop::plexFreeNextYpos1_return#0 mulf_init::dir#2 mulf_init::dir#4 ] +reg byte x [ plexSort::s#2 ] +reg byte a [ mulf8u_prepare::a#0 ] +zp[1]:18 [ mulf8s_prepared::b#0 plexSort::nxt_y#0 mulf_init::c#2 mulf_init::c#1 loop::i1#5 loop::i1#1 ] +reg byte a [ mulf8u_prepared::b#0 ] +reg byte a [ mulf8s_prepared::$8 ] +reg byte a [ mulf8s_prepared::$15 ] +reg byte a [ mulf8s_prepared::$12 ] +reg byte a [ mulf8s_prepared::$16 ] +reg byte a [ init::$10 ] +reg byte a [ init::$3 ] +reg byte x [ init::$4 ] +reg byte a [ init::$9 ] +reg byte a [ init::$5 ] +reg byte a [ init::$6 ] +reg byte a [ mulf_init::$1 ] +reg byte a [ mulf_init::$4 ] +reg byte a [ mulf_init::$5 ]