From 2a0efd5f5b106ff1e19494ca11bcc2573f6b857c Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 8 Nov 2020 08:36:09 +0100 Subject: [PATCH] Fixed multiplexer tests. --- src/test/ref/complex/prebob/vogel-sprites.asm | 38 +- src/test/ref/complex/prebob/vogel-sprites.cfg | 469 +-- src/test/ref/complex/prebob/vogel-sprites.log | 3093 ++++++++--------- src/test/ref/complex/prebob/vogel-sprites.sym | 40 +- .../complex/spritescroller/spritescroller.asm | 46 +- .../complex/spritescroller/spritescroller.cfg | 24 +- .../complex/spritescroller/spritescroller.log | 1472 ++++---- .../complex/spritescroller/spritescroller.sym | 121 +- .../multiplexer/simple-multiplexer.asm | 34 +- .../multiplexer/simple-multiplexer.cfg | 223 +- .../multiplexer/simple-multiplexer.log | 1647 +++++---- .../multiplexer/simple-multiplexer.sym | 38 +- .../simple-multiplexer-irq.asm | 22 +- .../simple-multiplexer-irq.cfg | 22 +- .../simple-multiplexer-irq.log | 809 ++--- .../simple-multiplexer-irq.sym | 32 +- 16 files changed, 3920 insertions(+), 4210 deletions(-) diff --git a/src/test/ref/complex/prebob/vogel-sprites.asm b/src/test/ref/complex/prebob/vogel-sprites.asm index 287792016..62128825f 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.asm +++ b/src/test/ref/complex/prebob/vogel-sprites.asm @@ -31,16 +31,21 @@ .label SCREEN = $400 .label COS = SIN+$40 // The address of the sprite pointers on the current screen (screen+0x3f8). - .label PLEX_SCREEN_PTR = SCREEN+$3f8 + .label PLEX_SCREEN_PTR = $11 // The index in the PLEX tables of the next sprite to show - .label plex_show_idx = $11 + .label plex_show_idx = $13 // The index the next sprite to use for showing (sprites are used round-robin) - .label plex_sprite_idx = $12 + .label plex_sprite_idx = $14 // The MSB bit of the next sprite to use for showing - .label plex_sprite_msb = $13 + .label plex_sprite_msb = $15 // 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 = $14 + .label plex_free_next = $16 __start: { + // PLEX_SCREEN_PTR = 0x400+0x3f8 + lda #<$400+$3f8 + sta.z PLEX_SCREEN_PTR + lda #>$400+$3f8 + sta.z PLEX_SCREEN_PTR+1 // plex_show_idx=0 lda #0 sta.z plex_show_idx @@ -153,7 +158,7 @@ loop: { .label i = 3 // Render Rotated BOBs .label angle = 2 - .label plexFreeNextYpos1_return = $15 + .label plexFreeNextYpos1_return = $17 .label i1 = 4 lda #0 sta.z angle @@ -311,6 +316,11 @@ exit: { } // Initialize the multiplexer data structures plexInit: { + // PLEX_SCREEN_PTR = screen+0x3f8 + lda #SCREEN+$3f8 + sta.z PLEX_SCREEN_PTR+1 ldx #0 __b1: // PLEX_SORTED_IDX[i] = i @@ -517,9 +527,9 @@ mulf8s: { // 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 = $16 - .label nxt_y = $17 - .label m = $15 + .label nxt_idx = $18 + .label nxt_y = $19 + .label m = $17 lda #0 sta.z m __b1: @@ -587,7 +597,7 @@ plexSort: { // Show the next sprite. // plexSort() prepares showing the sprites plexShowSprite: { - .label plex_sprite_idx2 = $17 + .label plex_sprite_idx2 = $19 // plex_sprite_idx2 = plex_sprite_idx*2 lda.z plex_sprite_idx asl @@ -616,8 +626,8 @@ plexShowSprite: { // PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[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_sprite_idx + sta (PLEX_SCREEN_PTR),y // xpos_idx = PLEX_SORTED_IDX[plex_show_idx] ldy.z plex_show_idx lda PLEX_SORTED_IDX,y @@ -700,11 +710,11 @@ mulf8u_prepare: { } // Calculate fast multiply with a prepared unsigned char to a unsigned int result // The prepared number is set by calling mulf8s_prepare(char a) -// mulf8s_prepared(signed byte zp($16) b) +// mulf8s_prepared(signed byte zp($18) b) mulf8s_prepared: { .label memA = $fd .label m = $f - .label b = $16 + .label b = $18 // mulf8u_prepared((char) b) lda.z b jsr mulf8u_prepared diff --git a/src/test/ref/complex/prebob/vogel-sprites.cfg b/src/test/ref/complex/prebob/vogel-sprites.cfg index a02a3a92b..ff9219775 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.cfg +++ b/src/test/ref/complex/prebob/vogel-sprites.cfg @@ -4,464 +4,465 @@ __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start - [1] plex_show_idx = 0 - [2] plex_sprite_idx = 0 - [3] plex_sprite_msb = 1 - [4] plex_free_next = 0 + [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 + [2] plex_show_idx = 0 + [3] plex_sprite_idx = 0 + [4] plex_sprite_msb = 1 + [5] plex_free_next = 0 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - [5] phi() - [6] call main + [6] phi() + [7] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [7] return + [8] return to:@return void main() main: scope:[main] from __start::@1 asm { sei } - [9] call init + [10] call init to:main::@1 main::@1: scope:[main] from main - [10] phi() - [11] call loop + [11] phi() + [12] call loop to:main::@2 main::@2: scope:[main] from main::@1 - [12] phi() - [13] call exit + [13] phi() + [14] call exit to:main::@3 main::@3: scope:[main] from main::@2 asm { cli } to:main::@return main::@return: scope:[main] from main::@3 - [15] return + [16] return to:@return void init() init: scope:[init] from main - [16] *D011 = VIC_DEN|VIC_RSEL|3 - [17] call plexInit + [17] *D011 = VIC_DEN|VIC_RSEL|3 + [18] call plexInit to:init::@1 init::@1: scope:[init] from init init::@1 - [18] init::i#2 = phi( init::@1/init::i#1, init/0 ) - [19] PLEX_PTR[init::i#2] = (byte)SPRITE/$40 - [20] init::$10 = init::i#2 << 2 - [21] init::$3 = init::$10 + init::i#2 - [22] init::$4 = $18 + init::$3 - [23] init::$9 = init::i#2 << 1 - [24] PLEX_XPOS[init::$9] = init::$4 - [25] init::$5 = init::i#2 << 3 - [26] init::$6 = $32 + init::$5 - [27] PLEX_YPOS[init::i#2] = init::$6 - [28] init::i#1 = ++ init::i#2 - [29] if(init::i#1!=PLEX_COUNT-1+1) goto init::@1 + [19] init::i#2 = phi( init::@1/init::i#1, init/0 ) + [20] PLEX_PTR[init::i#2] = (byte)SPRITE/$40 + [21] init::$10 = init::i#2 << 2 + [22] init::$3 = init::$10 + init::i#2 + [23] init::$4 = $18 + init::$3 + [24] init::$9 = init::i#2 << 1 + [25] PLEX_XPOS[init::$9] = init::$4 + [26] init::$5 = init::i#2 << 3 + [27] init::$6 = $32 + init::$5 + [28] PLEX_YPOS[init::i#2] = init::$6 + [29] init::i#1 = ++ init::i#2 + [30] if(init::i#1!=PLEX_COUNT-1+1) goto init::@1 to:init::@2 init::@2: scope:[init] from init::@1 - [30] *SPRITES_ENABLE = $ff + [31] *SPRITES_ENABLE = $ff to:init::@3 init::@3: scope:[init] from init::@2 init::@3 - [31] init::i1#2 = phi( init::@2/0, init::@3/init::i1#1 ) - [32] SPRITES_COLOR[init::i1#2] = GREEN - [33] init::i1#1 = ++ init::i1#2 - [34] if(init::i1#1!=8) goto init::@3 + [32] init::i1#2 = phi( init::@2/0, init::@3/init::i1#1 ) + [33] SPRITES_COLOR[init::i1#2] = GREEN + [34] init::i1#1 = ++ init::i1#2 + [35] if(init::i1#1!=8) goto init::@3 to:init::@4 init::@4: scope:[init] from init::@3 - [35] phi() - [36] call mulf_init + [36] phi() + [37] call mulf_init to:init::@5 init::@5: scope:[init] from init::@4 - [37] phi() - [38] call memset + [38] phi() + [39] call memset to:init::@return init::@return: scope:[init] from init::@5 - [39] return + [40] return to:@return void loop() loop: scope:[loop] from main::@1 - [40] phi() + [41] phi() to:loop::@1 loop::@1: scope:[loop] from loop loop::@15 - [41] loop::angle#6 = phi( loop/0, loop::@15/loop::angle#1 ) + [42] loop::angle#6 = phi( loop/0, loop::@15/loop::angle#1 ) to:loop::@2 loop::@2: scope:[loop] from loop::@1 loop::@2 - [42] if(*RASTER<$d8) goto loop::@2 + [43] if(*RASTER<$d8) goto loop::@2 to:loop::@3 loop::@3: scope:[loop] from loop::@2 - [43] *BORDER_COLOR = $f - [44] loop::a#6 = loop::angle#6 + [44] *BORDER_COLOR = $f + [45] loop::a#6 = loop::angle#6 to:loop::@4 loop::@4: scope:[loop] from loop::@12 loop::@3 - [45] loop::i#2 = phi( loop::@12/loop::i#1, loop::@3/0 ) - [45] loop::a#2 = phi( loop::@12/loop::a#1, loop::@3/loop::a#6 ) - [45] loop::r#2 = phi( loop::@12/loop::r#1, loop::@3/$1e ) - [46] *BORDER_COLOR = 6 - [47] mulf8s::a#0 = loop::r#2 - [48] mulf8s::b#0 = COS[loop::a#2] - [49] call mulf8s - [50] mulf8s::return#2 = mulf8s::return#0 + [46] loop::i#2 = phi( loop::@12/loop::i#1, loop::@3/0 ) + [46] loop::a#2 = phi( loop::@12/loop::a#1, loop::@3/loop::a#6 ) + [46] loop::r#2 = phi( loop::@12/loop::r#1, loop::@3/$1e ) + [47] *BORDER_COLOR = 6 + [48] mulf8s::a#0 = loop::r#2 + [49] mulf8s::b#0 = COS[loop::a#2] + [50] call mulf8s + [51] mulf8s::return#2 = mulf8s::return#0 to:loop::@11 loop::@11: scope:[loop] from loop::@4 - [51] loop::$1 = mulf8s::return#2 - [52] loop::$2 = loop::$1 << 1 - [53] loop::x#0 = loop::$2 + (signed word)$7d*$100 - [54] loop::$4 = > loop::x#0 - [55] loop::$20 = loop::i#2 << 1 - [56] PLEX_XPOS[loop::$20] = loop::$4 - [57] mulf8s::a#1 = loop::r#2 - [58] mulf8s::b#1 = SIN[loop::a#2] - [59] call mulf8s - [60] mulf8s::return#3 = mulf8s::return#0 + [52] loop::$1 = mulf8s::return#2 + [53] loop::$2 = loop::$1 << 1 + [54] loop::x#0 = loop::$2 + (signed word)$7d*$100 + [55] loop::$4 = > loop::x#0 + [56] loop::$20 = loop::i#2 << 1 + [57] PLEX_XPOS[loop::$20] = loop::$4 + [58] mulf8s::a#1 = loop::r#2 + [59] mulf8s::b#1 = SIN[loop::a#2] + [60] call mulf8s + [61] mulf8s::return#3 = mulf8s::return#0 to:loop::@12 loop::@12: scope:[loop] from loop::@11 - [61] loop::$5 = mulf8s::return#3 - [62] loop::$6 = loop::$5 << 1 - [63] loop::y#0 = loop::$6 + (signed word)$7d*$100 - [64] loop::$8 = > loop::y#0 - [65] PLEX_YPOS[loop::i#2] = loop::$8 - [66] loop::a#1 = loop::a#2 + $62 - [67] loop::r#1 = loop::r#2 + 3 - [68] loop::i#1 = ++ loop::i#2 - [69] if(loop::i#1!=NUM_BOBS-1+1) goto loop::@4 + [62] loop::$5 = mulf8s::return#3 + [63] loop::$6 = loop::$5 << 1 + [64] loop::y#0 = loop::$6 + (signed word)$7d*$100 + [65] loop::$8 = > loop::y#0 + [66] PLEX_YPOS[loop::i#2] = loop::$8 + [67] loop::a#1 = loop::a#2 + $62 + [68] loop::r#1 = loop::r#2 + 3 + [69] loop::i#1 = ++ loop::i#2 + [70] if(loop::i#1!=NUM_BOBS-1+1) goto loop::@4 to:loop::@5 loop::@5: scope:[loop] from loop::@12 - [70] *BORDER_COLOR = 3 - [71] call plexSort + [71] *BORDER_COLOR = 3 + [72] call plexSort to:loop::@13 loop::@13: scope:[loop] from loop::@5 - [72] loop::angle#1 = loop::angle#6 + 3 - [73] *BORDER_COLOR = BLACK + [73] loop::angle#1 = loop::angle#6 + 3 + [74] *BORDER_COLOR = BLACK to:loop::@6 loop::@6: scope:[loop] from loop::@13 loop::@6 - [74] loop::$11 = *D011 & VIC_RST8 - [75] if(loop::$11!=0) goto loop::@6 + [75] loop::$11 = *D011 & VIC_RST8 + [76] if(loop::$11!=0) goto loop::@6 to:loop::@7 loop::@7: scope:[loop] from loop::@14 loop::@6 - [76] loop::i1#5 = phi( loop::@14/loop::i1#1, loop::@6/0 ) - [77] *BORDER_COLOR = BLACK + [77] loop::i1#5 = phi( loop::@14/loop::i1#1, loop::@6/0 ) + [78] *BORDER_COLOR = BLACK to:loop::plexFreeNextYpos1 loop::plexFreeNextYpos1: scope:[loop] from loop::@7 - [78] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] + [79] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] to:loop::@8 loop::@8: scope:[loop] from loop::@8 loop::plexFreeNextYpos1 - [79] if(*RASTER mulf_init::sqr#3 - [129] *mulf_init::sqr1_hi#2 = mulf_init::$5 - [130] mulf_init::sqr1_hi#1 = ++ mulf_init::sqr1_hi#2 - [131] mulf_init::sqr#1 = mulf_init::sqr#3 + mulf_init::x_2#2 - [132] mulf_init::sqr1_lo#1 = ++ mulf_init::sqr1_lo#2 + [126] mulf_init::x_2#2 = phi( mulf_init::@2/mulf_init::x_2#3, mulf_init::@4/mulf_init::x_2#1 ) + [126] mulf_init::sqr#3 = phi( mulf_init::@2/mulf_init::sqr#4, mulf_init::@4/mulf_init::sqr#2 ) + [127] mulf_init::$4 = < mulf_init::sqr#3 + [128] *mulf_init::sqr1_lo#2 = mulf_init::$4 + [129] mulf_init::$5 = > mulf_init::sqr#3 + [130] *mulf_init::sqr1_hi#2 = mulf_init::$5 + [131] mulf_init::sqr1_hi#1 = ++ mulf_init::sqr1_hi#2 + [132] mulf_init::sqr#1 = mulf_init::sqr#3 + mulf_init::x_2#2 + [133] mulf_init::sqr1_lo#1 = ++ mulf_init::sqr1_lo#2 to:mulf_init::@1 void* memset(void* memset::str , byte memset::c , word memset::num) memset: scope:[memset] from init::@5 - [133] phi() + [134] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [134] memset::dst#2 = phi( memset/(byte*)memset::str#0, memset::@2/memset::dst#1 ) - [135] if(memset::dst#2!=memset::end#0) goto memset::@2 + [135] memset::dst#2 = phi( memset/(byte*)memset::str#0, memset::@2/memset::dst#1 ) + [136] if(memset::dst#2!=memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [136] return + [137] return to:@return memset::@2: scope:[memset] from memset::@1 - [137] *memset::dst#2 = memset::c#0 - [138] memset::dst#1 = ++ memset::dst#2 + [138] *memset::dst#2 = memset::c#0 + [139] memset::dst#1 = ++ memset::dst#2 to:memset::@1 signed word mulf8s(signed byte mulf8s::a , signed byte mulf8s::b) mulf8s: scope:[mulf8s] from loop::@11 loop::@4 - [139] mulf8s::b#2 = phi( loop::@11/mulf8s::b#1, loop::@4/mulf8s::b#0 ) - [139] mulf8s::mulf8s_prepare1_a#0 = phi( loop::@11/mulf8s::a#1, loop::@4/mulf8s::a#0 ) + [140] mulf8s::b#2 = phi( loop::@11/mulf8s::b#1, loop::@4/mulf8s::b#0 ) + [140] mulf8s::mulf8s_prepare1_a#0 = phi( loop::@11/mulf8s::a#1, loop::@4/mulf8s::a#0 ) to:mulf8s::mulf8s_prepare1 mulf8s::mulf8s_prepare1: scope:[mulf8s] from mulf8s - [140] mulf8u_prepare::a#0 = (byte)mulf8s::mulf8s_prepare1_a#0 - [141] call mulf8u_prepare + [141] mulf8u_prepare::a#0 = (byte)mulf8s::mulf8s_prepare1_a#0 + [142] call mulf8u_prepare to:mulf8s::@1 mulf8s::@1: scope:[mulf8s] from mulf8s::mulf8s_prepare1 - [142] mulf8s_prepared::b#0 = mulf8s::b#2 - [143] call mulf8s_prepared + [143] mulf8s_prepared::b#0 = mulf8s::b#2 + [144] call mulf8s_prepared to:mulf8s::@2 mulf8s::@2: scope:[mulf8s] from mulf8s::@1 - [144] mulf8s::return#0 = (signed word)mulf8s_prepared::m#4 + [145] mulf8s::return#0 = (signed word)mulf8s_prepared::m#4 to:mulf8s::@return mulf8s::@return: scope:[mulf8s] from mulf8s::@2 - [145] return + [146] return to:@return void plexSort() plexSort: scope:[plexSort] from loop::@5 - [146] phi() + [147] phi() to:plexSort::@1 plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 - [147] plexSort::m#2 = phi( plexSort/0, plexSort::@2/plexSort::m#1 ) - [148] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2] - [149] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] - [150] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 + [148] plexSort::m#2 = phi( plexSort/0, plexSort::@2/plexSort::m#1 ) + [149] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2] + [150] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] + [151] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 to:plexSort::@5 plexSort::@5: scope:[plexSort] from plexSort::@1 - [151] plexSort::s#6 = plexSort::m#2 + [152] plexSort::s#6 = plexSort::m#2 to:plexSort::@3 plexSort::@3: scope:[plexSort] from plexSort::@5 plexSort::@7 - [152] plexSort::s#3 = phi( plexSort::@7/plexSort::s#1, plexSort::@5/plexSort::s#6 ) - [153] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] - [154] plexSort::s#1 = -- plexSort::s#3 - [155] if(plexSort::s#1==$ff) goto plexSort::@4 + [153] plexSort::s#3 = phi( plexSort::@7/plexSort::s#1, plexSort::@5/plexSort::s#6 ) + [154] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] + [155] plexSort::s#1 = -- plexSort::s#3 + [156] if(plexSort::s#1==$ff) goto plexSort::@4 to:plexSort::@7 plexSort::@7: scope:[plexSort] from plexSort::@3 - [156] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] - [185] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 + [180] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] + [181] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] + [182] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 + [183] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] + [184] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 + [185] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] + [186] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 to:plexShowSprite::@3 plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@5 - [186] plexShowSprite::$9 = $ff ^ plex_sprite_msb - [187] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 + [187] plexShowSprite::$9 = $ff ^ plex_sprite_msb + [188] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 to:plexShowSprite::@2 plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3 - [188] plexShowSprite::$5 = plex_sprite_idx + 1 - [189] plexShowSprite::$6 = plexShowSprite::$5 & 7 - [190] plex_sprite_idx = plexShowSprite::$6 - [191] plex_show_idx = ++ plex_show_idx - [192] plex_sprite_msb = plex_sprite_msb << 1 - [193] if(plex_sprite_msb!=0) goto plexShowSprite::@return + [189] plexShowSprite::$5 = plex_sprite_idx + 1 + [190] plexShowSprite::$6 = plexShowSprite::$5 & 7 + [191] plex_sprite_idx = plexShowSprite::$6 + [192] plex_show_idx = ++ plex_show_idx + [193] plex_sprite_msb = plex_sprite_msb << 1 + [194] if(plex_sprite_msb!=0) goto plexShowSprite::@return to:plexShowSprite::@4 plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@2 - [194] plex_sprite_msb = 1 + [195] plex_sprite_msb = 1 to:plexShowSprite::@return plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4 - [195] return + [196] return to:@return plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5 - [196] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb + [197] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb to:plexShowSprite::@2 byte keyboard_key_pressed(byte keyboard_key_pressed::key) keyboard_key_pressed: scope:[keyboard_key_pressed] from exit::@1 loop::@10 - [197] phi() - [198] call keyboard_matrix_read - [199] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 + [198] phi() + [199] call keyboard_matrix_read + [200] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 to:keyboard_key_pressed::@1 keyboard_key_pressed::@1: scope:[keyboard_key_pressed] from keyboard_key_pressed - [200] keyboard_key_pressed::$2 = keyboard_matrix_read::return#2 - [201] keyboard_key_pressed::return#0 = keyboard_key_pressed::$2 & *(keyboard_matrix_col_bitmask+keyboard_key_pressed::colidx#0) + [201] keyboard_key_pressed::$2 = keyboard_matrix_read::return#2 + [202] keyboard_key_pressed::return#0 = keyboard_key_pressed::$2 & *(keyboard_matrix_col_bitmask+keyboard_key_pressed::colidx#0) to:keyboard_key_pressed::@return keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_pressed::@1 - [202] return + [203] return to:@return void mulf8u_prepare(byte mulf8u_prepare::a) mulf8u_prepare: scope:[mulf8u_prepare] from mulf8s::mulf8s_prepare1 - [203] *mulf8u_prepare::memA = mulf8u_prepare::a#0 + [204] *mulf8u_prepare::memA = 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 - [205] return + [206] return to:@return signed word mulf8s_prepared(signed byte mulf8s_prepared::b) mulf8s_prepared: scope:[mulf8s_prepared] from mulf8s::@1 - [206] mulf8u_prepared::b#0 = (byte)mulf8s_prepared::b#0 - [207] call mulf8u_prepared - [208] mulf8u_prepared::return#2 = mulf8u_prepared::return#0 + [207] mulf8u_prepared::b#0 = (byte)mulf8s_prepared::b#0 + [208] call mulf8u_prepared + [209] mulf8u_prepared::return#2 = mulf8u_prepared::return#0 to:mulf8s_prepared::@5 mulf8s_prepared::@5: scope:[mulf8s_prepared] from mulf8s_prepared - [209] mulf8s_prepared::m#0 = mulf8u_prepared::return#2 - [210] if(*mulf8s_prepared::memA>=0) goto mulf8s_prepared::@1 + [210] mulf8s_prepared::m#0 = mulf8u_prepared::return#2 + [211] if(*mulf8s_prepared::memA>=0) goto mulf8s_prepared::@1 to:mulf8s_prepared::@3 mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@5 - [211] mulf8s_prepared::$6 = > mulf8s_prepared::m#0 - [212] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (byte)mulf8s_prepared::b#0 - [213] mulf8s_prepared::m#1 = mulf8s_prepared::m#0 hi= mulf8s_prepared::$11 + [212] mulf8s_prepared::$6 = > mulf8s_prepared::m#0 + [213] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (byte)mulf8s_prepared::b#0 + [214] mulf8s_prepared::m#1 = mulf8s_prepared::m#0 hi= mulf8s_prepared::$11 to:mulf8s_prepared::@1 mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@5 - [214] mulf8s_prepared::m#5 = phi( mulf8s_prepared::@3/mulf8s_prepared::m#1, mulf8s_prepared::@5/mulf8s_prepared::m#0 ) - [215] if(mulf8s_prepared::b#0>=0) goto mulf8s_prepared::@2 + [215] mulf8s_prepared::m#5 = phi( mulf8s_prepared::@3/mulf8s_prepared::m#1, mulf8s_prepared::@5/mulf8s_prepared::m#0 ) + [216] if(mulf8s_prepared::b#0>=0) goto mulf8s_prepared::@2 to:mulf8s_prepared::@4 mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1 - [216] mulf8s_prepared::$9 = > mulf8s_prepared::m#5 - [217] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (byte)*mulf8s_prepared::memA - [218] mulf8s_prepared::m#2 = mulf8s_prepared::m#5 hi= mulf8s_prepared::$12 + [217] mulf8s_prepared::$9 = > mulf8s_prepared::m#5 + [218] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (byte)*mulf8s_prepared::memA + [219] mulf8s_prepared::m#2 = mulf8s_prepared::m#5 hi= mulf8s_prepared::$12 to:mulf8s_prepared::@2 mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4 - [219] mulf8s_prepared::m#4 = phi( mulf8s_prepared::@1/mulf8s_prepared::m#5, mulf8s_prepared::@4/mulf8s_prepared::m#2 ) + [220] mulf8s_prepared::m#4 = phi( mulf8s_prepared::@1/mulf8s_prepared::m#5, mulf8s_prepared::@4/mulf8s_prepared::m#2 ) to:mulf8s_prepared::@return mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2 - [220] return + [221] return to:@return byte keyboard_matrix_read(byte keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [221] *((byte*)CIA1) = *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) - [222] keyboard_matrix_read::return#0 = ~ *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B) + [222] *((byte*)CIA1) = *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) + [223] keyboard_matrix_read::return#0 = ~ *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read - [223] return + [224] return to:@return word mulf8u_prepared(byte mulf8u_prepared::b) mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared - [224] *mulf8u_prepared::memB = mulf8u_prepared::b#0 + [225] *mulf8u_prepared::memB = 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 } - [226] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL + [227] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL to:mulf8u_prepared::@return mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared - [227] return + [228] return to:@return diff --git a/src/test/ref/complex/prebob/vogel-sprites.log b/src/test/ref/complex/prebob/vogel-sprites.log index cd0c8c93f..e8142c7fb 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.log +++ b/src/test/ref/complex/prebob/vogel-sprites.log @@ -16,14 +16,12 @@ plexInit: scope:[plexInit] from init plexInit::plexSetScreen1: scope:[plexInit] from plexInit plexInit::plexSetScreen1_screen#1 = phi( plexInit/plexInit::plexSetScreen1_screen#0 ) plexInit::plexSetScreen1_$0 = plexInit::plexSetScreen1_screen#1 + $3f8 - PLEX_SCREEN_PTR#0 = plexInit::plexSetScreen1_$0 + PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 to:plexInit::@2 plexInit::@2: scope:[plexInit] from plexInit::plexSetScreen1 - PLEX_SCREEN_PTR#24 = phi( plexInit::plexSetScreen1/PLEX_SCREEN_PTR#0 ) plexInit::i#0 = 0 to:plexInit::@1 plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::@2 - PLEX_SCREEN_PTR#17 = phi( plexInit::@1/PLEX_SCREEN_PTR#17, plexInit::@2/PLEX_SCREEN_PTR#24 ) plexInit::i#2 = phi( plexInit::@1/plexInit::i#1, plexInit::@2/plexInit::i#0 ) PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2 plexInit::i#1 = plexInit::i#2 + rangenext(0,PLEX_COUNT-1) @@ -31,8 +29,6 @@ plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::@2 if(plexInit::$1) goto plexInit::@1 to:plexInit::@return plexInit::@return: scope:[plexInit] from plexInit::@1 - PLEX_SCREEN_PTR#9 = phi( plexInit::@1/PLEX_SCREEN_PTR#17 ) - PLEX_SCREEN_PTR#1 = PLEX_SCREEN_PTR#9 return to:@return @@ -105,7 +101,6 @@ plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@2 void plexShowSprite() plexShowSprite: scope:[plexShowSprite] from loop::@10 - PLEX_SCREEN_PTR#25 = phi( loop::@10/PLEX_SCREEN_PTR#28 ) plexShowSprite::$0 = plex_sprite_idx * 2 plexShowSprite::plex_sprite_idx2#0 = plexShowSprite::$0 plexShowSprite::ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] @@ -114,7 +109,6 @@ plexShowSprite: scope:[plexShowSprite] from loop::@10 to:plexShowSprite::plexFreeAdd1 plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite plexShowSprite::plex_sprite_idx2#2 = phi( plexShowSprite/plexShowSprite::plex_sprite_idx2#0 ) - PLEX_SCREEN_PTR#18 = phi( plexShowSprite/PLEX_SCREEN_PTR#25 ) plexShowSprite::plexFreeAdd1_ypos#1 = phi( plexShowSprite/plexShowSprite::plexFreeAdd1_ypos#0 ) plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#1 + $15 PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 @@ -124,8 +118,7 @@ plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite to:plexShowSprite::@5 plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 plexShowSprite::plex_sprite_idx2#1 = phi( plexShowSprite::plexFreeAdd1/plexShowSprite::plex_sprite_idx2#2 ) - PLEX_SCREEN_PTR#10 = phi( plexShowSprite::plexFreeAdd1/PLEX_SCREEN_PTR#18 ) - PLEX_SCREEN_PTR#10[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] + PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] plexShowSprite::$10 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$10] @@ -450,43 +443,32 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p void main() main: scope:[main] from __start::@1 - PLEX_SCREEN_PTR#19 = phi( __start::@1/PLEX_SCREEN_PTR#23 ) asm { sei } call init to:main::@1 main::@1: scope:[main] from main - PLEX_SCREEN_PTR#11 = phi( main/PLEX_SCREEN_PTR#5 ) - PLEX_SCREEN_PTR#2 = PLEX_SCREEN_PTR#11 call loop to:main::@2 main::@2: scope:[main] from main::@1 - PLEX_SCREEN_PTR#26 = phi( main::@1/PLEX_SCREEN_PTR#2 ) call exit to:main::@3 main::@3: scope:[main] from main::@2 - PLEX_SCREEN_PTR#20 = phi( main::@2/PLEX_SCREEN_PTR#26 ) asm { cli } to:main::@return main::@return: scope:[main] from main::@3 - PLEX_SCREEN_PTR#12 = phi( main::@3/PLEX_SCREEN_PTR#20 ) - PLEX_SCREEN_PTR#3 = PLEX_SCREEN_PTR#12 return to:@return void init() init: scope:[init] from main - PLEX_SCREEN_PTR#21 = phi( main/PLEX_SCREEN_PTR#19 ) *D011 = VIC_DEN|VIC_RSEL|3 plexInit::screen#0 = SCREEN call plexInit to:init::@5 init::@5: scope:[init] from init - PLEX_SCREEN_PTR#13 = phi( init/PLEX_SCREEN_PTR#1 ) - PLEX_SCREEN_PTR#4 = PLEX_SCREEN_PTR#13 init::i#0 = 0 to:init::@1 init::@1: scope:[init] from init::@1 init::@5 - PLEX_SCREEN_PTR#34 = phi( init::@1/PLEX_SCREEN_PTR#34, init::@5/PLEX_SCREEN_PTR#4 ) init::i#2 = phi( init::@1/init::i#1, init::@5/init::i#0 ) PLEX_PTR[init::i#2] = (byte)SPRITE/$40 init::$3 = init::i#2 * 5 @@ -501,12 +483,10 @@ init::@1: scope:[init] from init::@1 init::@5 if(init::$7) goto init::@1 to:init::@2 init::@2: scope:[init] from init::@1 - PLEX_SCREEN_PTR#32 = phi( init::@1/PLEX_SCREEN_PTR#34 ) *SPRITES_ENABLE = $ff init::i1#0 = 0 to:init::@3 init::@3: scope:[init] from init::@2 init::@3 - PLEX_SCREEN_PTR#30 = phi( init::@2/PLEX_SCREEN_PTR#32, init::@3/PLEX_SCREEN_PTR#30 ) init::i1#2 = phi( init::@2/init::i1#0, init::@3/init::i1#1 ) SPRITES_COLOR[init::i1#2] = GREEN init::i1#1 = init::i1#2 + rangenext(0,7) @@ -514,11 +494,9 @@ init::@3: scope:[init] from init::@2 init::@3 if(init::$8) goto init::@3 to:init::@4 init::@4: scope:[init] from init::@3 - PLEX_SCREEN_PTR#29 = phi( init::@3/PLEX_SCREEN_PTR#30 ) call mulf_init to:init::@6 init::@6: scope:[init] from init::@4 - PLEX_SCREEN_PTR#27 = phi( init::@4/PLEX_SCREEN_PTR#29 ) memset::str#0 = (void*)SCREEN memset::c#0 = ' ' memset::num#0 = $3e8 @@ -526,11 +504,8 @@ init::@6: scope:[init] from init::@4 memset::return#2 = memset::return#1 to:init::@7 init::@7: scope:[init] from init::@6 - PLEX_SCREEN_PTR#22 = phi( init::@6/PLEX_SCREEN_PTR#27 ) to:init::@return init::@return: scope:[init] from init::@7 - PLEX_SCREEN_PTR#14 = phi( init::@7/PLEX_SCREEN_PTR#22 ) - PLEX_SCREEN_PTR#5 = PLEX_SCREEN_PTR#14 return to:@return @@ -554,22 +529,18 @@ exit::@return: scope:[exit] from exit::@2 void loop() loop: scope:[loop] from main::@1 - PLEX_SCREEN_PTR#49 = phi( main::@1/PLEX_SCREEN_PTR#2 ) loop::angle#0 = 0 to:loop::@1 loop::@1: scope:[loop] from loop loop::@17 - PLEX_SCREEN_PTR#48 = phi( loop/PLEX_SCREEN_PTR#49, loop::@17/PLEX_SCREEN_PTR#50 ) loop::angle#6 = phi( loop/loop::angle#0, loop::@17/loop::angle#8 ) if(true) goto loop::@2 to:loop::@return loop::@2: scope:[loop] from loop::@1 loop::@2 - PLEX_SCREEN_PTR#47 = phi( loop::@1/PLEX_SCREEN_PTR#48, loop::@2/PLEX_SCREEN_PTR#47 ) loop::angle#4 = phi( loop::@1/loop::angle#6, loop::@2/loop::angle#4 ) loop::$0 = *RASTER < $d8 if(loop::$0) goto loop::@2 to:loop::@3 loop::@3: scope:[loop] from loop::@2 - PLEX_SCREEN_PTR#46 = phi( loop::@2/PLEX_SCREEN_PTR#47 ) loop::angle#2 = phi( loop::@2/loop::angle#4 ) *BORDER_COLOR = $f loop::r#0 = $1e @@ -577,7 +548,6 @@ loop::@3: scope:[loop] from loop::@2 loop::i#0 = 0 to:loop::@4 loop::@4: scope:[loop] from loop::@14 loop::@3 - PLEX_SCREEN_PTR#45 = phi( loop::@14/PLEX_SCREEN_PTR#43, loop::@3/PLEX_SCREEN_PTR#46 ) loop::angle#10 = phi( loop::@14/loop::angle#7, loop::@3/loop::angle#2 ) loop::i#4 = phi( loop::@14/loop::i#1, loop::@3/loop::i#0 ) loop::a#2 = phi( loop::@14/loop::a#1, loop::@3/loop::a#0 ) @@ -589,7 +559,6 @@ loop::@4: scope:[loop] from loop::@14 loop::@3 mulf8s::return#2 = mulf8s::return#1 to:loop::@13 loop::@13: scope:[loop] from loop::@4 - PLEX_SCREEN_PTR#44 = phi( loop::@4/PLEX_SCREEN_PTR#45 ) loop::angle#9 = phi( loop::@4/loop::angle#10 ) loop::a#3 = phi( loop::@4/loop::a#2 ) loop::r#3 = phi( loop::@4/loop::r#2 ) @@ -608,7 +577,6 @@ loop::@13: scope:[loop] from loop::@4 mulf8s::return#3 = mulf8s::return#1 to:loop::@14 loop::@14: scope:[loop] from loop::@13 - PLEX_SCREEN_PTR#43 = phi( loop::@13/PLEX_SCREEN_PTR#44 ) loop::angle#7 = phi( loop::@13/loop::angle#9 ) loop::r#4 = phi( loop::@13/loop::r#3 ) loop::a#4 = phi( loop::@13/loop::a#3 ) @@ -627,51 +595,43 @@ loop::@14: scope:[loop] from loop::@13 if(loop::$9) goto loop::@4 to:loop::@5 loop::@5: scope:[loop] from loop::@14 - PLEX_SCREEN_PTR#42 = phi( loop::@14/PLEX_SCREEN_PTR#43 ) loop::angle#5 = phi( loop::@14/loop::angle#7 ) *BORDER_COLOR = 3 call plexSort to:loop::@15 loop::@15: scope:[loop] from loop::@5 - PLEX_SCREEN_PTR#41 = phi( loop::@5/PLEX_SCREEN_PTR#42 ) loop::angle#3 = phi( loop::@5/loop::angle#5 ) loop::angle#1 = loop::angle#3 + 3 *BORDER_COLOR = BLACK to:loop::@6 loop::@6: scope:[loop] from loop::@15 loop::@6 loop::angle#20 = phi( loop::@15/loop::angle#1, loop::@6/loop::angle#20 ) - PLEX_SCREEN_PTR#40 = phi( loop::@15/PLEX_SCREEN_PTR#41, loop::@6/PLEX_SCREEN_PTR#40 ) loop::$11 = *D011 & VIC_RST8 loop::$12 = loop::$11 != 0 if(loop::$12) goto loop::@6 to:loop::@7 loop::@7: scope:[loop] from loop::@6 loop::angle#19 = phi( loop::@6/loop::angle#20 ) - PLEX_SCREEN_PTR#39 = phi( loop::@6/PLEX_SCREEN_PTR#40 ) loop::i1#0 = 0 to:loop::@8 loop::@8: scope:[loop] from loop::@16 loop::@7 loop::angle#18 = phi( loop::@16/loop::angle#12, loop::@7/loop::angle#19 ) - PLEX_SCREEN_PTR#37 = phi( loop::@16/PLEX_SCREEN_PTR#38, loop::@7/PLEX_SCREEN_PTR#39 ) loop::i1#8 = phi( loop::@16/loop::i1#1, loop::@7/loop::i1#0 ) *BORDER_COLOR = BLACK to:loop::plexFreeNextYpos1 loop::plexFreeNextYpos1: scope:[loop] from loop::@8 loop::angle#17 = phi( loop::@8/loop::angle#18 ) - PLEX_SCREEN_PTR#36 = phi( loop::@8/PLEX_SCREEN_PTR#37 ) loop::i1#7 = phi( loop::@8/loop::i1#8 ) loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] to:loop::plexFreeNextYpos1_@return loop::plexFreeNextYpos1_@return: scope:[loop] from loop::plexFreeNextYpos1 loop::angle#16 = phi( loop::plexFreeNextYpos1/loop::angle#17 ) - PLEX_SCREEN_PTR#35 = phi( loop::plexFreeNextYpos1/PLEX_SCREEN_PTR#36 ) loop::i1#6 = phi( loop::plexFreeNextYpos1/loop::i1#7 ) loop::plexFreeNextYpos1_return#2 = phi( loop::plexFreeNextYpos1/loop::plexFreeNextYpos1_return#0 ) loop::plexFreeNextYpos1_return#1 = loop::plexFreeNextYpos1_return#2 to:loop::@12 loop::@12: scope:[loop] from loop::plexFreeNextYpos1_@return loop::angle#15 = phi( loop::plexFreeNextYpos1_@return/loop::angle#16 ) - PLEX_SCREEN_PTR#33 = phi( loop::plexFreeNextYpos1_@return/PLEX_SCREEN_PTR#35 ) loop::i1#5 = phi( loop::plexFreeNextYpos1_@return/loop::i1#6 ) loop::plexFreeNextYpos1_return#3 = phi( loop::plexFreeNextYpos1_@return/loop::plexFreeNextYpos1_return#1 ) loop::$13 = loop::plexFreeNextYpos1_return#3 @@ -679,7 +639,6 @@ loop::@12: scope:[loop] from loop::plexFreeNextYpos1_@return to:loop::@9 loop::@9: scope:[loop] from loop::@12 loop::@9 loop::angle#14 = phi( loop::@12/loop::angle#15, loop::@9/loop::angle#14 ) - PLEX_SCREEN_PTR#31 = phi( loop::@12/PLEX_SCREEN_PTR#33, loop::@9/PLEX_SCREEN_PTR#31 ) loop::i1#4 = phi( loop::@12/loop::i1#5, loop::@9/loop::i1#4 ) loop::rasterY#1 = phi( loop::@12/loop::rasterY#0, loop::@9/loop::rasterY#1 ) loop::$14 = *RASTER < loop::rasterY#1 @@ -687,13 +646,11 @@ loop::@9: scope:[loop] from loop::@12 loop::@9 to:loop::@10 loop::@10: scope:[loop] from loop::@9 loop::angle#13 = phi( loop::@9/loop::angle#14 ) - PLEX_SCREEN_PTR#28 = phi( loop::@9/PLEX_SCREEN_PTR#31 ) loop::i1#3 = phi( loop::@9/loop::i1#4 ) *BORDER_COLOR = ++ *BORDER_COLOR call plexShowSprite to:loop::@16 loop::@16: scope:[loop] from loop::@10 - PLEX_SCREEN_PTR#38 = phi( loop::@10/PLEX_SCREEN_PTR#28 ) loop::angle#12 = phi( loop::@10/loop::angle#13 ) loop::i1#2 = phi( loop::@10/loop::i1#3 ) loop::i1#1 = loop::i1#2 + rangenext(0,PLEX_COUNT-1) @@ -701,7 +658,6 @@ loop::@16: scope:[loop] from loop::@10 if(loop::$17) goto loop::@8 to:loop::@11 loop::@11: scope:[loop] from loop::@16 - PLEX_SCREEN_PTR#51 = phi( loop::@16/PLEX_SCREEN_PTR#38 ) loop::angle#11 = phi( loop::@16/loop::angle#12 ) *BORDER_COLOR = BLACK keyboard_key_pressed::key#1 = KEY_SPACE @@ -709,7 +665,6 @@ loop::@11: scope:[loop] from loop::@16 keyboard_key_pressed::return#3 = keyboard_key_pressed::return#1 to:loop::@17 loop::@17: scope:[loop] from loop::@11 - PLEX_SCREEN_PTR#50 = phi( loop::@11/PLEX_SCREEN_PTR#51 ) loop::angle#8 = phi( loop::@11/loop::angle#11 ) keyboard_key_pressed::return#6 = phi( loop::@11/keyboard_key_pressed::return#3 ) loop::$18 = keyboard_key_pressed::return#6 @@ -725,23 +680,18 @@ void __start() __start: scope:[__start] from to:__start::__init1 __start::__init1: scope:[__start] from __start - PLEX_SCREEN_PTR#6 = (byte*)$400+$3f8 + PLEX_SCREEN_PTR = (byte*)$400+$3f8 plex_show_idx = 0 plex_sprite_idx = 0 plex_sprite_msb = 1 plex_free_next = 0 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - PLEX_SCREEN_PTR#23 = phi( __start::__init1/PLEX_SCREEN_PTR#6 ) call main to:__start::@2 __start::@2: scope:[__start] from __start::@1 - PLEX_SCREEN_PTR#15 = phi( __start::@1/PLEX_SCREEN_PTR#3 ) - PLEX_SCREEN_PTR#7 = PLEX_SCREEN_PTR#15 to:__start::@return __start::@return: scope:[__start] from __start::@2 - PLEX_SCREEN_PTR#16 = phi( __start::@2/PLEX_SCREEN_PTR#7 ) - PLEX_SCREEN_PTR#8 = PLEX_SCREEN_PTR#16 return to:@return @@ -759,59 +709,7 @@ const byte OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 const nomodify byte PLEX_COUNT = $20 const byte* PLEX_FREE_YPOS[8] = { fill( 8, 0) } const byte* PLEX_PTR[PLEX_COUNT] = { 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#51 -byte* PLEX_SCREEN_PTR#6 -byte* PLEX_SCREEN_PTR#7 -byte* PLEX_SCREEN_PTR#8 -byte* PLEX_SCREEN_PTR#9 +volatile byte* PLEX_SCREEN_PTR loadstore const byte* PLEX_SORTED_IDX[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const word* PLEX_XPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const byte* PLEX_YPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -1515,20 +1413,19 @@ Inferred type updated to signed word in loop::$2 = loop::$1 * 2 Inferred type updated to signed word in loop::$3 = loop::$2 + (signed word)$7d*$100 Inferred type updated to signed word in loop::$6 = loop::$5 * 2 Inferred type updated to signed word in loop::$7 = loop::$6 + (signed word)$7d*$100 -Inversing boolean not [21] plexSort::$3 = plexSort::nxt_y#0 >= PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] from [20] plexSort::$2 = plexSort::nxt_y#0 < PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] -Inversing boolean not [82] plexShowSprite::$8 = plex_sprite_msb != 0 from [81] plexShowSprite::$7 = plex_sprite_msb == 0 -Inversing boolean not [98] mulf_init::$3 = mulf_init::$1 != 0 from [97] mulf_init::$2 = mulf_init::$1 == 0 -Inversing boolean not [126] mulf_init::$10 = mulf_init::x_255#1 != 0 from [125] mulf_init::$9 = mulf_init::x_255#1 == 0 -Inversing boolean not [155] mulf8s_prepared::$2 = *mulf8s_prepared::memA >= 0 from [154] mulf8s_prepared::$1 = *mulf8s_prepared::memA < 0 -Inversing boolean not [159] mulf8s_prepared::$4 = mulf8s_prepared::b#2 >= 0 from [158] mulf8s_prepared::$3 = mulf8s_prepared::b#2 < 0 -Inversing boolean not [196] memset::$1 = memset::num#1 <= 0 from [195] memset::$0 = memset::num#1 > 0 -Inversing boolean not [378] loop::$19 = 0 == loop::$18 from [377] loop::$21 = 0 != loop::$18 +Inversing boolean not [18] plexSort::$3 = plexSort::nxt_y#0 >= PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] from [17] plexSort::$2 = plexSort::nxt_y#0 < PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] +Inversing boolean not [78] plexShowSprite::$8 = plex_sprite_msb != 0 from [77] plexShowSprite::$7 = plex_sprite_msb == 0 +Inversing boolean not [94] mulf_init::$3 = mulf_init::$1 != 0 from [93] mulf_init::$2 = mulf_init::$1 == 0 +Inversing boolean not [122] mulf_init::$10 = mulf_init::x_255#1 != 0 from [121] mulf_init::$9 = mulf_init::x_255#1 == 0 +Inversing boolean not [151] mulf8s_prepared::$2 = *mulf8s_prepared::memA >= 0 from [150] mulf8s_prepared::$1 = *mulf8s_prepared::memA < 0 +Inversing boolean not [155] mulf8s_prepared::$4 = mulf8s_prepared::b#2 >= 0 from [154] mulf8s_prepared::$3 = mulf8s_prepared::b#2 < 0 +Inversing boolean not [192] memset::$1 = memset::num#1 <= 0 from [191] memset::$0 = memset::num#1 > 0 +Inversing boolean not [357] loop::$19 = 0 == loop::$18 from [356] loop::$21 = 0 != loop::$18 Successful SSA optimization Pass2UnaryNotSimplification +Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Alias plexInit::plexSetScreen1_screen#0 = plexInit::screen#1 plexInit::plexSetScreen1_screen#1 -Alias PLEX_SCREEN_PTR#0 = plexInit::plexSetScreen1_$0 PLEX_SCREEN_PTR#24 -Alias PLEX_SCREEN_PTR#1 = PLEX_SCREEN_PTR#9 PLEX_SCREEN_PTR#17 Alias plexSort::m#2 = plexSort::m#4 plexSort::s#0 Alias plexSort::nxt_y#0 = plexSort::nxt_y#2 Alias plexSort::nxt_idx#0 = plexSort::nxt_idx#3 @@ -1537,7 +1434,6 @@ Alias plexSort::nxt_idx#1 = plexSort::nxt_idx#2 Alias plexSort::m#5 = plexSort::m#6 Alias plexShowSprite::plex_sprite_idx2#0 = plexShowSprite::$0 plexShowSprite::plex_sprite_idx2#2 plexShowSprite::plex_sprite_idx2#1 Alias plexShowSprite::plexFreeAdd1_ypos#0 = plexShowSprite::ypos#0 plexShowSprite::plexFreeAdd1_ypos#1 -Alias PLEX_SCREEN_PTR#10 = PLEX_SCREEN_PTR#18 PLEX_SCREEN_PTR#25 Alias mulf_init::c#2 = mulf_init::c#3 Alias mulf_init::sqr#4 = mulf_init::sqr#5 mulf_init::sqr#6 Alias mulf_init::sqr1_lo#2 = mulf_init::sqr1_lo#4 mulf_init::sqr1_lo#5 @@ -1577,35 +1473,25 @@ Alias keyboard_key_pressed::colidx#0 = keyboard_key_pressed::$0 keyboard_key_pre Alias keyboard_key_pressed::rowidx#0 = keyboard_key_pressed::$1 Alias keyboard_matrix_read::return#2 = keyboard_matrix_read::return#4 Alias keyboard_key_pressed::return#0 = keyboard_key_pressed::$3 keyboard_key_pressed::return#4 keyboard_key_pressed::return#1 -Alias PLEX_SCREEN_PTR#11 = PLEX_SCREEN_PTR#2 PLEX_SCREEN_PTR#26 PLEX_SCREEN_PTR#20 PLEX_SCREEN_PTR#12 PLEX_SCREEN_PTR#3 -Alias PLEX_SCREEN_PTR#13 = PLEX_SCREEN_PTR#4 -Alias PLEX_SCREEN_PTR#32 = PLEX_SCREEN_PTR#34 -Alias PLEX_SCREEN_PTR#14 = PLEX_SCREEN_PTR#29 PLEX_SCREEN_PTR#30 PLEX_SCREEN_PTR#27 PLEX_SCREEN_PTR#22 PLEX_SCREEN_PTR#5 Alias keyboard_key_pressed::return#2 = keyboard_key_pressed::return#5 Alias loop::angle#2 = loop::angle#4 loop::a#0 -Alias PLEX_SCREEN_PTR#46 = PLEX_SCREEN_PTR#47 Alias mulf8s::return#2 = mulf8s::return#5 Alias loop::i#2 = loop::i#4 loop::i#3 Alias loop::r#2 = loop::r#3 loop::r#4 Alias loop::a#2 = loop::a#3 loop::a#4 Alias loop::angle#10 = loop::angle#9 loop::angle#7 loop::angle#5 loop::angle#3 -Alias PLEX_SCREEN_PTR#41 = PLEX_SCREEN_PTR#44 PLEX_SCREEN_PTR#45 PLEX_SCREEN_PTR#43 PLEX_SCREEN_PTR#42 Alias loop::x#0 = loop::$3 Alias mulf8s::return#3 = mulf8s::return#6 Alias loop::y#0 = loop::$7 -Alias PLEX_SCREEN_PTR#39 = PLEX_SCREEN_PTR#40 Alias loop::angle#19 = loop::angle#20 Alias loop::i1#5 = loop::i1#7 loop::i1#8 loop::i1#6 -Alias PLEX_SCREEN_PTR#33 = PLEX_SCREEN_PTR#36 PLEX_SCREEN_PTR#37 PLEX_SCREEN_PTR#35 Alias loop::angle#15 = loop::angle#17 loop::angle#18 loop::angle#16 Alias loop::plexFreeNextYpos1_return#0 = loop::plexFreeNextYpos1_return#2 loop::plexFreeNextYpos1_return#1 loop::plexFreeNextYpos1_return#3 loop::$13 loop::rasterY#0 Alias loop::i1#2 = loop::i1#3 loop::i1#4 -Alias PLEX_SCREEN_PTR#28 = PLEX_SCREEN_PTR#31 PLEX_SCREEN_PTR#38 PLEX_SCREEN_PTR#51 PLEX_SCREEN_PTR#50 Alias loop::angle#11 = loop::angle#13 loop::angle#14 loop::angle#12 loop::angle#8 Alias keyboard_key_pressed::return#3 = keyboard_key_pressed::return#6 -Alias PLEX_SCREEN_PTR#23 = PLEX_SCREEN_PTR#6 -Alias PLEX_SCREEN_PTR#15 = PLEX_SCREEN_PTR#7 PLEX_SCREEN_PTR#16 PLEX_SCREEN_PTR#8 Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Alias mulf_init::sqr1_lo#2 = mulf_init::sqr1_lo#3 @@ -1616,14 +1502,13 @@ Alias mulf_init::x_255#1 = mulf_init::x_255#4 Alias mulf_init::sqr2_hi#1 = mulf_init::sqr2_hi#4 Alias mulf8s_prepared::b#1 = mulf8s_prepared::b#2 Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Identical Phi Values plexInit::plexSetScreen1_screen#0 plexInit::screen#0 -Identical Phi Values PLEX_SCREEN_PTR#1 PLEX_SCREEN_PTR#0 Identical Phi Values plexSort::nxt_y#1 plexSort::nxt_y#0 Identical Phi Values plexSort::nxt_idx#1 plexSort::nxt_idx#0 Identical Phi Values plexSort::m#5 plexSort::m#2 -Identical Phi Values PLEX_SCREEN_PTR#10 PLEX_SCREEN_PTR#28 Identical Phi Values mulf8u_prepare::a#1 mulf8u_prepare::a#0 Identical Phi Values mulf8u_prepared::b#1 mulf8u_prepared::b#0 Identical Phi Values mulf8s_prepared::b#1 mulf8s_prepared::b#0 @@ -1634,38 +1519,23 @@ Identical Phi Values memset::end#1 memset::end#0 Identical Phi Values memset::str#4 memset::str#2 Identical Phi Values memset::c#1 memset::c#3 Identical Phi Values keyboard_matrix_read::rowid#1 keyboard_matrix_read::rowid#0 -Identical Phi Values PLEX_SCREEN_PTR#19 PLEX_SCREEN_PTR#23 -Identical Phi Values PLEX_SCREEN_PTR#11 PLEX_SCREEN_PTR#14 -Identical Phi Values PLEX_SCREEN_PTR#21 PLEX_SCREEN_PTR#19 -Identical Phi Values PLEX_SCREEN_PTR#13 PLEX_SCREEN_PTR#1 -Identical Phi Values PLEX_SCREEN_PTR#32 PLEX_SCREEN_PTR#13 -Identical Phi Values PLEX_SCREEN_PTR#14 PLEX_SCREEN_PTR#32 -Identical Phi Values PLEX_SCREEN_PTR#49 PLEX_SCREEN_PTR#11 Identical Phi Values loop::angle#2 loop::angle#6 -Identical Phi Values PLEX_SCREEN_PTR#46 PLEX_SCREEN_PTR#48 Identical Phi Values loop::angle#10 loop::angle#2 -Identical Phi Values PLEX_SCREEN_PTR#41 PLEX_SCREEN_PTR#46 -Identical Phi Values PLEX_SCREEN_PTR#39 PLEX_SCREEN_PTR#41 Identical Phi Values loop::angle#19 loop::angle#1 Identical Phi Values loop::rasterY#1 loop::plexFreeNextYpos1_return#0 Identical Phi Values loop::i1#2 loop::i1#5 -Identical Phi Values PLEX_SCREEN_PTR#28 PLEX_SCREEN_PTR#33 Identical Phi Values loop::angle#11 loop::angle#15 -Identical Phi Values PLEX_SCREEN_PTR#15 PLEX_SCREEN_PTR#11 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values plexSort::m#3 plexSort::m#2 Identical Phi Values memset::return#0 memset::str#0 -Identical Phi Values PLEX_SCREEN_PTR#33 PLEX_SCREEN_PTR#48 Identical Phi Values loop::angle#15 loop::angle#1 Successful SSA optimization Pass2IdenticalPhiElimination -Identical Phi Values PLEX_SCREEN_PTR#48 PLEX_SCREEN_PTR#0 -Successful SSA optimization Pass2IdenticalPhiElimination -Identified duplicate assignment right side [69] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD +Identified duplicate assignment right side [65] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD Successful SSA optimization Pass2DuplicateRValueIdentification -Simple Condition plexInit::$1 [7] if(plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 -Simple Condition plexSort::$3 [15] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 -Simple Condition plexSort::$8 [19] if(plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1 -Simple Condition plexSort::plexFreePrepare1_$0 [38] if(plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 +Simple Condition plexInit::$1 [8] if(plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 +Simple Condition plexSort::$3 [16] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 +Simple Condition plexSort::$8 [20] if(plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1 +Simple Condition plexSort::plexFreePrepare1_$0 [39] if(plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 Simple Condition plexShowSprite::$4 [58] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 Simple Condition plexShowSprite::$8 [68] if(plex_sprite_msb!=0) goto plexShowSprite::@return Simple Condition mulf_init::$0 [78] if(mulf_init::sqr1_lo#2!=mulf_sqr1_lo+$200) goto mulf_init::@2 @@ -1676,19 +1546,19 @@ Simple Condition mulf8s_prepared::$2 [127] if(*mulf8s_prepared::memA>=0) goto mu Simple Condition mulf8s_prepared::$4 [130] if(mulf8s_prepared::b#0>=0) goto mulf8s_prepared::@2 Simple Condition memset::$1 [152] if(memset::num#0<=0) goto memset::@1 Simple Condition memset::$3 [159] if(memset::dst#2!=memset::end#0) goto memset::@4 -Simple Condition init::$7 [201] if(init::i#1!=rangelast(0,PLEX_COUNT-1)) goto init::@1 -Simple Condition init::$8 [208] if(init::i1#1!=rangelast(0,7)) goto init::@3 -Simple Condition exit::$1 [221] if(0!=exit::$0) goto exit::@1 -Simple Condition loop::$0 [229] if(*RASTER<$d8) goto loop::@2 -Simple Condition loop::$9 [258] if(loop::i#1!=rangelast(0,NUM_BOBS-1)) goto loop::@4 -Simple Condition loop::$12 [266] if(loop::$11!=0) goto loop::@6 -Simple Condition loop::$14 [273] if(*RASTER> 3 +Constant right-side identified [118] keyboard_key_pressed::colidx#0 = KEY_SPACE & 7 +Constant right-side identified [119] keyboard_key_pressed::rowidx#0 = KEY_SPACE >> 3 Successful SSA optimization Pass2ConstantRValueConsolidation Constant keyboard_key_pressed::colidx#0 = KEY_SPACE&7 Constant keyboard_key_pressed::rowidx#0 = KEY_SPACE>>3 @@ -1919,7 +1790,6 @@ Adding NOP phi() at start of loop::@12 Adding NOP phi() at start of exit Adding NOP phi() at start of exit::@1 Adding NOP phi() at start of plexInit -Adding NOP phi() at start of plexInit::plexSetScreen1 Adding NOP phi() at start of plexInit::@2 Adding NOP phi() at start of mulf_init Adding NOP phi() at start of mulf_init::@3 @@ -1932,52 +1802,52 @@ Adding NOP phi() at start of plexSort Adding NOP phi() at start of plexSort::plexFreePrepare1 Adding NOP phi() at start of keyboard_key_pressed CALL GRAPH -Calls in [__start] to main:6 -Calls in [main] to init:10 loop:12 exit:14 -Calls in [init] to plexInit:18 mulf_init:38 memset:40 -Calls in [loop] to mulf8s:56 mulf8s:68 plexSort:80 plexShowSprite:93 keyboard_key_pressed:97 -Calls in [exit] to keyboard_key_pressed:109 -Calls in [mulf8s] to mulf8u_prepare:178 mulf8s_prepared:181 -Calls in [keyboard_key_pressed] to keyboard_matrix_read:239 -Calls in [mulf8s_prepared] to mulf8u_prepared:248 +Calls in [__start] to main:7 +Calls in [main] to init:11 loop:13 exit:15 +Calls in [init] to plexInit:19 mulf_init:39 memset:41 +Calls in [loop] to mulf8s:57 mulf8s:69 plexSort:81 plexShowSprite:94 keyboard_key_pressed:98 +Calls in [exit] to keyboard_key_pressed:110 +Calls in [mulf8s] to mulf8u_prepare:179 mulf8s_prepared:182 +Calls in [keyboard_key_pressed] to keyboard_matrix_read:240 +Calls in [mulf8s_prepared] to mulf8u_prepared:249 Created 28 initial phi equivalence classes -Coalesced [43] init::i1#3 = init::i1#1 -Coalesced [44] init::i#3 = init::i#1 -Not coalescing [49] loop::a#6 = loop::angle#6 -Coalesced [54] mulf8s::mulf8s_prepare1_a#3 = mulf8s::a#0 -Coalesced [55] mulf8s::b#7 = mulf8s::b#0 -Coalesced [66] mulf8s::mulf8s_prepare1_a#2 = mulf8s::a#1 -Coalesced [67] mulf8s::b#6 = mulf8s::b#1 -Coalesced [101] loop::angle#21 = loop::angle#1 -Coalesced [103] loop::i1#9 = loop::i1#1 -Coalesced [104] loop::r#5 = loop::r#1 -Coalesced [105] loop::a#5 = loop::a#1 -Coalesced [106] loop::i#5 = loop::i#1 -Coalesced [122] plexInit::i#3 = plexInit::i#1 -Coalesced [140] mulf_init::sqr2_lo#6 = mulf_init::sqr2_lo#1 -Coalesced [141] mulf_init::x_255#6 = mulf_init::x_255#1 -Coalesced [142] mulf_init::sqr2_hi#6 = mulf_init::sqr2_hi#1 -Coalesced [143] mulf_init::dir#5 = mulf_init::dir#4 -Coalesced (already) [144] mulf_init::dir#6 = mulf_init::dir#2 -Coalesced [150] mulf_init::sqr#9 = mulf_init::sqr#2 -Coalesced [151] mulf_init::x_2#8 = mulf_init::x_2#1 -Coalesced [160] mulf_init::sqr1_lo#6 = mulf_init::sqr1_lo#1 -Coalesced [161] mulf_init::c#6 = mulf_init::c#1 -Coalesced [162] mulf_init::sqr#7 = mulf_init::sqr#1 -Coalesced [163] mulf_init::sqr1_hi#6 = mulf_init::sqr1_hi#1 -Coalesced [164] mulf_init::x_2#6 = mulf_init::x_2#2 -Coalesced [165] mulf_init::sqr#8 = mulf_init::sqr#4 -Coalesced (already) [166] mulf_init::x_2#7 = mulf_init::x_2#3 -Coalesced [175] memset::dst#4 = memset::dst#1 -Not coalescing [189] plexSort::s#6 = plexSort::m#2 -Coalesced [209] plexSort::plexFreePrepare1_s#3 = plexSort::plexFreePrepare1_s#1 -Coalesced [210] plexSort::m#7 = plexSort::m#1 -Coalesced [211] plexSort::s#5 = plexSort::s#1 -Coalesced [255] mulf8s_prepared::m#7 = mulf8s_prepared::m#1 -Coalesced [261] mulf8s_prepared::m#10 = mulf8s_prepared::m#2 -Coalesced [264] mulf8s_prepared::m#9 = mulf8s_prepared::m#5 -Coalesced [265] mulf8s_prepared::m#8 = mulf8s_prepared::m#0 +Coalesced [44] init::i1#3 = init::i1#1 +Coalesced [45] init::i#3 = init::i#1 +Not coalescing [50] loop::a#6 = loop::angle#6 +Coalesced [55] mulf8s::mulf8s_prepare1_a#3 = mulf8s::a#0 +Coalesced [56] mulf8s::b#7 = mulf8s::b#0 +Coalesced [67] mulf8s::mulf8s_prepare1_a#2 = mulf8s::a#1 +Coalesced [68] mulf8s::b#6 = mulf8s::b#1 +Coalesced [102] loop::angle#21 = loop::angle#1 +Coalesced [104] loop::i1#9 = loop::i1#1 +Coalesced [105] loop::r#5 = loop::r#1 +Coalesced [106] loop::a#5 = loop::a#1 +Coalesced [107] loop::i#5 = loop::i#1 +Coalesced [123] plexInit::i#3 = plexInit::i#1 +Coalesced [141] mulf_init::sqr2_lo#6 = mulf_init::sqr2_lo#1 +Coalesced [142] mulf_init::x_255#6 = mulf_init::x_255#1 +Coalesced [143] mulf_init::sqr2_hi#6 = mulf_init::sqr2_hi#1 +Coalesced [144] mulf_init::dir#5 = mulf_init::dir#4 +Coalesced (already) [145] mulf_init::dir#6 = mulf_init::dir#2 +Coalesced [151] mulf_init::sqr#9 = mulf_init::sqr#2 +Coalesced [152] mulf_init::x_2#8 = mulf_init::x_2#1 +Coalesced [161] mulf_init::sqr1_lo#6 = mulf_init::sqr1_lo#1 +Coalesced [162] mulf_init::c#6 = mulf_init::c#1 +Coalesced [163] mulf_init::sqr#7 = mulf_init::sqr#1 +Coalesced [164] mulf_init::sqr1_hi#6 = mulf_init::sqr1_hi#1 +Coalesced [165] mulf_init::x_2#6 = mulf_init::x_2#2 +Coalesced [166] mulf_init::sqr#8 = mulf_init::sqr#4 +Coalesced (already) [167] mulf_init::x_2#7 = mulf_init::x_2#3 +Coalesced [176] memset::dst#4 = memset::dst#1 +Not coalescing [190] plexSort::s#6 = plexSort::m#2 +Coalesced [210] plexSort::plexFreePrepare1_s#3 = plexSort::plexFreePrepare1_s#1 +Coalesced [211] plexSort::m#7 = plexSort::m#1 +Coalesced [212] plexSort::s#5 = plexSort::s#1 +Coalesced [256] mulf8s_prepared::m#7 = mulf8s_prepared::m#1 +Coalesced [262] mulf8s_prepared::m#10 = mulf8s_prepared::m#2 +Coalesced [265] mulf8s_prepared::m#9 = mulf8s_prepared::m#5 +Coalesced [266] mulf8s_prepared::m#8 = mulf8s_prepared::m#0 Coalesced down to 24 phi equivalence classes Culled Empty Block label __start::@2 Culled Empty Block label init::@5 @@ -2033,7 +1903,6 @@ Adding NOP phi() at start of loop Adding NOP phi() at start of exit Adding NOP phi() at start of exit::@1 Adding NOP phi() at start of plexInit -Adding NOP phi() at start of plexInit::plexSetScreen1 Adding NOP phi() at start of mulf_init Adding NOP phi() at start of mulf_init::@9 Adding NOP phi() at start of memset @@ -2048,471 +1917,472 @@ __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start - [1] plex_show_idx = 0 - [2] plex_sprite_idx = 0 - [3] plex_sprite_msb = 1 - [4] plex_free_next = 0 + [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 + [2] plex_show_idx = 0 + [3] plex_sprite_idx = 0 + [4] plex_sprite_msb = 1 + [5] plex_free_next = 0 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - [5] phi() - [6] call main + [6] phi() + [7] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [7] return + [8] return to:@return void main() main: scope:[main] from __start::@1 asm { sei } - [9] call init + [10] call init to:main::@1 main::@1: scope:[main] from main - [10] phi() - [11] call loop + [11] phi() + [12] call loop to:main::@2 main::@2: scope:[main] from main::@1 - [12] phi() - [13] call exit + [13] phi() + [14] call exit to:main::@3 main::@3: scope:[main] from main::@2 asm { cli } to:main::@return main::@return: scope:[main] from main::@3 - [15] return + [16] return to:@return void init() init: scope:[init] from main - [16] *D011 = VIC_DEN|VIC_RSEL|3 - [17] call plexInit + [17] *D011 = VIC_DEN|VIC_RSEL|3 + [18] call plexInit to:init::@1 init::@1: scope:[init] from init init::@1 - [18] init::i#2 = phi( init::@1/init::i#1, init/0 ) - [19] PLEX_PTR[init::i#2] = (byte)SPRITE/$40 - [20] init::$10 = init::i#2 << 2 - [21] init::$3 = init::$10 + init::i#2 - [22] init::$4 = $18 + init::$3 - [23] init::$9 = init::i#2 << 1 - [24] PLEX_XPOS[init::$9] = init::$4 - [25] init::$5 = init::i#2 << 3 - [26] init::$6 = $32 + init::$5 - [27] PLEX_YPOS[init::i#2] = init::$6 - [28] init::i#1 = ++ init::i#2 - [29] if(init::i#1!=PLEX_COUNT-1+1) goto init::@1 + [19] init::i#2 = phi( init::@1/init::i#1, init/0 ) + [20] PLEX_PTR[init::i#2] = (byte)SPRITE/$40 + [21] init::$10 = init::i#2 << 2 + [22] init::$3 = init::$10 + init::i#2 + [23] init::$4 = $18 + init::$3 + [24] init::$9 = init::i#2 << 1 + [25] PLEX_XPOS[init::$9] = init::$4 + [26] init::$5 = init::i#2 << 3 + [27] init::$6 = $32 + init::$5 + [28] PLEX_YPOS[init::i#2] = init::$6 + [29] init::i#1 = ++ init::i#2 + [30] if(init::i#1!=PLEX_COUNT-1+1) goto init::@1 to:init::@2 init::@2: scope:[init] from init::@1 - [30] *SPRITES_ENABLE = $ff + [31] *SPRITES_ENABLE = $ff to:init::@3 init::@3: scope:[init] from init::@2 init::@3 - [31] init::i1#2 = phi( init::@2/0, init::@3/init::i1#1 ) - [32] SPRITES_COLOR[init::i1#2] = GREEN - [33] init::i1#1 = ++ init::i1#2 - [34] if(init::i1#1!=8) goto init::@3 + [32] init::i1#2 = phi( init::@2/0, init::@3/init::i1#1 ) + [33] SPRITES_COLOR[init::i1#2] = GREEN + [34] init::i1#1 = ++ init::i1#2 + [35] if(init::i1#1!=8) goto init::@3 to:init::@4 init::@4: scope:[init] from init::@3 - [35] phi() - [36] call mulf_init + [36] phi() + [37] call mulf_init to:init::@5 init::@5: scope:[init] from init::@4 - [37] phi() - [38] call memset + [38] phi() + [39] call memset to:init::@return init::@return: scope:[init] from init::@5 - [39] return + [40] return to:@return void loop() loop: scope:[loop] from main::@1 - [40] phi() + [41] phi() to:loop::@1 loop::@1: scope:[loop] from loop loop::@15 - [41] loop::angle#6 = phi( loop/0, loop::@15/loop::angle#1 ) + [42] loop::angle#6 = phi( loop/0, loop::@15/loop::angle#1 ) to:loop::@2 loop::@2: scope:[loop] from loop::@1 loop::@2 - [42] if(*RASTER<$d8) goto loop::@2 + [43] if(*RASTER<$d8) goto loop::@2 to:loop::@3 loop::@3: scope:[loop] from loop::@2 - [43] *BORDER_COLOR = $f - [44] loop::a#6 = loop::angle#6 + [44] *BORDER_COLOR = $f + [45] loop::a#6 = loop::angle#6 to:loop::@4 loop::@4: scope:[loop] from loop::@12 loop::@3 - [45] loop::i#2 = phi( loop::@12/loop::i#1, loop::@3/0 ) - [45] loop::a#2 = phi( loop::@12/loop::a#1, loop::@3/loop::a#6 ) - [45] loop::r#2 = phi( loop::@12/loop::r#1, loop::@3/$1e ) - [46] *BORDER_COLOR = 6 - [47] mulf8s::a#0 = loop::r#2 - [48] mulf8s::b#0 = COS[loop::a#2] - [49] call mulf8s - [50] mulf8s::return#2 = mulf8s::return#0 + [46] loop::i#2 = phi( loop::@12/loop::i#1, loop::@3/0 ) + [46] loop::a#2 = phi( loop::@12/loop::a#1, loop::@3/loop::a#6 ) + [46] loop::r#2 = phi( loop::@12/loop::r#1, loop::@3/$1e ) + [47] *BORDER_COLOR = 6 + [48] mulf8s::a#0 = loop::r#2 + [49] mulf8s::b#0 = COS[loop::a#2] + [50] call mulf8s + [51] mulf8s::return#2 = mulf8s::return#0 to:loop::@11 loop::@11: scope:[loop] from loop::@4 - [51] loop::$1 = mulf8s::return#2 - [52] loop::$2 = loop::$1 << 1 - [53] loop::x#0 = loop::$2 + (signed word)$7d*$100 - [54] loop::$4 = > loop::x#0 - [55] loop::$20 = loop::i#2 << 1 - [56] PLEX_XPOS[loop::$20] = loop::$4 - [57] mulf8s::a#1 = loop::r#2 - [58] mulf8s::b#1 = SIN[loop::a#2] - [59] call mulf8s - [60] mulf8s::return#3 = mulf8s::return#0 + [52] loop::$1 = mulf8s::return#2 + [53] loop::$2 = loop::$1 << 1 + [54] loop::x#0 = loop::$2 + (signed word)$7d*$100 + [55] loop::$4 = > loop::x#0 + [56] loop::$20 = loop::i#2 << 1 + [57] PLEX_XPOS[loop::$20] = loop::$4 + [58] mulf8s::a#1 = loop::r#2 + [59] mulf8s::b#1 = SIN[loop::a#2] + [60] call mulf8s + [61] mulf8s::return#3 = mulf8s::return#0 to:loop::@12 loop::@12: scope:[loop] from loop::@11 - [61] loop::$5 = mulf8s::return#3 - [62] loop::$6 = loop::$5 << 1 - [63] loop::y#0 = loop::$6 + (signed word)$7d*$100 - [64] loop::$8 = > loop::y#0 - [65] PLEX_YPOS[loop::i#2] = loop::$8 - [66] loop::a#1 = loop::a#2 + $62 - [67] loop::r#1 = loop::r#2 + 3 - [68] loop::i#1 = ++ loop::i#2 - [69] if(loop::i#1!=NUM_BOBS-1+1) goto loop::@4 + [62] loop::$5 = mulf8s::return#3 + [63] loop::$6 = loop::$5 << 1 + [64] loop::y#0 = loop::$6 + (signed word)$7d*$100 + [65] loop::$8 = > loop::y#0 + [66] PLEX_YPOS[loop::i#2] = loop::$8 + [67] loop::a#1 = loop::a#2 + $62 + [68] loop::r#1 = loop::r#2 + 3 + [69] loop::i#1 = ++ loop::i#2 + [70] if(loop::i#1!=NUM_BOBS-1+1) goto loop::@4 to:loop::@5 loop::@5: scope:[loop] from loop::@12 - [70] *BORDER_COLOR = 3 - [71] call plexSort + [71] *BORDER_COLOR = 3 + [72] call plexSort to:loop::@13 loop::@13: scope:[loop] from loop::@5 - [72] loop::angle#1 = loop::angle#6 + 3 - [73] *BORDER_COLOR = BLACK + [73] loop::angle#1 = loop::angle#6 + 3 + [74] *BORDER_COLOR = BLACK to:loop::@6 loop::@6: scope:[loop] from loop::@13 loop::@6 - [74] loop::$11 = *D011 & VIC_RST8 - [75] if(loop::$11!=0) goto loop::@6 + [75] loop::$11 = *D011 & VIC_RST8 + [76] if(loop::$11!=0) goto loop::@6 to:loop::@7 loop::@7: scope:[loop] from loop::@14 loop::@6 - [76] loop::i1#5 = phi( loop::@14/loop::i1#1, loop::@6/0 ) - [77] *BORDER_COLOR = BLACK + [77] loop::i1#5 = phi( loop::@14/loop::i1#1, loop::@6/0 ) + [78] *BORDER_COLOR = BLACK to:loop::plexFreeNextYpos1 loop::plexFreeNextYpos1: scope:[loop] from loop::@7 - [78] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] + [79] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] to:loop::@8 loop::@8: scope:[loop] from loop::@8 loop::plexFreeNextYpos1 - [79] if(*RASTER mulf_init::sqr#3 - [129] *mulf_init::sqr1_hi#2 = mulf_init::$5 - [130] mulf_init::sqr1_hi#1 = ++ mulf_init::sqr1_hi#2 - [131] mulf_init::sqr#1 = mulf_init::sqr#3 + mulf_init::x_2#2 - [132] mulf_init::sqr1_lo#1 = ++ mulf_init::sqr1_lo#2 + [126] mulf_init::x_2#2 = phi( mulf_init::@2/mulf_init::x_2#3, mulf_init::@4/mulf_init::x_2#1 ) + [126] mulf_init::sqr#3 = phi( mulf_init::@2/mulf_init::sqr#4, mulf_init::@4/mulf_init::sqr#2 ) + [127] mulf_init::$4 = < mulf_init::sqr#3 + [128] *mulf_init::sqr1_lo#2 = mulf_init::$4 + [129] mulf_init::$5 = > mulf_init::sqr#3 + [130] *mulf_init::sqr1_hi#2 = mulf_init::$5 + [131] mulf_init::sqr1_hi#1 = ++ mulf_init::sqr1_hi#2 + [132] mulf_init::sqr#1 = mulf_init::sqr#3 + mulf_init::x_2#2 + [133] mulf_init::sqr1_lo#1 = ++ mulf_init::sqr1_lo#2 to:mulf_init::@1 void* memset(void* memset::str , byte memset::c , word memset::num) memset: scope:[memset] from init::@5 - [133] phi() + [134] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [134] memset::dst#2 = phi( memset/(byte*)memset::str#0, memset::@2/memset::dst#1 ) - [135] if(memset::dst#2!=memset::end#0) goto memset::@2 + [135] memset::dst#2 = phi( memset/(byte*)memset::str#0, memset::@2/memset::dst#1 ) + [136] if(memset::dst#2!=memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [136] return + [137] return to:@return memset::@2: scope:[memset] from memset::@1 - [137] *memset::dst#2 = memset::c#0 - [138] memset::dst#1 = ++ memset::dst#2 + [138] *memset::dst#2 = memset::c#0 + [139] memset::dst#1 = ++ memset::dst#2 to:memset::@1 signed word mulf8s(signed byte mulf8s::a , signed byte mulf8s::b) mulf8s: scope:[mulf8s] from loop::@11 loop::@4 - [139] mulf8s::b#2 = phi( loop::@11/mulf8s::b#1, loop::@4/mulf8s::b#0 ) - [139] mulf8s::mulf8s_prepare1_a#0 = phi( loop::@11/mulf8s::a#1, loop::@4/mulf8s::a#0 ) + [140] mulf8s::b#2 = phi( loop::@11/mulf8s::b#1, loop::@4/mulf8s::b#0 ) + [140] mulf8s::mulf8s_prepare1_a#0 = phi( loop::@11/mulf8s::a#1, loop::@4/mulf8s::a#0 ) to:mulf8s::mulf8s_prepare1 mulf8s::mulf8s_prepare1: scope:[mulf8s] from mulf8s - [140] mulf8u_prepare::a#0 = (byte)mulf8s::mulf8s_prepare1_a#0 - [141] call mulf8u_prepare + [141] mulf8u_prepare::a#0 = (byte)mulf8s::mulf8s_prepare1_a#0 + [142] call mulf8u_prepare to:mulf8s::@1 mulf8s::@1: scope:[mulf8s] from mulf8s::mulf8s_prepare1 - [142] mulf8s_prepared::b#0 = mulf8s::b#2 - [143] call mulf8s_prepared + [143] mulf8s_prepared::b#0 = mulf8s::b#2 + [144] call mulf8s_prepared to:mulf8s::@2 mulf8s::@2: scope:[mulf8s] from mulf8s::@1 - [144] mulf8s::return#0 = (signed word)mulf8s_prepared::m#4 + [145] mulf8s::return#0 = (signed word)mulf8s_prepared::m#4 to:mulf8s::@return mulf8s::@return: scope:[mulf8s] from mulf8s::@2 - [145] return + [146] return to:@return void plexSort() plexSort: scope:[plexSort] from loop::@5 - [146] phi() + [147] phi() to:plexSort::@1 plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 - [147] plexSort::m#2 = phi( plexSort/0, plexSort::@2/plexSort::m#1 ) - [148] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2] - [149] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] - [150] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 + [148] plexSort::m#2 = phi( plexSort/0, plexSort::@2/plexSort::m#1 ) + [149] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2] + [150] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] + [151] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 to:plexSort::@5 plexSort::@5: scope:[plexSort] from plexSort::@1 - [151] plexSort::s#6 = plexSort::m#2 + [152] plexSort::s#6 = plexSort::m#2 to:plexSort::@3 plexSort::@3: scope:[plexSort] from plexSort::@5 plexSort::@7 - [152] plexSort::s#3 = phi( plexSort::@7/plexSort::s#1, plexSort::@5/plexSort::s#6 ) - [153] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] - [154] plexSort::s#1 = -- plexSort::s#3 - [155] if(plexSort::s#1==$ff) goto plexSort::@4 + [153] plexSort::s#3 = phi( plexSort::@7/plexSort::s#1, plexSort::@5/plexSort::s#6 ) + [154] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] + [155] plexSort::s#1 = -- plexSort::s#3 + [156] if(plexSort::s#1==$ff) goto plexSort::@4 to:plexSort::@7 plexSort::@7: scope:[plexSort] from plexSort::@3 - [156] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] - [185] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 + [180] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] + [181] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] + [182] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 + [183] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] + [184] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 + [185] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] + [186] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 to:plexShowSprite::@3 plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@5 - [186] plexShowSprite::$9 = $ff ^ plex_sprite_msb - [187] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 + [187] plexShowSprite::$9 = $ff ^ plex_sprite_msb + [188] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 to:plexShowSprite::@2 plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3 - [188] plexShowSprite::$5 = plex_sprite_idx + 1 - [189] plexShowSprite::$6 = plexShowSprite::$5 & 7 - [190] plex_sprite_idx = plexShowSprite::$6 - [191] plex_show_idx = ++ plex_show_idx - [192] plex_sprite_msb = plex_sprite_msb << 1 - [193] if(plex_sprite_msb!=0) goto plexShowSprite::@return + [189] plexShowSprite::$5 = plex_sprite_idx + 1 + [190] plexShowSprite::$6 = plexShowSprite::$5 & 7 + [191] plex_sprite_idx = plexShowSprite::$6 + [192] plex_show_idx = ++ plex_show_idx + [193] plex_sprite_msb = plex_sprite_msb << 1 + [194] if(plex_sprite_msb!=0) goto plexShowSprite::@return to:plexShowSprite::@4 plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@2 - [194] plex_sprite_msb = 1 + [195] plex_sprite_msb = 1 to:plexShowSprite::@return plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4 - [195] return + [196] return to:@return plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5 - [196] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb + [197] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb to:plexShowSprite::@2 byte keyboard_key_pressed(byte keyboard_key_pressed::key) keyboard_key_pressed: scope:[keyboard_key_pressed] from exit::@1 loop::@10 - [197] phi() - [198] call keyboard_matrix_read - [199] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 + [198] phi() + [199] call keyboard_matrix_read + [200] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 to:keyboard_key_pressed::@1 keyboard_key_pressed::@1: scope:[keyboard_key_pressed] from keyboard_key_pressed - [200] keyboard_key_pressed::$2 = keyboard_matrix_read::return#2 - [201] keyboard_key_pressed::return#0 = keyboard_key_pressed::$2 & *(keyboard_matrix_col_bitmask+keyboard_key_pressed::colidx#0) + [201] keyboard_key_pressed::$2 = keyboard_matrix_read::return#2 + [202] keyboard_key_pressed::return#0 = keyboard_key_pressed::$2 & *(keyboard_matrix_col_bitmask+keyboard_key_pressed::colidx#0) to:keyboard_key_pressed::@return keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_pressed::@1 - [202] return + [203] return to:@return void mulf8u_prepare(byte mulf8u_prepare::a) mulf8u_prepare: scope:[mulf8u_prepare] from mulf8s::mulf8s_prepare1 - [203] *mulf8u_prepare::memA = mulf8u_prepare::a#0 + [204] *mulf8u_prepare::memA = 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 - [205] return + [206] return to:@return signed word mulf8s_prepared(signed byte mulf8s_prepared::b) mulf8s_prepared: scope:[mulf8s_prepared] from mulf8s::@1 - [206] mulf8u_prepared::b#0 = (byte)mulf8s_prepared::b#0 - [207] call mulf8u_prepared - [208] mulf8u_prepared::return#2 = mulf8u_prepared::return#0 + [207] mulf8u_prepared::b#0 = (byte)mulf8s_prepared::b#0 + [208] call mulf8u_prepared + [209] mulf8u_prepared::return#2 = mulf8u_prepared::return#0 to:mulf8s_prepared::@5 mulf8s_prepared::@5: scope:[mulf8s_prepared] from mulf8s_prepared - [209] mulf8s_prepared::m#0 = mulf8u_prepared::return#2 - [210] if(*mulf8s_prepared::memA>=0) goto mulf8s_prepared::@1 + [210] mulf8s_prepared::m#0 = mulf8u_prepared::return#2 + [211] if(*mulf8s_prepared::memA>=0) goto mulf8s_prepared::@1 to:mulf8s_prepared::@3 mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@5 - [211] mulf8s_prepared::$6 = > mulf8s_prepared::m#0 - [212] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (byte)mulf8s_prepared::b#0 - [213] mulf8s_prepared::m#1 = mulf8s_prepared::m#0 hi= mulf8s_prepared::$11 + [212] mulf8s_prepared::$6 = > mulf8s_prepared::m#0 + [213] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (byte)mulf8s_prepared::b#0 + [214] mulf8s_prepared::m#1 = mulf8s_prepared::m#0 hi= mulf8s_prepared::$11 to:mulf8s_prepared::@1 mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@5 - [214] mulf8s_prepared::m#5 = phi( mulf8s_prepared::@3/mulf8s_prepared::m#1, mulf8s_prepared::@5/mulf8s_prepared::m#0 ) - [215] if(mulf8s_prepared::b#0>=0) goto mulf8s_prepared::@2 + [215] mulf8s_prepared::m#5 = phi( mulf8s_prepared::@3/mulf8s_prepared::m#1, mulf8s_prepared::@5/mulf8s_prepared::m#0 ) + [216] if(mulf8s_prepared::b#0>=0) goto mulf8s_prepared::@2 to:mulf8s_prepared::@4 mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1 - [216] mulf8s_prepared::$9 = > mulf8s_prepared::m#5 - [217] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (byte)*mulf8s_prepared::memA - [218] mulf8s_prepared::m#2 = mulf8s_prepared::m#5 hi= mulf8s_prepared::$12 + [217] mulf8s_prepared::$9 = > mulf8s_prepared::m#5 + [218] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (byte)*mulf8s_prepared::memA + [219] mulf8s_prepared::m#2 = mulf8s_prepared::m#5 hi= mulf8s_prepared::$12 to:mulf8s_prepared::@2 mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4 - [219] mulf8s_prepared::m#4 = phi( mulf8s_prepared::@1/mulf8s_prepared::m#5, mulf8s_prepared::@4/mulf8s_prepared::m#2 ) + [220] mulf8s_prepared::m#4 = phi( mulf8s_prepared::@1/mulf8s_prepared::m#5, mulf8s_prepared::@4/mulf8s_prepared::m#2 ) to:mulf8s_prepared::@return mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2 - [220] return + [221] return to:@return byte keyboard_matrix_read(byte keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [221] *((byte*)CIA1) = *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) - [222] keyboard_matrix_read::return#0 = ~ *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B) + [222] *((byte*)CIA1) = *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) + [223] keyboard_matrix_read::return#0 = ~ *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read - [223] return + [224] return to:@return word mulf8u_prepared(byte mulf8u_prepared::b) mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared - [224] *mulf8u_prepared::memB = mulf8u_prepared::b#0 + [225] *mulf8u_prepared::memB = 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 } - [226] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL + [227] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL to:mulf8u_prepared::@return mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared - [227] return + [228] return to:@return VARIABLE REGISTER WEIGHTS -byte* PLEX_SCREEN_PTR +volatile byte* PLEX_SCREEN_PTR loadstore 952.8679245283018 void __start() void exit() byte~ exit::$0 2002.0 @@ -2727,6 +2597,7 @@ Initial phi equivalence classes [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] +Added variable PLEX_SCREEN_PTR to live range equivalence class [ PLEX_SCREEN_PTR ] Added variable plex_show_idx to live range equivalence class [ plex_show_idx ] Added variable plex_sprite_idx to live range equivalence class [ plex_sprite_idx ] Added variable plex_sprite_msb to live range equivalence class [ plex_sprite_msb ] @@ -2811,6 +2682,7 @@ Complete equivalence classes [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] +[ PLEX_SCREEN_PTR ] [ plex_show_idx ] [ plex_sprite_idx ] [ plex_sprite_msb ] @@ -2894,353 +2766,360 @@ Allocated zp[1]:28 [ plexSort::m#2 plexSort::m#1 ] Allocated zp[1]:29 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] Allocated zp[1]:30 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] Allocated zp[2]:31 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] -Allocated zp[1]:33 [ plex_show_idx ] -Allocated zp[1]:34 [ plex_sprite_idx ] -Allocated zp[1]:35 [ plex_sprite_msb ] -Allocated zp[1]:36 [ plex_free_next ] -Allocated zp[1]:37 [ init::$10 ] -Allocated zp[1]:38 [ init::$3 ] -Allocated zp[1]:39 [ init::$4 ] -Allocated zp[1]:40 [ init::$9 ] -Allocated zp[1]:41 [ init::$5 ] -Allocated zp[1]:42 [ init::$6 ] -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 [ keyboard_key_pressed::return#2 ] -Allocated zp[1]:67 [ exit::$0 ] -Allocated zp[1]:68 [ mulf_init::$1 ] -Allocated zp[1]:69 [ mulf_init::$4 ] -Allocated zp[1]:70 [ mulf_init::$5 ] -Allocated zp[1]:71 [ mulf8u_prepare::a#0 ] -Allocated zp[1]:72 [ mulf8s_prepared::b#0 ] -Allocated zp[2]:73 [ mulf8s::return#0 ] -Allocated zp[1]:75 [ plexSort::nxt_idx#0 ] -Allocated zp[1]:76 [ plexSort::nxt_y#0 ] -Allocated zp[1]:77 [ plexSort::s#2 ] -Allocated zp[1]:78 [ plexShowSprite::plex_sprite_idx2#0 ] -Allocated zp[1]:79 [ plexShowSprite::plexFreeAdd1_ypos#0 ] -Allocated zp[1]:80 [ plexShowSprite::plexFreeAdd1_$0 ] -Allocated zp[1]:81 [ plexShowSprite::plexFreeAdd1_$1 ] -Allocated zp[1]:82 [ plexShowSprite::plexFreeAdd1_$2 ] -Allocated zp[1]:83 [ plexShowSprite::xpos_idx#0 ] -Allocated zp[1]:84 [ plexShowSprite::$11 ] -Allocated zp[1]:85 [ plexShowSprite::$2 ] -Allocated zp[1]:86 [ plexShowSprite::$3 ] -Allocated zp[1]:87 [ plexShowSprite::$9 ] -Allocated zp[1]:88 [ plexShowSprite::$5 ] -Allocated zp[1]:89 [ plexShowSprite::$6 ] -Allocated zp[1]:90 [ keyboard_matrix_read::return#2 ] -Allocated zp[1]:91 [ keyboard_key_pressed::$2 ] -Allocated zp[1]:92 [ keyboard_key_pressed::return#0 ] -Allocated zp[1]:93 [ mulf8u_prepared::b#0 ] -Allocated zp[2]:94 [ mulf8u_prepared::return#2 ] -Allocated zp[1]:96 [ mulf8s_prepared::$6 ] -Allocated zp[1]:97 [ mulf8s_prepared::$11 ] -Allocated zp[1]:98 [ mulf8s_prepared::$9 ] -Allocated zp[1]:99 [ mulf8s_prepared::$12 ] -Allocated zp[1]:100 [ keyboard_matrix_read::return#0 ] -Allocated zp[2]:101 [ mulf8u_prepared::return#0 ] +Allocated zp[2]:33 [ PLEX_SCREEN_PTR ] +Allocated zp[1]:35 [ plex_show_idx ] +Allocated zp[1]:36 [ plex_sprite_idx ] +Allocated zp[1]:37 [ plex_sprite_msb ] +Allocated zp[1]:38 [ plex_free_next ] +Allocated zp[1]:39 [ init::$10 ] +Allocated zp[1]:40 [ init::$3 ] +Allocated zp[1]:41 [ init::$4 ] +Allocated zp[1]:42 [ init::$9 ] +Allocated zp[1]:43 [ init::$5 ] +Allocated zp[1]:44 [ init::$6 ] +Allocated zp[2]:45 [ mulf8s::return#2 ] +Allocated zp[2]:47 [ loop::$1 ] +Allocated zp[2]:49 [ loop::$2 ] +Allocated zp[2]:51 [ loop::x#0 ] +Allocated zp[1]:53 [ loop::$4 ] +Allocated zp[1]:54 [ loop::$20 ] +Allocated zp[2]:55 [ mulf8s::return#3 ] +Allocated zp[2]:57 [ loop::$5 ] +Allocated zp[2]:59 [ loop::$6 ] +Allocated zp[2]:61 [ loop::y#0 ] +Allocated zp[1]:63 [ loop::$8 ] +Allocated zp[1]:64 [ loop::$11 ] +Allocated zp[1]:65 [ loop::plexFreeNextYpos1_return#0 ] +Allocated zp[1]:66 [ keyboard_key_pressed::return#3 ] +Allocated zp[1]:67 [ loop::$18 ] +Allocated zp[1]:68 [ keyboard_key_pressed::return#2 ] +Allocated zp[1]:69 [ exit::$0 ] +Allocated zp[1]:70 [ mulf_init::$1 ] +Allocated zp[1]:71 [ mulf_init::$4 ] +Allocated zp[1]:72 [ mulf_init::$5 ] +Allocated zp[1]:73 [ mulf8u_prepare::a#0 ] +Allocated zp[1]:74 [ mulf8s_prepared::b#0 ] +Allocated zp[2]:75 [ mulf8s::return#0 ] +Allocated zp[1]:77 [ plexSort::nxt_idx#0 ] +Allocated zp[1]:78 [ plexSort::nxt_y#0 ] +Allocated zp[1]:79 [ plexSort::s#2 ] +Allocated zp[1]:80 [ plexShowSprite::plex_sprite_idx2#0 ] +Allocated zp[1]:81 [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Allocated zp[1]:82 [ plexShowSprite::plexFreeAdd1_$0 ] +Allocated zp[1]:83 [ plexShowSprite::plexFreeAdd1_$1 ] +Allocated zp[1]:84 [ plexShowSprite::plexFreeAdd1_$2 ] +Allocated zp[1]:85 [ plexShowSprite::xpos_idx#0 ] +Allocated zp[1]:86 [ plexShowSprite::$11 ] +Allocated zp[1]:87 [ plexShowSprite::$2 ] +Allocated zp[1]:88 [ plexShowSprite::$3 ] +Allocated zp[1]:89 [ plexShowSprite::$9 ] +Allocated zp[1]:90 [ plexShowSprite::$5 ] +Allocated zp[1]:91 [ plexShowSprite::$6 ] +Allocated zp[1]:92 [ keyboard_matrix_read::return#2 ] +Allocated zp[1]:93 [ keyboard_key_pressed::$2 ] +Allocated zp[1]:94 [ keyboard_key_pressed::return#0 ] +Allocated zp[1]:95 [ mulf8u_prepared::b#0 ] +Allocated zp[2]:96 [ mulf8u_prepared::return#2 ] +Allocated zp[1]:98 [ mulf8s_prepared::$6 ] +Allocated zp[1]:99 [ mulf8s_prepared::$11 ] +Allocated zp[1]:100 [ mulf8s_prepared::$9 ] +Allocated zp[1]:101 [ mulf8s_prepared::$12 ] +Allocated zp[1]:102 [ keyboard_matrix_read::return#0 ] +Allocated zp[2]:103 [ mulf8u_prepared::return#0 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [3] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [4] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [16] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:6::init:9 [ ] { } ) always clobbers reg byte a -Statement [19] PLEX_PTR[init::i#2] = (byte)SPRITE/$40 [ init::i#2 ] ( main:6::init:9 [ init::i#2 ] { } ) always clobbers reg byte a +Statement [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [3] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [4] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [17] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:7::init:10 [ ] { } ) always clobbers reg byte a +Statement [20] PLEX_PTR[init::i#2] = (byte)SPRITE/$40 [ PLEX_SCREEN_PTR init::i#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ init::i#2 init::i#1 ] -Statement [20] init::$10 = init::i#2 << 2 [ init::i#2 init::$10 ] ( main:6::init:9 [ init::i#2 init::$10 ] { } ) always clobbers reg byte a -Statement [21] init::$3 = init::$10 + init::i#2 [ init::i#2 init::$3 ] ( main:6::init:9 [ init::i#2 init::$3 ] { } ) always clobbers reg byte a -Statement [23] init::$9 = init::i#2 << 1 [ init::i#2 init::$4 init::$9 ] ( main:6::init:9 [ init::i#2 init::$4 init::$9 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:39 [ init::$4 ] -Statement [24] PLEX_XPOS[init::$9] = init::$4 [ init::i#2 ] ( main:6::init:9 [ init::i#2 ] { } ) always clobbers reg byte a -Statement [25] init::$5 = init::i#2 << 3 [ init::i#2 init::$5 ] ( main:6::init:9 [ init::i#2 init::$5 ] { } ) always clobbers reg byte a -Statement [30] *SPRITES_ENABLE = $ff [ ] ( main:6::init:9 [ ] { } ) always clobbers reg byte a -Statement [32] SPRITES_COLOR[init::i1#2] = GREEN [ init::i1#2 ] ( main:6::init:9 [ init::i1#2 ] { } ) always clobbers reg byte a +Statement [21] init::$10 = init::i#2 << 2 [ PLEX_SCREEN_PTR init::i#2 init::$10 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 init::$10 ] { } ) always clobbers reg byte a +Statement [22] init::$3 = init::$10 + init::i#2 [ PLEX_SCREEN_PTR init::i#2 init::$3 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 init::$3 ] { } ) always clobbers reg byte a +Statement [24] init::$9 = init::i#2 << 1 [ PLEX_SCREEN_PTR init::i#2 init::$4 init::$9 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 init::$4 init::$9 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:41 [ init::$4 ] +Statement [25] PLEX_XPOS[init::$9] = init::$4 [ PLEX_SCREEN_PTR init::i#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 ] { } ) always clobbers reg byte a +Statement [26] init::$5 = init::i#2 << 3 [ PLEX_SCREEN_PTR init::i#2 init::$5 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 init::$5 ] { } ) always clobbers reg byte a +Statement [31] *SPRITES_ENABLE = $ff [ PLEX_SCREEN_PTR ] ( main:7::init:10 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [33] SPRITES_COLOR[init::i1#2] = GREEN [ PLEX_SCREEN_PTR init::i1#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i1#2 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:3 [ init::i1#2 init::i1#1 ] -Statement [42] if(*RASTER<$d8) goto loop::@2 [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a +Statement [43] if(*RASTER<$d8) goto loop::@2 [ PLEX_SCREEN_PTR loop::angle#6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:4 [ loop::angle#6 loop::angle#1 ] -Statement [43] *BORDER_COLOR = $f [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a -Statement [46] *BORDER_COLOR = 6 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a +Statement [44] *BORDER_COLOR = $f [ PLEX_SCREEN_PTR loop::angle#6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 ] { } ) always clobbers reg byte a +Statement [47] *BORDER_COLOR = 6 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:5 [ loop::r#2 loop::r#1 ] Removing always clobbered register reg byte a as potential for zp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ] Removing always clobbered register reg byte a as potential for zp[1]:7 [ loop::i#2 loop::i#1 ] -Statement [50] mulf8s::return#2 = mulf8s::return#0 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a -Statement [51] loop::$1 = mulf8s::return#2 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [52] loop::$2 = loop::$1 << 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [53] loop::x#0 = loop::$2 + (signed word)$7d*$100 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [55] loop::$20 = loop::i#2 << 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:51 [ loop::$4 ] -Statement [56] PLEX_XPOS[loop::$20] = loop::$4 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [60] mulf8s::return#3 = mulf8s::return#0 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [61] loop::$5 = mulf8s::return#3 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] { } ) always clobbers reg byte a -Statement [62] loop::$6 = loop::$5 << 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] { } ) always clobbers reg byte a -Statement [63] loop::y#0 = loop::$6 + (signed word)$7d*$100 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] { } ) always clobbers reg byte a -Statement [66] loop::a#1 = loop::a#2 + $62 [ loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] { } ) always clobbers reg byte a -Statement [67] loop::r#1 = loop::r#2 + 3 [ loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] ( main:6::loop:11 [ loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] { } ) always clobbers reg byte a -Statement [70] *BORDER_COLOR = 3 [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a -Statement [72] loop::angle#1 = loop::angle#6 + 3 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] { } ) always clobbers reg byte a -Statement [73] *BORDER_COLOR = BLACK [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] { } ) always clobbers reg byte a -Statement [74] loop::$11 = *D011 & VIC_RST8 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::$11 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::$11 ] { } ) always clobbers reg byte a -Statement [77] *BORDER_COLOR = BLACK [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 ] { } ) always clobbers reg byte a +Statement [51] mulf8s::return#2 = mulf8s::return#0 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a +Statement [52] loop::$1 = mulf8s::return#2 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [53] loop::$2 = loop::$1 << 1 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [54] loop::x#0 = loop::$2 + (signed word)$7d*$100 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [56] loop::$20 = loop::i#2 << 1 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:53 [ loop::$4 ] +Statement [57] PLEX_XPOS[loop::$20] = loop::$4 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [61] mulf8s::return#3 = mulf8s::return#0 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [62] loop::$5 = mulf8s::return#3 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] { } ) always clobbers reg byte a +Statement [63] loop::$6 = loop::$5 << 1 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] { } ) always clobbers reg byte a +Statement [64] loop::y#0 = loop::$6 + (signed word)$7d*$100 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] { } ) always clobbers reg byte a +Statement [67] loop::a#1 = loop::a#2 + $62 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] { } ) always clobbers reg byte a +Statement [68] loop::r#1 = loop::r#2 + 3 [ PLEX_SCREEN_PTR loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] { } ) always clobbers reg byte a +Statement [71] *BORDER_COLOR = 3 [ PLEX_SCREEN_PTR loop::angle#6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 ] { } ) always clobbers reg byte a +Statement [73] loop::angle#1 = loop::angle#6 + 3 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] { } ) always clobbers reg byte a +Statement [74] *BORDER_COLOR = BLACK [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] { } ) always clobbers reg byte a +Statement [75] loop::$11 = *D011 & VIC_RST8 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::$11 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::$11 ] { } ) always clobbers reg byte a +Statement [78] *BORDER_COLOR = BLACK [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:8 [ loop::i1#5 loop::i1#1 ] -Statement [78] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 loop::plexFreeNextYpos1_return#0 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 loop::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y +Statement [79] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 loop::plexFreeNextYpos1_return#0 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 loop::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:4 [ loop::angle#6 loop::angle#1 ] Removing always clobbered register reg byte y as potential for zp[1]:8 [ loop::i1#5 loop::i1#1 ] -Statement [84] *BORDER_COLOR = BLACK [ loop::angle#1 ] ( main:6::loop:11 [ loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } } ) always clobbers reg byte a -Statement [106] if(mulf_init::sqr1_lo#2!=mulf_sqr1_lo+$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:6::init:9::mulf_init:36 [ 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 [85] *BORDER_COLOR = BLACK [ PLEX_SCREEN_PTR loop::angle#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } } ) always clobbers reg byte a +Statement [99] PLEX_SCREEN_PTR = SCREEN+$3f8 [ PLEX_SCREEN_PTR ] ( main:7::init:10::plexInit:18 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [107] if(mulf_init::sqr1_lo#2!=mulf_sqr1_lo+$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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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]:12 [ mulf_init::c#2 mulf_init::c#1 ] Removing always clobbered register reg byte a as potential for zp[1]:15 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Statement [108] if(mulf_init::sqr2_lo#2!=mulf_sqr2_lo+$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:6::init:9::mulf_init:36 [ 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 [109] if(mulf_init::sqr2_lo#2!=mulf_sqr2_lo+$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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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]:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ] Removing always clobbered register reg byte a as potential for zp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ] -Statement [109] *(mulf_sqr2_lo+$1ff) = *(mulf_sqr1_lo+$100) [ ] ( main:6::init:9::mulf_init:36 [ ] { } ) always clobbers reg byte a -Statement [110] *(mulf_sqr2_hi+$1ff) = *(mulf_sqr1_hi+$100) [ ] ( main:6::init:9::mulf_init:36 [ ] { } ) always clobbers reg byte a -Statement [112] *mulf_init::sqr2_lo#2 = mulf_sqr1_lo[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:6::init:9::mulf_init:36 [ 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 [110] *(mulf_sqr2_lo+$1ff) = *(mulf_sqr1_lo+$100) [ ] ( main:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [111] *(mulf_sqr2_hi+$1ff) = *(mulf_sqr1_hi+$100) [ ] ( main:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [113] *mulf_init::sqr2_lo#2 = mulf_sqr1_lo[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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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]:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ] Removing always clobbered register reg byte y as potential for zp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ] -Statement [113] *mulf_init::sqr2_hi#2 = mulf_sqr1_hi[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:6::init:9::mulf_init:36 [ 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 [115] mulf_init::x_255#1 = mulf_init::x_255#2 + mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:6::init:9::mulf_init:36 [ 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 [121] mulf_init::$1 = mulf_init::c#1 & 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:6::init:9::mulf_init:36 [ 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 [127] *mulf_init::sqr1_lo#2 = 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:6::init:9::mulf_init:36 [ 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 [114] *mulf_init::sqr2_hi#2 = mulf_sqr1_hi[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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [116] mulf_init::x_255#1 = mulf_init::x_255#2 + mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [122] mulf_init::$1 = mulf_init::c#1 & 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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [128] *mulf_init::sqr1_lo#2 = 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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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]:12 [ mulf_init::c#2 mulf_init::c#1 ] Removing always clobbered register reg byte y as potential for zp[1]:15 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Statement [129] *mulf_init::sqr1_hi#2 = 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:6::init:9::mulf_init:36 [ 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 [131] mulf_init::sqr#1 = mulf_init::sqr#3 + 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:6::init:9::mulf_init:36 [ 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 [135] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:6::init:9::memset:38 [ memset::dst#2 ] { } ) always clobbers reg byte a -Statement [137] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( main:6::init:9::memset:38 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y -Statement [144] mulf8s::return#0 = (signed word)mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:6::loop:11::mulf8s:49 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [153] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:6::loop:11::plexSort:71 [ loop::angle#6 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a +Statement [130] *mulf_init::sqr1_hi#2 = 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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [132] mulf_init::sqr#1 = mulf_init::sqr#3 + 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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [136] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:7::init:10::memset:39 [ PLEX_SCREEN_PTR memset::dst#2 ] { } ) always clobbers reg byte a +Statement [138] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( main:7::init:10::memset:39 [ PLEX_SCREEN_PTR memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Statement [145] mulf8s::return#0 = (signed word)mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:7::loop:12::mulf8s:50 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [154] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:7::loop:12::plexSort:72 [ PLEX_SCREEN_PTR 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]:28 [ plexSort::m#2 plexSort::m#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:75 [ plexSort::nxt_idx#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:76 [ plexSort::nxt_y#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:77 [ plexSort::nxt_idx#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:78 [ plexSort::nxt_y#0 ] Removing always clobbered register reg byte a as potential for zp[1]:29 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] -Statement [156] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [186] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [187] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [193] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [194] plex_sprite_msb = 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [196] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte x as potential for zp[1]:80 [ plexShowSprite::plex_sprite_idx2#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:80 [ plexShowSprite::plex_sprite_idx2#0 ] +Statement [176] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte y +Statement [180] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte a as potential for zp[1]:80 [ plexShowSprite::plex_sprite_idx2#0 ] +Statement [181] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] { } ) always clobbers reg byte y +Statement [182] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] { } ) always clobbers reg byte a +Statement [183] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next 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]:86 [ plexShowSprite::$11 ] +Statement [184] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] { } ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:86 [ plexShowSprite::$11 ] +Statement [185] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [187] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [188] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [194] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [195] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [197] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) 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]:27 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] -Statement [208] mulf8u_prepared::return#2 = mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:72 [ mulf8s_prepared::b#0 ] -Statement [209] mulf8s_prepared::m#0 = mulf8u_prepared::return#2 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [210] if(*mulf8s_prepared::memA>=0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [212] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (byte)mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [217] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (byte)*mulf8s_prepared::memA [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [221] *((byte*)CIA1) = *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) [ ] ( main:6::loop:11::keyboard_key_pressed:85::keyboard_matrix_read:198 [ loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::exit:13::keyboard_key_pressed:92::keyboard_matrix_read:198 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [222] keyboard_matrix_read::return#0 = ~ *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:6::loop:11::keyboard_key_pressed:85::keyboard_matrix_read:198 [ loop::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::exit:13::keyboard_key_pressed:92::keyboard_matrix_read:198 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [209] mulf8u_prepared::return#2 = mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:74 [ mulf8s_prepared::b#0 ] +Statement [210] mulf8s_prepared::m#0 = mulf8u_prepared::return#2 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [211] if(*mulf8s_prepared::memA>=0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [213] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (byte)mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [218] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (byte)*mulf8s_prepared::memA [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [222] *((byte*)CIA1) = *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) [ ] ( main:7::loop:12::keyboard_key_pressed:86::keyboard_matrix_read:199 [ PLEX_SCREEN_PTR loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:7::exit:14::keyboard_key_pressed:93::keyboard_matrix_read:199 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [223] keyboard_matrix_read::return#0 = ~ *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:7::loop:12::keyboard_key_pressed:86::keyboard_matrix_read:199 [ PLEX_SCREEN_PTR loop::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:7::exit:14::keyboard_key_pressed:93::keyboard_matrix_read:199 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) 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]:5 [ loop::r#2 loop::r#1 ] Removing always clobbered register reg byte x as potential for zp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ] Removing always clobbered register reg byte x as potential for zp[1]:7 [ loop::i#2 loop::i#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:72 [ mulf8s_prepared::b#0 ] -Statement [226] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL [ mulf8u_prepared::return#0 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143::mulf8u_prepared:207 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143::mulf8u_prepared:207 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a -Statement [1] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [3] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [4] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [16] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:6::init:9 [ ] { } ) always clobbers reg byte a -Statement [19] PLEX_PTR[init::i#2] = (byte)SPRITE/$40 [ init::i#2 ] ( main:6::init:9 [ init::i#2 ] { } ) always clobbers reg byte a -Statement [20] init::$10 = init::i#2 << 2 [ init::i#2 init::$10 ] ( main:6::init:9 [ init::i#2 init::$10 ] { } ) always clobbers reg byte a -Statement [21] init::$3 = init::$10 + init::i#2 [ init::i#2 init::$3 ] ( main:6::init:9 [ init::i#2 init::$3 ] { } ) always clobbers reg byte a -Statement [23] init::$9 = init::i#2 << 1 [ init::i#2 init::$4 init::$9 ] ( main:6::init:9 [ init::i#2 init::$4 init::$9 ] { } ) always clobbers reg byte a -Statement [24] PLEX_XPOS[init::$9] = init::$4 [ init::i#2 ] ( main:6::init:9 [ init::i#2 ] { } ) always clobbers reg byte a -Statement [25] init::$5 = init::i#2 << 3 [ init::i#2 init::$5 ] ( main:6::init:9 [ init::i#2 init::$5 ] { } ) always clobbers reg byte a -Statement [30] *SPRITES_ENABLE = $ff [ ] ( main:6::init:9 [ ] { } ) always clobbers reg byte a -Statement [32] SPRITES_COLOR[init::i1#2] = GREEN [ init::i1#2 ] ( main:6::init:9 [ init::i1#2 ] { } ) always clobbers reg byte a -Statement [42] if(*RASTER<$d8) goto loop::@2 [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a -Statement [43] *BORDER_COLOR = $f [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a -Statement [46] *BORDER_COLOR = 6 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a -Statement [50] mulf8s::return#2 = mulf8s::return#0 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a -Statement [51] loop::$1 = mulf8s::return#2 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [52] loop::$2 = loop::$1 << 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [53] loop::x#0 = loop::$2 + (signed word)$7d*$100 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [55] loop::$20 = loop::i#2 << 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [56] PLEX_XPOS[loop::$20] = loop::$4 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [60] mulf8s::return#3 = mulf8s::return#0 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [61] loop::$5 = mulf8s::return#3 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] { } ) always clobbers reg byte a -Statement [62] loop::$6 = loop::$5 << 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] { } ) always clobbers reg byte a -Statement [63] loop::y#0 = loop::$6 + (signed word)$7d*$100 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] { } ) always clobbers reg byte a -Statement [66] loop::a#1 = loop::a#2 + $62 [ loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] { } ) always clobbers reg byte a -Statement [67] loop::r#1 = loop::r#2 + 3 [ loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] ( main:6::loop:11 [ loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] { } ) always clobbers reg byte a -Statement [70] *BORDER_COLOR = 3 [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a -Statement [72] loop::angle#1 = loop::angle#6 + 3 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] { } ) always clobbers reg byte a reg byte x -Statement [73] *BORDER_COLOR = BLACK [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] { } ) always clobbers reg byte a -Statement [74] loop::$11 = *D011 & VIC_RST8 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::$11 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::$11 ] { } ) always clobbers reg byte a -Statement [77] *BORDER_COLOR = BLACK [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 ] { } ) always clobbers reg byte a -Statement [78] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 loop::plexFreeNextYpos1_return#0 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 loop::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y -Statement [83] if(loop::i1#1!=PLEX_COUNT-1+1) goto loop::@7 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#1 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#1 ] { } ) always clobbers reg byte a -Statement [84] *BORDER_COLOR = BLACK [ loop::angle#1 ] ( main:6::loop:11 [ loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } } ) always clobbers reg byte a -Statement [106] if(mulf_init::sqr1_lo#2!=mulf_sqr1_lo+$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:6::init:9::mulf_init:36 [ 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 [108] if(mulf_init::sqr2_lo#2!=mulf_sqr2_lo+$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:6::init:9::mulf_init:36 [ 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 [109] *(mulf_sqr2_lo+$1ff) = *(mulf_sqr1_lo+$100) [ ] ( main:6::init:9::mulf_init:36 [ ] { } ) always clobbers reg byte a -Statement [110] *(mulf_sqr2_hi+$1ff) = *(mulf_sqr1_hi+$100) [ ] ( main:6::init:9::mulf_init:36 [ ] { } ) always clobbers reg byte a -Statement [112] *mulf_init::sqr2_lo#2 = mulf_sqr1_lo[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:6::init:9::mulf_init:36 [ 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 [113] *mulf_init::sqr2_hi#2 = mulf_sqr1_hi[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:6::init:9::mulf_init:36 [ 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 [115] mulf_init::x_255#1 = mulf_init::x_255#2 + mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:6::init:9::mulf_init:36 [ 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 [121] mulf_init::$1 = mulf_init::c#1 & 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:6::init:9::mulf_init:36 [ 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 [127] *mulf_init::sqr1_lo#2 = 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:6::init:9::mulf_init:36 [ 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 [129] *mulf_init::sqr1_hi#2 = 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:6::init:9::mulf_init:36 [ 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 [131] mulf_init::sqr#1 = mulf_init::sqr#3 + 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:6::init:9::mulf_init:36 [ 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 [135] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:6::init:9::memset:38 [ memset::dst#2 ] { } ) always clobbers reg byte a -Statement [137] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( main:6::init:9::memset:38 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y -Statement [144] mulf8s::return#0 = (signed word)mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:6::loop:11::mulf8s:49 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [150] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:6::loop:11::plexSort:71 [ loop::angle#6 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a -Statement [153] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:6::loop:11::plexSort:71 [ loop::angle#6 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a -Statement [156] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [186] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [187] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [193] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [194] plex_sprite_msb = 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [196] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte x as potential for zp[1]:74 [ mulf8s_prepared::b#0 ] +Statement [227] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL [ mulf8u_prepared::return#0 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144::mulf8u_prepared:208 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144::mulf8u_prepared:208 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a +Statement [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [3] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [4] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [17] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:7::init:10 [ ] { } ) always clobbers reg byte a +Statement [20] PLEX_PTR[init::i#2] = (byte)SPRITE/$40 [ PLEX_SCREEN_PTR init::i#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 ] { } ) always clobbers reg byte a +Statement [21] init::$10 = init::i#2 << 2 [ PLEX_SCREEN_PTR init::i#2 init::$10 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 init::$10 ] { } ) always clobbers reg byte a +Statement [22] init::$3 = init::$10 + init::i#2 [ PLEX_SCREEN_PTR init::i#2 init::$3 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 init::$3 ] { } ) always clobbers reg byte a +Statement [24] init::$9 = init::i#2 << 1 [ PLEX_SCREEN_PTR init::i#2 init::$4 init::$9 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 init::$4 init::$9 ] { } ) always clobbers reg byte a +Statement [25] PLEX_XPOS[init::$9] = init::$4 [ PLEX_SCREEN_PTR init::i#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 ] { } ) always clobbers reg byte a +Statement [26] init::$5 = init::i#2 << 3 [ PLEX_SCREEN_PTR init::i#2 init::$5 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 init::$5 ] { } ) always clobbers reg byte a +Statement [31] *SPRITES_ENABLE = $ff [ PLEX_SCREEN_PTR ] ( main:7::init:10 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [33] SPRITES_COLOR[init::i1#2] = GREEN [ PLEX_SCREEN_PTR init::i1#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i1#2 ] { } ) always clobbers reg byte a +Statement [43] if(*RASTER<$d8) goto loop::@2 [ PLEX_SCREEN_PTR loop::angle#6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 ] { } ) always clobbers reg byte a +Statement [44] *BORDER_COLOR = $f [ PLEX_SCREEN_PTR loop::angle#6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 ] { } ) always clobbers reg byte a +Statement [47] *BORDER_COLOR = 6 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a +Statement [51] mulf8s::return#2 = mulf8s::return#0 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a +Statement [52] loop::$1 = mulf8s::return#2 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [53] loop::$2 = loop::$1 << 1 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [54] loop::x#0 = loop::$2 + (signed word)$7d*$100 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [56] loop::$20 = loop::i#2 << 1 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [57] PLEX_XPOS[loop::$20] = loop::$4 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [61] mulf8s::return#3 = mulf8s::return#0 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [62] loop::$5 = mulf8s::return#3 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] { } ) always clobbers reg byte a +Statement [63] loop::$6 = loop::$5 << 1 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] { } ) always clobbers reg byte a +Statement [64] loop::y#0 = loop::$6 + (signed word)$7d*$100 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] { } ) always clobbers reg byte a +Statement [67] loop::a#1 = loop::a#2 + $62 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] { } ) always clobbers reg byte a +Statement [68] loop::r#1 = loop::r#2 + 3 [ PLEX_SCREEN_PTR loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] { } ) always clobbers reg byte a +Statement [71] *BORDER_COLOR = 3 [ PLEX_SCREEN_PTR loop::angle#6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 ] { } ) always clobbers reg byte a +Statement [73] loop::angle#1 = loop::angle#6 + 3 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] { } ) always clobbers reg byte a reg byte x +Statement [74] *BORDER_COLOR = BLACK [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] { } ) always clobbers reg byte a +Statement [75] loop::$11 = *D011 & VIC_RST8 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::$11 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::$11 ] { } ) always clobbers reg byte a +Statement [78] *BORDER_COLOR = BLACK [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 ] { } ) always clobbers reg byte a +Statement [79] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 loop::plexFreeNextYpos1_return#0 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 loop::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y +Statement [84] if(loop::i1#1!=PLEX_COUNT-1+1) goto loop::@7 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#1 ] { } ) always clobbers reg byte a +Statement [85] *BORDER_COLOR = BLACK [ PLEX_SCREEN_PTR loop::angle#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } } ) always clobbers reg byte a +Statement [99] PLEX_SCREEN_PTR = SCREEN+$3f8 [ PLEX_SCREEN_PTR ] ( main:7::init:10::plexInit:18 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [107] if(mulf_init::sqr1_lo#2!=mulf_sqr1_lo+$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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [109] if(mulf_init::sqr2_lo#2!=mulf_sqr2_lo+$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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [110] *(mulf_sqr2_lo+$1ff) = *(mulf_sqr1_lo+$100) [ ] ( main:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [111] *(mulf_sqr2_hi+$1ff) = *(mulf_sqr1_hi+$100) [ ] ( main:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [113] *mulf_init::sqr2_lo#2 = mulf_sqr1_lo[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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [114] *mulf_init::sqr2_hi#2 = mulf_sqr1_hi[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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [116] mulf_init::x_255#1 = mulf_init::x_255#2 + mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [122] mulf_init::$1 = mulf_init::c#1 & 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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [128] *mulf_init::sqr1_lo#2 = 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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [130] *mulf_init::sqr1_hi#2 = 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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [132] mulf_init::sqr#1 = mulf_init::sqr#3 + 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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [136] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:7::init:10::memset:39 [ PLEX_SCREEN_PTR memset::dst#2 ] { } ) always clobbers reg byte a +Statement [138] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( main:7::init:10::memset:39 [ PLEX_SCREEN_PTR memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Statement [145] mulf8s::return#0 = (signed word)mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:7::loop:12::mulf8s:50 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [151] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:7::loop:12::plexSort:72 [ PLEX_SCREEN_PTR loop::angle#6 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a +Statement [154] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:7::loop:12::plexSort:72 [ PLEX_SCREEN_PTR loop::angle#6 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a +Statement [157] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [187] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [188] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [194] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [195] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [197] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) 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 [208] mulf8u_prepared::return#2 = mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a -Statement [209] mulf8s_prepared::m#0 = mulf8u_prepared::return#2 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [210] if(*mulf8s_prepared::memA>=0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [212] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (byte)mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [217] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (byte)*mulf8s_prepared::memA [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [221] *((byte*)CIA1) = *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) [ ] ( main:6::loop:11::keyboard_key_pressed:85::keyboard_matrix_read:198 [ loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::exit:13::keyboard_key_pressed:92::keyboard_matrix_read:198 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [222] keyboard_matrix_read::return#0 = ~ *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:6::loop:11::keyboard_key_pressed:85::keyboard_matrix_read:198 [ loop::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::exit:13::keyboard_key_pressed:92::keyboard_matrix_read:198 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [209] mulf8u_prepared::return#2 = mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a +Statement [210] mulf8s_prepared::m#0 = mulf8u_prepared::return#2 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [211] if(*mulf8s_prepared::memA>=0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [213] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (byte)mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [218] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (byte)*mulf8s_prepared::memA [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [222] *((byte*)CIA1) = *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) [ ] ( main:7::loop:12::keyboard_key_pressed:86::keyboard_matrix_read:199 [ PLEX_SCREEN_PTR loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:7::exit:14::keyboard_key_pressed:93::keyboard_matrix_read:199 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [223] keyboard_matrix_read::return#0 = ~ *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:7::loop:12::keyboard_key_pressed:86::keyboard_matrix_read:199 [ PLEX_SCREEN_PTR loop::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:7::exit:14::keyboard_key_pressed:93::keyboard_matrix_read:199 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) 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 [226] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL [ mulf8u_prepared::return#0 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143::mulf8u_prepared:207 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143::mulf8u_prepared:207 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a -Statement [1] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [3] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [4] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [16] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:6::init:9 [ ] { } ) always clobbers reg byte a -Statement [19] PLEX_PTR[init::i#2] = (byte)SPRITE/$40 [ init::i#2 ] ( main:6::init:9 [ init::i#2 ] { } ) always clobbers reg byte a -Statement [20] init::$10 = init::i#2 << 2 [ init::i#2 init::$10 ] ( main:6::init:9 [ init::i#2 init::$10 ] { } ) always clobbers reg byte a -Statement [21] init::$3 = init::$10 + init::i#2 [ init::i#2 init::$3 ] ( main:6::init:9 [ init::i#2 init::$3 ] { } ) always clobbers reg byte a -Statement [23] init::$9 = init::i#2 << 1 [ init::i#2 init::$4 init::$9 ] ( main:6::init:9 [ init::i#2 init::$4 init::$9 ] { } ) always clobbers reg byte a -Statement [24] PLEX_XPOS[init::$9] = init::$4 [ init::i#2 ] ( main:6::init:9 [ init::i#2 ] { } ) always clobbers reg byte a -Statement [25] init::$5 = init::i#2 << 3 [ init::i#2 init::$5 ] ( main:6::init:9 [ init::i#2 init::$5 ] { } ) always clobbers reg byte a -Statement [30] *SPRITES_ENABLE = $ff [ ] ( main:6::init:9 [ ] { } ) always clobbers reg byte a -Statement [32] SPRITES_COLOR[init::i1#2] = GREEN [ init::i1#2 ] ( main:6::init:9 [ init::i1#2 ] { } ) always clobbers reg byte a -Statement [42] if(*RASTER<$d8) goto loop::@2 [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a -Statement [43] *BORDER_COLOR = $f [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a -Statement [46] *BORDER_COLOR = 6 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a -Statement [50] mulf8s::return#2 = mulf8s::return#0 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a -Statement [51] loop::$1 = mulf8s::return#2 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [52] loop::$2 = loop::$1 << 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [53] loop::x#0 = loop::$2 + (signed word)$7d*$100 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [55] loop::$20 = loop::i#2 << 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [56] PLEX_XPOS[loop::$20] = loop::$4 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [60] mulf8s::return#3 = mulf8s::return#0 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [61] loop::$5 = mulf8s::return#3 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] { } ) always clobbers reg byte a -Statement [62] loop::$6 = loop::$5 << 1 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] { } ) always clobbers reg byte a -Statement [63] loop::y#0 = loop::$6 + (signed word)$7d*$100 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] { } ) always clobbers reg byte a -Statement [66] loop::a#1 = loop::a#2 + $62 [ loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] { } ) always clobbers reg byte a -Statement [67] loop::r#1 = loop::r#2 + 3 [ loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] ( main:6::loop:11 [ loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] { } ) always clobbers reg byte a -Statement [70] *BORDER_COLOR = 3 [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a -Statement [72] loop::angle#1 = loop::angle#6 + 3 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] { } ) always clobbers reg byte a reg byte x -Statement [73] *BORDER_COLOR = BLACK [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] { } ) always clobbers reg byte a -Statement [74] loop::$11 = *D011 & VIC_RST8 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::$11 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::$11 ] { } ) always clobbers reg byte a -Statement [77] *BORDER_COLOR = BLACK [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 ] { } ) always clobbers reg byte a -Statement [78] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 loop::plexFreeNextYpos1_return#0 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 loop::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y -Statement [83] if(loop::i1#1!=PLEX_COUNT-1+1) goto loop::@7 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#1 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#1 ] { } ) always clobbers reg byte a -Statement [84] *BORDER_COLOR = BLACK [ loop::angle#1 ] ( main:6::loop:11 [ loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } } ) always clobbers reg byte a -Statement [106] if(mulf_init::sqr1_lo#2!=mulf_sqr1_lo+$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:6::init:9::mulf_init:36 [ 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 [108] if(mulf_init::sqr2_lo#2!=mulf_sqr2_lo+$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:6::init:9::mulf_init:36 [ 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 [109] *(mulf_sqr2_lo+$1ff) = *(mulf_sqr1_lo+$100) [ ] ( main:6::init:9::mulf_init:36 [ ] { } ) always clobbers reg byte a -Statement [110] *(mulf_sqr2_hi+$1ff) = *(mulf_sqr1_hi+$100) [ ] ( main:6::init:9::mulf_init:36 [ ] { } ) always clobbers reg byte a -Statement [112] *mulf_init::sqr2_lo#2 = mulf_sqr1_lo[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:6::init:9::mulf_init:36 [ 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 [113] *mulf_init::sqr2_hi#2 = mulf_sqr1_hi[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:6::init:9::mulf_init:36 [ 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 [115] mulf_init::x_255#1 = mulf_init::x_255#2 + mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:6::init:9::mulf_init:36 [ 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 [121] mulf_init::$1 = mulf_init::c#1 & 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:6::init:9::mulf_init:36 [ 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 [127] *mulf_init::sqr1_lo#2 = 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:6::init:9::mulf_init:36 [ 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 [129] *mulf_init::sqr1_hi#2 = 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:6::init:9::mulf_init:36 [ 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 [131] mulf_init::sqr#1 = mulf_init::sqr#3 + 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:6::init:9::mulf_init:36 [ 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 [135] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:6::init:9::memset:38 [ memset::dst#2 ] { } ) always clobbers reg byte a -Statement [137] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( main:6::init:9::memset:38 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y -Statement [144] mulf8s::return#0 = (signed word)mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:6::loop:11::mulf8s:49 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [150] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:6::loop:11::plexSort:71 [ loop::angle#6 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a -Statement [153] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:6::loop:11::plexSort:71 [ loop::angle#6 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a -Statement [156] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [186] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [187] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [193] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [194] plex_sprite_msb = 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [196] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:81 [ loop::angle#1 loop::i1#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [227] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL [ mulf8u_prepared::return#0 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144::mulf8u_prepared:208 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144::mulf8u_prepared:208 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a +Statement [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [3] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [4] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [17] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:7::init:10 [ ] { } ) always clobbers reg byte a +Statement [20] PLEX_PTR[init::i#2] = (byte)SPRITE/$40 [ PLEX_SCREEN_PTR init::i#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 ] { } ) always clobbers reg byte a +Statement [21] init::$10 = init::i#2 << 2 [ PLEX_SCREEN_PTR init::i#2 init::$10 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 init::$10 ] { } ) always clobbers reg byte a +Statement [22] init::$3 = init::$10 + init::i#2 [ PLEX_SCREEN_PTR init::i#2 init::$3 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 init::$3 ] { } ) always clobbers reg byte a +Statement [24] init::$9 = init::i#2 << 1 [ PLEX_SCREEN_PTR init::i#2 init::$4 init::$9 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 init::$4 init::$9 ] { } ) always clobbers reg byte a +Statement [25] PLEX_XPOS[init::$9] = init::$4 [ PLEX_SCREEN_PTR init::i#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 ] { } ) always clobbers reg byte a +Statement [26] init::$5 = init::i#2 << 3 [ PLEX_SCREEN_PTR init::i#2 init::$5 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i#2 init::$5 ] { } ) always clobbers reg byte a +Statement [31] *SPRITES_ENABLE = $ff [ PLEX_SCREEN_PTR ] ( main:7::init:10 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [33] SPRITES_COLOR[init::i1#2] = GREEN [ PLEX_SCREEN_PTR init::i1#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::i1#2 ] { } ) always clobbers reg byte a +Statement [43] if(*RASTER<$d8) goto loop::@2 [ PLEX_SCREEN_PTR loop::angle#6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 ] { } ) always clobbers reg byte a +Statement [44] *BORDER_COLOR = $f [ PLEX_SCREEN_PTR loop::angle#6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 ] { } ) always clobbers reg byte a +Statement [47] *BORDER_COLOR = 6 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a +Statement [51] mulf8s::return#2 = mulf8s::return#0 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a +Statement [52] loop::$1 = mulf8s::return#2 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$1 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [53] loop::$2 = loop::$1 << 1 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [54] loop::x#0 = loop::$2 + (signed word)$7d*$100 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::x#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [56] loop::$20 = loop::i#2 << 1 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$4 loop::$20 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [57] PLEX_XPOS[loop::$20] = loop::$4 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [61] mulf8s::return#3 = mulf8s::return#0 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#3 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [62] loop::$5 = mulf8s::return#3 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$5 ] { } ) always clobbers reg byte a +Statement [63] loop::$6 = loop::$5 << 1 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::$6 ] { } ) always clobbers reg byte a +Statement [64] loop::y#0 = loop::$6 + (signed word)$7d*$100 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 loop::y#0 ] { } ) always clobbers reg byte a +Statement [67] loop::a#1 = loop::a#2 + $62 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::i#2 loop::a#1 ] { } ) always clobbers reg byte a +Statement [68] loop::r#1 = loop::r#2 + 3 [ PLEX_SCREEN_PTR loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 loop::i#2 loop::r#1 loop::a#1 ] { } ) always clobbers reg byte a +Statement [71] *BORDER_COLOR = 3 [ PLEX_SCREEN_PTR loop::angle#6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#6 ] { } ) always clobbers reg byte a +Statement [73] loop::angle#1 = loop::angle#6 + 3 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] { } ) always clobbers reg byte a reg byte x +Statement [74] *BORDER_COLOR = BLACK [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 ] { } ) always clobbers reg byte a +Statement [75] loop::$11 = *D011 & VIC_RST8 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::$11 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::$11 ] { } ) always clobbers reg byte a +Statement [78] *BORDER_COLOR = BLACK [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 ] { } ) always clobbers reg byte a +Statement [79] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 loop::plexFreeNextYpos1_return#0 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#5 loop::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y +Statement [84] if(loop::i1#1!=PLEX_COUNT-1+1) goto loop::@7 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::angle#1 loop::i1#1 ] { } ) always clobbers reg byte a +Statement [85] *BORDER_COLOR = BLACK [ PLEX_SCREEN_PTR loop::angle#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } } ) always clobbers reg byte a +Statement [99] PLEX_SCREEN_PTR = SCREEN+$3f8 [ PLEX_SCREEN_PTR ] ( main:7::init:10::plexInit:18 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [107] if(mulf_init::sqr1_lo#2!=mulf_sqr1_lo+$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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [109] if(mulf_init::sqr2_lo#2!=mulf_sqr2_lo+$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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [110] *(mulf_sqr2_lo+$1ff) = *(mulf_sqr1_lo+$100) [ ] ( main:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [111] *(mulf_sqr2_hi+$1ff) = *(mulf_sqr1_hi+$100) [ ] ( main:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [113] *mulf_init::sqr2_lo#2 = mulf_sqr1_lo[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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [114] *mulf_init::sqr2_hi#2 = mulf_sqr1_hi[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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [116] mulf_init::x_255#1 = mulf_init::x_255#2 + mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [122] mulf_init::$1 = mulf_init::c#1 & 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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [128] *mulf_init::sqr1_lo#2 = 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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [130] *mulf_init::sqr1_hi#2 = 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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [132] mulf_init::sqr#1 = mulf_init::sqr#3 + 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:7::init:10::mulf_init:37 [ PLEX_SCREEN_PTR 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 [136] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:7::init:10::memset:39 [ PLEX_SCREEN_PTR memset::dst#2 ] { } ) always clobbers reg byte a +Statement [138] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( main:7::init:10::memset:39 [ PLEX_SCREEN_PTR memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Statement [145] mulf8s::return#0 = (signed word)mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:7::loop:12::mulf8s:50 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [151] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:7::loop:12::plexSort:72 [ PLEX_SCREEN_PTR loop::angle#6 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a +Statement [154] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:7::loop:12::plexSort:72 [ PLEX_SCREEN_PTR loop::angle#6 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a +Statement [157] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [187] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [188] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [194] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [195] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [197] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:82 [ loop::angle#1 loop::i1#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) 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 [208] mulf8u_prepared::return#2 = mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a -Statement [209] mulf8s_prepared::m#0 = mulf8u_prepared::return#2 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [210] if(*mulf8s_prepared::memA>=0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [212] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (byte)mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [217] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (byte)*mulf8s_prepared::memA [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a -Statement [221] *((byte*)CIA1) = *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) [ ] ( main:6::loop:11::keyboard_key_pressed:85::keyboard_matrix_read:198 [ loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::exit:13::keyboard_key_pressed:92::keyboard_matrix_read:198 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [222] keyboard_matrix_read::return#0 = ~ *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:6::loop:11::keyboard_key_pressed:85::keyboard_matrix_read:198 [ loop::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::exit:13::keyboard_key_pressed:92::keyboard_matrix_read:198 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [209] mulf8u_prepared::return#2 = mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a +Statement [210] mulf8s_prepared::m#0 = mulf8u_prepared::return#2 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [211] if(*mulf8s_prepared::memA>=0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [213] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (byte)mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$11 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [218] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (byte)*mulf8s_prepared::memA [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } } ) always clobbers reg byte a +Statement [222] *((byte*)CIA1) = *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) [ ] ( main:7::loop:12::keyboard_key_pressed:86::keyboard_matrix_read:199 [ PLEX_SCREEN_PTR loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:7::exit:14::keyboard_key_pressed:93::keyboard_matrix_read:199 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [223] keyboard_matrix_read::return#0 = ~ *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:7::loop:12::keyboard_key_pressed:86::keyboard_matrix_read:199 [ PLEX_SCREEN_PTR loop::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:7::exit:14::keyboard_key_pressed:93::keyboard_matrix_read:199 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) 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 [226] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL [ mulf8u_prepared::return#0 ] ( main:6::loop:11::mulf8s:49::mulf8s_prepared:143::mulf8u_prepared:207 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:6::loop:11::mulf8s:59::mulf8s_prepared:143::mulf8u_prepared:207 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a +Statement [227] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL [ mulf8u_prepared::return#0 ] ( main:7::loop:12::mulf8s:50::mulf8s_prepared:144::mulf8u_prepared:208 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#2 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:7::loop:12::mulf8s:60::mulf8s_prepared:144::mulf8u_prepared:208 [ PLEX_SCREEN_PTR loop::angle#6 loop::r#2 loop::a#2 loop::i#2 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 loop::r#2 } { mulf8s::b#1 = mulf8s::b#2 mulf8s_prepared::b#0 } { mulf8s::return#0 = mulf8s::return#3 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a Potential registers zp[1]:2 [ init::i#2 init::i#1 ] : zp[1]:2 , reg byte x , reg byte y , Potential registers zp[1]:3 [ init::i1#2 init::i1#1 ] : zp[1]:3 , reg byte x , reg byte y , Potential registers zp[1]:4 [ loop::angle#6 loop::angle#1 ] : zp[1]:4 , @@ -3265,198 +3144,199 @@ Potential registers zp[1]:28 [ plexSort::m#2 plexSort::m#1 ] : zp[1]:28 , reg by Potential registers zp[1]:29 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] : zp[1]:29 , reg byte x , reg byte y , Potential registers zp[1]:30 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] : zp[1]:30 , reg byte x , reg byte y , Potential registers zp[2]:31 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] : zp[2]:31 , -Potential registers zp[1]:33 [ plex_show_idx ] : zp[1]:33 , -Potential registers zp[1]:34 [ plex_sprite_idx ] : zp[1]:34 , -Potential registers zp[1]:35 [ plex_sprite_msb ] : zp[1]:35 , -Potential registers zp[1]:36 [ plex_free_next ] : zp[1]:36 , -Potential registers zp[1]:37 [ init::$10 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:38 [ init::$3 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:39 [ init::$4 ] : zp[1]:39 , reg byte x , reg byte y , -Potential registers zp[1]:40 [ init::$9 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:41 [ init::$5 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:42 [ init::$6 ] : 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 [ keyboard_key_pressed::return#2 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:67 [ exit::$0 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:68 [ mulf_init::$1 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:69 [ mulf_init::$4 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:70 [ mulf_init::$5 ] : zp[1]:70 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:71 [ mulf8u_prepare::a#0 ] : zp[1]:71 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:72 [ mulf8s_prepared::b#0 ] : zp[1]:72 , reg byte y , -Potential registers zp[2]:73 [ mulf8s::return#0 ] : zp[2]:73 , -Potential registers zp[1]:75 [ plexSort::nxt_idx#0 ] : zp[1]:75 , reg byte x , reg byte y , -Potential registers zp[1]:76 [ plexSort::nxt_y#0 ] : zp[1]:76 , reg byte x , reg byte y , -Potential registers zp[1]:77 [ plexSort::s#2 ] : zp[1]:77 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:78 [ plexShowSprite::plex_sprite_idx2#0 ] : zp[1]:78 , -Potential registers zp[1]:79 [ plexShowSprite::plexFreeAdd1_ypos#0 ] : zp[1]:79 , reg byte a , reg byte x , -Potential registers zp[1]:80 [ plexShowSprite::plexFreeAdd1_$0 ] : zp[1]:80 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:81 [ plexShowSprite::plexFreeAdd1_$1 ] : zp[1]:81 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:82 [ plexShowSprite::plexFreeAdd1_$2 ] : zp[1]:82 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:83 [ plexShowSprite::xpos_idx#0 ] : zp[1]:83 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:84 [ plexShowSprite::$11 ] : zp[1]:84 , reg byte x , -Potential registers zp[1]:85 [ plexShowSprite::$2 ] : zp[1]:85 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:86 [ plexShowSprite::$3 ] : zp[1]:86 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:87 [ plexShowSprite::$9 ] : zp[1]:87 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:88 [ plexShowSprite::$5 ] : zp[1]:88 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:89 [ plexShowSprite::$6 ] : zp[1]:89 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:90 [ keyboard_matrix_read::return#2 ] : zp[1]:90 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:91 [ keyboard_key_pressed::$2 ] : zp[1]:91 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:92 [ keyboard_key_pressed::return#0 ] : zp[1]:92 , reg byte a , reg byte x , reg byte y , -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::$6 ] : zp[1]:96 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:97 [ mulf8s_prepared::$11 ] : zp[1]:97 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:98 [ mulf8s_prepared::$9 ] : zp[1]:98 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:99 [ mulf8s_prepared::$12 ] : zp[1]:99 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:100 [ keyboard_matrix_read::return#0 ] : zp[1]:100 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:101 [ mulf8u_prepared::return#0 ] : zp[2]:101 , +Potential registers zp[2]:33 [ PLEX_SCREEN_PTR ] : zp[2]:33 , +Potential registers zp[1]:35 [ plex_show_idx ] : zp[1]:35 , +Potential registers zp[1]:36 [ plex_sprite_idx ] : zp[1]:36 , +Potential registers zp[1]:37 [ plex_sprite_msb ] : zp[1]:37 , +Potential registers zp[1]:38 [ plex_free_next ] : zp[1]:38 , +Potential registers zp[1]:39 [ init::$10 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:40 [ init::$3 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:41 [ init::$4 ] : zp[1]:41 , reg byte x , reg byte y , +Potential registers zp[1]:42 [ init::$9 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:43 [ init::$5 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:44 [ init::$6 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:45 [ mulf8s::return#2 ] : zp[2]:45 , +Potential registers zp[2]:47 [ loop::$1 ] : zp[2]:47 , +Potential registers zp[2]:49 [ loop::$2 ] : zp[2]:49 , +Potential registers zp[2]:51 [ loop::x#0 ] : zp[2]:51 , +Potential registers zp[1]:53 [ loop::$4 ] : zp[1]:53 , reg byte x , reg byte y , +Potential registers zp[1]:54 [ loop::$20 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:55 [ mulf8s::return#3 ] : zp[2]:55 , +Potential registers zp[2]:57 [ loop::$5 ] : zp[2]:57 , +Potential registers zp[2]:59 [ loop::$6 ] : zp[2]:59 , +Potential registers zp[2]:61 [ loop::y#0 ] : zp[2]:61 , +Potential registers zp[1]:63 [ loop::$8 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:64 [ loop::$11 ] : zp[1]:64 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:65 [ loop::plexFreeNextYpos1_return#0 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:66 [ keyboard_key_pressed::return#3 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:67 [ loop::$18 ] : zp[1]:67 , reg byte a , 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 [ exit::$0 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:70 [ mulf_init::$1 ] : zp[1]:70 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:71 [ mulf_init::$4 ] : zp[1]:71 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:72 [ mulf_init::$5 ] : zp[1]:72 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:73 [ mulf8u_prepare::a#0 ] : zp[1]:73 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:74 [ mulf8s_prepared::b#0 ] : zp[1]:74 , reg byte y , +Potential registers zp[2]:75 [ mulf8s::return#0 ] : zp[2]:75 , +Potential registers zp[1]:77 [ plexSort::nxt_idx#0 ] : zp[1]:77 , reg byte x , reg byte y , +Potential registers zp[1]:78 [ plexSort::nxt_y#0 ] : zp[1]:78 , reg byte x , reg byte y , +Potential registers zp[1]:79 [ plexSort::s#2 ] : zp[1]:79 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:80 [ plexShowSprite::plex_sprite_idx2#0 ] : zp[1]:80 , +Potential registers zp[1]:81 [ plexShowSprite::plexFreeAdd1_ypos#0 ] : zp[1]:81 , reg byte a , reg byte x , +Potential registers zp[1]:82 [ plexShowSprite::plexFreeAdd1_$0 ] : zp[1]:82 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:83 [ plexShowSprite::plexFreeAdd1_$1 ] : zp[1]:83 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:84 [ plexShowSprite::plexFreeAdd1_$2 ] : zp[1]:84 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:85 [ plexShowSprite::xpos_idx#0 ] : zp[1]:85 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:86 [ plexShowSprite::$11 ] : zp[1]:86 , reg byte x , +Potential registers zp[1]:87 [ plexShowSprite::$2 ] : zp[1]:87 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:88 [ plexShowSprite::$3 ] : zp[1]:88 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:89 [ plexShowSprite::$9 ] : zp[1]:89 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:90 [ plexShowSprite::$5 ] : zp[1]:90 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:91 [ plexShowSprite::$6 ] : zp[1]:91 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:92 [ keyboard_matrix_read::return#2 ] : zp[1]:92 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:93 [ keyboard_key_pressed::$2 ] : zp[1]:93 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:94 [ keyboard_key_pressed::return#0 ] : zp[1]:94 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:95 [ mulf8u_prepared::b#0 ] : zp[1]:95 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:96 [ mulf8u_prepared::return#2 ] : zp[2]:96 , +Potential registers zp[1]:98 [ mulf8s_prepared::$6 ] : zp[1]:98 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:99 [ mulf8s_prepared::$11 ] : zp[1]:99 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:100 [ mulf8s_prepared::$9 ] : zp[1]:100 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:101 [ mulf8s_prepared::$12 ] : zp[1]:101 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:102 [ keyboard_matrix_read::return#0 ] : zp[1]:102 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:103 [ mulf8u_prepared::return#0 ] : zp[2]:103 , REGISTER UPLIFT SCOPES -Uplift Scope [plexSort] 36,166,672.83: zp[1]:29 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] 3,000,003: zp[1]:30 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] 2,000,002: zp[1]:77 [ plexSort::s#2 ] 1,916,668.58: zp[1]:28 [ plexSort::m#2 plexSort::m#1 ] 1,500,000.38: zp[1]:76 [ plexSort::nxt_y#0 ] 300,000.3: zp[1]:75 [ plexSort::nxt_idx#0 ] -Uplift Scope [mulf8u_prepared] 11,000,002: zp[1]:93 [ mulf8u_prepared::b#0 ] 3,666,667.33: zp[2]:101 [ mulf8u_prepared::return#0 ] 2,000,002: zp[2]:94 [ mulf8u_prepared::return#2 ] -Uplift Scope [mulf8s_prepared] 6,916,673.58: zp[2]:31 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] 2,000,002: zp[1]:96 [ mulf8s_prepared::$6 ] 2,000,002: zp[1]:97 [ mulf8s_prepared::$11 ] 2,000,002: zp[1]:98 [ mulf8s_prepared::$9 ] 2,000,002: zp[1]:99 [ mulf8s_prepared::$12 ] 110,000.2: zp[1]:72 [ mulf8s_prepared::b#0 ] -Uplift Scope [plexShowSprite] 200,002: zp[1]:80 [ plexShowSprite::plexFreeAdd1_$0 ] 200,002: zp[1]:81 [ plexShowSprite::plexFreeAdd1_$1 ] 200,002: zp[1]:82 [ plexShowSprite::plexFreeAdd1_$2 ] 200,002: zp[1]:83 [ plexShowSprite::xpos_idx#0 ] 200,002: zp[1]:85 [ plexShowSprite::$2 ] 200,002: zp[1]:86 [ plexShowSprite::$3 ] 200,002: zp[1]:87 [ plexShowSprite::$9 ] 200,002: zp[1]:88 [ plexShowSprite::$5 ] 200,002: zp[1]:89 [ plexShowSprite::$6 ] 150,001.5: zp[1]:79 [ plexShowSprite::plexFreeAdd1_ypos#0 ] 100,001: zp[1]:84 [ plexShowSprite::$11 ] 25,000.25: zp[1]:78 [ plexShowSprite::plex_sprite_idx2#0 ] -Uplift Scope [mulf8u_prepare] 1,100,002: zp[1]:71 [ mulf8u_prepare::a#0 ] -Uplift Scope [loop] 55,001: zp[1]:63 [ loop::plexFreeNextYpos1_return#0 ] 20,002: zp[2]:45 [ loop::$1 ] 20,002: zp[2]:47 [ loop::$2 ] 20,002: zp[2]:49 [ loop::x#0 ] 20,002: zp[1]:52 [ loop::$20 ] 20,002: zp[2]:55 [ loop::$5 ] 20,002: zp[2]:57 [ loop::$6 ] 20,002: zp[2]:59 [ loop::y#0 ] 20,002: zp[1]:61 [ loop::$8 ] 20,002: zp[1]:62 [ loop::$11 ] 18,335.17: zp[1]:8 [ loop::i1#5 loop::i1#1 ] 16,740.8: zp[1]:7 [ loop::i#2 loop::i#1 ] 10,001: zp[1]:51 [ loop::$4 ] 8,955.12: zp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ] 8,485.7: zp[1]:5 [ loop::r#2 loop::r#1 ] 2,002: zp[1]:65 [ loop::$18 ] 214.64: zp[1]:4 [ loop::angle#6 loop::angle#1 ] -Uplift Scope [mulf_init] 43,337.67: zp[2]:22 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 24,446.89: zp[2]:16 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 22,859.43: zp[2]:10 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 21,002.1: zp[1]:15 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 20,002: zp[1]:68 [ mulf_init::$1 ] 20,002: zp[1]:69 [ mulf_init::$4 ] 20,002: zp[1]:70 [ mulf_init::$5 ] 14,001.4: zp[1]:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 13,751.38: zp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ] 12,308.92: zp[1]:12 [ mulf_init::c#2 mulf_init::c#1 ] 10,834.42: zp[2]:19 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 9,167.58: zp[2]:13 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] -Uplift Scope [mulf8s] 80,005: zp[1]:27 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] 40,004: zp[1]:26 [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] 30,000.75: zp[2]:73 [ mulf8s::return#0 ] 20,002: zp[2]:43 [ mulf8s::return#2 ] 20,002: zp[2]:53 [ mulf8s::return#3 ] -Uplift Scope [keyboard_matrix_read] 36,667.33: zp[1]:100 [ keyboard_matrix_read::return#0 ] 20,002: zp[1]:90 [ keyboard_matrix_read::return#2 ] -Uplift Scope [] 12,978.91: zp[1]:35 [ plex_sprite_msb ] 10,408.33: zp[1]:33 [ plex_show_idx ] 8,913.2: zp[1]:34 [ plex_sprite_idx ] 8,205.31: zp[1]:36 [ plex_free_next ] +Uplift Scope [plexSort] 36,166,672.83: zp[1]:29 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] 3,000,003: zp[1]:30 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] 2,000,002: zp[1]:79 [ plexSort::s#2 ] 1,916,668.58: zp[1]:28 [ plexSort::m#2 plexSort::m#1 ] 1,500,000.38: zp[1]:78 [ plexSort::nxt_y#0 ] 300,000.3: zp[1]:77 [ plexSort::nxt_idx#0 ] +Uplift Scope [mulf8u_prepared] 11,000,002: zp[1]:95 [ mulf8u_prepared::b#0 ] 3,666,667.33: zp[2]:103 [ mulf8u_prepared::return#0 ] 2,000,002: zp[2]:96 [ mulf8u_prepared::return#2 ] +Uplift Scope [mulf8s_prepared] 6,916,673.58: zp[2]:31 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] 2,000,002: zp[1]:98 [ mulf8s_prepared::$6 ] 2,000,002: zp[1]:99 [ mulf8s_prepared::$11 ] 2,000,002: zp[1]:100 [ mulf8s_prepared::$9 ] 2,000,002: zp[1]:101 [ mulf8s_prepared::$12 ] 110,000.2: zp[1]:74 [ mulf8s_prepared::b#0 ] +Uplift Scope [plexShowSprite] 200,002: zp[1]:82 [ plexShowSprite::plexFreeAdd1_$0 ] 200,002: zp[1]:83 [ plexShowSprite::plexFreeAdd1_$1 ] 200,002: zp[1]:84 [ plexShowSprite::plexFreeAdd1_$2 ] 200,002: zp[1]:85 [ plexShowSprite::xpos_idx#0 ] 200,002: zp[1]:87 [ plexShowSprite::$2 ] 200,002: zp[1]:88 [ plexShowSprite::$3 ] 200,002: zp[1]:89 [ plexShowSprite::$9 ] 200,002: zp[1]:90 [ plexShowSprite::$5 ] 200,002: zp[1]:91 [ plexShowSprite::$6 ] 150,001.5: zp[1]:81 [ plexShowSprite::plexFreeAdd1_ypos#0 ] 100,001: zp[1]:86 [ plexShowSprite::$11 ] 25,000.25: zp[1]:80 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplift Scope [mulf8u_prepare] 1,100,002: zp[1]:73 [ mulf8u_prepare::a#0 ] +Uplift Scope [loop] 55,001: zp[1]:65 [ loop::plexFreeNextYpos1_return#0 ] 20,002: zp[2]:47 [ loop::$1 ] 20,002: zp[2]:49 [ loop::$2 ] 20,002: zp[2]:51 [ loop::x#0 ] 20,002: zp[1]:54 [ loop::$20 ] 20,002: zp[2]:57 [ loop::$5 ] 20,002: zp[2]:59 [ loop::$6 ] 20,002: zp[2]:61 [ loop::y#0 ] 20,002: zp[1]:63 [ loop::$8 ] 20,002: zp[1]:64 [ loop::$11 ] 18,335.17: zp[1]:8 [ loop::i1#5 loop::i1#1 ] 16,740.8: zp[1]:7 [ loop::i#2 loop::i#1 ] 10,001: zp[1]:53 [ loop::$4 ] 8,955.12: zp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ] 8,485.7: zp[1]:5 [ loop::r#2 loop::r#1 ] 2,002: zp[1]:67 [ loop::$18 ] 214.64: zp[1]:4 [ loop::angle#6 loop::angle#1 ] +Uplift Scope [mulf_init] 43,337.67: zp[2]:22 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 24,446.89: zp[2]:16 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 22,859.43: zp[2]:10 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 21,002.1: zp[1]:15 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 20,002: zp[1]:70 [ mulf_init::$1 ] 20,002: zp[1]:71 [ mulf_init::$4 ] 20,002: zp[1]:72 [ mulf_init::$5 ] 14,001.4: zp[1]:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 13,751.38: zp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ] 12,308.92: zp[1]:12 [ mulf_init::c#2 mulf_init::c#1 ] 10,834.42: zp[2]:19 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 9,167.58: zp[2]:13 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Uplift Scope [mulf8s] 80,005: zp[1]:27 [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] 40,004: zp[1]:26 [ mulf8s::mulf8s_prepare1_a#0 mulf8s::a#1 mulf8s::a#0 ] 30,000.75: zp[2]:75 [ mulf8s::return#0 ] 20,002: zp[2]:45 [ mulf8s::return#2 ] 20,002: zp[2]:55 [ mulf8s::return#3 ] +Uplift Scope [keyboard_matrix_read] 36,667.33: zp[1]:102 [ keyboard_matrix_read::return#0 ] 20,002: zp[1]:92 [ keyboard_matrix_read::return#2 ] +Uplift Scope [] 12,978.91: zp[1]:37 [ plex_sprite_msb ] 10,408.33: zp[1]:35 [ plex_show_idx ] 8,913.2: zp[1]:36 [ plex_sprite_idx ] 8,205.31: zp[1]:38 [ plex_free_next ] 952.87: zp[2]:33 [ PLEX_SCREEN_PTR ] Uplift Scope [plexInit] 35,003.5: zp[1]:9 [ plexInit::i#2 plexInit::i#1 ] Uplift Scope [memset] 33,336.67: zp[2]:24 [ memset::dst#2 memset::dst#1 ] -Uplift Scope [keyboard_key_pressed] 20,002: zp[1]:91 [ keyboard_key_pressed::$2 ] 3,000.75: zp[1]:92 [ keyboard_key_pressed::return#0 ] 2,002: zp[1]:64 [ keyboard_key_pressed::return#3 ] 2,002: zp[1]:66 [ keyboard_key_pressed::return#2 ] -Uplift Scope [init] 3,003: zp[1]:3 [ init::i1#2 init::i1#1 ] 2,302.3: zp[1]:2 [ init::i#2 init::i#1 ] 2,002: zp[1]:37 [ init::$10 ] 2,002: zp[1]:38 [ init::$3 ] 2,002: zp[1]:40 [ init::$9 ] 2,002: zp[1]:41 [ init::$5 ] 2,002: zp[1]:42 [ init::$6 ] 1,001: zp[1]:39 [ init::$4 ] -Uplift Scope [exit] 2,002: zp[1]:67 [ exit::$0 ] +Uplift Scope [keyboard_key_pressed] 20,002: zp[1]:93 [ keyboard_key_pressed::$2 ] 3,000.75: zp[1]:94 [ keyboard_key_pressed::return#0 ] 2,002: zp[1]:66 [ keyboard_key_pressed::return#3 ] 2,002: zp[1]:68 [ keyboard_key_pressed::return#2 ] +Uplift Scope [init] 3,003: zp[1]:3 [ init::i1#2 init::i1#1 ] 2,302.3: zp[1]:2 [ init::i#2 init::i#1 ] 2,002: zp[1]:39 [ init::$10 ] 2,002: zp[1]:40 [ init::$3 ] 2,002: zp[1]:42 [ init::$9 ] 2,002: zp[1]:43 [ init::$5 ] 2,002: zp[1]:44 [ init::$6 ] 1,001: zp[1]:41 [ init::$4 ] +Uplift Scope [exit] 2,002: zp[1]:69 [ exit::$0 ] Uplift Scope [MOS6526_CIA] Uplift Scope [MOS6569_VICII] Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [__start] -Uplifting [plexSort] best 105518 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]:28 [ plexSort::m#2 plexSort::m#1 ] zp[1]:76 [ plexSort::nxt_y#0 ] zp[1]:75 [ plexSort::nxt_idx#0 ] +Uplifting [plexSort] best 105566 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]:28 [ plexSort::m#2 plexSort::m#1 ] zp[1]:78 [ plexSort::nxt_y#0 ] zp[1]:77 [ plexSort::nxt_idx#0 ] Limited combination testing to 100 combinations of 972 possible. -Uplifting [mulf8u_prepared] best 105512 combination reg byte a [ mulf8u_prepared::b#0 ] zp[2]:101 [ mulf8u_prepared::return#0 ] zp[2]:94 [ mulf8u_prepared::return#2 ] -Uplifting [mulf8s_prepared] best 105488 combination zp[2]:31 [ 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::$6 ] reg byte a [ mulf8s_prepared::$11 ] reg byte a [ mulf8s_prepared::$9 ] reg byte a [ mulf8s_prepared::$12 ] zp[1]:72 [ mulf8s_prepared::b#0 ] +Uplifting [mulf8u_prepared] best 105560 combination reg byte a [ mulf8u_prepared::b#0 ] zp[2]:103 [ mulf8u_prepared::return#0 ] zp[2]:96 [ mulf8u_prepared::return#2 ] +Uplifting [mulf8s_prepared] best 105536 combination zp[2]:31 [ 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::$6 ] reg byte a [ mulf8s_prepared::$11 ] reg byte a [ mulf8s_prepared::$9 ] reg byte a [ mulf8s_prepared::$12 ] zp[1]:74 [ mulf8s_prepared::b#0 ] Limited combination testing to 100 combinations of 512 possible. -Uplifting [plexShowSprite] best 105468 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$1 ] reg byte a [ plexShowSprite::plexFreeAdd1_$2 ] reg byte a [ plexShowSprite::xpos_idx#0 ] zp[1]:85 [ plexShowSprite::$2 ] zp[1]:86 [ plexShowSprite::$3 ] zp[1]:87 [ plexShowSprite::$9 ] zp[1]:88 [ plexShowSprite::$5 ] zp[1]:89 [ plexShowSprite::$6 ] zp[1]:79 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:84 [ plexShowSprite::$11 ] zp[1]:78 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplifting [plexShowSprite] best 105516 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$1 ] reg byte a [ plexShowSprite::plexFreeAdd1_$2 ] reg byte a [ plexShowSprite::xpos_idx#0 ] zp[1]:87 [ plexShowSprite::$2 ] zp[1]:88 [ plexShowSprite::$3 ] zp[1]:89 [ plexShowSprite::$9 ] zp[1]:90 [ plexShowSprite::$5 ] zp[1]:91 [ plexShowSprite::$6 ] zp[1]:81 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:86 [ plexShowSprite::$11 ] zp[1]:80 [ plexShowSprite::plex_sprite_idx2#0 ] Limited combination testing to 100 combinations of 1572864 possible. -Uplifting [mulf8u_prepare] best 105462 combination reg byte a [ mulf8u_prepare::a#0 ] -Uplifting [loop] best 103862 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]:8 [ loop::i1#5 loop::i1#1 ] zp[1]:7 [ loop::i#2 loop::i#1 ] zp[1]:51 [ loop::$4 ] zp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ] zp[1]:5 [ loop::r#2 loop::r#1 ] zp[1]:65 [ loop::$18 ] zp[1]:4 [ loop::angle#6 loop::angle#1 ] +Uplifting [mulf8u_prepare] best 105510 combination reg byte a [ mulf8u_prepare::a#0 ] +Uplifting [loop] best 103910 combination zp[1]:65 [ loop::plexFreeNextYpos1_return#0 ] zp[2]:47 [ loop::$1 ] zp[2]:49 [ loop::$2 ] zp[2]:51 [ loop::x#0 ] reg byte a [ loop::$20 ] zp[2]:57 [ loop::$5 ] zp[2]:59 [ loop::$6 ] zp[2]:61 [ loop::y#0 ] reg byte a [ loop::$8 ] reg byte a [ loop::$11 ] zp[1]:8 [ loop::i1#5 loop::i1#1 ] zp[1]:7 [ loop::i#2 loop::i#1 ] zp[1]:53 [ loop::$4 ] zp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ] zp[1]:5 [ loop::r#2 loop::r#1 ] zp[1]:67 [ loop::$18 ] zp[1]:4 [ loop::angle#6 loop::angle#1 ] Limited combination testing to 100 combinations of 24576 possible. -Uplifting [mulf_init] best 103612 combination zp[2]:22 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp[2]:16 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp[2]:10 [ 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]:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ] zp[1]:12 [ mulf_init::c#2 mulf_init::c#1 ] zp[2]:19 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp[2]:13 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Uplifting [mulf_init] best 103660 combination zp[2]:22 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp[2]:16 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp[2]:10 [ 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]:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ] zp[1]:12 [ mulf_init::c#2 mulf_init::c#1 ] zp[2]:19 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp[2]:13 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [mulf8s] best 102406 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]:73 [ mulf8s::return#0 ] zp[2]:43 [ mulf8s::return#2 ] zp[2]:53 [ mulf8s::return#3 ] -Uplifting [keyboard_matrix_read] best 102394 combination reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ keyboard_matrix_read::return#2 ] -Uplifting [] best 102394 combination zp[1]:35 [ plex_sprite_msb ] zp[1]:33 [ plex_show_idx ] zp[1]:34 [ plex_sprite_idx ] zp[1]:36 [ plex_free_next ] -Uplifting [plexInit] best 102274 combination reg byte x [ plexInit::i#2 plexInit::i#1 ] -Uplifting [memset] best 102274 combination zp[2]:24 [ memset::dst#2 memset::dst#1 ] -Uplifting [keyboard_key_pressed] best 102085 combination reg byte a [ keyboard_key_pressed::$2 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::return#3 ] reg byte a [ keyboard_key_pressed::return#2 ] +Uplifting [mulf8s] best 102454 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]:75 [ mulf8s::return#0 ] zp[2]:45 [ mulf8s::return#2 ] zp[2]:55 [ mulf8s::return#3 ] +Uplifting [keyboard_matrix_read] best 102442 combination reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ keyboard_matrix_read::return#2 ] +Uplifting [] best 102442 combination zp[1]:37 [ plex_sprite_msb ] zp[1]:35 [ plex_show_idx ] zp[1]:36 [ plex_sprite_idx ] zp[1]:38 [ plex_free_next ] zp[2]:33 [ PLEX_SCREEN_PTR ] +Uplifting [plexInit] best 102322 combination reg byte x [ plexInit::i#2 plexInit::i#1 ] +Uplifting [memset] best 102322 combination zp[2]:24 [ memset::dst#2 memset::dst#1 ] +Uplifting [keyboard_key_pressed] best 102133 combination reg byte a [ keyboard_key_pressed::$2 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::return#3 ] reg byte a [ keyboard_key_pressed::return#2 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [init] best 101865 combination reg byte x [ init::i1#2 init::i1#1 ] zp[1]:2 [ init::i#2 init::i#1 ] reg byte a [ init::$10 ] reg byte a [ init::$3 ] zp[1]:40 [ init::$9 ] zp[1]:41 [ init::$5 ] zp[1]:42 [ init::$6 ] zp[1]:39 [ init::$4 ] +Uplifting [init] best 101913 combination reg byte x [ init::i1#2 init::i1#1 ] zp[1]:2 [ init::i#2 init::i#1 ] reg byte a [ init::$10 ] reg byte a [ init::$3 ] zp[1]:42 [ init::$9 ] zp[1]:43 [ init::$5 ] zp[1]:44 [ init::$6 ] zp[1]:41 [ init::$4 ] Limited combination testing to 100 combinations of 27648 possible. -Uplifting [exit] best 101805 combination reg byte a [ exit::$0 ] -Uplifting [MOS6526_CIA] best 101805 combination -Uplifting [MOS6569_VICII] best 101805 combination -Uplifting [MOS6581_SID] best 101805 combination -Uplifting [main] best 101805 combination -Uplifting [__start] best 101805 combination +Uplifting [exit] best 101853 combination reg byte a [ exit::$0 ] +Uplifting [MOS6526_CIA] best 101853 combination +Uplifting [MOS6569_VICII] best 101853 combination +Uplifting [MOS6581_SID] best 101853 combination +Uplifting [main] best 101853 combination +Uplifting [__start] best 101853 combination Attempting to uplift remaining variables inzp[1]:28 [ plexSort::m#2 plexSort::m#1 ] -Uplifting [plexSort] best 101805 combination zp[1]:28 [ plexSort::m#2 plexSort::m#1 ] -Attempting to uplift remaining variables inzp[1]:76 [ plexSort::nxt_y#0 ] -Uplifting [plexSort] best 101805 combination zp[1]:76 [ plexSort::nxt_y#0 ] -Attempting to uplift remaining variables inzp[1]:75 [ plexSort::nxt_idx#0 ] -Uplifting [plexSort] best 101805 combination zp[1]:75 [ plexSort::nxt_idx#0 ] -Attempting to uplift remaining variables inzp[1]:85 [ plexShowSprite::$2 ] -Uplifting [plexShowSprite] best 101799 combination reg byte a [ plexShowSprite::$2 ] -Attempting to uplift remaining variables inzp[1]:86 [ plexShowSprite::$3 ] -Uplifting [plexShowSprite] best 101793 combination reg byte a [ plexShowSprite::$3 ] -Attempting to uplift remaining variables inzp[1]:87 [ plexShowSprite::$9 ] -Uplifting [plexShowSprite] best 101787 combination reg byte a [ plexShowSprite::$9 ] -Attempting to uplift remaining variables inzp[1]:88 [ plexShowSprite::$5 ] -Uplifting [plexShowSprite] best 101781 combination reg byte x [ plexShowSprite::$5 ] -Attempting to uplift remaining variables inzp[1]:89 [ plexShowSprite::$6 ] -Uplifting [plexShowSprite] best 101777 combination reg byte a [ plexShowSprite::$6 ] -Attempting to uplift remaining variables inzp[1]:79 [ plexShowSprite::plexFreeAdd1_ypos#0 ] -Uplifting [plexShowSprite] best 101768 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] -Attempting to uplift remaining variables inzp[1]:72 [ mulf8s_prepared::b#0 ] -Uplifting [mulf8s_prepared] best 101768 combination zp[1]:72 [ mulf8s_prepared::b#0 ] -Attempting to uplift remaining variables inzp[1]:84 [ plexShowSprite::$11 ] -Uplifting [plexShowSprite] best 101761 combination reg byte x [ plexShowSprite::$11 ] -Attempting to uplift remaining variables inzp[1]:63 [ loop::plexFreeNextYpos1_return#0 ] -Uplifting [loop] best 101761 combination zp[1]:63 [ loop::plexFreeNextYpos1_return#0 ] -Attempting to uplift remaining variables inzp[1]:78 [ plexShowSprite::plex_sprite_idx2#0 ] -Uplifting [plexShowSprite] best 101761 combination zp[1]:78 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplifting [plexSort] best 101853 combination zp[1]:28 [ plexSort::m#2 plexSort::m#1 ] +Attempting to uplift remaining variables inzp[1]:78 [ plexSort::nxt_y#0 ] +Uplifting [plexSort] best 101853 combination zp[1]:78 [ plexSort::nxt_y#0 ] +Attempting to uplift remaining variables inzp[1]:77 [ plexSort::nxt_idx#0 ] +Uplifting [plexSort] best 101853 combination zp[1]:77 [ plexSort::nxt_idx#0 ] +Attempting to uplift remaining variables inzp[1]:87 [ plexShowSprite::$2 ] +Uplifting [plexShowSprite] best 101847 combination reg byte a [ plexShowSprite::$2 ] +Attempting to uplift remaining variables inzp[1]:88 [ plexShowSprite::$3 ] +Uplifting [plexShowSprite] best 101841 combination reg byte a [ plexShowSprite::$3 ] +Attempting to uplift remaining variables inzp[1]:89 [ plexShowSprite::$9 ] +Uplifting [plexShowSprite] best 101835 combination reg byte a [ plexShowSprite::$9 ] +Attempting to uplift remaining variables inzp[1]:90 [ plexShowSprite::$5 ] +Uplifting [plexShowSprite] best 101829 combination reg byte x [ plexShowSprite::$5 ] +Attempting to uplift remaining variables inzp[1]:91 [ plexShowSprite::$6 ] +Uplifting [plexShowSprite] best 101825 combination reg byte a [ plexShowSprite::$6 ] +Attempting to uplift remaining variables inzp[1]:81 [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Uplifting [plexShowSprite] best 101816 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Attempting to uplift remaining variables inzp[1]:74 [ mulf8s_prepared::b#0 ] +Uplifting [mulf8s_prepared] best 101816 combination zp[1]:74 [ mulf8s_prepared::b#0 ] +Attempting to uplift remaining variables inzp[1]:86 [ plexShowSprite::$11 ] +Uplifting [plexShowSprite] best 101809 combination reg byte x [ plexShowSprite::$11 ] +Attempting to uplift remaining variables inzp[1]:65 [ loop::plexFreeNextYpos1_return#0 ] +Uplifting [loop] best 101809 combination zp[1]:65 [ loop::plexFreeNextYpos1_return#0 ] +Attempting to uplift remaining variables inzp[1]:80 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplifting [plexShowSprite] best 101809 combination zp[1]:80 [ plexShowSprite::plex_sprite_idx2#0 ] Attempting to uplift remaining variables inzp[1]:8 [ loop::i1#5 loop::i1#1 ] -Uplifting [loop] best 101761 combination zp[1]:8 [ loop::i1#5 loop::i1#1 ] +Uplifting [loop] best 101809 combination zp[1]:8 [ loop::i1#5 loop::i1#1 ] Attempting to uplift remaining variables inzp[1]:7 [ loop::i#2 loop::i#1 ] -Uplifting [loop] best 101761 combination zp[1]:7 [ loop::i#2 loop::i#1 ] +Uplifting [loop] best 101809 combination zp[1]:7 [ loop::i#2 loop::i#1 ] Attempting to uplift remaining variables inzp[1]:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Uplifting [mulf_init] best 101621 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Uplifting [mulf_init] best 101669 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] Attempting to uplift remaining variables inzp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ] -Uplifting [mulf_init] best 101621 combination zp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ] -Attempting to uplift remaining variables inzp[1]:35 [ plex_sprite_msb ] -Uplifting [] best 101621 combination zp[1]:35 [ plex_sprite_msb ] +Uplifting [mulf_init] best 101669 combination zp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ] +Attempting to uplift remaining variables inzp[1]:37 [ plex_sprite_msb ] +Uplifting [] best 101669 combination zp[1]:37 [ plex_sprite_msb ] Attempting to uplift remaining variables inzp[1]:12 [ mulf_init::c#2 mulf_init::c#1 ] -Uplifting [mulf_init] best 101621 combination zp[1]:12 [ mulf_init::c#2 mulf_init::c#1 ] -Attempting to uplift remaining variables inzp[1]:33 [ plex_show_idx ] -Uplifting [] best 101621 combination zp[1]:33 [ plex_show_idx ] -Attempting to uplift remaining variables inzp[1]:51 [ loop::$4 ] -Uplifting [loop] best 101221 combination reg byte x [ loop::$4 ] +Uplifting [mulf_init] best 101669 combination zp[1]:12 [ mulf_init::c#2 mulf_init::c#1 ] +Attempting to uplift remaining variables inzp[1]:35 [ plex_show_idx ] +Uplifting [] best 101669 combination zp[1]:35 [ plex_show_idx ] +Attempting to uplift remaining variables inzp[1]:53 [ loop::$4 ] +Uplifting [loop] best 101269 combination reg byte x [ loop::$4 ] Attempting to uplift remaining variables inzp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ] -Uplifting [loop] best 101221 combination zp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ] -Attempting to uplift remaining variables inzp[1]:34 [ plex_sprite_idx ] -Uplifting [] best 101221 combination zp[1]:34 [ plex_sprite_idx ] +Uplifting [loop] best 101269 combination zp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ] +Attempting to uplift remaining variables inzp[1]:36 [ plex_sprite_idx ] +Uplifting [] best 101269 combination zp[1]:36 [ plex_sprite_idx ] Attempting to uplift remaining variables inzp[1]:5 [ loop::r#2 loop::r#1 ] -Uplifting [loop] best 101221 combination zp[1]:5 [ loop::r#2 loop::r#1 ] -Attempting to uplift remaining variables inzp[1]:36 [ plex_free_next ] -Uplifting [] best 101221 combination zp[1]:36 [ plex_free_next ] +Uplifting [loop] best 101269 combination zp[1]:5 [ loop::r#2 loop::r#1 ] +Attempting to uplift remaining variables inzp[1]:38 [ plex_free_next ] +Uplifting [] best 101269 combination zp[1]:38 [ plex_free_next ] Attempting to uplift remaining variables inzp[1]:2 [ init::i#2 init::i#1 ] -Uplifting [init] best 101221 combination zp[1]:2 [ init::i#2 init::i#1 ] -Attempting to uplift remaining variables inzp[1]:40 [ init::$9 ] -Uplifting [init] best 101181 combination reg byte a [ init::$9 ] -Attempting to uplift remaining variables inzp[1]:41 [ init::$5 ] -Uplifting [init] best 101141 combination reg byte a [ init::$5 ] -Attempting to uplift remaining variables inzp[1]:42 [ init::$6 ] -Uplifting [init] best 101081 combination reg byte a [ init::$6 ] -Attempting to uplift remaining variables inzp[1]:65 [ loop::$18 ] -Uplifting [loop] best 101021 combination reg byte a [ loop::$18 ] -Attempting to uplift remaining variables inzp[1]:39 [ init::$4 ] -Uplifting [init] best 100981 combination reg byte x [ init::$4 ] +Uplifting [init] best 101269 combination zp[1]:2 [ init::i#2 init::i#1 ] +Attempting to uplift remaining variables inzp[1]:42 [ init::$9 ] +Uplifting [init] best 101229 combination reg byte a [ init::$9 ] +Attempting to uplift remaining variables inzp[1]:43 [ init::$5 ] +Uplifting [init] best 101189 combination reg byte a [ init::$5 ] +Attempting to uplift remaining variables inzp[1]:44 [ init::$6 ] +Uplifting [init] best 101129 combination reg byte a [ init::$6 ] +Attempting to uplift remaining variables inzp[1]:67 [ loop::$18 ] +Uplifting [loop] best 101069 combination reg byte a [ loop::$18 ] +Attempting to uplift remaining variables inzp[1]:41 [ init::$4 ] +Uplifting [init] best 101029 combination reg byte x [ init::$4 ] Attempting to uplift remaining variables inzp[1]:4 [ loop::angle#6 loop::angle#1 ] -Uplifting [loop] best 100981 combination zp[1]:4 [ loop::angle#6 loop::angle#1 ] -Coalescing zero page register [ zp[2]:31 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] ] with [ zp[2]:73 [ mulf8s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:31 [ 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]: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]:31 [ 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]:31 [ 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]:31 [ 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]:101 [ mulf8u_prepared::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:31 [ 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]:31 [ 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 +Uplifting [loop] best 101029 combination zp[1]:4 [ loop::angle#6 loop::angle#1 ] +Coalescing zero page register [ zp[2]:31 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] ] with [ zp[2]:75 [ mulf8s::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:31 [ 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]:96 [ mulf8u_prepared::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:45 [ mulf8s::return#2 ] ] with [ zp[2]:47 [ loop::$1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:49 [ loop::$2 ] ] with [ zp[2]:51 [ loop::x#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:55 [ mulf8s::return#3 ] ] with [ zp[2]:57 [ loop::$5 ] ] - score: 1 +Coalescing zero page register [ zp[2]:59 [ loop::$6 ] ] with [ zp[2]:61 [ loop::y#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:31 [ 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]:45 [ mulf8s::return#2 loop::$1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:31 [ 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]:55 [ mulf8s::return#3 loop::$5 ] ] - score: 1 +Coalescing zero page register [ zp[2]:31 [ 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]:103 [ mulf8u_prepared::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:31 [ 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]:49 [ loop::$2 loop::x#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:31 [ 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]:59 [ loop::$6 loop::y#0 ] ] - score: 1 Coalescing zero page register [ zp[1]:4 [ loop::angle#6 loop::angle#1 ] ] with [ zp[1]:2 [ init::i#2 init::i#1 ] ] Coalescing zero page register [ zp[1]:12 [ mulf_init::c#2 mulf_init::c#1 ] ] with [ zp[1]:5 [ loop::r#2 loop::r#1 ] ] Coalescing zero page register [ zp[1]:21 [ mulf_init::dir#2 mulf_init::dir#4 ] ] with [ zp[1]:6 [ loop::a#2 loop::a#1 loop::a#6 ] ] Coalescing zero page register [ zp[2]:24 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:10 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] ] Coalescing zero page register [ zp[2]:31 [ 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 ] ] with [ zp[2]:13 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] ] -Coalescing zero page register [ zp[1]:63 [ loop::plexFreeNextYpos1_return#0 ] ] with [ zp[1]:28 [ plexSort::m#2 plexSort::m#1 ] ] -Coalescing zero page register [ zp[1]:75 [ plexSort::nxt_idx#0 ] ] with [ zp[1]:72 [ mulf8s_prepared::b#0 ] ] -Coalescing zero page register [ zp[1]:78 [ plexShowSprite::plex_sprite_idx2#0 ] ] with [ zp[1]:76 [ plexSort::nxt_y#0 ] ] +Coalescing zero page register [ zp[1]:65 [ loop::plexFreeNextYpos1_return#0 ] ] with [ zp[1]:28 [ plexSort::m#2 plexSort::m#1 ] ] +Coalescing zero page register [ zp[1]:77 [ plexSort::nxt_idx#0 ] ] with [ zp[1]:74 [ mulf8s_prepared::b#0 ] ] +Coalescing zero page register [ zp[1]:80 [ plexShowSprite::plex_sprite_idx2#0 ] ] with [ zp[1]:78 [ plexSort::nxt_y#0 ] ] Allocated (was zp[1]:4) zp[1]:2 [ loop::angle#6 loop::angle#1 init::i#2 init::i#1 ] Allocated (was zp[1]:7) zp[1]:3 [ loop::i#2 loop::i#1 ] Allocated (was zp[1]:8) zp[1]:4 [ loop::i1#5 loop::i1#1 ] @@ -3467,13 +3347,14 @@ Allocated (was zp[1]:21) zp[1]:10 [ mulf_init::dir#2 mulf_init::dir#4 loop::a#2 Allocated (was zp[2]:22) zp[2]:11 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] Allocated (was zp[2]:24) zp[2]:13 [ memset::dst#2 memset::dst#1 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] Allocated (was zp[2]:31) zp[2]:15 [ 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 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] -Allocated (was zp[1]:33) zp[1]:17 [ plex_show_idx ] -Allocated (was zp[1]:34) zp[1]:18 [ plex_sprite_idx ] -Allocated (was zp[1]:35) zp[1]:19 [ plex_sprite_msb ] -Allocated (was zp[1]:36) zp[1]:20 [ plex_free_next ] -Allocated (was zp[1]:63) zp[1]:21 [ loop::plexFreeNextYpos1_return#0 plexSort::m#2 plexSort::m#1 ] -Allocated (was zp[1]:75) zp[1]:22 [ plexSort::nxt_idx#0 mulf8s_prepared::b#0 ] -Allocated (was zp[1]:78) zp[1]:23 [ plexShowSprite::plex_sprite_idx2#0 plexSort::nxt_y#0 ] +Allocated (was zp[2]:33) zp[2]:17 [ PLEX_SCREEN_PTR ] +Allocated (was zp[1]:35) zp[1]:19 [ plex_show_idx ] +Allocated (was zp[1]:36) zp[1]:20 [ plex_sprite_idx ] +Allocated (was zp[1]:37) zp[1]:21 [ plex_sprite_msb ] +Allocated (was zp[1]:38) zp[1]:22 [ plex_free_next ] +Allocated (was zp[1]:65) zp[1]:23 [ loop::plexFreeNextYpos1_return#0 plexSort::m#2 plexSort::m#1 ] +Allocated (was zp[1]:77) zp[1]:24 [ plexSort::nxt_idx#0 mulf8s_prepared::b#0 ] +Allocated (was zp[1]:80) zp[1]:25 [ plexShowSprite::plex_sprite_idx2#0 plexSort::nxt_y#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -3512,67 +3393,72 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN = $400 .label COS = SIN+$40 // The address of the sprite pointers on the current screen (screen+0x3f8). - .label PLEX_SCREEN_PTR = SCREEN+$3f8 + .label PLEX_SCREEN_PTR = $11 // The index in the PLEX tables of the next sprite to show - .label plex_show_idx = $11 + .label plex_show_idx = $13 // The index the next sprite to use for showing (sprites are used round-robin) - .label plex_sprite_idx = $12 + .label plex_sprite_idx = $14 // The MSB bit of the next sprite to use for showing - .label plex_sprite_msb = $13 + .label plex_sprite_msb = $15 // 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 = $14 + .label plex_free_next = $16 // __start __start: { jmp __init1 // __start::__init1 __init1: - // [1] plex_show_idx = 0 -- vbuz1=vbuc1 + // [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 -- pbuz1=pbuc1 + lda #<$400+$3f8 + sta.z PLEX_SCREEN_PTR + lda #>$400+$3f8 + sta.z PLEX_SCREEN_PTR+1 + // [2] plex_show_idx = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_show_idx - // [2] plex_sprite_idx = 0 -- vbuz1=vbuc1 + // [3] plex_sprite_idx = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_sprite_idx - // [3] plex_sprite_msb = 1 -- vbuz1=vbuc1 + // [4] plex_sprite_msb = 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb - // [4] plex_free_next = 0 -- vbuz1=vbuc1 + // [5] plex_free_next = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_free_next - // [5] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [6] call main + // [7] call main jsr main jmp __breturn // __start::@return __breturn: - // [7] return + // [8] return rts } // main main: { // asm { sei } sei - // [9] call init + // [10] call init jsr init - // [10] phi from main to main::@1 [phi:main->main::@1] + // [11] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [11] call loop - // [40] phi from main::@1 to loop [phi:main::@1->loop] + // [12] call loop + // [41] phi from main::@1 to loop [phi:main::@1->loop] loop_from___b1: jsr loop - // [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [13] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: jmp __b2 // main::@2 __b2: - // [13] call exit - // [90] phi from main::@2 to exit [phi:main::@2->exit] + // [14] call exit + // [91] phi from main::@2 to exit [phi:main::@2->exit] exit_from___b2: jsr exit jmp __b3 @@ -3583,123 +3469,123 @@ main: { jmp __breturn // main::@return __breturn: - // [15] return + // [16] return rts } // init // Initialize the program init: { .label i = 2 - // [16] *D011 = VIC_DEN|VIC_RSEL|3 -- _deref_pbuc1=vbuc2 + // [17] *D011 = VIC_DEN|VIC_RSEL|3 -- _deref_pbuc1=vbuc2 lda #VIC_DEN|VIC_RSEL|3 sta D011 - // [17] call plexInit + // [18] call plexInit // Initialize the multiplexer - // [97] phi from init to plexInit [phi:init->plexInit] + // [98] phi from init to plexInit [phi:init->plexInit] plexInit_from_init: jsr plexInit - // [18] phi from init to init::@1 [phi:init->init::@1] + // [19] phi from init to init::@1 [phi:init->init::@1] __b1_from_init: - // [18] phi init::i#2 = 0 [phi:init->init::@1#0] -- vbuz1=vbuc1 + // [19] phi init::i#2 = 0 [phi:init->init::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b1 // Set the sprite pointers & initial positions - // [18] phi from init::@1 to init::@1 [phi:init::@1->init::@1] + // [19] phi from init::@1 to init::@1 [phi:init::@1->init::@1] __b1_from___b1: - // [18] phi init::i#2 = init::i#1 [phi:init::@1->init::@1#0] -- register_copy + // [19] phi init::i#2 = init::i#1 [phi:init::@1->init::@1#0] -- register_copy jmp __b1 // init::@1 __b1: - // [19] PLEX_PTR[init::i#2] = (byte)SPRITE/$40 -- pbuc1_derefidx_vbuz1=vbuc2 + // [20] PLEX_PTR[init::i#2] = (byte)SPRITE/$40 -- pbuc1_derefidx_vbuz1=vbuc2 lda #$ff&SPRITE/$40 ldy.z i sta PLEX_PTR,y - // [20] init::$10 = init::i#2 << 2 -- vbuaa=vbuz1_rol_2 + // [21] init::$10 = init::i#2 << 2 -- vbuaa=vbuz1_rol_2 lda.z i asl asl - // [21] init::$3 = init::$10 + init::i#2 -- vbuaa=vbuaa_plus_vbuz1 + // [22] init::$3 = init::$10 + init::i#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z i - // [22] init::$4 = $18 + init::$3 -- vbuxx=vbuc1_plus_vbuaa + // [23] init::$4 = $18 + init::$3 -- vbuxx=vbuc1_plus_vbuaa tax axs #-[$18] - // [23] init::$9 = init::i#2 << 1 -- vbuaa=vbuz1_rol_1 + // [24] init::$9 = init::i#2 << 1 -- vbuaa=vbuz1_rol_1 lda.z i asl - // [24] PLEX_XPOS[init::$9] = init::$4 -- pwuc1_derefidx_vbuaa=vbuxx + // [25] PLEX_XPOS[init::$9] = init::$4 -- pwuc1_derefidx_vbuaa=vbuxx tay txa sta PLEX_XPOS,y lda #0 sta PLEX_XPOS+1,y - // [25] init::$5 = init::i#2 << 3 -- vbuaa=vbuz1_rol_3 + // [26] init::$5 = init::i#2 << 3 -- vbuaa=vbuz1_rol_3 lda.z i asl asl asl - // [26] init::$6 = $32 + init::$5 -- vbuaa=vbuc1_plus_vbuaa + // [27] init::$6 = $32 + init::$5 -- vbuaa=vbuc1_plus_vbuaa clc adc #$32 - // [27] PLEX_YPOS[init::i#2] = init::$6 -- pbuc1_derefidx_vbuz1=vbuaa + // [28] PLEX_YPOS[init::i#2] = init::$6 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z i sta PLEX_YPOS,y - // [28] init::i#1 = ++ init::i#2 -- vbuz1=_inc_vbuz1 + // [29] init::i#1 = ++ init::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [29] if(init::i#1!=PLEX_COUNT-1+1) goto init::@1 -- vbuz1_neq_vbuc1_then_la1 + // [30] if(init::i#1!=PLEX_COUNT-1+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: - // [30] *SPRITES_ENABLE = $ff -- _deref_pbuc1=vbuc2 + // [31] *SPRITES_ENABLE = $ff -- _deref_pbuc1=vbuc2 // Enable & initialize sprites lda #$ff sta SPRITES_ENABLE - // [31] phi from init::@2 to init::@3 [phi:init::@2->init::@3] + // [32] phi from init::@2 to init::@3 [phi:init::@2->init::@3] __b3_from___b2: - // [31] phi init::i1#2 = 0 [phi:init::@2->init::@3#0] -- vbuxx=vbuc1 + // [32] phi init::i1#2 = 0 [phi:init::@2->init::@3#0] -- vbuxx=vbuc1 ldx #0 jmp __b3 - // [31] phi from init::@3 to init::@3 [phi:init::@3->init::@3] + // [32] phi from init::@3 to init::@3 [phi:init::@3->init::@3] __b3_from___b3: - // [31] phi init::i1#2 = init::i1#1 [phi:init::@3->init::@3#0] -- register_copy + // [32] phi init::i1#2 = init::i1#1 [phi:init::@3->init::@3#0] -- register_copy jmp __b3 // init::@3 __b3: - // [32] SPRITES_COLOR[init::i1#2] = GREEN -- pbuc1_derefidx_vbuxx=vbuc2 + // [33] SPRITES_COLOR[init::i1#2] = GREEN -- pbuc1_derefidx_vbuxx=vbuc2 lda #GREEN sta SPRITES_COLOR,x - // [33] init::i1#1 = ++ init::i1#2 -- vbuxx=_inc_vbuxx + // [34] init::i1#1 = ++ init::i1#2 -- vbuxx=_inc_vbuxx inx - // [34] if(init::i1#1!=8) goto init::@3 -- vbuxx_neq_vbuc1_then_la1 + // [35] if(init::i1#1!=8) goto init::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne __b3_from___b3 - // [35] phi from init::@3 to init::@4 [phi:init::@3->init::@4] + // [36] phi from init::@3 to init::@4 [phi:init::@3->init::@4] __b4_from___b3: jmp __b4 // init::@4 __b4: - // [36] call mulf_init - // [104] phi from init::@4 to mulf_init [phi:init::@4->mulf_init] + // [37] call mulf_init + // [105] phi from init::@4 to mulf_init [phi:init::@4->mulf_init] mulf_init_from___b4: jsr mulf_init - // [37] phi from init::@4 to init::@5 [phi:init::@4->init::@5] + // [38] phi from init::@4 to init::@5 [phi:init::@4->init::@5] __b5_from___b4: jmp __b5 // init::@5 __b5: - // [38] call memset + // [39] call memset // Clear screen - // [133] phi from init::@5 to memset [phi:init::@5->memset] + // [134] phi from init::@5 to memset [phi:init::@5->memset] memset_from___b5: jsr memset jmp __breturn // init::@return __breturn: - // [39] return + // [40] return rts } // loop @@ -3716,11 +3602,11 @@ loop: { .label i = 3 // Render Rotated BOBs .label angle = 2 - .label plexFreeNextYpos1_return = $15 + .label plexFreeNextYpos1_return = $17 .label i1 = 4 - // [41] phi from loop to loop::@1 [phi:loop->loop::@1] + // [42] phi from loop to loop::@1 [phi:loop->loop::@1] __b1_from_loop: - // [41] phi loop::angle#6 = 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 + // [42] phi loop::angle#6 = 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 lda #0 sta.z angle jmp __b1 @@ -3729,61 +3615,61 @@ loop: { jmp __b2 // loop::@2 __b2: - // [42] if(*RASTER<$d8) goto loop::@2 -- _deref_pbuc1_lt_vbuc2_then_la1 + // [43] if(*RASTER<$d8) goto loop::@2 -- _deref_pbuc1_lt_vbuc2_then_la1 lda RASTER cmp #$d8 bcc __b2 jmp __b3 // loop::@3 __b3: - // [43] *BORDER_COLOR = $f -- _deref_pbuc1=vbuc2 + // [44] *BORDER_COLOR = $f -- _deref_pbuc1=vbuc2 lda #$f sta BORDER_COLOR - // [44] loop::a#6 = loop::angle#6 -- vbuz1=vbuz2 + // [45] loop::a#6 = loop::angle#6 -- vbuz1=vbuz2 lda.z angle sta.z a - // [45] phi from loop::@3 to loop::@4 [phi:loop::@3->loop::@4] + // [46] phi from loop::@3 to loop::@4 [phi:loop::@3->loop::@4] __b4_from___b3: - // [45] phi loop::i#2 = 0 [phi:loop::@3->loop::@4#0] -- vbuz1=vbuc1 + // [46] phi loop::i#2 = 0 [phi:loop::@3->loop::@4#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [45] phi loop::a#2 = loop::a#6 [phi:loop::@3->loop::@4#1] -- register_copy - // [45] phi loop::r#2 = $1e [phi:loop::@3->loop::@4#2] -- vbsz1=vbsc1 + // [46] phi loop::a#2 = loop::a#6 [phi:loop::@3->loop::@4#1] -- register_copy + // [46] phi loop::r#2 = $1e [phi:loop::@3->loop::@4#2] -- vbsz1=vbsc1 lda #$1e sta.z r jmp __b4 - // [45] phi from loop::@12 to loop::@4 [phi:loop::@12->loop::@4] + // [46] phi from loop::@12 to loop::@4 [phi:loop::@12->loop::@4] __b4_from___b12: - // [45] phi loop::i#2 = loop::i#1 [phi:loop::@12->loop::@4#0] -- register_copy - // [45] phi loop::a#2 = loop::a#1 [phi:loop::@12->loop::@4#1] -- register_copy - // [45] phi loop::r#2 = loop::r#1 [phi:loop::@12->loop::@4#2] -- register_copy + // [46] phi loop::i#2 = loop::i#1 [phi:loop::@12->loop::@4#0] -- register_copy + // [46] phi loop::a#2 = loop::a#1 [phi:loop::@12->loop::@4#1] -- register_copy + // [46] phi loop::r#2 = loop::r#1 [phi:loop::@12->loop::@4#2] -- register_copy jmp __b4 // loop::@4 __b4: - // [46] *BORDER_COLOR = 6 -- _deref_pbuc1=vbuc2 + // [47] *BORDER_COLOR = 6 -- _deref_pbuc1=vbuc2 //kickasm {{ .break }} lda #6 sta BORDER_COLOR - // [47] mulf8s::a#0 = loop::r#2 -- vbsaa=vbsz1 + // [48] mulf8s::a#0 = loop::r#2 -- vbsaa=vbsz1 lda.z r - // [48] mulf8s::b#0 = COS[loop::a#2] -- vbsxx=pbsc1_derefidx_vbuz1 + // [49] mulf8s::b#0 = COS[loop::a#2] -- vbsxx=pbsc1_derefidx_vbuz1 ldy.z a ldx COS,y - // [49] call mulf8s - // [139] phi from loop::@4 to mulf8s [phi:loop::@4->mulf8s] + // [50] call mulf8s + // [140] phi from loop::@4 to mulf8s [phi:loop::@4->mulf8s] mulf8s_from___b4: - // [139] phi mulf8s::b#2 = mulf8s::b#0 [phi:loop::@4->mulf8s#0] -- register_copy - // [139] phi mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 [phi:loop::@4->mulf8s#1] -- register_copy + // [140] phi mulf8s::b#2 = mulf8s::b#0 [phi:loop::@4->mulf8s#0] -- register_copy + // [140] phi mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 [phi:loop::@4->mulf8s#1] -- register_copy jsr mulf8s - // [50] mulf8s::return#2 = mulf8s::return#0 + // [51] mulf8s::return#2 = mulf8s::return#0 jmp __b11 // loop::@11 __b11: - // [51] loop::$1 = mulf8s::return#2 - // [52] loop::$2 = loop::$1 << 1 -- vwsz1=vwsz1_rol_1 + // [52] loop::$1 = mulf8s::return#2 + // [53] loop::$2 = loop::$1 << 1 -- vwsz1=vwsz1_rol_1 asl.z __2 rol.z __2+1 - // [53] loop::x#0 = loop::$2 + (signed word)$7d*$100 -- vwsz1=vwsz1_plus_vwsc1 + // [54] loop::x#0 = loop::$2 + (signed word)$7d*$100 -- vwsz1=vwsz1_plus_vwsc1 clc lda.z x adc #<$7d*$100 @@ -3791,37 +3677,37 @@ loop: { lda.z x+1 adc #>$7d*$100 sta.z x+1 - // [54] loop::$4 = > loop::x#0 -- vbuxx=_hi_vwsz1 + // [55] loop::$4 = > loop::x#0 -- vbuxx=_hi_vwsz1 ldx.z x+1 - // [55] loop::$20 = loop::i#2 << 1 -- vbuaa=vbuz1_rol_1 + // [56] loop::$20 = loop::i#2 << 1 -- vbuaa=vbuz1_rol_1 lda.z i asl - // [56] PLEX_XPOS[loop::$20] = loop::$4 -- pwuc1_derefidx_vbuaa=vbuxx + // [57] PLEX_XPOS[loop::$20] = loop::$4 -- pwuc1_derefidx_vbuaa=vbuxx tay txa sta PLEX_XPOS,y lda #0 sta PLEX_XPOS+1,y - // [57] mulf8s::a#1 = loop::r#2 -- vbsaa=vbsz1 + // [58] mulf8s::a#1 = loop::r#2 -- vbsaa=vbsz1 lda.z r - // [58] mulf8s::b#1 = SIN[loop::a#2] -- vbsxx=pbsc1_derefidx_vbuz1 + // [59] mulf8s::b#1 = SIN[loop::a#2] -- vbsxx=pbsc1_derefidx_vbuz1 ldy.z a ldx SIN,y - // [59] call mulf8s - // [139] phi from loop::@11 to mulf8s [phi:loop::@11->mulf8s] + // [60] call mulf8s + // [140] phi from loop::@11 to mulf8s [phi:loop::@11->mulf8s] mulf8s_from___b11: - // [139] phi mulf8s::b#2 = mulf8s::b#1 [phi:loop::@11->mulf8s#0] -- register_copy - // [139] phi mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 [phi:loop::@11->mulf8s#1] -- register_copy + // [140] phi mulf8s::b#2 = mulf8s::b#1 [phi:loop::@11->mulf8s#0] -- register_copy + // [140] phi mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 [phi:loop::@11->mulf8s#1] -- register_copy jsr mulf8s - // [60] mulf8s::return#3 = mulf8s::return#0 + // [61] mulf8s::return#3 = mulf8s::return#0 jmp __b12 // loop::@12 __b12: - // [61] loop::$5 = mulf8s::return#3 - // [62] loop::$6 = loop::$5 << 1 -- vwsz1=vwsz1_rol_1 + // [62] loop::$5 = mulf8s::return#3 + // [63] loop::$6 = loop::$5 << 1 -- vwsz1=vwsz1_rol_1 asl.z __6 rol.z __6+1 - // [63] loop::y#0 = loop::$6 + (signed word)$7d*$100 -- vwsz1=vwsz1_plus_vwsc1 + // [64] loop::y#0 = loop::$6 + (signed word)$7d*$100 -- vwsz1=vwsz1_plus_vwsc1 clc lda.z y adc #<$7d*$100 @@ -3829,187 +3715,190 @@ loop: { lda.z y+1 adc #>$7d*$100 sta.z y+1 - // [64] loop::$8 = > loop::y#0 -- vbuaa=_hi_vwsz1 + // [65] loop::$8 = > loop::y#0 -- vbuaa=_hi_vwsz1 lda.z y+1 - // [65] PLEX_YPOS[loop::i#2] = loop::$8 -- pbuc1_derefidx_vbuz1=vbuaa + // [66] PLEX_YPOS[loop::i#2] = loop::$8 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z i sta PLEX_YPOS,y - // [66] loop::a#1 = loop::a#2 + $62 -- vbuz1=vbuz1_plus_vbuc1 + // [67] loop::a#1 = loop::a#2 + $62 -- vbuz1=vbuz1_plus_vbuc1 lax.z a axs #-[$62] stx.z a - // [67] loop::r#1 = loop::r#2 + 3 -- vbsz1=vbsz1_plus_vbsc1 + // [68] loop::r#1 = loop::r#2 + 3 -- vbsz1=vbsz1_plus_vbsc1 lax.z r axs #-[3] stx.z r - // [68] loop::i#1 = ++ loop::i#2 -- vbuz1=_inc_vbuz1 + // [69] loop::i#1 = ++ loop::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [69] if(loop::i#1!=NUM_BOBS-1+1) goto loop::@4 -- vbuz1_neq_vbuc1_then_la1 + // [70] if(loop::i#1!=NUM_BOBS-1+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: - // [70] *BORDER_COLOR = 3 -- _deref_pbuc1=vbuc2 + // [71] *BORDER_COLOR = 3 -- _deref_pbuc1=vbuc2 lda #3 sta BORDER_COLOR - // [71] call plexSort - // [146] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + // [72] call plexSort + // [147] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] plexSort_from___b5: jsr plexSort jmp __b13 // loop::@13 __b13: - // [72] loop::angle#1 = loop::angle#6 + 3 -- vbuz1=vbuz1_plus_vbuc1 + // [73] loop::angle#1 = loop::angle#6 + 3 -- vbuz1=vbuz1_plus_vbuc1 lax.z angle axs #-[3] stx.z angle - // [73] *BORDER_COLOR = BLACK -- _deref_pbuc1=vbuc2 + // [74] *BORDER_COLOR = BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BORDER_COLOR jmp __b6 // Sort the sprites by y-position // loop::@6 __b6: - // [74] loop::$11 = *D011 & VIC_RST8 -- vbuaa=_deref_pbuc1_band_vbuc2 + // [75] loop::$11 = *D011 & VIC_RST8 -- vbuaa=_deref_pbuc1_band_vbuc2 lda #VIC_RST8 and D011 - // [75] if(loop::$11!=0) goto loop::@6 -- vbuaa_neq_0_then_la1 + // [76] if(loop::$11!=0) goto loop::@6 -- vbuaa_neq_0_then_la1 cmp #0 bne __b6 - // [76] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7] + // [77] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7] __b7_from___b6: - // [76] phi loop::i1#5 = 0 [phi:loop::@6->loop::@7#0] -- vbuz1=vbuc1 + // [77] phi loop::i1#5 = 0 [phi:loop::@6->loop::@7#0] -- vbuz1=vbuc1 lda #0 sta.z i1 jmp __b7 // Show the sprites - // [76] phi from loop::@14 to loop::@7 [phi:loop::@14->loop::@7] + // [77] phi from loop::@14 to loop::@7 [phi:loop::@14->loop::@7] __b7_from___b14: - // [76] phi loop::i1#5 = loop::i1#1 [phi:loop::@14->loop::@7#0] -- register_copy + // [77] phi loop::i1#5 = loop::i1#1 [phi:loop::@14->loop::@7#0] -- register_copy jmp __b7 // loop::@7 __b7: - // [77] *BORDER_COLOR = BLACK -- _deref_pbuc1=vbuc2 + // [78] *BORDER_COLOR = BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BORDER_COLOR jmp plexFreeNextYpos1 // loop::plexFreeNextYpos1 plexFreeNextYpos1: - // [78] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] -- vbuz1=pbuc1_derefidx_vbuz2 + // [79] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z plex_free_next lda PLEX_FREE_YPOS,y sta.z plexFreeNextYpos1_return jmp __b8 // loop::@8 __b8: - // [79] if(*RASTERkeyboard_key_pressed] + // [86] call keyboard_key_pressed + // [198] phi from loop::@10 to keyboard_key_pressed [phi:loop::@10->keyboard_key_pressed] keyboard_key_pressed_from___b10: jsr keyboard_key_pressed - // [86] keyboard_key_pressed::return#3 = keyboard_key_pressed::return#0 + // [87] keyboard_key_pressed::return#3 = keyboard_key_pressed::return#0 jmp __b15 // loop::@15 __b15: - // [87] loop::$18 = keyboard_key_pressed::return#3 - // [88] if(0!=loop::$18) goto loop::@return -- vbuc1_neq_vbuaa_then_la1 + // [88] loop::$18 = keyboard_key_pressed::return#3 + // [89] if(0!=loop::$18) goto loop::@return -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne __breturn - // [41] phi from loop::@15 to loop::@1 [phi:loop::@15->loop::@1] + // [42] phi from loop::@15 to loop::@1 [phi:loop::@15->loop::@1] __b1_from___b15: - // [41] phi loop::angle#6 = loop::angle#1 [phi:loop::@15->loop::@1#0] -- register_copy + // [42] phi loop::angle#6 = loop::angle#1 [phi:loop::@15->loop::@1#0] -- register_copy jmp __b1 // loop::@return __breturn: - // [89] return + // [90] return rts } // exit // Exit the program exit: { - // [91] phi from exit exit::@2 to exit::@1 [phi:exit/exit::@2->exit::@1] + // [92] 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: - // [92] call keyboard_key_pressed - // [197] phi from exit::@1 to keyboard_key_pressed [phi:exit::@1->keyboard_key_pressed] + // [93] call keyboard_key_pressed + // [198] phi from exit::@1 to keyboard_key_pressed [phi:exit::@1->keyboard_key_pressed] keyboard_key_pressed_from___b1: jsr keyboard_key_pressed - // [93] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 + // [94] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 jmp __b2 // exit::@2 __b2: - // [94] exit::$0 = keyboard_key_pressed::return#2 - // [95] if(0!=exit::$0) goto exit::@1 -- vbuc1_neq_vbuaa_then_la1 + // [95] exit::$0 = keyboard_key_pressed::return#2 + // [96] if(0!=exit::$0) goto exit::@1 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne __b1_from___b2 jmp __breturn // exit::@return __breturn: - // [96] return + // [97] return rts } // plexInit // Initialize the multiplexer data structures plexInit: { - // [98] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] - plexSetScreen1_from_plexInit: jmp plexSetScreen1 // plexInit::plexSetScreen1 plexSetScreen1: - // [99] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] + // [99] PLEX_SCREEN_PTR = SCREEN+$3f8 -- pbuz1=pbuc1 + lda #SCREEN+$3f8 + sta.z PLEX_SCREEN_PTR+1 + // [100] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] __b1_from_plexSetScreen1: - // [99] phi plexInit::i#2 = 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 + // [100] phi plexInit::i#2 = 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 ldx #0 jmp __b1 - // [99] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] + // [100] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] __b1_from___b1: - // [99] phi plexInit::i#2 = plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy + // [100] phi plexInit::i#2 = plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy jmp __b1 // plexInit::@1 __b1: - // [100] PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx + // [101] PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx txa sta PLEX_SORTED_IDX,x - // [101] plexInit::i#1 = ++ plexInit::i#2 -- vbuxx=_inc_vbuxx + // [102] plexInit::i#1 = ++ plexInit::i#2 -- vbuxx=_inc_vbuxx inx - // [102] if(plexInit::i#1!=PLEX_COUNT-1+1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1 + // [103] if(plexInit::i#1!=PLEX_COUNT-1+1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #PLEX_COUNT-1+1 bne __b1_from___b1 jmp __breturn // plexInit::@return __breturn: - // [103] return + // [104] return rts } // mulf_init @@ -4027,24 +3916,24 @@ mulf_init: { .label sqr2_lo = 6 //Start with g(0)=f(255) .label dir = $a - // [105] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + // [106] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] __b1_from_mulf_init: - // [105] phi mulf_init::x_2#3 = 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 + // [106] phi mulf_init::x_2#3 = 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [105] phi mulf_init::sqr1_hi#2 = mulf_sqr1_hi+1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + // [106] phi mulf_init::sqr1_hi#2 = mulf_sqr1_hi+1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [105] phi mulf_init::sqr#4 = 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 + // [106] phi mulf_init::sqr#4 = 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 sta.z sqr+1 - // [105] phi mulf_init::c#2 = 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + // [106] phi mulf_init::c#2 = 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 lda #0 sta.z c - // [105] phi mulf_init::sqr1_lo#2 = mulf_sqr1_lo+1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + // [106] phi mulf_init::sqr1_lo#2 = mulf_sqr1_lo+1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 lda #mulf_sqr1_lo+1 @@ -4052,26 +3941,26 @@ mulf_init: { jmp __b1 // mulf_init::@1 __b1: - // [106] if(mulf_init::sqr1_lo#2!=mulf_sqr1_lo+$200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [107] if(mulf_init::sqr1_lo#2!=mulf_sqr1_lo+$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] + // [108] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5] __b5_from___b1: - // [107] phi mulf_init::dir#2 = $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + // [108] phi mulf_init::dir#2 = $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 lda #$ff sta.z dir - // [107] phi mulf_init::sqr2_hi#2 = mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + // [108] phi mulf_init::sqr2_hi#2 = mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 lda #mulf_sqr2_hi sta.z sqr2_hi+1 - // [107] phi mulf_init::x_255#2 = -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 + // [108] phi mulf_init::x_255#2 = -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 ldx #-1 - // [107] phi mulf_init::sqr2_lo#2 = mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + // [108] phi mulf_init::sqr2_lo#2 = mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 lda #mulf_sqr2_lo @@ -4079,7 +3968,7 @@ mulf_init: { jmp __b5 // mulf_init::@5 __b5: - // [108] if(mulf_init::sqr2_lo#2!=mulf_sqr2_lo+$1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + // [109] if(mulf_init::sqr2_lo#2!=mulf_sqr2_lo+$1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr2_lo+1 cmp #>mulf_sqr2_lo+$1ff bne __b6 @@ -4089,114 +3978,114 @@ mulf_init: { jmp __b7 // mulf_init::@7 __b7: - // [109] *(mulf_sqr2_lo+$1ff) = *(mulf_sqr1_lo+$100) -- _deref_pbuc1=_deref_pbuc2 + // [110] *(mulf_sqr2_lo+$1ff) = *(mulf_sqr1_lo+$100) -- _deref_pbuc1=_deref_pbuc2 // Set the very last value g(511) = f(256) lda mulf_sqr1_lo+$100 sta mulf_sqr2_lo+$1ff - // [110] *(mulf_sqr2_hi+$1ff) = *(mulf_sqr1_hi+$100) -- _deref_pbuc1=_deref_pbuc2 + // [111] *(mulf_sqr2_hi+$1ff) = *(mulf_sqr1_hi+$100) -- _deref_pbuc1=_deref_pbuc2 lda mulf_sqr1_hi+$100 sta mulf_sqr2_hi+$1ff jmp __breturn // mulf_init::@return __breturn: - // [111] return + // [112] return rts // mulf_init::@6 __b6: - // [112] *mulf_init::sqr2_lo#2 = mulf_sqr1_lo[mulf_init::x_255#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [113] *mulf_init::sqr2_lo#2 = mulf_sqr1_lo[mulf_init::x_255#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_lo,x ldy #0 sta (sqr2_lo),y - // [113] *mulf_init::sqr2_hi#2 = mulf_sqr1_hi[mulf_init::x_255#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [114] *mulf_init::sqr2_hi#2 = mulf_sqr1_hi[mulf_init::x_255#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_hi,x ldy #0 sta (sqr2_hi),y - // [114] mulf_init::sqr2_hi#1 = ++ mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 + // [115] mulf_init::sqr2_hi#1 = ++ mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_hi bne !+ inc.z sqr2_hi+1 !: - // [115] mulf_init::x_255#1 = mulf_init::x_255#2 + mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 + // [116] mulf_init::x_255#1 = mulf_init::x_255#2 + mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 txa clc adc.z dir tax - // [116] if(mulf_init::x_255#1!=0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 + // [117] if(mulf_init::x_255#1!=0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 cpx #0 bne __b9_from___b6 - // [118] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] + // [119] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] __b8_from___b6: - // [118] phi mulf_init::dir#4 = 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + // [119] phi mulf_init::dir#4 = 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 lda #1 sta.z dir jmp __b8 - // [117] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // [118] 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: - // [118] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [119] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] __b8_from___b9: - // [118] phi mulf_init::dir#4 = mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // [119] phi mulf_init::dir#4 = mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy jmp __b8 // mulf_init::@8 __b8: - // [119] mulf_init::sqr2_lo#1 = ++ mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + // [120] mulf_init::sqr2_lo#1 = ++ mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_lo bne !+ inc.z sqr2_lo+1 !: - // [107] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [108] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] __b5_from___b8: - // [107] phi mulf_init::dir#2 = mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy - // [107] phi mulf_init::sqr2_hi#2 = mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy - // [107] phi mulf_init::x_255#2 = mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy - // [107] phi mulf_init::sqr2_lo#2 = mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + // [108] phi mulf_init::dir#2 = mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [108] phi mulf_init::sqr2_hi#2 = mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [108] phi mulf_init::x_255#2 = mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [108] phi mulf_init::sqr2_lo#2 = mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy jmp __b5 // mulf_init::@2 __b2: - // [120] mulf_init::c#1 = ++ mulf_init::c#2 -- vbuz1=_inc_vbuz1 + // [121] mulf_init::c#1 = ++ mulf_init::c#2 -- vbuz1=_inc_vbuz1 inc.z c - // [121] mulf_init::$1 = mulf_init::c#1 & 1 -- vbuaa=vbuz1_band_vbuc1 + // [122] mulf_init::$1 = mulf_init::c#1 & 1 -- vbuaa=vbuz1_band_vbuc1 lda #1 and.z c - // [122] if(mulf_init::$1!=0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 + // [123] if(mulf_init::$1!=0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 cmp #0 bne __b3_from___b2 jmp __b4 // mulf_init::@4 __b4: - // [123] mulf_init::x_2#1 = ++ mulf_init::x_2#3 -- vbuxx=_inc_vbuxx + // [124] mulf_init::x_2#1 = ++ mulf_init::x_2#3 -- vbuxx=_inc_vbuxx inx - // [124] mulf_init::sqr#2 = ++ mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + // [125] mulf_init::sqr#2 = ++ mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 inc.z sqr bne !+ inc.z sqr+1 !: - // [125] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [126] 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: - // [125] phi mulf_init::x_2#2 = mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy - // [125] phi mulf_init::sqr#3 = mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // [126] phi mulf_init::x_2#2 = mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [126] phi mulf_init::sqr#3 = mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy jmp __b3 // mulf_init::@3 __b3: - // [126] mulf_init::$4 = < mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 + // [127] mulf_init::$4 = < mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 lda.z sqr - // [127] *mulf_init::sqr1_lo#2 = mulf_init::$4 -- _deref_pbuz1=vbuaa + // [128] *mulf_init::sqr1_lo#2 = mulf_init::$4 -- _deref_pbuz1=vbuaa ldy #0 sta (sqr1_lo),y - // [128] mulf_init::$5 = > mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 + // [129] mulf_init::$5 = > mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 lda.z sqr+1 - // [129] *mulf_init::sqr1_hi#2 = mulf_init::$5 -- _deref_pbuz1=vbuaa + // [130] *mulf_init::sqr1_hi#2 = mulf_init::$5 -- _deref_pbuz1=vbuaa ldy #0 sta (sqr1_hi),y - // [130] mulf_init::sqr1_hi#1 = ++ mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + // [131] mulf_init::sqr1_hi#1 = ++ mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_hi bne !+ inc.z sqr1_hi+1 !: - // [131] mulf_init::sqr#1 = mulf_init::sqr#3 + mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx + // [132] mulf_init::sqr#1 = mulf_init::sqr#3 + mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx txa clc adc.z sqr @@ -4204,18 +4093,18 @@ mulf_init: { bcc !+ inc.z sqr+1 !: - // [132] mulf_init::sqr1_lo#1 = ++ mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + // [133] mulf_init::sqr1_lo#1 = ++ mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_lo bne !+ inc.z sqr1_lo+1 !: - // [105] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [106] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] __b1_from___b3: - // [105] phi mulf_init::x_2#3 = mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy - // [105] phi mulf_init::sqr1_hi#2 = mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy - // [105] phi mulf_init::sqr#4 = mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy - // [105] phi mulf_init::c#2 = mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy - // [105] phi mulf_init::sqr1_lo#2 = mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + // [106] phi mulf_init::x_2#3 = mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [106] phi mulf_init::sqr1_hi#2 = mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [106] phi mulf_init::sqr#4 = mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [106] phi mulf_init::c#2 = mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [106] phi mulf_init::sqr1_lo#2 = mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy jmp __b1 } // memset @@ -4226,9 +4115,9 @@ memset: { .label str = SCREEN .label end = str+num .label dst = $d - // [134] phi from memset to memset::@1 [phi:memset->memset::@1] + // [135] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [134] phi memset::dst#2 = (byte*)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [135] phi memset::dst#2 = (byte*)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -4236,7 +4125,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [135] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [136] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -4246,22 +4135,22 @@ memset: { jmp __breturn // memset::@return __breturn: - // [136] return + // [137] return rts // memset::@2 __b2: - // [137] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 + // [138] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [138] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 + // [139] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [134] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [135] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [134] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [135] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // mulf8s @@ -4272,24 +4161,24 @@ mulf8s: { jmp mulf8s_prepare1 // mulf8s::mulf8s_prepare1 mulf8s_prepare1: - // [140] mulf8u_prepare::a#0 = (byte)mulf8s::mulf8s_prepare1_a#0 - // [141] call mulf8u_prepare + // [141] mulf8u_prepare::a#0 = (byte)mulf8s::mulf8s_prepare1_a#0 + // [142] call mulf8u_prepare jsr mulf8u_prepare jmp __b1 // mulf8s::@1 __b1: - // [142] mulf8s_prepared::b#0 = mulf8s::b#2 -- vbsz1=vbsxx + // [143] mulf8s_prepared::b#0 = mulf8s::b#2 -- vbsz1=vbsxx stx.z mulf8s_prepared.b - // [143] call mulf8s_prepared + // [144] call mulf8s_prepared jsr mulf8s_prepared jmp __b2 // mulf8s::@2 __b2: - // [144] mulf8s::return#0 = (signed word)mulf8s_prepared::m#4 + // [145] mulf8s::return#0 = (signed word)mulf8s_prepared::m#4 jmp __breturn // mulf8s::@return __breturn: - // [145] return + // [146] return rts } // plexSort @@ -4303,30 +4192,30 @@ mulf8s: { // 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 = $16 - .label nxt_y = $17 - .label m = $15 - // [147] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] + .label nxt_idx = $18 + .label nxt_y = $19 + .label m = $17 + // [148] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] __b1_from_plexSort: - // [147] phi plexSort::m#2 = 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 + // [148] phi plexSort::m#2 = 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 lda #0 sta.z m jmp __b1 - // [147] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] + // [148] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] __b1_from___b2: - // [147] phi plexSort::m#2 = plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy + // [148] phi plexSort::m#2 = plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy jmp __b1 // plexSort::@1 __b1: - // [148] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2] -- vbuz1=pbuc1_derefidx_vbuz2 + // [149] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2] -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z m lda PLEX_SORTED_IDX+1,y sta.z nxt_idx - // [149] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] -- vbuz1=pbuc1_derefidx_vbuz2 + // [150] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z nxt_idx lda PLEX_YPOS,y sta.z nxt_y - // [150] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 -- vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1 + // [151] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[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 @@ -4335,27 +4224,27 @@ plexSort: { jmp __b5 // plexSort::@5 __b5: - // [151] plexSort::s#6 = plexSort::m#2 -- vbuxx=vbuz1 + // [152] plexSort::s#6 = plexSort::m#2 -- vbuxx=vbuz1 ldx.z m - // [152] phi from plexSort::@5 plexSort::@7 to plexSort::@3 [phi:plexSort::@5/plexSort::@7->plexSort::@3] + // [153] phi from plexSort::@5 plexSort::@7 to plexSort::@3 [phi:plexSort::@5/plexSort::@7->plexSort::@3] __b3_from___b5: __b3_from___b7: - // [152] phi plexSort::s#3 = plexSort::s#6 [phi:plexSort::@5/plexSort::@7->plexSort::@3#0] -- register_copy + // [153] phi plexSort::s#3 = plexSort::s#6 [phi:plexSort::@5/plexSort::@7->plexSort::@3#0] -- register_copy jmp __b3 // plexSort::@3 __b3: - // [153] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [154] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda PLEX_SORTED_IDX,x sta PLEX_SORTED_IDX+1,x - // [154] plexSort::s#1 = -- plexSort::s#3 -- vbuxx=_dec_vbuxx + // [155] plexSort::s#1 = -- plexSort::s#3 -- vbuxx=_dec_vbuxx dex - // [155] if(plexSort::s#1==$ff) goto plexSort::@4 -- vbuxx_eq_vbuc1_then_la1 + // [156] if(plexSort::s#1==$ff) goto plexSort::@4 -- vbuxx_eq_vbuc1_then_la1 cpx #$ff beq __b4 jmp __b7 // plexSort::@7 __b7: - // [156] if(plexSort::nxt_y#0plexSort::plexFreePrepare1] + // [165] phi from plexSort::@6 to plexSort::plexFreePrepare1 [phi:plexSort::@6->plexSort::plexFreePrepare1] plexFreePrepare1_from___b6: jmp plexFreePrepare1 // plexSort::plexFreePrepare1 plexFreePrepare1: - // [165] phi from plexSort::plexFreePrepare1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1] + // [166] phi from plexSort::plexFreePrepare1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1] plexFreePrepare1___b1_from_plexFreePrepare1: - // [165] phi plexSort::plexFreePrepare1_s#2 = 0 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1#0] -- vbuxx=vbuc1 + // [166] phi plexSort::plexFreePrepare1_s#2 = 0 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1#0] -- vbuxx=vbuc1 ldx #0 jmp plexFreePrepare1___b1 - // [165] phi from plexSort::plexFreePrepare1_@1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1] + // [166] phi from plexSort::plexFreePrepare1_@1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1] plexFreePrepare1___b1_from_plexFreePrepare1___b1: - // [165] phi plexSort::plexFreePrepare1_s#2 = plexSort::plexFreePrepare1_s#1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1#0] -- register_copy + // [166] phi plexSort::plexFreePrepare1_s#2 = plexSort::plexFreePrepare1_s#1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1#0] -- register_copy jmp plexFreePrepare1___b1 // plexSort::plexFreePrepare1_@1 plexFreePrepare1___b1: - // [166] PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [167] PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta PLEX_FREE_YPOS,x - // [167] plexSort::plexFreePrepare1_s#1 = ++ plexSort::plexFreePrepare1_s#2 -- vbuxx=_inc_vbuxx + // [168] plexSort::plexFreePrepare1_s#1 = ++ plexSort::plexFreePrepare1_s#2 -- vbuxx=_inc_vbuxx inx - // [168] if(plexSort::plexFreePrepare1_s#1!=8) goto plexSort::plexFreePrepare1_@1 -- vbuxx_neq_vbuc1_then_la1 + // [169] if(plexSort::plexFreePrepare1_s#1!=8) goto plexSort::plexFreePrepare1_@1 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne plexFreePrepare1___b1_from_plexFreePrepare1___b1 jmp plexFreePrepare1___b2 // plexSort::plexFreePrepare1_@2 plexFreePrepare1___b2: - // [169] plex_free_next = 0 -- vbuz1=vbuc1 + // [170] plex_free_next = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_free_next jmp __breturn // plexSort::@return __breturn: - // [170] return + // [171] return rts } // plexShowSprite // Show the next sprite. // plexSort() prepares showing the sprites plexShowSprite: { - .label plex_sprite_idx2 = $17 - // [171] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx << 1 -- vbuz1=vbuz2_rol_1 + .label plex_sprite_idx2 = $19 + // [172] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx << 1 -- vbuz1=vbuz2_rol_1 lda.z plex_sprite_idx asl sta.z plex_sprite_idx2 - // [172] plexShowSprite::plexFreeAdd1_ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] -- vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) + // [173] plexShowSprite::plexFreeAdd1_ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] -- vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) ldx.z plex_show_idx ldy PLEX_SORTED_IDX,x lda PLEX_YPOS,y - // [173] SPRITES_YPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuaa + // [174] SPRITES_YPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z plex_sprite_idx2 sta SPRITES_YPOS,y jmp plexFreeAdd1 // plexShowSprite::plexFreeAdd1 plexFreeAdd1: - // [174] plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#0 + $15 -- vbuaa=vbuaa_plus_vbuc1 + // [175] plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#0 + $15 -- vbuaa=vbuaa_plus_vbuc1 clc adc #$15 - // [175] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuaa + // [176] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z plex_free_next sta PLEX_FREE_YPOS,y - // [176] plexShowSprite::plexFreeAdd1_$1 = plex_free_next + 1 -- vbuaa=vbuz1_plus_1 + // [177] plexShowSprite::plexFreeAdd1_$1 = plex_free_next + 1 -- vbuaa=vbuz1_plus_1 lda.z plex_free_next clc adc #1 - // [177] plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & 7 -- vbuaa=vbuaa_band_vbuc1 + // [178] plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & 7 -- vbuaa=vbuaa_band_vbuc1 and #7 - // [178] plex_free_next = plexShowSprite::plexFreeAdd1_$2 -- vbuz1=vbuaa + // [179] plex_free_next = plexShowSprite::plexFreeAdd1_$2 -- vbuz1=vbuaa sta.z plex_free_next jmp __b5 // plexShowSprite::@5 __b5: - // [179] PLEX_SCREEN_PTR#0[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz2) + // [180] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) ldx.z plex_show_idx ldy PLEX_SORTED_IDX,x lda PLEX_PTR,y - ldx.z plex_sprite_idx - sta PLEX_SCREEN_PTR,x - // [180] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] -- vbuaa=pbuc1_derefidx_vbuz1 + ldy.z plex_sprite_idx + sta (PLEX_SCREEN_PTR),y + // [181] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z plex_show_idx lda PLEX_SORTED_IDX,y - // [181] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 -- vbuxx=vbuaa_rol_1 + // [182] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 -- vbuxx=vbuaa_rol_1 asl tax - // [182] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_lo_pwuc1_derefidx_vbuxx + // [183] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_lo_pwuc1_derefidx_vbuxx lda PLEX_XPOS,x - // [183] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 -- pbuc1_derefidx_vbuz1=vbuaa + // [184] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z plex_sprite_idx2 sta SPRITES_XPOS,y - // [184] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_hi_pwuc1_derefidx_vbuxx + // [185] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_hi_pwuc1_derefidx_vbuxx lda PLEX_XPOS+1,x - // [185] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1 + // [186] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1 cmp #0 bne __b1 jmp __b3 // plexShowSprite::@3 __b3: - // [186] plexShowSprite::$9 = $ff ^ plex_sprite_msb -- vbuaa=vbuc1_bxor_vbuz1 + // [187] plexShowSprite::$9 = $ff ^ plex_sprite_msb -- vbuaa=vbuc1_bxor_vbuz1 lda #$ff eor.z plex_sprite_msb - // [187] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa + // [188] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa and SPRITES_XMSB sta SPRITES_XMSB jmp __b2 // plexShowSprite::@2 __b2: - // [188] plexShowSprite::$5 = plex_sprite_idx + 1 -- vbuxx=vbuz1_plus_1 + // [189] plexShowSprite::$5 = plex_sprite_idx + 1 -- vbuxx=vbuz1_plus_1 ldx.z plex_sprite_idx inx - // [189] plexShowSprite::$6 = plexShowSprite::$5 & 7 -- vbuaa=vbuxx_band_vbuc1 + // [190] plexShowSprite::$6 = plexShowSprite::$5 & 7 -- vbuaa=vbuxx_band_vbuc1 txa and #7 - // [190] plex_sprite_idx = plexShowSprite::$6 -- vbuz1=vbuaa + // [191] plex_sprite_idx = plexShowSprite::$6 -- vbuz1=vbuaa sta.z plex_sprite_idx - // [191] plex_show_idx = ++ plex_show_idx -- vbuz1=_inc_vbuz1 + // [192] plex_show_idx = ++ plex_show_idx -- vbuz1=_inc_vbuz1 inc.z plex_show_idx - // [192] plex_sprite_msb = plex_sprite_msb << 1 -- vbuz1=vbuz1_rol_1 + // [193] plex_sprite_msb = plex_sprite_msb << 1 -- vbuz1=vbuz1_rol_1 asl.z plex_sprite_msb - // [193] if(plex_sprite_msb!=0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1 + // [194] if(plex_sprite_msb!=0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1 lda.z plex_sprite_msb cmp #0 bne __breturn jmp __b4 // plexShowSprite::@4 __b4: - // [194] plex_sprite_msb = 1 -- vbuz1=vbuc1 + // [195] plex_sprite_msb = 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb jmp __breturn // plexShowSprite::@return __breturn: - // [195] return + // [196] return rts // plexShowSprite::@1 __b1: - // [196] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + // [197] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 lda SPRITES_XMSB ora.z plex_sprite_msb sta SPRITES_XMSB @@ -4539,19 +4428,19 @@ plexShowSprite: { keyboard_key_pressed: { .const colidx = KEY_SPACE&7 .label rowidx = KEY_SPACE>>3 - // [198] call keyboard_matrix_read + // [199] call keyboard_matrix_read jsr keyboard_matrix_read - // [199] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 + // [200] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 jmp __b1 // keyboard_key_pressed::@1 __b1: - // [200] keyboard_key_pressed::$2 = keyboard_matrix_read::return#2 - // [201] keyboard_key_pressed::return#0 = keyboard_key_pressed::$2 & *(keyboard_matrix_col_bitmask+keyboard_key_pressed::colidx#0) -- vbuaa=vbuaa_band__deref_pbuc1 + // [201] keyboard_key_pressed::$2 = keyboard_matrix_read::return#2 + // [202] keyboard_key_pressed::return#0 = keyboard_key_pressed::$2 & *(keyboard_matrix_col_bitmask+keyboard_key_pressed::colidx#0) -- vbuaa=vbuaa_band__deref_pbuc1 and keyboard_matrix_col_bitmask+colidx jmp __breturn // keyboard_key_pressed::@return __breturn: - // [202] return + // [203] return rts } // mulf8u_prepare @@ -4559,7 +4448,7 @@ keyboard_key_pressed: { // mulf8u_prepare(byte register(A) a) mulf8u_prepare: { .label memA = $fd - // [203] *mulf8u_prepare::memA = mulf8u_prepare::a#0 -- _deref_pbuc1=vbuaa + // [204] *mulf8u_prepare::memA = 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 @@ -4571,72 +4460,72 @@ mulf8u_prepare: { jmp __breturn // mulf8u_prepare::@return __breturn: - // [205] return + // [206] return rts } // mulf8s_prepared // Calculate fast multiply with a prepared unsigned char to a unsigned int result // The prepared number is set by calling mulf8s_prepare(char a) -// mulf8s_prepared(signed byte zp($16) b) +// mulf8s_prepared(signed byte zp($18) b) mulf8s_prepared: { .label memA = $fd .label m = $f - .label b = $16 - // [206] mulf8u_prepared::b#0 = (byte)mulf8s_prepared::b#0 -- vbuaa=vbuz1 + .label b = $18 + // [207] mulf8u_prepared::b#0 = (byte)mulf8s_prepared::b#0 -- vbuaa=vbuz1 lda.z b - // [207] call mulf8u_prepared + // [208] call mulf8u_prepared jsr mulf8u_prepared - // [208] mulf8u_prepared::return#2 = mulf8u_prepared::return#0 + // [209] mulf8u_prepared::return#2 = mulf8u_prepared::return#0 jmp __b5 // mulf8s_prepared::@5 __b5: - // [209] mulf8s_prepared::m#0 = mulf8u_prepared::return#2 - // [210] if(*mulf8s_prepared::memA>=0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 + // [210] mulf8s_prepared::m#0 = mulf8u_prepared::return#2 + // [211] if(*mulf8s_prepared::memA>=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: - // [211] mulf8s_prepared::$6 = > mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 + // [212] mulf8s_prepared::$6 = > mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 lda.z m+1 - // [212] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (byte)mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 + // [213] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (byte)mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 sec sbc.z b - // [213] mulf8s_prepared::m#1 = mulf8s_prepared::m#0 hi= mulf8s_prepared::$11 -- vwuz1=vwuz1_sethi_vbuaa + // [214] mulf8s_prepared::m#1 = mulf8s_prepared::m#0 hi= mulf8s_prepared::$11 -- vwuz1=vwuz1_sethi_vbuaa sta.z m+1 - // [214] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] + // [215] 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: - // [214] phi mulf8s_prepared::m#5 = mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy + // [215] phi mulf8s_prepared::m#5 = mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy jmp __b1 // mulf8s_prepared::@1 __b1: - // [215] if(mulf8s_prepared::b#0>=0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 + // [216] if(mulf8s_prepared::b#0>=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: - // [216] mulf8s_prepared::$9 = > mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 + // [217] mulf8s_prepared::$9 = > mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 lda.z m+1 - // [217] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (byte)*mulf8s_prepared::memA -- vbuaa=vbuaa_minus__deref_pbuc1 + // [218] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (byte)*mulf8s_prepared::memA -- vbuaa=vbuaa_minus__deref_pbuc1 sec sbc memA - // [218] mulf8s_prepared::m#2 = mulf8s_prepared::m#5 hi= mulf8s_prepared::$12 -- vwuz1=vwuz1_sethi_vbuaa + // [219] mulf8s_prepared::m#2 = mulf8s_prepared::m#5 hi= mulf8s_prepared::$12 -- vwuz1=vwuz1_sethi_vbuaa sta.z m+1 - // [219] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] + // [220] 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: - // [219] phi mulf8s_prepared::m#4 = mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy + // [220] phi mulf8s_prepared::m#4 = 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: - // [220] return + // [221] return rts } // keyboard_matrix_read @@ -4646,16 +4535,16 @@ mulf8s_prepared: { // 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 the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // [221] *((byte*)CIA1) = *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // [222] *((byte*)CIA1) = *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx sta CIA1 - // [222] keyboard_matrix_read::return#0 = ~ *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + // [223] keyboard_matrix_read::return#0 = ~ *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff jmp __breturn // keyboard_matrix_read::@return __breturn: - // [223] return + // [224] return rts } // mulf8u_prepared @@ -4666,7 +4555,7 @@ mulf8u_prepared: { .label resL = $fe .label memB = $ff .label return = $f - // [224] *mulf8u_prepared::memB = mulf8u_prepared::b#0 -- _deref_pbuc1=vbuaa + // [225] *mulf8u_prepared::memB = 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 @@ -4681,7 +4570,7 @@ mulf8u_prepared: { sm4: sbc mulf_sqr2_hi,x sta memB - // [226] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + // [227] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda resL sta.z return lda memB @@ -4689,7 +4578,7 @@ mulf8u_prepared: { jmp __breturn // mulf8u_prepared::@return __breturn: - // [227] return + // [228] return rts } // File Data @@ -4861,8 +4750,6 @@ Removing instruction __b4_from___b12: Removing instruction __b7_from___b14: Removing instruction __b1_from_exit: Removing instruction keyboard_key_pressed_from___b1: -Removing instruction plexSetScreen1_from_plexInit: -Removing instruction __b1_from_plexSetScreen1: Removing instruction __b1_from___b1: Removing instruction __b9_from___b6: Removing instruction __b9: @@ -4919,6 +4806,7 @@ Removing instruction __b1: Removing instruction __b2: Removing instruction __breturn: Removing instruction plexSetScreen1: +Removing instruction __b1_from_plexSetScreen1: Removing instruction __breturn: Removing instruction __b1_from_mulf_init: Removing instruction __b5_from___b1: @@ -4983,8 +4871,7 @@ const byte OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 const nomodify byte PLEX_COUNT = $20 const byte* PLEX_FREE_YPOS[8] = { fill( 8, 0) } const byte* PLEX_PTR[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } -byte* PLEX_SCREEN_PTR -const byte* PLEX_SCREEN_PTR#0 PLEX_SCREEN_PTR = SCREEN+$3f8 +volatile byte* PLEX_SCREEN_PTR loadstore zp[2]:17 952.8679245283018 const byte* PLEX_SORTED_IDX[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const word* PLEX_XPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const byte* PLEX_YPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -5065,7 +4952,7 @@ byte loop::i1 byte loop::i1#1 i1 zp[1]:4 15001.5 byte loop::i1#5 i1 zp[1]:4 3333.6666666666665 byte loop::plexFreeNextYpos1_return -byte loop::plexFreeNextYpos1_return#0 plexFreeNextYpos1_return zp[1]:21 55001.0 +byte loop::plexFreeNextYpos1_return#0 plexFreeNextYpos1_return zp[1]:23 55001.0 signed byte loop::r signed byte loop::r#1 r zp[1]:5 6667.333333333333 signed byte loop::r#2 r zp[1]:5 1818.3636363636363 @@ -5108,7 +4995,7 @@ byte~ mulf8s_prepared::$12 reg byte a 2000002.0 byte~ mulf8s_prepared::$6 reg byte a 2000002.0 byte~ mulf8s_prepared::$9 reg byte a 2000002.0 signed byte mulf8s_prepared::b -signed byte mulf8s_prepared::b#0 b zp[1]:22 110000.20000000001 +signed byte mulf8s_prepared::b#0 b zp[1]:24 110000.20000000001 word mulf8s_prepared::m word mulf8s_prepared::m#0 m zp[2]:15 1000001.0 word mulf8s_prepared::m#1 m zp[2]:15 2000002.0 @@ -5186,18 +5073,18 @@ byte~ plexShowSprite::plexFreeAdd1_$2 reg byte a 200002.0 byte plexShowSprite::plexFreeAdd1_ypos byte plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 150001.5 byte plexShowSprite::plex_sprite_idx2 -byte plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:23 25000.25 +byte plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:25 25000.25 byte plexShowSprite::xpos_idx byte plexShowSprite::xpos_idx#0 reg byte a 200002.0 byte plexShowSprite::ypos void plexSort() byte plexSort::m -byte plexSort::m#1 m zp[1]:21 1500001.5 -byte plexSort::m#2 m zp[1]:21 416667.0833333334 +byte plexSort::m#1 m zp[1]:23 1500001.5 +byte plexSort::m#2 m zp[1]:23 416667.0833333334 byte plexSort::nxt_idx -byte plexSort::nxt_idx#0 nxt_idx zp[1]:22 300000.30000000005 +byte plexSort::nxt_idx#0 nxt_idx zp[1]:24 300000.30000000005 byte plexSort::nxt_y -byte plexSort::nxt_y#0 nxt_y zp[1]:23 1500000.375 +byte plexSort::nxt_y#0 nxt_y zp[1]:25 1500000.375 byte plexSort::plexFreePrepare1_s byte plexSort::plexFreePrepare1_s#1 reg byte x 1500001.5 byte plexSort::plexFreePrepare1_s#2 reg byte x 1500001.5 @@ -5206,10 +5093,10 @@ byte plexSort::s#1 reg byte x 1.3666668333333332E7 byte plexSort::s#2 reg byte x 2000002.0 byte plexSort::s#3 reg byte x 2.05000025E7 byte plexSort::s#6 reg byte x 2000002.0 -volatile byte plex_free_next loadstore zp[1]:20 8205.307692307691 -volatile byte plex_show_idx loadstore zp[1]:17 10408.326530612245 -volatile byte plex_sprite_idx loadstore zp[1]:18 8913.195652173914 -volatile byte plex_sprite_msb loadstore zp[1]:19 12978.91489361702 +volatile byte plex_free_next loadstore zp[1]:22 8205.307692307691 +volatile byte plex_show_idx loadstore zp[1]:19 10408.326530612245 +volatile byte plex_sprite_idx loadstore zp[1]:20 8913.195652173914 +volatile byte plex_sprite_msb loadstore zp[1]:21 12978.91489361702 reg byte x [ init::i1#2 init::i1#1 ] zp[1]:2 [ loop::angle#6 loop::angle#1 init::i#2 init::i#1 ] @@ -5229,10 +5116,11 @@ reg byte x [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] zp[2]:15 [ 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 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] -zp[1]:17 [ plex_show_idx ] -zp[1]:18 [ plex_sprite_idx ] -zp[1]:19 [ plex_sprite_msb ] -zp[1]:20 [ plex_free_next ] +zp[2]:17 [ PLEX_SCREEN_PTR ] +zp[1]:19 [ plex_show_idx ] +zp[1]:20 [ plex_sprite_idx ] +zp[1]:21 [ plex_sprite_msb ] +zp[1]:22 [ plex_free_next ] reg byte a [ init::$10 ] reg byte a [ init::$3 ] reg byte x [ init::$4 ] @@ -5243,7 +5131,7 @@ reg byte x [ loop::$4 ] reg byte a [ loop::$20 ] reg byte a [ loop::$8 ] reg byte a [ loop::$11 ] -zp[1]:21 [ loop::plexFreeNextYpos1_return#0 plexSort::m#2 plexSort::m#1 ] +zp[1]:23 [ loop::plexFreeNextYpos1_return#0 plexSort::m#2 plexSort::m#1 ] reg byte a [ keyboard_key_pressed::return#3 ] reg byte a [ loop::$18 ] reg byte a [ keyboard_key_pressed::return#2 ] @@ -5252,9 +5140,9 @@ reg byte a [ mulf_init::$1 ] reg byte a [ mulf_init::$4 ] reg byte a [ mulf_init::$5 ] reg byte a [ mulf8u_prepare::a#0 ] -zp[1]:22 [ plexSort::nxt_idx#0 mulf8s_prepared::b#0 ] +zp[1]:24 [ plexSort::nxt_idx#0 mulf8s_prepared::b#0 ] reg byte x [ plexSort::s#2 ] -zp[1]:23 [ plexShowSprite::plex_sprite_idx2#0 plexSort::nxt_y#0 ] +zp[1]:25 [ plexShowSprite::plex_sprite_idx2#0 plexSort::nxt_y#0 ] reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$1 ] @@ -5278,7 +5166,7 @@ reg byte a [ keyboard_matrix_read::return#0 ] FINAL ASSEMBLER -Score: 74790 +Score: 74811 // File Comments // Same animation using a multiplexer @@ -5316,39 +5204,45 @@ Score: 74790 .label SCREEN = $400 .label COS = SIN+$40 // The address of the sprite pointers on the current screen (screen+0x3f8). - .label PLEX_SCREEN_PTR = SCREEN+$3f8 + .label PLEX_SCREEN_PTR = $11 // The index in the PLEX tables of the next sprite to show - .label plex_show_idx = $11 + .label plex_show_idx = $13 // The index the next sprite to use for showing (sprites are used round-robin) - .label plex_sprite_idx = $12 + .label plex_sprite_idx = $14 // The MSB bit of the next sprite to use for showing - .label plex_sprite_msb = $13 + .label plex_sprite_msb = $15 // 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 = $14 + .label plex_free_next = $16 // __start __start: { // __start::__init1 + // PLEX_SCREEN_PTR = 0x400+0x3f8 + // [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 -- pbuz1=pbuc1 + lda #<$400+$3f8 + sta.z PLEX_SCREEN_PTR + lda #>$400+$3f8 + sta.z PLEX_SCREEN_PTR+1 // plex_show_idx=0 - // [1] plex_show_idx = 0 -- vbuz1=vbuc1 + // [2] plex_show_idx = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_show_idx // plex_sprite_idx=0 - // [2] plex_sprite_idx = 0 -- vbuz1=vbuc1 + // [3] plex_sprite_idx = 0 -- vbuz1=vbuc1 sta.z plex_sprite_idx // plex_sprite_msb=1 - // [3] plex_sprite_msb = 1 -- vbuz1=vbuc1 + // [4] plex_sprite_msb = 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb // plex_free_next = 0 - // [4] plex_free_next = 0 -- vbuz1=vbuc1 + // [5] plex_free_next = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_free_next - // [5] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [6] call main + // [7] call main jsr main // __start::@return - // [7] return + // [8] return rts } // main @@ -5357,19 +5251,19 @@ main: { // asm { sei } sei // init() - // [9] call init + // [10] call init jsr init - // [10] phi from main to main::@1 [phi:main->main::@1] + // [11] phi from main to main::@1 [phi:main->main::@1] // main::@1 // loop() - // [11] call loop - // [40] phi from main::@1 to loop [phi:main::@1->loop] + // [12] call loop + // [41] phi from main::@1 to loop [phi:main::@1->loop] jsr loop - // [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [13] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // exit() - // [13] call exit - // [90] phi from main::@2 to exit [phi:main::@2->exit] + // [14] call exit + // [91] phi from main::@2 to exit [phi:main::@2->exit] jsr exit // main::@3 // asm @@ -5377,7 +5271,7 @@ main: { cli // main::@return // } - // [15] return + // [16] return rts } // init @@ -5385,110 +5279,110 @@ main: { init: { .label i = 2 // *D011 = VIC_DEN | VIC_RSEL | 3 - // [16] *D011 = VIC_DEN|VIC_RSEL|3 -- _deref_pbuc1=vbuc2 + // [17] *D011 = VIC_DEN|VIC_RSEL|3 -- _deref_pbuc1=vbuc2 lda #VIC_DEN|VIC_RSEL|3 sta D011 // plexInit(SCREEN) - // [17] call plexInit + // [18] call plexInit // Initialize the multiplexer - // [97] phi from init to plexInit [phi:init->plexInit] + // [98] phi from init to plexInit [phi:init->plexInit] jsr plexInit - // [18] phi from init to init::@1 [phi:init->init::@1] - // [18] phi init::i#2 = 0 [phi:init->init::@1#0] -- vbuz1=vbuc1 + // [19] phi from init to init::@1 [phi:init->init::@1] + // [19] phi init::i#2 = 0 [phi:init->init::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i // Set the sprite pointers & initial positions - // [18] phi from init::@1 to init::@1 [phi:init::@1->init::@1] - // [18] phi init::i#2 = init::i#1 [phi:init::@1->init::@1#0] -- register_copy + // [19] phi from init::@1 to init::@1 [phi:init::@1->init::@1] + // [19] phi init::i#2 = init::i#1 [phi:init::@1->init::@1#0] -- register_copy // init::@1 __b1: // PLEX_PTR[i] = (char)(SPRITE/0x40) - // [19] PLEX_PTR[init::i#2] = (byte)SPRITE/$40 -- pbuc1_derefidx_vbuz1=vbuc2 + // [20] PLEX_PTR[init::i#2] = (byte)SPRITE/$40 -- pbuc1_derefidx_vbuz1=vbuc2 lda #$ff&SPRITE/$40 ldy.z i sta PLEX_PTR,y // i*5 - // [20] init::$10 = init::i#2 << 2 -- vbuaa=vbuz1_rol_2 + // [21] init::$10 = init::i#2 << 2 -- vbuaa=vbuz1_rol_2 tya asl asl - // [21] init::$3 = init::$10 + init::i#2 -- vbuaa=vbuaa_plus_vbuz1 + // [22] init::$3 = init::$10 + init::i#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z i // 24+i*5 - // [22] init::$4 = $18 + init::$3 -- vbuxx=vbuc1_plus_vbuaa + // [23] init::$4 = $18 + init::$3 -- vbuxx=vbuc1_plus_vbuaa tax axs #-[$18] // PLEX_XPOS[i] = 24+i*5 - // [23] init::$9 = init::i#2 << 1 -- vbuaa=vbuz1_rol_1 + // [24] init::$9 = init::i#2 << 1 -- vbuaa=vbuz1_rol_1 tya asl - // [24] PLEX_XPOS[init::$9] = init::$4 -- pwuc1_derefidx_vbuaa=vbuxx + // [25] PLEX_XPOS[init::$9] = init::$4 -- pwuc1_derefidx_vbuaa=vbuxx tay txa sta PLEX_XPOS,y lda #0 sta PLEX_XPOS+1,y // i*8 - // [25] init::$5 = init::i#2 << 3 -- vbuaa=vbuz1_rol_3 + // [26] init::$5 = init::i#2 << 3 -- vbuaa=vbuz1_rol_3 lda.z i asl asl asl // 50+i*8 - // [26] init::$6 = $32 + init::$5 -- vbuaa=vbuc1_plus_vbuaa + // [27] init::$6 = $32 + init::$5 -- vbuaa=vbuc1_plus_vbuaa clc adc #$32 // PLEX_YPOS[i] = 50+i*8 - // [27] PLEX_YPOS[init::i#2] = init::$6 -- pbuc1_derefidx_vbuz1=vbuaa + // [28] PLEX_YPOS[init::i#2] = init::$6 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z i sta PLEX_YPOS,y // for(char i: 0..PLEX_COUNT-1) - // [28] init::i#1 = ++ init::i#2 -- vbuz1=_inc_vbuz1 + // [29] init::i#1 = ++ init::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [29] if(init::i#1!=PLEX_COUNT-1+1) goto init::@1 -- vbuz1_neq_vbuc1_then_la1 + // [30] if(init::i#1!=PLEX_COUNT-1+1) goto init::@1 -- vbuz1_neq_vbuc1_then_la1 lda #PLEX_COUNT-1+1 cmp.z i bne __b1 // init::@2 // *SPRITES_ENABLE = 0xff - // [30] *SPRITES_ENABLE = $ff -- _deref_pbuc1=vbuc2 + // [31] *SPRITES_ENABLE = $ff -- _deref_pbuc1=vbuc2 // Enable & initialize sprites lda #$ff sta SPRITES_ENABLE - // [31] phi from init::@2 to init::@3 [phi:init::@2->init::@3] - // [31] phi init::i1#2 = 0 [phi:init::@2->init::@3#0] -- vbuxx=vbuc1 + // [32] phi from init::@2 to init::@3 [phi:init::@2->init::@3] + // [32] phi init::i1#2 = 0 [phi:init::@2->init::@3#0] -- vbuxx=vbuc1 ldx #0 - // [31] phi from init::@3 to init::@3 [phi:init::@3->init::@3] - // [31] phi init::i1#2 = init::i1#1 [phi:init::@3->init::@3#0] -- register_copy + // [32] phi from init::@3 to init::@3 [phi:init::@3->init::@3] + // [32] phi init::i1#2 = init::i1#1 [phi:init::@3->init::@3#0] -- register_copy // init::@3 __b3: // SPRITES_COLOR[i] = GREEN - // [32] SPRITES_COLOR[init::i1#2] = GREEN -- pbuc1_derefidx_vbuxx=vbuc2 + // [33] SPRITES_COLOR[init::i1#2] = GREEN -- pbuc1_derefidx_vbuxx=vbuc2 lda #GREEN sta SPRITES_COLOR,x // for(char i: 0..7) - // [33] init::i1#1 = ++ init::i1#2 -- vbuxx=_inc_vbuxx + // [34] init::i1#1 = ++ init::i1#2 -- vbuxx=_inc_vbuxx inx - // [34] if(init::i1#1!=8) goto init::@3 -- vbuxx_neq_vbuc1_then_la1 + // [35] if(init::i1#1!=8) goto init::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne __b3 - // [35] phi from init::@3 to init::@4 [phi:init::@3->init::@4] + // [36] phi from init::@3 to init::@4 [phi:init::@3->init::@4] // init::@4 // mulf_init() - // [36] call mulf_init - // [104] phi from init::@4 to mulf_init [phi:init::@4->mulf_init] + // [37] call mulf_init + // [105] phi from init::@4 to mulf_init [phi:init::@4->mulf_init] jsr mulf_init - // [37] phi from init::@4 to init::@5 [phi:init::@4->init::@5] + // [38] phi from init::@4 to init::@5 [phi:init::@4->init::@5] // init::@5 // memset(SCREEN, ' ', 1000) - // [38] call memset + // [39] call memset // Clear screen - // [133] phi from init::@5 to memset [phi:init::@5->memset] + // [134] phi from init::@5 to memset [phi:init::@5->memset] jsr memset // init::@return // } - // [39] return + // [40] return rts } // loop @@ -5505,68 +5399,68 @@ loop: { .label i = 3 // Render Rotated BOBs .label angle = 2 - .label plexFreeNextYpos1_return = $15 + .label plexFreeNextYpos1_return = $17 .label i1 = 4 - // [41] phi from loop to loop::@1 [phi:loop->loop::@1] - // [41] phi loop::angle#6 = 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 + // [42] phi from loop to loop::@1 [phi:loop->loop::@1] + // [42] phi loop::angle#6 = 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 lda #0 sta.z angle // loop::@1 // loop::@2 __b2: // while (*RASTER<0xd8) - // [42] if(*RASTER<$d8) goto loop::@2 -- _deref_pbuc1_lt_vbuc2_then_la1 + // [43] if(*RASTER<$d8) goto loop::@2 -- _deref_pbuc1_lt_vbuc2_then_la1 lda RASTER cmp #$d8 bcc __b2 // loop::@3 // *BORDER_COLOR = 0xf - // [43] *BORDER_COLOR = $f -- _deref_pbuc1=vbuc2 + // [44] *BORDER_COLOR = $f -- _deref_pbuc1=vbuc2 lda #$f sta BORDER_COLOR - // [44] loop::a#6 = loop::angle#6 -- vbuz1=vbuz2 + // [45] loop::a#6 = loop::angle#6 -- vbuz1=vbuz2 lda.z angle sta.z a - // [45] phi from loop::@3 to loop::@4 [phi:loop::@3->loop::@4] - // [45] phi loop::i#2 = 0 [phi:loop::@3->loop::@4#0] -- vbuz1=vbuc1 + // [46] phi from loop::@3 to loop::@4 [phi:loop::@3->loop::@4] + // [46] phi loop::i#2 = 0 [phi:loop::@3->loop::@4#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [45] phi loop::a#2 = loop::a#6 [phi:loop::@3->loop::@4#1] -- register_copy - // [45] phi loop::r#2 = $1e [phi:loop::@3->loop::@4#2] -- vbsz1=vbsc1 + // [46] phi loop::a#2 = loop::a#6 [phi:loop::@3->loop::@4#1] -- register_copy + // [46] phi loop::r#2 = $1e [phi:loop::@3->loop::@4#2] -- vbsz1=vbsc1 lda #$1e sta.z r - // [45] phi from loop::@12 to loop::@4 [phi:loop::@12->loop::@4] - // [45] phi loop::i#2 = loop::i#1 [phi:loop::@12->loop::@4#0] -- register_copy - // [45] phi loop::a#2 = loop::a#1 [phi:loop::@12->loop::@4#1] -- register_copy - // [45] phi loop::r#2 = loop::r#1 [phi:loop::@12->loop::@4#2] -- register_copy + // [46] phi from loop::@12 to loop::@4 [phi:loop::@12->loop::@4] + // [46] phi loop::i#2 = loop::i#1 [phi:loop::@12->loop::@4#0] -- register_copy + // [46] phi loop::a#2 = loop::a#1 [phi:loop::@12->loop::@4#1] -- register_copy + // [46] phi loop::r#2 = loop::r#1 [phi:loop::@12->loop::@4#2] -- register_copy // loop::@4 __b4: // *BORDER_COLOR = 6 - // [46] *BORDER_COLOR = 6 -- _deref_pbuc1=vbuc2 + // [47] *BORDER_COLOR = 6 -- _deref_pbuc1=vbuc2 //kickasm {{ .break }} lda #6 sta BORDER_COLOR // mulf8s(r, COS[a]) - // [47] mulf8s::a#0 = loop::r#2 -- vbsaa=vbsz1 + // [48] mulf8s::a#0 = loop::r#2 -- vbsaa=vbsz1 lda.z r - // [48] mulf8s::b#0 = COS[loop::a#2] -- vbsxx=pbsc1_derefidx_vbuz1 + // [49] mulf8s::b#0 = COS[loop::a#2] -- vbsxx=pbsc1_derefidx_vbuz1 ldy.z a ldx COS,y - // [49] call mulf8s - // [139] phi from loop::@4 to mulf8s [phi:loop::@4->mulf8s] - // [139] phi mulf8s::b#2 = mulf8s::b#0 [phi:loop::@4->mulf8s#0] -- register_copy - // [139] phi mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 [phi:loop::@4->mulf8s#1] -- register_copy + // [50] call mulf8s + // [140] phi from loop::@4 to mulf8s [phi:loop::@4->mulf8s] + // [140] phi mulf8s::b#2 = mulf8s::b#0 [phi:loop::@4->mulf8s#0] -- register_copy + // [140] phi mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 [phi:loop::@4->mulf8s#1] -- register_copy jsr mulf8s // mulf8s(r, COS[a]) - // [50] mulf8s::return#2 = mulf8s::return#0 + // [51] mulf8s::return#2 = mulf8s::return#0 // loop::@11 - // [51] loop::$1 = mulf8s::return#2 + // [52] loop::$1 = mulf8s::return#2 // mulf8s(r, COS[a])*2 - // [52] loop::$2 = loop::$1 << 1 -- vwsz1=vwsz1_rol_1 + // [53] loop::$2 = loop::$1 << 1 -- vwsz1=vwsz1_rol_1 asl.z __2 rol.z __2+1 // x = mulf8s(r, COS[a])*2 + 125*0x100 - // [53] loop::x#0 = loop::$2 + (signed word)$7d*$100 -- vwsz1=vwsz1_plus_vwsc1 + // [54] loop::x#0 = loop::$2 + (signed word)$7d*$100 -- vwsz1=vwsz1_plus_vwsc1 clc lda.z x adc #<$7d*$100 @@ -5575,39 +5469,39 @@ loop: { adc #>$7d*$100 sta.z x+1 // >x - // [54] loop::$4 = > loop::x#0 -- vbuxx=_hi_vwsz1 + // [55] loop::$4 = > loop::x#0 -- vbuxx=_hi_vwsz1 tax // PLEX_XPOS[i] = >x - // [55] loop::$20 = loop::i#2 << 1 -- vbuaa=vbuz1_rol_1 + // [56] loop::$20 = loop::i#2 << 1 -- vbuaa=vbuz1_rol_1 lda.z i asl - // [56] PLEX_XPOS[loop::$20] = loop::$4 -- pwuc1_derefidx_vbuaa=vbuxx + // [57] PLEX_XPOS[loop::$20] = loop::$4 -- pwuc1_derefidx_vbuaa=vbuxx tay txa sta PLEX_XPOS,y lda #0 sta PLEX_XPOS+1,y // mulf8s(r, SIN[a]) - // [57] mulf8s::a#1 = loop::r#2 -- vbsaa=vbsz1 + // [58] mulf8s::a#1 = loop::r#2 -- vbsaa=vbsz1 lda.z r - // [58] mulf8s::b#1 = SIN[loop::a#2] -- vbsxx=pbsc1_derefidx_vbuz1 + // [59] mulf8s::b#1 = SIN[loop::a#2] -- vbsxx=pbsc1_derefidx_vbuz1 ldy.z a ldx SIN,y - // [59] call mulf8s - // [139] phi from loop::@11 to mulf8s [phi:loop::@11->mulf8s] - // [139] phi mulf8s::b#2 = mulf8s::b#1 [phi:loop::@11->mulf8s#0] -- register_copy - // [139] phi mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 [phi:loop::@11->mulf8s#1] -- register_copy + // [60] call mulf8s + // [140] phi from loop::@11 to mulf8s [phi:loop::@11->mulf8s] + // [140] phi mulf8s::b#2 = mulf8s::b#1 [phi:loop::@11->mulf8s#0] -- register_copy + // [140] phi mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#1 [phi:loop::@11->mulf8s#1] -- register_copy jsr mulf8s // mulf8s(r, SIN[a]) - // [60] mulf8s::return#3 = mulf8s::return#0 + // [61] mulf8s::return#3 = mulf8s::return#0 // loop::@12 - // [61] loop::$5 = mulf8s::return#3 + // [62] loop::$5 = mulf8s::return#3 // mulf8s(r, SIN[a])*2 - // [62] loop::$6 = loop::$5 << 1 -- vwsz1=vwsz1_rol_1 + // [63] loop::$6 = loop::$5 << 1 -- vwsz1=vwsz1_rol_1 asl.z __6 rol.z __6+1 // y = mulf8s(r, SIN[a])*2 + 125*0x100 - // [63] loop::y#0 = loop::$6 + (signed word)$7d*$100 -- vwsz1=vwsz1_plus_vwsc1 + // [64] loop::y#0 = loop::$6 + (signed word)$7d*$100 -- vwsz1=vwsz1_plus_vwsc1 clc lda.z y adc #<$7d*$100 @@ -5616,174 +5510,179 @@ loop: { adc #>$7d*$100 sta.z y+1 // >y - // [64] loop::$8 = > loop::y#0 -- vbuaa=_hi_vwsz1 + // [65] loop::$8 = > loop::y#0 -- vbuaa=_hi_vwsz1 // PLEX_YPOS[i] = >y - // [65] PLEX_YPOS[loop::i#2] = loop::$8 -- pbuc1_derefidx_vbuz1=vbuaa + // [66] PLEX_YPOS[loop::i#2] = loop::$8 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z i sta PLEX_YPOS,y // a += 98 - // [66] loop::a#1 = loop::a#2 + $62 -- vbuz1=vbuz1_plus_vbuc1 + // [67] loop::a#1 = loop::a#2 + $62 -- vbuz1=vbuz1_plus_vbuc1 lax.z a axs #-[$62] stx.z a // r += 3 - // [67] loop::r#1 = loop::r#2 + 3 -- vbsz1=vbsz1_plus_vbsc1 + // [68] loop::r#1 = loop::r#2 + 3 -- vbsz1=vbsz1_plus_vbsc1 lax.z r axs #-[3] stx.z r // for(char i: 0..NUM_BOBS-1) - // [68] loop::i#1 = ++ loop::i#2 -- vbuz1=_inc_vbuz1 + // [69] loop::i#1 = ++ loop::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [69] if(loop::i#1!=NUM_BOBS-1+1) goto loop::@4 -- vbuz1_neq_vbuc1_then_la1 + // [70] if(loop::i#1!=NUM_BOBS-1+1) goto loop::@4 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_BOBS-1+1 cmp.z i bne __b4 // loop::@5 // *BORDER_COLOR = 3 - // [70] *BORDER_COLOR = 3 -- _deref_pbuc1=vbuc2 + // [71] *BORDER_COLOR = 3 -- _deref_pbuc1=vbuc2 lda #3 sta BORDER_COLOR // plexSort() - // [71] call plexSort - // [146] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + // [72] call plexSort + // [147] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] jsr plexSort // loop::@13 // angle += 3 - // [72] loop::angle#1 = loop::angle#6 + 3 -- vbuz1=vbuz1_plus_vbuc1 + // [73] loop::angle#1 = loop::angle#6 + 3 -- vbuz1=vbuz1_plus_vbuc1 lax.z angle axs #-[3] stx.z angle // *BORDER_COLOR = BLACK - // [73] *BORDER_COLOR = BLACK -- _deref_pbuc1=vbuc2 + // [74] *BORDER_COLOR = BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BORDER_COLOR // Sort the sprites by y-position // loop::@6 __b6: // *D011&VIC_RST8 - // [74] loop::$11 = *D011 & VIC_RST8 -- vbuaa=_deref_pbuc1_band_vbuc2 + // [75] loop::$11 = *D011 & VIC_RST8 -- vbuaa=_deref_pbuc1_band_vbuc2 lda #VIC_RST8 and D011 // while((*D011&VIC_RST8)!=0) - // [75] if(loop::$11!=0) goto loop::@6 -- vbuaa_neq_0_then_la1 + // [76] if(loop::$11!=0) goto loop::@6 -- vbuaa_neq_0_then_la1 cmp #0 bne __b6 - // [76] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7] - // [76] phi loop::i1#5 = 0 [phi:loop::@6->loop::@7#0] -- vbuz1=vbuc1 + // [77] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7] + // [77] phi loop::i1#5 = 0 [phi:loop::@6->loop::@7#0] -- vbuz1=vbuc1 lda #0 sta.z i1 // Show the sprites - // [76] phi from loop::@14 to loop::@7 [phi:loop::@14->loop::@7] - // [76] phi loop::i1#5 = loop::i1#1 [phi:loop::@14->loop::@7#0] -- register_copy + // [77] phi from loop::@14 to loop::@7 [phi:loop::@14->loop::@7] + // [77] phi loop::i1#5 = loop::i1#1 [phi:loop::@14->loop::@7#0] -- register_copy // loop::@7 __b7: // *BORDER_COLOR = BLACK - // [77] *BORDER_COLOR = BLACK -- _deref_pbuc1=vbuc2 + // [78] *BORDER_COLOR = BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BORDER_COLOR // loop::plexFreeNextYpos1 // return PLEX_FREE_YPOS[plex_free_next]; - // [78] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] -- vbuz1=pbuc1_derefidx_vbuz2 + // [79] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] -- 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] + // [86] call keyboard_key_pressed + // [198] phi from loop::@10 to keyboard_key_pressed [phi:loop::@10->keyboard_key_pressed] jsr keyboard_key_pressed // keyboard_key_pressed(KEY_SPACE) - // [86] keyboard_key_pressed::return#3 = keyboard_key_pressed::return#0 + // [87] keyboard_key_pressed::return#3 = keyboard_key_pressed::return#0 // loop::@15 - // [87] loop::$18 = keyboard_key_pressed::return#3 + // [88] loop::$18 = keyboard_key_pressed::return#3 // if(keyboard_key_pressed(KEY_SPACE)) - // [88] if(0!=loop::$18) goto loop::@return -- vbuc1_neq_vbuaa_then_la1 + // [89] if(0!=loop::$18) goto loop::@return -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne __breturn - // [41] phi from loop::@15 to loop::@1 [phi:loop::@15->loop::@1] - // [41] phi loop::angle#6 = loop::angle#1 [phi:loop::@15->loop::@1#0] -- register_copy + // [42] phi from loop::@15 to loop::@1 [phi:loop::@15->loop::@1] + // [42] phi loop::angle#6 = loop::angle#1 [phi:loop::@15->loop::@1#0] -- register_copy jmp __b2 // loop::@return __breturn: // } - // [89] return + // [90] return rts } // exit // Exit the program exit: { - // [91] phi from exit exit::@2 to exit::@1 [phi:exit/exit::@2->exit::@1] + // [92] 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) - // [92] call keyboard_key_pressed - // [197] phi from exit::@1 to keyboard_key_pressed [phi:exit::@1->keyboard_key_pressed] + // [93] call keyboard_key_pressed + // [198] phi from exit::@1 to keyboard_key_pressed [phi:exit::@1->keyboard_key_pressed] jsr keyboard_key_pressed // keyboard_key_pressed(KEY_SPACE) - // [93] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 + // [94] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 // exit::@2 - // [94] exit::$0 = keyboard_key_pressed::return#2 + // [95] exit::$0 = keyboard_key_pressed::return#2 // while(keyboard_key_pressed(KEY_SPACE)) - // [95] if(0!=exit::$0) goto exit::@1 -- vbuc1_neq_vbuaa_then_la1 + // [96] if(0!=exit::$0) goto exit::@1 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne __b1 // exit::@return // } - // [96] return + // [97] return rts } // plexInit // Initialize the multiplexer data structures plexInit: { - // [98] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] // plexInit::plexSetScreen1 - // [99] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] - // [99] phi plexInit::i#2 = 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 + // PLEX_SCREEN_PTR = screen+0x3f8 + // [99] PLEX_SCREEN_PTR = SCREEN+$3f8 -- pbuz1=pbuc1 + lda #SCREEN+$3f8 + sta.z PLEX_SCREEN_PTR+1 + // [100] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] + // [100] phi plexInit::i#2 = 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 ldx #0 - // [99] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] - // [99] phi plexInit::i#2 = plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy + // [100] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] + // [100] phi plexInit::i#2 = plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy // plexInit::@1 __b1: // PLEX_SORTED_IDX[i] = i - // [100] PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx + // [101] PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx txa sta PLEX_SORTED_IDX,x // for(char i: 0..PLEX_COUNT-1) - // [101] plexInit::i#1 = ++ plexInit::i#2 -- vbuxx=_inc_vbuxx + // [102] plexInit::i#1 = ++ plexInit::i#2 -- vbuxx=_inc_vbuxx inx - // [102] if(plexInit::i#1!=PLEX_COUNT-1+1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1 + // [103] if(plexInit::i#1!=PLEX_COUNT-1+1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #PLEX_COUNT-1+1 bne __b1 // plexInit::@return // } - // [103] return + // [104] return rts } // mulf_init @@ -5801,21 +5700,21 @@ mulf_init: { .label sqr2_lo = 6 //Start with g(0)=f(255) .label dir = $a - // [105] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] - // [105] phi mulf_init::x_2#3 = 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 + // [106] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + // [106] phi mulf_init::x_2#3 = 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [105] phi mulf_init::sqr1_hi#2 = mulf_sqr1_hi+1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + // [106] phi mulf_init::sqr1_hi#2 = mulf_sqr1_hi+1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [105] phi mulf_init::sqr#4 = 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 + // [106] phi mulf_init::sqr#4 = 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 txa sta.z sqr sta.z sqr+1 - // [105] phi mulf_init::c#2 = 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + // [106] phi mulf_init::c#2 = 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 sta.z c - // [105] phi mulf_init::sqr1_lo#2 = mulf_sqr1_lo+1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + // [106] phi mulf_init::sqr1_lo#2 = mulf_sqr1_lo+1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 lda #mulf_sqr1_lo+1 @@ -5823,25 +5722,25 @@ mulf_init: { // mulf_init::@1 __b1: // for(char* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++) - // [106] if(mulf_init::sqr1_lo#2!=mulf_sqr1_lo+$200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [107] if(mulf_init::sqr1_lo#2!=mulf_sqr1_lo+$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] - // [107] phi mulf_init::dir#2 = $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + // [108] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5] + // [108] phi mulf_init::dir#2 = $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 lda #$ff sta.z dir - // [107] phi mulf_init::sqr2_hi#2 = mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + // [108] phi mulf_init::sqr2_hi#2 = mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 lda #mulf_sqr2_hi sta.z sqr2_hi+1 - // [107] phi mulf_init::x_255#2 = -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 + // [108] phi mulf_init::x_255#2 = -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 ldx #-1 - // [107] phi mulf_init::sqr2_lo#2 = mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + // [108] phi mulf_init::sqr2_lo#2 = mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 lda #mulf_sqr2_lo @@ -5849,7 +5748,7 @@ mulf_init: { // mulf_init::@5 __b5: // for(char* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++) - // [108] if(mulf_init::sqr2_lo#2!=mulf_sqr2_lo+$1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + // [109] if(mulf_init::sqr2_lo#2!=mulf_sqr2_lo+$1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr2_lo+1 cmp #>mulf_sqr2_lo+$1ff bne __b6 @@ -5858,116 +5757,116 @@ mulf_init: { bne __b6 // mulf_init::@7 // *(mulf_sqr2_lo+511) = *(mulf_sqr1_lo+256) - // [109] *(mulf_sqr2_lo+$1ff) = *(mulf_sqr1_lo+$100) -- _deref_pbuc1=_deref_pbuc2 + // [110] *(mulf_sqr2_lo+$1ff) = *(mulf_sqr1_lo+$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) - // [110] *(mulf_sqr2_hi+$1ff) = *(mulf_sqr1_hi+$100) -- _deref_pbuc1=_deref_pbuc2 + // [111] *(mulf_sqr2_hi+$1ff) = *(mulf_sqr1_hi+$100) -- _deref_pbuc1=_deref_pbuc2 lda mulf_sqr1_hi+$100 sta mulf_sqr2_hi+$1ff // mulf_init::@return // } - // [111] return + // [112] return rts // mulf_init::@6 __b6: // *sqr2_lo = mulf_sqr1_lo[x_255] - // [112] *mulf_init::sqr2_lo#2 = mulf_sqr1_lo[mulf_init::x_255#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [113] *mulf_init::sqr2_lo#2 = mulf_sqr1_lo[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] - // [113] *mulf_init::sqr2_hi#2 = mulf_sqr1_hi[mulf_init::x_255#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [114] *mulf_init::sqr2_hi#2 = mulf_sqr1_hi[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]; - // [114] mulf_init::sqr2_hi#1 = ++ mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 + // [115] mulf_init::sqr2_hi#1 = ++ mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_hi bne !+ inc.z sqr2_hi+1 !: // x_255 = x_255 + dir - // [115] mulf_init::x_255#1 = mulf_init::x_255#2 + mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 + // [116] mulf_init::x_255#1 = mulf_init::x_255#2 + mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 txa clc adc.z dir tax // if(x_255==0) - // [116] if(mulf_init::x_255#1!=0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 + // [117] if(mulf_init::x_255#1!=0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 cpx #0 bne __b8 - // [118] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] - // [118] phi mulf_init::dir#4 = 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + // [119] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] + // [119] phi mulf_init::dir#4 = 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 lda #1 sta.z dir - // [117] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // [118] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] // mulf_init::@9 - // [118] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] - // [118] phi mulf_init::dir#4 = mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // [119] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [119] phi mulf_init::dir#4 = mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy // mulf_init::@8 __b8: // for(char* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++) - // [119] mulf_init::sqr2_lo#1 = ++ mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + // [120] mulf_init::sqr2_lo#1 = ++ mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_lo bne !+ inc.z sqr2_lo+1 !: - // [107] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] - // [107] phi mulf_init::dir#2 = mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy - // [107] phi mulf_init::sqr2_hi#2 = mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy - // [107] phi mulf_init::x_255#2 = mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy - // [107] phi mulf_init::sqr2_lo#2 = mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + // [108] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [108] phi mulf_init::dir#2 = mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [108] phi mulf_init::sqr2_hi#2 = mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [108] phi mulf_init::x_255#2 = mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [108] phi mulf_init::sqr2_lo#2 = 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) - // [120] mulf_init::c#1 = ++ mulf_init::c#2 -- vbuz1=_inc_vbuz1 + // [121] mulf_init::c#1 = ++ mulf_init::c#2 -- vbuz1=_inc_vbuz1 inc.z c // ++c&1 - // [121] mulf_init::$1 = mulf_init::c#1 & 1 -- vbuaa=vbuz1_band_vbuc1 + // [122] mulf_init::$1 = mulf_init::c#1 & 1 -- vbuaa=vbuz1_band_vbuc1 lda #1 and.z c // if((++c&1)==0) - // [122] if(mulf_init::$1!=0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 + // [123] if(mulf_init::$1!=0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 cmp #0 bne __b3 // mulf_init::@4 // x_2++; - // [123] mulf_init::x_2#1 = ++ mulf_init::x_2#3 -- vbuxx=_inc_vbuxx + // [124] mulf_init::x_2#1 = ++ mulf_init::x_2#3 -- vbuxx=_inc_vbuxx inx // sqr++; - // [124] mulf_init::sqr#2 = ++ mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + // [125] mulf_init::sqr#2 = ++ mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 inc.z sqr bne !+ inc.z sqr+1 !: - // [125] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] - // [125] phi mulf_init::x_2#2 = mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy - // [125] phi mulf_init::sqr#3 = mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // [126] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [126] phi mulf_init::x_2#2 = mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [126] phi mulf_init::sqr#3 = mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy // mulf_init::@3 __b3: // sqr - // [128] mulf_init::$5 = > mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 + // [129] mulf_init::$5 = > mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 lda.z sqr+1 // *sqr1_hi++ = >sqr - // [129] *mulf_init::sqr1_hi#2 = mulf_init::$5 -- _deref_pbuz1=vbuaa + // [130] *mulf_init::sqr1_hi#2 = mulf_init::$5 -- _deref_pbuz1=vbuaa sta (sqr1_hi),y // *sqr1_hi++ = >sqr; - // [130] mulf_init::sqr1_hi#1 = ++ mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + // [131] mulf_init::sqr1_hi#1 = ++ mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_hi bne !+ inc.z sqr1_hi+1 !: // sqr = sqr + x_2 - // [131] mulf_init::sqr#1 = mulf_init::sqr#3 + mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx + // [132] mulf_init::sqr#1 = mulf_init::sqr#3 + mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx txa clc adc.z sqr @@ -5976,17 +5875,17 @@ mulf_init: { inc.z sqr+1 !: // for(char* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++) - // [132] mulf_init::sqr1_lo#1 = ++ mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + // [133] mulf_init::sqr1_lo#1 = ++ mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_lo bne !+ inc.z sqr1_lo+1 !: - // [105] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] - // [105] phi mulf_init::x_2#3 = mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy - // [105] phi mulf_init::sqr1_hi#2 = mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy - // [105] phi mulf_init::sqr#4 = mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy - // [105] phi mulf_init::c#2 = mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy - // [105] phi mulf_init::sqr1_lo#2 = mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + // [106] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [106] phi mulf_init::x_2#3 = mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [106] phi mulf_init::sqr1_hi#2 = mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [106] phi mulf_init::sqr#4 = mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [106] phi mulf_init::c#2 = mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [106] phi mulf_init::sqr1_lo#2 = mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy jmp __b1 } // memset @@ -5997,8 +5896,8 @@ memset: { .label str = SCREEN .label end = str+num .label dst = $d - // [134] phi from memset to memset::@1 [phi:memset->memset::@1] - // [134] phi memset::dst#2 = (byte*)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [135] phi from memset to memset::@1 [phi:memset->memset::@1] + // [135] phi memset::dst#2 = (byte*)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -6006,7 +5905,7 @@ memset: { // memset::@1 __b1: // for(char* dst = str; dst!=end; dst++) - // [135] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [136] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -6015,23 +5914,23 @@ memset: { bne __b2 // memset::@return // } - // [136] return + // [137] return rts // memset::@2 __b2: // *dst = c - // [137] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 + // [138] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [138] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 + // [139] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [134] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [134] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [135] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [135] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // mulf8s @@ -6041,20 +5940,20 @@ mulf8s: { .label return = $f // mulf8s::mulf8s_prepare1 // mulf8u_prepare((char)a) - // [140] mulf8u_prepare::a#0 = (byte)mulf8s::mulf8s_prepare1_a#0 - // [141] call mulf8u_prepare + // [141] mulf8u_prepare::a#0 = (byte)mulf8s::mulf8s_prepare1_a#0 + // [142] call mulf8u_prepare jsr mulf8u_prepare // mulf8s::@1 // mulf8s_prepared(b) - // [142] mulf8s_prepared::b#0 = mulf8s::b#2 -- vbsz1=vbsxx + // [143] mulf8s_prepared::b#0 = mulf8s::b#2 -- vbsz1=vbsxx stx.z mulf8s_prepared.b - // [143] call mulf8s_prepared + // [144] call mulf8s_prepared jsr mulf8s_prepared // mulf8s::@2 - // [144] mulf8s::return#0 = (signed word)mulf8s_prepared::m#4 + // [145] mulf8s::return#0 = (signed word)mulf8s_prepared::m#4 // mulf8s::@return // } - // [145] return + // [146] return rts } // plexSort @@ -6068,52 +5967,52 @@ mulf8s: { // 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 = $16 - .label nxt_y = $17 - .label m = $15 - // [147] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] - // [147] phi plexSort::m#2 = 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 + .label nxt_idx = $18 + .label nxt_y = $19 + .label m = $17 + // [148] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] + // [148] phi plexSort::m#2 = 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 lda #0 sta.z m - // [147] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] - // [147] phi plexSort::m#2 = plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy + // [148] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] + // [148] phi plexSort::m#2 = plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy // plexSort::@1 __b1: // nxt_idx = PLEX_SORTED_IDX[m+1] - // [148] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2] -- vbuz1=pbuc1_derefidx_vbuz2 + // [149] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[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] - // [149] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] -- vbuz1=pbuc1_derefidx_vbuz2 + // [150] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] -- vbuz1=pbuc1_derefidx_vbuz2 tay lda PLEX_YPOS,y sta.z nxt_y // if(nxt_y=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 -- vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1 + // [151] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[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 - // [151] plexSort::s#6 = plexSort::m#2 -- vbuxx=vbuz1 - // [152] phi from plexSort::@5 plexSort::@7 to plexSort::@3 [phi:plexSort::@5/plexSort::@7->plexSort::@3] - // [152] phi plexSort::s#3 = plexSort::s#6 [phi:plexSort::@5/plexSort::@7->plexSort::@3#0] -- register_copy + // [152] plexSort::s#6 = plexSort::m#2 -- vbuxx=vbuz1 + // [153] phi from plexSort::@5 plexSort::@7 to plexSort::@3 [phi:plexSort::@5/plexSort::@7->plexSort::@3] + // [153] phi plexSort::s#3 = plexSort::s#6 [phi:plexSort::@5/plexSort::@7->plexSort::@3#0] -- register_copy // plexSort::@3 __b3: // PLEX_SORTED_IDX[s+1] = PLEX_SORTED_IDX[s] - // [153] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [154] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda PLEX_SORTED_IDX,x sta PLEX_SORTED_IDX+1,x // s--; - // [154] plexSort::s#1 = -- plexSort::s#3 -- vbuxx=_dec_vbuxx + // [155] plexSort::s#1 = -- plexSort::s#3 -- vbuxx=_dec_vbuxx dex // while((s!=0xff) && (nxt_yplexSort::plexFreePrepare1] + // [165] phi from plexSort::@6 to plexSort::plexFreePrepare1 [phi:plexSort::@6->plexSort::plexFreePrepare1] // plexSort::plexFreePrepare1 - // [165] phi from plexSort::plexFreePrepare1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1] - // [165] phi plexSort::plexFreePrepare1_s#2 = 0 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1#0] -- vbuxx=vbuc1 + // [166] phi from plexSort::plexFreePrepare1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1] + // [166] phi plexSort::plexFreePrepare1_s#2 = 0 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1#0] -- vbuxx=vbuc1 ldx #0 - // [165] phi from plexSort::plexFreePrepare1_@1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1] - // [165] phi plexSort::plexFreePrepare1_s#2 = plexSort::plexFreePrepare1_s#1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1#0] -- register_copy + // [166] phi from plexSort::plexFreePrepare1_@1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1] + // [166] phi plexSort::plexFreePrepare1_s#2 = plexSort::plexFreePrepare1_s#1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1#0] -- register_copy // plexSort::plexFreePrepare1_@1 plexFreePrepare1___b1: // PLEX_FREE_YPOS[s] = 0 - // [166] PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [167] PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta PLEX_FREE_YPOS,x // for( char s: 0..7) - // [167] plexSort::plexFreePrepare1_s#1 = ++ plexSort::plexFreePrepare1_s#2 -- vbuxx=_inc_vbuxx + // [168] plexSort::plexFreePrepare1_s#1 = ++ plexSort::plexFreePrepare1_s#2 -- vbuxx=_inc_vbuxx inx - // [168] if(plexSort::plexFreePrepare1_s#1!=8) goto plexSort::plexFreePrepare1_@1 -- vbuxx_neq_vbuc1_then_la1 + // [169] if(plexSort::plexFreePrepare1_s#1!=8) goto plexSort::plexFreePrepare1_@1 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne plexFreePrepare1___b1 // plexSort::plexFreePrepare1_@2 // plex_free_next = 0 - // [169] plex_free_next = 0 -- vbuz1=vbuc1 + // [170] plex_free_next = 0 -- vbuz1=vbuc1 sta.z plex_free_next // plexSort::@return // } - // [170] return + // [171] return rts } // plexShowSprite // Show the next sprite. // plexSort() prepares showing the sprites plexShowSprite: { - .label plex_sprite_idx2 = $17 + .label plex_sprite_idx2 = $19 // plex_sprite_idx2 = plex_sprite_idx*2 - // [171] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx << 1 -- vbuz1=vbuz2_rol_1 + // [172] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx << 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]] - // [172] plexShowSprite::plexFreeAdd1_ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] -- vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) + // [173] plexShowSprite::plexFreeAdd1_ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] -- 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 - // [173] SPRITES_YPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuaa + // [174] SPRITES_YPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z plex_sprite_idx2 sta SPRITES_YPOS,y // plexShowSprite::plexFreeAdd1 // ypos+21 - // [174] plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#0 + $15 -- vbuaa=vbuaa_plus_vbuc1 + // [175] plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#0 + $15 -- vbuaa=vbuaa_plus_vbuc1 clc adc #$15 // PLEX_FREE_YPOS[plex_free_next] = ypos+21 - // [175] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuaa + // [176] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z plex_free_next sta PLEX_FREE_YPOS,y // plex_free_next+1 - // [176] plexShowSprite::plexFreeAdd1_$1 = plex_free_next + 1 -- vbuaa=vbuz1_plus_1 + // [177] plexShowSprite::plexFreeAdd1_$1 = plex_free_next + 1 -- vbuaa=vbuz1_plus_1 tya clc adc #1 // (plex_free_next+1)&7 - // [177] plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & 7 -- vbuaa=vbuaa_band_vbuc1 + // [178] plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & 7 -- vbuaa=vbuaa_band_vbuc1 and #7 // plex_free_next = (plex_free_next+1)&7 - // [178] plex_free_next = plexShowSprite::plexFreeAdd1_$2 -- vbuz1=vbuaa + // [179] plex_free_next = plexShowSprite::plexFreeAdd1_$2 -- vbuz1=vbuaa sta.z plex_free_next // plexShowSprite::@5 // PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] - // [179] PLEX_SCREEN_PTR#0[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz2) + // [180] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) ldy PLEX_SORTED_IDX,x lda PLEX_PTR,y - ldx.z plex_sprite_idx - sta PLEX_SCREEN_PTR,x + ldy.z plex_sprite_idx + sta (PLEX_SCREEN_PTR),y // xpos_idx = PLEX_SORTED_IDX[plex_show_idx] - // [180] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] -- vbuaa=pbuc1_derefidx_vbuz1 + // [181] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z plex_show_idx lda PLEX_SORTED_IDX,y // PLEX_XPOS[xpos_idx] - // [184] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_hi_pwuc1_derefidx_vbuxx + // [185] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_hi_pwuc1_derefidx_vbuxx lda PLEX_XPOS+1,x // if(>PLEX_XPOS[xpos_idx]!=0) - // [185] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1 + // [186] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1 cmp #0 bne __b1 // plexShowSprite::@3 // 0xff^plex_sprite_msb - // [186] plexShowSprite::$9 = $ff ^ plex_sprite_msb -- vbuaa=vbuc1_bxor_vbuz1 + // [187] plexShowSprite::$9 = $ff ^ plex_sprite_msb -- vbuaa=vbuc1_bxor_vbuz1 lda #$ff eor.z plex_sprite_msb // *SPRITES_XMSB &= (0xff^plex_sprite_msb) - // [187] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa + // [188] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa and SPRITES_XMSB sta SPRITES_XMSB // plexShowSprite::@2 __b2: // plex_sprite_idx+1 - // [188] plexShowSprite::$5 = plex_sprite_idx + 1 -- vbuxx=vbuz1_plus_1 + // [189] plexShowSprite::$5 = plex_sprite_idx + 1 -- vbuxx=vbuz1_plus_1 ldx.z plex_sprite_idx inx // (plex_sprite_idx+1)&7 - // [189] plexShowSprite::$6 = plexShowSprite::$5 & 7 -- vbuaa=vbuxx_band_vbuc1 + // [190] plexShowSprite::$6 = plexShowSprite::$5 & 7 -- vbuaa=vbuxx_band_vbuc1 txa and #7 // plex_sprite_idx = (plex_sprite_idx+1)&7 - // [190] plex_sprite_idx = plexShowSprite::$6 -- vbuz1=vbuaa + // [191] plex_sprite_idx = plexShowSprite::$6 -- vbuz1=vbuaa sta.z plex_sprite_idx // plex_show_idx++; - // [191] plex_show_idx = ++ plex_show_idx -- vbuz1=_inc_vbuz1 + // [192] plex_show_idx = ++ plex_show_idx -- vbuz1=_inc_vbuz1 inc.z plex_show_idx // plex_sprite_msb <<=1 - // [192] plex_sprite_msb = plex_sprite_msb << 1 -- vbuz1=vbuz1_rol_1 + // [193] plex_sprite_msb = plex_sprite_msb << 1 -- vbuz1=vbuz1_rol_1 asl.z plex_sprite_msb // if(plex_sprite_msb==0) - // [193] if(plex_sprite_msb!=0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1 + // [194] if(plex_sprite_msb!=0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1 lda.z plex_sprite_msb cmp #0 bne __breturn // plexShowSprite::@4 // plex_sprite_msb = 1 - // [194] plex_sprite_msb = 1 -- vbuz1=vbuc1 + // [195] plex_sprite_msb = 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb // plexShowSprite::@return __breturn: // } - // [195] return + // [196] return rts // plexShowSprite::@1 __b1: // *SPRITES_XMSB |= plex_sprite_msb - // [196] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + // [197] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 lda SPRITES_XMSB ora.z plex_sprite_msb sta SPRITES_XMSB @@ -6305,17 +6204,17 @@ keyboard_key_pressed: { .const colidx = KEY_SPACE&7 .label rowidx = KEY_SPACE>>3 // keyboard_matrix_read(rowidx) - // [198] call keyboard_matrix_read + // [199] call keyboard_matrix_read jsr keyboard_matrix_read - // [199] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 + // [200] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 // keyboard_key_pressed::@1 - // [200] keyboard_key_pressed::$2 = keyboard_matrix_read::return#2 + // [201] keyboard_key_pressed::$2 = keyboard_matrix_read::return#2 // keyboard_matrix_read(rowidx) & keyboard_matrix_col_bitmask[colidx] - // [201] keyboard_key_pressed::return#0 = keyboard_key_pressed::$2 & *(keyboard_matrix_col_bitmask+keyboard_key_pressed::colidx#0) -- vbuaa=vbuaa_band__deref_pbuc1 + // [202] keyboard_key_pressed::return#0 = keyboard_key_pressed::$2 & *(keyboard_matrix_col_bitmask+keyboard_key_pressed::colidx#0) -- vbuaa=vbuaa_band__deref_pbuc1 and keyboard_matrix_col_bitmask+colidx // keyboard_key_pressed::@return // } - // [202] return + // [203] return rts } // mulf8u_prepare @@ -6324,7 +6223,7 @@ keyboard_key_pressed: { mulf8u_prepare: { .label memA = $fd // *memA = a - // [203] *mulf8u_prepare::memA = mulf8u_prepare::a#0 -- _deref_pbuc1=vbuaa + // [204] *mulf8u_prepare::memA = 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 } @@ -6335,67 +6234,67 @@ mulf8u_prepare: { sta mulf8u_prepared.sm4+1 // mulf8u_prepare::@return // } - // [205] return + // [206] return rts } // mulf8s_prepared // Calculate fast multiply with a prepared unsigned char to a unsigned int result // The prepared number is set by calling mulf8s_prepare(char a) -// mulf8s_prepared(signed byte zp($16) b) +// mulf8s_prepared(signed byte zp($18) b) mulf8s_prepared: { .label memA = $fd .label m = $f - .label b = $16 + .label b = $18 // mulf8u_prepared((char) b) - // [206] mulf8u_prepared::b#0 = (byte)mulf8s_prepared::b#0 -- vbuaa=vbuz1 + // [207] mulf8u_prepared::b#0 = (byte)mulf8s_prepared::b#0 -- vbuaa=vbuz1 lda.z b - // [207] call mulf8u_prepared + // [208] call mulf8u_prepared jsr mulf8u_prepared - // [208] mulf8u_prepared::return#2 = mulf8u_prepared::return#0 + // [209] mulf8u_prepared::return#2 = mulf8u_prepared::return#0 // mulf8s_prepared::@5 // m = mulf8u_prepared((char) b) - // [209] mulf8s_prepared::m#0 = mulf8u_prepared::return#2 + // [210] mulf8s_prepared::m#0 = mulf8u_prepared::return#2 // if(*memA<0) - // [210] if(*mulf8s_prepared::memA>=0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 + // [211] if(*mulf8s_prepared::memA>=0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 lda memA cmp #0 bpl __b1 // mulf8s_prepared::@3 // >m - // [211] mulf8s_prepared::$6 = > mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 + // [212] mulf8s_prepared::$6 = > mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 lda.z m+1 // >m = (>m)-(char)b - // [212] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (byte)mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 + // [213] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (byte)mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 sec sbc.z b - // [213] mulf8s_prepared::m#1 = mulf8s_prepared::m#0 hi= mulf8s_prepared::$11 -- vwuz1=vwuz1_sethi_vbuaa + // [214] mulf8s_prepared::m#1 = mulf8s_prepared::m#0 hi= mulf8s_prepared::$11 -- vwuz1=vwuz1_sethi_vbuaa sta.z m+1 - // [214] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] - // [214] phi mulf8s_prepared::m#5 = mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy + // [215] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] + // [215] phi mulf8s_prepared::m#5 = mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy // mulf8s_prepared::@1 __b1: // if(b<0) - // [215] if(mulf8s_prepared::b#0>=0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 + // [216] if(mulf8s_prepared::b#0>=0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 lda.z b cmp #0 bpl __b2 // mulf8s_prepared::@4 // >m - // [216] mulf8s_prepared::$9 = > mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 + // [217] mulf8s_prepared::$9 = > mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 lda.z m+1 // >m = (>m)-(char)*memA - // [217] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (byte)*mulf8s_prepared::memA -- vbuaa=vbuaa_minus__deref_pbuc1 + // [218] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (byte)*mulf8s_prepared::memA -- vbuaa=vbuaa_minus__deref_pbuc1 sec sbc memA - // [218] mulf8s_prepared::m#2 = mulf8s_prepared::m#5 hi= mulf8s_prepared::$12 -- vwuz1=vwuz1_sethi_vbuaa + // [219] mulf8s_prepared::m#2 = mulf8s_prepared::m#5 hi= mulf8s_prepared::$12 -- vwuz1=vwuz1_sethi_vbuaa sta.z m+1 - // [219] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] - // [219] phi mulf8s_prepared::m#4 = mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy + // [220] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] + // [220] phi mulf8s_prepared::m#4 = mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy // mulf8s_prepared::@2 __b2: // mulf8s_prepared::@return // } - // [220] return + // [221] return rts } // keyboard_matrix_read @@ -6406,16 +6305,16 @@ mulf8s_prepared: { // leading to erroneous readings. You must disable the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] - // [221] *((byte*)CIA1) = *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // [222] *((byte*)CIA1) = *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx sta CIA1 // ~CIA1->PORT_B - // [222] keyboard_matrix_read::return#0 = ~ *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + // [223] keyboard_matrix_read::return#0 = ~ *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // keyboard_matrix_read::@return // } - // [223] return + // [224] return rts } // mulf8u_prepared @@ -6427,7 +6326,7 @@ mulf8u_prepared: { .label memB = $ff .label return = $f // *memB = b - // [224] *mulf8u_prepared::memB = mulf8u_prepared::b#0 -- _deref_pbuc1=vbuaa + // [225] *mulf8u_prepared::memB = 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 } @@ -6444,14 +6343,14 @@ mulf8u_prepared: { sbc mulf_sqr2_hi,x sta memB // return { *memB, *resL }; - // [226] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + // [227] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda resL sta.z return lda memB sta.z return+1 // mulf8u_prepared::@return // } - // [227] return + // [228] return rts } // File Data diff --git a/src/test/ref/complex/prebob/vogel-sprites.sym b/src/test/ref/complex/prebob/vogel-sprites.sym index 58ad958af..559e6dd08 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.sym +++ b/src/test/ref/complex/prebob/vogel-sprites.sym @@ -10,8 +10,7 @@ const byte OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 const nomodify byte PLEX_COUNT = $20 const byte* PLEX_FREE_YPOS[8] = { fill( 8, 0) } const byte* PLEX_PTR[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } -byte* PLEX_SCREEN_PTR -const byte* PLEX_SCREEN_PTR#0 PLEX_SCREEN_PTR = SCREEN+$3f8 +volatile byte* PLEX_SCREEN_PTR loadstore zp[2]:17 952.8679245283018 const byte* PLEX_SORTED_IDX[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const word* PLEX_XPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const byte* PLEX_YPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -92,7 +91,7 @@ byte loop::i1 byte loop::i1#1 i1 zp[1]:4 15001.5 byte loop::i1#5 i1 zp[1]:4 3333.6666666666665 byte loop::plexFreeNextYpos1_return -byte loop::plexFreeNextYpos1_return#0 plexFreeNextYpos1_return zp[1]:21 55001.0 +byte loop::plexFreeNextYpos1_return#0 plexFreeNextYpos1_return zp[1]:23 55001.0 signed byte loop::r signed byte loop::r#1 r zp[1]:5 6667.333333333333 signed byte loop::r#2 r zp[1]:5 1818.3636363636363 @@ -135,7 +134,7 @@ byte~ mulf8s_prepared::$12 reg byte a 2000002.0 byte~ mulf8s_prepared::$6 reg byte a 2000002.0 byte~ mulf8s_prepared::$9 reg byte a 2000002.0 signed byte mulf8s_prepared::b -signed byte mulf8s_prepared::b#0 b zp[1]:22 110000.20000000001 +signed byte mulf8s_prepared::b#0 b zp[1]:24 110000.20000000001 word mulf8s_prepared::m word mulf8s_prepared::m#0 m zp[2]:15 1000001.0 word mulf8s_prepared::m#1 m zp[2]:15 2000002.0 @@ -213,18 +212,18 @@ byte~ plexShowSprite::plexFreeAdd1_$2 reg byte a 200002.0 byte plexShowSprite::plexFreeAdd1_ypos byte plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 150001.5 byte plexShowSprite::plex_sprite_idx2 -byte plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:23 25000.25 +byte plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:25 25000.25 byte plexShowSprite::xpos_idx byte plexShowSprite::xpos_idx#0 reg byte a 200002.0 byte plexShowSprite::ypos void plexSort() byte plexSort::m -byte plexSort::m#1 m zp[1]:21 1500001.5 -byte plexSort::m#2 m zp[1]:21 416667.0833333334 +byte plexSort::m#1 m zp[1]:23 1500001.5 +byte plexSort::m#2 m zp[1]:23 416667.0833333334 byte plexSort::nxt_idx -byte plexSort::nxt_idx#0 nxt_idx zp[1]:22 300000.30000000005 +byte plexSort::nxt_idx#0 nxt_idx zp[1]:24 300000.30000000005 byte plexSort::nxt_y -byte plexSort::nxt_y#0 nxt_y zp[1]:23 1500000.375 +byte plexSort::nxt_y#0 nxt_y zp[1]:25 1500000.375 byte plexSort::plexFreePrepare1_s byte plexSort::plexFreePrepare1_s#1 reg byte x 1500001.5 byte plexSort::plexFreePrepare1_s#2 reg byte x 1500001.5 @@ -233,10 +232,10 @@ byte plexSort::s#1 reg byte x 1.3666668333333332E7 byte plexSort::s#2 reg byte x 2000002.0 byte plexSort::s#3 reg byte x 2.05000025E7 byte plexSort::s#6 reg byte x 2000002.0 -volatile byte plex_free_next loadstore zp[1]:20 8205.307692307691 -volatile byte plex_show_idx loadstore zp[1]:17 10408.326530612245 -volatile byte plex_sprite_idx loadstore zp[1]:18 8913.195652173914 -volatile byte plex_sprite_msb loadstore zp[1]:19 12978.91489361702 +volatile byte plex_free_next loadstore zp[1]:22 8205.307692307691 +volatile byte plex_show_idx loadstore zp[1]:19 10408.326530612245 +volatile byte plex_sprite_idx loadstore zp[1]:20 8913.195652173914 +volatile byte plex_sprite_msb loadstore zp[1]:21 12978.91489361702 reg byte x [ init::i1#2 init::i1#1 ] zp[1]:2 [ loop::angle#6 loop::angle#1 init::i#2 init::i#1 ] @@ -256,10 +255,11 @@ reg byte x [ mulf8s::b#2 mulf8s::b#1 mulf8s::b#0 ] reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] zp[2]:15 [ 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 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] -zp[1]:17 [ plex_show_idx ] -zp[1]:18 [ plex_sprite_idx ] -zp[1]:19 [ plex_sprite_msb ] -zp[1]:20 [ plex_free_next ] +zp[2]:17 [ PLEX_SCREEN_PTR ] +zp[1]:19 [ plex_show_idx ] +zp[1]:20 [ plex_sprite_idx ] +zp[1]:21 [ plex_sprite_msb ] +zp[1]:22 [ plex_free_next ] reg byte a [ init::$10 ] reg byte a [ init::$3 ] reg byte x [ init::$4 ] @@ -270,7 +270,7 @@ reg byte x [ loop::$4 ] reg byte a [ loop::$20 ] reg byte a [ loop::$8 ] reg byte a [ loop::$11 ] -zp[1]:21 [ loop::plexFreeNextYpos1_return#0 plexSort::m#2 plexSort::m#1 ] +zp[1]:23 [ loop::plexFreeNextYpos1_return#0 plexSort::m#2 plexSort::m#1 ] reg byte a [ keyboard_key_pressed::return#3 ] reg byte a [ loop::$18 ] reg byte a [ keyboard_key_pressed::return#2 ] @@ -279,9 +279,9 @@ reg byte a [ mulf_init::$1 ] reg byte a [ mulf_init::$4 ] reg byte a [ mulf_init::$5 ] reg byte a [ mulf8u_prepare::a#0 ] -zp[1]:22 [ plexSort::nxt_idx#0 mulf8s_prepared::b#0 ] +zp[1]:24 [ plexSort::nxt_idx#0 mulf8s_prepared::b#0 ] reg byte x [ plexSort::s#2 ] -zp[1]:23 [ plexShowSprite::plex_sprite_idx2#0 plexSort::nxt_y#0 ] +zp[1]:25 [ plexShowSprite::plex_sprite_idx2#0 plexSort::nxt_y#0 ] reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$1 ] diff --git a/src/test/ref/complex/spritescroller/spritescroller.asm b/src/test/ref/complex/spritescroller/spritescroller.asm index 75a69ac94..e1e5d5772 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.asm +++ b/src/test/ref/complex/spritescroller/spritescroller.asm @@ -44,6 +44,8 @@ .label SCREEN = $400 // The high-value table .label XMOVEMENT_HI = XMOVEMENT+$100 + // The address of the sprite pointers on the current screen (screen+0x3f8). + .label PLEX_SCREEN_PTR = $f // The index in the PLEX tables of the next sprite to show .label plex_show_idx = $11 // The index the next sprite to use for showing (sprites are used round-robin) @@ -55,14 +57,17 @@ // Signal used between IRQ and main loop. Set to true when the IRQ is done showing the sprites. .label frame_done = $15 // The next char to use from the scroll text - .label scroll_text_next = $e + .label scroll_text_next = $c // Y-sine index - .label y_sin_idx = $b + .label y_sin_idx = 9 // X-movement index - .label x_movement_idx = $c - // The address of the sprite pointers on the current screen (screen+0x3f8). - .label PLEX_SCREEN_PTR = 2 + .label x_movement_idx = $a __start: { + // PLEX_SCREEN_PTR = 0x400+0x3f8 + lda #<$400+$3f8 + sta.z PLEX_SCREEN_PTR + lda #>$400+$3f8 + sta.z PLEX_SCREEN_PTR+1 // plex_show_idx=0 lda #0 sta.z plex_show_idx @@ -132,7 +137,7 @@ plex_irq: { } main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET_DEFAULT)/4&$f - .label s = 4 + .label s = 2 .label __13 = $17 // asm // Create 2x2 font from CHARGEN @@ -358,15 +363,15 @@ font_2x2: { .label __5 = $17 .label __7 = $17 .label next_2x2_left = $1a - .label next_2x2_right = 9 - .label glyph_bits = $d + .label next_2x2_right = 7 + .label glyph_bits = $b .label glyph_bits_2x2 = $17 .label l2 = $1c .label l = $1d - .label next_2x2_left_1 = 7 + .label next_2x2_left_1 = 5 .label next_2x2 = $1a - .label next_original = 5 - .label c = $10 + .label next_original = 3 + .label c = $e lda #0 sta.z c lda #SPRITES @@ -644,6 +649,11 @@ font_2x2_to_sprites: { } // Initialize the multiplexer data structures plexInit: { + // PLEX_SCREEN_PTR = screen+0x3f8 + lda #SCREEN+$3f8 + sta.z PLEX_SCREEN_PTR+1 ldx #0 __b1: // PLEX_SORTED_IDX[i] = i @@ -659,8 +669,8 @@ plexInit: { // Move the plex sprites in an Y-sine and scroll them to the left. plex_move: { .label y_idx = $1c - .label x_idx = $10 - .label s = $d + .label x_idx = $e + .label s = $b .label __7 = $1a // y_idx = y_sin_idx lda.z y_sin_idx @@ -752,7 +762,7 @@ plex_move: { plexSort: { .label nxt_idx = $1c .label nxt_y = $1d - .label m = $10 + .label m = $e lda #0 sta.z m __b1: diff --git a/src/test/ref/complex/spritescroller/spritescroller.cfg b/src/test/ref/complex/spritescroller/spritescroller.cfg index 3bdf26daf..37e335258 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.cfg +++ b/src/test/ref/complex/spritescroller/spritescroller.cfg @@ -4,28 +4,28 @@ __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start - [1] plex_show_idx = 0 - [2] plex_sprite_idx = 0 - [3] plex_sprite_msb = 1 - [4] plex_free_next = 0 + [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 + [2] plex_show_idx = 0 + [3] plex_sprite_idx = 0 + [4] plex_sprite_msb = 1 + [5] plex_free_next = 0 to:__start::__init1_toSpritePtr1 __start::__init1_toSpritePtr1: scope:[__start] from __start::__init1 - [5] phi() + [6] phi() to:__start::__init1_@1 __start::__init1_@1: scope:[__start] from __start::__init1_toSpritePtr1 - [6] frame_done = false + [7] frame_done = false to:__start::@1 __start::@1: scope:[__start] from __start::__init1_@1 - [7] phi() - [8] call main + [8] phi() + [9] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [9] return + [10] return to:@return interrupt(KERNEL_MIN) void plex_irq() plex_irq: scope:[plex_irq] from - [10] PLEX_SCREEN_PTR#31 = phi( ) asm { sei } to:plex_irq::@3 plex_irq::@3: scope:[plex_irq] from plex_irq plex_irq::@7 @@ -147,7 +147,7 @@ plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite [72] plex_free_next = plexShowSprite::plexFreeAdd1_$2 to:plexShowSprite::@5 plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 - [73] PLEX_SCREEN_PTR#31[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] + [73] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] [74] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] [75] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 [76] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] @@ -308,7 +308,7 @@ plexInit: scope:[plexInit] from main::@10 [156] phi() to:plexInit::plexSetScreen1 plexInit::plexSetScreen1: scope:[plexInit] from plexInit - [157] phi() + [157] PLEX_SCREEN_PTR = SCREEN+$3f8 to:plexInit::@1 plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1 [158] plexInit::i#2 = phi( plexInit::@1/plexInit::i#1, plexInit::plexSetScreen1/0 ) diff --git a/src/test/ref/complex/spritescroller/spritescroller.log b/src/test/ref/complex/spritescroller/spritescroller.log index a59db0426..85b436b01 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.log +++ b/src/test/ref/complex/spritescroller/spritescroller.log @@ -20,14 +20,12 @@ plexInit: scope:[plexInit] from main::@11 plexInit::plexSetScreen1: scope:[plexInit] from plexInit plexInit::plexSetScreen1_screen#1 = phi( plexInit/plexInit::plexSetScreen1_screen#0 ) plexInit::plexSetScreen1_$0 = plexInit::plexSetScreen1_screen#1 + $3f8 - PLEX_SCREEN_PTR#0 = plexInit::plexSetScreen1_$0 + PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 to:plexInit::@2 plexInit::@2: scope:[plexInit] from plexInit::plexSetScreen1 - PLEX_SCREEN_PTR#18 = phi( plexInit::plexSetScreen1/PLEX_SCREEN_PTR#0 ) plexInit::i#0 = 0 to:plexInit::@1 plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::@2 - PLEX_SCREEN_PTR#13 = phi( plexInit::@1/PLEX_SCREEN_PTR#13, plexInit::@2/PLEX_SCREEN_PTR#18 ) plexInit::i#2 = phi( plexInit::@1/plexInit::i#1, plexInit::@2/plexInit::i#0 ) PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2 plexInit::i#1 = plexInit::i#2 + rangenext(0,PLEX_COUNT-1) @@ -35,8 +33,6 @@ plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::@2 if(plexInit::$1) goto plexInit::@1 to:plexInit::@return plexInit::@return: scope:[plexInit] from plexInit::@1 - PLEX_SCREEN_PTR#7 = phi( plexInit::@1/PLEX_SCREEN_PTR#13 ) - PLEX_SCREEN_PTR#1 = PLEX_SCREEN_PTR#7 return to:@return @@ -109,7 +105,6 @@ plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@2 void plexShowSprite() plexShowSprite: scope:[plexShowSprite] from plex_irq::@3 - PLEX_SCREEN_PTR#19 = phi( plex_irq::@3/PLEX_SCREEN_PTR#24 ) plexShowSprite::$0 = plex_sprite_idx * 2 plexShowSprite::plex_sprite_idx2#0 = plexShowSprite::$0 plexShowSprite::ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] @@ -118,7 +113,6 @@ plexShowSprite: scope:[plexShowSprite] from plex_irq::@3 to:plexShowSprite::plexFreeAdd1 plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite plexShowSprite::plex_sprite_idx2#2 = phi( plexShowSprite/plexShowSprite::plex_sprite_idx2#0 ) - PLEX_SCREEN_PTR#14 = phi( plexShowSprite/PLEX_SCREEN_PTR#19 ) plexShowSprite::plexFreeAdd1_ypos#1 = phi( plexShowSprite/plexShowSprite::plexFreeAdd1_ypos#0 ) plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#1 + $15 PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 @@ -128,8 +122,7 @@ plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite to:plexShowSprite::@5 plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 plexShowSprite::plex_sprite_idx2#1 = phi( plexShowSprite::plexFreeAdd1/plexShowSprite::plex_sprite_idx2#2 ) - PLEX_SCREEN_PTR#8 = phi( plexShowSprite::plexFreeAdd1/PLEX_SCREEN_PTR#14 ) - PLEX_SCREEN_PTR#8[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] + PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] plexShowSprite::$10 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$10] @@ -169,7 +162,6 @@ main: scope:[main] from __start::@1 y_sin_idx#38 = phi( __start::@1/y_sin_idx#20 ) scroll_text_next#38 = phi( __start::@1/scroll_text_next#22 ) SPRITE_0#27 = phi( __start::@1/SPRITE_0#11 ) - PLEX_SCREEN_PTR#25 = phi( __start::@1/PLEX_SCREEN_PTR#17 ) asm { sei } *PROCPORT = PROCPORT_RAM_CHARROM font_2x2::font_original#0 = CHARGEN @@ -181,7 +173,6 @@ main::@10: scope:[main] from main y_sin_idx#37 = phi( main/y_sin_idx#38 ) scroll_text_next#37 = phi( main/scroll_text_next#38 ) SPRITE_0#24 = phi( main/SPRITE_0#27 ) - PLEX_SCREEN_PTR#20 = phi( main/PLEX_SCREEN_PTR#25 ) *PROCPORT = PROCPORT_BASIC_KERNEL_IO asm { cli } font_2x2_to_sprites::font_2x2#0 = FONT @@ -194,7 +185,6 @@ main::@11: scope:[main] from main::@10 y_sin_idx#36 = phi( main::@10/y_sin_idx#37 ) scroll_text_next#36 = phi( main::@10/scroll_text_next#37 ) SPRITE_0#21 = phi( main::@10/SPRITE_0#24 ) - PLEX_SCREEN_PTR#15 = phi( main::@10/PLEX_SCREEN_PTR#20 ) plexInit::screen#0 = SCREEN call plexInit to:main::@12 @@ -203,13 +193,10 @@ main::@12: scope:[main] from main::@11 y_sin_idx#35 = phi( main::@11/y_sin_idx#36 ) scroll_text_next#35 = phi( main::@11/scroll_text_next#36 ) SPRITE_0#18 = phi( main::@11/SPRITE_0#21 ) - PLEX_SCREEN_PTR#9 = phi( main::@11/PLEX_SCREEN_PTR#1 ) - PLEX_SCREEN_PTR#2 = PLEX_SCREEN_PTR#9 main::toD0181_screen#0 = SCREEN main::toD0181_gfx#0 = CHARSET_DEFAULT to:main::toD0181 main::toD0181: scope:[main] from main::@12 - PLEX_SCREEN_PTR#44 = phi( main::@12/PLEX_SCREEN_PTR#2 ) x_movement_idx#34 = phi( main::@12/x_movement_idx#35 ) y_sin_idx#34 = phi( main::@12/y_sin_idx#35 ) scroll_text_next#34 = phi( main::@12/scroll_text_next#35 ) @@ -227,7 +214,6 @@ main::toD0181: scope:[main] from main::@12 main::toD0181_return#0 = main::toD0181_$6 to:main::toD0181_@return main::toD0181_@return: scope:[main] from main::toD0181 - PLEX_SCREEN_PTR#43 = phi( main::toD0181/PLEX_SCREEN_PTR#44 ) x_movement_idx#33 = phi( main::toD0181/x_movement_idx#34 ) y_sin_idx#33 = phi( main::toD0181/y_sin_idx#34 ) scroll_text_next#33 = phi( main::toD0181/scroll_text_next#34 ) @@ -236,7 +222,6 @@ main::toD0181_@return: scope:[main] from main::toD0181 main::toD0181_return#1 = main::toD0181_return#2 to:main::@9 main::@9: scope:[main] from main::toD0181_@return - PLEX_SCREEN_PTR#42 = phi( main::toD0181_@return/PLEX_SCREEN_PTR#43 ) x_movement_idx#32 = phi( main::toD0181_@return/x_movement_idx#33 ) y_sin_idx#32 = phi( main::toD0181_@return/y_sin_idx#33 ) scroll_text_next#32 = phi( main::toD0181_@return/scroll_text_next#33 ) @@ -248,7 +233,6 @@ main::@9: scope:[main] from main::toD0181_@return main::x#0 = 0 to:main::@1 main::@1: scope:[main] from main::@2 main::@9 - PLEX_SCREEN_PTR#39 = phi( main::@2/PLEX_SCREEN_PTR#41, main::@9/PLEX_SCREEN_PTR#42 ) x_movement_idx#30 = phi( main::@2/x_movement_idx#31, main::@9/x_movement_idx#32 ) y_sin_idx#30 = phi( main::@2/y_sin_idx#31, main::@9/y_sin_idx#32 ) scroll_text_next#30 = phi( main::@2/scroll_text_next#31, main::@9/scroll_text_next#32 ) @@ -259,7 +243,6 @@ main::@1: scope:[main] from main::@2 main::@9 if(main::$6) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@1 - PLEX_SCREEN_PTR#41 = phi( main::@1/PLEX_SCREEN_PTR#39 ) x_movement_idx#31 = phi( main::@1/x_movement_idx#30 ) y_sin_idx#31 = phi( main::@1/y_sin_idx#30 ) scroll_text_next#31 = phi( main::@1/scroll_text_next#30 ) @@ -275,7 +258,6 @@ main::@2: scope:[main] from main::@1 to:main::@1 main::@3: scope:[main] from main::@1 SPRITE_0#22 = phi( main::@1/SPRITE_0#5 ) - PLEX_SCREEN_PTR#37 = phi( main::@1/PLEX_SCREEN_PTR#39 ) x_movement_idx#27 = phi( main::@1/x_movement_idx#30 ) y_sin_idx#27 = phi( main::@1/y_sin_idx#30 ) scroll_text_next#29 = phi( main::@1/scroll_text_next#30 ) @@ -284,7 +266,6 @@ main::@3: scope:[main] from main::@1 to:main::@4 main::@4: scope:[main] from main::@3 main::@4 SPRITE_0#19 = phi( main::@3/SPRITE_0#22, main::@4/SPRITE_0#19 ) - PLEX_SCREEN_PTR#34 = phi( main::@3/PLEX_SCREEN_PTR#37, main::@4/PLEX_SCREEN_PTR#34 ) x_movement_idx#21 = phi( main::@3/x_movement_idx#27, main::@4/x_movement_idx#21 ) y_sin_idx#21 = phi( main::@3/y_sin_idx#27, main::@4/y_sin_idx#21 ) scroll_text_next#23 = phi( main::@3/scroll_text_next#29, main::@4/scroll_text_next#23 ) @@ -296,7 +277,6 @@ main::@4: scope:[main] from main::@3 main::@4 to:main::@5 main::@5: scope:[main] from main::@4 SPRITE_0#16 = phi( main::@4/SPRITE_0#19 ) - PLEX_SCREEN_PTR#29 = phi( main::@4/PLEX_SCREEN_PTR#34 ) x_movement_idx#16 = phi( main::@4/x_movement_idx#21 ) y_sin_idx#16 = phi( main::@4/y_sin_idx#21 ) scroll_text_next#17 = phi( main::@4/scroll_text_next#23 ) @@ -304,7 +284,6 @@ main::@5: scope:[main] from main::@4 to:main::@13 main::@13: scope:[main] from main::@5 SPRITE_0#28 = phi( main::@5/SPRITE_0#16 ) - PLEX_SCREEN_PTR#26 = phi( main::@5/PLEX_SCREEN_PTR#29 ) x_movement_idx#8 = phi( main::@5/x_movement_idx#4 ) y_sin_idx#8 = phi( main::@5/y_sin_idx#4 ) scroll_text_next#9 = phi( main::@5/scroll_text_next#5 ) @@ -318,7 +297,6 @@ main::@14: scope:[main] from main::@13 x_movement_idx#22 = phi( main::@13/x_movement_idx#0 ) y_sin_idx#22 = phi( main::@13/y_sin_idx#0 ) scroll_text_next#24 = phi( main::@13/scroll_text_next#0 ) - PLEX_SCREEN_PTR#21 = phi( main::@13/PLEX_SCREEN_PTR#26 ) asm { sei } *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR *VIC_CONTROL = *VIC_CONTROL & $7f @@ -333,12 +311,10 @@ main::@6: scope:[main] from main::@14 main::@16 x_movement_idx#18 = phi( main::@14/x_movement_idx#22, main::@16/x_movement_idx#23 ) y_sin_idx#18 = phi( main::@14/y_sin_idx#22, main::@16/y_sin_idx#23 ) scroll_text_next#19 = phi( main::@14/scroll_text_next#24, main::@16/scroll_text_next#25 ) - PLEX_SCREEN_PTR#16 = phi( main::@14/PLEX_SCREEN_PTR#21, main::@16/PLEX_SCREEN_PTR#22 ) if(true) goto main::@7 to:main::@return main::@7: scope:[main] from main::@6 main::@7 SPRITE_0#20 = phi( main::@6/SPRITE_0#23, main::@7/SPRITE_0#20 ) - PLEX_SCREEN_PTR#35 = phi( main::@6/PLEX_SCREEN_PTR#16, main::@7/PLEX_SCREEN_PTR#35 ) x_movement_idx#24 = phi( main::@6/x_movement_idx#18, main::@7/x_movement_idx#24 ) y_sin_idx#24 = phi( main::@6/y_sin_idx#18, main::@7/y_sin_idx#24 ) scroll_text_next#26 = phi( main::@6/scroll_text_next#19, main::@7/scroll_text_next#26 ) @@ -347,7 +323,6 @@ main::@7: scope:[main] from main::@6 main::@7 to:main::@8 main::@8: scope:[main] from main::@7 SPRITE_0#17 = phi( main::@7/SPRITE_0#20 ) - PLEX_SCREEN_PTR#30 = phi( main::@7/PLEX_SCREEN_PTR#35 ) x_movement_idx#17 = phi( main::@7/x_movement_idx#24 ) y_sin_idx#17 = phi( main::@7/y_sin_idx#24 ) scroll_text_next#18 = phi( main::@7/scroll_text_next#26 ) @@ -356,7 +331,6 @@ main::@8: scope:[main] from main::@7 to:main::@15 main::@15: scope:[main] from main::@8 SPRITE_0#29 = phi( main::@8/SPRITE_0#17 ) - PLEX_SCREEN_PTR#27 = phi( main::@8/PLEX_SCREEN_PTR#30 ) x_movement_idx#9 = phi( main::@8/x_movement_idx#4 ) y_sin_idx#9 = phi( main::@8/y_sin_idx#4 ) scroll_text_next#10 = phi( main::@8/scroll_text_next#5 ) @@ -370,14 +344,11 @@ main::@16: scope:[main] from main::@15 x_movement_idx#23 = phi( main::@15/x_movement_idx#1 ) y_sin_idx#23 = phi( main::@15/y_sin_idx#1 ) scroll_text_next#25 = phi( main::@15/scroll_text_next#1 ) - PLEX_SCREEN_PTR#22 = phi( main::@15/PLEX_SCREEN_PTR#27 ) to:main::@6 main::@return: scope:[main] from main::@6 x_movement_idx#10 = phi( main::@6/x_movement_idx#18 ) y_sin_idx#10 = phi( main::@6/y_sin_idx#18 ) scroll_text_next#11 = phi( main::@6/scroll_text_next#19 ) - PLEX_SCREEN_PTR#10 = phi( main::@6/PLEX_SCREEN_PTR#16 ) - PLEX_SCREEN_PTR#3 = PLEX_SCREEN_PTR#10 scroll_text_next#2 = scroll_text_next#11 y_sin_idx#2 = y_sin_idx#10 x_movement_idx#2 = x_movement_idx#10 @@ -475,28 +446,22 @@ plex_move::@return: scope:[plex_move] from plex_move::@6 interrupt(KERNEL_MIN) void plex_irq() plex_irq: scope:[plex_irq] from - PLEX_SCREEN_PTR#31 = phi( ) asm { sei } plex_irq::rasterY#0 = 0 to:plex_irq::@3 plex_irq::@3: scope:[plex_irq] from plex_irq plex_irq::@6 - PLEX_SCREEN_PTR#24 = phi( plex_irq/PLEX_SCREEN_PTR#31, plex_irq::@6/PLEX_SCREEN_PTR#32 ) call plexShowSprite to:plex_irq::@7 plex_irq::@7: scope:[plex_irq] from plex_irq::@3 - PLEX_SCREEN_PTR#40 = phi( plex_irq::@3/PLEX_SCREEN_PTR#24 ) to:plex_irq::plexFreeNextYpos1 plex_irq::plexFreeNextYpos1: scope:[plex_irq] from plex_irq::@7 - PLEX_SCREEN_PTR#38 = phi( plex_irq::@7/PLEX_SCREEN_PTR#40 ) plex_irq::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] to:plex_irq::plexFreeNextYpos1_@return plex_irq::plexFreeNextYpos1_@return: scope:[plex_irq] from plex_irq::plexFreeNextYpos1 - PLEX_SCREEN_PTR#36 = phi( plex_irq::plexFreeNextYpos1/PLEX_SCREEN_PTR#38 ) plex_irq::plexFreeNextYpos1_return#2 = phi( plex_irq::plexFreeNextYpos1/plex_irq::plexFreeNextYpos1_return#0 ) plex_irq::plexFreeNextYpos1_return#1 = plex_irq::plexFreeNextYpos1_return#2 to:plex_irq::@6 plex_irq::@6: scope:[plex_irq] from plex_irq::plexFreeNextYpos1_@return - PLEX_SCREEN_PTR#32 = phi( plex_irq::plexFreeNextYpos1_@return/PLEX_SCREEN_PTR#36 ) plex_irq::plexFreeNextYpos1_return#3 = phi( plex_irq::plexFreeNextYpos1_@return/plex_irq::plexFreeNextYpos1_return#1 ) plex_irq::$2 = plex_irq::plexFreeNextYpos1_return#3 plex_irq::rasterY#1 = plex_irq::$2 @@ -806,7 +771,7 @@ void __start() __start: scope:[__start] from to:__start::__init1 __start::__init1: scope:[__start] from __start - PLEX_SCREEN_PTR#4 = (byte*)$400+$3f8 + PLEX_SCREEN_PTR = (byte*)$400+$3f8 plex_show_idx = 0 plex_sprite_idx = 0 plex_sprite_msb = 1 @@ -814,19 +779,16 @@ __start::__init1: scope:[__start] from __start __start::__init1_toSpritePtr1_sprite#0 = SPRITES to:__start::__init1_toSpritePtr1 __start::__init1_toSpritePtr1: scope:[__start] from __start::__init1 - PLEX_SCREEN_PTR#33 = phi( __start::__init1/PLEX_SCREEN_PTR#4 ) __start::__init1_toSpritePtr1_sprite#1 = phi( __start::__init1/__start::__init1_toSpritePtr1_sprite#0 ) __start::__init1_toSpritePtr1_$1 = (word)__start::__init1_toSpritePtr1_sprite#1 __start::__init1_toSpritePtr1_$0 = __start::__init1_toSpritePtr1_$1 / $40 __start::__init1_toSpritePtr1_return#0 = (byte)__start::__init1_toSpritePtr1_$0 to:__start::__init1_toSpritePtr1_@return __start::__init1_toSpritePtr1_@return: scope:[__start] from __start::__init1_toSpritePtr1 - PLEX_SCREEN_PTR#28 = phi( __start::__init1_toSpritePtr1/PLEX_SCREEN_PTR#33 ) __start::__init1_toSpritePtr1_return#2 = phi( __start::__init1_toSpritePtr1/__start::__init1_toSpritePtr1_return#0 ) __start::__init1_toSpritePtr1_return#1 = __start::__init1_toSpritePtr1_return#2 to:__start::__init1_@1 __start::__init1_@1: scope:[__start] from __start::__init1_toSpritePtr1_@return - PLEX_SCREEN_PTR#23 = phi( __start::__init1_toSpritePtr1_@return/PLEX_SCREEN_PTR#28 ) __start::__init1_toSpritePtr1_return#3 = phi( __start::__init1_toSpritePtr1_@return/__start::__init1_toSpritePtr1_return#1 ) __start::__init1_$0 = __start::__init1_toSpritePtr1_return#3 SPRITE_0#0 = __start::__init1_$0 @@ -840,7 +802,6 @@ __start::@1: scope:[__start] from __start::__init1_@1 x_movement_idx#20 = phi( __start::__init1_@1/x_movement_idx#5 ) y_sin_idx#20 = phi( __start::__init1_@1/y_sin_idx#5 ) scroll_text_next#22 = phi( __start::__init1_@1/scroll_text_next#6 ) - PLEX_SCREEN_PTR#17 = phi( __start::__init1_@1/PLEX_SCREEN_PTR#23 ) call main to:__start::@2 __start::@2: scope:[__start] from __start::@1 @@ -848,8 +809,6 @@ __start::@2: scope:[__start] from __start::@1 x_movement_idx#14 = phi( __start::@1/x_movement_idx#2 ) y_sin_idx#14 = phi( __start::@1/y_sin_idx#2 ) scroll_text_next#15 = phi( __start::@1/scroll_text_next#2 ) - PLEX_SCREEN_PTR#11 = phi( __start::@1/PLEX_SCREEN_PTR#3 ) - PLEX_SCREEN_PTR#5 = PLEX_SCREEN_PTR#11 scroll_text_next#7 = scroll_text_next#15 y_sin_idx#6 = y_sin_idx#14 x_movement_idx#6 = x_movement_idx#14 @@ -859,8 +818,6 @@ __start::@return: scope:[__start] from __start::@2 y_sin_idx#15 = phi( __start::@2/y_sin_idx#6 ) scroll_text_next#16 = phi( __start::@2/scroll_text_next#7 ) SPRITE_0#4 = phi( __start::@2/SPRITE_0#8 ) - PLEX_SCREEN_PTR#12 = phi( __start::@2/PLEX_SCREEN_PTR#5 ) - PLEX_SCREEN_PTR#6 = PLEX_SCREEN_PTR#12 SPRITE_0#1 = SPRITE_0#4 scroll_text_next#8 = scroll_text_next#16 y_sin_idx#7 = y_sin_idx#15 @@ -883,52 +840,7 @@ const byte OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d const nomodify byte PLEX_COUNT = $20 const byte* PLEX_FREE_YPOS[8] = { fill( 8, 0) } const byte* PLEX_PTR[PLEX_COUNT] = { 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#5 -byte* PLEX_SCREEN_PTR#6 -byte* PLEX_SCREEN_PTR#7 -byte* PLEX_SCREEN_PTR#8 -byte* PLEX_SCREEN_PTR#9 +volatile byte* PLEX_SCREEN_PTR loadstore const byte* PLEX_SORTED_IDX[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const word* PLEX_XPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const byte* PLEX_YPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -1808,18 +1720,17 @@ Inferred type updated to byte in font_2x2::$1 = font_2x2::glyph_bits#2 & $80 Inferred type updated to byte in font_2x2::$11 = font_2x2::l2#3 + 1 Inferred type updated to byte in font_2x2::$14 = font_2x2::l2#3 + 1 Inferred type updated to word in __start::__init1_toSpritePtr1_$0 = __start::__init1_toSpritePtr1_$1 / $40 -Inversing boolean not [21] plexSort::$3 = plexSort::nxt_y#0 >= PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] from [20] plexSort::$2 = plexSort::nxt_y#0 < PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] -Inversing boolean not [82] plexShowSprite::$8 = plex_sprite_msb != 0 from [81] plexShowSprite::$7 = plex_sprite_msb == 0 -Inversing boolean not [189] plex_move::$1 = plex_move::x_idx#2 != 0 from [188] plex_move::$0 = plex_move::x_idx#2 == 0 -Inversing boolean not [198] plex_move::$3 = *scroll_text_next#12 != 0 from [197] plex_move::$2 = *scroll_text_next#12 == 0 -Inversing boolean not [273] font_2x2_to_sprites::$6 = font_2x2_to_sprites::i#3 != $f from [272] font_2x2_to_sprites::$5 = font_2x2_to_sprites::i#3 == $f -Inversing boolean not [336] font_2x2::$17 = font_2x2::l2#1 != 8 from [335] font_2x2::$16 = font_2x2::l2#1 == 8 +Inversing boolean not [18] plexSort::$3 = plexSort::nxt_y#0 >= PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] from [17] plexSort::$2 = plexSort::nxt_y#0 < PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] +Inversing boolean not [78] plexShowSprite::$8 = plex_sprite_msb != 0 from [77] plexShowSprite::$7 = plex_sprite_msb == 0 +Inversing boolean not [183] plex_move::$1 = plex_move::x_idx#2 != 0 from [182] plex_move::$0 = plex_move::x_idx#2 == 0 +Inversing boolean not [192] plex_move::$3 = *scroll_text_next#12 != 0 from [191] plex_move::$2 = *scroll_text_next#12 == 0 +Inversing boolean not [263] font_2x2_to_sprites::$6 = font_2x2_to_sprites::i#3 != $f from [262] font_2x2_to_sprites::$5 = font_2x2_to_sprites::i#3 == $f +Inversing boolean not [326] font_2x2::$17 = font_2x2::l2#1 != 8 from [325] font_2x2::$16 = font_2x2::l2#1 == 8 Successful SSA optimization Pass2UnaryNotSimplification +Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Alias plexInit::plexSetScreen1_screen#0 = plexInit::screen#1 plexInit::plexSetScreen1_screen#1 -Alias PLEX_SCREEN_PTR#0 = plexInit::plexSetScreen1_$0 PLEX_SCREEN_PTR#18 -Alias PLEX_SCREEN_PTR#1 = PLEX_SCREEN_PTR#7 PLEX_SCREEN_PTR#13 Alias plexSort::m#2 = plexSort::m#4 plexSort::s#0 Alias plexSort::nxt_y#0 = plexSort::nxt_y#2 Alias plexSort::nxt_idx#0 = plexSort::nxt_idx#3 @@ -1828,13 +1739,10 @@ Alias plexSort::nxt_idx#1 = plexSort::nxt_idx#2 Alias plexSort::m#5 = plexSort::m#6 Alias plexShowSprite::plex_sprite_idx2#0 = plexShowSprite::$0 plexShowSprite::plex_sprite_idx2#2 plexShowSprite::plex_sprite_idx2#1 Alias plexShowSprite::plexFreeAdd1_ypos#0 = plexShowSprite::ypos#0 plexShowSprite::plexFreeAdd1_ypos#1 -Alias PLEX_SCREEN_PTR#14 = PLEX_SCREEN_PTR#19 PLEX_SCREEN_PTR#8 -Alias PLEX_SCREEN_PTR#15 = PLEX_SCREEN_PTR#20 PLEX_SCREEN_PTR#25 Alias SPRITE_0#12 = SPRITE_0#24 SPRITE_0#27 SPRITE_0#21 SPRITE_0#18 SPRITE_0#15 SPRITE_0#9 Alias scroll_text_next#32 = scroll_text_next#37 scroll_text_next#38 scroll_text_next#36 scroll_text_next#35 scroll_text_next#34 scroll_text_next#33 Alias y_sin_idx#32 = y_sin_idx#37 y_sin_idx#38 y_sin_idx#36 y_sin_idx#35 y_sin_idx#34 y_sin_idx#33 Alias x_movement_idx#32 = x_movement_idx#37 x_movement_idx#38 x_movement_idx#36 x_movement_idx#35 x_movement_idx#34 x_movement_idx#33 -Alias PLEX_SCREEN_PTR#2 = PLEX_SCREEN_PTR#9 PLEX_SCREEN_PTR#44 PLEX_SCREEN_PTR#43 PLEX_SCREEN_PTR#42 Alias main::toD0181_screen#0 = main::toD0181_screen#1 Alias main::toD0181_gfx#0 = main::toD0181_gfx#1 Alias main::toD0181_return#0 = main::toD0181_$6 main::toD0181_return#2 main::toD0181_return#1 main::toD0181_return#3 main::$3 @@ -1844,11 +1752,9 @@ Alias main::x#2 = main::x#3 Alias scroll_text_next#29 = scroll_text_next#31 scroll_text_next#30 Alias y_sin_idx#27 = y_sin_idx#31 y_sin_idx#30 Alias x_movement_idx#27 = x_movement_idx#31 x_movement_idx#30 -Alias PLEX_SCREEN_PTR#37 = PLEX_SCREEN_PTR#41 PLEX_SCREEN_PTR#39 Alias scroll_text_next#17 = scroll_text_next#23 Alias y_sin_idx#16 = y_sin_idx#21 Alias x_movement_idx#16 = x_movement_idx#21 -Alias PLEX_SCREEN_PTR#21 = PLEX_SCREEN_PTR#29 PLEX_SCREEN_PTR#34 PLEX_SCREEN_PTR#26 Alias SPRITE_0#16 = SPRITE_0#19 SPRITE_0#28 SPRITE_0#25 Alias scroll_text_next#0 = scroll_text_next#9 scroll_text_next#24 Alias y_sin_idx#0 = y_sin_idx#8 y_sin_idx#22 @@ -1856,12 +1762,10 @@ Alias x_movement_idx#0 = x_movement_idx#8 x_movement_idx#22 Alias scroll_text_next#18 = scroll_text_next#26 Alias y_sin_idx#17 = y_sin_idx#24 Alias x_movement_idx#17 = x_movement_idx#24 -Alias PLEX_SCREEN_PTR#22 = PLEX_SCREEN_PTR#30 PLEX_SCREEN_PTR#35 PLEX_SCREEN_PTR#27 Alias SPRITE_0#17 = SPRITE_0#20 SPRITE_0#29 SPRITE_0#26 Alias scroll_text_next#1 = scroll_text_next#10 scroll_text_next#25 Alias y_sin_idx#1 = y_sin_idx#9 y_sin_idx#23 Alias x_movement_idx#1 = x_movement_idx#9 x_movement_idx#23 -Alias PLEX_SCREEN_PTR#10 = PLEX_SCREEN_PTR#16 PLEX_SCREEN_PTR#3 Alias scroll_text_next#11 = scroll_text_next#19 scroll_text_next#2 Alias y_sin_idx#10 = y_sin_idx#18 y_sin_idx#2 Alias x_movement_idx#10 = x_movement_idx#18 x_movement_idx#2 @@ -1877,7 +1781,6 @@ Alias x_movement_idx#12 = x_movement_idx#19 Alias scroll_text_next#14 = scroll_text_next#21 scroll_text_next#28 scroll_text_next#5 Alias y_sin_idx#13 = y_sin_idx#3 y_sin_idx#4 Alias x_movement_idx#13 = x_movement_idx#3 x_movement_idx#4 -Alias PLEX_SCREEN_PTR#24 = PLEX_SCREEN_PTR#40 PLEX_SCREEN_PTR#38 PLEX_SCREEN_PTR#36 PLEX_SCREEN_PTR#32 Alias plex_irq::plexFreeNextYpos1_return#0 = plex_irq::plexFreeNextYpos1_return#2 plex_irq::plexFreeNextYpos1_return#1 plex_irq::plexFreeNextYpos1_return#3 plex_irq::$2 plex_irq::rasterY#1 plex_irq::rasterY#3 plex_irq::rasterY#2 Alias font_2x2_to_sprites::char_current#0 = font_2x2_to_sprites::font_2x2#1 Alias font_2x2_to_sprites::sprite#0 = font_2x2_to_sprites::sprites#1 @@ -1935,16 +1838,15 @@ Alias font_2x2::next_2x2#4 = font_2x2::next_2x2#6 Alias font_2x2::next_original#3 = font_2x2::next_original#5 Alias font_2x2::c#2 = font_2x2::c#3 Alias __start::__init1_toSpritePtr1_sprite#0 = __start::__init1_toSpritePtr1_sprite#1 -Alias PLEX_SCREEN_PTR#17 = PLEX_SCREEN_PTR#33 PLEX_SCREEN_PTR#4 PLEX_SCREEN_PTR#28 PLEX_SCREEN_PTR#23 Alias SPRITE_0#0 = __start::__init1_toSpritePtr1_return#2 __start::__init1_toSpritePtr1_return#0 __start::__init1_toSpritePtr1_return#1 __start::__init1_toSpritePtr1_return#3 __start::__init1_$0 SPRITE_0#11 SPRITE_0#8 SPRITE_0#4 SPRITE_0#1 Alias scroll_text_next#22 = scroll_text_next#6 Alias y_sin_idx#20 = y_sin_idx#5 Alias x_movement_idx#20 = x_movement_idx#5 -Alias PLEX_SCREEN_PTR#11 = PLEX_SCREEN_PTR#5 PLEX_SCREEN_PTR#12 PLEX_SCREEN_PTR#6 Alias scroll_text_next#15 = scroll_text_next#7 scroll_text_next#16 scroll_text_next#8 Alias y_sin_idx#14 = y_sin_idx#6 y_sin_idx#15 y_sin_idx#7 Alias x_movement_idx#14 = x_movement_idx#6 x_movement_idx#15 x_movement_idx#7 Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Alias SPRITE_0#10 = SPRITE_0#3 @@ -1971,6 +1873,7 @@ Alias font_2x2::next_2x2#10 = font_2x2::next_2x2#3 font_2x2::next_2x2#4 Alias font_2x2::next_original#10 = font_2x2::next_original#6 font_2x2::next_original#3 Alias font_2x2::c#2 = font_2x2::c#4 font_2x2::c#7 Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Alias plex_move::x_idx#2 = plex_move::x_idx#3 @@ -1980,29 +1883,24 @@ Alias y_sin_idx#12 = y_sin_idx#25 Alias x_movement_idx#12 = x_movement_idx#25 Alias SPRITE_0#10 = SPRITE_0#14 Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Identical Phi Values plexInit::plexSetScreen1_screen#0 plexInit::screen#0 -Identical Phi Values PLEX_SCREEN_PTR#1 PLEX_SCREEN_PTR#0 Identical Phi Values plexSort::nxt_y#1 plexSort::nxt_y#0 Identical Phi Values plexSort::nxt_idx#1 plexSort::nxt_idx#0 Identical Phi Values plexSort::m#5 plexSort::m#2 -Identical Phi Values PLEX_SCREEN_PTR#14 PLEX_SCREEN_PTR#24 -Identical Phi Values PLEX_SCREEN_PTR#15 PLEX_SCREEN_PTR#17 Identical Phi Values SPRITE_0#12 SPRITE_0#0 Identical Phi Values scroll_text_next#32 scroll_text_next#22 Identical Phi Values y_sin_idx#32 y_sin_idx#20 Identical Phi Values x_movement_idx#32 x_movement_idx#20 -Identical Phi Values PLEX_SCREEN_PTR#2 PLEX_SCREEN_PTR#1 Identical Phi Values SPRITE_0#2 SPRITE_0#12 Identical Phi Values scroll_text_next#29 scroll_text_next#32 Identical Phi Values y_sin_idx#27 y_sin_idx#32 Identical Phi Values x_movement_idx#27 x_movement_idx#32 -Identical Phi Values PLEX_SCREEN_PTR#37 PLEX_SCREEN_PTR#2 Identical Phi Values scroll_text_next#17 scroll_text_next#29 Identical Phi Values y_sin_idx#16 y_sin_idx#27 Identical Phi Values x_movement_idx#16 x_movement_idx#27 -Identical Phi Values PLEX_SCREEN_PTR#21 PLEX_SCREEN_PTR#37 Identical Phi Values SPRITE_0#16 SPRITE_0#2 Identical Phi Values scroll_text_next#0 scroll_text_next#14 Identical Phi Values y_sin_idx#0 y_sin_idx#13 @@ -2010,7 +1908,6 @@ Identical Phi Values x_movement_idx#0 x_movement_idx#13 Identical Phi Values scroll_text_next#18 scroll_text_next#11 Identical Phi Values y_sin_idx#17 y_sin_idx#10 Identical Phi Values x_movement_idx#17 x_movement_idx#10 -Identical Phi Values PLEX_SCREEN_PTR#22 PLEX_SCREEN_PTR#10 Identical Phi Values SPRITE_0#17 SPRITE_0#23 Identical Phi Values scroll_text_next#1 scroll_text_next#14 Identical Phi Values y_sin_idx#1 y_sin_idx#13 @@ -2018,7 +1915,6 @@ Identical Phi Values x_movement_idx#1 x_movement_idx#13 Identical Phi Values y_sin_idx#12 y_sin_idx#11 Identical Phi Values x_movement_idx#12 x_movement_idx#11 Identical Phi Values SPRITE_0#10 SPRITE_0#13 -Identical Phi Values PLEX_SCREEN_PTR#24 PLEX_SCREEN_PTR#31 Identical Phi Values font_2x2_to_sprites::char_current#0 font_2x2_to_sprites::font_2x2#0 Identical Phi Values font_2x2_to_sprites::sprite#0 font_2x2_to_sprites::sprites#0 Identical Phi Values font_2x2_to_sprites::num_chars#2 font_2x2_to_sprites::num_chars#0 @@ -2036,13 +1932,11 @@ Identical Phi Values font_2x2::l#3 font_2x2::l#2 Identical Phi Values font_2x2::next_2x2#10 font_2x2::next_2x2#11 Identical Phi Values font_2x2::next_original#10 font_2x2::next_original#2 Identical Phi Values font_2x2::c#2 font_2x2::c#10 -Identical Phi Values PLEX_SCREEN_PTR#11 PLEX_SCREEN_PTR#10 Identical Phi Values scroll_text_next#15 scroll_text_next#11 Identical Phi Values y_sin_idx#14 y_sin_idx#10 Identical Phi Values x_movement_idx#14 x_movement_idx#10 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values plexSort::m#3 plexSort::m#2 -Identical Phi Values PLEX_SCREEN_PTR#10 PLEX_SCREEN_PTR#0 Identical Phi Values scroll_text_next#11 scroll_text_next#14 Identical Phi Values y_sin_idx#10 y_sin_idx#13 Identical Phi Values x_movement_idx#10 x_movement_idx#13 @@ -2055,34 +1949,34 @@ Identical Phi Values font_2x2::c#10 font_2x2::c#11 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values SPRITE_0#13 SPRITE_0#0 Successful SSA optimization Pass2IdenticalPhiElimination -Identified duplicate assignment right side [69] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD -Identified duplicate assignment right side [259] font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7 +Identified duplicate assignment right side [65] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD +Identified duplicate assignment right side [249] font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7 Successful SSA optimization Pass2DuplicateRValueIdentification -Simple Condition plexInit::$1 [7] if(plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 -Simple Condition plexSort::$3 [15] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 -Simple Condition plexSort::$8 [19] if(plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1 -Simple Condition plexSort::plexFreePrepare1_$0 [38] if(plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 +Simple Condition plexInit::$1 [8] if(plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 +Simple Condition plexSort::$3 [16] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 +Simple Condition plexSort::$8 [20] if(plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1 +Simple Condition plexSort::plexFreePrepare1_$0 [39] if(plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 Simple Condition plexShowSprite::$4 [58] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 Simple Condition plexShowSprite::$8 [68] if(plex_sprite_msb!=0) goto plexShowSprite::@return -Simple Condition main::$6 [101] if(main::s#2 (word)main::toD0181_gfx#0 +Constant value identified (word)main::toD0181_gfx#0 in [91] main::toD0181_$3 = > (word)main::toD0181_gfx#0 Successful SSA optimization Pass2ConstantValues -if() condition always true - replacing block destination [128] if(true) goto main::@7 +if() condition always true - replacing block destination [127] if(true) goto main::@7 Successful SSA optimization Pass2ConstantIfs -Resolved ranged next value [5] plexInit::i#1 = ++ plexInit::i#2 to ++ -Resolved ranged comparison value [7] if(plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 to PLEX_COUNT-1+1 -Resolved ranged next value [17] plexSort::m#1 = ++ plexSort::m#2 to ++ -Resolved ranged comparison value [19] if(plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1 to PLEX_COUNT-2+1 -Resolved ranged next value [36] plexSort::plexFreePrepare1_s#1 = ++ plexSort::plexFreePrepare1_s#2 to ++ -Resolved ranged comparison value [38] if(plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 to 8 -Resolved ranged next value [113] main::s1#1 = ++ main::s1#2 to ++ -Resolved ranged comparison value [115] if(main::s1#1!=rangelast(0,7)) goto main::@4 to 8 -Resolved ranged next value [151] plex_move::s#1 = ++ plex_move::s#2 to ++ -Resolved ranged comparison value [153] if(plex_move::s#1!=rangelast(0,PLEX_COUNT-1)) goto plex_move::@1 to PLEX_COUNT-1+1 -Resolved ranged next value [209] font_2x2_to_sprites::i#1 = ++ font_2x2_to_sprites::i#2 to ++ -Resolved ranged comparison value [211] if(font_2x2_to_sprites::i#1!=rangelast(0,$14)) goto font_2x2_to_sprites::@3 to $15 -Resolved ranged next value [238] font_2x2::b#1 = ++ font_2x2::b#2 to ++ -Resolved ranged comparison value [240] if(font_2x2::b#1!=rangelast(0,7)) goto font_2x2::@3 to 8 -Resolved ranged next value [255] font_2x2::l#1 = ++ font_2x2::l#2 to ++ -Resolved ranged comparison value [257] if(font_2x2::l#1!=rangelast(0,7)) goto font_2x2::@2 to 8 -Resolved ranged next value [263] font_2x2::c#1 = ++ font_2x2::c#11 to ++ -Resolved ranged comparison value [265] if(font_2x2::c#1!=rangelast(0,$3f)) goto font_2x2::@1 to $40 -Eliminating unused variable PLEX_SCREEN_PTR#0 and assignment [0] PLEX_SCREEN_PTR#0 = plexInit::screen#0 + $3f8 +Resolved ranged next value [6] plexInit::i#1 = ++ plexInit::i#2 to ++ +Resolved ranged comparison value [8] if(plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 to PLEX_COUNT-1+1 +Resolved ranged next value [18] plexSort::m#1 = ++ plexSort::m#2 to ++ +Resolved ranged comparison value [20] if(plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1 to PLEX_COUNT-2+1 +Resolved ranged next value [37] plexSort::plexFreePrepare1_s#1 = ++ plexSort::plexFreePrepare1_s#2 to ++ +Resolved ranged comparison value [39] if(plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 to 8 +Resolved ranged next value [112] main::s1#1 = ++ main::s1#2 to ++ +Resolved ranged comparison value [114] if(main::s1#1!=rangelast(0,7)) goto main::@4 to 8 +Resolved ranged next value [150] plex_move::s#1 = ++ plex_move::s#2 to ++ +Resolved ranged comparison value [152] if(plex_move::s#1!=rangelast(0,PLEX_COUNT-1)) goto plex_move::@1 to PLEX_COUNT-1+1 +Resolved ranged next value [206] font_2x2_to_sprites::i#1 = ++ font_2x2_to_sprites::i#2 to ++ +Resolved ranged comparison value [208] if(font_2x2_to_sprites::i#1!=rangelast(0,$14)) goto font_2x2_to_sprites::@3 to $15 +Resolved ranged next value [235] font_2x2::b#1 = ++ font_2x2::b#2 to ++ +Resolved ranged comparison value [237] if(font_2x2::b#1!=rangelast(0,7)) goto font_2x2::@3 to 8 +Resolved ranged next value [252] font_2x2::l#1 = ++ font_2x2::l#2 to ++ +Resolved ranged comparison value [254] if(font_2x2::l#1!=rangelast(0,7)) goto font_2x2::@2 to 8 +Resolved ranged next value [260] font_2x2::c#1 = ++ font_2x2::c#11 to ++ +Resolved ranged comparison value [262] if(font_2x2::c#1!=rangelast(0,$3f)) goto font_2x2::@1 to $40 Eliminating unused constant plex_irq::rasterY#0 -Eliminating unused constant PLEX_SCREEN_PTR#17 -Successful SSA optimization PassNEliminateUnusedVars -Eliminating unused constant plexInit::screen#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks @@ -2187,27 +2076,31 @@ Finalized unsigned number type 8 Finalized unsigned number type 8 Finalized unsigned number type $40 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Alias plexShowSprite::$11 = plexShowSprite::$10 Alias font_2x2_to_sprites::$3 = font_2x2_to_sprites::$2 Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 -Simple Condition plexSort::$5 [18] if(plexSort::s#1!=$ff) goto plexSort::@7 -Simple Condition plex_irq::$3 [128] if(plex_show_idx=PLEX_COUNT) goto plex_irq::@4 +Negating conditional jump and destination [20] if(plexSort::s#1==$ff) goto plexSort::@4 +Negating conditional jump and destination [129] if(plex_show_idx>=PLEX_COUNT) goto plex_irq::@4 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement -Constant right-side identified [63] main::toD0181_$0 = main::toD0181_$7 & $3fff -Constant right-side identified [66] main::toD0181_$3 = > (word)main::toD0181_gfx#0 -Constant right-side identified [151] font_2x2_to_sprites::char_left#2 = font_2x2_to_sprites::font_2x2#0 + ' '*8 -Constant right-side identified [152] font_2x2_to_sprites::char_right#2 = font_2x2_to_sprites::font_2x2#0 + ' '*8 -Constant right-side identified [201] __start::__init1_toSpritePtr1_$0 = __start::__init1_toSpritePtr1_$1 / $40 +Constant right-side identified [0] plexInit::plexSetScreen1_$0 = plexInit::screen#0 + $3f8 +Constant right-side identified [65] main::toD0181_$0 = main::toD0181_$7 & $3fff +Constant right-side identified [68] main::toD0181_$3 = > (word)main::toD0181_gfx#0 +Constant right-side identified [152] font_2x2_to_sprites::char_left#2 = font_2x2_to_sprites::font_2x2#0 + ' '*8 +Constant right-side identified [153] font_2x2_to_sprites::char_right#2 = font_2x2_to_sprites::font_2x2#0 + ' '*8 +Constant right-side identified [203] __start::__init1_toSpritePtr1_$0 = __start::__init1_toSpritePtr1_$1 / $40 Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plexInit::plexSetScreen1_$0 = plexInit::screen#0+$3f8 Constant main::toD0181_$0 = main::toD0181_$7&$3fff Constant main::toD0181_$3 = >(word)main::toD0181_gfx#0 Constant font_2x2_to_sprites::char_left#2 = font_2x2_to_sprites::font_2x2#0+' '*8 @@ -2218,9 +2111,9 @@ Constant SPRITE_0#0 = (byte)__start::__init1_toSpritePtr1_$0 Successful SSA optimization Pass2ConstantIdentification Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 -Constant right-side identified [61] main::toD0181_$1 = main::toD0181_$0 * 4 -Constant right-side identified [63] main::toD0181_$4 = main::toD0181_$3 / 4 -Constant right-side identified [69] main::$7 = SPRITE_0#0 + ' ' +Constant right-side identified [62] main::toD0181_$1 = main::toD0181_$0 * 4 +Constant right-side identified [64] main::toD0181_$4 = main::toD0181_$3 / 4 +Constant right-side identified [70] main::$7 = SPRITE_0#0 + ' ' Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::toD0181_$1 = main::toD0181_$0*4 Constant main::toD0181_$4 = main::toD0181_$3/4 @@ -2228,24 +2121,24 @@ Constant main::$7 = SPRITE_0#0+' ' Successful SSA optimization Pass2ConstantIdentification Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 -Constant right-side identified [61] main::toD0181_$2 = > main::toD0181_$1 -Constant right-side identified [62] main::toD0181_$5 = main::toD0181_$4 & $f +Constant right-side identified [62] main::toD0181_$2 = > main::toD0181_$1 +Constant right-side identified [63] main::toD0181_$5 = main::toD0181_$4 & $f Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::toD0181_$2 = >main::toD0181_$1 Constant main::toD0181_$5 = main::toD0181_$4&$f Successful SSA optimization Pass2ConstantIdentification Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 -Constant right-side identified [61] main::toD0181_return#0 = main::toD0181_$2 | main::toD0181_$5 +Constant right-side identified [62] main::toD0181_return#0 = main::toD0181_$2 | main::toD0181_$5 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::toD0181_return#0 = main::toD0181_$2|main::toD0181_$5 Successful SSA optimization Pass2ConstantIdentification Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 -Rewriting multiplication to use shift [28] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx * 2 -Rewriting multiplication to use shift [38] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD -Rewriting multiplication to use shift [65] main::$12 = main::s#2 * SIZEOF_WORD -Rewriting multiplication to use shift [95] plex_move::$6 = plex_move::s#2 * SIZEOF_WORD +Rewriting multiplication to use shift [29] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx * 2 +Rewriting multiplication to use shift [39] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD +Rewriting multiplication to use shift [66] main::$12 = main::s#2 * SIZEOF_WORD +Rewriting multiplication to use shift [96] plex_move::$6 = plex_move::s#2 * SIZEOF_WORD Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings plexInit::i#0 Inlining constant with var siblings plexSort::m#0 @@ -2288,6 +2181,7 @@ Constant inlined font_2x2::$3 = 1 Constant inlined main::s#0 = 0 Constant inlined font_2x2::b#0 = 0 Constant inlined font_2x2_to_sprites::i#0 = 0 +Constant inlined plexInit::plexSetScreen1_$0 = SCREEN+$3f8 Constant inlined main::toD0181_$7 = (word)SCREEN Constant inlined __start::__init1_toSpritePtr1_$0 = (word)SPRITES/$40 Constant inlined font_2x2::c#0 = 0 @@ -2303,6 +2197,7 @@ Constant inlined font_2x2_to_sprites::char_left#2 = FONT+' '*8 Constant inlined main::toD0181_$4 = >(word)CHARSET_DEFAULT/4 Constant inlined main::toD0181_$3 = >(word)CHARSET_DEFAULT Constant inlined font_2x2::l#0 = 0 +Constant inlined plexInit::screen#0 = SCREEN Constant inlined font_2x2_to_sprites::sprites#0 = SPRITES Constant inlined plex_move::s#0 = 0 Constant inlined font_2x2::font_original#0 = CHARGEN @@ -2362,17 +2257,16 @@ Adding NOP phi() at start of font_2x2::@4 Adding NOP phi() at start of font_2x2_to_sprites Adding NOP phi() at start of font_2x2_to_sprites::@7 Adding NOP phi() at start of plexInit -Adding NOP phi() at start of plexInit::plexSetScreen1 Adding NOP phi() at start of plexInit::@2 Adding NOP phi() at start of plex_move::@5 Adding NOP phi() at start of plexSort Adding NOP phi() at start of plexSort::plexFreePrepare1 CALL GRAPH -Calls in [__start] to main:9 +Calls in [__start] to main:10 Calls in [plex_irq] to plexShowSprite:15 Calls in [main] to font_2x2:31 font_2x2_to_sprites:34 plexInit:36 plex_move:49 plexSort:51 plex_move:66 plexSort:68 -Created 40 initial phi equivalence classes +Created 39 initial phi equivalence classes Coalesced [63] y_sin_idx#39 = y_sin_idx#13 Coalesced [64] x_movement_idx#39 = x_movement_idx#13 Coalesced [65] scroll_text_next#39 = scroll_text_next#14 @@ -2425,7 +2319,7 @@ Not coalescing [247] plexSort::s#6 = plexSort::m#2 Coalesced [267] plexSort::plexFreePrepare1_s#3 = plexSort::plexFreePrepare1_s#1 Coalesced [268] plexSort::m#7 = plexSort::m#1 Coalesced [269] plexSort::s#5 = plexSort::s#1 -Coalesced down to 32 phi equivalence classes +Coalesced down to 31 phi equivalence classes Culled Empty Block label __start::__init1_toSpritePtr1_@return Culled Empty Block label __start::@2 Culled Empty Block label plex_irq::@7 @@ -2482,7 +2376,6 @@ Adding NOP phi() at start of font_2x2::@4 Adding NOP phi() at start of font_2x2_to_sprites Adding NOP phi() at start of font_2x2_to_sprites::@8 Adding NOP phi() at start of plexInit -Adding NOP phi() at start of plexInit::plexSetScreen1 Adding NOP phi() at start of plex_move::@6 Adding NOP phi() at start of plexSort Adding NOP phi() at start of plexSort::plexFreePrepare1 @@ -2494,28 +2387,28 @@ __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start - [1] plex_show_idx = 0 - [2] plex_sprite_idx = 0 - [3] plex_sprite_msb = 1 - [4] plex_free_next = 0 + [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 + [2] plex_show_idx = 0 + [3] plex_sprite_idx = 0 + [4] plex_sprite_msb = 1 + [5] plex_free_next = 0 to:__start::__init1_toSpritePtr1 __start::__init1_toSpritePtr1: scope:[__start] from __start::__init1 - [5] phi() + [6] phi() to:__start::__init1_@1 __start::__init1_@1: scope:[__start] from __start::__init1_toSpritePtr1 - [6] frame_done = false + [7] frame_done = false to:__start::@1 __start::@1: scope:[__start] from __start::__init1_@1 - [7] phi() - [8] call main + [8] phi() + [9] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [9] return + [10] return to:@return interrupt(KERNEL_MIN) void plex_irq() plex_irq: scope:[plex_irq] from - [10] PLEX_SCREEN_PTR#31 = phi( ) asm { sei } to:plex_irq::@3 plex_irq::@3: scope:[plex_irq] from plex_irq plex_irq::@7 @@ -2637,7 +2530,7 @@ plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite [72] plex_free_next = plexShowSprite::plexFreeAdd1_$2 to:plexShowSprite::@5 plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 - [73] PLEX_SCREEN_PTR#31[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] + [73] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] [74] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] [75] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 [76] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] @@ -2798,7 +2691,7 @@ plexInit: scope:[plexInit] from main::@10 [156] phi() to:plexInit::plexSetScreen1 plexInit::plexSetScreen1: scope:[plexInit] from plexInit - [157] phi() + [157] PLEX_SCREEN_PTR = SCREEN+$3f8 to:plexInit::@1 plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1 [158] plexInit::i#2 = phi( plexInit::@1/plexInit::i#1, plexInit::plexSetScreen1/0 ) @@ -2909,8 +2802,7 @@ plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@2 VARIABLE REGISTER WEIGHTS -byte* PLEX_SCREEN_PTR -byte* PLEX_SCREEN_PTR#31 2.9705882352941178 +volatile byte* PLEX_SCREEN_PTR loadstore 6.181818181818182 byte SPRITE_0 void __start() byte __start::__init1_toSpritePtr1_return @@ -3053,7 +2945,7 @@ byte plexSort::s#1 1366668.3333333335 byte plexSort::s#2 200002.0 byte plexSort::s#3 2050002.5 byte plexSort::s#6 200002.0 -volatile byte plex_free_next loadstore 41.15625 +volatile byte plex_free_next loadstore 42.483870967741936 interrupt(KERNEL_MIN) void plex_irq() byte~ plex_irq::$4 11.0 byte plex_irq::plexFreeNextYpos1_return @@ -3074,9 +2966,9 @@ byte plex_move::y_idx byte plex_move::y_idx#0 1001.0 byte plex_move::y_idx#1 13333.466666666667 byte plex_move::y_idx#2 150502.0 -volatile byte plex_show_idx loadstore 44.73529411764706 -volatile byte plex_sprite_idx loadstore 43.96875 -volatile byte plex_sprite_msb loadstore 47.32352941176471 +volatile byte plex_show_idx loadstore 46.09090909090909 +volatile byte plex_sprite_idx loadstore 45.38709677419355 +volatile byte plex_sprite_msb loadstore 48.75757575757575 byte* scroll_text_next byte* scroll_text_next#12 44556.11111111111 byte* scroll_text_next#13 100001.0 @@ -3091,7 +2983,6 @@ byte y_sin_idx#11 105.14999999999999 byte y_sin_idx#13 58.0 Initial phi equivalence classes -[ PLEX_SCREEN_PTR#31 ] [ main::s#2 main::s#1 ] [ main::x#2 main::x#1 ] [ main::s1#2 main::s1#1 ] @@ -3123,6 +3014,7 @@ Initial phi equivalence classes [ plexSort::m#2 plexSort::m#1 ] [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +Added variable PLEX_SCREEN_PTR to live range equivalence class [ PLEX_SCREEN_PTR ] Added variable plex_show_idx to live range equivalence class [ plex_show_idx ] Added variable plex_sprite_idx to live range equivalence class [ plex_sprite_idx ] Added variable plex_sprite_msb to live range equivalence class [ plex_sprite_msb ] @@ -3164,7 +3056,6 @@ Added variable plexSort::nxt_idx#0 to live range equivalence class [ plexSort::n Added variable plexSort::nxt_y#0 to live range equivalence class [ plexSort::nxt_y#0 ] Added variable plexSort::s#2 to live range equivalence class [ plexSort::s#2 ] Complete equivalence classes -[ PLEX_SCREEN_PTR#31 ] [ main::s#2 main::s#1 ] [ main::x#2 main::x#1 ] [ main::s1#2 main::s1#1 ] @@ -3196,6 +3087,7 @@ Complete equivalence classes [ plexSort::m#2 plexSort::m#1 ] [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +[ PLEX_SCREEN_PTR ] [ plex_show_idx ] [ plex_sprite_idx ] [ plex_sprite_msb ] @@ -3236,38 +3128,38 @@ Complete equivalence classes [ plexSort::nxt_idx#0 ] [ plexSort::nxt_y#0 ] [ plexSort::s#2 ] -Allocated zp[2]:2 [ PLEX_SCREEN_PTR#31 ] -Allocated zp[1]:4 [ main::s#2 main::s#1 ] -Allocated zp[1]:5 [ main::x#2 main::x#1 ] -Allocated zp[1]:6 [ main::s1#2 main::s1#1 ] -Allocated zp[2]:7 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] -Allocated zp[2]:9 [ font_2x2::next_original#4 font_2x2::next_original#1 ] -Allocated zp[1]:11 [ font_2x2::c#11 font_2x2::c#1 ] -Allocated zp[1]:12 [ font_2x2::l#2 font_2x2::l#1 ] -Allocated zp[2]:13 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] -Allocated zp[1]:15 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] -Allocated zp[2]:16 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] -Allocated zp[1]:18 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] -Allocated zp[2]:19 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] -Allocated zp[1]:21 [ font_2x2::b#2 font_2x2::b#1 ] -Allocated zp[1]:22 [ font_2x2::glyph_bit#0 ] -Allocated zp[1]:23 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] -Allocated zp[2]:24 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] -Allocated zp[2]:26 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] -Allocated zp[1]:28 [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] -Allocated zp[2]:29 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 ] -Allocated zp[1]:31 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] -Allocated zp[2]:32 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 ] -Allocated zp[1]:34 [ plexInit::i#2 plexInit::i#1 ] -Allocated zp[1]:35 [ y_sin_idx#11 y_sin_idx#13 ] -Allocated zp[1]:36 [ x_movement_idx#11 x_movement_idx#13 ] -Allocated zp[1]:37 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] -Allocated zp[1]:38 [ plex_move::s#2 plex_move::s#1 ] -Allocated zp[1]:39 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] -Allocated zp[2]:40 [ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ] -Allocated zp[1]:42 [ plexSort::m#2 plexSort::m#1 ] -Allocated zp[1]:43 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] -Allocated zp[1]:44 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +Allocated zp[1]:2 [ main::s#2 main::s#1 ] +Allocated zp[1]:3 [ main::x#2 main::x#1 ] +Allocated zp[1]:4 [ main::s1#2 main::s1#1 ] +Allocated zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] +Allocated zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 ] +Allocated zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ] +Allocated zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ] +Allocated zp[2]:11 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] +Allocated zp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] +Allocated zp[2]:14 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] +Allocated zp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] +Allocated zp[2]:17 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] +Allocated zp[1]:19 [ font_2x2::b#2 font_2x2::b#1 ] +Allocated zp[1]:20 [ font_2x2::glyph_bit#0 ] +Allocated zp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] +Allocated zp[2]:22 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] +Allocated zp[2]:24 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] +Allocated zp[1]:26 [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] +Allocated zp[2]:27 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 ] +Allocated zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] +Allocated zp[2]:30 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 ] +Allocated zp[1]:32 [ plexInit::i#2 plexInit::i#1 ] +Allocated zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ] +Allocated zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ] +Allocated zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] +Allocated zp[1]:36 [ plex_move::s#2 plex_move::s#1 ] +Allocated zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] +Allocated zp[2]:38 [ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ] +Allocated zp[1]:40 [ plexSort::m#2 plexSort::m#1 ] +Allocated zp[1]:41 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +Allocated zp[1]:42 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +Allocated zp[2]:43 [ PLEX_SCREEN_PTR ] Allocated zp[1]:45 [ plex_show_idx ] Allocated zp[1]:46 [ plex_sprite_idx ] Allocated zp[1]:47 [ plex_sprite_msb ] @@ -3309,345 +3201,351 @@ Allocated zp[1]:87 [ plexSort::nxt_idx#0 ] Allocated zp[1]:88 [ plexSort::nxt_y#0 ] Allocated zp[1]:89 [ plexSort::s#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [3] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [4] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] frame_done = false [ frame_done ] ( [ frame_done ] { } ) always clobbers reg byte a -Statement [14] plex_irq::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y -Statement [15] plex_irq::$4 = *RASTER + 3 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a +Statement [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [3] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [4] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [7] frame_done = false [ frame_done ] ( [ frame_done ] { } ) always clobbers reg byte a +Statement [14] plex_irq::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y +Statement [15] plex_irq::$4 = *RASTER + 3 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:50 [ plex_irq::plexFreeNextYpos1_return#0 ] -Statement [16] if(plex_show_idx>=PLEX_COUNT) goto plex_irq::@4 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a +Statement [16] if(plex_show_idx>=PLEX_COUNT) goto plex_irq::@4 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:51 [ plex_irq::$4 ] Statement [18] if(plex_show_idx PLEX_XPOS[plexShowSprite::$11] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plexShowSprite::$3 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [80] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plexShowSprite::$9 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [81] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] { } ) always clobbers reg byte a -Statement [87] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] { } ) always clobbers reg byte a -Statement [88] plex_sprite_msb = 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] { } ) always clobbers reg byte a -Statement [90] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] { } ) always clobbers reg byte a -Statement [93] font_2x2::next_2x2_right#0 = font_2x2::next_2x2_left#0 + (word)$40*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:11 [ font_2x2::c#11 font_2x2::c#1 ] -Statement [94] font_2x2::next_2x2_left#10 = font_2x2::next_2x2_left#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] { } ) always clobbers reg byte a -Statement [96] font_2x2::glyph_bits#0 = font_2x2::next_original#4[font_2x2::l#2] [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:12 [ font_2x2::l#2 font_2x2::l#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:15 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] -Statement [102] font_2x2::$5 = font_2x2::glyph_bits_2x2#3 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:18 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:21 [ font_2x2::b#2 font_2x2::b#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:22 [ font_2x2::glyph_bit#0 ] -Statement [103] font_2x2::glyph_bits_2x2#1 = font_2x2::$5 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] { } ) always clobbers reg byte a -Statement [104] font_2x2::$7 = font_2x2::glyph_bits_2x2#1 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] { } ) always clobbers reg byte a -Statement [105] font_2x2::glyph_bits_2x2#2 = font_2x2::$7 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] { } ) always clobbers reg byte a -Statement [121] font_2x2::next_2x2_left#1 = font_2x2::next_2x2_left#0 + (word)$80*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] { } ) always clobbers reg byte a -Statement [122] font_2x2::next_2x2_right#1 = font_2x2::next_2x2_left#0 + (word)$c0*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] { } ) always clobbers reg byte a -Statement [126] font_2x2::next_2x2#1 = font_2x2::next_2x2_left#0 + 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a -Statement [127] font_2x2::next_original#1 = font_2x2::next_original#4 + 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a -Statement [135] font_2x2_to_sprites::char_right#0 = font_2x2_to_sprites::char_current#2 + (word)$40*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:23 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] -Statement [136] font_2x2_to_sprites::char_left#6 = font_2x2_to_sprites::char_current#2 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] { } ) always clobbers reg byte a -Statement [139] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#4] = font_2x2_to_sprites::char_left#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:28 [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:31 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] +Statement [78] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [80] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [81] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [87] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [88] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [90] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [93] font_2x2::next_2x2_right#0 = font_2x2::next_2x2_left#0 + (word)$40*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ] +Statement [94] font_2x2::next_2x2_left#10 = font_2x2::next_2x2_left#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] { } ) always clobbers reg byte a +Statement [96] font_2x2::glyph_bits#0 = font_2x2::next_original#4[font_2x2::l#2] [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] +Statement [102] font_2x2::$5 = font_2x2::glyph_bits_2x2#3 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:19 [ font_2x2::b#2 font_2x2::b#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:20 [ font_2x2::glyph_bit#0 ] +Statement [103] font_2x2::glyph_bits_2x2#1 = font_2x2::$5 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] { } ) always clobbers reg byte a +Statement [104] font_2x2::$7 = font_2x2::glyph_bits_2x2#1 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] { } ) always clobbers reg byte a +Statement [105] font_2x2::glyph_bits_2x2#2 = font_2x2::$7 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] { } ) always clobbers reg byte a +Statement [121] font_2x2::next_2x2_left#1 = font_2x2::next_2x2_left#0 + (word)$80*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] { } ) always clobbers reg byte a +Statement [122] font_2x2::next_2x2_right#1 = font_2x2::next_2x2_left#0 + (word)$c0*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] { } ) always clobbers reg byte a +Statement [126] font_2x2::next_2x2#1 = font_2x2::next_2x2_left#0 + 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a +Statement [127] font_2x2::next_original#1 = font_2x2::next_original#4 + 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a +Statement [135] font_2x2_to_sprites::char_right#0 = font_2x2_to_sprites::char_current#2 + (word)$40*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] +Statement [136] font_2x2_to_sprites::char_left#6 = font_2x2_to_sprites::char_current#2 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] { } ) always clobbers reg byte a +Statement [139] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#4] = font_2x2_to_sprites::char_left#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:26 [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] Removing always clobbered register reg byte a as potential for zp[1]:80 [ font_2x2_to_sprites::$3 ] -Statement [141] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#1] = font_2x2_to_sprites::char_right#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] { } ) always clobbers reg byte a +Statement [141] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#1] = font_2x2_to_sprites::char_right#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ] -Statement [143] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#2] = 0 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] { } ) always clobbers reg byte a +Statement [143] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#2] = 0 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:82 [ font_2x2_to_sprites::sprite_idx#2 ] -Statement [151] font_2x2_to_sprites::char_current#1 = font_2x2_to_sprites::char_current#2 + 8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] { } ) always clobbers reg byte a -Statement [152] font_2x2_to_sprites::sprite#1 = font_2x2_to_sprites::sprite#4 + $40 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] { } ) always clobbers reg byte a -Statement [154] font_2x2_to_sprites::char_left#1 = font_2x2_to_sprites::char_current#2 + (word)$80*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] { } ) always clobbers reg byte a -Statement [155] font_2x2_to_sprites::char_right#1 = font_2x2_to_sprites::char_current#2 + (word)$c0*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] { } ) always clobbers reg byte a -Statement [167] PLEX_YPOS[plex_move::s#2] = YSIN[plex_move::y_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:37 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:38 [ plex_move::s#2 plex_move::s#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:39 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] -Statement [168] plex_move::y_idx#1 = plex_move::y_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [169] plex_move::$6 = plex_move::s#2 << 1 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [170] plex_move::$7 = XMOVEMENT_HI[plex_move::x_idx#2] w= XMOVEMENT[plex_move::x_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [151] font_2x2_to_sprites::char_current#1 = font_2x2_to_sprites::char_current#2 + 8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] { } ) always clobbers reg byte a +Statement [152] font_2x2_to_sprites::sprite#1 = font_2x2_to_sprites::sprite#4 + $40 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] { } ) always clobbers reg byte a +Statement [154] font_2x2_to_sprites::char_left#1 = font_2x2_to_sprites::char_current#2 + (word)$80*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] { } ) always clobbers reg byte a +Statement [155] font_2x2_to_sprites::char_right#1 = font_2x2_to_sprites::char_current#2 + (word)$c0*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] { } ) always clobbers reg byte a +Statement [157] PLEX_SCREEN_PTR = SCREEN+$3f8 [ ] ( main:9::plexInit:32 [ frame_done ] { } ) always clobbers reg byte a +Statement [167] PLEX_YPOS[plex_move::s#2] = YSIN[plex_move::y_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:36 [ plex_move::s#2 plex_move::s#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] +Statement [168] plex_move::y_idx#1 = plex_move::y_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [169] plex_move::$6 = plex_move::s#2 << 1 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [170] plex_move::$7 = XMOVEMENT_HI[plex_move::x_idx#2] w= XMOVEMENT[plex_move::x_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:83 [ plex_move::$6 ] -Statement [171] PLEX_XPOS[plex_move::$6] = plex_move::$7 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [173] if(*scroll_text_next#12!=0) goto plex_move::@6 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:35 [ y_sin_idx#11 y_sin_idx#13 ] -Removing always clobbered register reg byte y as potential for zp[1]:36 [ x_movement_idx#11 x_movement_idx#13 ] -Removing always clobbered register reg byte y as potential for zp[1]:38 [ plex_move::s#2 plex_move::s#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:39 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:37 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] -Statement [176] plex_move::$4 = SPRITE_0#0 + *scroll_text_next#13 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y -Statement [180] plex_move::x_idx#1 = plex_move::x_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte x as potential for zp[1]:35 [ y_sin_idx#11 y_sin_idx#13 ] -Removing always clobbered register reg byte x as potential for zp[1]:36 [ x_movement_idx#11 x_movement_idx#13 ] -Removing always clobbered register reg byte x as potential for zp[1]:38 [ plex_move::s#2 plex_move::s#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:37 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] -Statement [182] if(plex_move::s#1!=PLEX_COUNT-1+1) goto plex_move::@1 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [183] y_sin_idx#13 = y_sin_idx#11 + 3 [ x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] ( main:8::plex_move:43 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { } main:8::plex_move:56 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x -Statement [193] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:8::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:8::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 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]:42 [ plexSort::m#2 plexSort::m#1 ] +Statement [171] PLEX_XPOS[plex_move::$6] = plex_move::$7 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [173] if(*scroll_text_next#12!=0) goto plex_move::@6 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ] +Removing always clobbered register reg byte y as potential for zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ] +Removing always clobbered register reg byte y as potential for zp[1]:36 [ plex_move::s#2 plex_move::s#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] +Statement [176] plex_move::$4 = SPRITE_0#0 + *scroll_text_next#13 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y +Statement [180] plex_move::x_idx#1 = plex_move::x_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte x as potential for zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ] +Removing always clobbered register reg byte x as potential for zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ] +Removing always clobbered register reg byte x as potential for zp[1]:36 [ plex_move::s#2 plex_move::s#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] +Statement [182] if(plex_move::s#1!=PLEX_COUNT-1+1) goto plex_move::@1 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [183] y_sin_idx#13 = y_sin_idx#11 + 3 [ x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] ( main:9::plex_move:43 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { } main:9::plex_move:56 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x +Statement [193] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 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]:40 [ plexSort::m#2 plexSort::m#1 ] Removing always clobbered register reg byte a as potential for zp[1]:87 [ plexSort::nxt_idx#0 ] Removing always clobbered register reg byte a as potential for zp[1]:88 [ plexSort::nxt_y#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:43 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] -Statement [196] if(plexSort::nxt_y#0=PLEX_COUNT) goto plex_irq::@4 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:41 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +Statement [196] if(plexSort::nxt_y#0=PLEX_COUNT) goto plex_irq::@4 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a Statement [18] if(plex_show_idx PLEX_XPOS[plexShowSprite::$11] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plexShowSprite::$3 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [80] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plexShowSprite::$9 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [81] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] { } ) always clobbers reg byte a -Statement [87] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] { } ) always clobbers reg byte a -Statement [88] plex_sprite_msb = 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] { } ) always clobbers reg byte a -Statement [90] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] { } ) always clobbers reg byte a -Statement [93] font_2x2::next_2x2_right#0 = font_2x2::next_2x2_left#0 + (word)$40*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] { } ) always clobbers reg byte a -Statement [94] font_2x2::next_2x2_left#10 = font_2x2::next_2x2_left#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] { } ) always clobbers reg byte a -Statement [96] font_2x2::glyph_bits#0 = font_2x2::next_original#4[font_2x2::l#2] [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] { } ) always clobbers reg byte a -Statement [98] font_2x2::$1 = font_2x2::glyph_bits#2 & $80 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::glyph_bits_2x2#3 font_2x2::b#2 font_2x2::$1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::glyph_bits_2x2#3 font_2x2::b#2 font_2x2::$1 ] { } ) always clobbers reg byte a -Statement [102] font_2x2::$5 = font_2x2::glyph_bits_2x2#3 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] { } ) always clobbers reg byte a -Statement [103] font_2x2::glyph_bits_2x2#1 = font_2x2::$5 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] { } ) always clobbers reg byte a -Statement [104] font_2x2::$7 = font_2x2::glyph_bits_2x2#1 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] { } ) always clobbers reg byte a -Statement [105] font_2x2::glyph_bits_2x2#2 = font_2x2::$7 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] { } ) always clobbers reg byte a -Statement [121] font_2x2::next_2x2_left#1 = font_2x2::next_2x2_left#0 + (word)$80*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] { } ) always clobbers reg byte a -Statement [122] font_2x2::next_2x2_right#1 = font_2x2::next_2x2_left#0 + (word)$c0*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] { } ) always clobbers reg byte a -Statement [126] font_2x2::next_2x2#1 = font_2x2::next_2x2_left#0 + 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a -Statement [127] font_2x2::next_original#1 = font_2x2::next_original#4 + 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a -Statement [135] font_2x2_to_sprites::char_right#0 = font_2x2_to_sprites::char_current#2 + (word)$40*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] { } ) always clobbers reg byte a -Statement [136] font_2x2_to_sprites::char_left#6 = font_2x2_to_sprites::char_current#2 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] { } ) always clobbers reg byte a -Statement [138] font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a -Statement [139] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#4] = font_2x2_to_sprites::char_left#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a -Statement [141] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#1] = font_2x2_to_sprites::char_right#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] { } ) always clobbers reg byte a -Statement [143] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#2] = 0 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] { } ) always clobbers reg byte a -Statement [151] font_2x2_to_sprites::char_current#1 = font_2x2_to_sprites::char_current#2 + 8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] { } ) always clobbers reg byte a -Statement [152] font_2x2_to_sprites::sprite#1 = font_2x2_to_sprites::sprite#4 + $40 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] { } ) always clobbers reg byte a -Statement [154] font_2x2_to_sprites::char_left#1 = font_2x2_to_sprites::char_current#2 + (word)$80*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] { } ) always clobbers reg byte a -Statement [155] font_2x2_to_sprites::char_right#1 = font_2x2_to_sprites::char_current#2 + (word)$c0*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] { } ) always clobbers reg byte a -Statement [164] plex_move::y_idx#0 = y_sin_idx#11 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [167] PLEX_YPOS[plex_move::s#2] = YSIN[plex_move::y_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y -Statement [168] plex_move::y_idx#1 = plex_move::y_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte x as potential for zp[1]:39 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] -Statement [169] plex_move::$6 = plex_move::s#2 << 1 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [170] plex_move::$7 = XMOVEMENT_HI[plex_move::x_idx#2] w= XMOVEMENT[plex_move::x_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y +Statement [69] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte y +Statement [73] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [74] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] { } ) always clobbers reg byte y +Statement [75] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] { } ) always clobbers reg byte a +Statement [76] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] { } ) always clobbers reg byte a +Statement [77] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] { } ) always clobbers reg byte y +Statement [78] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [80] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [81] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [87] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [88] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [90] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [93] font_2x2::next_2x2_right#0 = font_2x2::next_2x2_left#0 + (word)$40*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] { } ) always clobbers reg byte a +Statement [94] font_2x2::next_2x2_left#10 = font_2x2::next_2x2_left#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] { } ) always clobbers reg byte a +Statement [96] font_2x2::glyph_bits#0 = font_2x2::next_original#4[font_2x2::l#2] [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] { } ) always clobbers reg byte a +Statement [98] font_2x2::$1 = font_2x2::glyph_bits#2 & $80 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::glyph_bits_2x2#3 font_2x2::b#2 font_2x2::$1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::glyph_bits_2x2#3 font_2x2::b#2 font_2x2::$1 ] { } ) always clobbers reg byte a +Statement [102] font_2x2::$5 = font_2x2::glyph_bits_2x2#3 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] { } ) always clobbers reg byte a +Statement [103] font_2x2::glyph_bits_2x2#1 = font_2x2::$5 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] { } ) always clobbers reg byte a +Statement [104] font_2x2::$7 = font_2x2::glyph_bits_2x2#1 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] { } ) always clobbers reg byte a +Statement [105] font_2x2::glyph_bits_2x2#2 = font_2x2::$7 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] { } ) always clobbers reg byte a +Statement [121] font_2x2::next_2x2_left#1 = font_2x2::next_2x2_left#0 + (word)$80*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] { } ) always clobbers reg byte a +Statement [122] font_2x2::next_2x2_right#1 = font_2x2::next_2x2_left#0 + (word)$c0*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] { } ) always clobbers reg byte a +Statement [126] font_2x2::next_2x2#1 = font_2x2::next_2x2_left#0 + 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a +Statement [127] font_2x2::next_original#1 = font_2x2::next_original#4 + 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a +Statement [135] font_2x2_to_sprites::char_right#0 = font_2x2_to_sprites::char_current#2 + (word)$40*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] { } ) always clobbers reg byte a +Statement [136] font_2x2_to_sprites::char_left#6 = font_2x2_to_sprites::char_current#2 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] { } ) always clobbers reg byte a +Statement [138] font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a +Statement [139] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#4] = font_2x2_to_sprites::char_left#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a +Statement [141] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#1] = font_2x2_to_sprites::char_right#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] { } ) always clobbers reg byte a +Statement [143] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#2] = 0 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] { } ) always clobbers reg byte a +Statement [151] font_2x2_to_sprites::char_current#1 = font_2x2_to_sprites::char_current#2 + 8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] { } ) always clobbers reg byte a +Statement [152] font_2x2_to_sprites::sprite#1 = font_2x2_to_sprites::sprite#4 + $40 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] { } ) always clobbers reg byte a +Statement [154] font_2x2_to_sprites::char_left#1 = font_2x2_to_sprites::char_current#2 + (word)$80*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] { } ) always clobbers reg byte a +Statement [155] font_2x2_to_sprites::char_right#1 = font_2x2_to_sprites::char_current#2 + (word)$c0*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] { } ) always clobbers reg byte a +Statement [157] PLEX_SCREEN_PTR = SCREEN+$3f8 [ ] ( main:9::plexInit:32 [ frame_done ] { } ) always clobbers reg byte a +Statement [164] plex_move::y_idx#0 = y_sin_idx#11 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [167] PLEX_YPOS[plex_move::s#2] = YSIN[plex_move::y_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y +Statement [168] plex_move::y_idx#1 = plex_move::y_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte x as potential for zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] +Statement [169] plex_move::$6 = plex_move::s#2 << 1 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [170] plex_move::$7 = XMOVEMENT_HI[plex_move::x_idx#2] w= XMOVEMENT[plex_move::x_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:83 [ plex_move::$6 ] -Statement [171] PLEX_XPOS[plex_move::$6] = plex_move::$7 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [172] if(plex_move::x_idx#2!=0) goto plex_move::@2 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [173] if(*scroll_text_next#12!=0) goto plex_move::@6 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y -Statement [176] plex_move::$4 = SPRITE_0#0 + *scroll_text_next#13 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y -Statement [177] PLEX_PTR[plex_move::s#2] = plex_move::$4 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte y -Statement [180] plex_move::x_idx#1 = plex_move::x_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x -Statement [182] if(plex_move::s#1!=PLEX_COUNT-1+1) goto plex_move::@1 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [183] y_sin_idx#13 = y_sin_idx#11 + 3 [ x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] ( main:8::plex_move:43 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { } main:8::plex_move:56 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x -Statement [190] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:8::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } main:8::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a -Statement [193] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:8::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:8::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a -Statement [196] if(plexSort::nxt_y#0=PLEX_COUNT) goto plex_irq::@4 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a +Statement [171] PLEX_XPOS[plex_move::$6] = plex_move::$7 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [172] if(plex_move::x_idx#2!=0) goto plex_move::@2 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [173] if(*scroll_text_next#12!=0) goto plex_move::@6 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y +Statement [176] plex_move::$4 = SPRITE_0#0 + *scroll_text_next#13 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y +Statement [177] PLEX_PTR[plex_move::s#2] = plex_move::$4 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte y +Statement [180] plex_move::x_idx#1 = plex_move::x_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x +Statement [182] if(plex_move::s#1!=PLEX_COUNT-1+1) goto plex_move::@1 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [183] y_sin_idx#13 = y_sin_idx#11 + 3 [ x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] ( main:9::plex_move:43 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { } main:9::plex_move:56 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x +Statement [190] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a +Statement [193] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a +Statement [196] if(plexSort::nxt_y#0=PLEX_COUNT) goto plex_irq::@4 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a Statement [18] if(plex_show_idx PLEX_XPOS[plexShowSprite::$11] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plexShowSprite::$3 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [80] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plexShowSprite::$9 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [81] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] { } ) always clobbers reg byte a -Statement [87] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] { } ) always clobbers reg byte a -Statement [88] plex_sprite_msb = 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] { } ) always clobbers reg byte a -Statement [90] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#31 ] { } ) always clobbers reg byte a -Statement [93] font_2x2::next_2x2_right#0 = font_2x2::next_2x2_left#0 + (word)$40*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] { } ) always clobbers reg byte a -Statement [94] font_2x2::next_2x2_left#10 = font_2x2::next_2x2_left#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] { } ) always clobbers reg byte a -Statement [96] font_2x2::glyph_bits#0 = font_2x2::next_original#4[font_2x2::l#2] [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] { } ) always clobbers reg byte a -Statement [98] font_2x2::$1 = font_2x2::glyph_bits#2 & $80 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::glyph_bits_2x2#3 font_2x2::b#2 font_2x2::$1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::glyph_bits_2x2#3 font_2x2::b#2 font_2x2::$1 ] { } ) always clobbers reg byte a -Statement [102] font_2x2::$5 = font_2x2::glyph_bits_2x2#3 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] { } ) always clobbers reg byte a -Statement [103] font_2x2::glyph_bits_2x2#1 = font_2x2::$5 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] { } ) always clobbers reg byte a -Statement [104] font_2x2::$7 = font_2x2::glyph_bits_2x2#1 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] { } ) always clobbers reg byte a -Statement [105] font_2x2::glyph_bits_2x2#2 = font_2x2::$7 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] { } ) always clobbers reg byte a -Statement [121] font_2x2::next_2x2_left#1 = font_2x2::next_2x2_left#0 + (word)$80*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] { } ) always clobbers reg byte a -Statement [122] font_2x2::next_2x2_right#1 = font_2x2::next_2x2_left#0 + (word)$c0*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] { } ) always clobbers reg byte a -Statement [126] font_2x2::next_2x2#1 = font_2x2::next_2x2_left#0 + 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a -Statement [127] font_2x2::next_original#1 = font_2x2::next_original#4 + 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:8::font_2x2:27 [ frame_done font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a -Statement [135] font_2x2_to_sprites::char_right#0 = font_2x2_to_sprites::char_current#2 + (word)$40*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] { } ) always clobbers reg byte a -Statement [136] font_2x2_to_sprites::char_left#6 = font_2x2_to_sprites::char_current#2 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] { } ) always clobbers reg byte a -Statement [138] font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a -Statement [139] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#4] = font_2x2_to_sprites::char_left#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a -Statement [141] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#1] = font_2x2_to_sprites::char_right#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] { } ) always clobbers reg byte a -Statement [143] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#2] = 0 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] { } ) always clobbers reg byte a -Statement [151] font_2x2_to_sprites::char_current#1 = font_2x2_to_sprites::char_current#2 + 8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] { } ) always clobbers reg byte a -Statement [152] font_2x2_to_sprites::sprite#1 = font_2x2_to_sprites::sprite#4 + $40 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] { } ) always clobbers reg byte a -Statement [154] font_2x2_to_sprites::char_left#1 = font_2x2_to_sprites::char_current#2 + (word)$80*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] { } ) always clobbers reg byte a -Statement [155] font_2x2_to_sprites::char_right#1 = font_2x2_to_sprites::char_current#2 + (word)$c0*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] ( main:8::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] { } ) always clobbers reg byte a -Statement [164] plex_move::y_idx#0 = y_sin_idx#11 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [165] plex_move::x_idx#0 = x_movement_idx#11 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 plex_move::x_idx#0 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 plex_move::x_idx#0 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 plex_move::x_idx#0 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [167] PLEX_YPOS[plex_move::s#2] = YSIN[plex_move::y_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y -Statement [168] plex_move::y_idx#1 = plex_move::y_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x -Statement [169] plex_move::$6 = plex_move::s#2 << 1 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [170] plex_move::$7 = XMOVEMENT_HI[plex_move::x_idx#2] w= XMOVEMENT[plex_move::x_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y -Statement [171] PLEX_XPOS[plex_move::$6] = plex_move::$7 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [172] if(plex_move::x_idx#2!=0) goto plex_move::@2 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [173] if(*scroll_text_next#12!=0) goto plex_move::@6 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y -Statement [176] plex_move::$4 = SPRITE_0#0 + *scroll_text_next#13 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y -Statement [177] PLEX_PTR[plex_move::s#2] = plex_move::$4 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte y -Statement [180] plex_move::x_idx#1 = plex_move::x_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x -Statement [182] if(plex_move::s#1!=PLEX_COUNT-1+1) goto plex_move::@1 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] ( main:8::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { } main:8::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a -Statement [183] y_sin_idx#13 = y_sin_idx#11 + 3 [ x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] ( main:8::plex_move:43 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { } main:8::plex_move:56 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x -Statement [190] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:8::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } main:8::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a -Statement [193] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:8::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:8::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a -Statement [196] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [80] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [81] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [87] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [88] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [90] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [93] font_2x2::next_2x2_right#0 = font_2x2::next_2x2_left#0 + (word)$40*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] { } ) always clobbers reg byte a +Statement [94] font_2x2::next_2x2_left#10 = font_2x2::next_2x2_left#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] { } ) always clobbers reg byte a +Statement [96] font_2x2::glyph_bits#0 = font_2x2::next_original#4[font_2x2::l#2] [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] { } ) always clobbers reg byte a +Statement [98] font_2x2::$1 = font_2x2::glyph_bits#2 & $80 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::glyph_bits_2x2#3 font_2x2::b#2 font_2x2::$1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::glyph_bits_2x2#3 font_2x2::b#2 font_2x2::$1 ] { } ) always clobbers reg byte a +Statement [102] font_2x2::$5 = font_2x2::glyph_bits_2x2#3 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] { } ) always clobbers reg byte a +Statement [103] font_2x2::glyph_bits_2x2#1 = font_2x2::$5 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] { } ) always clobbers reg byte a +Statement [104] font_2x2::$7 = font_2x2::glyph_bits_2x2#1 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] { } ) always clobbers reg byte a +Statement [105] font_2x2::glyph_bits_2x2#2 = font_2x2::$7 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] { } ) always clobbers reg byte a +Statement [121] font_2x2::next_2x2_left#1 = font_2x2::next_2x2_left#0 + (word)$80*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] { } ) always clobbers reg byte a +Statement [122] font_2x2::next_2x2_right#1 = font_2x2::next_2x2_left#0 + (word)$c0*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] { } ) always clobbers reg byte a +Statement [126] font_2x2::next_2x2#1 = font_2x2::next_2x2_left#0 + 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a +Statement [127] font_2x2::next_original#1 = font_2x2::next_original#4 + 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a +Statement [135] font_2x2_to_sprites::char_right#0 = font_2x2_to_sprites::char_current#2 + (word)$40*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] { } ) always clobbers reg byte a +Statement [136] font_2x2_to_sprites::char_left#6 = font_2x2_to_sprites::char_current#2 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] { } ) always clobbers reg byte a +Statement [138] font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a +Statement [139] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#4] = font_2x2_to_sprites::char_left#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a +Statement [141] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#1] = font_2x2_to_sprites::char_right#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] { } ) always clobbers reg byte a +Statement [143] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#2] = 0 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] { } ) always clobbers reg byte a +Statement [151] font_2x2_to_sprites::char_current#1 = font_2x2_to_sprites::char_current#2 + 8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] { } ) always clobbers reg byte a +Statement [152] font_2x2_to_sprites::sprite#1 = font_2x2_to_sprites::sprite#4 + $40 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] { } ) always clobbers reg byte a +Statement [154] font_2x2_to_sprites::char_left#1 = font_2x2_to_sprites::char_current#2 + (word)$80*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] { } ) always clobbers reg byte a +Statement [155] font_2x2_to_sprites::char_right#1 = font_2x2_to_sprites::char_current#2 + (word)$c0*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] { } ) always clobbers reg byte a +Statement [157] PLEX_SCREEN_PTR = SCREEN+$3f8 [ ] ( main:9::plexInit:32 [ frame_done ] { } ) always clobbers reg byte a +Statement [164] plex_move::y_idx#0 = y_sin_idx#11 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [165] plex_move::x_idx#0 = x_movement_idx#11 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 plex_move::x_idx#0 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 plex_move::x_idx#0 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 plex_move::x_idx#0 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [167] PLEX_YPOS[plex_move::s#2] = YSIN[plex_move::y_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y +Statement [168] plex_move::y_idx#1 = plex_move::y_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x +Statement [169] plex_move::$6 = plex_move::s#2 << 1 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [170] plex_move::$7 = XMOVEMENT_HI[plex_move::x_idx#2] w= XMOVEMENT[plex_move::x_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y +Statement [171] PLEX_XPOS[plex_move::$6] = plex_move::$7 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [172] if(plex_move::x_idx#2!=0) goto plex_move::@2 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [173] if(*scroll_text_next#12!=0) goto plex_move::@6 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y +Statement [176] plex_move::$4 = SPRITE_0#0 + *scroll_text_next#13 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y +Statement [177] PLEX_PTR[plex_move::s#2] = plex_move::$4 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte y +Statement [180] plex_move::x_idx#1 = plex_move::x_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x +Statement [182] if(plex_move::s#1!=PLEX_COUNT-1+1) goto plex_move::@1 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a +Statement [183] y_sin_idx#13 = y_sin_idx#11 + 3 [ x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] ( main:9::plex_move:43 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { } main:9::plex_move:56 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x +Statement [190] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a +Statement [193] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a +Statement [196] if(plexSort::nxt_y#0$400+$3f8 + sta.z PLEX_SCREEN_PTR+1 + // [2] plex_show_idx = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_show_idx - // [2] plex_sprite_idx = 0 -- vbuz1=vbuc1 + // [3] plex_sprite_idx = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_sprite_idx - // [3] plex_sprite_msb = 1 -- vbuz1=vbuc1 + // [4] plex_sprite_msb = 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb - // [4] plex_free_next = 0 -- vbuz1=vbuc1 + // [5] plex_free_next = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_free_next - // [5] phi from __start::__init1 to __start::__init1_toSpritePtr1 [phi:__start::__init1->__start::__init1_toSpritePtr1] + // [6] phi from __start::__init1 to __start::__init1_toSpritePtr1 [phi:__start::__init1->__start::__init1_toSpritePtr1] __init1_toSpritePtr1_from___init1: jmp __init1_toSpritePtr1 // __start::__init1_toSpritePtr1 @@ -3927,20 +3831,20 @@ __start: { jmp __init1___b1 // __start::__init1_@1 __init1___b1: - // [6] frame_done = false -- vboz1=vboc1 + // [7] frame_done = false -- vboz1=vboc1 lda #0 sta.z frame_done - // [7] phi from __start::__init1_@1 to __start::@1 [phi:__start::__init1_@1->__start::@1] + // [8] phi from __start::__init1_@1 to __start::@1 [phi:__start::__init1_@1->__start::@1] __b1_from___init1___b1: jmp __b1 // __start::@1 __b1: - // [8] call main + // [9] call main jsr main jmp __breturn // __start::@return __breturn: - // [9] return + // [10] return rts } // plex_irq @@ -4025,7 +3929,7 @@ plex_irq: { // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET_DEFAULT)/4&$f - .label s = 4 + .label s = 2 .label __13 = $17 // asm { sei } // Create 2x2 font from CHARGEN @@ -4278,7 +4182,7 @@ plexShowSprite: { jmp __b5 // plexShowSprite::@5 __b5: - // [73] PLEX_SCREEN_PTR#31[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) + // [73] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) ldx.z plex_show_idx ldy PLEX_SORTED_IDX,x lda PLEX_PTR,y @@ -4358,15 +4262,15 @@ font_2x2: { .label __5 = $17 .label __7 = $17 .label next_2x2_left = $1a - .label next_2x2_right = 9 - .label glyph_bits = $d + .label next_2x2_right = 7 + .label glyph_bits = $b .label glyph_bits_2x2 = $17 .label l2 = $1c .label l = $1d - .label next_2x2_left_1 = 7 + .label next_2x2_left_1 = 5 .label next_2x2 = $1a - .label next_original = 5 - .label c = $10 + .label next_original = 3 + .label c = $e // [92] phi from font_2x2 to font_2x2::@1 [phi:font_2x2->font_2x2::@1] __b1_from_font_2x2: // [92] phi font_2x2::c#11 = 0 [phi:font_2x2->font_2x2::@1#0] -- vbuz1=vbuc1 @@ -4609,12 +4513,12 @@ font_2x2: { font_2x2_to_sprites: { .const num_chars = $40 .label __3 = $1c - .label char_right = 9 + .label char_right = 7 .label sprite_idx = $1d - .label char_left = 7 + .label char_left = 5 .label char_current = $1a - .label sprite = 5 - .label c = $10 + .label sprite = 3 + .label c = $e // [132] phi from font_2x2_to_sprites to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1] __b1_from_font_2x2_to_sprites: // [132] phi font_2x2_to_sprites::sprite#4 = SPRITES [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#0] -- pbuz1=pbuc1 @@ -4790,11 +4694,14 @@ font_2x2_to_sprites: { // plexInit // Initialize the multiplexer data structures plexInit: { - // [157] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] - plexSetScreen1_from_plexInit: jmp plexSetScreen1 // plexInit::plexSetScreen1 plexSetScreen1: + // [157] PLEX_SCREEN_PTR = SCREEN+$3f8 -- pbuz1=pbuc1 + lda #SCREEN+$3f8 + sta.z PLEX_SCREEN_PTR+1 // [158] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] __b1_from_plexSetScreen1: // [158] phi plexInit::i#2 = 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 @@ -4824,8 +4731,8 @@ plexInit: { // Move the plex sprites in an Y-sine and scroll them to the left. plex_move: { .label y_idx = $1c - .label x_idx = $10 - .label s = $d + .label x_idx = $e + .label s = $b .label __7 = $1a // [164] plex_move::y_idx#0 = y_sin_idx#11 -- vbuz1=vbuz2 lda.z y_sin_idx @@ -4966,7 +4873,7 @@ plex_move: { plexSort: { .label nxt_idx = $1c .label nxt_y = $1d - .label m = $10 + .label m = $e // [187] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] __b1_from_plexSort: // [187] phi plexSort::m#2 = 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 @@ -5251,8 +5158,6 @@ Removing instruction __b8_from___b6: Removing instruction __b8: Removing instruction __b5_from___b4: Removing instruction __b5_from___b8: -Removing instruction plexSetScreen1_from_plexInit: -Removing instruction __b1_from_plexSetScreen1: Removing instruction __b1_from___b1: Removing instruction __b1_from___b2: Removing instruction __b6_from___b4: @@ -5315,6 +5220,7 @@ Removing instruction __b5_from___b6: Removing instruction __b7: Removing instruction __b1_from___b7: Removing instruction plexSetScreen1: +Removing instruction __b1_from_plexSetScreen1: Removing instruction __breturn: Removing instruction __b1_from_plex_move: Removing instruction __b4: @@ -5348,7 +5254,7 @@ Removing instruction lda #8 Removing instruction ldx.z m Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [410] bne __b1 to beq +Fixing long branch [414] bne __b1 to beq FINAL SYMBOL TABLE const nomodify byte* CHARGEN = (byte*) 53248 @@ -5365,8 +5271,7 @@ const byte OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d const nomodify byte PLEX_COUNT = $20 const byte* PLEX_FREE_YPOS[8] = { fill( 8, 0) } const byte* PLEX_PTR[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } -byte* PLEX_SCREEN_PTR -byte* PLEX_SCREEN_PTR#31 PLEX_SCREEN_PTR zp[2]:2 2.9705882352941178 +volatile byte* PLEX_SCREEN_PTR loadstore zp[2]:15 6.181818181818182 const byte* PLEX_SORTED_IDX[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const word* PLEX_XPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const byte* PLEX_YPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -5411,16 +5316,16 @@ byte font_2x2::b byte font_2x2::b#1 reg byte y 150001.5 byte font_2x2::b#2 reg byte y 20000.2 byte font_2x2::c -byte font_2x2::c#1 c zp[1]:16 1501.5 -byte font_2x2::c#11 c zp[1]:16 55.611111111111114 +byte font_2x2::c#1 c zp[1]:14 1501.5 +byte font_2x2::c#11 c zp[1]:14 55.611111111111114 byte* font_2x2::font_2x2 byte* font_2x2::font_original byte font_2x2::glyph_bit byte font_2x2::glyph_bit#0 reg byte x 50000.5 byte font_2x2::glyph_bits -byte font_2x2::glyph_bits#0 glyph_bits zp[1]:13 20002.0 -byte font_2x2::glyph_bits#1 glyph_bits zp[1]:13 66667.33333333333 -byte font_2x2::glyph_bits#2 glyph_bits zp[1]:13 34444.88888888889 +byte font_2x2::glyph_bits#0 glyph_bits zp[1]:11 20002.0 +byte font_2x2::glyph_bits#1 glyph_bits zp[1]:11 66667.33333333333 +byte font_2x2::glyph_bits#2 glyph_bits zp[1]:11 34444.88888888889 word font_2x2::glyph_bits_2x2 word font_2x2::glyph_bits_2x2#1 glyph_bits_2x2 zp[2]:23 200002.0 word font_2x2::glyph_bits_2x2#2 glyph_bits_2x2 zp[2]:23 20000.500000000004 @@ -5436,36 +5341,36 @@ byte* font_2x2::next_2x2 byte* font_2x2::next_2x2#1 next_2x2 zp[2]:26 500.5 byte* font_2x2::next_2x2_left byte* font_2x2::next_2x2_left#0 next_2x2_left zp[2]:26 706.0588235294117 -byte* font_2x2::next_2x2_left#1 next_2x2_left_1 zp[2]:7 10001.0 -byte* font_2x2::next_2x2_left#10 next_2x2_left_1 zp[2]:7 2002.0 -byte* font_2x2::next_2x2_left#7 next_2x2_left_1 zp[2]:7 1577.1153846153845 -byte* font_2x2::next_2x2_left#8 next_2x2_left_1 zp[2]:7 10001.0 +byte* font_2x2::next_2x2_left#1 next_2x2_left_1 zp[2]:5 10001.0 +byte* font_2x2::next_2x2_left#10 next_2x2_left_1 zp[2]:5 2002.0 +byte* font_2x2::next_2x2_left#7 next_2x2_left_1 zp[2]:5 1577.1153846153845 +byte* font_2x2::next_2x2_left#8 next_2x2_left_1 zp[2]:5 10001.0 byte* font_2x2::next_2x2_right -byte* font_2x2::next_2x2_right#0 next_2x2_right zp[2]:9 1001.0 -byte* font_2x2::next_2x2_right#1 next_2x2_right zp[2]:9 20002.0 -byte* font_2x2::next_2x2_right#7 next_2x2_right zp[2]:9 1577.1153846153845 -byte* font_2x2::next_2x2_right#8 next_2x2_right zp[2]:9 10001.0 +byte* font_2x2::next_2x2_right#0 next_2x2_right zp[2]:7 1001.0 +byte* font_2x2::next_2x2_right#1 next_2x2_right zp[2]:7 20002.0 +byte* font_2x2::next_2x2_right#7 next_2x2_right zp[2]:7 1577.1153846153845 +byte* font_2x2::next_2x2_right#8 next_2x2_right zp[2]:7 10001.0 byte* font_2x2::next_original -byte* font_2x2::next_original#1 next_original zp[2]:5 667.3333333333334 -byte* font_2x2::next_original#4 next_original zp[2]:5 342.9428571428572 +byte* font_2x2::next_original#1 next_original zp[2]:3 667.3333333333334 +byte* font_2x2::next_original#4 next_original zp[2]:3 342.9428571428572 void font_2x2_to_sprites(byte* font_2x2_to_sprites::font_2x2 , byte* font_2x2_to_sprites::sprites , byte font_2x2_to_sprites::num_chars) byte~ font_2x2_to_sprites::$3 zp[1]:28 10001.0 byte font_2x2_to_sprites::c -byte font_2x2_to_sprites::c#1 c zp[1]:16 2002.0 -byte font_2x2_to_sprites::c#2 c zp[1]:16 136.5 +byte font_2x2_to_sprites::c#1 c zp[1]:14 2002.0 +byte font_2x2_to_sprites::c#2 c zp[1]:14 136.5 byte* font_2x2_to_sprites::char_current byte* font_2x2_to_sprites::char_current#1 char_current zp[2]:26 667.3333333333334 byte* font_2x2_to_sprites::char_current#2 char_current zp[2]:26 1200.3 byte* font_2x2_to_sprites::char_left -byte* font_2x2_to_sprites::char_left#1 char_left zp[2]:7 10001.0 -byte* font_2x2_to_sprites::char_left#3 char_left zp[2]:7 2818.5454545454545 -byte* font_2x2_to_sprites::char_left#4 char_left zp[2]:7 10001.0 -byte* font_2x2_to_sprites::char_left#6 char_left zp[2]:7 2002.0 +byte* font_2x2_to_sprites::char_left#1 char_left zp[2]:5 10001.0 +byte* font_2x2_to_sprites::char_left#3 char_left zp[2]:5 2818.5454545454545 +byte* font_2x2_to_sprites::char_left#4 char_left zp[2]:5 10001.0 +byte* font_2x2_to_sprites::char_left#6 char_left zp[2]:5 2002.0 byte* font_2x2_to_sprites::char_right -byte* font_2x2_to_sprites::char_right#0 char_right zp[2]:9 1001.0 -byte* font_2x2_to_sprites::char_right#1 char_right zp[2]:9 20002.0 -byte* font_2x2_to_sprites::char_right#3 char_right zp[2]:9 2818.5454545454545 -byte* font_2x2_to_sprites::char_right#4 char_right zp[2]:9 10001.0 +byte* font_2x2_to_sprites::char_right#0 char_right zp[2]:7 1001.0 +byte* font_2x2_to_sprites::char_right#1 char_right zp[2]:7 20002.0 +byte* font_2x2_to_sprites::char_right#3 char_right zp[2]:7 2818.5454545454545 +byte* font_2x2_to_sprites::char_right#4 char_right zp[2]:7 10001.0 byte* font_2x2_to_sprites::font_2x2 byte font_2x2_to_sprites::i byte font_2x2_to_sprites::i#1 reg byte x 15001.5 @@ -5473,8 +5378,8 @@ byte font_2x2_to_sprites::i#2 reg byte x 3571.7857142857147 byte font_2x2_to_sprites::num_chars const byte font_2x2_to_sprites::num_chars#0 num_chars = $40 byte* font_2x2_to_sprites::sprite -byte* font_2x2_to_sprites::sprite#1 sprite zp[2]:5 1001.0 -byte* font_2x2_to_sprites::sprite#4 sprite zp[2]:5 1524.047619047619 +byte* font_2x2_to_sprites::sprite#1 sprite zp[2]:3 1001.0 +byte* font_2x2_to_sprites::sprite#4 sprite zp[2]:3 1524.047619047619 byte font_2x2_to_sprites::sprite_idx byte font_2x2_to_sprites::sprite_idx#1 sprite_idx zp[1]:29 15001.5 byte font_2x2_to_sprites::sprite_idx#2 reg byte y 15001.5 @@ -5486,8 +5391,8 @@ void main() byte~ main::$12 reg byte y 101.0 word~ main::$13 zp[2]:23 202.0 byte main::s -byte main::s#1 s zp[1]:4 202.0 -byte main::s#2 s zp[1]:4 72.14285714285714 +byte main::s#1 s zp[1]:2 202.0 +byte main::s#2 s zp[1]:2 72.14285714285714 byte main::s1 byte main::s1#1 reg byte x 151.5 byte main::s1#2 reg byte x 151.5 @@ -5523,8 +5428,8 @@ byte plexShowSprite::xpos_idx#0 reg byte a 202.0 byte plexShowSprite::ypos void plexSort() byte plexSort::m -byte plexSort::m#1 m zp[1]:16 150001.5 -byte plexSort::m#2 m zp[1]:16 41667.08333333333 +byte plexSort::m#1 m zp[1]:14 150001.5 +byte plexSort::m#2 m zp[1]:14 41667.08333333333 byte plexSort::nxt_idx byte plexSort::nxt_idx#0 nxt_idx zp[1]:28 30000.300000000003 byte plexSort::nxt_y @@ -5537,7 +5442,7 @@ byte plexSort::s#1 reg byte x 1366668.3333333335 byte plexSort::s#2 reg byte x 200002.0 byte plexSort::s#3 reg byte x 2050002.5 byte plexSort::s#6 reg byte x 200002.0 -volatile byte plex_free_next loadstore zp[1]:20 41.15625 +volatile byte plex_free_next loadstore zp[1]:20 42.483870967741936 interrupt(KERNEL_MIN) void plex_irq() byte~ plex_irq::$4 zp[1]:22 11.0 byte plex_irq::plexFreeNextYpos1_return @@ -5548,50 +5453,50 @@ byte~ plex_move::$4 reg byte a 200002.0 byte~ plex_move::$6 reg byte x 100001.0 word~ plex_move::$7 zp[2]:26 200002.0 byte plex_move::s -byte plex_move::s#1 s zp[1]:13 150001.5 -byte plex_move::s#2 s zp[1]:13 33333.66666666667 +byte plex_move::s#1 s zp[1]:11 150001.5 +byte plex_move::s#2 s zp[1]:11 33333.66666666667 byte plex_move::x_idx -byte plex_move::x_idx#0 x_idx zp[1]:16 2002.0 -byte plex_move::x_idx#1 x_idx zp[1]:16 66667.33333333333 -byte plex_move::x_idx#2 x_idx zp[1]:16 35786.142857142855 +byte plex_move::x_idx#0 x_idx zp[1]:14 2002.0 +byte plex_move::x_idx#1 x_idx zp[1]:14 66667.33333333333 +byte plex_move::x_idx#2 x_idx zp[1]:14 35786.142857142855 byte plex_move::y_idx byte plex_move::y_idx#0 y_idx zp[1]:28 1001.0 byte plex_move::y_idx#1 y_idx zp[1]:28 13333.466666666667 byte plex_move::y_idx#2 y_idx zp[1]:28 150502.0 -volatile byte plex_show_idx loadstore zp[1]:17 44.73529411764706 -volatile byte plex_sprite_idx loadstore zp[1]:18 43.96875 -volatile byte plex_sprite_msb loadstore zp[1]:19 47.32352941176471 +volatile byte plex_show_idx loadstore zp[1]:17 46.09090909090909 +volatile byte plex_sprite_idx loadstore zp[1]:18 45.38709677419355 +volatile byte plex_sprite_msb loadstore zp[1]:19 48.75757575757575 byte* scroll_text_next -byte* scroll_text_next#12 scroll_text_next zp[2]:14 44556.11111111111 -byte* scroll_text_next#13 scroll_text_next zp[2]:14 100001.0 -byte* scroll_text_next#14 scroll_text_next zp[2]:14 13048.0 -byte* scroll_text_next#27 scroll_text_next zp[2]:14 367.33333333333337 -byte* scroll_text_next#3 scroll_text_next zp[2]:14 200002.0 +byte* scroll_text_next#12 scroll_text_next zp[2]:12 44556.11111111111 +byte* scroll_text_next#13 scroll_text_next zp[2]:12 100001.0 +byte* scroll_text_next#14 scroll_text_next zp[2]:12 13048.0 +byte* scroll_text_next#27 scroll_text_next zp[2]:12 367.33333333333337 +byte* scroll_text_next#3 scroll_text_next zp[2]:12 200002.0 byte x_movement_idx -byte x_movement_idx#11 x_movement_idx zp[1]:12 100.14285714285714 -byte x_movement_idx#13 x_movement_idx zp[1]:12 61.22222222222223 +byte x_movement_idx#11 x_movement_idx zp[1]:10 100.14285714285714 +byte x_movement_idx#13 x_movement_idx zp[1]:10 61.22222222222223 byte y_sin_idx -byte y_sin_idx#11 y_sin_idx zp[1]:11 105.14999999999999 -byte y_sin_idx#13 y_sin_idx zp[1]:11 58.0 +byte y_sin_idx#11 y_sin_idx zp[1]:9 105.14999999999999 +byte y_sin_idx#13 y_sin_idx zp[1]:9 58.0 -zp[2]:2 [ PLEX_SCREEN_PTR#31 ] -zp[1]:4 [ main::s#2 main::s#1 ] +zp[1]:2 [ main::s#2 main::s#1 ] reg byte x [ main::x#2 main::x#1 ] reg byte x [ main::s1#2 main::s1#1 ] reg byte y [ font_2x2::b#2 font_2x2::b#1 ] reg byte x [ font_2x2::glyph_bit#0 ] -zp[2]:5 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 font_2x2::next_original#4 font_2x2::next_original#1 ] +zp[2]:3 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 font_2x2::next_original#4 font_2x2::next_original#1 ] reg byte x [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] -zp[2]:7 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] -zp[2]:9 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] +zp[2]:5 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] +zp[2]:7 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] reg byte x [ plexInit::i#2 plexInit::i#1 ] -zp[1]:11 [ y_sin_idx#11 y_sin_idx#13 ] -zp[1]:12 [ x_movement_idx#11 x_movement_idx#13 ] -zp[1]:13 [ plex_move::s#2 plex_move::s#1 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] -zp[2]:14 [ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ] -zp[1]:16 [ plexSort::m#2 plexSort::m#1 plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 font_2x2::c#11 font_2x2::c#1 ] +zp[1]:9 [ y_sin_idx#11 y_sin_idx#13 ] +zp[1]:10 [ x_movement_idx#11 x_movement_idx#13 ] +zp[1]:11 [ plex_move::s#2 plex_move::s#1 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] +zp[2]:12 [ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ] +zp[1]:14 [ plexSort::m#2 plexSort::m#1 plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 font_2x2::c#11 font_2x2::c#1 ] reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +zp[2]:15 [ PLEX_SCREEN_PTR ] zp[1]:17 [ plex_show_idx ] zp[1]:18 [ plex_sprite_idx ] zp[1]:19 [ plex_sprite_msb ] @@ -5630,7 +5535,7 @@ reg byte x [ plexSort::s#2 ] FINAL ASSEMBLER -Score: 159128 +Score: 159148 // File Comments // Put a 2x2 font into sprites and show it on screen @@ -5681,6 +5586,8 @@ Score: 159128 .label SCREEN = $400 // The high-value table .label XMOVEMENT_HI = XMOVEMENT+$100 + // The address of the sprite pointers on the current screen (screen+0x3f8). + .label PLEX_SCREEN_PTR = $f // The index in the PLEX tables of the next sprite to show .label plex_show_idx = $11 // The index the next sprite to use for showing (sprites are used round-robin) @@ -5692,43 +5599,47 @@ Score: 159128 // Signal used between IRQ and main loop. Set to true when the IRQ is done showing the sprites. .label frame_done = $15 // The next char to use from the scroll text - .label scroll_text_next = $e + .label scroll_text_next = $c // Y-sine index - .label y_sin_idx = $b + .label y_sin_idx = 9 // X-movement index - .label x_movement_idx = $c - // The address of the sprite pointers on the current screen (screen+0x3f8). - .label PLEX_SCREEN_PTR = 2 + .label x_movement_idx = $a // __start __start: { // __start::__init1 + // PLEX_SCREEN_PTR = 0x400+0x3f8 + // [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 -- pbuz1=pbuc1 + lda #<$400+$3f8 + sta.z PLEX_SCREEN_PTR + lda #>$400+$3f8 + sta.z PLEX_SCREEN_PTR+1 // plex_show_idx=0 - // [1] plex_show_idx = 0 -- vbuz1=vbuc1 + // [2] plex_show_idx = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_show_idx // plex_sprite_idx=0 - // [2] plex_sprite_idx = 0 -- vbuz1=vbuc1 + // [3] plex_sprite_idx = 0 -- vbuz1=vbuc1 sta.z plex_sprite_idx // plex_sprite_msb=1 - // [3] plex_sprite_msb = 1 -- vbuz1=vbuc1 + // [4] plex_sprite_msb = 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb // plex_free_next = 0 - // [4] plex_free_next = 0 -- vbuz1=vbuc1 + // [5] plex_free_next = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_free_next - // [5] phi from __start::__init1 to __start::__init1_toSpritePtr1 [phi:__start::__init1->__start::__init1_toSpritePtr1] + // [6] phi from __start::__init1 to __start::__init1_toSpritePtr1 [phi:__start::__init1->__start::__init1_toSpritePtr1] // __start::__init1_toSpritePtr1 // __start::__init1_@1 // frame_done = false - // [6] frame_done = false -- vboz1=vboc1 + // [7] frame_done = false -- vboz1=vboc1 sta.z frame_done - // [7] phi from __start::__init1_@1 to __start::@1 [phi:__start::__init1_@1->__start::@1] + // [8] phi from __start::__init1_@1 to __start::@1 [phi:__start::__init1_@1->__start::@1] // __start::@1 - // [8] call main + // [9] call main jsr main // __start::@return - // [9] return + // [10] return rts } // plex_irq @@ -5810,7 +5721,7 @@ plex_irq: { // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET_DEFAULT)/4&$f - .label s = 4 + .label s = 2 .label __13 = $17 // asm // asm { sei } @@ -6057,7 +5968,7 @@ plexShowSprite: { sta.z plex_free_next // plexShowSprite::@5 // PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] - // [73] PLEX_SCREEN_PTR#31[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) + // [73] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) ldy PLEX_SORTED_IDX,x lda PLEX_PTR,y ldy.z plex_sprite_idx @@ -6146,15 +6057,15 @@ font_2x2: { .label __5 = $17 .label __7 = $17 .label next_2x2_left = $1a - .label next_2x2_right = 9 - .label glyph_bits = $d + .label next_2x2_right = 7 + .label glyph_bits = $b .label glyph_bits_2x2 = $17 .label l2 = $1c .label l = $1d - .label next_2x2_left_1 = 7 + .label next_2x2_left_1 = 5 .label next_2x2 = $1a - .label next_original = 5 - .label c = $10 + .label next_original = 3 + .label c = $e // [92] phi from font_2x2 to font_2x2::@1 [phi:font_2x2->font_2x2::@1] // [92] phi font_2x2::c#11 = 0 [phi:font_2x2->font_2x2::@1#0] -- vbuz1=vbuc1 lda #0 @@ -6393,12 +6304,12 @@ font_2x2: { font_2x2_to_sprites: { .const num_chars = $40 .label __3 = $1c - .label char_right = 9 + .label char_right = 7 .label sprite_idx = $1d - .label char_left = 7 + .label char_left = 5 .label char_current = $1a - .label sprite = 5 - .label c = $10 + .label sprite = 3 + .label c = $e // [132] phi from font_2x2_to_sprites to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1] // [132] phi font_2x2_to_sprites::sprite#4 = SPRITES [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#0] -- pbuz1=pbuc1 lda #plexInit::plexSetScreen1] // plexInit::plexSetScreen1 + // PLEX_SCREEN_PTR = screen+0x3f8 + // [157] PLEX_SCREEN_PTR = SCREEN+$3f8 -- pbuz1=pbuc1 + lda #SCREEN+$3f8 + sta.z PLEX_SCREEN_PTR+1 // [158] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] // [158] phi plexInit::i#2 = 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 ldx #0 @@ -6598,8 +6514,8 @@ plexInit: { // Move the plex sprites in an Y-sine and scroll them to the left. plex_move: { .label y_idx = $1c - .label x_idx = $10 - .label s = $d + .label x_idx = $e + .label s = $b .label __7 = $1a // y_idx = y_sin_idx // [164] plex_move::y_idx#0 = y_sin_idx#11 -- vbuz1=vbuz2 @@ -6734,7 +6650,7 @@ plex_move: { plexSort: { .label nxt_idx = $1c .label nxt_y = $1d - .label m = $10 + .label m = $e // [187] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] // [187] phi plexSort::m#2 = 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 lda #0 diff --git a/src/test/ref/complex/spritescroller/spritescroller.sym b/src/test/ref/complex/spritescroller/spritescroller.sym index e8bc2f3d2..e372b36d2 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.sym +++ b/src/test/ref/complex/spritescroller/spritescroller.sym @@ -12,8 +12,7 @@ const byte OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d const nomodify byte PLEX_COUNT = $20 const byte* PLEX_FREE_YPOS[8] = { fill( 8, 0) } const byte* PLEX_PTR[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } -byte* PLEX_SCREEN_PTR -byte* PLEX_SCREEN_PTR#31 PLEX_SCREEN_PTR zp[2]:2 2.9705882352941178 +volatile byte* PLEX_SCREEN_PTR loadstore zp[2]:15 6.181818181818182 const byte* PLEX_SORTED_IDX[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const word* PLEX_XPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const byte* PLEX_YPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -58,16 +57,16 @@ byte font_2x2::b byte font_2x2::b#1 reg byte y 150001.5 byte font_2x2::b#2 reg byte y 20000.2 byte font_2x2::c -byte font_2x2::c#1 c zp[1]:16 1501.5 -byte font_2x2::c#11 c zp[1]:16 55.611111111111114 +byte font_2x2::c#1 c zp[1]:14 1501.5 +byte font_2x2::c#11 c zp[1]:14 55.611111111111114 byte* font_2x2::font_2x2 byte* font_2x2::font_original byte font_2x2::glyph_bit byte font_2x2::glyph_bit#0 reg byte x 50000.5 byte font_2x2::glyph_bits -byte font_2x2::glyph_bits#0 glyph_bits zp[1]:13 20002.0 -byte font_2x2::glyph_bits#1 glyph_bits zp[1]:13 66667.33333333333 -byte font_2x2::glyph_bits#2 glyph_bits zp[1]:13 34444.88888888889 +byte font_2x2::glyph_bits#0 glyph_bits zp[1]:11 20002.0 +byte font_2x2::glyph_bits#1 glyph_bits zp[1]:11 66667.33333333333 +byte font_2x2::glyph_bits#2 glyph_bits zp[1]:11 34444.88888888889 word font_2x2::glyph_bits_2x2 word font_2x2::glyph_bits_2x2#1 glyph_bits_2x2 zp[2]:23 200002.0 word font_2x2::glyph_bits_2x2#2 glyph_bits_2x2 zp[2]:23 20000.500000000004 @@ -83,36 +82,36 @@ byte* font_2x2::next_2x2 byte* font_2x2::next_2x2#1 next_2x2 zp[2]:26 500.5 byte* font_2x2::next_2x2_left byte* font_2x2::next_2x2_left#0 next_2x2_left zp[2]:26 706.0588235294117 -byte* font_2x2::next_2x2_left#1 next_2x2_left_1 zp[2]:7 10001.0 -byte* font_2x2::next_2x2_left#10 next_2x2_left_1 zp[2]:7 2002.0 -byte* font_2x2::next_2x2_left#7 next_2x2_left_1 zp[2]:7 1577.1153846153845 -byte* font_2x2::next_2x2_left#8 next_2x2_left_1 zp[2]:7 10001.0 +byte* font_2x2::next_2x2_left#1 next_2x2_left_1 zp[2]:5 10001.0 +byte* font_2x2::next_2x2_left#10 next_2x2_left_1 zp[2]:5 2002.0 +byte* font_2x2::next_2x2_left#7 next_2x2_left_1 zp[2]:5 1577.1153846153845 +byte* font_2x2::next_2x2_left#8 next_2x2_left_1 zp[2]:5 10001.0 byte* font_2x2::next_2x2_right -byte* font_2x2::next_2x2_right#0 next_2x2_right zp[2]:9 1001.0 -byte* font_2x2::next_2x2_right#1 next_2x2_right zp[2]:9 20002.0 -byte* font_2x2::next_2x2_right#7 next_2x2_right zp[2]:9 1577.1153846153845 -byte* font_2x2::next_2x2_right#8 next_2x2_right zp[2]:9 10001.0 +byte* font_2x2::next_2x2_right#0 next_2x2_right zp[2]:7 1001.0 +byte* font_2x2::next_2x2_right#1 next_2x2_right zp[2]:7 20002.0 +byte* font_2x2::next_2x2_right#7 next_2x2_right zp[2]:7 1577.1153846153845 +byte* font_2x2::next_2x2_right#8 next_2x2_right zp[2]:7 10001.0 byte* font_2x2::next_original -byte* font_2x2::next_original#1 next_original zp[2]:5 667.3333333333334 -byte* font_2x2::next_original#4 next_original zp[2]:5 342.9428571428572 +byte* font_2x2::next_original#1 next_original zp[2]:3 667.3333333333334 +byte* font_2x2::next_original#4 next_original zp[2]:3 342.9428571428572 void font_2x2_to_sprites(byte* font_2x2_to_sprites::font_2x2 , byte* font_2x2_to_sprites::sprites , byte font_2x2_to_sprites::num_chars) byte~ font_2x2_to_sprites::$3 zp[1]:28 10001.0 byte font_2x2_to_sprites::c -byte font_2x2_to_sprites::c#1 c zp[1]:16 2002.0 -byte font_2x2_to_sprites::c#2 c zp[1]:16 136.5 +byte font_2x2_to_sprites::c#1 c zp[1]:14 2002.0 +byte font_2x2_to_sprites::c#2 c zp[1]:14 136.5 byte* font_2x2_to_sprites::char_current byte* font_2x2_to_sprites::char_current#1 char_current zp[2]:26 667.3333333333334 byte* font_2x2_to_sprites::char_current#2 char_current zp[2]:26 1200.3 byte* font_2x2_to_sprites::char_left -byte* font_2x2_to_sprites::char_left#1 char_left zp[2]:7 10001.0 -byte* font_2x2_to_sprites::char_left#3 char_left zp[2]:7 2818.5454545454545 -byte* font_2x2_to_sprites::char_left#4 char_left zp[2]:7 10001.0 -byte* font_2x2_to_sprites::char_left#6 char_left zp[2]:7 2002.0 +byte* font_2x2_to_sprites::char_left#1 char_left zp[2]:5 10001.0 +byte* font_2x2_to_sprites::char_left#3 char_left zp[2]:5 2818.5454545454545 +byte* font_2x2_to_sprites::char_left#4 char_left zp[2]:5 10001.0 +byte* font_2x2_to_sprites::char_left#6 char_left zp[2]:5 2002.0 byte* font_2x2_to_sprites::char_right -byte* font_2x2_to_sprites::char_right#0 char_right zp[2]:9 1001.0 -byte* font_2x2_to_sprites::char_right#1 char_right zp[2]:9 20002.0 -byte* font_2x2_to_sprites::char_right#3 char_right zp[2]:9 2818.5454545454545 -byte* font_2x2_to_sprites::char_right#4 char_right zp[2]:9 10001.0 +byte* font_2x2_to_sprites::char_right#0 char_right zp[2]:7 1001.0 +byte* font_2x2_to_sprites::char_right#1 char_right zp[2]:7 20002.0 +byte* font_2x2_to_sprites::char_right#3 char_right zp[2]:7 2818.5454545454545 +byte* font_2x2_to_sprites::char_right#4 char_right zp[2]:7 10001.0 byte* font_2x2_to_sprites::font_2x2 byte font_2x2_to_sprites::i byte font_2x2_to_sprites::i#1 reg byte x 15001.5 @@ -120,8 +119,8 @@ byte font_2x2_to_sprites::i#2 reg byte x 3571.7857142857147 byte font_2x2_to_sprites::num_chars const byte font_2x2_to_sprites::num_chars#0 num_chars = $40 byte* font_2x2_to_sprites::sprite -byte* font_2x2_to_sprites::sprite#1 sprite zp[2]:5 1001.0 -byte* font_2x2_to_sprites::sprite#4 sprite zp[2]:5 1524.047619047619 +byte* font_2x2_to_sprites::sprite#1 sprite zp[2]:3 1001.0 +byte* font_2x2_to_sprites::sprite#4 sprite zp[2]:3 1524.047619047619 byte font_2x2_to_sprites::sprite_idx byte font_2x2_to_sprites::sprite_idx#1 sprite_idx zp[1]:29 15001.5 byte font_2x2_to_sprites::sprite_idx#2 reg byte y 15001.5 @@ -133,8 +132,8 @@ void main() byte~ main::$12 reg byte y 101.0 word~ main::$13 zp[2]:23 202.0 byte main::s -byte main::s#1 s zp[1]:4 202.0 -byte main::s#2 s zp[1]:4 72.14285714285714 +byte main::s#1 s zp[1]:2 202.0 +byte main::s#2 s zp[1]:2 72.14285714285714 byte main::s1 byte main::s1#1 reg byte x 151.5 byte main::s1#2 reg byte x 151.5 @@ -170,8 +169,8 @@ byte plexShowSprite::xpos_idx#0 reg byte a 202.0 byte plexShowSprite::ypos void plexSort() byte plexSort::m -byte plexSort::m#1 m zp[1]:16 150001.5 -byte plexSort::m#2 m zp[1]:16 41667.08333333333 +byte plexSort::m#1 m zp[1]:14 150001.5 +byte plexSort::m#2 m zp[1]:14 41667.08333333333 byte plexSort::nxt_idx byte plexSort::nxt_idx#0 nxt_idx zp[1]:28 30000.300000000003 byte plexSort::nxt_y @@ -184,7 +183,7 @@ byte plexSort::s#1 reg byte x 1366668.3333333335 byte plexSort::s#2 reg byte x 200002.0 byte plexSort::s#3 reg byte x 2050002.5 byte plexSort::s#6 reg byte x 200002.0 -volatile byte plex_free_next loadstore zp[1]:20 41.15625 +volatile byte plex_free_next loadstore zp[1]:20 42.483870967741936 interrupt(KERNEL_MIN) void plex_irq() byte~ plex_irq::$4 zp[1]:22 11.0 byte plex_irq::plexFreeNextYpos1_return @@ -195,50 +194,50 @@ byte~ plex_move::$4 reg byte a 200002.0 byte~ plex_move::$6 reg byte x 100001.0 word~ plex_move::$7 zp[2]:26 200002.0 byte plex_move::s -byte plex_move::s#1 s zp[1]:13 150001.5 -byte plex_move::s#2 s zp[1]:13 33333.66666666667 +byte plex_move::s#1 s zp[1]:11 150001.5 +byte plex_move::s#2 s zp[1]:11 33333.66666666667 byte plex_move::x_idx -byte plex_move::x_idx#0 x_idx zp[1]:16 2002.0 -byte plex_move::x_idx#1 x_idx zp[1]:16 66667.33333333333 -byte plex_move::x_idx#2 x_idx zp[1]:16 35786.142857142855 +byte plex_move::x_idx#0 x_idx zp[1]:14 2002.0 +byte plex_move::x_idx#1 x_idx zp[1]:14 66667.33333333333 +byte plex_move::x_idx#2 x_idx zp[1]:14 35786.142857142855 byte plex_move::y_idx byte plex_move::y_idx#0 y_idx zp[1]:28 1001.0 byte plex_move::y_idx#1 y_idx zp[1]:28 13333.466666666667 byte plex_move::y_idx#2 y_idx zp[1]:28 150502.0 -volatile byte plex_show_idx loadstore zp[1]:17 44.73529411764706 -volatile byte plex_sprite_idx loadstore zp[1]:18 43.96875 -volatile byte plex_sprite_msb loadstore zp[1]:19 47.32352941176471 +volatile byte plex_show_idx loadstore zp[1]:17 46.09090909090909 +volatile byte plex_sprite_idx loadstore zp[1]:18 45.38709677419355 +volatile byte plex_sprite_msb loadstore zp[1]:19 48.75757575757575 byte* scroll_text_next -byte* scroll_text_next#12 scroll_text_next zp[2]:14 44556.11111111111 -byte* scroll_text_next#13 scroll_text_next zp[2]:14 100001.0 -byte* scroll_text_next#14 scroll_text_next zp[2]:14 13048.0 -byte* scroll_text_next#27 scroll_text_next zp[2]:14 367.33333333333337 -byte* scroll_text_next#3 scroll_text_next zp[2]:14 200002.0 +byte* scroll_text_next#12 scroll_text_next zp[2]:12 44556.11111111111 +byte* scroll_text_next#13 scroll_text_next zp[2]:12 100001.0 +byte* scroll_text_next#14 scroll_text_next zp[2]:12 13048.0 +byte* scroll_text_next#27 scroll_text_next zp[2]:12 367.33333333333337 +byte* scroll_text_next#3 scroll_text_next zp[2]:12 200002.0 byte x_movement_idx -byte x_movement_idx#11 x_movement_idx zp[1]:12 100.14285714285714 -byte x_movement_idx#13 x_movement_idx zp[1]:12 61.22222222222223 +byte x_movement_idx#11 x_movement_idx zp[1]:10 100.14285714285714 +byte x_movement_idx#13 x_movement_idx zp[1]:10 61.22222222222223 byte y_sin_idx -byte y_sin_idx#11 y_sin_idx zp[1]:11 105.14999999999999 -byte y_sin_idx#13 y_sin_idx zp[1]:11 58.0 +byte y_sin_idx#11 y_sin_idx zp[1]:9 105.14999999999999 +byte y_sin_idx#13 y_sin_idx zp[1]:9 58.0 -zp[2]:2 [ PLEX_SCREEN_PTR#31 ] -zp[1]:4 [ main::s#2 main::s#1 ] +zp[1]:2 [ main::s#2 main::s#1 ] reg byte x [ main::x#2 main::x#1 ] reg byte x [ main::s1#2 main::s1#1 ] reg byte y [ font_2x2::b#2 font_2x2::b#1 ] reg byte x [ font_2x2::glyph_bit#0 ] -zp[2]:5 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 font_2x2::next_original#4 font_2x2::next_original#1 ] +zp[2]:3 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 font_2x2::next_original#4 font_2x2::next_original#1 ] reg byte x [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] -zp[2]:7 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] -zp[2]:9 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] +zp[2]:5 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] +zp[2]:7 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] reg byte x [ plexInit::i#2 plexInit::i#1 ] -zp[1]:11 [ y_sin_idx#11 y_sin_idx#13 ] -zp[1]:12 [ x_movement_idx#11 x_movement_idx#13 ] -zp[1]:13 [ plex_move::s#2 plex_move::s#1 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] -zp[2]:14 [ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ] -zp[1]:16 [ plexSort::m#2 plexSort::m#1 plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 font_2x2::c#11 font_2x2::c#1 ] +zp[1]:9 [ y_sin_idx#11 y_sin_idx#13 ] +zp[1]:10 [ x_movement_idx#11 x_movement_idx#13 ] +zp[1]:11 [ plex_move::s#2 plex_move::s#1 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] +zp[2]:12 [ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ] +zp[1]:14 [ plexSort::m#2 plexSort::m#1 plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 font_2x2::c#11 font_2x2::c#1 ] reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +zp[2]:15 [ PLEX_SCREEN_PTR ] zp[1]:17 [ plex_show_idx ] zp[1]:18 [ plex_sprite_idx ] zp[1]:19 [ plex_sprite_msb ] diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.asm b/src/test/ref/examples/multiplexer/simple-multiplexer.asm index 36e225a19..8b8a52aa7 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.asm +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.asm @@ -26,16 +26,21 @@ // Location of screen & sprites .label SCREEN = $400 // The address of the sprite pointers on the current screen (screen+0x3f8). - .label PLEX_SCREEN_PTR = SCREEN+$3f8 + .label PLEX_SCREEN_PTR = 6 // The index in the PLEX tables of the next sprite to show - .label plex_show_idx = 6 + .label plex_show_idx = 8 // The index the next sprite to use for showing (sprites are used round-robin) - .label plex_sprite_idx = 7 + .label plex_sprite_idx = 9 // The MSB bit of the next sprite to use for showing - .label plex_sprite_msb = 8 + .label plex_sprite_msb = $a // 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 = 9 + .label plex_free_next = $b __start: { + // PLEX_SCREEN_PTR = 0x400+0x3f8 + lda #<$400+$3f8 + sta.z PLEX_SCREEN_PTR + lda #>$400+$3f8 + sta.z PLEX_SCREEN_PTR+1 // plex_show_idx=0 lda #0 sta.z plex_show_idx @@ -119,7 +124,7 @@ init: { loop: { // The current index into the y-sinus .label sin_idx = 4 - .label plexFreeNextYpos1_return = $a + .label plexFreeNextYpos1_return = $c .label ss = 5 lda #0 sta.z sin_idx @@ -191,6 +196,11 @@ loop: { } // Initialize the multiplexer data structures plexInit: { + // PLEX_SCREEN_PTR = screen+0x3f8 + lda #SCREEN+$3f8 + sta.z PLEX_SCREEN_PTR+1 ldx #0 __b1: // PLEX_SORTED_IDX[i] = i @@ -213,9 +223,9 @@ plexInit: { // 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 = $c - .label nxt_y = $b - .label m = $a + .label nxt_idx = $e + .label nxt_y = $d + .label m = $c lda #0 sta.z m __b1: @@ -283,7 +293,7 @@ plexSort: { // Show the next sprite. // plexSort() prepares showing the sprites plexShowSprite: { - .label plex_sprite_idx2 = $c + .label plex_sprite_idx2 = $e // plex_sprite_idx2 = plex_sprite_idx*2 lda.z plex_sprite_idx asl @@ -313,8 +323,8 @@ plexShowSprite: { 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_sprite_idx + sta (PLEX_SCREEN_PTR),y // xpos_idx = PLEX_SORTED_IDX[plex_show_idx] ldy.z plex_show_idx lda PLEX_SORTED_IDX,y diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.cfg b/src/test/ref/examples/multiplexer/simple-multiplexer.cfg index 52fd51b0f..619cf49bc 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.cfg +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.cfg @@ -4,224 +4,225 @@ __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start - [1] plex_show_idx = 0 - [2] plex_sprite_idx = 0 - [3] plex_sprite_msb = 1 - [4] plex_free_next = 0 + [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 + [2] plex_show_idx = 0 + [3] plex_sprite_idx = 0 + [4] plex_sprite_msb = 1 + [5] plex_free_next = 0 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - [5] phi() - [6] call main + [6] phi() + [7] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [7] return + [8] return to:@return void main() main: scope:[main] from __start::@1 asm { sei } - [9] call init + [10] call init to:main::@1 main::@1: scope:[main] from main - [10] phi() - [11] call loop + [11] phi() + [12] call loop to:main::@return main::@return: scope:[main] from main::@1 - [12] return + [13] return to:@return void init() init: scope:[init] from main - [13] *D011 = VIC_DEN|VIC_RSEL|3 - [14] call plexInit + [14] *D011 = VIC_DEN|VIC_RSEL|3 + [15] call plexInit to:init::@1 init::@1: scope:[init] from init init::@1 - [15] init::xp#2 = phi( init::@1/init::xp#1, init/$20 ) - [15] init::sx#2 = phi( init::@1/init::sx#1, init/0 ) - [16] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 - [17] init::$3 = init::sx#2 << 1 - [18] PLEX_XPOS[init::$3] = init::xp#2 - [19] init::xp#1 = init::xp#2 + 9 - [20] init::sx#1 = ++ init::sx#2 - [21] if(init::sx#1!=PLEX_COUNT-1+1) goto init::@1 + [16] init::xp#2 = phi( init::@1/init::xp#1, init/$20 ) + [16] init::sx#2 = phi( init::@1/init::sx#1, init/0 ) + [17] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 + [18] init::$3 = init::sx#2 << 1 + [19] PLEX_XPOS[init::$3] = init::xp#2 + [20] init::xp#1 = init::xp#2 + 9 + [21] init::sx#1 = ++ init::sx#2 + [22] if(init::sx#1!=PLEX_COUNT-1+1) goto init::@1 to:init::@2 init::@2: scope:[init] from init::@1 - [22] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE) = $ff + [23] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE) = $ff to:init::@3 init::@3: scope:[init] from init::@2 init::@3 - [23] init::ss#2 = phi( init::@2/0, init::@3/init::ss#1 ) - [24] SPRITES_COLOR[init::ss#2] = GREEN - [25] init::ss#1 = ++ init::ss#2 - [26] if(init::ss#1!=8) goto init::@3 + [24] init::ss#2 = phi( init::@2/0, init::@3/init::ss#1 ) + [25] SPRITES_COLOR[init::ss#2] = GREEN + [26] init::ss#1 = ++ init::ss#2 + [27] if(init::ss#1!=8) goto init::@3 to:init::@return init::@return: scope:[init] from init::@3 - [27] return + [28] return to:@return void loop() loop: scope:[loop] from main::@1 - [28] phi() + [29] phi() to:loop::@1 loop::@1: scope:[loop] from loop loop::@10 - [29] loop::sin_idx#6 = phi( loop/0, loop::@10/loop::sin_idx#1 ) + [30] loop::sin_idx#6 = phi( loop/0, loop::@10/loop::sin_idx#1 ) to:loop::@2 loop::@2: scope:[loop] from loop::@1 loop::@2 - [30] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)!=$ff) goto loop::@2 + [31] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)!=$ff) goto loop::@2 to:loop::@3 loop::@3: scope:[loop] from loop::@2 - [31] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) - [32] loop::y_idx#3 = loop::sin_idx#6 + [32] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) + [33] loop::y_idx#3 = loop::sin_idx#6 to:loop::@4 loop::@4: scope:[loop] from loop::@3 loop::@4 - [33] loop::sy#2 = phi( loop::@3/0, loop::@4/loop::sy#1 ) - [33] loop::y_idx#2 = phi( loop::@3/loop::y_idx#3, loop::@4/loop::y_idx#1 ) - [34] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] - [35] loop::y_idx#1 = loop::y_idx#2 + 8 - [36] loop::sy#1 = ++ loop::sy#2 - [37] if(loop::sy#1!=PLEX_COUNT-1+1) goto loop::@4 + [34] loop::sy#2 = phi( loop::@3/0, loop::@4/loop::sy#1 ) + [34] loop::y_idx#2 = phi( loop::@3/loop::y_idx#3, loop::@4/loop::y_idx#1 ) + [35] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] + [36] loop::y_idx#1 = loop::y_idx#2 + 8 + [37] loop::sy#1 = ++ loop::sy#2 + [38] if(loop::sy#1!=PLEX_COUNT-1+1) goto loop::@4 to:loop::@5 loop::@5: scope:[loop] from loop::@4 - [38] loop::sin_idx#1 = loop::sin_idx#6 + 1 - [39] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) - [40] call plexSort + [39] loop::sin_idx#1 = loop::sin_idx#6 + 1 + [40] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) + [41] call plexSort to:loop::@11 loop::@11: scope:[loop] from loop::@5 - [41] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK + [42] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK to:loop::@6 loop::@6: scope:[loop] from loop::@11 loop::@6 - [42] loop::$5 = *D011 & VIC_RST8 - [43] if(loop::$5!=0) goto loop::@6 + [43] loop::$5 = *D011 & VIC_RST8 + [44] if(loop::$5!=0) goto loop::@6 to:loop::@7 loop::@7: scope:[loop] from loop::@12 loop::@6 - [44] loop::ss#5 = phi( loop::@12/loop::ss#1, loop::@6/0 ) - [45] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK + [45] loop::ss#5 = phi( loop::@12/loop::ss#1, loop::@6/0 ) + [46] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK to:loop::plexFreeNextYpos1 loop::plexFreeNextYpos1: scope:[loop] from loop::@7 - [46] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] + [47] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] to:loop::@8 loop::@8: scope:[loop] from loop::@8 loop::plexFreeNextYpos1 - [47] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 + [62] plexSort::m#2 = phi( plexSort/0, plexSort::@2/plexSort::m#1 ) + [63] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2] + [64] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] + [65] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 to:plexSort::@5 plexSort::@5: scope:[plexSort] from plexSort::@1 - [65] plexSort::s#6 = plexSort::m#2 + [66] plexSort::s#6 = plexSort::m#2 to:plexSort::@3 plexSort::@3: scope:[plexSort] from plexSort::@5 plexSort::@7 - [66] plexSort::s#3 = phi( plexSort::@7/plexSort::s#1, plexSort::@5/plexSort::s#6 ) - [67] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] - [68] plexSort::s#1 = -- plexSort::s#3 - [69] if(plexSort::s#1==$ff) goto plexSort::@4 + [67] plexSort::s#3 = phi( plexSort::@7/plexSort::s#1, plexSort::@5/plexSort::s#6 ) + [68] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] + [69] plexSort::s#1 = -- plexSort::s#3 + [70] if(plexSort::s#1==$ff) goto plexSort::@4 to:plexSort::@7 plexSort::@7: scope:[plexSort] from plexSort::@3 - [70] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] - [99] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 + [94] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] + [95] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] + [96] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 + [97] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] + [98] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 + [99] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] + [100] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 to:plexShowSprite::@3 plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@5 - [100] plexShowSprite::$9 = $ff ^ plex_sprite_msb - [101] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 + [101] plexShowSprite::$9 = $ff ^ plex_sprite_msb + [102] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 to:plexShowSprite::@2 plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3 - [102] plexShowSprite::$5 = plex_sprite_idx + 1 - [103] plexShowSprite::$6 = plexShowSprite::$5 & 7 - [104] plex_sprite_idx = plexShowSprite::$6 - [105] plex_show_idx = ++ plex_show_idx - [106] plex_sprite_msb = plex_sprite_msb << 1 - [107] if(plex_sprite_msb!=0) goto plexShowSprite::@return + [103] plexShowSprite::$5 = plex_sprite_idx + 1 + [104] plexShowSprite::$6 = plexShowSprite::$5 & 7 + [105] plex_sprite_idx = plexShowSprite::$6 + [106] plex_show_idx = ++ plex_show_idx + [107] plex_sprite_msb = plex_sprite_msb << 1 + [108] if(plex_sprite_msb!=0) goto plexShowSprite::@return to:plexShowSprite::@4 plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@2 - [108] plex_sprite_msb = 1 + [109] plex_sprite_msb = 1 to:plexShowSprite::@return plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4 - [109] return + [110] return to:@return plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5 - [110] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb + [111] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb to:plexShowSprite::@2 diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.log b/src/test/ref/examples/multiplexer/simple-multiplexer.log index d3a0b1fe6..b52a859f5 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.log +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.log @@ -15,14 +15,12 @@ plexInit: scope:[plexInit] from init plexInit::plexSetScreen1: scope:[plexInit] from plexInit plexInit::plexSetScreen1_screen#1 = phi( plexInit/plexInit::plexSetScreen1_screen#0 ) plexInit::plexSetScreen1_$0 = plexInit::plexSetScreen1_screen#1 + $3f8 - PLEX_SCREEN_PTR#0 = plexInit::plexSetScreen1_$0 + PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 to:plexInit::@2 plexInit::@2: scope:[plexInit] from plexInit::plexSetScreen1 - PLEX_SCREEN_PTR#24 = phi( plexInit::plexSetScreen1/PLEX_SCREEN_PTR#0 ) plexInit::i#0 = 0 to:plexInit::@1 plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::@2 - PLEX_SCREEN_PTR#17 = phi( plexInit::@1/PLEX_SCREEN_PTR#17, plexInit::@2/PLEX_SCREEN_PTR#24 ) plexInit::i#2 = phi( plexInit::@1/plexInit::i#1, plexInit::@2/plexInit::i#0 ) PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2 plexInit::i#1 = plexInit::i#2 + rangenext(0,PLEX_COUNT-1) @@ -30,8 +28,6 @@ plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::@2 if(plexInit::$1) goto plexInit::@1 to:plexInit::@return plexInit::@return: scope:[plexInit] from plexInit::@1 - PLEX_SCREEN_PTR#9 = phi( plexInit::@1/PLEX_SCREEN_PTR#17 ) - PLEX_SCREEN_PTR#1 = PLEX_SCREEN_PTR#9 return to:@return @@ -104,7 +100,6 @@ plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@2 void plexShowSprite() plexShowSprite: scope:[plexShowSprite] from loop::@10 - PLEX_SCREEN_PTR#25 = phi( loop::@10/PLEX_SCREEN_PTR#27 ) plexShowSprite::$0 = plex_sprite_idx * 2 plexShowSprite::plex_sprite_idx2#0 = plexShowSprite::$0 plexShowSprite::ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] @@ -113,7 +108,6 @@ plexShowSprite: scope:[plexShowSprite] from loop::@10 to:plexShowSprite::plexFreeAdd1 plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite plexShowSprite::plex_sprite_idx2#2 = phi( plexShowSprite/plexShowSprite::plex_sprite_idx2#0 ) - PLEX_SCREEN_PTR#18 = phi( plexShowSprite/PLEX_SCREEN_PTR#25 ) plexShowSprite::plexFreeAdd1_ypos#1 = phi( plexShowSprite/plexShowSprite::plexFreeAdd1_ypos#0 ) plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#1 + $15 PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 @@ -123,8 +117,7 @@ plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite to:plexShowSprite::@5 plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 plexShowSprite::plex_sprite_idx2#1 = phi( plexShowSprite::plexFreeAdd1/plexShowSprite::plex_sprite_idx2#2 ) - PLEX_SCREEN_PTR#10 = phi( plexShowSprite::plexFreeAdd1/PLEX_SCREEN_PTR#18 ) - PLEX_SCREEN_PTR#10[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] + PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] plexShowSprite::$10 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$10] @@ -160,39 +153,29 @@ plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexSho void main() main: scope:[main] from __start::@1 - PLEX_SCREEN_PTR#19 = phi( __start::@1/PLEX_SCREEN_PTR#23 ) asm { sei } call init to:main::@1 main::@1: scope:[main] from main - PLEX_SCREEN_PTR#11 = phi( main/PLEX_SCREEN_PTR#5 ) - PLEX_SCREEN_PTR#2 = PLEX_SCREEN_PTR#11 call loop to:main::@2 main::@2: scope:[main] from main::@1 - PLEX_SCREEN_PTR#20 = phi( main::@1/PLEX_SCREEN_PTR#2 ) to:main::@return main::@return: scope:[main] from main::@2 - PLEX_SCREEN_PTR#12 = phi( main::@2/PLEX_SCREEN_PTR#20 ) - PLEX_SCREEN_PTR#3 = PLEX_SCREEN_PTR#12 return to:@return void init() init: scope:[init] from main - PLEX_SCREEN_PTR#21 = phi( main/PLEX_SCREEN_PTR#19 ) *D011 = VIC_DEN|VIC_RSEL|3 plexInit::screen#0 = SCREEN call plexInit to:init::@4 init::@4: scope:[init] from init - PLEX_SCREEN_PTR#13 = phi( init/PLEX_SCREEN_PTR#1 ) - PLEX_SCREEN_PTR#4 = PLEX_SCREEN_PTR#13 init::xp#0 = $20 init::sx#0 = 0 to:init::@1 init::@1: scope:[init] from init::@1 init::@4 - PLEX_SCREEN_PTR#28 = phi( init::@1/PLEX_SCREEN_PTR#28, init::@4/PLEX_SCREEN_PTR#4 ) init::xp#2 = phi( init::@1/init::xp#1, init::@4/init::xp#0 ) init::sx#2 = phi( init::@1/init::sx#1, init::@4/init::sx#0 ) PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 @@ -204,12 +187,10 @@ init::@1: scope:[init] from init::@1 init::@4 if(init::$1) goto init::@1 to:init::@2 init::@2: scope:[init] from init::@1 - PLEX_SCREEN_PTR#26 = phi( init::@1/PLEX_SCREEN_PTR#28 ) *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE) = $ff init::ss#0 = 0 to:init::@3 init::@3: scope:[init] from init::@2 init::@3 - PLEX_SCREEN_PTR#22 = phi( init::@2/PLEX_SCREEN_PTR#26, init::@3/PLEX_SCREEN_PTR#22 ) init::ss#2 = phi( init::@2/init::ss#0, init::@3/init::ss#1 ) SPRITES_COLOR[init::ss#2] = GREEN init::ss#1 = init::ss#2 + rangenext(0,7) @@ -217,36 +198,29 @@ init::@3: scope:[init] from init::@2 init::@3 if(init::$2) goto init::@3 to:init::@return init::@return: scope:[init] from init::@3 - PLEX_SCREEN_PTR#14 = phi( init::@3/PLEX_SCREEN_PTR#22 ) - PLEX_SCREEN_PTR#5 = PLEX_SCREEN_PTR#14 return to:@return void loop() loop: scope:[loop] from main::@1 - PLEX_SCREEN_PTR#43 = phi( main::@1/PLEX_SCREEN_PTR#2 ) loop::sin_idx#0 = 0 to:loop::@1 loop::@1: scope:[loop] from loop loop::@11 - PLEX_SCREEN_PTR#42 = phi( loop/PLEX_SCREEN_PTR#43, loop::@11/PLEX_SCREEN_PTR#44 ) loop::sin_idx#6 = phi( loop/loop::sin_idx#0, loop::@11/loop::sin_idx#7 ) if(true) goto loop::@2 to:loop::@return loop::@2: scope:[loop] from loop::@1 loop::@2 - PLEX_SCREEN_PTR#41 = phi( loop::@1/PLEX_SCREEN_PTR#42, loop::@2/PLEX_SCREEN_PTR#41 ) loop::sin_idx#4 = phi( loop::@1/loop::sin_idx#6, loop::@2/loop::sin_idx#4 ) loop::$0 = *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) != $ff if(loop::$0) goto loop::@2 to:loop::@3 loop::@3: scope:[loop] from loop::@2 - PLEX_SCREEN_PTR#40 = phi( loop::@2/PLEX_SCREEN_PTR#41 ) loop::sin_idx#2 = phi( loop::@2/loop::sin_idx#4 ) *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) loop::y_idx#0 = loop::sin_idx#2 loop::sy#0 = 0 to:loop::@4 loop::@4: scope:[loop] from loop::@3 loop::@4 - PLEX_SCREEN_PTR#39 = phi( loop::@3/PLEX_SCREEN_PTR#40, loop::@4/PLEX_SCREEN_PTR#39 ) loop::sin_idx#5 = phi( loop::@3/loop::sin_idx#2, loop::@4/loop::sin_idx#5 ) loop::sy#2 = phi( loop::@3/loop::sy#0, loop::@4/loop::sy#1 ) loop::y_idx#2 = phi( loop::@3/loop::y_idx#0, loop::@4/loop::y_idx#1 ) @@ -257,7 +231,6 @@ loop::@4: scope:[loop] from loop::@3 loop::@4 if(loop::$2) goto loop::@4 to:loop::@5 loop::@5: scope:[loop] from loop::@4 - PLEX_SCREEN_PTR#38 = phi( loop::@4/PLEX_SCREEN_PTR#39 ) loop::sin_idx#3 = phi( loop::@4/loop::sin_idx#5 ) loop::sin_idx#1 = loop::sin_idx#3 + 1 *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) @@ -265,43 +238,36 @@ loop::@5: scope:[loop] from loop::@4 to:loop::@13 loop::@13: scope:[loop] from loop::@5 loop::sin_idx#17 = phi( loop::@5/loop::sin_idx#1 ) - PLEX_SCREEN_PTR#37 = phi( loop::@5/PLEX_SCREEN_PTR#38 ) *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK to:loop::@6 loop::@6: scope:[loop] from loop::@13 loop::@6 loop::sin_idx#16 = phi( loop::@13/loop::sin_idx#17, loop::@6/loop::sin_idx#16 ) - PLEX_SCREEN_PTR#36 = phi( loop::@13/PLEX_SCREEN_PTR#37, loop::@6/PLEX_SCREEN_PTR#36 ) loop::$5 = *D011 & VIC_RST8 loop::$6 = loop::$5 != 0 if(loop::$6) goto loop::@6 to:loop::@7 loop::@7: scope:[loop] from loop::@6 loop::sin_idx#15 = phi( loop::@6/loop::sin_idx#16 ) - PLEX_SCREEN_PTR#35 = phi( loop::@6/PLEX_SCREEN_PTR#36 ) loop::ss#0 = 0 to:loop::@8 loop::@8: scope:[loop] from loop::@14 loop::@7 loop::sin_idx#14 = phi( loop::@14/loop::sin_idx#8, loop::@7/loop::sin_idx#15 ) - PLEX_SCREEN_PTR#33 = phi( loop::@14/PLEX_SCREEN_PTR#34, loop::@7/PLEX_SCREEN_PTR#35 ) loop::ss#8 = phi( loop::@14/loop::ss#1, loop::@7/loop::ss#0 ) *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK to:loop::plexFreeNextYpos1 loop::plexFreeNextYpos1: scope:[loop] from loop::@8 loop::sin_idx#13 = phi( loop::@8/loop::sin_idx#14 ) - PLEX_SCREEN_PTR#32 = phi( loop::@8/PLEX_SCREEN_PTR#33 ) loop::ss#7 = phi( loop::@8/loop::ss#8 ) loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] to:loop::plexFreeNextYpos1_@return loop::plexFreeNextYpos1_@return: scope:[loop] from loop::plexFreeNextYpos1 loop::sin_idx#12 = phi( loop::plexFreeNextYpos1/loop::sin_idx#13 ) - PLEX_SCREEN_PTR#31 = phi( loop::plexFreeNextYpos1/PLEX_SCREEN_PTR#32 ) loop::ss#6 = phi( loop::plexFreeNextYpos1/loop::ss#7 ) loop::plexFreeNextYpos1_return#2 = phi( loop::plexFreeNextYpos1/loop::plexFreeNextYpos1_return#0 ) loop::plexFreeNextYpos1_return#1 = loop::plexFreeNextYpos1_return#2 to:loop::@12 loop::@12: scope:[loop] from loop::plexFreeNextYpos1_@return loop::sin_idx#11 = phi( loop::plexFreeNextYpos1_@return/loop::sin_idx#12 ) - PLEX_SCREEN_PTR#30 = phi( loop::plexFreeNextYpos1_@return/PLEX_SCREEN_PTR#31 ) loop::ss#5 = phi( loop::plexFreeNextYpos1_@return/loop::ss#6 ) loop::plexFreeNextYpos1_return#3 = phi( loop::plexFreeNextYpos1_@return/loop::plexFreeNextYpos1_return#1 ) loop::$7 = loop::plexFreeNextYpos1_return#3 @@ -309,7 +275,6 @@ loop::@12: scope:[loop] from loop::plexFreeNextYpos1_@return to:loop::@9 loop::@9: scope:[loop] from loop::@12 loop::@9 loop::sin_idx#10 = phi( loop::@12/loop::sin_idx#11, loop::@9/loop::sin_idx#10 ) - PLEX_SCREEN_PTR#29 = phi( loop::@12/PLEX_SCREEN_PTR#30, loop::@9/PLEX_SCREEN_PTR#29 ) loop::ss#4 = phi( loop::@12/loop::ss#5, loop::@9/loop::ss#4 ) loop::rasterY#1 = phi( loop::@12/loop::rasterY#0, loop::@9/loop::rasterY#1 ) loop::$8 = *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) < loop::rasterY#1 @@ -317,13 +282,11 @@ loop::@9: scope:[loop] from loop::@12 loop::@9 to:loop::@10 loop::@10: scope:[loop] from loop::@9 loop::sin_idx#9 = phi( loop::@9/loop::sin_idx#10 ) - PLEX_SCREEN_PTR#27 = phi( loop::@9/PLEX_SCREEN_PTR#29 ) loop::ss#3 = phi( loop::@9/loop::ss#4 ) *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) call plexShowSprite to:loop::@14 loop::@14: scope:[loop] from loop::@10 - PLEX_SCREEN_PTR#34 = phi( loop::@10/PLEX_SCREEN_PTR#27 ) loop::sin_idx#8 = phi( loop::@10/loop::sin_idx#9 ) loop::ss#2 = phi( loop::@10/loop::ss#3 ) loop::ss#1 = loop::ss#2 + rangenext(0,PLEX_COUNT-1) @@ -331,7 +294,6 @@ loop::@14: scope:[loop] from loop::@10 if(loop::$11) goto loop::@8 to:loop::@11 loop::@11: scope:[loop] from loop::@14 - PLEX_SCREEN_PTR#44 = phi( loop::@14/PLEX_SCREEN_PTR#34 ) loop::sin_idx#7 = phi( loop::@14/loop::sin_idx#8 ) *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK to:loop::@1 @@ -343,23 +305,18 @@ void __start() __start: scope:[__start] from to:__start::__init1 __start::__init1: scope:[__start] from __start - PLEX_SCREEN_PTR#6 = (byte*)$400+$3f8 + PLEX_SCREEN_PTR = (byte*)$400+$3f8 plex_show_idx = 0 plex_sprite_idx = 0 plex_sprite_msb = 1 plex_free_next = 0 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - PLEX_SCREEN_PTR#23 = phi( __start::__init1/PLEX_SCREEN_PTR#6 ) call main to:__start::@2 __start::@2: scope:[__start] from __start::@1 - PLEX_SCREEN_PTR#15 = phi( __start::@1/PLEX_SCREEN_PTR#3 ) - PLEX_SCREEN_PTR#7 = PLEX_SCREEN_PTR#15 to:__start::@return __start::@return: scope:[__start] from __start::@2 - PLEX_SCREEN_PTR#16 = phi( __start::@2/PLEX_SCREEN_PTR#7 ) - PLEX_SCREEN_PTR#8 = PLEX_SCREEN_PTR#16 return to:@return @@ -373,52 +330,7 @@ const byte OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE = $15 const nomodify byte PLEX_COUNT = $20 const byte* PLEX_FREE_YPOS[8] = { fill( 8, 0) } const byte* PLEX_PTR[PLEX_COUNT] = { 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#5 -byte* PLEX_SCREEN_PTR#6 -byte* PLEX_SCREEN_PTR#7 -byte* PLEX_SCREEN_PTR#8 -byte* PLEX_SCREEN_PTR#9 +volatile byte* PLEX_SCREEN_PTR loadstore const byte* PLEX_SORTED_IDX[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const word* PLEX_XPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const byte* PLEX_YPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -733,14 +645,13 @@ Inferred type updated to byte in plexShowSprite::plexFreeAdd1_$2 = plexShowSprit Inferred type updated to byte in plexShowSprite::$9 = $ff ^ plex_sprite_msb Inferred type updated to byte in plexShowSprite::$5 = plex_sprite_idx + 1 Inferred type updated to byte in plexShowSprite::$6 = plexShowSprite::$5 & 7 -Inversing boolean not [21] plexSort::$3 = plexSort::nxt_y#0 >= PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] from [20] plexSort::$2 = plexSort::nxt_y#0 < PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] -Inversing boolean not [82] plexShowSprite::$8 = plex_sprite_msb != 0 from [81] plexShowSprite::$7 = plex_sprite_msb == 0 +Inversing boolean not [18] plexSort::$3 = plexSort::nxt_y#0 >= PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] from [17] plexSort::$2 = plexSort::nxt_y#0 < PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] +Inversing boolean not [78] plexShowSprite::$8 = plex_sprite_msb != 0 from [77] plexShowSprite::$7 = plex_sprite_msb == 0 Successful SSA optimization Pass2UnaryNotSimplification +Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Alias plexInit::plexSetScreen1_screen#0 = plexInit::screen#1 plexInit::plexSetScreen1_screen#1 -Alias PLEX_SCREEN_PTR#0 = plexInit::plexSetScreen1_$0 PLEX_SCREEN_PTR#24 -Alias PLEX_SCREEN_PTR#1 = PLEX_SCREEN_PTR#9 PLEX_SCREEN_PTR#17 Alias plexSort::m#2 = plexSort::m#4 plexSort::s#0 Alias plexSort::nxt_y#0 = plexSort::nxt_y#2 Alias plexSort::nxt_idx#0 = plexSort::nxt_idx#3 @@ -749,78 +660,50 @@ Alias plexSort::nxt_idx#1 = plexSort::nxt_idx#2 Alias plexSort::m#5 = plexSort::m#6 Alias plexShowSprite::plex_sprite_idx2#0 = plexShowSprite::$0 plexShowSprite::plex_sprite_idx2#2 plexShowSprite::plex_sprite_idx2#1 Alias plexShowSprite::plexFreeAdd1_ypos#0 = plexShowSprite::ypos#0 plexShowSprite::plexFreeAdd1_ypos#1 -Alias PLEX_SCREEN_PTR#10 = PLEX_SCREEN_PTR#18 PLEX_SCREEN_PTR#25 -Alias PLEX_SCREEN_PTR#11 = PLEX_SCREEN_PTR#2 PLEX_SCREEN_PTR#20 PLEX_SCREEN_PTR#12 PLEX_SCREEN_PTR#3 -Alias PLEX_SCREEN_PTR#13 = PLEX_SCREEN_PTR#4 -Alias PLEX_SCREEN_PTR#26 = PLEX_SCREEN_PTR#28 -Alias PLEX_SCREEN_PTR#14 = PLEX_SCREEN_PTR#22 PLEX_SCREEN_PTR#5 Alias loop::sin_idx#2 = loop::sin_idx#4 loop::y_idx#0 -Alias PLEX_SCREEN_PTR#40 = PLEX_SCREEN_PTR#41 Alias loop::sin_idx#3 = loop::sin_idx#5 -Alias PLEX_SCREEN_PTR#37 = PLEX_SCREEN_PTR#38 PLEX_SCREEN_PTR#39 Alias loop::sin_idx#1 = loop::sin_idx#17 -Alias PLEX_SCREEN_PTR#35 = PLEX_SCREEN_PTR#36 Alias loop::sin_idx#15 = loop::sin_idx#16 Alias loop::ss#5 = loop::ss#7 loop::ss#8 loop::ss#6 -Alias PLEX_SCREEN_PTR#30 = PLEX_SCREEN_PTR#32 PLEX_SCREEN_PTR#33 PLEX_SCREEN_PTR#31 Alias loop::sin_idx#11 = loop::sin_idx#13 loop::sin_idx#14 loop::sin_idx#12 Alias loop::plexFreeNextYpos1_return#0 = loop::plexFreeNextYpos1_return#2 loop::plexFreeNextYpos1_return#1 loop::plexFreeNextYpos1_return#3 loop::$7 loop::rasterY#0 Alias loop::ss#2 = loop::ss#3 loop::ss#4 -Alias PLEX_SCREEN_PTR#27 = PLEX_SCREEN_PTR#29 PLEX_SCREEN_PTR#34 PLEX_SCREEN_PTR#44 Alias loop::sin_idx#10 = loop::sin_idx#9 loop::sin_idx#8 loop::sin_idx#7 -Alias PLEX_SCREEN_PTR#23 = PLEX_SCREEN_PTR#6 -Alias PLEX_SCREEN_PTR#15 = PLEX_SCREEN_PTR#7 PLEX_SCREEN_PTR#16 PLEX_SCREEN_PTR#8 Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Identical Phi Values plexInit::plexSetScreen1_screen#0 plexInit::screen#0 -Identical Phi Values PLEX_SCREEN_PTR#1 PLEX_SCREEN_PTR#0 Identical Phi Values plexSort::nxt_y#1 plexSort::nxt_y#0 Identical Phi Values plexSort::nxt_idx#1 plexSort::nxt_idx#0 Identical Phi Values plexSort::m#5 plexSort::m#2 -Identical Phi Values PLEX_SCREEN_PTR#10 PLEX_SCREEN_PTR#27 -Identical Phi Values PLEX_SCREEN_PTR#19 PLEX_SCREEN_PTR#23 -Identical Phi Values PLEX_SCREEN_PTR#11 PLEX_SCREEN_PTR#14 -Identical Phi Values PLEX_SCREEN_PTR#21 PLEX_SCREEN_PTR#19 -Identical Phi Values PLEX_SCREEN_PTR#13 PLEX_SCREEN_PTR#1 -Identical Phi Values PLEX_SCREEN_PTR#26 PLEX_SCREEN_PTR#13 -Identical Phi Values PLEX_SCREEN_PTR#14 PLEX_SCREEN_PTR#26 -Identical Phi Values PLEX_SCREEN_PTR#43 PLEX_SCREEN_PTR#11 Identical Phi Values loop::sin_idx#2 loop::sin_idx#6 -Identical Phi Values PLEX_SCREEN_PTR#40 PLEX_SCREEN_PTR#42 Identical Phi Values loop::sin_idx#3 loop::sin_idx#2 -Identical Phi Values PLEX_SCREEN_PTR#37 PLEX_SCREEN_PTR#40 -Identical Phi Values PLEX_SCREEN_PTR#35 PLEX_SCREEN_PTR#37 Identical Phi Values loop::sin_idx#15 loop::sin_idx#1 Identical Phi Values loop::rasterY#1 loop::plexFreeNextYpos1_return#0 Identical Phi Values loop::ss#2 loop::ss#5 -Identical Phi Values PLEX_SCREEN_PTR#27 PLEX_SCREEN_PTR#30 Identical Phi Values loop::sin_idx#10 loop::sin_idx#11 -Identical Phi Values PLEX_SCREEN_PTR#15 PLEX_SCREEN_PTR#11 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values plexSort::m#3 plexSort::m#2 -Identical Phi Values PLEX_SCREEN_PTR#30 PLEX_SCREEN_PTR#42 Identical Phi Values loop::sin_idx#11 loop::sin_idx#1 Successful SSA optimization Pass2IdenticalPhiElimination -Identical Phi Values PLEX_SCREEN_PTR#42 PLEX_SCREEN_PTR#0 -Successful SSA optimization Pass2IdenticalPhiElimination -Identified duplicate assignment right side [69] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD +Identified duplicate assignment right side [65] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD Successful SSA optimization Pass2DuplicateRValueIdentification -Simple Condition plexInit::$1 [7] if(plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 -Simple Condition plexSort::$3 [15] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 -Simple Condition plexSort::$8 [19] if(plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1 -Simple Condition plexSort::plexFreePrepare1_$0 [38] if(plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 +Simple Condition plexInit::$1 [8] if(plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 +Simple Condition plexSort::$3 [16] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 +Simple Condition plexSort::$8 [20] if(plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1 +Simple Condition plexSort::plexFreePrepare1_$0 [39] if(plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 Simple Condition plexShowSprite::$4 [58] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 Simple Condition plexShowSprite::$8 [68] if(plex_sprite_msb!=0) goto plexShowSprite::@return -Simple Condition init::$1 [91] if(init::sx#1!=rangelast(0,PLEX_COUNT-1)) goto init::@1 -Simple Condition init::$2 [98] if(init::ss#1!=rangelast(0,7)) goto init::@3 -Simple Condition loop::$0 [106] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)!=$ff) goto loop::@2 -Simple Condition loop::$2 [114] if(loop::sy#1!=rangelast(0,PLEX_COUNT-1)) goto loop::@4 -Simple Condition loop::$6 [122] if(loop::$5!=0) goto loop::@6 -Simple Condition loop::$8 [129] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 + [62] plexSort::m#2 = phi( plexSort/0, plexSort::@2/plexSort::m#1 ) + [63] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2] + [64] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] + [65] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 to:plexSort::@5 plexSort::@5: scope:[plexSort] from plexSort::@1 - [65] plexSort::s#6 = plexSort::m#2 + [66] plexSort::s#6 = plexSort::m#2 to:plexSort::@3 plexSort::@3: scope:[plexSort] from plexSort::@5 plexSort::@7 - [66] plexSort::s#3 = phi( plexSort::@7/plexSort::s#1, plexSort::@5/plexSort::s#6 ) - [67] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] - [68] plexSort::s#1 = -- plexSort::s#3 - [69] if(plexSort::s#1==$ff) goto plexSort::@4 + [67] plexSort::s#3 = phi( plexSort::@7/plexSort::s#1, plexSort::@5/plexSort::s#6 ) + [68] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] + [69] plexSort::s#1 = -- plexSort::s#3 + [70] if(plexSort::s#1==$ff) goto plexSort::@4 to:plexSort::@7 plexSort::@7: scope:[plexSort] from plexSort::@3 - [70] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] - [99] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 + [94] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] + [95] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] + [96] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 + [97] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] + [98] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 + [99] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] + [100] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 to:plexShowSprite::@3 plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@5 - [100] plexShowSprite::$9 = $ff ^ plex_sprite_msb - [101] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 + [101] plexShowSprite::$9 = $ff ^ plex_sprite_msb + [102] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 to:plexShowSprite::@2 plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3 - [102] plexShowSprite::$5 = plex_sprite_idx + 1 - [103] plexShowSprite::$6 = plexShowSprite::$5 & 7 - [104] plex_sprite_idx = plexShowSprite::$6 - [105] plex_show_idx = ++ plex_show_idx - [106] plex_sprite_msb = plex_sprite_msb << 1 - [107] if(plex_sprite_msb!=0) goto plexShowSprite::@return + [103] plexShowSprite::$5 = plex_sprite_idx + 1 + [104] plexShowSprite::$6 = plexShowSprite::$5 & 7 + [105] plex_sprite_idx = plexShowSprite::$6 + [106] plex_show_idx = ++ plex_show_idx + [107] plex_sprite_msb = plex_sprite_msb << 1 + [108] if(plex_sprite_msb!=0) goto plexShowSprite::@return to:plexShowSprite::@4 plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@2 - [108] plex_sprite_msb = 1 + [109] plex_sprite_msb = 1 to:plexShowSprite::@return plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4 - [109] return + [110] return to:@return plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5 - [110] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb + [111] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb to:plexShowSprite::@2 VARIABLE REGISTER WEIGHTS -byte* PLEX_SCREEN_PTR +volatile byte* PLEX_SCREEN_PTR loadstore 1383.6164383561643 void __start() void init() byte~ init::$3 2002.0 @@ -1336,6 +1218,7 @@ Initial phi equivalence classes [ plexSort::m#2 plexSort::m#1 ] [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +Added variable PLEX_SCREEN_PTR to live range equivalence class [ PLEX_SCREEN_PTR ] Added variable plex_show_idx to live range equivalence class [ plex_show_idx ] Added variable plex_sprite_idx to live range equivalence class [ plex_sprite_idx ] Added variable plex_sprite_msb to live range equivalence class [ plex_sprite_msb ] @@ -1370,6 +1253,7 @@ Complete equivalence classes [ plexSort::m#2 plexSort::m#1 ] [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +[ PLEX_SCREEN_PTR ] [ plex_show_idx ] [ plex_sprite_idx ] [ plex_sprite_msb ] @@ -1403,179 +1287,186 @@ Allocated zp[1]:10 [ plexInit::i#2 plexInit::i#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 [ plex_show_idx ] -Allocated zp[1]:15 [ plex_sprite_idx ] -Allocated zp[1]:16 [ plex_sprite_msb ] -Allocated zp[1]:17 [ plex_free_next ] -Allocated zp[1]:18 [ init::$3 ] -Allocated zp[1]:19 [ loop::$5 ] -Allocated zp[1]:20 [ loop::plexFreeNextYpos1_return#0 ] -Allocated zp[1]:21 [ plexSort::nxt_idx#0 ] -Allocated zp[1]:22 [ plexSort::nxt_y#0 ] -Allocated zp[1]:23 [ plexSort::s#2 ] -Allocated zp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] -Allocated zp[1]:25 [ plexShowSprite::plexFreeAdd1_ypos#0 ] -Allocated zp[1]:26 [ plexShowSprite::plexFreeAdd1_$0 ] -Allocated zp[1]:27 [ plexShowSprite::plexFreeAdd1_$1 ] -Allocated zp[1]:28 [ plexShowSprite::plexFreeAdd1_$2 ] -Allocated zp[1]:29 [ plexShowSprite::xpos_idx#0 ] -Allocated zp[1]:30 [ plexShowSprite::$11 ] -Allocated zp[1]:31 [ plexShowSprite::$2 ] -Allocated zp[1]:32 [ plexShowSprite::$3 ] -Allocated zp[1]:33 [ plexShowSprite::$9 ] -Allocated zp[1]:34 [ plexShowSprite::$5 ] -Allocated zp[1]:35 [ plexShowSprite::$6 ] +Allocated zp[2]:14 [ PLEX_SCREEN_PTR ] +Allocated zp[1]:16 [ plex_show_idx ] +Allocated zp[1]:17 [ plex_sprite_idx ] +Allocated zp[1]:18 [ plex_sprite_msb ] +Allocated zp[1]:19 [ plex_free_next ] +Allocated zp[1]:20 [ init::$3 ] +Allocated zp[1]:21 [ loop::$5 ] +Allocated zp[1]:22 [ loop::plexFreeNextYpos1_return#0 ] +Allocated zp[1]:23 [ plexSort::nxt_idx#0 ] +Allocated zp[1]:24 [ plexSort::nxt_y#0 ] +Allocated zp[1]:25 [ plexSort::s#2 ] +Allocated zp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ] +Allocated zp[1]:27 [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Allocated zp[1]:28 [ plexShowSprite::plexFreeAdd1_$0 ] +Allocated zp[1]:29 [ plexShowSprite::plexFreeAdd1_$1 ] +Allocated zp[1]:30 [ plexShowSprite::plexFreeAdd1_$2 ] +Allocated zp[1]:31 [ plexShowSprite::xpos_idx#0 ] +Allocated zp[1]:32 [ plexShowSprite::$11 ] +Allocated zp[1]:33 [ plexShowSprite::$2 ] +Allocated zp[1]:34 [ plexShowSprite::$3 ] +Allocated zp[1]:35 [ plexShowSprite::$9 ] +Allocated zp[1]:36 [ plexShowSprite::$5 ] +Allocated zp[1]:37 [ plexShowSprite::$6 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [3] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [4] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [13] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:6::init:9 [ ] { } ) always clobbers reg byte a -Statement [16] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 [ init::sx#2 init::xp#2 ] ( main:6::init:9 [ init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a +Statement [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [3] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [4] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [14] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:7::init:10 [ ] { } ) always clobbers reg byte a +Statement [17] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ init::sx#2 init::sx#1 ] -Statement [17] init::$3 = init::sx#2 << 1 [ init::sx#2 init::xp#2 init::$3 ] ( main:6::init:9 [ init::sx#2 init::xp#2 init::$3 ] { } ) always clobbers reg byte a -Statement [18] PLEX_XPOS[init::$3] = init::xp#2 [ init::sx#2 init::xp#2 ] ( main:6::init:9 [ init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a -Statement [19] init::xp#1 = init::xp#2 + 9 [ init::sx#2 init::xp#1 ] ( main:6::init:9 [ init::sx#2 init::xp#1 ] { } ) always clobbers reg byte a -Statement [22] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE) = $ff [ ] ( main:6::init:9 [ ] { } ) always clobbers reg byte a -Statement [24] SPRITES_COLOR[init::ss#2] = GREEN [ init::ss#2 ] ( main:6::init:9 [ init::ss#2 ] { } ) always clobbers reg byte a +Statement [18] init::$3 = init::sx#2 << 1 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 init::$3 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 init::$3 ] { } ) always clobbers reg byte a +Statement [19] PLEX_XPOS[init::$3] = init::xp#2 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a +Statement [20] init::xp#1 = init::xp#2 + 9 [ PLEX_SCREEN_PTR init::sx#2 init::xp#1 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::sx#2 init::xp#1 ] { } ) always clobbers reg byte a +Statement [23] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE) = $ff [ PLEX_SCREEN_PTR ] ( main:7::init:10 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [25] SPRITES_COLOR[init::ss#2] = GREEN [ PLEX_SCREEN_PTR init::ss#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::ss#2 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:5 [ init::ss#2 init::ss#1 ] -Statement [30] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)!=$ff) goto loop::@2 [ loop::sin_idx#6 ] ( main:6::loop:11 [ loop::sin_idx#6 ] { } ) always clobbers reg byte a +Statement [31] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)!=$ff) goto loop::@2 [ PLEX_SCREEN_PTR loop::sin_idx#6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::sin_idx#6 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] -Statement [34] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:6::loop:11 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] { } ) always clobbers reg byte a +Statement [35] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] [ PLEX_SCREEN_PTR loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:7 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] Removing always clobbered register reg byte a as potential for zp[1]:8 [ loop::sy#2 loop::sy#1 ] -Statement [35] loop::y_idx#1 = loop::y_idx#2 + 8 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:6::loop:11 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] { } ) always clobbers reg byte a -Statement [41] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 ] { } ) always clobbers reg byte a -Statement [42] loop::$5 = *D011 & VIC_RST8 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::$5 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::$5 ] { } ) always clobbers reg byte a -Statement [45] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 ] { } ) always clobbers reg byte a +Statement [36] loop::y_idx#1 = loop::y_idx#2 + 8 [ PLEX_SCREEN_PTR loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] { } ) always clobbers reg byte a +Statement [42] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 ] { } ) always clobbers reg byte a +Statement [43] loop::$5 = *D011 & VIC_RST8 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::$5 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::$5 ] { } ) always clobbers reg byte a +Statement [46] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:9 [ loop::ss#5 loop::ss#1 ] -Statement [46] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 loop::plexFreeNextYpos1_return#0 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 loop::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y +Statement [47] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 loop::plexFreeNextYpos1_return#0 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 loop::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] Removing always clobbered register reg byte y as potential for zp[1]:9 [ loop::ss#5 loop::ss#1 ] -Statement [52] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ loop::sin_idx#1 ] ( main:6::loop:11 [ loop::sin_idx#1 ] { } ) always clobbers reg byte a -Statement [67] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:6::loop:11::plexSort:40 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a +Statement [53] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ PLEX_SCREEN_PTR loop::sin_idx#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::sin_idx#1 ] { } ) always clobbers reg byte a +Statement [55] PLEX_SCREEN_PTR = SCREEN+$3f8 [ PLEX_SCREEN_PTR ] ( main:7::init:10::plexInit:15 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [68] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:7::loop:12::plexSort:41 [ PLEX_SCREEN_PTR loop::sin_idx#1 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]:21 [ plexSort::nxt_idx#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:22 [ plexSort::nxt_y#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:23 [ plexSort::nxt_idx#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:24 [ 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 [70] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [100] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [101] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [107] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [108] plex_sprite_msb = 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [110] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [1] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [3] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [4] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [13] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:6::init:9 [ ] { } ) always clobbers reg byte a -Statement [16] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 [ init::sx#2 init::xp#2 ] ( main:6::init:9 [ init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a -Statement [17] init::$3 = init::sx#2 << 1 [ init::sx#2 init::xp#2 init::$3 ] ( main:6::init:9 [ init::sx#2 init::xp#2 init::$3 ] { } ) always clobbers reg byte a -Statement [18] PLEX_XPOS[init::$3] = init::xp#2 [ init::sx#2 init::xp#2 ] ( main:6::init:9 [ init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a -Statement [19] init::xp#1 = init::xp#2 + 9 [ init::sx#2 init::xp#1 ] ( main:6::init:9 [ init::sx#2 init::xp#1 ] { } ) always clobbers reg byte a -Statement [22] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE) = $ff [ ] ( main:6::init:9 [ ] { } ) always clobbers reg byte a -Statement [24] SPRITES_COLOR[init::ss#2] = GREEN [ init::ss#2 ] ( main:6::init:9 [ init::ss#2 ] { } ) always clobbers reg byte a -Statement [30] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)!=$ff) goto loop::@2 [ loop::sin_idx#6 ] ( main:6::loop:11 [ loop::sin_idx#6 ] { } ) always clobbers reg byte a -Statement [34] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:6::loop:11 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] { } ) always clobbers reg byte a -Statement [35] loop::y_idx#1 = loop::y_idx#2 + 8 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:6::loop:11 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] { } ) always clobbers reg byte a -Statement [41] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 ] { } ) always clobbers reg byte a -Statement [42] loop::$5 = *D011 & VIC_RST8 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::$5 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::$5 ] { } ) always clobbers reg byte a -Statement [45] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 ] { } ) always clobbers reg byte a -Statement [46] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 loop::plexFreeNextYpos1_return#0 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 loop::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y -Statement [51] if(loop::ss#1!=PLEX_COUNT-1+1) goto loop::@7 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#1 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#1 ] { } ) always clobbers reg byte a -Statement [52] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ loop::sin_idx#1 ] ( main:6::loop:11 [ loop::sin_idx#1 ] { } ) always clobbers reg byte a -Statement [64] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:6::loop:11::plexSort:40 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a -Statement [67] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:6::loop:11::plexSort:40 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a -Statement [70] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [100] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [101] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [107] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [108] plex_sprite_msb = 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [110] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [1] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [3] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [4] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [13] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:6::init:9 [ ] { } ) always clobbers reg byte a -Statement [16] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 [ init::sx#2 init::xp#2 ] ( main:6::init:9 [ init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a -Statement [17] init::$3 = init::sx#2 << 1 [ init::sx#2 init::xp#2 init::$3 ] ( main:6::init:9 [ init::sx#2 init::xp#2 init::$3 ] { } ) always clobbers reg byte a -Statement [18] PLEX_XPOS[init::$3] = init::xp#2 [ init::sx#2 init::xp#2 ] ( main:6::init:9 [ init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a -Statement [19] init::xp#1 = init::xp#2 + 9 [ init::sx#2 init::xp#1 ] ( main:6::init:9 [ init::sx#2 init::xp#1 ] { } ) always clobbers reg byte a -Statement [22] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE) = $ff [ ] ( main:6::init:9 [ ] { } ) always clobbers reg byte a -Statement [24] SPRITES_COLOR[init::ss#2] = GREEN [ init::ss#2 ] ( main:6::init:9 [ init::ss#2 ] { } ) always clobbers reg byte a -Statement [30] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)!=$ff) goto loop::@2 [ loop::sin_idx#6 ] ( main:6::loop:11 [ loop::sin_idx#6 ] { } ) always clobbers reg byte a -Statement [34] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:6::loop:11 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] { } ) always clobbers reg byte a -Statement [35] loop::y_idx#1 = loop::y_idx#2 + 8 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:6::loop:11 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] { } ) always clobbers reg byte a -Statement [41] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 ] { } ) always clobbers reg byte a -Statement [42] loop::$5 = *D011 & VIC_RST8 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::$5 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::$5 ] { } ) always clobbers reg byte a -Statement [45] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 ] { } ) always clobbers reg byte a -Statement [46] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 loop::plexFreeNextYpos1_return#0 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 loop::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y -Statement [51] if(loop::ss#1!=PLEX_COUNT-1+1) goto loop::@7 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#1 ] ( main:6::loop:11 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#1 ] { } ) always clobbers reg byte a -Statement [52] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ loop::sin_idx#1 ] ( main:6::loop:11 [ loop::sin_idx#1 ] { } ) always clobbers reg byte a -Statement [64] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:6::loop:11::plexSort:40 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a -Statement [67] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:6::loop:11::plexSort:40 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a -Statement [70] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [100] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [101] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [107] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [108] plex_sprite_msb = 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [110] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:6::loop:11::plexShowSprite:49 [ loop::sin_idx#1 loop::ss#5 plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte x as potential for zp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ] +Statement [90] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte y +Statement [94] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte a as potential for zp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ] +Statement [95] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] { } ) always clobbers reg byte y +Statement [96] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] { } ) always clobbers reg byte a +Statement [97] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next 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]:32 [ plexShowSprite::$11 ] +Statement [98] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] { } ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:32 [ plexShowSprite::$11 ] +Statement [99] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [101] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [102] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [108] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [109] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [111] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [3] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [4] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [14] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:7::init:10 [ ] { } ) always clobbers reg byte a +Statement [17] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a +Statement [18] init::$3 = init::sx#2 << 1 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 init::$3 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 init::$3 ] { } ) always clobbers reg byte a +Statement [19] PLEX_XPOS[init::$3] = init::xp#2 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a +Statement [20] init::xp#1 = init::xp#2 + 9 [ PLEX_SCREEN_PTR init::sx#2 init::xp#1 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::sx#2 init::xp#1 ] { } ) always clobbers reg byte a +Statement [23] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE) = $ff [ PLEX_SCREEN_PTR ] ( main:7::init:10 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [25] SPRITES_COLOR[init::ss#2] = GREEN [ PLEX_SCREEN_PTR init::ss#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::ss#2 ] { } ) always clobbers reg byte a +Statement [31] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)!=$ff) goto loop::@2 [ PLEX_SCREEN_PTR loop::sin_idx#6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::sin_idx#6 ] { } ) always clobbers reg byte a +Statement [35] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] [ PLEX_SCREEN_PTR loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] { } ) always clobbers reg byte a +Statement [36] loop::y_idx#1 = loop::y_idx#2 + 8 [ PLEX_SCREEN_PTR loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] { } ) always clobbers reg byte a +Statement [42] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 ] { } ) always clobbers reg byte a +Statement [43] loop::$5 = *D011 & VIC_RST8 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::$5 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::$5 ] { } ) always clobbers reg byte a +Statement [46] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 ] { } ) always clobbers reg byte a +Statement [47] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 loop::plexFreeNextYpos1_return#0 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 loop::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y +Statement [52] if(loop::ss#1!=PLEX_COUNT-1+1) goto loop::@7 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#1 ] { } ) always clobbers reg byte a +Statement [53] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ PLEX_SCREEN_PTR loop::sin_idx#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::sin_idx#1 ] { } ) always clobbers reg byte a +Statement [55] PLEX_SCREEN_PTR = SCREEN+$3f8 [ PLEX_SCREEN_PTR ] ( main:7::init:10::plexInit:15 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [65] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:7::loop:12::plexSort:41 [ PLEX_SCREEN_PTR loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a +Statement [68] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:7::loop:12::plexSort:41 [ PLEX_SCREEN_PTR loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a +Statement [71] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [101] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [102] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [108] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [109] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [111] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [3] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [4] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [14] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:7::init:10 [ ] { } ) always clobbers reg byte a +Statement [17] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a +Statement [18] init::$3 = init::sx#2 << 1 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 init::$3 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 init::$3 ] { } ) always clobbers reg byte a +Statement [19] PLEX_XPOS[init::$3] = init::xp#2 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a +Statement [20] init::xp#1 = init::xp#2 + 9 [ PLEX_SCREEN_PTR init::sx#2 init::xp#1 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::sx#2 init::xp#1 ] { } ) always clobbers reg byte a +Statement [23] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE) = $ff [ PLEX_SCREEN_PTR ] ( main:7::init:10 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [25] SPRITES_COLOR[init::ss#2] = GREEN [ PLEX_SCREEN_PTR init::ss#2 ] ( main:7::init:10 [ PLEX_SCREEN_PTR init::ss#2 ] { } ) always clobbers reg byte a +Statement [31] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)!=$ff) goto loop::@2 [ PLEX_SCREEN_PTR loop::sin_idx#6 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::sin_idx#6 ] { } ) always clobbers reg byte a +Statement [35] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] [ PLEX_SCREEN_PTR loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] { } ) always clobbers reg byte a +Statement [36] loop::y_idx#1 = loop::y_idx#2 + 8 [ PLEX_SCREEN_PTR loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] { } ) always clobbers reg byte a +Statement [42] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 ] { } ) always clobbers reg byte a +Statement [43] loop::$5 = *D011 & VIC_RST8 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::$5 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::$5 ] { } ) always clobbers reg byte a +Statement [46] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 ] { } ) always clobbers reg byte a +Statement [47] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 loop::plexFreeNextYpos1_return#0 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#5 loop::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y +Statement [52] if(loop::ss#1!=PLEX_COUNT-1+1) goto loop::@7 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next loop::sin_idx#1 loop::ss#1 ] { } ) always clobbers reg byte a +Statement [53] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [ PLEX_SCREEN_PTR loop::sin_idx#1 ] ( main:7::loop:12 [ PLEX_SCREEN_PTR loop::sin_idx#1 ] { } ) always clobbers reg byte a +Statement [55] PLEX_SCREEN_PTR = SCREEN+$3f8 [ PLEX_SCREEN_PTR ] ( main:7::init:10::plexInit:15 [ PLEX_SCREEN_PTR ] { } ) always clobbers reg byte a +Statement [65] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:7::loop:12::plexSort:41 [ PLEX_SCREEN_PTR loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a +Statement [68] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:7::loop:12::plexSort:41 [ PLEX_SCREEN_PTR loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a +Statement [71] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [101] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [102] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [108] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [109] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [111] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( main:7::loop:12::plexShowSprite:50 [ loop::sin_idx#1 loop::ss#5 PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a Potential registers zp[1]:2 [ init::sx#2 init::sx#1 ] : zp[1]:2 , reg byte x , reg byte y , Potential registers zp[2]:3 [ init::xp#2 init::xp#1 ] : zp[2]:3 , Potential registers zp[1]:5 [ init::ss#2 init::ss#1 ] : zp[1]:5 , reg byte x , reg byte y , @@ -1587,117 +1478,119 @@ Potential registers zp[1]:10 [ plexInit::i#2 plexInit::i#1 ] : zp[1]:10 , reg by 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 [ plex_show_idx ] : zp[1]:14 , -Potential registers zp[1]:15 [ plex_sprite_idx ] : zp[1]:15 , -Potential registers zp[1]:16 [ plex_sprite_msb ] : zp[1]:16 , -Potential registers zp[1]:17 [ plex_free_next ] : zp[1]:17 , -Potential registers zp[1]:18 [ init::$3 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:19 [ loop::$5 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:20 [ loop::plexFreeNextYpos1_return#0 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:21 [ plexSort::nxt_idx#0 ] : zp[1]:21 , reg byte x , reg byte y , -Potential registers zp[1]:22 [ plexSort::nxt_y#0 ] : zp[1]:22 , reg byte x , reg byte y , -Potential registers zp[1]:23 [ plexSort::s#2 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] : zp[1]:24 , -Potential registers zp[1]:25 [ plexShowSprite::plexFreeAdd1_ypos#0 ] : zp[1]:25 , reg byte a , reg byte x , -Potential registers zp[1]:26 [ plexShowSprite::plexFreeAdd1_$0 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:27 [ plexShowSprite::plexFreeAdd1_$1 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:28 [ plexShowSprite::plexFreeAdd1_$2 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:29 [ plexShowSprite::xpos_idx#0 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:30 [ plexShowSprite::$11 ] : zp[1]:30 , reg byte x , -Potential registers zp[1]:31 [ plexShowSprite::$2 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:32 [ plexShowSprite::$3 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:33 [ plexShowSprite::$9 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:34 [ plexShowSprite::$5 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:35 [ plexShowSprite::$6 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:14 [ PLEX_SCREEN_PTR ] : zp[2]:14 , +Potential registers zp[1]:16 [ plex_show_idx ] : zp[1]:16 , +Potential registers zp[1]:17 [ plex_sprite_idx ] : zp[1]:17 , +Potential registers zp[1]:18 [ plex_sprite_msb ] : zp[1]:18 , +Potential registers zp[1]:19 [ plex_free_next ] : zp[1]:19 , +Potential registers zp[1]:20 [ init::$3 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:21 [ loop::$5 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:22 [ loop::plexFreeNextYpos1_return#0 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:23 [ plexSort::nxt_idx#0 ] : zp[1]:23 , reg byte x , reg byte y , +Potential registers zp[1]:24 [ plexSort::nxt_y#0 ] : zp[1]:24 , reg byte x , reg byte y , +Potential registers zp[1]:25 [ plexSort::s#2 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ] : zp[1]:26 , +Potential registers zp[1]:27 [ plexShowSprite::plexFreeAdd1_ypos#0 ] : zp[1]:27 , reg byte a , reg byte x , +Potential registers zp[1]:28 [ plexShowSprite::plexFreeAdd1_$0 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:29 [ plexShowSprite::plexFreeAdd1_$1 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:30 [ plexShowSprite::plexFreeAdd1_$2 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:31 [ plexShowSprite::xpos_idx#0 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:32 [ plexShowSprite::$11 ] : zp[1]:32 , reg byte x , +Potential registers zp[1]:33 [ plexShowSprite::$2 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:34 [ plexShowSprite::$3 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:35 [ plexShowSprite::$9 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:36 [ plexShowSprite::$5 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:37 [ plexShowSprite::$6 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [plexSort] 36,166,672.83: zp[1]:12 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] 3,000,003: zp[1]:13 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] 2,000,002: zp[1]:23 [ plexSort::s#2 ] 1,916,668.58: zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] 1,500,000.38: zp[1]:22 [ plexSort::nxt_y#0 ] 300,000.3: zp[1]:21 [ plexSort::nxt_idx#0 ] -Uplift Scope [plexShowSprite] 200,002: zp[1]:26 [ plexShowSprite::plexFreeAdd1_$0 ] 200,002: zp[1]:27 [ plexShowSprite::plexFreeAdd1_$1 ] 200,002: zp[1]:28 [ plexShowSprite::plexFreeAdd1_$2 ] 200,002: zp[1]:29 [ plexShowSprite::xpos_idx#0 ] 200,002: zp[1]:31 [ plexShowSprite::$2 ] 200,002: zp[1]:32 [ plexShowSprite::$3 ] 200,002: zp[1]:33 [ plexShowSprite::$9 ] 200,002: zp[1]:34 [ plexShowSprite::$5 ] 200,002: zp[1]:35 [ plexShowSprite::$6 ] 150,001.5: zp[1]:25 [ plexShowSprite::plexFreeAdd1_ypos#0 ] 100,001: zp[1]:30 [ plexShowSprite::$11 ] 25,000.25: zp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] -Uplift Scope [loop] 55,001: zp[1]:20 [ loop::plexFreeNextYpos1_return#0 ] 25,002.5: zp[1]:8 [ loop::sy#2 loop::sy#1 ] 24,171.33: zp[1]:7 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] 20,002: zp[1]:19 [ loop::$5 ] 18,335.17: zp[1]:9 [ loop::ss#5 loop::ss#1 ] 467.13: zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] -Uplift Scope [] 13,261.07: zp[1]:16 [ plex_sprite_msb ] 10,625.17: zp[1]:14 [ plex_show_idx ] 9,111.27: zp[1]:15 [ plex_sprite_idx ] 8,421.24: zp[1]:17 [ plex_free_next ] +Uplift Scope [plexSort] 36,166,672.83: zp[1]:12 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] 3,000,003: zp[1]:13 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] 2,000,002: zp[1]:25 [ plexSort::s#2 ] 1,916,668.58: zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] 1,500,000.38: zp[1]:24 [ plexSort::nxt_y#0 ] 300,000.3: zp[1]:23 [ plexSort::nxt_idx#0 ] +Uplift Scope [plexShowSprite] 200,002: zp[1]:28 [ plexShowSprite::plexFreeAdd1_$0 ] 200,002: zp[1]:29 [ plexShowSprite::plexFreeAdd1_$1 ] 200,002: zp[1]:30 [ plexShowSprite::plexFreeAdd1_$2 ] 200,002: zp[1]:31 [ plexShowSprite::xpos_idx#0 ] 200,002: zp[1]:33 [ plexShowSprite::$2 ] 200,002: zp[1]:34 [ plexShowSprite::$3 ] 200,002: zp[1]:35 [ plexShowSprite::$9 ] 200,002: zp[1]:36 [ plexShowSprite::$5 ] 200,002: zp[1]:37 [ plexShowSprite::$6 ] 150,001.5: zp[1]:27 [ plexShowSprite::plexFreeAdd1_ypos#0 ] 100,001: zp[1]:32 [ plexShowSprite::$11 ] 25,000.25: zp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplift Scope [loop] 55,001: zp[1]:22 [ loop::plexFreeNextYpos1_return#0 ] 25,002.5: zp[1]:8 [ loop::sy#2 loop::sy#1 ] 24,171.33: zp[1]:7 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] 20,002: zp[1]:21 [ loop::$5 ] 18,335.17: zp[1]:9 [ loop::ss#5 loop::ss#1 ] 467.13: zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] +Uplift Scope [] 13,261.07: zp[1]:18 [ plex_sprite_msb ] 10,625.17: zp[1]:16 [ plex_show_idx ] 9,111.27: zp[1]:17 [ plex_sprite_idx ] 8,421.24: zp[1]:19 [ plex_free_next ] 1,383.62: zp[2]:14 [ PLEX_SCREEN_PTR ] Uplift Scope [plexInit] 35,003.5: zp[1]:10 [ plexInit::i#2 plexInit::i#1 ] -Uplift Scope [init] 3,003: zp[1]:5 [ init::ss#2 init::ss#1 ] 2,302.3: zp[1]:2 [ init::sx#2 init::sx#1 ] 2,002: zp[1]:18 [ init::$3 ] 1,418.08: zp[2]:3 [ init::xp#2 init::xp#1 ] +Uplift Scope [init] 3,003: zp[1]:5 [ init::ss#2 init::ss#1 ] 2,302.3: zp[1]:2 [ init::sx#2 init::sx#1 ] 2,002: zp[1]:20 [ init::$3 ] 1,418.08: zp[2]:3 [ init::xp#2 init::xp#1 ] Uplift Scope [MOS6526_CIA] Uplift Scope [MOS6569_VICII] Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [__start] -Uplifting [plexSort] best 80230 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] zp[1]:23 [ plexSort::s#2 ] zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] zp[1]:22 [ plexSort::nxt_y#0 ] zp[1]:21 [ plexSort::nxt_idx#0 ] +Uplifting [plexSort] best 80278 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] zp[1]:25 [ plexSort::s#2 ] zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] zp[1]:24 [ plexSort::nxt_y#0 ] zp[1]:23 [ plexSort::nxt_idx#0 ] Limited combination testing to 10 combinations of 972 possible. -Uplifting [plexShowSprite] best 80220 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte x [ plexShowSprite::plexFreeAdd1_$1 ] zp[1]:28 [ plexShowSprite::plexFreeAdd1_$2 ] zp[1]:29 [ plexShowSprite::xpos_idx#0 ] zp[1]:31 [ plexShowSprite::$2 ] zp[1]:32 [ plexShowSprite::$3 ] zp[1]:33 [ plexShowSprite::$9 ] zp[1]:34 [ plexShowSprite::$5 ] zp[1]:35 [ plexShowSprite::$6 ] zp[1]:25 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:30 [ plexShowSprite::$11 ] zp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplifting [plexShowSprite] best 80268 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte x [ plexShowSprite::plexFreeAdd1_$1 ] zp[1]:30 [ plexShowSprite::plexFreeAdd1_$2 ] zp[1]:31 [ plexShowSprite::xpos_idx#0 ] zp[1]:33 [ plexShowSprite::$2 ] zp[1]:34 [ plexShowSprite::$3 ] zp[1]:35 [ plexShowSprite::$9 ] zp[1]:36 [ plexShowSprite::$5 ] zp[1]:37 [ plexShowSprite::$6 ] zp[1]:27 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:32 [ plexShowSprite::$11 ] zp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ] Limited combination testing to 10 combinations of 1572864 possible. -Uplifting [loop] best 79020 combination zp[1]:20 [ loop::plexFreeNextYpos1_return#0 ] reg byte y [ loop::sy#2 loop::sy#1 ] zp[1]:7 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] zp[1]:19 [ loop::$5 ] zp[1]:9 [ loop::ss#5 loop::ss#1 ] zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] +Uplifting [loop] best 79068 combination zp[1]:22 [ loop::plexFreeNextYpos1_return#0 ] reg byte y [ loop::sy#2 loop::sy#1 ] zp[1]:7 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] zp[1]:21 [ loop::$5 ] zp[1]:9 [ loop::ss#5 loop::ss#1 ] zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] Limited combination testing to 10 combinations of 144 possible. -Uplifting [] best 79020 combination zp[1]:16 [ plex_sprite_msb ] zp[1]:14 [ plex_show_idx ] zp[1]:15 [ plex_sprite_idx ] zp[1]:17 [ plex_free_next ] -Uplifting [plexInit] best 78900 combination reg byte x [ plexInit::i#2 plexInit::i#1 ] -Uplifting [init] best 78650 combination reg byte x [ init::ss#2 init::ss#1 ] reg byte x [ init::sx#2 init::sx#1 ] zp[1]:18 [ init::$3 ] zp[2]:3 [ init::xp#2 init::xp#1 ] +Uplifting [] best 79068 combination zp[1]:18 [ plex_sprite_msb ] zp[1]:16 [ plex_show_idx ] zp[1]:17 [ plex_sprite_idx ] zp[1]:19 [ plex_free_next ] zp[2]:14 [ PLEX_SCREEN_PTR ] +Uplifting [plexInit] best 78948 combination reg byte x [ plexInit::i#2 plexInit::i#1 ] +Uplifting [init] best 78698 combination reg byte x [ init::ss#2 init::ss#1 ] reg byte x [ init::sx#2 init::sx#1 ] zp[1]:20 [ init::$3 ] zp[2]:3 [ init::xp#2 init::xp#1 ] Limited combination testing to 10 combinations of 36 possible. -Uplifting [MOS6526_CIA] best 78650 combination -Uplifting [MOS6569_VICII] best 78650 combination -Uplifting [MOS6581_SID] best 78650 combination -Uplifting [main] best 78650 combination -Uplifting [__start] best 78650 combination -Attempting to uplift remaining variables inzp[1]:23 [ plexSort::s#2 ] -Uplifting [plexSort] best 78050 combination reg byte x [ plexSort::s#2 ] +Uplifting [MOS6526_CIA] best 78698 combination +Uplifting [MOS6569_VICII] best 78698 combination +Uplifting [MOS6581_SID] best 78698 combination +Uplifting [main] best 78698 combination +Uplifting [__start] best 78698 combination +Attempting to uplift remaining variables inzp[1]:25 [ plexSort::s#2 ] +Uplifting [plexSort] best 78098 combination reg byte x [ plexSort::s#2 ] Attempting to uplift remaining variables inzp[1]:11 [ plexSort::m#2 plexSort::m#1 ] -Uplifting [plexSort] best 78050 combination zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] -Attempting to uplift remaining variables inzp[1]:22 [ plexSort::nxt_y#0 ] -Uplifting [plexSort] best 78050 combination zp[1]:22 [ plexSort::nxt_y#0 ] -Attempting to uplift remaining variables inzp[1]:21 [ plexSort::nxt_idx#0 ] -Uplifting [plexSort] best 78050 combination zp[1]:21 [ plexSort::nxt_idx#0 ] -Attempting to uplift remaining variables inzp[1]:28 [ plexShowSprite::plexFreeAdd1_$2 ] -Uplifting [plexShowSprite] best 78046 combination reg byte a [ plexShowSprite::plexFreeAdd1_$2 ] -Attempting to uplift remaining variables inzp[1]:29 [ plexShowSprite::xpos_idx#0 ] -Uplifting [plexShowSprite] best 78040 combination reg byte a [ plexShowSprite::xpos_idx#0 ] -Attempting to uplift remaining variables inzp[1]:31 [ plexShowSprite::$2 ] -Uplifting [plexShowSprite] best 78034 combination reg byte a [ plexShowSprite::$2 ] -Attempting to uplift remaining variables inzp[1]:32 [ plexShowSprite::$3 ] -Uplifting [plexShowSprite] best 78028 combination reg byte a [ plexShowSprite::$3 ] -Attempting to uplift remaining variables inzp[1]:33 [ plexShowSprite::$9 ] -Uplifting [plexShowSprite] best 78022 combination reg byte a [ plexShowSprite::$9 ] -Attempting to uplift remaining variables inzp[1]:34 [ plexShowSprite::$5 ] -Uplifting [plexShowSprite] best 78016 combination reg byte x [ plexShowSprite::$5 ] -Attempting to uplift remaining variables inzp[1]:35 [ plexShowSprite::$6 ] -Uplifting [plexShowSprite] best 78012 combination reg byte a [ plexShowSprite::$6 ] -Attempting to uplift remaining variables inzp[1]:25 [ plexShowSprite::plexFreeAdd1_ypos#0 ] -Uplifting [plexShowSprite] best 78003 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] -Attempting to uplift remaining variables inzp[1]:30 [ plexShowSprite::$11 ] -Uplifting [plexShowSprite] best 77996 combination reg byte x [ plexShowSprite::$11 ] -Attempting to uplift remaining variables inzp[1]:20 [ loop::plexFreeNextYpos1_return#0 ] -Uplifting [loop] best 77996 combination zp[1]:20 [ loop::plexFreeNextYpos1_return#0 ] -Attempting to uplift remaining variables inzp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] -Uplifting [plexShowSprite] best 77996 combination zp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplifting [plexSort] best 78098 combination zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] +Attempting to uplift remaining variables inzp[1]:24 [ plexSort::nxt_y#0 ] +Uplifting [plexSort] best 78098 combination zp[1]:24 [ plexSort::nxt_y#0 ] +Attempting to uplift remaining variables inzp[1]:23 [ plexSort::nxt_idx#0 ] +Uplifting [plexSort] best 78098 combination zp[1]:23 [ plexSort::nxt_idx#0 ] +Attempting to uplift remaining variables inzp[1]:30 [ plexShowSprite::plexFreeAdd1_$2 ] +Uplifting [plexShowSprite] best 78094 combination reg byte a [ plexShowSprite::plexFreeAdd1_$2 ] +Attempting to uplift remaining variables inzp[1]:31 [ plexShowSprite::xpos_idx#0 ] +Uplifting [plexShowSprite] best 78088 combination reg byte a [ plexShowSprite::xpos_idx#0 ] +Attempting to uplift remaining variables inzp[1]:33 [ plexShowSprite::$2 ] +Uplifting [plexShowSprite] best 78082 combination reg byte a [ plexShowSprite::$2 ] +Attempting to uplift remaining variables inzp[1]:34 [ plexShowSprite::$3 ] +Uplifting [plexShowSprite] best 78076 combination reg byte a [ plexShowSprite::$3 ] +Attempting to uplift remaining variables inzp[1]:35 [ plexShowSprite::$9 ] +Uplifting [plexShowSprite] best 78070 combination reg byte a [ plexShowSprite::$9 ] +Attempting to uplift remaining variables inzp[1]:36 [ plexShowSprite::$5 ] +Uplifting [plexShowSprite] best 78064 combination reg byte x [ plexShowSprite::$5 ] +Attempting to uplift remaining variables inzp[1]:37 [ plexShowSprite::$6 ] +Uplifting [plexShowSprite] best 78060 combination reg byte a [ plexShowSprite::$6 ] +Attempting to uplift remaining variables inzp[1]:27 [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Uplifting [plexShowSprite] best 78051 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Attempting to uplift remaining variables inzp[1]:32 [ plexShowSprite::$11 ] +Uplifting [plexShowSprite] best 78044 combination reg byte x [ plexShowSprite::$11 ] +Attempting to uplift remaining variables inzp[1]:22 [ loop::plexFreeNextYpos1_return#0 ] +Uplifting [loop] best 78044 combination zp[1]:22 [ loop::plexFreeNextYpos1_return#0 ] +Attempting to uplift remaining variables inzp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplifting [plexShowSprite] best 78044 combination zp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ] Attempting to uplift remaining variables inzp[1]:7 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] -Uplifting [loop] best 77266 combination reg byte x [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] -Attempting to uplift remaining variables inzp[1]:19 [ loop::$5 ] -Uplifting [loop] best 76666 combination reg byte a [ loop::$5 ] +Uplifting [loop] best 77314 combination reg byte x [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] +Attempting to uplift remaining variables inzp[1]:21 [ loop::$5 ] +Uplifting [loop] best 76714 combination reg byte a [ loop::$5 ] Attempting to uplift remaining variables inzp[1]:9 [ loop::ss#5 loop::ss#1 ] -Uplifting [loop] best 76666 combination zp[1]:9 [ loop::ss#5 loop::ss#1 ] -Attempting to uplift remaining variables inzp[1]:16 [ plex_sprite_msb ] -Uplifting [] best 76666 combination zp[1]:16 [ plex_sprite_msb ] -Attempting to uplift remaining variables inzp[1]:14 [ plex_show_idx ] -Uplifting [] best 76666 combination zp[1]:14 [ plex_show_idx ] -Attempting to uplift remaining variables inzp[1]:15 [ plex_sprite_idx ] -Uplifting [] best 76666 combination zp[1]:15 [ plex_sprite_idx ] -Attempting to uplift remaining variables inzp[1]:17 [ plex_free_next ] -Uplifting [] best 76666 combination zp[1]:17 [ plex_free_next ] -Attempting to uplift remaining variables inzp[1]:18 [ init::$3 ] -Uplifting [init] best 76626 combination reg byte a [ init::$3 ] +Uplifting [loop] best 76714 combination zp[1]:9 [ loop::ss#5 loop::ss#1 ] +Attempting to uplift remaining variables inzp[1]:18 [ plex_sprite_msb ] +Uplifting [] best 76714 combination zp[1]:18 [ plex_sprite_msb ] +Attempting to uplift remaining variables inzp[1]:16 [ plex_show_idx ] +Uplifting [] best 76714 combination zp[1]:16 [ plex_show_idx ] +Attempting to uplift remaining variables inzp[1]:17 [ plex_sprite_idx ] +Uplifting [] best 76714 combination zp[1]:17 [ plex_sprite_idx ] +Attempting to uplift remaining variables inzp[1]:19 [ plex_free_next ] +Uplifting [] best 76714 combination zp[1]:19 [ plex_free_next ] +Attempting to uplift remaining variables inzp[1]:20 [ init::$3 ] +Uplifting [init] best 76674 combination reg byte a [ init::$3 ] Attempting to uplift remaining variables inzp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] -Uplifting [loop] best 76626 combination zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] -Coalescing zero page register [ zp[1]:20 [ loop::plexFreeNextYpos1_return#0 ] ] with [ zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] ] -Coalescing zero page register [ zp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] ] with [ zp[1]:21 [ plexSort::nxt_idx#0 ] ] +Uplifting [loop] best 76674 combination zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] +Coalescing zero page register [ zp[1]:22 [ loop::plexFreeNextYpos1_return#0 ] ] with [ zp[1]:11 [ plexSort::m#2 plexSort::m#1 ] ] +Coalescing zero page register [ zp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ] ] with [ zp[1]:23 [ plexSort::nxt_idx#0 ] ] Allocated (was zp[2]:3) zp[2]:2 [ init::xp#2 init::xp#1 ] Allocated (was zp[1]:6) zp[1]:4 [ loop::sin_idx#6 loop::sin_idx#1 ] Allocated (was zp[1]:9) zp[1]:5 [ loop::ss#5 loop::ss#1 ] -Allocated (was zp[1]:14) zp[1]:6 [ plex_show_idx ] -Allocated (was zp[1]:15) zp[1]:7 [ plex_sprite_idx ] -Allocated (was zp[1]:16) zp[1]:8 [ plex_sprite_msb ] -Allocated (was zp[1]:17) zp[1]:9 [ plex_free_next ] -Allocated (was zp[1]:20) zp[1]:10 [ loop::plexFreeNextYpos1_return#0 plexSort::m#2 plexSort::m#1 ] -Allocated (was zp[1]:22) zp[1]:11 [ plexSort::nxt_y#0 ] -Allocated (was zp[1]:24) zp[1]:12 [ plexShowSprite::plex_sprite_idx2#0 plexSort::nxt_idx#0 ] +Allocated (was zp[2]:14) zp[2]:6 [ PLEX_SCREEN_PTR ] +Allocated (was zp[1]:16) zp[1]:8 [ plex_show_idx ] +Allocated (was zp[1]:17) zp[1]:9 [ plex_sprite_idx ] +Allocated (was zp[1]:18) zp[1]:10 [ plex_sprite_msb ] +Allocated (was zp[1]:19) zp[1]:11 [ plex_free_next ] +Allocated (was zp[1]:22) zp[1]:12 [ loop::plexFreeNextYpos1_return#0 plexSort::m#2 plexSort::m#1 ] +Allocated (was zp[1]:24) zp[1]:13 [ plexSort::nxt_y#0 ] +Allocated (was zp[1]:26) zp[1]:14 [ plexShowSprite::plex_sprite_idx2#0 plexSort::nxt_idx#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -1731,64 +1624,69 @@ ASSEMBLER BEFORE OPTIMIZATION // Location of screen & sprites .label SCREEN = $400 // The address of the sprite pointers on the current screen (screen+0x3f8). - .label PLEX_SCREEN_PTR = SCREEN+$3f8 + .label PLEX_SCREEN_PTR = 6 // The index in the PLEX tables of the next sprite to show - .label plex_show_idx = 6 + .label plex_show_idx = 8 // The index the next sprite to use for showing (sprites are used round-robin) - .label plex_sprite_idx = 7 + .label plex_sprite_idx = 9 // The MSB bit of the next sprite to use for showing - .label plex_sprite_msb = 8 + .label plex_sprite_msb = $a // 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 = 9 + .label plex_free_next = $b // __start __start: { jmp __init1 // __start::__init1 __init1: - // [1] plex_show_idx = 0 -- vbuz1=vbuc1 + // [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 -- pbuz1=pbuc1 + lda #<$400+$3f8 + sta.z PLEX_SCREEN_PTR + lda #>$400+$3f8 + sta.z PLEX_SCREEN_PTR+1 + // [2] plex_show_idx = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_show_idx - // [2] plex_sprite_idx = 0 -- vbuz1=vbuc1 + // [3] plex_sprite_idx = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_sprite_idx - // [3] plex_sprite_msb = 1 -- vbuz1=vbuc1 + // [4] plex_sprite_msb = 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb - // [4] plex_free_next = 0 -- vbuz1=vbuc1 + // [5] plex_free_next = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_free_next - // [5] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [6] call main + // [7] call main jsr main jmp __breturn // __start::@return __breturn: - // [7] return + // [8] return rts } // main main: { // asm { sei } sei - // [9] call init + // [10] call init jsr init - // [10] phi from main to main::@1 [phi:main->main::@1] + // [11] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [11] call loop - // [28] phi from main::@1 to loop [phi:main::@1->loop] + // [12] call loop + // [29] phi from main::@1 to loop [phi:main::@1->loop] loop_from___b1: jsr loop jmp __breturn // main::@return __breturn: - // [12] return + // [13] return rts } // init @@ -1796,44 +1694,44 @@ main: { init: { // Set the x-positions & pointers .label xp = 2 - // [13] *D011 = VIC_DEN|VIC_RSEL|3 -- _deref_pbuc1=vbuc2 + // [14] *D011 = VIC_DEN|VIC_RSEL|3 -- _deref_pbuc1=vbuc2 lda #VIC_DEN|VIC_RSEL|3 sta D011 - // [14] call plexInit + // [15] call plexInit // Initialize the multiplexer - // [53] phi from init to plexInit [phi:init->plexInit] + // [54] phi from init to plexInit [phi:init->plexInit] plexInit_from_init: jsr plexInit - // [15] phi from init to init::@1 [phi:init->init::@1] + // [16] phi from init to init::@1 [phi:init->init::@1] __b1_from_init: - // [15] phi init::xp#2 = $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 + // [16] phi init::xp#2 = $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 lda #<$20 sta.z xp lda #>$20 sta.z xp+1 - // [15] phi init::sx#2 = 0 [phi:init->init::@1#1] -- vbuxx=vbuc1 + // [16] phi init::sx#2 = 0 [phi:init->init::@1#1] -- vbuxx=vbuc1 ldx #0 jmp __b1 - // [15] phi from init::@1 to init::@1 [phi:init::@1->init::@1] + // [16] phi from init::@1 to init::@1 [phi:init::@1->init::@1] __b1_from___b1: - // [15] phi init::xp#2 = init::xp#1 [phi:init::@1->init::@1#0] -- register_copy - // [15] phi init::sx#2 = init::sx#1 [phi:init::@1->init::@1#1] -- register_copy + // [16] phi init::xp#2 = init::xp#1 [phi:init::@1->init::@1#0] -- register_copy + // [16] phi init::sx#2 = init::sx#1 [phi:init::@1->init::@1#1] -- register_copy jmp __b1 // init::@1 __b1: - // [16] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 -- pbuc1_derefidx_vbuxx=vbuc2 + // [17] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 -- pbuc1_derefidx_vbuxx=vbuc2 lda #$ff&SPRITE/$40 sta PLEX_PTR,x - // [17] init::$3 = init::sx#2 << 1 -- vbuaa=vbuxx_rol_1 + // [18] init::$3 = init::sx#2 << 1 -- vbuaa=vbuxx_rol_1 txa asl - // [18] PLEX_XPOS[init::$3] = init::xp#2 -- pwuc1_derefidx_vbuaa=vwuz1 + // [19] PLEX_XPOS[init::$3] = init::xp#2 -- pwuc1_derefidx_vbuaa=vwuz1 tay lda.z xp sta PLEX_XPOS,y lda.z xp+1 sta PLEX_XPOS+1,y - // [19] init::xp#1 = init::xp#2 + 9 -- vwuz1=vwuz1_plus_vbuc1 + // [20] init::xp#1 = init::xp#2 + 9 -- vwuz1=vwuz1_plus_vbuc1 lda #9 clc adc.z xp @@ -1841,41 +1739,41 @@ init: { bcc !+ inc.z xp+1 !: - // [20] init::sx#1 = ++ init::sx#2 -- vbuxx=_inc_vbuxx + // [21] init::sx#1 = ++ init::sx#2 -- vbuxx=_inc_vbuxx inx - // [21] if(init::sx#1!=PLEX_COUNT-1+1) goto init::@1 -- vbuxx_neq_vbuc1_then_la1 + // [22] if(init::sx#1!=PLEX_COUNT-1+1) goto init::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #PLEX_COUNT-1+1 bne __b1_from___b1 jmp __b2 // init::@2 __b2: - // [22] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE) = $ff -- _deref_pbuc1=vbuc2 + // [23] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE) = $ff -- _deref_pbuc1=vbuc2 // Enable & initialize sprites lda #$ff sta VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE - // [23] phi from init::@2 to init::@3 [phi:init::@2->init::@3] + // [24] phi from init::@2 to init::@3 [phi:init::@2->init::@3] __b3_from___b2: - // [23] phi init::ss#2 = 0 [phi:init::@2->init::@3#0] -- vbuxx=vbuc1 + // [24] phi init::ss#2 = 0 [phi:init::@2->init::@3#0] -- vbuxx=vbuc1 ldx #0 jmp __b3 - // [23] phi from init::@3 to init::@3 [phi:init::@3->init::@3] + // [24] phi from init::@3 to init::@3 [phi:init::@3->init::@3] __b3_from___b3: - // [23] phi init::ss#2 = init::ss#1 [phi:init::@3->init::@3#0] -- register_copy + // [24] phi init::ss#2 = init::ss#1 [phi:init::@3->init::@3#0] -- register_copy jmp __b3 // init::@3 __b3: - // [24] SPRITES_COLOR[init::ss#2] = GREEN -- pbuc1_derefidx_vbuxx=vbuc2 + // [25] SPRITES_COLOR[init::ss#2] = GREEN -- pbuc1_derefidx_vbuxx=vbuc2 lda #GREEN sta SPRITES_COLOR,x - // [25] init::ss#1 = ++ init::ss#2 -- vbuxx=_inc_vbuxx + // [26] init::ss#1 = ++ init::ss#2 -- vbuxx=_inc_vbuxx inx - // [26] if(init::ss#1!=8) goto init::@3 -- vbuxx_neq_vbuc1_then_la1 + // [27] if(init::ss#1!=8) goto init::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne __b3_from___b3 jmp __breturn // init::@return __breturn: - // [27] return + // [28] return rts } // loop @@ -1883,11 +1781,11 @@ init: { loop: { // The current index into the y-sinus .label sin_idx = 4 - .label plexFreeNextYpos1_return = $a + .label plexFreeNextYpos1_return = $c .label ss = 5 - // [29] phi from loop to loop::@1 [phi:loop->loop::@1] + // [30] phi from loop to loop::@1 [phi:loop->loop::@1] __b1_from_loop: - // [29] phi loop::sin_idx#6 = 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 + // [30] phi loop::sin_idx#6 = 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 lda #0 sta.z sin_idx jmp __b1 @@ -1896,155 +1794,158 @@ loop: { jmp __b2 // loop::@2 __b2: - // [30] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)!=$ff) goto loop::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [31] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)!=$ff) goto loop::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$ff cmp VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER bne __b2 jmp __b3 // loop::@3 __b3: - // [31] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 + // [32] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR - // [32] loop::y_idx#3 = loop::sin_idx#6 -- vbuxx=vbuz1 + // [33] loop::y_idx#3 = loop::sin_idx#6 -- vbuxx=vbuz1 ldx.z sin_idx - // [33] phi from loop::@3 to loop::@4 [phi:loop::@3->loop::@4] + // [34] phi from loop::@3 to loop::@4 [phi:loop::@3->loop::@4] __b4_from___b3: - // [33] phi loop::sy#2 = 0 [phi:loop::@3->loop::@4#0] -- vbuyy=vbuc1 + // [34] phi loop::sy#2 = 0 [phi:loop::@3->loop::@4#0] -- vbuyy=vbuc1 ldy #0 - // [33] phi loop::y_idx#2 = loop::y_idx#3 [phi:loop::@3->loop::@4#1] -- register_copy + // [34] phi loop::y_idx#2 = loop::y_idx#3 [phi:loop::@3->loop::@4#1] -- register_copy jmp __b4 - // [33] phi from loop::@4 to loop::@4 [phi:loop::@4->loop::@4] + // [34] phi from loop::@4 to loop::@4 [phi:loop::@4->loop::@4] __b4_from___b4: - // [33] phi loop::sy#2 = loop::sy#1 [phi:loop::@4->loop::@4#0] -- register_copy - // [33] phi loop::y_idx#2 = loop::y_idx#1 [phi:loop::@4->loop::@4#1] -- register_copy + // [34] phi loop::sy#2 = loop::sy#1 [phi:loop::@4->loop::@4#0] -- register_copy + // [34] phi loop::y_idx#2 = loop::y_idx#1 [phi:loop::@4->loop::@4#1] -- register_copy jmp __b4 // loop::@4 __b4: - // [34] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx + // [35] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx lda YSIN,x sta PLEX_YPOS,y - // [35] loop::y_idx#1 = loop::y_idx#2 + 8 -- vbuxx=vbuxx_plus_vbuc1 + // [36] loop::y_idx#1 = loop::y_idx#2 + 8 -- vbuxx=vbuxx_plus_vbuc1 txa axs #-[8] - // [36] loop::sy#1 = ++ loop::sy#2 -- vbuyy=_inc_vbuyy + // [37] loop::sy#1 = ++ loop::sy#2 -- vbuyy=_inc_vbuyy iny - // [37] if(loop::sy#1!=PLEX_COUNT-1+1) goto loop::@4 -- vbuyy_neq_vbuc1_then_la1 + // [38] if(loop::sy#1!=PLEX_COUNT-1+1) goto loop::@4 -- vbuyy_neq_vbuc1_then_la1 cpy #PLEX_COUNT-1+1 bne __b4_from___b4 jmp __b5 // loop::@5 __b5: - // [38] loop::sin_idx#1 = loop::sin_idx#6 + 1 -- vbuz1=vbuz1_plus_1 + // [39] loop::sin_idx#1 = loop::sin_idx#6 + 1 -- vbuz1=vbuz1_plus_1 inc.z sin_idx - // [39] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 + // [40] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR - // [40] call plexSort - // [60] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + // [41] call plexSort + // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] plexSort_from___b5: jsr plexSort jmp __b11 // loop::@11 __b11: - // [41] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK -- _deref_pbuc1=vbuc2 + // [42] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR jmp __b6 // loop::@6 __b6: - // [42] loop::$5 = *D011 & VIC_RST8 -- vbuaa=_deref_pbuc1_band_vbuc2 + // [43] loop::$5 = *D011 & VIC_RST8 -- vbuaa=_deref_pbuc1_band_vbuc2 lda #VIC_RST8 and D011 - // [43] if(loop::$5!=0) goto loop::@6 -- vbuaa_neq_0_then_la1 + // [44] if(loop::$5!=0) goto loop::@6 -- vbuaa_neq_0_then_la1 cmp #0 bne __b6 - // [44] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7] + // [45] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7] __b7_from___b6: - // [44] phi loop::ss#5 = 0 [phi:loop::@6->loop::@7#0] -- vbuz1=vbuc1 + // [45] phi loop::ss#5 = 0 [phi:loop::@6->loop::@7#0] -- vbuz1=vbuc1 lda #0 sta.z ss jmp __b7 // Show the sprites - // [44] phi from loop::@12 to loop::@7 [phi:loop::@12->loop::@7] + // [45] phi from loop::@12 to loop::@7 [phi:loop::@12->loop::@7] __b7_from___b12: - // [44] phi loop::ss#5 = loop::ss#1 [phi:loop::@12->loop::@7#0] -- register_copy + // [45] phi loop::ss#5 = loop::ss#1 [phi:loop::@12->loop::@7#0] -- register_copy jmp __b7 // loop::@7 __b7: - // [45] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK -- _deref_pbuc1=vbuc2 + // [46] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR jmp plexFreeNextYpos1 // loop::plexFreeNextYpos1 plexFreeNextYpos1: - // [46] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] -- vbuz1=pbuc1_derefidx_vbuz2 + // [47] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z plex_free_next lda PLEX_FREE_YPOS,y sta.z plexFreeNextYpos1_return jmp __b8 // loop::@8 __b8: - // [47] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)loop::@1] + // [30] phi from loop::@10 to loop::@1 [phi:loop::@10->loop::@1] __b1_from___b10: - // [29] phi loop::sin_idx#6 = loop::sin_idx#1 [phi:loop::@10->loop::@1#0] -- register_copy + // [30] phi loop::sin_idx#6 = loop::sin_idx#1 [phi:loop::@10->loop::@1#0] -- register_copy jmp __b1 } // plexInit // Initialize the multiplexer data structures plexInit: { - // [54] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] - plexSetScreen1_from_plexInit: jmp plexSetScreen1 // plexInit::plexSetScreen1 plexSetScreen1: - // [55] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] + // [55] PLEX_SCREEN_PTR = SCREEN+$3f8 -- pbuz1=pbuc1 + lda #SCREEN+$3f8 + sta.z PLEX_SCREEN_PTR+1 + // [56] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] __b1_from_plexSetScreen1: - // [55] phi plexInit::i#2 = 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 + // [56] phi plexInit::i#2 = 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 ldx #0 jmp __b1 - // [55] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] + // [56] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] __b1_from___b1: - // [55] phi plexInit::i#2 = plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy + // [56] phi plexInit::i#2 = plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy jmp __b1 // plexInit::@1 __b1: - // [56] PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx + // [57] PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx txa sta PLEX_SORTED_IDX,x - // [57] plexInit::i#1 = ++ plexInit::i#2 -- vbuxx=_inc_vbuxx + // [58] plexInit::i#1 = ++ plexInit::i#2 -- vbuxx=_inc_vbuxx inx - // [58] if(plexInit::i#1!=PLEX_COUNT-1+1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1 + // [59] if(plexInit::i#1!=PLEX_COUNT-1+1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #PLEX_COUNT-1+1 bne __b1_from___b1 jmp __breturn // plexInit::@return __breturn: - // [59] return + // [60] return rts } // plexSort @@ -2058,30 +1959,30 @@ plexInit: { // 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 = $c - .label nxt_y = $b - .label m = $a - // [61] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] + .label nxt_idx = $e + .label nxt_y = $d + .label m = $c + // [62] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] __b1_from_plexSort: - // [61] phi plexSort::m#2 = 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 + // [62] phi plexSort::m#2 = 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 lda #0 sta.z m jmp __b1 - // [61] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] + // [62] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] __b1_from___b2: - // [61] phi plexSort::m#2 = plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy + // [62] phi plexSort::m#2 = plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy jmp __b1 // plexSort::@1 __b1: - // [62] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2] -- vbuz1=pbuc1_derefidx_vbuz2 + // [63] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2] -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z m lda PLEX_SORTED_IDX+1,y sta.z nxt_idx - // [63] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] -- vbuz1=pbuc1_derefidx_vbuz2 + // [64] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z nxt_idx lda PLEX_YPOS,y sta.z nxt_y - // [64] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 -- vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1 + // [65] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[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 @@ -2090,27 +1991,27 @@ plexSort: { jmp __b5 // plexSort::@5 __b5: - // [65] plexSort::s#6 = plexSort::m#2 -- vbuxx=vbuz1 + // [66] plexSort::s#6 = plexSort::m#2 -- vbuxx=vbuz1 ldx.z m - // [66] phi from plexSort::@5 plexSort::@7 to plexSort::@3 [phi:plexSort::@5/plexSort::@7->plexSort::@3] + // [67] phi from plexSort::@5 plexSort::@7 to plexSort::@3 [phi:plexSort::@5/plexSort::@7->plexSort::@3] __b3_from___b5: __b3_from___b7: - // [66] phi plexSort::s#3 = plexSort::s#6 [phi:plexSort::@5/plexSort::@7->plexSort::@3#0] -- register_copy + // [67] phi plexSort::s#3 = plexSort::s#6 [phi:plexSort::@5/plexSort::@7->plexSort::@3#0] -- register_copy jmp __b3 // plexSort::@3 __b3: - // [67] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [68] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda PLEX_SORTED_IDX,x sta PLEX_SORTED_IDX+1,x - // [68] plexSort::s#1 = -- plexSort::s#3 -- vbuxx=_dec_vbuxx + // [69] plexSort::s#1 = -- plexSort::s#3 -- vbuxx=_dec_vbuxx dex - // [69] if(plexSort::s#1==$ff) goto plexSort::@4 -- vbuxx_eq_vbuc1_then_la1 + // [70] if(plexSort::s#1==$ff) goto plexSort::@4 -- vbuxx_eq_vbuc1_then_la1 cpx #$ff beq __b4 jmp __b7 // plexSort::@7 __b7: - // [70] if(plexSort::nxt_y#0plexSort::plexFreePrepare1] + // [79] phi from plexSort::@6 to plexSort::plexFreePrepare1 [phi:plexSort::@6->plexSort::plexFreePrepare1] plexFreePrepare1_from___b6: jmp plexFreePrepare1 // plexSort::plexFreePrepare1 plexFreePrepare1: - // [79] phi from plexSort::plexFreePrepare1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1] + // [80] phi from plexSort::plexFreePrepare1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1] plexFreePrepare1___b1_from_plexFreePrepare1: - // [79] phi plexSort::plexFreePrepare1_s#2 = 0 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1#0] -- vbuxx=vbuc1 + // [80] phi plexSort::plexFreePrepare1_s#2 = 0 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1#0] -- vbuxx=vbuc1 ldx #0 jmp plexFreePrepare1___b1 - // [79] phi from plexSort::plexFreePrepare1_@1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1] + // [80] phi from plexSort::plexFreePrepare1_@1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1] plexFreePrepare1___b1_from_plexFreePrepare1___b1: - // [79] phi plexSort::plexFreePrepare1_s#2 = plexSort::plexFreePrepare1_s#1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1#0] -- register_copy + // [80] phi plexSort::plexFreePrepare1_s#2 = plexSort::plexFreePrepare1_s#1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1#0] -- register_copy jmp plexFreePrepare1___b1 // plexSort::plexFreePrepare1_@1 plexFreePrepare1___b1: - // [80] PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [81] PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta PLEX_FREE_YPOS,x - // [81] plexSort::plexFreePrepare1_s#1 = ++ plexSort::plexFreePrepare1_s#2 -- vbuxx=_inc_vbuxx + // [82] plexSort::plexFreePrepare1_s#1 = ++ plexSort::plexFreePrepare1_s#2 -- vbuxx=_inc_vbuxx inx - // [82] if(plexSort::plexFreePrepare1_s#1!=8) goto plexSort::plexFreePrepare1_@1 -- vbuxx_neq_vbuc1_then_la1 + // [83] if(plexSort::plexFreePrepare1_s#1!=8) goto plexSort::plexFreePrepare1_@1 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne plexFreePrepare1___b1_from_plexFreePrepare1___b1 jmp plexFreePrepare1___b2 // plexSort::plexFreePrepare1_@2 plexFreePrepare1___b2: - // [83] plex_free_next = 0 -- vbuz1=vbuc1 + // [84] plex_free_next = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_free_next jmp __breturn // plexSort::@return __breturn: - // [84] return + // [85] return rts } // plexShowSprite // Show the next sprite. // plexSort() prepares showing the sprites plexShowSprite: { - .label plex_sprite_idx2 = $c - // [85] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx << 1 -- vbuz1=vbuz2_rol_1 + .label plex_sprite_idx2 = $e + // [86] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx << 1 -- vbuz1=vbuz2_rol_1 lda.z plex_sprite_idx asl sta.z plex_sprite_idx2 - // [86] plexShowSprite::plexFreeAdd1_ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] -- vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) + // [87] plexShowSprite::plexFreeAdd1_ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] -- vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) ldx.z plex_show_idx ldy PLEX_SORTED_IDX,x lda PLEX_YPOS,y - // [87] SPRITES_YPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuaa + // [88] SPRITES_YPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z plex_sprite_idx2 sta SPRITES_YPOS,y jmp plexFreeAdd1 // plexShowSprite::plexFreeAdd1 plexFreeAdd1: - // [88] plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#0 + $15 -- vbuaa=vbuaa_plus_vbuc1 + // [89] plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#0 + $15 -- vbuaa=vbuaa_plus_vbuc1 clc adc #$15 - // [89] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuaa + // [90] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z plex_free_next sta PLEX_FREE_YPOS,y - // [90] plexShowSprite::plexFreeAdd1_$1 = plex_free_next + 1 -- vbuxx=vbuz1_plus_1 + // [91] plexShowSprite::plexFreeAdd1_$1 = plex_free_next + 1 -- vbuxx=vbuz1_plus_1 ldx.z plex_free_next inx - // [91] plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & 7 -- vbuaa=vbuxx_band_vbuc1 + // [92] plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & 7 -- vbuaa=vbuxx_band_vbuc1 txa and #7 - // [92] plex_free_next = plexShowSprite::plexFreeAdd1_$2 -- vbuz1=vbuaa + // [93] plex_free_next = plexShowSprite::plexFreeAdd1_$2 -- vbuz1=vbuaa sta.z plex_free_next jmp __b5 // plexShowSprite::@5 __b5: - // [93] PLEX_SCREEN_PTR#0[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz2) + // [94] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) ldx.z plex_show_idx ldy PLEX_SORTED_IDX,x lda PLEX_PTR,y - ldx.z plex_sprite_idx - sta PLEX_SCREEN_PTR,x - // [94] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] -- vbuaa=pbuc1_derefidx_vbuz1 + ldy.z plex_sprite_idx + sta (PLEX_SCREEN_PTR),y + // [95] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z plex_show_idx lda PLEX_SORTED_IDX,y - // [95] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 -- vbuxx=vbuaa_rol_1 + // [96] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 -- vbuxx=vbuaa_rol_1 asl tax - // [96] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_lo_pwuc1_derefidx_vbuxx + // [97] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_lo_pwuc1_derefidx_vbuxx lda PLEX_XPOS,x - // [97] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 -- pbuc1_derefidx_vbuz1=vbuaa + // [98] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z plex_sprite_idx2 sta SPRITES_XPOS,y - // [98] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_hi_pwuc1_derefidx_vbuxx + // [99] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_hi_pwuc1_derefidx_vbuxx lda PLEX_XPOS+1,x - // [99] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1 + // [100] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1 cmp #0 bne __b1 jmp __b3 // plexShowSprite::@3 __b3: - // [100] plexShowSprite::$9 = $ff ^ plex_sprite_msb -- vbuaa=vbuc1_bxor_vbuz1 + // [101] plexShowSprite::$9 = $ff ^ plex_sprite_msb -- vbuaa=vbuc1_bxor_vbuz1 lda #$ff eor.z plex_sprite_msb - // [101] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa + // [102] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa and SPRITES_XMSB sta SPRITES_XMSB jmp __b2 // plexShowSprite::@2 __b2: - // [102] plexShowSprite::$5 = plex_sprite_idx + 1 -- vbuxx=vbuz1_plus_1 + // [103] plexShowSprite::$5 = plex_sprite_idx + 1 -- vbuxx=vbuz1_plus_1 ldx.z plex_sprite_idx inx - // [103] plexShowSprite::$6 = plexShowSprite::$5 & 7 -- vbuaa=vbuxx_band_vbuc1 + // [104] plexShowSprite::$6 = plexShowSprite::$5 & 7 -- vbuaa=vbuxx_band_vbuc1 txa and #7 - // [104] plex_sprite_idx = plexShowSprite::$6 -- vbuz1=vbuaa + // [105] plex_sprite_idx = plexShowSprite::$6 -- vbuz1=vbuaa sta.z plex_sprite_idx - // [105] plex_show_idx = ++ plex_show_idx -- vbuz1=_inc_vbuz1 + // [106] plex_show_idx = ++ plex_show_idx -- vbuz1=_inc_vbuz1 inc.z plex_show_idx - // [106] plex_sprite_msb = plex_sprite_msb << 1 -- vbuz1=vbuz1_rol_1 + // [107] plex_sprite_msb = plex_sprite_msb << 1 -- vbuz1=vbuz1_rol_1 asl.z plex_sprite_msb - // [107] if(plex_sprite_msb!=0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1 + // [108] if(plex_sprite_msb!=0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1 lda.z plex_sprite_msb cmp #0 bne __breturn jmp __b4 // plexShowSprite::@4 __b4: - // [108] plex_sprite_msb = 1 -- vbuz1=vbuc1 + // [109] plex_sprite_msb = 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb jmp __breturn // plexShowSprite::@return __breturn: - // [109] return + // [110] return rts // plexShowSprite::@1 __b1: - // [110] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + // [111] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 lda SPRITES_XMSB ora.z plex_sprite_msb sta SPRITES_XMSB @@ -2379,8 +2280,6 @@ Removing instruction __b3_from___b3: Removing instruction __b1: Removing instruction __b4_from___b4: Removing instruction __b7_from___b12: -Removing instruction plexSetScreen1_from_plexInit: -Removing instruction __b1_from_plexSetScreen1: Removing instruction __b1_from___b1: Removing instruction __b1_from___b2: Removing instruction __b3_from___b5: @@ -2412,6 +2311,7 @@ Removing instruction __b12: Removing instruction __b10: Removing instruction __b1_from___b10: Removing instruction plexSetScreen1: +Removing instruction __b1_from_plexSetScreen1: Removing instruction __breturn: Removing instruction __b1_from_plexSort: Removing instruction __b5: @@ -2447,8 +2347,7 @@ const byte OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE = $15 const nomodify byte PLEX_COUNT = $20 const byte* PLEX_FREE_YPOS[8] = { fill( 8, 0) } const byte* PLEX_PTR[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } -byte* PLEX_SCREEN_PTR -const byte* PLEX_SCREEN_PTR#0 PLEX_SCREEN_PTR = SCREEN+$3f8 +volatile byte* PLEX_SCREEN_PTR loadstore zp[2]:6 1383.6164383561643 const byte* PLEX_SORTED_IDX[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const word* PLEX_XPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const byte* PLEX_YPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -2487,7 +2386,7 @@ word init::xp#2 xp zp[2]:2 750.75 void loop() byte~ loop::$5 reg byte a 20002.0 byte loop::plexFreeNextYpos1_return -byte loop::plexFreeNextYpos1_return#0 plexFreeNextYpos1_return zp[1]:10 55001.0 +byte loop::plexFreeNextYpos1_return#0 plexFreeNextYpos1_return zp[1]:12 55001.0 byte loop::rasterY byte loop::sin_idx byte loop::sin_idx#1 sin_idx zp[1]:4 133.46666666666667 @@ -2522,18 +2421,18 @@ byte~ plexShowSprite::plexFreeAdd1_$2 reg byte a 200002.0 byte plexShowSprite::plexFreeAdd1_ypos byte plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 150001.5 byte plexShowSprite::plex_sprite_idx2 -byte plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:12 25000.25 +byte plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:14 25000.25 byte plexShowSprite::xpos_idx byte plexShowSprite::xpos_idx#0 reg byte a 200002.0 byte plexShowSprite::ypos void plexSort() byte plexSort::m -byte plexSort::m#1 m zp[1]:10 1500001.5 -byte plexSort::m#2 m zp[1]:10 416667.0833333334 +byte plexSort::m#1 m zp[1]:12 1500001.5 +byte plexSort::m#2 m zp[1]:12 416667.0833333334 byte plexSort::nxt_idx -byte plexSort::nxt_idx#0 nxt_idx zp[1]:12 300000.30000000005 +byte plexSort::nxt_idx#0 nxt_idx zp[1]:14 300000.30000000005 byte plexSort::nxt_y -byte plexSort::nxt_y#0 nxt_y zp[1]:11 1500000.375 +byte plexSort::nxt_y#0 nxt_y zp[1]:13 1500000.375 byte plexSort::plexFreePrepare1_s byte plexSort::plexFreePrepare1_s#1 reg byte x 1500001.5 byte plexSort::plexFreePrepare1_s#2 reg byte x 1500001.5 @@ -2542,10 +2441,10 @@ byte plexSort::s#1 reg byte x 1.3666668333333332E7 byte plexSort::s#2 reg byte x 2000002.0 byte plexSort::s#3 reg byte x 2.05000025E7 byte plexSort::s#6 reg byte x 2000002.0 -volatile byte plex_free_next loadstore zp[1]:9 8421.236842105263 -volatile byte plex_show_idx loadstore zp[1]:6 10625.166666666664 -volatile byte plex_sprite_idx loadstore zp[1]:7 9111.266666666666 -volatile byte plex_sprite_msb loadstore zp[1]:8 13261.065217391306 +volatile byte plex_free_next loadstore zp[1]:11 8421.236842105263 +volatile byte plex_show_idx loadstore zp[1]:8 10625.166666666664 +volatile byte plex_sprite_idx loadstore zp[1]:9 9111.266666666666 +volatile byte plex_sprite_msb loadstore zp[1]:10 13261.065217391306 reg byte x [ init::sx#2 init::sx#1 ] zp[2]:2 [ init::xp#2 init::xp#1 ] @@ -2557,16 +2456,17 @@ zp[1]:5 [ loop::ss#5 loop::ss#1 ] reg byte x [ plexInit::i#2 plexInit::i#1 ] reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] -zp[1]:6 [ plex_show_idx ] -zp[1]:7 [ plex_sprite_idx ] -zp[1]:8 [ plex_sprite_msb ] -zp[1]:9 [ plex_free_next ] +zp[2]:6 [ PLEX_SCREEN_PTR ] +zp[1]:8 [ plex_show_idx ] +zp[1]:9 [ plex_sprite_idx ] +zp[1]:10 [ plex_sprite_msb ] +zp[1]:11 [ plex_free_next ] reg byte a [ init::$3 ] reg byte a [ loop::$5 ] -zp[1]:10 [ loop::plexFreeNextYpos1_return#0 plexSort::m#2 plexSort::m#1 ] -zp[1]:11 [ plexSort::nxt_y#0 ] +zp[1]:12 [ loop::plexFreeNextYpos1_return#0 plexSort::m#2 plexSort::m#1 ] +zp[1]:13 [ plexSort::nxt_y#0 ] reg byte x [ plexSort::s#2 ] -zp[1]:12 [ plexShowSprite::plex_sprite_idx2#0 plexSort::nxt_idx#0 ] +zp[1]:14 [ plexShowSprite::plex_sprite_idx2#0 plexSort::nxt_idx#0 ] reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte x [ plexShowSprite::plexFreeAdd1_$1 ] @@ -2581,7 +2481,7 @@ reg byte a [ plexShowSprite::$6 ] FINAL ASSEMBLER -Score: 58088 +Score: 58109 // File Comments // A simple usage of the flexible sprite multiplexer routine @@ -2614,39 +2514,45 @@ Score: 58088 // Location of screen & sprites .label SCREEN = $400 // The address of the sprite pointers on the current screen (screen+0x3f8). - .label PLEX_SCREEN_PTR = SCREEN+$3f8 + .label PLEX_SCREEN_PTR = 6 // The index in the PLEX tables of the next sprite to show - .label plex_show_idx = 6 + .label plex_show_idx = 8 // The index the next sprite to use for showing (sprites are used round-robin) - .label plex_sprite_idx = 7 + .label plex_sprite_idx = 9 // The MSB bit of the next sprite to use for showing - .label plex_sprite_msb = 8 + .label plex_sprite_msb = $a // 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 = 9 + .label plex_free_next = $b // __start __start: { // __start::__init1 + // PLEX_SCREEN_PTR = 0x400+0x3f8 + // [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 -- pbuz1=pbuc1 + lda #<$400+$3f8 + sta.z PLEX_SCREEN_PTR + lda #>$400+$3f8 + sta.z PLEX_SCREEN_PTR+1 // plex_show_idx=0 - // [1] plex_show_idx = 0 -- vbuz1=vbuc1 + // [2] plex_show_idx = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_show_idx // plex_sprite_idx=0 - // [2] plex_sprite_idx = 0 -- vbuz1=vbuc1 + // [3] plex_sprite_idx = 0 -- vbuz1=vbuc1 sta.z plex_sprite_idx // plex_sprite_msb=1 - // [3] plex_sprite_msb = 1 -- vbuz1=vbuc1 + // [4] plex_sprite_msb = 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb // plex_free_next = 0 - // [4] plex_free_next = 0 -- vbuz1=vbuc1 + // [5] plex_free_next = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_free_next - // [5] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [6] call main + // [7] call main jsr main // __start::@return - // [7] return + // [8] return rts } // main @@ -2655,17 +2561,17 @@ main: { // asm { sei } sei // init() - // [9] call init + // [10] call init jsr init - // [10] phi from main to main::@1 [phi:main->main::@1] + // [11] phi from main to main::@1 [phi:main->main::@1] // main::@1 // loop() - // [11] call loop - // [28] phi from main::@1 to loop [phi:main::@1->loop] + // [12] call loop + // [29] phi from main::@1 to loop [phi:main::@1->loop] jsr loop // main::@return // } - // [12] return + // [13] return rts } // init @@ -2674,43 +2580,43 @@ init: { // Set the x-positions & pointers .label xp = 2 // *D011 = VIC_DEN | VIC_RSEL | 3 - // [13] *D011 = VIC_DEN|VIC_RSEL|3 -- _deref_pbuc1=vbuc2 + // [14] *D011 = VIC_DEN|VIC_RSEL|3 -- _deref_pbuc1=vbuc2 lda #VIC_DEN|VIC_RSEL|3 sta D011 // plexInit(SCREEN) - // [14] call plexInit + // [15] call plexInit // Initialize the multiplexer - // [53] phi from init to plexInit [phi:init->plexInit] + // [54] phi from init to plexInit [phi:init->plexInit] jsr plexInit - // [15] phi from init to init::@1 [phi:init->init::@1] - // [15] phi init::xp#2 = $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 + // [16] phi from init to init::@1 [phi:init->init::@1] + // [16] phi init::xp#2 = $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 lda #<$20 sta.z xp lda #>$20 sta.z xp+1 - // [15] phi init::sx#2 = 0 [phi:init->init::@1#1] -- vbuxx=vbuc1 + // [16] phi init::sx#2 = 0 [phi:init->init::@1#1] -- vbuxx=vbuc1 ldx #0 - // [15] phi from init::@1 to init::@1 [phi:init::@1->init::@1] - // [15] phi init::xp#2 = init::xp#1 [phi:init::@1->init::@1#0] -- register_copy - // [15] phi init::sx#2 = init::sx#1 [phi:init::@1->init::@1#1] -- register_copy + // [16] phi from init::@1 to init::@1 [phi:init::@1->init::@1] + // [16] phi init::xp#2 = init::xp#1 [phi:init::@1->init::@1#0] -- register_copy + // [16] phi init::sx#2 = init::sx#1 [phi:init::@1->init::@1#1] -- register_copy // init::@1 __b1: // PLEX_PTR[sx] = (char)(SPRITE/$40) - // [16] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 -- pbuc1_derefidx_vbuxx=vbuc2 + // [17] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 -- pbuc1_derefidx_vbuxx=vbuc2 lda #$ff&SPRITE/$40 sta PLEX_PTR,x // PLEX_XPOS[sx] = xp - // [17] init::$3 = init::sx#2 << 1 -- vbuaa=vbuxx_rol_1 + // [18] init::$3 = init::sx#2 << 1 -- vbuaa=vbuxx_rol_1 txa asl - // [18] PLEX_XPOS[init::$3] = init::xp#2 -- pwuc1_derefidx_vbuaa=vwuz1 + // [19] PLEX_XPOS[init::$3] = init::xp#2 -- pwuc1_derefidx_vbuaa=vwuz1 tay lda.z xp sta PLEX_XPOS,y lda.z xp+1 sta PLEX_XPOS+1,y // xp += 9 - // [19] init::xp#1 = init::xp#2 + 9 -- vwuz1=vwuz1_plus_vbuc1 + // [20] init::xp#1 = init::xp#2 + 9 -- vwuz1=vwuz1_plus_vbuc1 lda #9 clc adc.z xp @@ -2719,37 +2625,37 @@ init: { inc.z xp+1 !: // for(char sx: 0..PLEX_COUNT-1) - // [20] init::sx#1 = ++ init::sx#2 -- vbuxx=_inc_vbuxx + // [21] init::sx#1 = ++ init::sx#2 -- vbuxx=_inc_vbuxx inx - // [21] if(init::sx#1!=PLEX_COUNT-1+1) goto init::@1 -- vbuxx_neq_vbuc1_then_la1 + // [22] if(init::sx#1!=PLEX_COUNT-1+1) goto init::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #PLEX_COUNT-1+1 bne __b1 // init::@2 // VICII->SPRITES_ENABLE = $ff - // [22] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE) = $ff -- _deref_pbuc1=vbuc2 + // [23] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE) = $ff -- _deref_pbuc1=vbuc2 // Enable & initialize sprites lda #$ff sta VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE - // [23] phi from init::@2 to init::@3 [phi:init::@2->init::@3] - // [23] phi init::ss#2 = 0 [phi:init::@2->init::@3#0] -- vbuxx=vbuc1 + // [24] phi from init::@2 to init::@3 [phi:init::@2->init::@3] + // [24] phi init::ss#2 = 0 [phi:init::@2->init::@3#0] -- vbuxx=vbuc1 ldx #0 - // [23] phi from init::@3 to init::@3 [phi:init::@3->init::@3] - // [23] phi init::ss#2 = init::ss#1 [phi:init::@3->init::@3#0] -- register_copy + // [24] phi from init::@3 to init::@3 [phi:init::@3->init::@3] + // [24] phi init::ss#2 = init::ss#1 [phi:init::@3->init::@3#0] -- register_copy // init::@3 __b3: // SPRITES_COLOR[ss] = GREEN - // [24] SPRITES_COLOR[init::ss#2] = GREEN -- pbuc1_derefidx_vbuxx=vbuc2 + // [25] SPRITES_COLOR[init::ss#2] = GREEN -- pbuc1_derefidx_vbuxx=vbuc2 lda #GREEN sta SPRITES_COLOR,x // for(char ss: 0..7) - // [25] init::ss#1 = ++ init::ss#2 -- vbuxx=_inc_vbuxx + // [26] init::ss#1 = ++ init::ss#2 -- vbuxx=_inc_vbuxx inx - // [26] if(init::ss#1!=8) goto init::@3 -- vbuxx_neq_vbuc1_then_la1 + // [27] if(init::ss#1!=8) goto init::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne __b3 // init::@return // } - // [27] return + // [28] return rts } // loop @@ -2757,150 +2663,155 @@ init: { loop: { // The current index into the y-sinus .label sin_idx = 4 - .label plexFreeNextYpos1_return = $a + .label plexFreeNextYpos1_return = $c .label ss = 5 - // [29] phi from loop to loop::@1 [phi:loop->loop::@1] - // [29] phi loop::sin_idx#6 = 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 + // [30] phi from loop to loop::@1 [phi:loop->loop::@1] + // [30] phi loop::sin_idx#6 = 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 lda #0 sta.z sin_idx // loop::@1 // loop::@2 __b2: // while(VICII->RASTER!=$ff) - // [30] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)!=$ff) goto loop::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [31] if(*((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)!=$ff) goto loop::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$ff cmp VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER bne __b2 // loop::@3 // (VICII->BORDER_COLOR)++; - // [31] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 + // [32] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR - // [32] loop::y_idx#3 = loop::sin_idx#6 -- vbuxx=vbuz1 + // [33] loop::y_idx#3 = loop::sin_idx#6 -- vbuxx=vbuz1 ldx.z sin_idx - // [33] phi from loop::@3 to loop::@4 [phi:loop::@3->loop::@4] - // [33] phi loop::sy#2 = 0 [phi:loop::@3->loop::@4#0] -- vbuyy=vbuc1 + // [34] phi from loop::@3 to loop::@4 [phi:loop::@3->loop::@4] + // [34] phi loop::sy#2 = 0 [phi:loop::@3->loop::@4#0] -- vbuyy=vbuc1 ldy #0 - // [33] phi loop::y_idx#2 = loop::y_idx#3 [phi:loop::@3->loop::@4#1] -- register_copy - // [33] phi from loop::@4 to loop::@4 [phi:loop::@4->loop::@4] - // [33] phi loop::sy#2 = loop::sy#1 [phi:loop::@4->loop::@4#0] -- register_copy - // [33] phi loop::y_idx#2 = loop::y_idx#1 [phi:loop::@4->loop::@4#1] -- register_copy + // [34] phi loop::y_idx#2 = loop::y_idx#3 [phi:loop::@3->loop::@4#1] -- register_copy + // [34] phi from loop::@4 to loop::@4 [phi:loop::@4->loop::@4] + // [34] phi loop::sy#2 = loop::sy#1 [phi:loop::@4->loop::@4#0] -- register_copy + // [34] phi loop::y_idx#2 = loop::y_idx#1 [phi:loop::@4->loop::@4#1] -- register_copy // loop::@4 __b4: // PLEX_YPOS[sy] = YSIN[y_idx] - // [34] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx + // [35] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx lda YSIN,x sta PLEX_YPOS,y // y_idx += 8 - // [35] loop::y_idx#1 = loop::y_idx#2 + 8 -- vbuxx=vbuxx_plus_vbuc1 + // [36] loop::y_idx#1 = loop::y_idx#2 + 8 -- vbuxx=vbuxx_plus_vbuc1 txa axs #-[8] // for(char sy: 0..PLEX_COUNT-1) - // [36] loop::sy#1 = ++ loop::sy#2 -- vbuyy=_inc_vbuyy + // [37] loop::sy#1 = ++ loop::sy#2 -- vbuyy=_inc_vbuyy iny - // [37] if(loop::sy#1!=PLEX_COUNT-1+1) goto loop::@4 -- vbuyy_neq_vbuc1_then_la1 + // [38] if(loop::sy#1!=PLEX_COUNT-1+1) goto loop::@4 -- vbuyy_neq_vbuc1_then_la1 cpy #PLEX_COUNT-1+1 bne __b4 // loop::@5 // sin_idx +=1 - // [38] loop::sin_idx#1 = loop::sin_idx#6 + 1 -- vbuz1=vbuz1_plus_1 + // [39] loop::sin_idx#1 = loop::sin_idx#6 + 1 -- vbuz1=vbuz1_plus_1 inc.z sin_idx // (VICII->BORDER_COLOR)++; - // [39] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 + // [40] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // plexSort() - // [40] call plexSort - // [60] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + // [41] call plexSort + // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] jsr plexSort // loop::@11 // VICII->BORDER_COLOR = BLACK - // [41] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK -- _deref_pbuc1=vbuc2 + // [42] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // loop::@6 __b6: // *D011&VIC_RST8 - // [42] loop::$5 = *D011 & VIC_RST8 -- vbuaa=_deref_pbuc1_band_vbuc2 + // [43] loop::$5 = *D011 & VIC_RST8 -- vbuaa=_deref_pbuc1_band_vbuc2 lda #VIC_RST8 and D011 // while((*D011&VIC_RST8)!=0) - // [43] if(loop::$5!=0) goto loop::@6 -- vbuaa_neq_0_then_la1 + // [44] if(loop::$5!=0) goto loop::@6 -- vbuaa_neq_0_then_la1 cmp #0 bne __b6 - // [44] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7] - // [44] phi loop::ss#5 = 0 [phi:loop::@6->loop::@7#0] -- vbuz1=vbuc1 + // [45] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7] + // [45] phi loop::ss#5 = 0 [phi:loop::@6->loop::@7#0] -- vbuz1=vbuc1 lda #0 sta.z ss // Show the sprites - // [44] phi from loop::@12 to loop::@7 [phi:loop::@12->loop::@7] - // [44] phi loop::ss#5 = loop::ss#1 [phi:loop::@12->loop::@7#0] -- register_copy + // [45] phi from loop::@12 to loop::@7 [phi:loop::@12->loop::@7] + // [45] phi loop::ss#5 = loop::ss#1 [phi:loop::@12->loop::@7#0] -- register_copy // loop::@7 __b7: // VICII->BORDER_COLOR = BLACK - // [45] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK -- _deref_pbuc1=vbuc2 + // [46] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // loop::plexFreeNextYpos1 // return PLEX_FREE_YPOS[plex_free_next]; - // [46] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] -- vbuz1=pbuc1_derefidx_vbuz2 + // [47] loop::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z plex_free_next lda PLEX_FREE_YPOS,y sta.z plexFreeNextYpos1_return // loop::@8 __b8: // while(VICII->RASTERBORDER_COLOR)++; - // [48] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 + // [49] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // plexShowSprite() - // [49] call plexShowSprite + // [50] call plexShowSprite jsr plexShowSprite // loop::@12 // for( char ss: 0..PLEX_COUNT-1) - // [50] loop::ss#1 = ++ loop::ss#5 -- vbuz1=_inc_vbuz1 + // [51] loop::ss#1 = ++ loop::ss#5 -- vbuz1=_inc_vbuz1 inc.z ss - // [51] if(loop::ss#1!=PLEX_COUNT-1+1) goto loop::@7 -- vbuz1_neq_vbuc1_then_la1 + // [52] if(loop::ss#1!=PLEX_COUNT-1+1) goto loop::@7 -- vbuz1_neq_vbuc1_then_la1 lda #PLEX_COUNT-1+1 cmp.z ss bne __b7 // loop::@10 // VICII->BORDER_COLOR = BLACK - // [52] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK -- _deref_pbuc1=vbuc2 + // [53] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR - // [29] phi from loop::@10 to loop::@1 [phi:loop::@10->loop::@1] - // [29] phi loop::sin_idx#6 = loop::sin_idx#1 [phi:loop::@10->loop::@1#0] -- register_copy + // [30] phi from loop::@10 to loop::@1 [phi:loop::@10->loop::@1] + // [30] phi loop::sin_idx#6 = loop::sin_idx#1 [phi:loop::@10->loop::@1#0] -- register_copy jmp __b2 } // plexInit // Initialize the multiplexer data structures plexInit: { - // [54] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] // plexInit::plexSetScreen1 - // [55] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] - // [55] phi plexInit::i#2 = 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 + // PLEX_SCREEN_PTR = screen+0x3f8 + // [55] PLEX_SCREEN_PTR = SCREEN+$3f8 -- pbuz1=pbuc1 + lda #SCREEN+$3f8 + sta.z PLEX_SCREEN_PTR+1 + // [56] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] + // [56] phi plexInit::i#2 = 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 ldx #0 - // [55] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] - // [55] phi plexInit::i#2 = plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy + // [56] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] + // [56] phi plexInit::i#2 = plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy // plexInit::@1 __b1: // PLEX_SORTED_IDX[i] = i - // [56] PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx + // [57] PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx txa sta PLEX_SORTED_IDX,x // for(char i: 0..PLEX_COUNT-1) - // [57] plexInit::i#1 = ++ plexInit::i#2 -- vbuxx=_inc_vbuxx + // [58] plexInit::i#1 = ++ plexInit::i#2 -- vbuxx=_inc_vbuxx inx - // [58] if(plexInit::i#1!=PLEX_COUNT-1+1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1 + // [59] if(plexInit::i#1!=PLEX_COUNT-1+1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #PLEX_COUNT-1+1 bne __b1 // plexInit::@return // } - // [59] return + // [60] return rts } // plexSort @@ -2914,52 +2825,52 @@ plexInit: { // 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 = $c - .label nxt_y = $b - .label m = $a - // [61] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] - // [61] phi plexSort::m#2 = 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 + .label nxt_idx = $e + .label nxt_y = $d + .label m = $c + // [62] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] + // [62] phi plexSort::m#2 = 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 lda #0 sta.z m - // [61] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] - // [61] phi plexSort::m#2 = plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy + // [62] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] + // [62] phi plexSort::m#2 = plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy // plexSort::@1 __b1: // nxt_idx = PLEX_SORTED_IDX[m+1] - // [62] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2] -- vbuz1=pbuc1_derefidx_vbuz2 + // [63] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[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] - // [63] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] -- vbuz1=pbuc1_derefidx_vbuz2 + // [64] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] -- vbuz1=pbuc1_derefidx_vbuz2 tay lda PLEX_YPOS,y sta.z nxt_y // if(nxt_y=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 -- vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1 + // [65] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[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 - // [65] plexSort::s#6 = plexSort::m#2 -- vbuxx=vbuz1 - // [66] phi from plexSort::@5 plexSort::@7 to plexSort::@3 [phi:plexSort::@5/plexSort::@7->plexSort::@3] - // [66] phi plexSort::s#3 = plexSort::s#6 [phi:plexSort::@5/plexSort::@7->plexSort::@3#0] -- register_copy + // [66] plexSort::s#6 = plexSort::m#2 -- vbuxx=vbuz1 + // [67] phi from plexSort::@5 plexSort::@7 to plexSort::@3 [phi:plexSort::@5/plexSort::@7->plexSort::@3] + // [67] phi plexSort::s#3 = plexSort::s#6 [phi:plexSort::@5/plexSort::@7->plexSort::@3#0] -- register_copy // plexSort::@3 __b3: // PLEX_SORTED_IDX[s+1] = PLEX_SORTED_IDX[s] - // [67] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [68] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda PLEX_SORTED_IDX,x sta PLEX_SORTED_IDX+1,x // s--; - // [68] plexSort::s#1 = -- plexSort::s#3 -- vbuxx=_dec_vbuxx + // [69] plexSort::s#1 = -- plexSort::s#3 -- vbuxx=_dec_vbuxx dex // while((s!=0xff) && (nxt_yplexSort::plexFreePrepare1] + // [79] phi from plexSort::@6 to plexSort::plexFreePrepare1 [phi:plexSort::@6->plexSort::plexFreePrepare1] // plexSort::plexFreePrepare1 - // [79] phi from plexSort::plexFreePrepare1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1] - // [79] phi plexSort::plexFreePrepare1_s#2 = 0 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1#0] -- vbuxx=vbuc1 + // [80] phi from plexSort::plexFreePrepare1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1] + // [80] phi plexSort::plexFreePrepare1_s#2 = 0 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1#0] -- vbuxx=vbuc1 ldx #0 - // [79] phi from plexSort::plexFreePrepare1_@1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1] - // [79] phi plexSort::plexFreePrepare1_s#2 = plexSort::plexFreePrepare1_s#1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1#0] -- register_copy + // [80] phi from plexSort::plexFreePrepare1_@1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1] + // [80] phi plexSort::plexFreePrepare1_s#2 = plexSort::plexFreePrepare1_s#1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1#0] -- register_copy // plexSort::plexFreePrepare1_@1 plexFreePrepare1___b1: // PLEX_FREE_YPOS[s] = 0 - // [80] PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [81] PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta PLEX_FREE_YPOS,x // for( char s: 0..7) - // [81] plexSort::plexFreePrepare1_s#1 = ++ plexSort::plexFreePrepare1_s#2 -- vbuxx=_inc_vbuxx + // [82] plexSort::plexFreePrepare1_s#1 = ++ plexSort::plexFreePrepare1_s#2 -- vbuxx=_inc_vbuxx inx - // [82] if(plexSort::plexFreePrepare1_s#1!=8) goto plexSort::plexFreePrepare1_@1 -- vbuxx_neq_vbuc1_then_la1 + // [83] if(plexSort::plexFreePrepare1_s#1!=8) goto plexSort::plexFreePrepare1_@1 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne plexFreePrepare1___b1 // plexSort::plexFreePrepare1_@2 // plex_free_next = 0 - // [83] plex_free_next = 0 -- vbuz1=vbuc1 + // [84] plex_free_next = 0 -- vbuz1=vbuc1 sta.z plex_free_next // plexSort::@return // } - // [84] return + // [85] return rts } // plexShowSprite // Show the next sprite. // plexSort() prepares showing the sprites plexShowSprite: { - .label plex_sprite_idx2 = $c + .label plex_sprite_idx2 = $e // plex_sprite_idx2 = plex_sprite_idx*2 - // [85] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx << 1 -- vbuz1=vbuz2_rol_1 + // [86] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx << 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]] - // [86] plexShowSprite::plexFreeAdd1_ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] -- vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) + // [87] plexShowSprite::plexFreeAdd1_ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] -- 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 - // [87] SPRITES_YPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuaa + // [88] SPRITES_YPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z plex_sprite_idx2 sta SPRITES_YPOS,y // plexShowSprite::plexFreeAdd1 // ypos+21 - // [88] plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#0 + $15 -- vbuaa=vbuaa_plus_vbuc1 + // [89] plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#0 + $15 -- vbuaa=vbuaa_plus_vbuc1 clc adc #$15 // PLEX_FREE_YPOS[plex_free_next] = ypos+21 - // [89] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuaa + // [90] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z plex_free_next sta PLEX_FREE_YPOS,y // plex_free_next+1 - // [90] plexShowSprite::plexFreeAdd1_$1 = plex_free_next + 1 -- vbuxx=vbuz1_plus_1 + // [91] plexShowSprite::plexFreeAdd1_$1 = plex_free_next + 1 -- vbuxx=vbuz1_plus_1 ldx.z plex_free_next inx // (plex_free_next+1)&7 - // [91] plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & 7 -- vbuaa=vbuxx_band_vbuc1 + // [92] plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & 7 -- vbuaa=vbuxx_band_vbuc1 txa and #7 // plex_free_next = (plex_free_next+1)&7 - // [92] plex_free_next = plexShowSprite::plexFreeAdd1_$2 -- vbuz1=vbuaa + // [93] plex_free_next = plexShowSprite::plexFreeAdd1_$2 -- vbuz1=vbuaa sta.z plex_free_next // plexShowSprite::@5 // PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] - // [93] PLEX_SCREEN_PTR#0[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz2) + // [94] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) 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_sprite_idx + sta (PLEX_SCREEN_PTR),y // xpos_idx = PLEX_SORTED_IDX[plex_show_idx] - // [94] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] -- vbuaa=pbuc1_derefidx_vbuz1 + // [95] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z plex_show_idx lda PLEX_SORTED_IDX,y // PLEX_XPOS[xpos_idx] - // [98] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_hi_pwuc1_derefidx_vbuxx + // [99] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_hi_pwuc1_derefidx_vbuxx lda PLEX_XPOS+1,x // if(>PLEX_XPOS[xpos_idx]!=0) - // [99] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1 + // [100] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1 cmp #0 bne __b1 // plexShowSprite::@3 // 0xff^plex_sprite_msb - // [100] plexShowSprite::$9 = $ff ^ plex_sprite_msb -- vbuaa=vbuc1_bxor_vbuz1 + // [101] plexShowSprite::$9 = $ff ^ plex_sprite_msb -- vbuaa=vbuc1_bxor_vbuz1 lda #$ff eor.z plex_sprite_msb // *SPRITES_XMSB &= (0xff^plex_sprite_msb) - // [101] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa + // [102] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa and SPRITES_XMSB sta SPRITES_XMSB // plexShowSprite::@2 __b2: // plex_sprite_idx+1 - // [102] plexShowSprite::$5 = plex_sprite_idx + 1 -- vbuxx=vbuz1_plus_1 + // [103] plexShowSprite::$5 = plex_sprite_idx + 1 -- vbuxx=vbuz1_plus_1 ldx.z plex_sprite_idx inx // (plex_sprite_idx+1)&7 - // [103] plexShowSprite::$6 = plexShowSprite::$5 & 7 -- vbuaa=vbuxx_band_vbuc1 + // [104] plexShowSprite::$6 = plexShowSprite::$5 & 7 -- vbuaa=vbuxx_band_vbuc1 txa and #7 // plex_sprite_idx = (plex_sprite_idx+1)&7 - // [104] plex_sprite_idx = plexShowSprite::$6 -- vbuz1=vbuaa + // [105] plex_sprite_idx = plexShowSprite::$6 -- vbuz1=vbuaa sta.z plex_sprite_idx // plex_show_idx++; - // [105] plex_show_idx = ++ plex_show_idx -- vbuz1=_inc_vbuz1 + // [106] plex_show_idx = ++ plex_show_idx -- vbuz1=_inc_vbuz1 inc.z plex_show_idx // plex_sprite_msb <<=1 - // [106] plex_sprite_msb = plex_sprite_msb << 1 -- vbuz1=vbuz1_rol_1 + // [107] plex_sprite_msb = plex_sprite_msb << 1 -- vbuz1=vbuz1_rol_1 asl.z plex_sprite_msb // if(plex_sprite_msb==0) - // [107] if(plex_sprite_msb!=0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1 + // [108] if(plex_sprite_msb!=0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1 lda.z plex_sprite_msb cmp #0 bne __breturn // plexShowSprite::@4 // plex_sprite_msb = 1 - // [108] plex_sprite_msb = 1 -- vbuz1=vbuc1 + // [109] plex_sprite_msb = 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb // plexShowSprite::@return __breturn: // } - // [109] return + // [110] return rts // plexShowSprite::@1 __b1: // *SPRITES_XMSB |= plex_sprite_msb - // [110] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + // [111] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 lda SPRITES_XMSB ora.z plex_sprite_msb sta SPRITES_XMSB diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.sym b/src/test/ref/examples/multiplexer/simple-multiplexer.sym index 110516e50..04e2d6551 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.sym +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.sym @@ -7,8 +7,7 @@ const byte OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE = $15 const nomodify byte PLEX_COUNT = $20 const byte* PLEX_FREE_YPOS[8] = { fill( 8, 0) } const byte* PLEX_PTR[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } -byte* PLEX_SCREEN_PTR -const byte* PLEX_SCREEN_PTR#0 PLEX_SCREEN_PTR = SCREEN+$3f8 +volatile byte* PLEX_SCREEN_PTR loadstore zp[2]:6 1383.6164383561643 const byte* PLEX_SORTED_IDX[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const word* PLEX_XPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const byte* PLEX_YPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -47,7 +46,7 @@ word init::xp#2 xp zp[2]:2 750.75 void loop() byte~ loop::$5 reg byte a 20002.0 byte loop::plexFreeNextYpos1_return -byte loop::plexFreeNextYpos1_return#0 plexFreeNextYpos1_return zp[1]:10 55001.0 +byte loop::plexFreeNextYpos1_return#0 plexFreeNextYpos1_return zp[1]:12 55001.0 byte loop::rasterY byte loop::sin_idx byte loop::sin_idx#1 sin_idx zp[1]:4 133.46666666666667 @@ -82,18 +81,18 @@ byte~ plexShowSprite::plexFreeAdd1_$2 reg byte a 200002.0 byte plexShowSprite::plexFreeAdd1_ypos byte plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 150001.5 byte plexShowSprite::plex_sprite_idx2 -byte plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:12 25000.25 +byte plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:14 25000.25 byte plexShowSprite::xpos_idx byte plexShowSprite::xpos_idx#0 reg byte a 200002.0 byte plexShowSprite::ypos void plexSort() byte plexSort::m -byte plexSort::m#1 m zp[1]:10 1500001.5 -byte plexSort::m#2 m zp[1]:10 416667.0833333334 +byte plexSort::m#1 m zp[1]:12 1500001.5 +byte plexSort::m#2 m zp[1]:12 416667.0833333334 byte plexSort::nxt_idx -byte plexSort::nxt_idx#0 nxt_idx zp[1]:12 300000.30000000005 +byte plexSort::nxt_idx#0 nxt_idx zp[1]:14 300000.30000000005 byte plexSort::nxt_y -byte plexSort::nxt_y#0 nxt_y zp[1]:11 1500000.375 +byte plexSort::nxt_y#0 nxt_y zp[1]:13 1500000.375 byte plexSort::plexFreePrepare1_s byte plexSort::plexFreePrepare1_s#1 reg byte x 1500001.5 byte plexSort::plexFreePrepare1_s#2 reg byte x 1500001.5 @@ -102,10 +101,10 @@ byte plexSort::s#1 reg byte x 1.3666668333333332E7 byte plexSort::s#2 reg byte x 2000002.0 byte plexSort::s#3 reg byte x 2.05000025E7 byte plexSort::s#6 reg byte x 2000002.0 -volatile byte plex_free_next loadstore zp[1]:9 8421.236842105263 -volatile byte plex_show_idx loadstore zp[1]:6 10625.166666666664 -volatile byte plex_sprite_idx loadstore zp[1]:7 9111.266666666666 -volatile byte plex_sprite_msb loadstore zp[1]:8 13261.065217391306 +volatile byte plex_free_next loadstore zp[1]:11 8421.236842105263 +volatile byte plex_show_idx loadstore zp[1]:8 10625.166666666664 +volatile byte plex_sprite_idx loadstore zp[1]:9 9111.266666666666 +volatile byte plex_sprite_msb loadstore zp[1]:10 13261.065217391306 reg byte x [ init::sx#2 init::sx#1 ] zp[2]:2 [ init::xp#2 init::xp#1 ] @@ -117,16 +116,17 @@ zp[1]:5 [ loop::ss#5 loop::ss#1 ] reg byte x [ plexInit::i#2 plexInit::i#1 ] reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] -zp[1]:6 [ plex_show_idx ] -zp[1]:7 [ plex_sprite_idx ] -zp[1]:8 [ plex_sprite_msb ] -zp[1]:9 [ plex_free_next ] +zp[2]:6 [ PLEX_SCREEN_PTR ] +zp[1]:8 [ plex_show_idx ] +zp[1]:9 [ plex_sprite_idx ] +zp[1]:10 [ plex_sprite_msb ] +zp[1]:11 [ plex_free_next ] reg byte a [ init::$3 ] reg byte a [ loop::$5 ] -zp[1]:10 [ loop::plexFreeNextYpos1_return#0 plexSort::m#2 plexSort::m#1 ] -zp[1]:11 [ plexSort::nxt_y#0 ] +zp[1]:12 [ loop::plexFreeNextYpos1_return#0 plexSort::m#2 plexSort::m#1 ] +zp[1]:13 [ plexSort::nxt_y#0 ] reg byte x [ plexSort::s#2 ] -zp[1]:12 [ plexShowSprite::plex_sprite_idx2#0 plexSort::nxt_idx#0 ] +zp[1]:14 [ plexShowSprite::plex_sprite_idx2#0 plexSort::nxt_idx#0 ] reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte x [ plexShowSprite::plexFreeAdd1_$1 ] diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm index 53725f92c..d5dac5842 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm @@ -34,6 +34,10 @@ .label CIA1 = $dc00 // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 + // Location of screen & sprites + .label SCREEN = $400 + // The address of the sprite pointers on the current screen (screen+0x3f8). + .label PLEX_SCREEN_PTR = 6 // The index in the PLEX tables of the next sprite to show .label plex_show_idx = 8 // The index the next sprite to use for showing (sprites are used round-robin) @@ -43,9 +47,12 @@ // 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 = $b .label framedone = $c - // The address of the sprite pointers on the current screen (screen+0x3f8). - .label PLEX_SCREEN_PTR = 2 __start: { + // PLEX_SCREEN_PTR = 0x400+0x3f8 + lda #<$400+$3f8 + sta.z PLEX_SCREEN_PTR + lda #>$400+$3f8 + sta.z PLEX_SCREEN_PTR+1 // plex_show_idx=0 lda #0 sta.z plex_show_idx @@ -213,7 +220,7 @@ plexShowSprite: { // Initialize the program init: { // Set the x-positions & pointers - .label xp = 4 + .label xp = 2 // *D011 = VIC_DEN | VIC_RSEL | 3 lda #VIC_DEN|VIC_RSEL|3 sta D011 @@ -293,7 +300,7 @@ init: { // The raster loop loop: { // The current index into the y-sinus - .label sin_idx = 6 + .label sin_idx = 4 lda #0 sta.z sin_idx __b2: @@ -335,6 +342,11 @@ loop: { } // Initialize the multiplexer data structures plexInit: { + // PLEX_SCREEN_PTR = screen+0x3f8 + lda #SCREEN+$3f8 + sta.z PLEX_SCREEN_PTR+1 ldx #0 __b1: // PLEX_SORTED_IDX[i] = i @@ -359,7 +371,7 @@ plexInit: { plexSort: { .label nxt_idx = $f .label nxt_y = $10 - .label m = 7 + .label m = 5 lda #0 sta.z m __b1: diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg index 08f6456a8..8bf41ead4 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg @@ -4,23 +4,23 @@ __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start - [1] plex_show_idx = 0 - [2] plex_sprite_idx = 0 - [3] plex_sprite_msb = 1 - [4] plex_free_next = 0 - [5] framedone = true + [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 + [2] plex_show_idx = 0 + [3] plex_sprite_idx = 0 + [4] plex_sprite_msb = 1 + [5] plex_free_next = 0 + [6] framedone = true to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - [6] phi() - [7] call main + [7] phi() + [8] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [8] return + [9] return to:@return interrupt(KERNEL_MIN) void plex_irq() plex_irq: scope:[plex_irq] from - [9] PLEX_SCREEN_PTR#30 = phi( ) asm { sei } [11] *BORDER_COLOR = WHITE to:plex_irq::@3 @@ -84,7 +84,7 @@ plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite [38] plex_free_next = plexShowSprite::plexFreeAdd1_$2 to:plexShowSprite::@5 plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 - [39] PLEX_SCREEN_PTR#30[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] + [39] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] [40] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] [41] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 [42] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] @@ -189,7 +189,7 @@ plexInit: scope:[plexInit] from init [95] phi() to:plexInit::plexSetScreen1 plexInit::plexSetScreen1: scope:[plexInit] from plexInit - [96] phi() + [96] PLEX_SCREEN_PTR = SCREEN+$3f8 to:plexInit::@1 plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1 [97] plexInit::i#2 = phi( plexInit::@1/plexInit::i#1, plexInit::plexSetScreen1/0 ) diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log index cbd8026e6..2611afca1 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log @@ -16,14 +16,12 @@ plexInit: scope:[plexInit] from init plexInit::plexSetScreen1: scope:[plexInit] from plexInit plexInit::plexSetScreen1_screen#1 = phi( plexInit/plexInit::plexSetScreen1_screen#0 ) plexInit::plexSetScreen1_$0 = plexInit::plexSetScreen1_screen#1 + $3f8 - PLEX_SCREEN_PTR#0 = plexInit::plexSetScreen1_$0 + PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 to:plexInit::@2 plexInit::@2: scope:[plexInit] from plexInit::plexSetScreen1 - PLEX_SCREEN_PTR#24 = phi( plexInit::plexSetScreen1/PLEX_SCREEN_PTR#0 ) plexInit::i#0 = 0 to:plexInit::@1 plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::@2 - PLEX_SCREEN_PTR#17 = phi( plexInit::@1/PLEX_SCREEN_PTR#17, plexInit::@2/PLEX_SCREEN_PTR#24 ) plexInit::i#2 = phi( plexInit::@1/plexInit::i#1, plexInit::@2/plexInit::i#0 ) PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2 plexInit::i#1 = plexInit::i#2 + rangenext(0,PLEX_COUNT-1) @@ -31,8 +29,6 @@ plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::@2 if(plexInit::$1) goto plexInit::@1 to:plexInit::@return plexInit::@return: scope:[plexInit] from plexInit::@1 - PLEX_SCREEN_PTR#9 = phi( plexInit::@1/PLEX_SCREEN_PTR#17 ) - PLEX_SCREEN_PTR#1 = PLEX_SCREEN_PTR#9 return to:@return @@ -105,7 +101,6 @@ plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@2 void plexShowSprite() plexShowSprite: scope:[plexShowSprite] from plex_irq::@3 - PLEX_SCREEN_PTR#25 = phi( plex_irq::@3/PLEX_SCREEN_PTR#27 ) plexShowSprite::$0 = plex_sprite_idx * 2 plexShowSprite::plex_sprite_idx2#0 = plexShowSprite::$0 plexShowSprite::ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] @@ -114,7 +109,6 @@ plexShowSprite: scope:[plexShowSprite] from plex_irq::@3 to:plexShowSprite::plexFreeAdd1 plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite plexShowSprite::plex_sprite_idx2#2 = phi( plexShowSprite/plexShowSprite::plex_sprite_idx2#0 ) - PLEX_SCREEN_PTR#18 = phi( plexShowSprite/PLEX_SCREEN_PTR#25 ) plexShowSprite::plexFreeAdd1_ypos#1 = phi( plexShowSprite/plexShowSprite::plexFreeAdd1_ypos#0 ) plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#1 + $15 PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 @@ -124,8 +118,7 @@ plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite to:plexShowSprite::@5 plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 plexShowSprite::plex_sprite_idx2#1 = phi( plexShowSprite::plexFreeAdd1/plexShowSprite::plex_sprite_idx2#2 ) - PLEX_SCREEN_PTR#10 = phi( plexShowSprite::plexFreeAdd1/PLEX_SCREEN_PTR#18 ) - PLEX_SCREEN_PTR#10[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] + PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] plexShowSprite::$10 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$10] @@ -161,39 +154,29 @@ plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexSho void main() main: scope:[main] from __start::@1 - PLEX_SCREEN_PTR#19 = phi( __start::@1/PLEX_SCREEN_PTR#23 ) asm { sei } call init to:main::@1 main::@1: scope:[main] from main - PLEX_SCREEN_PTR#11 = phi( main/PLEX_SCREEN_PTR#5 ) - PLEX_SCREEN_PTR#2 = PLEX_SCREEN_PTR#11 call loop to:main::@2 main::@2: scope:[main] from main::@1 - PLEX_SCREEN_PTR#20 = phi( main::@1/PLEX_SCREEN_PTR#2 ) to:main::@return main::@return: scope:[main] from main::@2 - PLEX_SCREEN_PTR#12 = phi( main::@2/PLEX_SCREEN_PTR#20 ) - PLEX_SCREEN_PTR#3 = PLEX_SCREEN_PTR#12 return to:@return void init() init: scope:[init] from main - PLEX_SCREEN_PTR#21 = phi( main/PLEX_SCREEN_PTR#19 ) *D011 = VIC_DEN|VIC_RSEL|3 plexInit::screen#0 = SCREEN call plexInit to:init::@5 init::@5: scope:[init] from init - PLEX_SCREEN_PTR#13 = phi( init/PLEX_SCREEN_PTR#1 ) - PLEX_SCREEN_PTR#4 = PLEX_SCREEN_PTR#13 init::xp#0 = $20 init::sx#0 = 0 to:init::@1 init::@1: scope:[init] from init::@1 init::@5 - PLEX_SCREEN_PTR#29 = phi( init::@1/PLEX_SCREEN_PTR#29, init::@5/PLEX_SCREEN_PTR#4 ) init::xp#2 = phi( init::@1/init::xp#1, init::@5/init::xp#0 ) init::sx#2 = phi( init::@1/init::sx#1, init::@5/init::sx#0 ) PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 @@ -205,12 +188,10 @@ init::@1: scope:[init] from init::@1 init::@5 if(init::$1) goto init::@1 to:init::@2 init::@2: scope:[init] from init::@1 - PLEX_SCREEN_PTR#28 = phi( init::@1/PLEX_SCREEN_PTR#29 ) *SPRITES_ENABLE = $ff init::ss#0 = 0 to:init::@3 init::@3: scope:[init] from init::@2 init::@3 - PLEX_SCREEN_PTR#26 = phi( init::@2/PLEX_SCREEN_PTR#28, init::@3/PLEX_SCREEN_PTR#26 ) init::ss#2 = phi( init::@2/init::ss#0, init::@3/init::ss#1 ) SPRITES_COLOR[init::ss#2] = GREEN init::ss#1 = init::ss#2 + rangenext(0,7) @@ -218,7 +199,6 @@ init::@3: scope:[init] from init::@2 init::@3 if(init::$2) goto init::@3 to:init::@4 init::@4: scope:[init] from init::@3 - PLEX_SCREEN_PTR#22 = phi( init::@3/PLEX_SCREEN_PTR#26 ) asm { sei } *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR *IRQ_ENABLE = IRQ_RASTER @@ -229,36 +209,28 @@ init::@4: scope:[init] from init::@3 asm { cli } to:init::@return init::@return: scope:[init] from init::@4 - PLEX_SCREEN_PTR#14 = phi( init::@4/PLEX_SCREEN_PTR#22 ) - PLEX_SCREEN_PTR#5 = PLEX_SCREEN_PTR#14 return to:@return interrupt(KERNEL_MIN) void plex_irq() plex_irq: scope:[plex_irq] from - PLEX_SCREEN_PTR#30 = phi( ) asm { sei } *BORDER_COLOR = WHITE plex_irq::rasterY#0 = 0 to:plex_irq::@3 plex_irq::@3: scope:[plex_irq] from plex_irq plex_irq::@6 - PLEX_SCREEN_PTR#27 = phi( plex_irq/PLEX_SCREEN_PTR#30, plex_irq::@6/PLEX_SCREEN_PTR#31 ) call plexShowSprite to:plex_irq::@7 plex_irq::@7: scope:[plex_irq] from plex_irq::@3 - PLEX_SCREEN_PTR#34 = phi( plex_irq::@3/PLEX_SCREEN_PTR#27 ) to:plex_irq::plexFreeNextYpos1 plex_irq::plexFreeNextYpos1: scope:[plex_irq] from plex_irq::@7 - PLEX_SCREEN_PTR#33 = phi( plex_irq::@7/PLEX_SCREEN_PTR#34 ) plex_irq::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] to:plex_irq::plexFreeNextYpos1_@return plex_irq::plexFreeNextYpos1_@return: scope:[plex_irq] from plex_irq::plexFreeNextYpos1 - PLEX_SCREEN_PTR#32 = phi( plex_irq::plexFreeNextYpos1/PLEX_SCREEN_PTR#33 ) plex_irq::plexFreeNextYpos1_return#2 = phi( plex_irq::plexFreeNextYpos1/plex_irq::plexFreeNextYpos1_return#0 ) plex_irq::plexFreeNextYpos1_return#1 = plex_irq::plexFreeNextYpos1_return#2 to:plex_irq::@6 plex_irq::@6: scope:[plex_irq] from plex_irq::plexFreeNextYpos1_@return - PLEX_SCREEN_PTR#31 = phi( plex_irq::plexFreeNextYpos1_@return/PLEX_SCREEN_PTR#32 ) plex_irq::plexFreeNextYpos1_return#3 = phi( plex_irq::plexFreeNextYpos1_@return/plex_irq::plexFreeNextYpos1_return#1 ) plex_irq::$2 = plex_irq::plexFreeNextYpos1_return#3 plex_irq::rasterY#1 = plex_irq::$2 @@ -338,7 +310,7 @@ void __start() __start: scope:[__start] from to:__start::__init1 __start::__init1: scope:[__start] from __start - PLEX_SCREEN_PTR#6 = (byte*)$400+$3f8 + PLEX_SCREEN_PTR = (byte*)$400+$3f8 plex_show_idx = 0 plex_sprite_idx = 0 plex_sprite_msb = 1 @@ -346,16 +318,11 @@ __start::__init1: scope:[__start] from __start framedone = true to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - PLEX_SCREEN_PTR#23 = phi( __start::__init1/PLEX_SCREEN_PTR#6 ) call main to:__start::@2 __start::@2: scope:[__start] from __start::@1 - PLEX_SCREEN_PTR#15 = phi( __start::@1/PLEX_SCREEN_PTR#3 ) - PLEX_SCREEN_PTR#7 = PLEX_SCREEN_PTR#15 to:__start::@return __start::@return: scope:[__start] from __start::@2 - PLEX_SCREEN_PTR#16 = phi( __start::@2/PLEX_SCREEN_PTR#7 ) - PLEX_SCREEN_PTR#8 = PLEX_SCREEN_PTR#16 return to:@return @@ -373,42 +340,7 @@ const byte OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d const nomodify byte PLEX_COUNT = $20 const byte* PLEX_FREE_YPOS[8] = { fill( 8, 0) } const byte* PLEX_PTR[PLEX_COUNT] = { 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#4 -byte* PLEX_SCREEN_PTR#5 -byte* PLEX_SCREEN_PTR#6 -byte* PLEX_SCREEN_PTR#7 -byte* PLEX_SCREEN_PTR#8 -byte* PLEX_SCREEN_PTR#9 +volatile byte* PLEX_SCREEN_PTR loadstore const byte* PLEX_SORTED_IDX[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const word* PLEX_XPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const byte* PLEX_YPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -725,14 +657,13 @@ Inferred type updated to byte in plexShowSprite::$9 = $ff ^ plex_sprite_msb Inferred type updated to byte in plexShowSprite::$5 = plex_sprite_idx + 1 Inferred type updated to byte in plexShowSprite::$6 = plexShowSprite::$5 & 7 Inferred type updated to byte in plex_irq::$4 = *RASTER + 2 -Inversing boolean not [21] plexSort::$3 = plexSort::nxt_y#0 >= PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] from [20] plexSort::$2 = plexSort::nxt_y#0 < PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] -Inversing boolean not [82] plexShowSprite::$8 = plex_sprite_msb != 0 from [81] plexShowSprite::$7 = plex_sprite_msb == 0 +Inversing boolean not [18] plexSort::$3 = plexSort::nxt_y#0 >= PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] from [17] plexSort::$2 = plexSort::nxt_y#0 < PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] +Inversing boolean not [78] plexShowSprite::$8 = plex_sprite_msb != 0 from [77] plexShowSprite::$7 = plex_sprite_msb == 0 Successful SSA optimization Pass2UnaryNotSimplification +Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Alias plexInit::plexSetScreen1_screen#0 = plexInit::screen#1 plexInit::plexSetScreen1_screen#1 -Alias PLEX_SCREEN_PTR#0 = plexInit::plexSetScreen1_$0 PLEX_SCREEN_PTR#24 -Alias PLEX_SCREEN_PTR#1 = PLEX_SCREEN_PTR#9 PLEX_SCREEN_PTR#17 Alias plexSort::m#2 = plexSort::m#4 plexSort::s#0 Alias plexSort::nxt_y#0 = plexSort::nxt_y#2 Alias plexSort::nxt_idx#0 = plexSort::nxt_idx#3 @@ -741,56 +672,39 @@ Alias plexSort::nxt_idx#1 = plexSort::nxt_idx#2 Alias plexSort::m#5 = plexSort::m#6 Alias plexShowSprite::plex_sprite_idx2#0 = plexShowSprite::$0 plexShowSprite::plex_sprite_idx2#2 plexShowSprite::plex_sprite_idx2#1 Alias plexShowSprite::plexFreeAdd1_ypos#0 = plexShowSprite::ypos#0 plexShowSprite::plexFreeAdd1_ypos#1 -Alias PLEX_SCREEN_PTR#10 = PLEX_SCREEN_PTR#18 PLEX_SCREEN_PTR#25 -Alias PLEX_SCREEN_PTR#11 = PLEX_SCREEN_PTR#2 PLEX_SCREEN_PTR#20 PLEX_SCREEN_PTR#12 PLEX_SCREEN_PTR#3 -Alias PLEX_SCREEN_PTR#13 = PLEX_SCREEN_PTR#4 -Alias PLEX_SCREEN_PTR#28 = PLEX_SCREEN_PTR#29 -Alias PLEX_SCREEN_PTR#14 = PLEX_SCREEN_PTR#22 PLEX_SCREEN_PTR#26 PLEX_SCREEN_PTR#5 -Alias PLEX_SCREEN_PTR#27 = PLEX_SCREEN_PTR#34 PLEX_SCREEN_PTR#33 PLEX_SCREEN_PTR#32 PLEX_SCREEN_PTR#31 Alias plex_irq::plexFreeNextYpos1_return#0 = plex_irq::plexFreeNextYpos1_return#2 plex_irq::plexFreeNextYpos1_return#1 plex_irq::plexFreeNextYpos1_return#3 plex_irq::$2 plex_irq::rasterY#1 plex_irq::rasterY#3 plex_irq::rasterY#2 Alias loop::sin_idx#2 = loop::sin_idx#4 loop::y_idx#0 Alias loop::sin_idx#3 = loop::sin_idx#5 Alias loop::sin_idx#1 = loop::sin_idx#7 -Alias PLEX_SCREEN_PTR#23 = PLEX_SCREEN_PTR#6 -Alias PLEX_SCREEN_PTR#15 = PLEX_SCREEN_PTR#7 PLEX_SCREEN_PTR#16 PLEX_SCREEN_PTR#8 Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0 Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Identical Phi Values plexInit::plexSetScreen1_screen#0 plexInit::screen#0 -Identical Phi Values PLEX_SCREEN_PTR#1 PLEX_SCREEN_PTR#0 Identical Phi Values plexSort::nxt_y#1 plexSort::nxt_y#0 Identical Phi Values plexSort::nxt_idx#1 plexSort::nxt_idx#0 Identical Phi Values plexSort::m#5 plexSort::m#2 -Identical Phi Values PLEX_SCREEN_PTR#10 PLEX_SCREEN_PTR#27 -Identical Phi Values PLEX_SCREEN_PTR#19 PLEX_SCREEN_PTR#23 -Identical Phi Values PLEX_SCREEN_PTR#11 PLEX_SCREEN_PTR#14 -Identical Phi Values PLEX_SCREEN_PTR#21 PLEX_SCREEN_PTR#19 -Identical Phi Values PLEX_SCREEN_PTR#13 PLEX_SCREEN_PTR#1 -Identical Phi Values PLEX_SCREEN_PTR#28 PLEX_SCREEN_PTR#13 -Identical Phi Values PLEX_SCREEN_PTR#14 PLEX_SCREEN_PTR#28 -Identical Phi Values PLEX_SCREEN_PTR#27 PLEX_SCREEN_PTR#30 Identical Phi Values loop::sin_idx#2 loop::sin_idx#6 Identical Phi Values loop::sin_idx#3 loop::sin_idx#2 -Identical Phi Values PLEX_SCREEN_PTR#15 PLEX_SCREEN_PTR#11 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values plexSort::m#3 plexSort::m#2 Successful SSA optimization Pass2IdenticalPhiElimination -Identified duplicate assignment right side [69] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD +Identified duplicate assignment right side [65] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD Successful SSA optimization Pass2DuplicateRValueIdentification -Simple Condition plexInit::$1 [7] if(plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 -Simple Condition plexSort::$3 [15] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 -Simple Condition plexSort::$8 [19] if(plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1 -Simple Condition plexSort::plexFreePrepare1_$0 [38] if(plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 +Simple Condition plexInit::$1 [8] if(plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 +Simple Condition plexSort::$3 [16] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 +Simple Condition plexSort::$8 [20] if(plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1 +Simple Condition plexSort::plexFreePrepare1_$0 [39] if(plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 Simple Condition plexShowSprite::$4 [58] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 Simple Condition plexShowSprite::$8 [68] if(plex_sprite_msb!=0) goto plexShowSprite::@return -Simple Condition init::$1 [91] if(init::sx#1!=rangelast(0,PLEX_COUNT-1)) goto init::@1 -Simple Condition init::$2 [98] if(init::ss#1!=rangelast(0,7)) goto init::@3 -Simple Condition plex_irq::$0 [122] if(plex_show_idx=PLEX_COUNT) goto plex_irq::@4 +Negating conditional jump and destination [20] if(plexSort::s#1==$ff) goto plexSort::@4 +Negating conditional jump and destination [92] if(plex_show_idx>=PLEX_COUNT) goto plex_irq::@4 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement +Constant right-side identified [0] plexInit::plexSetScreen1_$0 = plexInit::screen#0 + $3f8 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plexInit::plexSetScreen1_$0 = plexInit::screen#0+$3f8 +Successful SSA optimization Pass2ConstantIdentification Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 -Rewriting multiplication to use shift [28] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx * 2 -Rewriting multiplication to use shift [38] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD -Rewriting multiplication to use shift [62] init::$3 = init::sx#2 * SIZEOF_WORD +Rewriting multiplication to use shift [29] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx * 2 +Rewriting multiplication to use shift [39] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD +Rewriting multiplication to use shift [63] init::$3 = init::sx#2 * SIZEOF_WORD Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings plexInit::i#0 Inlining constant with var siblings plexSort::m#0 @@ -885,7 +798,9 @@ Inlining constant with var siblings init::sx#0 Inlining constant with var siblings init::ss#0 Inlining constant with var siblings loop::sin_idx#0 Inlining constant with var siblings loop::sy#0 +Constant inlined plexInit::screen#0 = SCREEN Constant inlined init::xp#0 = $20 +Constant inlined plexInit::plexSetScreen1_$0 = SCREEN+$3f8 Constant inlined loop::sy#0 = 0 Constant inlined init::sx#0 = 0 Constant inlined plexSort::plexFreePrepare1_s#0 = 0 @@ -926,18 +841,17 @@ Adding NOP phi() at start of main::@2 Adding NOP phi() at start of init::@5 Adding NOP phi() at start of loop Adding NOP phi() at start of plexInit -Adding NOP phi() at start of plexInit::plexSetScreen1 Adding NOP phi() at start of plexInit::@2 Adding NOP phi() at start of plexSort Adding NOP phi() at start of plexSort::plexFreePrepare1 CALL GRAPH -Calls in [__start] to main:7 +Calls in [__start] to main:8 Calls in [plex_irq] to plexShowSprite:14 Calls in [main] to init:30 loop:32 Calls in [init] to plexInit:62 Calls in [loop] to plexSort:100 -Created 11 initial phi equivalence classes +Created 10 initial phi equivalence classes Coalesced [85] init::ss#3 = init::ss#1 Coalesced [86] init::sx#3 = init::sx#1 Coalesced [87] init::xp#3 = init::xp#1 @@ -950,7 +864,7 @@ Not coalescing [120] plexSort::s#6 = plexSort::m#2 Coalesced [140] plexSort::plexFreePrepare1_s#3 = plexSort::plexFreePrepare1_s#1 Coalesced [141] plexSort::m#7 = plexSort::m#1 Coalesced [142] plexSort::s#5 = plexSort::s#1 -Coalesced down to 11 phi equivalence classes +Coalesced down to 10 phi equivalence classes Culled Empty Block label __start::@2 Culled Empty Block label plex_irq::@7 Culled Empty Block label plex_irq::plexFreeNextYpos1_@return @@ -971,7 +885,6 @@ Adding NOP phi() at start of plex_irq::@3 Adding NOP phi() at start of main::@1 Adding NOP phi() at start of loop Adding NOP phi() at start of plexInit -Adding NOP phi() at start of plexInit::plexSetScreen1 Adding NOP phi() at start of plexSort Adding NOP phi() at start of plexSort::plexFreePrepare1 @@ -982,23 +895,23 @@ __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start - [1] plex_show_idx = 0 - [2] plex_sprite_idx = 0 - [3] plex_sprite_msb = 1 - [4] plex_free_next = 0 - [5] framedone = true + [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 + [2] plex_show_idx = 0 + [3] plex_sprite_idx = 0 + [4] plex_sprite_msb = 1 + [5] plex_free_next = 0 + [6] framedone = true to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - [6] phi() - [7] call main + [7] phi() + [8] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [8] return + [9] return to:@return interrupt(KERNEL_MIN) void plex_irq() plex_irq: scope:[plex_irq] from - [9] PLEX_SCREEN_PTR#30 = phi( ) asm { sei } [11] *BORDER_COLOR = WHITE to:plex_irq::@3 @@ -1062,7 +975,7 @@ plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite [38] plex_free_next = plexShowSprite::plexFreeAdd1_$2 to:plexShowSprite::@5 plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 - [39] PLEX_SCREEN_PTR#30[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] + [39] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] [40] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] [41] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 [42] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] @@ -1167,7 +1080,7 @@ plexInit: scope:[plexInit] from init [95] phi() to:plexInit::plexSetScreen1 plexInit::plexSetScreen1: scope:[plexInit] from plexInit - [96] phi() + [96] PLEX_SCREEN_PTR = SCREEN+$3f8 to:plexInit::@1 plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1 [97] plexInit::i#2 = phi( plexInit::@1/plexInit::i#1, plexInit::plexSetScreen1/0 ) @@ -1232,8 +1145,7 @@ plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@2 VARIABLE REGISTER WEIGHTS -byte* PLEX_SCREEN_PTR -byte* PLEX_SCREEN_PTR#30 2.8857142857142857 +volatile byte* PLEX_SCREEN_PTR loadstore 32.470588235294116 void __start() volatile bool framedone loadstore 1222.8888888888887 void init() @@ -1298,18 +1210,17 @@ byte plexSort::s#1 1.3666668333333332E7 byte plexSort::s#2 2000002.0 byte plexSort::s#3 2.05000025E7 byte plexSort::s#6 2000002.0 -volatile byte plex_free_next loadstore 312.6363636363636 +volatile byte plex_free_next loadstore 322.40625 interrupt(KERNEL_MIN) void plex_irq() byte~ plex_irq::$4 11.0 byte plex_irq::plexFreeNextYpos1_return byte plex_irq::plexFreeNextYpos1_return#0 4.0 byte plex_irq::rasterY -volatile byte plex_show_idx loadstore 292.25 -volatile byte plex_sprite_idx loadstore 315.3636363636364 -volatile byte plex_sprite_msb loadstore 303.1142857142857 +volatile byte plex_show_idx loadstore 300.59999999999997 +volatile byte plex_sprite_idx loadstore 325.21875 +volatile byte plex_sprite_msb loadstore 312.02941176470586 Initial phi equivalence classes -[ PLEX_SCREEN_PTR#30 ] [ init::sx#2 init::sx#1 ] [ init::xp#2 init::xp#1 ] [ init::ss#2 init::ss#1 ] @@ -1320,6 +1231,7 @@ Initial phi equivalence classes [ plexSort::m#2 plexSort::m#1 ] [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +Added variable PLEX_SCREEN_PTR to live range equivalence class [ PLEX_SCREEN_PTR ] Added variable plex_show_idx to live range equivalence class [ plex_show_idx ] Added variable plex_sprite_idx to live range equivalence class [ plex_sprite_idx ] Added variable plex_sprite_msb to live range equivalence class [ plex_sprite_msb ] @@ -1344,7 +1256,6 @@ Added variable plexSort::nxt_idx#0 to live range equivalence class [ plexSort::n Added variable plexSort::nxt_y#0 to live range equivalence class [ plexSort::nxt_y#0 ] Added variable plexSort::s#2 to live range equivalence class [ plexSort::s#2 ] Complete equivalence classes -[ PLEX_SCREEN_PTR#30 ] [ init::sx#2 init::sx#1 ] [ init::xp#2 init::xp#1 ] [ init::ss#2 init::ss#1 ] @@ -1355,6 +1266,7 @@ Complete equivalence classes [ plexSort::m#2 plexSort::m#1 ] [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +[ PLEX_SCREEN_PTR ] [ plex_show_idx ] [ plex_sprite_idx ] [ plex_sprite_msb ] @@ -1378,17 +1290,17 @@ Complete equivalence classes [ plexSort::nxt_idx#0 ] [ plexSort::nxt_y#0 ] [ plexSort::s#2 ] -Allocated zp[2]:2 [ PLEX_SCREEN_PTR#30 ] -Allocated zp[1]:4 [ init::sx#2 init::sx#1 ] -Allocated zp[2]:5 [ init::xp#2 init::xp#1 ] -Allocated zp[1]:7 [ init::ss#2 init::ss#1 ] -Allocated zp[1]:8 [ loop::sin_idx#6 loop::sin_idx#1 ] -Allocated zp[1]:9 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] -Allocated zp[1]:10 [ loop::sy#2 loop::sy#1 ] -Allocated zp[1]:11 [ plexInit::i#2 plexInit::i#1 ] -Allocated zp[1]:12 [ plexSort::m#2 plexSort::m#1 ] -Allocated zp[1]:13 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] -Allocated zp[1]:14 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +Allocated zp[1]:2 [ init::sx#2 init::sx#1 ] +Allocated zp[2]:3 [ init::xp#2 init::xp#1 ] +Allocated zp[1]:5 [ init::ss#2 init::ss#1 ] +Allocated zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] +Allocated zp[1]:7 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] +Allocated zp[1]:8 [ loop::sy#2 loop::sy#1 ] +Allocated zp[1]:9 [ plexInit::i#2 plexInit::i#1 ] +Allocated zp[1]:10 [ plexSort::m#2 plexSort::m#1 ] +Allocated zp[1]:11 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +Allocated zp[1]:12 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +Allocated zp[2]:13 [ PLEX_SCREEN_PTR ] Allocated zp[1]:15 [ plex_show_idx ] Allocated zp[1]:16 [ plex_sprite_idx ] Allocated zp[1]:17 [ plex_sprite_msb ] @@ -1413,14 +1325,15 @@ Allocated zp[1]:35 [ plexSort::nxt_idx#0 ] Allocated zp[1]:36 [ plexSort::nxt_y#0 ] Allocated zp[1]:37 [ plexSort::s#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [3] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [4] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [5] framedone = true [ framedone ] ( [ framedone ] { } ) always clobbers reg byte a -Statement [11] *BORDER_COLOR = WHITE [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] { } ) always clobbers reg byte a -Statement [14] plex_irq::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y -Statement [16] if(plex_show_idx>=PLEX_COUNT) goto plex_irq::@4 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a +Statement [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [3] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [4] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] framedone = true [ framedone ] ( [ framedone ] { } ) always clobbers reg byte a +Statement [11] *BORDER_COLOR = WHITE [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [14] plex_irq::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y +Statement [16] if(plex_show_idx>=PLEX_COUNT) goto plex_irq::@4 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:20 [ plex_irq::plexFreeNextYpos1_return#0 ] Removing always clobbered register reg byte a as potential for zp[1]:21 [ plex_irq::$4 ] Statement [18] *IRQ_STATUS = IRQ_RASTER [ plex_show_idx plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_show_idx plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte a @@ -1428,186 +1341,191 @@ Statement [19] if(plex_show_idx PLEX_XPOS[plexShowSprite::$11] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plexShowSprite::$3 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [46] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plexShowSprite::$9 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [47] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] { } ) always clobbers reg byte a -Statement [53] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] { } ) always clobbers reg byte a -Statement [54] plex_sprite_msb = 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] { } ) always clobbers reg byte a -Statement [56] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] { } ) always clobbers reg byte a -Statement [57] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [60] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 [ init::sx#2 init::xp#2 ] ( main:7::init:27 [ framedone init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:4 [ init::sx#2 init::sx#1 ] -Statement [61] init::$3 = init::sx#2 << 1 [ init::sx#2 init::xp#2 init::$3 ] ( main:7::init:27 [ framedone init::sx#2 init::xp#2 init::$3 ] { } ) always clobbers reg byte a -Statement [62] PLEX_XPOS[init::$3] = init::xp#2 [ init::sx#2 init::xp#2 ] ( main:7::init:27 [ framedone init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a -Statement [63] init::xp#1 = init::xp#2 + 9 [ init::sx#2 init::xp#1 ] ( main:7::init:27 [ framedone init::sx#2 init::xp#1 ] { } ) always clobbers reg byte a -Statement [66] *SPRITES_ENABLE = $ff [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [68] SPRITES_COLOR[init::ss#2] = GREEN [ init::ss#2 ] ( main:7::init:27 [ framedone init::ss#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:7 [ init::ss#2 init::ss#1 ] -Statement [72] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [73] *IRQ_ENABLE = IRQ_RASTER [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [74] *IRQ_STATUS = IRQ_RASTER [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [75] *KERNEL_IRQ = &plex_irq [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [76] *VIC_CONTROL = *VIC_CONTROL & $7f [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [77] *RASTER = 0 [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [82] if(framedone) goto loop::@3 [ framedone loop::sin_idx#6 ] ( main:7::loop:29 [ framedone loop::sin_idx#6 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:8 [ loop::sin_idx#6 loop::sin_idx#1 ] -Statement [83] *BORDER_COLOR = RED [ loop::sin_idx#6 ] ( main:7::loop:29 [ loop::sin_idx#6 ] { } ) always clobbers reg byte a -Statement [86] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:7::loop:29 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:9 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:10 [ loop::sy#2 loop::sy#1 ] -Statement [87] loop::y_idx#1 = loop::y_idx#2 + 8 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:7::loop:29 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] { } ) always clobbers reg byte a -Statement [93] *BORDER_COLOR = GREEN [ loop::sin_idx#1 ] ( main:7::loop:29 [ loop::sin_idx#1 ] { } ) always clobbers reg byte a -Statement [94] framedone = false [ framedone loop::sin_idx#1 ] ( main:7::loop:29 [ framedone loop::sin_idx#1 ] { } ) always clobbers reg byte a -Statement [109] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:7::loop:29::plexSort:92 [ loop::sin_idx#1 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]:12 [ plexSort::m#2 plexSort::m#1 ] +Statement [44] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [46] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [47] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [53] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [54] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [56] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [57] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [60] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 [ init::sx#2 init::xp#2 ] ( main:8::init:27 [ framedone init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:2 [ init::sx#2 init::sx#1 ] +Statement [61] init::$3 = init::sx#2 << 1 [ init::sx#2 init::xp#2 init::$3 ] ( main:8::init:27 [ framedone init::sx#2 init::xp#2 init::$3 ] { } ) always clobbers reg byte a +Statement [62] PLEX_XPOS[init::$3] = init::xp#2 [ init::sx#2 init::xp#2 ] ( main:8::init:27 [ framedone init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a +Statement [63] init::xp#1 = init::xp#2 + 9 [ init::sx#2 init::xp#1 ] ( main:8::init:27 [ framedone init::sx#2 init::xp#1 ] { } ) always clobbers reg byte a +Statement [66] *SPRITES_ENABLE = $ff [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [68] SPRITES_COLOR[init::ss#2] = GREEN [ init::ss#2 ] ( main:8::init:27 [ framedone init::ss#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:5 [ init::ss#2 init::ss#1 ] +Statement [72] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [73] *IRQ_ENABLE = IRQ_RASTER [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [74] *IRQ_STATUS = IRQ_RASTER [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [75] *KERNEL_IRQ = &plex_irq [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [76] *VIC_CONTROL = *VIC_CONTROL & $7f [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [77] *RASTER = 0 [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [82] if(framedone) goto loop::@3 [ framedone loop::sin_idx#6 ] ( main:8::loop:29 [ framedone loop::sin_idx#6 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] +Statement [83] *BORDER_COLOR = RED [ loop::sin_idx#6 ] ( main:8::loop:29 [ loop::sin_idx#6 ] { } ) always clobbers reg byte a +Statement [86] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:8::loop:29 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:7 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:8 [ loop::sy#2 loop::sy#1 ] +Statement [87] loop::y_idx#1 = loop::y_idx#2 + 8 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:8::loop:29 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] { } ) always clobbers reg byte a +Statement [93] *BORDER_COLOR = GREEN [ loop::sin_idx#1 ] ( main:8::loop:29 [ loop::sin_idx#1 ] { } ) always clobbers reg byte a +Statement [94] framedone = false [ framedone loop::sin_idx#1 ] ( main:8::loop:29 [ framedone loop::sin_idx#1 ] { } ) always clobbers reg byte a +Statement [96] PLEX_SCREEN_PTR = SCREEN+$3f8 [ ] ( main:8::init:27::plexInit:58 [ framedone ] { } ) always clobbers reg byte a +Statement [109] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:8::loop:29::plexSort:92 [ loop::sin_idx#1 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]:10 [ plexSort::m#2 plexSort::m#1 ] Removing always clobbered register reg byte a as potential for zp[1]:35 [ plexSort::nxt_idx#0 ] Removing always clobbered register reg byte a as potential for zp[1]:36 [ plexSort::nxt_y#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:13 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] -Statement [112] if(plexSort::nxt_y#0=PLEX_COUNT) goto plex_irq::@4 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:11 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +Statement [112] if(plexSort::nxt_y#0=PLEX_COUNT) goto plex_irq::@4 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a Statement [18] *IRQ_STATUS = IRQ_RASTER [ plex_show_idx plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_show_idx plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte a Statement [19] if(plex_show_idx PLEX_XPOS[plexShowSprite::$11] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plexShowSprite::$3 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [46] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plexShowSprite::$9 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [47] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] { } ) always clobbers reg byte a -Statement [53] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] { } ) always clobbers reg byte a -Statement [54] plex_sprite_msb = 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] { } ) always clobbers reg byte a -Statement [56] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] { } ) always clobbers reg byte a -Statement [57] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [60] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 [ init::sx#2 init::xp#2 ] ( main:7::init:27 [ framedone init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a -Statement [61] init::$3 = init::sx#2 << 1 [ init::sx#2 init::xp#2 init::$3 ] ( main:7::init:27 [ framedone init::sx#2 init::xp#2 init::$3 ] { } ) always clobbers reg byte a -Statement [62] PLEX_XPOS[init::$3] = init::xp#2 [ init::sx#2 init::xp#2 ] ( main:7::init:27 [ framedone init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a -Statement [63] init::xp#1 = init::xp#2 + 9 [ init::sx#2 init::xp#1 ] ( main:7::init:27 [ framedone init::sx#2 init::xp#1 ] { } ) always clobbers reg byte a -Statement [66] *SPRITES_ENABLE = $ff [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [68] SPRITES_COLOR[init::ss#2] = GREEN [ init::ss#2 ] ( main:7::init:27 [ framedone init::ss#2 ] { } ) always clobbers reg byte a -Statement [72] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [73] *IRQ_ENABLE = IRQ_RASTER [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [74] *IRQ_STATUS = IRQ_RASTER [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [75] *KERNEL_IRQ = &plex_irq [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [76] *VIC_CONTROL = *VIC_CONTROL & $7f [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [77] *RASTER = 0 [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [82] if(framedone) goto loop::@3 [ framedone loop::sin_idx#6 ] ( main:7::loop:29 [ framedone loop::sin_idx#6 ] { } ) always clobbers reg byte a -Statement [83] *BORDER_COLOR = RED [ loop::sin_idx#6 ] ( main:7::loop:29 [ loop::sin_idx#6 ] { } ) always clobbers reg byte a -Statement [86] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:7::loop:29 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] { } ) always clobbers reg byte a -Statement [87] loop::y_idx#1 = loop::y_idx#2 + 8 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:7::loop:29 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] { } ) always clobbers reg byte a -Statement [93] *BORDER_COLOR = GREEN [ loop::sin_idx#1 ] ( main:7::loop:29 [ loop::sin_idx#1 ] { } ) always clobbers reg byte a -Statement [94] framedone = false [ framedone loop::sin_idx#1 ] ( main:7::loop:29 [ framedone loop::sin_idx#1 ] { } ) always clobbers reg byte a -Statement [106] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:7::loop:29::plexSort:92 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a -Statement [109] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:7::loop:29::plexSort:92 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a -Statement [112] if(plexSort::nxt_y#0=PLEX_COUNT) goto plex_irq::@4 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a +Statement [35] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte y +Statement [39] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [40] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] { } ) always clobbers reg byte y +Statement [41] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] { } ) always clobbers reg byte a +Statement [42] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] { } ) always clobbers reg byte a +Statement [43] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] { } ) always clobbers reg byte y +Statement [44] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [46] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [47] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [53] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [54] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [56] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [57] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [60] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 [ init::sx#2 init::xp#2 ] ( main:8::init:27 [ framedone init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a +Statement [61] init::$3 = init::sx#2 << 1 [ init::sx#2 init::xp#2 init::$3 ] ( main:8::init:27 [ framedone init::sx#2 init::xp#2 init::$3 ] { } ) always clobbers reg byte a +Statement [62] PLEX_XPOS[init::$3] = init::xp#2 [ init::sx#2 init::xp#2 ] ( main:8::init:27 [ framedone init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a +Statement [63] init::xp#1 = init::xp#2 + 9 [ init::sx#2 init::xp#1 ] ( main:8::init:27 [ framedone init::sx#2 init::xp#1 ] { } ) always clobbers reg byte a +Statement [66] *SPRITES_ENABLE = $ff [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [68] SPRITES_COLOR[init::ss#2] = GREEN [ init::ss#2 ] ( main:8::init:27 [ framedone init::ss#2 ] { } ) always clobbers reg byte a +Statement [72] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [73] *IRQ_ENABLE = IRQ_RASTER [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [74] *IRQ_STATUS = IRQ_RASTER [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [75] *KERNEL_IRQ = &plex_irq [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [76] *VIC_CONTROL = *VIC_CONTROL & $7f [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [77] *RASTER = 0 [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [82] if(framedone) goto loop::@3 [ framedone loop::sin_idx#6 ] ( main:8::loop:29 [ framedone loop::sin_idx#6 ] { } ) always clobbers reg byte a +Statement [83] *BORDER_COLOR = RED [ loop::sin_idx#6 ] ( main:8::loop:29 [ loop::sin_idx#6 ] { } ) always clobbers reg byte a +Statement [86] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:8::loop:29 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] { } ) always clobbers reg byte a +Statement [87] loop::y_idx#1 = loop::y_idx#2 + 8 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:8::loop:29 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] { } ) always clobbers reg byte a +Statement [93] *BORDER_COLOR = GREEN [ loop::sin_idx#1 ] ( main:8::loop:29 [ loop::sin_idx#1 ] { } ) always clobbers reg byte a +Statement [94] framedone = false [ framedone loop::sin_idx#1 ] ( main:8::loop:29 [ framedone loop::sin_idx#1 ] { } ) always clobbers reg byte a +Statement [96] PLEX_SCREEN_PTR = SCREEN+$3f8 [ ] ( main:8::init:27::plexInit:58 [ framedone ] { } ) always clobbers reg byte a +Statement [106] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:8::loop:29::plexSort:92 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a +Statement [109] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:8::loop:29::plexSort:92 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a +Statement [112] if(plexSort::nxt_y#0=PLEX_COUNT) goto plex_irq::@4 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a Statement [18] *IRQ_STATUS = IRQ_RASTER [ plex_show_idx plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_show_idx plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte a Statement [19] if(plex_show_idx PLEX_XPOS[plexShowSprite::$11] [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plexShowSprite::$3 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [46] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plexShowSprite::$9 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [47] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] { } ) always clobbers reg byte a -Statement [53] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] { } ) always clobbers reg byte a -Statement [54] plex_sprite_msb = 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] { } ) always clobbers reg byte a -Statement [56] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] ( plexShowSprite:13 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next PLEX_SCREEN_PTR#30 ] { } ) always clobbers reg byte a -Statement [57] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [60] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 [ init::sx#2 init::xp#2 ] ( main:7::init:27 [ framedone init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a -Statement [61] init::$3 = init::sx#2 << 1 [ init::sx#2 init::xp#2 init::$3 ] ( main:7::init:27 [ framedone init::sx#2 init::xp#2 init::$3 ] { } ) always clobbers reg byte a -Statement [62] PLEX_XPOS[init::$3] = init::xp#2 [ init::sx#2 init::xp#2 ] ( main:7::init:27 [ framedone init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a -Statement [63] init::xp#1 = init::xp#2 + 9 [ init::sx#2 init::xp#1 ] ( main:7::init:27 [ framedone init::sx#2 init::xp#1 ] { } ) always clobbers reg byte a -Statement [66] *SPRITES_ENABLE = $ff [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [68] SPRITES_COLOR[init::ss#2] = GREEN [ init::ss#2 ] ( main:7::init:27 [ framedone init::ss#2 ] { } ) always clobbers reg byte a -Statement [72] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [73] *IRQ_ENABLE = IRQ_RASTER [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [74] *IRQ_STATUS = IRQ_RASTER [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [75] *KERNEL_IRQ = &plex_irq [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [76] *VIC_CONTROL = *VIC_CONTROL & $7f [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [77] *RASTER = 0 [ ] ( main:7::init:27 [ framedone ] { } ) always clobbers reg byte a -Statement [82] if(framedone) goto loop::@3 [ framedone loop::sin_idx#6 ] ( main:7::loop:29 [ framedone loop::sin_idx#6 ] { } ) always clobbers reg byte a -Statement [83] *BORDER_COLOR = RED [ loop::sin_idx#6 ] ( main:7::loop:29 [ loop::sin_idx#6 ] { } ) always clobbers reg byte a -Statement [86] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:7::loop:29 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] { } ) always clobbers reg byte a -Statement [87] loop::y_idx#1 = loop::y_idx#2 + 8 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:7::loop:29 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] { } ) always clobbers reg byte a -Statement [93] *BORDER_COLOR = GREEN [ loop::sin_idx#1 ] ( main:7::loop:29 [ loop::sin_idx#1 ] { } ) always clobbers reg byte a -Statement [94] framedone = false [ framedone loop::sin_idx#1 ] ( main:7::loop:29 [ framedone loop::sin_idx#1 ] { } ) always clobbers reg byte a -Statement [106] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:7::loop:29::plexSort:92 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a -Statement [109] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:7::loop:29::plexSort:92 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a -Statement [112] if(plexSort::nxt_y#0 PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [46] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [47] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [53] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [54] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [56] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [57] *D011 = VIC_DEN|VIC_RSEL|3 [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [60] PLEX_PTR[init::sx#2] = (byte)SPRITE/$40 [ init::sx#2 init::xp#2 ] ( main:8::init:27 [ framedone init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a +Statement [61] init::$3 = init::sx#2 << 1 [ init::sx#2 init::xp#2 init::$3 ] ( main:8::init:27 [ framedone init::sx#2 init::xp#2 init::$3 ] { } ) always clobbers reg byte a +Statement [62] PLEX_XPOS[init::$3] = init::xp#2 [ init::sx#2 init::xp#2 ] ( main:8::init:27 [ framedone init::sx#2 init::xp#2 ] { } ) always clobbers reg byte a +Statement [63] init::xp#1 = init::xp#2 + 9 [ init::sx#2 init::xp#1 ] ( main:8::init:27 [ framedone init::sx#2 init::xp#1 ] { } ) always clobbers reg byte a +Statement [66] *SPRITES_ENABLE = $ff [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [68] SPRITES_COLOR[init::ss#2] = GREEN [ init::ss#2 ] ( main:8::init:27 [ framedone init::ss#2 ] { } ) always clobbers reg byte a +Statement [72] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [73] *IRQ_ENABLE = IRQ_RASTER [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [74] *IRQ_STATUS = IRQ_RASTER [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [75] *KERNEL_IRQ = &plex_irq [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [76] *VIC_CONTROL = *VIC_CONTROL & $7f [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [77] *RASTER = 0 [ ] ( main:8::init:27 [ framedone ] { } ) always clobbers reg byte a +Statement [82] if(framedone) goto loop::@3 [ framedone loop::sin_idx#6 ] ( main:8::loop:29 [ framedone loop::sin_idx#6 ] { } ) always clobbers reg byte a +Statement [83] *BORDER_COLOR = RED [ loop::sin_idx#6 ] ( main:8::loop:29 [ loop::sin_idx#6 ] { } ) always clobbers reg byte a +Statement [86] PLEX_YPOS[loop::sy#2] = YSIN[loop::y_idx#2] [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:8::loop:29 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] { } ) always clobbers reg byte a +Statement [87] loop::y_idx#1 = loop::y_idx#2 + 8 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:8::loop:29 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] { } ) always clobbers reg byte a +Statement [93] *BORDER_COLOR = GREEN [ loop::sin_idx#1 ] ( main:8::loop:29 [ loop::sin_idx#1 ] { } ) always clobbers reg byte a +Statement [94] framedone = false [ framedone loop::sin_idx#1 ] ( main:8::loop:29 [ framedone loop::sin_idx#1 ] { } ) always clobbers reg byte a +Statement [96] PLEX_SCREEN_PTR = SCREEN+$3f8 [ ] ( main:8::init:27::plexInit:58 [ framedone ] { } ) always clobbers reg byte a +Statement [106] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:8::loop:29::plexSort:92 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a +Statement [109] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:8::loop:29::plexSort:92 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a +Statement [112] if(plexSort::nxt_y#0$400+$3f8 + sta.z PLEX_SCREEN_PTR+1 + // [2] plex_show_idx = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_show_idx - // [2] plex_sprite_idx = 0 -- vbuz1=vbuc1 + // [3] plex_sprite_idx = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_sprite_idx - // [3] plex_sprite_msb = 1 -- vbuz1=vbuc1 + // [4] plex_sprite_msb = 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb - // [4] plex_free_next = 0 -- vbuz1=vbuc1 + // [5] plex_free_next = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_free_next - // [5] framedone = true -- vboz1=vboc1 + // [6] framedone = true -- vboz1=vboc1 lda #1 sta.z framedone - // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [7] call main + // [8] call main jsr main jmp __breturn // __start::@return __breturn: - // [8] return + // [9] return rts } // plex_irq @@ -1939,7 +1865,7 @@ plexShowSprite: { jmp __b5 // plexShowSprite::@5 __b5: - // [39] PLEX_SCREEN_PTR#30[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) + // [39] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) ldx.z plex_show_idx ldy PLEX_SORTED_IDX,x lda PLEX_PTR,y @@ -2012,7 +1938,7 @@ plexShowSprite: { // Initialize the program init: { // Set the x-positions & pointers - .label xp = 4 + .label xp = 2 // [57] *D011 = VIC_DEN|VIC_RSEL|3 -- _deref_pbuc1=vbuc2 lda #VIC_DEN|VIC_RSEL|3 sta D011 @@ -2128,7 +2054,7 @@ init: { // The raster loop loop: { // The current index into the y-sinus - .label sin_idx = 6 + .label sin_idx = 4 // [81] phi from loop to loop::@1 [phi:loop->loop::@1] __b1_from_loop: // [81] phi loop::sin_idx#6 = 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 @@ -2204,11 +2130,14 @@ loop: { // plexInit // Initialize the multiplexer data structures plexInit: { - // [96] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] - plexSetScreen1_from_plexInit: jmp plexSetScreen1 // plexInit::plexSetScreen1 plexSetScreen1: + // [96] PLEX_SCREEN_PTR = SCREEN+$3f8 -- pbuz1=pbuc1 + lda #SCREEN+$3f8 + sta.z PLEX_SCREEN_PTR+1 // [97] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] __b1_from_plexSetScreen1: // [97] phi plexInit::i#2 = 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 @@ -2247,7 +2176,7 @@ plexInit: { plexSort: { .label nxt_idx = $f .label nxt_y = $10 - .label m = 7 + .label m = 5 // [103] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] __b1_from_plexSort: // [103] phi plexSort::m#2 = 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 @@ -2460,8 +2389,6 @@ Removing instruction __b1_from___b1: Removing instruction __b3_from___b3: Removing instruction __b1: Removing instruction __b4_from___b4: -Removing instruction plexSetScreen1_from_plexInit: -Removing instruction __b1_from_plexSetScreen1: Removing instruction __b1_from___b1: Removing instruction __b1_from___b2: Removing instruction __b3_from___b5: @@ -2497,6 +2424,7 @@ Removing instruction plexSort_from___b5: Removing instruction __b6: Removing instruction __b1_from___b6: Removing instruction plexSetScreen1: +Removing instruction __b1_from_plexSetScreen1: Removing instruction __breturn: Removing instruction __b1_from_plexSort: Removing instruction __b5: @@ -2531,13 +2459,13 @@ const byte OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d const nomodify byte PLEX_COUNT = $20 const byte* PLEX_FREE_YPOS[8] = { fill( 8, 0) } const byte* PLEX_PTR[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } -byte* PLEX_SCREEN_PTR -byte* PLEX_SCREEN_PTR#30 PLEX_SCREEN_PTR zp[2]:2 2.8857142857142857 +volatile byte* PLEX_SCREEN_PTR loadstore zp[2]:6 32.470588235294116 const byte* PLEX_SORTED_IDX[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const word* PLEX_XPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const byte* PLEX_YPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const nomodify byte* RASTER = (byte*) 53266 const nomodify byte RED = 2 +const byte* SCREEN = (byte*) 1024 const byte* SPRITE[$40] = kickasm {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) .for (var x=0;x<3; x++) @@ -2565,12 +2493,12 @@ byte init::sx byte init::sx#1 reg byte x 1501.5 byte init::sx#2 reg byte x 800.8 word init::xp -word init::xp#1 xp zp[2]:4 667.3333333333334 -word init::xp#2 xp zp[2]:4 750.75 +word init::xp#1 xp zp[2]:2 667.3333333333334 +word init::xp#2 xp zp[2]:2 750.75 void loop() byte loop::sin_idx -byte loop::sin_idx#1 sin_idx zp[1]:6 400.4 -byte loop::sin_idx#6 sin_idx zp[1]:6 333.6666666666667 +byte loop::sin_idx#1 sin_idx zp[1]:4 400.4 +byte loop::sin_idx#6 sin_idx zp[1]:4 333.6666666666667 byte loop::sy byte loop::sy#1 reg byte y 15001.5 byte loop::sy#2 reg byte y 10001.0 @@ -2604,8 +2532,8 @@ byte plexShowSprite::xpos_idx#0 reg byte a 202.0 byte plexShowSprite::ypos void plexSort() byte plexSort::m -byte plexSort::m#1 m zp[1]:7 1500001.5 -byte plexSort::m#2 m zp[1]:7 416667.0833333334 +byte plexSort::m#1 m zp[1]:5 1500001.5 +byte plexSort::m#2 m zp[1]:5 416667.0833333334 byte plexSort::nxt_idx byte plexSort::nxt_idx#0 nxt_idx zp[1]:15 300000.30000000005 byte plexSort::nxt_y @@ -2618,27 +2546,27 @@ byte plexSort::s#1 reg byte x 1.3666668333333332E7 byte plexSort::s#2 reg byte x 2000002.0 byte plexSort::s#3 reg byte x 2.05000025E7 byte plexSort::s#6 reg byte x 2000002.0 -volatile byte plex_free_next loadstore zp[1]:11 312.6363636363636 +volatile byte plex_free_next loadstore zp[1]:11 322.40625 interrupt(KERNEL_MIN) void plex_irq() byte~ plex_irq::$4 zp[1]:13 11.0 byte plex_irq::plexFreeNextYpos1_return byte plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.0 byte plex_irq::rasterY -volatile byte plex_show_idx loadstore zp[1]:8 292.25 -volatile byte plex_sprite_idx loadstore zp[1]:9 315.3636363636364 -volatile byte plex_sprite_msb loadstore zp[1]:10 303.1142857142857 +volatile byte plex_show_idx loadstore zp[1]:8 300.59999999999997 +volatile byte plex_sprite_idx loadstore zp[1]:9 325.21875 +volatile byte plex_sprite_msb loadstore zp[1]:10 312.02941176470586 -zp[2]:2 [ PLEX_SCREEN_PTR#30 ] reg byte x [ init::sx#2 init::sx#1 ] -zp[2]:4 [ init::xp#2 init::xp#1 ] +zp[2]:2 [ init::xp#2 init::xp#1 ] reg byte x [ init::ss#2 init::ss#1 ] -zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] +zp[1]:4 [ loop::sin_idx#6 loop::sin_idx#1 ] reg byte x [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] reg byte y [ loop::sy#2 loop::sy#1 ] reg byte x [ plexInit::i#2 plexInit::i#1 ] -zp[1]:7 [ plexSort::m#2 plexSort::m#1 ] +zp[1]:5 [ plexSort::m#2 plexSort::m#1 ] reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +zp[2]:6 [ PLEX_SCREEN_PTR ] zp[1]:8 [ plex_show_idx ] zp[1]:9 [ plex_sprite_idx ] zp[1]:10 [ plex_sprite_msb ] @@ -2665,7 +2593,7 @@ reg byte x [ plexSort::s#2 ] FINAL ASSEMBLER -Score: 43607 +Score: 43627 // File Comments // A simple usage of the flexible sprite multiplexer routine @@ -2706,6 +2634,10 @@ Score: 43607 .label CIA1 = $dc00 // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 + // Location of screen & sprites + .label SCREEN = $400 + // The address of the sprite pointers on the current screen (screen+0x3f8). + .label PLEX_SCREEN_PTR = 6 // The index in the PLEX tables of the next sprite to show .label plex_show_idx = 8 // The index the next sprite to use for showing (sprites are used round-robin) @@ -2715,36 +2647,40 @@ Score: 43607 // 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 = $b .label framedone = $c - // The address of the sprite pointers on the current screen (screen+0x3f8). - .label PLEX_SCREEN_PTR = 2 // __start __start: { // __start::__init1 + // PLEX_SCREEN_PTR = 0x400+0x3f8 + // [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 -- pbuz1=pbuc1 + lda #<$400+$3f8 + sta.z PLEX_SCREEN_PTR + lda #>$400+$3f8 + sta.z PLEX_SCREEN_PTR+1 // plex_show_idx=0 - // [1] plex_show_idx = 0 -- vbuz1=vbuc1 + // [2] plex_show_idx = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_show_idx // plex_sprite_idx=0 - // [2] plex_sprite_idx = 0 -- vbuz1=vbuc1 + // [3] plex_sprite_idx = 0 -- vbuz1=vbuc1 sta.z plex_sprite_idx // plex_sprite_msb=1 - // [3] plex_sprite_msb = 1 -- vbuz1=vbuc1 + // [4] plex_sprite_msb = 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb // plex_free_next = 0 - // [4] plex_free_next = 0 -- vbuz1=vbuc1 + // [5] plex_free_next = 0 -- vbuz1=vbuc1 lda #0 sta.z plex_free_next // framedone = true - // [5] framedone = true -- vboz1=vboc1 + // [6] framedone = true -- vboz1=vboc1 lda #1 sta.z framedone - // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main + // [8] call main jsr main // __start::@return - // [8] return + // [9] return rts } // plex_irq @@ -2885,7 +2821,7 @@ plexShowSprite: { sta.z plex_free_next // plexShowSprite::@5 // PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] - // [39] PLEX_SCREEN_PTR#30[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) + // [39] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) ldx.z plex_show_idx ldy PLEX_SORTED_IDX,x lda PLEX_PTR,y @@ -2968,7 +2904,7 @@ plexShowSprite: { // Initialize the program init: { // Set the x-positions & pointers - .label xp = 4 + .label xp = 2 // *D011 = VIC_DEN | VIC_RSEL | 3 // [57] *D011 = VIC_DEN|VIC_RSEL|3 -- _deref_pbuc1=vbuc2 lda #VIC_DEN|VIC_RSEL|3 @@ -3086,7 +3022,7 @@ init: { // The raster loop loop: { // The current index into the y-sinus - .label sin_idx = 6 + .label sin_idx = 4 // [81] phi from loop to loop::@1 [phi:loop->loop::@1] // [81] phi loop::sin_idx#6 = 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 lda #0 @@ -3158,8 +3094,13 @@ loop: { // plexInit // Initialize the multiplexer data structures plexInit: { - // [96] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] // plexInit::plexSetScreen1 + // PLEX_SCREEN_PTR = screen+0x3f8 + // [96] PLEX_SCREEN_PTR = SCREEN+$3f8 -- pbuz1=pbuc1 + lda #SCREEN+$3f8 + sta.z PLEX_SCREEN_PTR+1 // [97] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] // [97] phi plexInit::i#2 = 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 ldx #0 @@ -3195,7 +3136,7 @@ plexInit: { plexSort: { .label nxt_idx = $f .label nxt_y = $10 - .label m = 7 + .label m = 5 // [103] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] // [103] phi plexSort::m#2 = 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 lda #0 diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym index a369c3136..474ceb9c9 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym @@ -11,13 +11,13 @@ const byte OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d const nomodify byte PLEX_COUNT = $20 const byte* PLEX_FREE_YPOS[8] = { fill( 8, 0) } const byte* PLEX_PTR[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } -byte* PLEX_SCREEN_PTR -byte* PLEX_SCREEN_PTR#30 PLEX_SCREEN_PTR zp[2]:2 2.8857142857142857 +volatile byte* PLEX_SCREEN_PTR loadstore zp[2]:6 32.470588235294116 const byte* PLEX_SORTED_IDX[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const word* PLEX_XPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const byte* PLEX_YPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) } const nomodify byte* RASTER = (byte*) 53266 const nomodify byte RED = 2 +const byte* SCREEN = (byte*) 1024 const byte* SPRITE[$40] = kickasm {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) .for (var x=0;x<3; x++) @@ -45,12 +45,12 @@ byte init::sx byte init::sx#1 reg byte x 1501.5 byte init::sx#2 reg byte x 800.8 word init::xp -word init::xp#1 xp zp[2]:4 667.3333333333334 -word init::xp#2 xp zp[2]:4 750.75 +word init::xp#1 xp zp[2]:2 667.3333333333334 +word init::xp#2 xp zp[2]:2 750.75 void loop() byte loop::sin_idx -byte loop::sin_idx#1 sin_idx zp[1]:6 400.4 -byte loop::sin_idx#6 sin_idx zp[1]:6 333.6666666666667 +byte loop::sin_idx#1 sin_idx zp[1]:4 400.4 +byte loop::sin_idx#6 sin_idx zp[1]:4 333.6666666666667 byte loop::sy byte loop::sy#1 reg byte y 15001.5 byte loop::sy#2 reg byte y 10001.0 @@ -84,8 +84,8 @@ byte plexShowSprite::xpos_idx#0 reg byte a 202.0 byte plexShowSprite::ypos void plexSort() byte plexSort::m -byte plexSort::m#1 m zp[1]:7 1500001.5 -byte plexSort::m#2 m zp[1]:7 416667.0833333334 +byte plexSort::m#1 m zp[1]:5 1500001.5 +byte plexSort::m#2 m zp[1]:5 416667.0833333334 byte plexSort::nxt_idx byte plexSort::nxt_idx#0 nxt_idx zp[1]:15 300000.30000000005 byte plexSort::nxt_y @@ -98,27 +98,27 @@ byte plexSort::s#1 reg byte x 1.3666668333333332E7 byte plexSort::s#2 reg byte x 2000002.0 byte plexSort::s#3 reg byte x 2.05000025E7 byte plexSort::s#6 reg byte x 2000002.0 -volatile byte plex_free_next loadstore zp[1]:11 312.6363636363636 +volatile byte plex_free_next loadstore zp[1]:11 322.40625 interrupt(KERNEL_MIN) void plex_irq() byte~ plex_irq::$4 zp[1]:13 11.0 byte plex_irq::plexFreeNextYpos1_return byte plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.0 byte plex_irq::rasterY -volatile byte plex_show_idx loadstore zp[1]:8 292.25 -volatile byte plex_sprite_idx loadstore zp[1]:9 315.3636363636364 -volatile byte plex_sprite_msb loadstore zp[1]:10 303.1142857142857 +volatile byte plex_show_idx loadstore zp[1]:8 300.59999999999997 +volatile byte plex_sprite_idx loadstore zp[1]:9 325.21875 +volatile byte plex_sprite_msb loadstore zp[1]:10 312.02941176470586 -zp[2]:2 [ PLEX_SCREEN_PTR#30 ] reg byte x [ init::sx#2 init::sx#1 ] -zp[2]:4 [ init::xp#2 init::xp#1 ] +zp[2]:2 [ init::xp#2 init::xp#1 ] reg byte x [ init::ss#2 init::ss#1 ] -zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] +zp[1]:4 [ loop::sin_idx#6 loop::sin_idx#1 ] reg byte x [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] reg byte y [ loop::sy#2 loop::sy#1 ] reg byte x [ plexInit::i#2 plexInit::i#1 ] -zp[1]:7 [ plexSort::m#2 plexSort::m#1 ] +zp[1]:5 [ plexSort::m#2 plexSort::m#1 ] reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +zp[2]:6 [ PLEX_SCREEN_PTR ] zp[1]:8 [ plex_show_idx ] zp[1]:9 [ plex_sprite_idx ] zp[1]:10 [ plex_sprite_msb ]