diff --git a/src/test/kc/complex/spritescroller/spritescroller.kc b/src/test/kc/complex/spritescroller/spritescroller.kc index 34092bae0..0483a7477 100644 --- a/src/test/kc/complex/spritescroller/spritescroller.kc +++ b/src/test/kc/complex/spritescroller/spritescroller.kc @@ -3,22 +3,32 @@ import "c64" import "multiplexer" char * const CHARSET_DEFAULT = 0x1000; -char * const FONT = 0x2000; char * const SPRITES = 0x3000; char * const SCREEN = 0x0400; + +// Address of sprite pointers on screen char * const SCREEN_SPRITES = SCREEN + SPRITE_PTRS; -// Show raster time used -const char DEBUG = 0; +// Sprite pointer for sprite 0 +char SPRITE_0 = toSpritePtr(SPRITES); -//kickasm(pc FONT, resource "elefont.bin") {{ +//char FONT[0x0800] = kickasm(resource "elefont.bin") {{ // .import binary "elefont.bin" -//}} +//}}; + +char FONT[0x0800]; char align(0x100) YSIN[0x100] = kickasm {{ .fill $100, round(142+89.5*sin(toRadians(360*i/256))) }}; +char align(0x100) XMOVEMENT[0x200] = kickasm {{ + .lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100))) +}}; + +// The high-value table +char * const XMOVEMENT_HI = XMOVEMENT+0x100; + void main() { // Create 2x2 font from CHARGEN @@ -38,12 +48,9 @@ void main() { *D018 = toD018(SCREEN, CHARSET_DEFAULT); // Set the x-positions & pointers - unsigned int xp = 24; - char sprite = toSpritePtr(SPRITES); - for(char s: 0..PLEX_COUNT-1) { - PLEX_PTR[s] = sprite++; - PLEX_XPOS[s] = xp; - xp += 10; + for(char s=0, x=0;s(SCREEN&$3fff)*4)|(>CHARSET_DEFAULT)/4&$f - .label sprite = 4 - // Set the x-positions & pointers - .label xp = 2 + .label s = 2 + .label __13 = $14 // asm // Create 2x2 font from CHARGEN sei @@ -95,57 +98,37 @@ main: { // Show screen lda #toD0181_return sta D018 - lda #<$18 - sta.z xp - lda #>$18 - sta.z xp+1 ldx #0 - lda #toSpritePtr1_return - sta.z sprite - __b1: - // PLEX_PTR[s] = sprite++ - lda.z sprite - sta PLEX_PTR,x - // PLEX_PTR[s] = sprite++; - inc.z sprite - // PLEX_XPOS[s] = xp txa - asl - tay - lda.z xp - sta PLEX_XPOS,y - lda.z xp+1 - sta PLEX_XPOS+1,y - // xp += 10 - lda #$a - clc - adc.z xp - sta.z xp - bcc !+ - inc.z xp+1 - !: - // for(char s: 0..PLEX_COUNT-1) - inx - cpx #PLEX_COUNT-1+1 - bne __b1 + sta.z s + // Set the x-positions & pointers + __b1: + // for(char s=0, x=0;sSCROLL_TEXT + sta.z scroll_text_next+1 lda #0 sta.z sin_idx - jsr plexSine + jsr plex_move // plexSort() // Sort the sprites by y-position jsr plexSort @@ -179,25 +162,49 @@ main: { sta KERNEL_IRQ+1 // asm cli - __b5: - // while(!framedone) - lda.z framedone - cmp #0 - bne __b6 - jmp __b5 __b6: - // plexSine() + // while(!frame_done) + lda.z frame_done + cmp #0 + bne __b7 + jmp __b6 + __b7: + // frame_done = false + lda #0 + sta.z frame_done + // plex_move() //*BORDERCOL = RED; // Move the sprites - jsr plexSine + jsr plex_move // plexSort() // Sort the sprites by y-position jsr plexSort - // framedone = false - //*BORDERCOL = GREEN; - lda #0 - sta.z framedone - jmp __b5 + jmp __b6 + __b2: + // SPRITE_0+s + lda #toSpritePtr1_return + clc + adc.z s + // PLEX_PTR[s] = SPRITE_0+s + ldy.z s + sta PLEX_PTR,y + // PLEX_XPOS[s] = { XMOVEMENT_HI[x], XMOVEMENT[x] } + tya + asl + tay + lda XMOVEMENT_HI,x + sta.z __13+1 + lda XMOVEMENT,x + sta.z __13 + sta PLEX_XPOS,y + lda.z __13+1 + sta PLEX_XPOS+1,y + // x+=8 + txa + axs #-[8] + // for(char s=0, x=0;s$b*$20 + sta PLEX_XPOS+1,y + // if(*scroll_text_next==0) + ldy #0 + lda (scroll_text_next),y + cmp #0 + bne __b3 + lda #SCROLL_TEXT + sta.z scroll_text_next+1 + __b3: + // SPRITE_0+*scroll_text_next++ + lda #toSpritePtr1_return + clc + ldy #0 + adc (scroll_text_next),y + // PLEX_PTR[s] = SPRITE_0+*scroll_text_next++ + // Read next char from the scroll text + ldy.z s + sta PLEX_PTR,y + // PLEX_PTR[s] = SPRITE_0+*scroll_text_next++; + inc.z scroll_text_next + bne !+ + inc.z scroll_text_next+1 + !: + __b2: + // for(char s: 0..PLEX_COUNT-1) + inc.z s + lda #PLEX_COUNT-1+1 + cmp.z s bne __b1 // sin_idx +=1 inc.z sin_idx @@ -318,13 +372,13 @@ plexInit: { // - num_chars The number of chars to convert font_2x2_to_sprites: { .const num_chars = $40 - .label __3 = $18 + .label __3 = $17 .label char_right = $d .label sprite_idx = $a .label char_left = $b - .label char_current = 6 - .label sprite = 8 - .label c = 5 + .label char_current = 5 + .label sprite = 7 + .label c = 9 lda #SPRITES @@ -446,18 +500,18 @@ font_2x2_to_sprites: { // - 0x80 - 0xbf Lower left glyphs // - 0xc0 - 0xff Lower right glyphs font_2x2: { - .label __5 = $f - .label __7 = $f - .label next_2x2_left = 6 + .label __5 = $14 + .label __7 = $14 + .label next_2x2_left = 5 .label next_2x2_right = $d - .label glyph_bits = $18 - .label glyph_bits_2x2 = $f + .label glyph_bits = $16 + .label glyph_bits_2x2 = $14 .label l2 = $17 - .label l = $16 + .label l = $a .label next_2x2_left_1 = $b - .label next_2x2 = 6 - .label next_original = 8 - .label c = $a + .label next_2x2 = 5 + .label next_original = 7 + .label c = 9 lda #0 sta.z c lda # (word) font_2x2::glyph_bits_2x2#2 - [136] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12 - [137] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1 - [138] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12 - [139] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2 - [140] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15 - [141] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1 - [142] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15 - [143] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2 - [144] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8 + [146] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 + [147] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12 + [148] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1 + [149] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12 + [150] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2 + [151] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15 + [152] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1 + [153] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15 + [154] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2 + [155] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8 to:font_2x2::@7 font_2x2::@7: scope:[font_2x2] from font_2x2::@6 - [145] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8 - [146] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 + [156] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8 + [157] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 to:font_2x2::@8 font_2x2::@8: scope:[font_2x2] from font_2x2::@6 font_2x2::@7 - [147] (byte*) font_2x2::next_2x2_right#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_right#1 font_2x2::@6/(byte*) font_2x2::next_2x2_right#7 ) - [147] (byte) font_2x2::l2#9 ← phi( font_2x2::@7/(byte) 0 font_2x2::@6/(byte) font_2x2::l2#1 ) - [147] (byte*) font_2x2::next_2x2_left#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_left#1 font_2x2::@6/(byte*) font_2x2::next_2x2_left#7 ) - [148] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2 - [149] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2 + [158] (byte*) font_2x2::next_2x2_right#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_right#1 font_2x2::@6/(byte*) font_2x2::next_2x2_right#7 ) + [158] (byte) font_2x2::l2#9 ← phi( font_2x2::@7/(byte) 0 font_2x2::@6/(byte) font_2x2::l2#1 ) + [158] (byte*) font_2x2::next_2x2_left#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_left#1 font_2x2::@6/(byte*) font_2x2::next_2x2_left#7 ) + [159] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2 + [160] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2 to:font_2x2::@9 font_2x2::@9: scope:[font_2x2] from font_2x2::@8 - [150] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 - [151] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 - [152] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11 - [153] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1 + [161] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 + [162] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 + [163] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11 + [164] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1 to:font_2x2::@return font_2x2::@return: scope:[font_2x2] from font_2x2::@9 - [154] return + [165] return to:@return interrupt(KERNEL_MIN)(void()) plex_irq() @@ -314,77 +334,77 @@ plex_irq: scope:[plex_irq] from asm { sei } to:plex_irq::@3 plex_irq::@3: scope:[plex_irq] from plex_irq plex_irq::@7 - [156] phi() - [157] call plexShowSprite + [167] phi() + [168] call plexShowSprite to:plex_irq::plexFreeNextYpos1 plex_irq::plexFreeNextYpos1: scope:[plex_irq] from plex_irq::@3 - [158] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) + [169] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) to:plex_irq::@6 plex_irq::@6: scope:[plex_irq] from plex_irq::plexFreeNextYpos1 - [159] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 - [160] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 + [170] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 + [171] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 to:plex_irq::@7 plex_irq::@7: scope:[plex_irq] from plex_irq::@6 - [161] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3 + [172] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3 to:plex_irq::@4 plex_irq::@4: scope:[plex_irq] from plex_irq::@6 plex_irq::@7 - [162] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 + [173] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 to:plex_irq::@5 plex_irq::@5: scope:[plex_irq] from plex_irq::@4 - [163] *((const nomodify byte*) RASTER) ← (byte) $28 - [164] (volatile bool) framedone ← true + [174] *((const nomodify byte*) RASTER) ← (byte) $28 + [175] (volatile bool) frame_done ← true to:plex_irq::@2 plex_irq::@2: scope:[plex_irq] from plex_irq::@1 plex_irq::@5 - [165] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER + [176] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER asm { cli } to:plex_irq::@return plex_irq::@return: scope:[plex_irq] from plex_irq::@2 - [167] return + [178] return to:@return plex_irq::@1: scope:[plex_irq] from plex_irq::@4 - [168] *((const nomodify byte*) RASTER) ← (byte) plex_irq::plexFreeNextYpos1_return#0 + [179] *((const nomodify byte*) RASTER) ← (byte) plex_irq::plexFreeNextYpos1_return#0 to:plex_irq::@2 (void()) plexShowSprite() plexShowSprite: scope:[plexShowSprite] from plex_irq::@3 - [169] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 - [170] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) - [171] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + [180] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 + [181] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) + [182] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 to:plexShowSprite::plexFreeAdd1 plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite - [172] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 - [173] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 - [174] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (volatile byte) plex_free_next + (byte) 1 - [175] (byte~) plexShowSprite::plexFreeAdd1_$2 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 - [176] (volatile byte) plex_free_next ← (byte~) plexShowSprite::plexFreeAdd1_$2 + [183] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 + [184] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 + [185] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (volatile byte) plex_free_next + (byte) 1 + [186] (byte~) plexShowSprite::plexFreeAdd1_$2 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 + [187] (volatile byte) plex_free_next ← (byte~) plexShowSprite::plexFreeAdd1_$2 to:plexShowSprite::@5 plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 - [177] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) - [178] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) - [179] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 - [180] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) - [181] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 - [182] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) - [183] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 + [188] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) + [189] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) + [190] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 + [191] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) + [192] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 + [193] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) + [194] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 to:plexShowSprite::@3 plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@5 - [184] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb - [185] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 + [195] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb + [196] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 to:plexShowSprite::@2 plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3 - [186] (byte~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1 - [187] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7 - [188] (volatile byte) plex_sprite_idx ← (byte~) plexShowSprite::$6 - [189] (volatile byte) plex_show_idx ← ++ (volatile byte) plex_show_idx - [190] (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (byte) 1 - [191] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return + [197] (byte~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1 + [198] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7 + [199] (volatile byte) plex_sprite_idx ← (byte~) plexShowSprite::$6 + [200] (volatile byte) plex_show_idx ← ++ (volatile byte) plex_show_idx + [201] (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (byte) 1 + [202] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return to:plexShowSprite::@4 plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@2 - [192] (volatile byte) plex_sprite_msb ← (byte) 1 + [203] (volatile byte) plex_sprite_msb ← (byte) 1 to:plexShowSprite::@return plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4 - [193] return + [204] return to:@return plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5 - [194] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb + [205] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb to:plexShowSprite::@2 diff --git a/src/test/ref/complex/spritescroller/spritescroller.log b/src/test/ref/complex/spritescroller/spritescroller.log index 115479275..1634a64e9 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.log +++ b/src/test/ref/complex/spritescroller/spritescroller.log @@ -1,16 +1,18 @@ Resolved forward reference plex_irq to interrupt(KERNEL_MIN)(void()) plex_irq() -Resolved forward reference framedone to (volatile bool) framedone -Resolved forward reference framedone to (volatile bool) framedone +Resolved forward reference frame_done to (volatile bool) frame_done +Resolved forward reference frame_done to (volatile bool) frame_done Fixing pointer array-indexing *((const word*) PLEX_XPOS + (byte) plexShowSprite::xpos_idx) Fixing pointer array-indexing *((const word*) PLEX_XPOS + (byte) plexShowSprite::xpos_idx) Fixing pointer array-indexing *((const word*) PLEX_XPOS + (byte) main::s) +Fixing pointer array-indexing *((const word*) PLEX_XPOS + (byte) plex_move::s) +Fixing pointer array-indexing *((const word*) PLEX_XPOS + (byte) plex_move::s) Warning! Adding boolean cast to non-boolean condition (number~) font_2x2::$1 Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call plexSetScreen (byte*) plexInit::screen Inlined call call plexFreePrepare Inlined call call plexFreeAdd (byte) plexShowSprite::ypos +Inlined call (byte~) $0 ← call toSpritePtr (const nomodify byte*) SPRITES Inlined call (byte~) main::$3 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET_DEFAULT -Inlined call (byte~) main::$4 ← call toSpritePtr (const nomodify byte*) SPRITES Inlined call (byte~) plex_irq::$2 ← call plexFreeNextYpos Culled Empty Block (label) @1 Culled Empty Block (label) @2 @@ -28,18 +30,20 @@ Culled Empty Block (label) plexShowSprite::@3 Culled Empty Block (label) @8 Culled Empty Block (label) @10 Culled Empty Block (label) @11 -Culled Empty Block (label) @12 +Culled Empty Block (label) toSpritePtr1_@1 Culled Empty Block (label) main::toD0181_@1 -Culled Empty Block (label) main::toSpritePtr1_@1 +Culled Empty Block (label) main::@4 +Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@6 -Culled Empty Block (label) main::@15 -Culled Empty Block (label) main::@7 -Culled Empty Block (label) main::@16 -Culled Empty Block (label) main::@9 +Culled Empty Block (label) main::@10 +Culled Empty Block (label) main::@19 Culled Empty Block (label) main::@11 -Culled Empty Block (label) main::@12 +Culled Empty Block (label) main::@20 Culled Empty Block (label) main::@13 -Culled Empty Block (label) main::@14 +Culled Empty Block (label) main::@15 +Culled Empty Block (label) main::@16 +Culled Empty Block (label) main::@17 +Culled Empty Block (label) main::@18 Culled Empty Block (label) plex_irq::plexFreeNextYpos1_@1 Culled Empty Block (label) plex_irq::@6 Culled Empty Block (label) @15 @@ -65,8 +69,8 @@ CONTROL FLOW GRAPH SSA to:@9 (void()) plexInit((byte*) plexInit::screen) -plexInit: scope:[plexInit] from main::@20 - (byte*) plexInit::screen#1 ← phi( main::@20/(byte*) plexInit::screen#0 ) +plexInit: scope:[plexInit] from main::@23 + (byte*) plexInit::screen#1 ← phi( main::@23/(byte*) plexInit::screen#0 ) (byte*) plexInit::plexSetScreen1_screen#0 ← (byte*) plexInit::screen#1 to:plexInit::plexSetScreen1 plexInit::plexSetScreen1: scope:[plexInit] from plexInit @@ -93,7 +97,7 @@ plexInit::@return: scope:[plexInit] from plexInit::@1 to:@return (void()) plexSort() -plexSort: scope:[plexSort] from main::@22 main::@24 +plexSort: scope:[plexSort] from main::@25 main::@27 (byte) plexSort::m#0 ← (byte) 0 to:plexSort::@1 plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 @@ -215,48 +219,81 @@ plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexSho return to:@return @9: scope:[] from @4 - (byte*) PLEX_SCREEN_PTR#29 ← phi( @4/(byte*) PLEX_SCREEN_PTR#0 ) + (byte*) PLEX_SCREEN_PTR#42 ← phi( @4/(byte*) PLEX_SCREEN_PTR#0 ) (volatile byte) plex_free_next ← (byte) 0 + to:@12 +@12: scope:[] from @9 + (byte*) PLEX_SCREEN_PTR#39 ← phi( @9/(byte*) PLEX_SCREEN_PTR#42 ) + (byte*) toSpritePtr1_sprite#0 ← (const nomodify byte*) SPRITES + to:toSpritePtr1 +toSpritePtr1: scope:[] from @12 + (byte*) PLEX_SCREEN_PTR#36 ← phi( @12/(byte*) PLEX_SCREEN_PTR#39 ) + (byte*) toSpritePtr1_sprite#1 ← phi( @12/(byte*) toSpritePtr1_sprite#0 ) + (word~) toSpritePtr1_$0 ← ((word)) (byte*) toSpritePtr1_sprite#1 + (number~) toSpritePtr1_$1 ← (word~) toSpritePtr1_$0 / (number) $40 + (byte~) toSpritePtr1_$2 ← ((byte)) (number~) toSpritePtr1_$1 + (byte) toSpritePtr1_return#0 ← (byte~) toSpritePtr1_$2 + to:toSpritePtr1_@return +toSpritePtr1_@return: scope:[] from toSpritePtr1 + (byte*) PLEX_SCREEN_PTR#32 ← phi( toSpritePtr1/(byte*) PLEX_SCREEN_PTR#36 ) + (byte) toSpritePtr1_return#2 ← phi( toSpritePtr1/(byte) toSpritePtr1_return#0 ) + (byte) toSpritePtr1_return#1 ← (byte) toSpritePtr1_return#2 + to:@18 +@18: scope:[] from toSpritePtr1_@return + (byte*) PLEX_SCREEN_PTR#29 ← phi( toSpritePtr1_@return/(byte*) PLEX_SCREEN_PTR#32 ) + (byte) toSpritePtr1_return#3 ← phi( toSpritePtr1_@return/(byte) toSpritePtr1_return#1 ) + (byte~) $0 ← (byte) toSpritePtr1_return#3 + (byte) SPRITE_0#0 ← (byte~) $0 to:@13 (void()) main() main: scope:[main] from @17 - (byte) sin_idx#35 ← phi( @17/(byte) sin_idx#18 ) + (byte) sin_idx#37 ← phi( @17/(byte) sin_idx#18 ) + (byte*) scroll_text_next#37 ← phi( @17/(byte*) scroll_text_next#20 ) + (byte) SPRITE_0#23 ← phi( @17/(byte) SPRITE_0#26 ) (byte*) PLEX_SCREEN_PTR#23 ← phi( @17/(byte*) PLEX_SCREEN_PTR#15 ) asm { sei } *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM (byte*) font_2x2::font_original#0 ← (const nomodify byte*) CHARGEN - (byte*) font_2x2::font_2x2#0 ← (const nomodify byte*) FONT + (byte*) font_2x2::font_2x2#0 ← (const byte*) FONT call font_2x2 - to:main::@19 -main::@19: scope:[main] from main - (byte) sin_idx#34 ← phi( main/(byte) sin_idx#35 ) + to:main::@22 +main::@22: scope:[main] from main + (byte) sin_idx#36 ← phi( main/(byte) sin_idx#37 ) + (byte*) scroll_text_next#36 ← phi( main/(byte*) scroll_text_next#37 ) + (byte) SPRITE_0#20 ← phi( main/(byte) SPRITE_0#23 ) (byte*) PLEX_SCREEN_PTR#18 ← phi( main/(byte*) PLEX_SCREEN_PTR#23 ) *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO asm { cli } - (byte*) font_2x2_to_sprites::font_2x2#0 ← (const nomodify byte*) FONT + (byte*) font_2x2_to_sprites::font_2x2#0 ← (const byte*) FONT (byte*) font_2x2_to_sprites::sprites#0 ← (const nomodify byte*) SPRITES (byte) font_2x2_to_sprites::num_chars#0 ← (number) $40 call font_2x2_to_sprites - to:main::@20 -main::@20: scope:[main] from main::@19 - (byte) sin_idx#33 ← phi( main::@19/(byte) sin_idx#34 ) - (byte*) PLEX_SCREEN_PTR#13 ← phi( main::@19/(byte*) PLEX_SCREEN_PTR#18 ) + to:main::@23 +main::@23: scope:[main] from main::@22 + (byte) sin_idx#35 ← phi( main::@22/(byte) sin_idx#36 ) + (byte*) scroll_text_next#35 ← phi( main::@22/(byte*) scroll_text_next#36 ) + (byte) SPRITE_0#17 ← phi( main::@22/(byte) SPRITE_0#20 ) + (byte*) PLEX_SCREEN_PTR#13 ← phi( main::@22/(byte*) PLEX_SCREEN_PTR#18 ) (byte*) plexInit::screen#0 ← (const nomodify byte*) SCREEN call plexInit - to:main::@21 -main::@21: scope:[main] from main::@20 - (byte) sin_idx#32 ← phi( main::@20/(byte) sin_idx#33 ) - (byte*) PLEX_SCREEN_PTR#8 ← phi( main::@20/(byte*) PLEX_SCREEN_PTR#2 ) + to:main::@24 +main::@24: scope:[main] from main::@23 + (byte) sin_idx#34 ← phi( main::@23/(byte) sin_idx#35 ) + (byte*) scroll_text_next#34 ← phi( main::@23/(byte*) scroll_text_next#35 ) + (byte) SPRITE_0#14 ← phi( main::@23/(byte) SPRITE_0#17 ) + (byte*) PLEX_SCREEN_PTR#8 ← phi( main::@23/(byte*) PLEX_SCREEN_PTR#2 ) (byte*) PLEX_SCREEN_PTR#3 ← (byte*) PLEX_SCREEN_PTR#8 (byte*) main::toD0181_screen#0 ← (const nomodify byte*) SCREEN (byte*) main::toD0181_gfx#0 ← (const nomodify byte*) CHARSET_DEFAULT to:main::toD0181 -main::toD0181: scope:[main] from main::@21 - (byte*) PLEX_SCREEN_PTR#44 ← phi( main::@21/(byte*) PLEX_SCREEN_PTR#3 ) - (byte) sin_idx#31 ← phi( main::@21/(byte) sin_idx#32 ) - (byte*) main::toD0181_gfx#1 ← phi( main::@21/(byte*) main::toD0181_gfx#0 ) - (byte*) main::toD0181_screen#1 ← phi( main::@21/(byte*) main::toD0181_screen#0 ) +main::toD0181: scope:[main] from main::@24 + (byte*) PLEX_SCREEN_PTR#46 ← phi( main::@24/(byte*) PLEX_SCREEN_PTR#3 ) + (byte) sin_idx#33 ← phi( main::@24/(byte) sin_idx#34 ) + (byte*) scroll_text_next#33 ← phi( main::@24/(byte*) scroll_text_next#34 ) + (byte) SPRITE_0#11 ← phi( main::@24/(byte) SPRITE_0#14 ) + (byte*) main::toD0181_gfx#1 ← phi( main::@24/(byte*) main::toD0181_gfx#0 ) + (byte*) main::toD0181_screen#1 ← phi( main::@24/(byte*) main::toD0181_screen#0 ) (word~) main::toD0181_$0 ← ((word)) (byte*) main::toD0181_screen#1 (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (number) $3fff (number~) main::toD0181_$2 ← (number~) main::toD0181_$1 * (number) 4 @@ -269,90 +306,88 @@ main::toD0181: scope:[main] from main::@21 (byte) main::toD0181_return#0 ← (number~) main::toD0181_$8 to:main::toD0181_@return main::toD0181_@return: scope:[main] from main::toD0181 - (byte*) PLEX_SCREEN_PTR#43 ← phi( main::toD0181/(byte*) PLEX_SCREEN_PTR#44 ) - (byte) sin_idx#30 ← phi( main::toD0181/(byte) sin_idx#31 ) + (byte*) PLEX_SCREEN_PTR#45 ← phi( main::toD0181/(byte*) PLEX_SCREEN_PTR#46 ) + (byte) sin_idx#32 ← phi( main::toD0181/(byte) sin_idx#33 ) + (byte*) scroll_text_next#32 ← phi( main::toD0181/(byte*) scroll_text_next#33 ) + (byte) SPRITE_0#8 ← phi( main::toD0181/(byte) SPRITE_0#11 ) (byte) main::toD0181_return#2 ← phi( main::toD0181/(byte) main::toD0181_return#0 ) (byte) main::toD0181_return#1 ← (byte) main::toD0181_return#2 - to:main::@17 -main::@17: scope:[main] from main::toD0181_@return - (byte*) PLEX_SCREEN_PTR#42 ← phi( main::toD0181_@return/(byte*) PLEX_SCREEN_PTR#43 ) - (byte) sin_idx#29 ← phi( main::toD0181_@return/(byte) sin_idx#30 ) + to:main::@21 +main::@21: scope:[main] from main::toD0181_@return + (byte*) PLEX_SCREEN_PTR#44 ← phi( main::toD0181_@return/(byte*) PLEX_SCREEN_PTR#45 ) + (byte) sin_idx#31 ← phi( main::toD0181_@return/(byte) sin_idx#32 ) + (byte*) scroll_text_next#31 ← phi( main::toD0181_@return/(byte*) scroll_text_next#32 ) + (byte) SPRITE_0#6 ← phi( main::toD0181_@return/(byte) SPRITE_0#8 ) (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 ) (byte~) main::$3 ← (byte) main::toD0181_return#3 *((const nomodify byte*) D018) ← (byte~) main::$3 - (word) main::xp#0 ← (word) $18 - (byte*) main::toSpritePtr1_sprite#0 ← (const nomodify byte*) SPRITES - to:main::toSpritePtr1 -main::toSpritePtr1: scope:[main] from main::@17 - (byte*) PLEX_SCREEN_PTR#41 ← phi( main::@17/(byte*) PLEX_SCREEN_PTR#42 ) - (byte) sin_idx#28 ← phi( main::@17/(byte) sin_idx#29 ) - (word) main::xp#5 ← phi( main::@17/(word) main::xp#0 ) - (byte*) main::toSpritePtr1_sprite#1 ← phi( main::@17/(byte*) main::toSpritePtr1_sprite#0 ) - (word~) main::toSpritePtr1_$0 ← ((word)) (byte*) main::toSpritePtr1_sprite#1 - (number~) main::toSpritePtr1_$1 ← (word~) main::toSpritePtr1_$0 / (number) $40 - (byte~) main::toSpritePtr1_$2 ← ((byte)) (number~) main::toSpritePtr1_$1 - (byte) main::toSpritePtr1_return#0 ← (byte~) main::toSpritePtr1_$2 - to:main::toSpritePtr1_@return -main::toSpritePtr1_@return: scope:[main] from main::toSpritePtr1 - (byte*) PLEX_SCREEN_PTR#40 ← phi( main::toSpritePtr1/(byte*) PLEX_SCREEN_PTR#41 ) - (byte) sin_idx#27 ← phi( main::toSpritePtr1/(byte) sin_idx#28 ) - (word) main::xp#4 ← phi( main::toSpritePtr1/(word) main::xp#5 ) - (byte) main::toSpritePtr1_return#2 ← phi( main::toSpritePtr1/(byte) main::toSpritePtr1_return#0 ) - (byte) main::toSpritePtr1_return#1 ← (byte) main::toSpritePtr1_return#2 - to:main::@18 -main::@18: scope:[main] from main::toSpritePtr1_@return - (byte*) PLEX_SCREEN_PTR#39 ← phi( main::toSpritePtr1_@return/(byte*) PLEX_SCREEN_PTR#40 ) - (byte) sin_idx#26 ← phi( main::toSpritePtr1_@return/(byte) sin_idx#27 ) - (word) main::xp#3 ← phi( main::toSpritePtr1_@return/(word) main::xp#4 ) - (byte) main::toSpritePtr1_return#3 ← phi( main::toSpritePtr1_@return/(byte) main::toSpritePtr1_return#1 ) - (byte~) main::$4 ← (byte) main::toSpritePtr1_return#3 - (byte) main::sprite#0 ← (byte~) main::$4 (byte) main::s#0 ← (byte) 0 + (byte) main::x#0 ← (byte) 0 to:main::@1 -main::@1: scope:[main] from main::@1 main::@18 - (byte*) PLEX_SCREEN_PTR#37 ← phi( main::@1/(byte*) PLEX_SCREEN_PTR#37 main::@18/(byte*) PLEX_SCREEN_PTR#39 ) - (byte) sin_idx#25 ← phi( main::@1/(byte) sin_idx#25 main::@18/(byte) sin_idx#26 ) - (word) main::xp#2 ← phi( main::@1/(word) main::xp#1 main::@18/(word) main::xp#3 ) - (byte) main::s#2 ← phi( main::@1/(byte) main::s#1 main::@18/(byte) main::s#0 ) - (byte) main::sprite#2 ← phi( main::@1/(byte) main::sprite#1 main::@18/(byte) main::sprite#0 ) - *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte) main::sprite#2 - (byte) main::sprite#1 ← ++ (byte) main::sprite#2 - (byte~) main::$12 ← (byte) main::s#2 * (const byte) SIZEOF_WORD - *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word) main::xp#2 - (word) main::xp#1 ← (word) main::xp#2 + (number) $a - (byte) main::s#1 ← (byte) main::s#2 + rangenext(0,PLEX_COUNT-1) - (bool~) main::$7 ← (byte) main::s#1 != rangelast(0,PLEX_COUNT-1) - if((bool~) main::$7) goto main::@1 - to:main::@2 +main::@1: scope:[main] from main::@2 main::@21 + (byte*) PLEX_SCREEN_PTR#40 ← phi( main::@2/(byte*) PLEX_SCREEN_PTR#43 main::@21/(byte*) PLEX_SCREEN_PTR#44 ) + (byte) sin_idx#29 ← phi( main::@2/(byte) sin_idx#30 main::@21/(byte) sin_idx#31 ) + (byte*) scroll_text_next#29 ← phi( main::@2/(byte*) scroll_text_next#30 main::@21/(byte*) scroll_text_next#31 ) + (byte) main::x#3 ← phi( main::@2/(byte) main::x#1 main::@21/(byte) main::x#0 ) + (byte) SPRITE_0#3 ← phi( main::@2/(byte) SPRITE_0#1 main::@21/(byte) SPRITE_0#6 ) + (byte) main::s#2 ← phi( main::@2/(byte) main::s#1 main::@21/(byte) main::s#0 ) + (bool~) main::$6 ← (byte) main::s#2 < (const nomodify byte) PLEX_COUNT + if((bool~) main::$6) goto main::@2 + to:main::@3 main::@2: scope:[main] from main::@1 - (byte*) PLEX_SCREEN_PTR#35 ← phi( main::@1/(byte*) PLEX_SCREEN_PTR#37 ) - (byte) sin_idx#24 ← phi( main::@1/(byte) sin_idx#25 ) + (byte*) PLEX_SCREEN_PTR#43 ← phi( main::@1/(byte*) PLEX_SCREEN_PTR#40 ) + (byte) sin_idx#30 ← phi( main::@1/(byte) sin_idx#29 ) + (byte*) scroll_text_next#30 ← phi( main::@1/(byte*) scroll_text_next#29 ) + (byte) main::x#2 ← phi( main::@1/(byte) main::x#3 ) + (byte) main::s#3 ← phi( main::@1/(byte) main::s#2 ) + (byte) SPRITE_0#1 ← phi( main::@1/(byte) SPRITE_0#3 ) + (byte~) main::$7 ← (byte) SPRITE_0#1 + (byte) main::s#3 + *((const byte*) PLEX_PTR + (byte) main::s#3) ← (byte~) main::$7 + (byte~) main::$12 ← (byte) main::s#3 * (const byte) SIZEOF_WORD + *((const word*) PLEX_XPOS + (byte~) main::$12) ← ((word)) { *((const nomodify byte*) XMOVEMENT_HI + (byte) main::x#2), *((const byte*) XMOVEMENT + (byte) main::x#2) } + (byte) main::x#1 ← (byte) main::x#2 + (number) 8 + (byte) main::s#1 ← ++ (byte) main::s#3 + to:main::@1 +main::@3: scope:[main] from main::@1 + (byte) SPRITE_0#18 ← phi( main::@1/(byte) SPRITE_0#3 ) + (byte*) PLEX_SCREEN_PTR#37 ← phi( main::@1/(byte*) PLEX_SCREEN_PTR#40 ) + (byte) sin_idx#26 ← phi( main::@1/(byte) sin_idx#29 ) + (byte*) scroll_text_next#28 ← phi( main::@1/(byte*) scroll_text_next#29 ) *((const nomodify byte*) SPRITES_ENABLE) ← (number) $ff (byte) main::s1#0 ← (byte) 0 - to:main::@3 -main::@3: scope:[main] from main::@2 main::@3 - (byte*) PLEX_SCREEN_PTR#32 ← phi( main::@2/(byte*) PLEX_SCREEN_PTR#35 main::@3/(byte*) PLEX_SCREEN_PTR#32 ) - (byte) sin_idx#19 ← phi( main::@2/(byte) sin_idx#24 main::@3/(byte) sin_idx#19 ) - (byte) main::s1#2 ← phi( main::@2/(byte) main::s1#0 main::@3/(byte) main::s1#1 ) + to:main::@7 +main::@7: scope:[main] from main::@3 main::@7 + (byte) SPRITE_0#15 ← phi( main::@3/(byte) SPRITE_0#18 main::@7/(byte) SPRITE_0#15 ) + (byte*) PLEX_SCREEN_PTR#33 ← phi( main::@3/(byte*) PLEX_SCREEN_PTR#37 main::@7/(byte*) PLEX_SCREEN_PTR#33 ) + (byte) sin_idx#19 ← phi( main::@3/(byte) sin_idx#26 main::@7/(byte) sin_idx#19 ) + (byte*) scroll_text_next#21 ← phi( main::@3/(byte*) scroll_text_next#28 main::@7/(byte*) scroll_text_next#21 ) + (byte) main::s1#2 ← phi( main::@3/(byte) main::s1#0 main::@7/(byte) main::s1#1 ) *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE (byte) main::s1#1 ← (byte) main::s1#2 + rangenext(0,7) (bool~) main::$8 ← (byte) main::s1#1 != rangelast(0,7) - if((bool~) main::$8) goto main::@3 - to:main::@4 -main::@4: scope:[main] from main::@3 - (byte*) PLEX_SCREEN_PTR#27 ← phi( main::@3/(byte*) PLEX_SCREEN_PTR#32 ) - (byte) sin_idx#14 ← phi( main::@3/(byte) sin_idx#19 ) - call plexSine - to:main::@22 -main::@22: scope:[main] from main::@4 - (byte*) PLEX_SCREEN_PTR#24 ← phi( main::@4/(byte*) PLEX_SCREEN_PTR#27 ) - (byte) sin_idx#7 ← phi( main::@4/(byte) sin_idx#5 ) + if((bool~) main::$8) goto main::@7 + to:main::@8 +main::@8: scope:[main] from main::@7 + (byte) SPRITE_0#13 ← phi( main::@7/(byte) SPRITE_0#15 ) + (byte*) PLEX_SCREEN_PTR#27 ← phi( main::@7/(byte*) PLEX_SCREEN_PTR#33 ) + (byte) sin_idx#14 ← phi( main::@7/(byte) sin_idx#19 ) + (byte*) scroll_text_next#15 ← phi( main::@7/(byte*) scroll_text_next#21 ) + call plex_move + to:main::@25 +main::@25: scope:[main] from main::@8 + (byte) SPRITE_0#24 ← phi( main::@8/(byte) SPRITE_0#13 ) + (byte*) PLEX_SCREEN_PTR#24 ← phi( main::@8/(byte*) PLEX_SCREEN_PTR#27 ) + (byte) sin_idx#7 ← phi( main::@8/(byte) sin_idx#5 ) + (byte*) scroll_text_next#8 ← phi( main::@8/(byte*) scroll_text_next#6 ) + (byte*) scroll_text_next#0 ← (byte*) scroll_text_next#8 (byte) sin_idx#0 ← (byte) sin_idx#7 call plexSort - to:main::@23 -main::@23: scope:[main] from main::@22 - (byte) sin_idx#20 ← phi( main::@22/(byte) sin_idx#0 ) - (byte*) PLEX_SCREEN_PTR#19 ← phi( main::@22/(byte*) PLEX_SCREEN_PTR#24 ) + to:main::@26 +main::@26: scope:[main] from main::@25 + (byte) SPRITE_0#21 ← phi( main::@25/(byte) SPRITE_0#24 ) + (byte) sin_idx#20 ← phi( main::@25/(byte) sin_idx#0 ) + (byte*) scroll_text_next#22 ← phi( main::@25/(byte*) scroll_text_next#0 ) + (byte*) PLEX_SCREEN_PTR#19 ← phi( main::@25/(byte*) PLEX_SCREEN_PTR#24 ) asm { sei } *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (number) $7f @@ -361,75 +396,139 @@ main::@23: scope:[main] from main::@22 *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() asm { cli } - to:main::@5 -main::@5: scope:[main] from main::@23 main::@25 - (byte) sin_idx#16 ← phi( main::@23/(byte) sin_idx#20 main::@25/(byte) sin_idx#21 ) - (byte*) PLEX_SCREEN_PTR#14 ← phi( main::@23/(byte*) PLEX_SCREEN_PTR#19 main::@25/(byte*) PLEX_SCREEN_PTR#20 ) - if(true) goto main::@8 + to:main::@9 +main::@9: scope:[main] from main::@26 main::@28 + (byte) SPRITE_0#19 ← phi( main::@26/(byte) SPRITE_0#21 main::@28/(byte) SPRITE_0#22 ) + (byte) sin_idx#16 ← phi( main::@26/(byte) sin_idx#20 main::@28/(byte) sin_idx#21 ) + (byte*) scroll_text_next#17 ← phi( main::@26/(byte*) scroll_text_next#22 main::@28/(byte*) scroll_text_next#23 ) + (byte*) PLEX_SCREEN_PTR#14 ← phi( main::@26/(byte*) PLEX_SCREEN_PTR#19 main::@28/(byte*) PLEX_SCREEN_PTR#20 ) + if(true) goto main::@12 to:main::@return -main::@8: scope:[main] from main::@5 main::@8 - (byte*) PLEX_SCREEN_PTR#33 ← phi( main::@5/(byte*) PLEX_SCREEN_PTR#14 main::@8/(byte*) PLEX_SCREEN_PTR#33 ) - (byte) sin_idx#22 ← phi( main::@5/(byte) sin_idx#16 main::@8/(byte) sin_idx#22 ) - (bool~) main::$9 ← ! (volatile bool) framedone - if((bool~) main::$9) goto main::@8 - to:main::@10 -main::@10: scope:[main] from main::@8 - (byte*) PLEX_SCREEN_PTR#28 ← phi( main::@8/(byte*) PLEX_SCREEN_PTR#33 ) - (byte) sin_idx#15 ← phi( main::@8/(byte) sin_idx#22 ) - call plexSine - to:main::@24 -main::@24: scope:[main] from main::@10 - (byte*) PLEX_SCREEN_PTR#25 ← phi( main::@10/(byte*) PLEX_SCREEN_PTR#28 ) - (byte) sin_idx#8 ← phi( main::@10/(byte) sin_idx#5 ) +main::@12: scope:[main] from main::@12 main::@9 + (byte) SPRITE_0#16 ← phi( main::@12/(byte) SPRITE_0#16 main::@9/(byte) SPRITE_0#19 ) + (byte*) PLEX_SCREEN_PTR#34 ← phi( main::@12/(byte*) PLEX_SCREEN_PTR#34 main::@9/(byte*) PLEX_SCREEN_PTR#14 ) + (byte) sin_idx#22 ← phi( main::@12/(byte) sin_idx#22 main::@9/(byte) sin_idx#16 ) + (byte*) scroll_text_next#24 ← phi( main::@12/(byte*) scroll_text_next#24 main::@9/(byte*) scroll_text_next#17 ) + (bool~) main::$9 ← ! (volatile bool) frame_done + if((bool~) main::$9) goto main::@12 + to:main::@14 +main::@14: scope:[main] from main::@12 + (byte) SPRITE_0#12 ← phi( main::@12/(byte) SPRITE_0#16 ) + (byte*) PLEX_SCREEN_PTR#28 ← phi( main::@12/(byte*) PLEX_SCREEN_PTR#34 ) + (byte) sin_idx#15 ← phi( main::@12/(byte) sin_idx#22 ) + (byte*) scroll_text_next#16 ← phi( main::@12/(byte*) scroll_text_next#24 ) + (volatile bool) frame_done ← false + call plex_move + to:main::@27 +main::@27: scope:[main] from main::@14 + (byte) SPRITE_0#25 ← phi( main::@14/(byte) SPRITE_0#12 ) + (byte*) PLEX_SCREEN_PTR#25 ← phi( main::@14/(byte*) PLEX_SCREEN_PTR#28 ) + (byte) sin_idx#8 ← phi( main::@14/(byte) sin_idx#5 ) + (byte*) scroll_text_next#9 ← phi( main::@14/(byte*) scroll_text_next#6 ) + (byte*) scroll_text_next#1 ← (byte*) scroll_text_next#9 (byte) sin_idx#1 ← (byte) sin_idx#8 call plexSort - to:main::@25 -main::@25: scope:[main] from main::@24 - (byte) sin_idx#21 ← phi( main::@24/(byte) sin_idx#1 ) - (byte*) PLEX_SCREEN_PTR#20 ← phi( main::@24/(byte*) PLEX_SCREEN_PTR#25 ) - (volatile bool) framedone ← false - to:main::@5 -main::@return: scope:[main] from main::@5 - (byte) sin_idx#9 ← phi( main::@5/(byte) sin_idx#16 ) - (byte*) PLEX_SCREEN_PTR#9 ← phi( main::@5/(byte*) PLEX_SCREEN_PTR#14 ) + to:main::@28 +main::@28: scope:[main] from main::@27 + (byte) SPRITE_0#22 ← phi( main::@27/(byte) SPRITE_0#25 ) + (byte) sin_idx#21 ← phi( main::@27/(byte) sin_idx#1 ) + (byte*) scroll_text_next#23 ← phi( main::@27/(byte*) scroll_text_next#1 ) + (byte*) PLEX_SCREEN_PTR#20 ← phi( main::@27/(byte*) PLEX_SCREEN_PTR#25 ) + to:main::@9 +main::@return: scope:[main] from main::@9 + (byte) sin_idx#9 ← phi( main::@9/(byte) sin_idx#16 ) + (byte*) scroll_text_next#10 ← phi( main::@9/(byte*) scroll_text_next#17 ) + (byte*) PLEX_SCREEN_PTR#9 ← phi( main::@9/(byte*) PLEX_SCREEN_PTR#14 ) (byte*) PLEX_SCREEN_PTR#4 ← (byte*) PLEX_SCREEN_PTR#9 + (byte*) scroll_text_next#2 ← (byte*) scroll_text_next#10 (byte) sin_idx#2 ← (byte) sin_idx#9 return to:@return -@13: scope:[] from @9 - (byte*) PLEX_SCREEN_PTR#26 ← phi( @9/(byte*) PLEX_SCREEN_PTR#29 ) +@13: scope:[] from @18 + (byte) SPRITE_0#28 ← phi( @18/(byte) SPRITE_0#0 ) + (byte*) PLEX_SCREEN_PTR#26 ← phi( @18/(byte*) PLEX_SCREEN_PTR#29 ) + (byte*) scroll_text_next#3 ← (const byte*) SCROLL_TEXT (byte) sin_idx#3 ← (byte) 0 to:@14 -(void()) plexSine() -plexSine: scope:[plexSine] from main::@10 main::@4 - (byte) sin_idx#10 ← phi( main::@10/(byte) sin_idx#15 main::@4/(byte) sin_idx#14 ) - (byte) plexSine::y_idx#0 ← (byte) sin_idx#10 - (byte) plexSine::sy#0 ← (byte) 0 - to:plexSine::@1 -plexSine::@1: scope:[plexSine] from plexSine plexSine::@1 - (byte) sin_idx#17 ← phi( plexSine/(byte) sin_idx#10 plexSine::@1/(byte) sin_idx#17 ) - (byte) plexSine::sy#2 ← phi( plexSine/(byte) plexSine::sy#0 plexSine::@1/(byte) plexSine::sy#1 ) - (byte) plexSine::y_idx#2 ← phi( plexSine/(byte) plexSine::y_idx#0 plexSine::@1/(byte) plexSine::y_idx#1 ) - *((const byte*) PLEX_YPOS + (byte) plexSine::sy#2) ← *((const byte*) YSIN + (byte) plexSine::y_idx#2) - (byte) plexSine::y_idx#1 ← (byte) plexSine::y_idx#2 + (number) 8 - (byte) plexSine::sy#1 ← (byte) plexSine::sy#2 + rangenext(0,PLEX_COUNT-1) - (bool~) plexSine::$0 ← (byte) plexSine::sy#1 != rangelast(0,PLEX_COUNT-1) - if((bool~) plexSine::$0) goto plexSine::@1 - to:plexSine::@2 -plexSine::@2: scope:[plexSine] from plexSine::@1 - (byte) sin_idx#11 ← phi( plexSine::@1/(byte) sin_idx#17 ) +(void()) plex_move() +plex_move: scope:[plex_move] from main::@14 main::@8 + (byte) SPRITE_0#9 ← phi( main::@14/(byte) SPRITE_0#12 main::@8/(byte) SPRITE_0#13 ) + (byte*) scroll_text_next#25 ← phi( main::@14/(byte*) scroll_text_next#16 main::@8/(byte*) scroll_text_next#15 ) + (byte) sin_idx#10 ← phi( main::@14/(byte) sin_idx#15 main::@8/(byte) sin_idx#14 ) + (byte) plex_move::y_idx#0 ← (byte) sin_idx#10 + (byte) plex_move::s#0 ← (byte) 0 + to:plex_move::@1 +plex_move::@1: scope:[plex_move] from plex_move plex_move::@2 + (byte) SPRITE_0#7 ← phi( plex_move/(byte) SPRITE_0#9 plex_move::@2/(byte) SPRITE_0#10 ) + (byte) sin_idx#23 ← phi( plex_move/(byte) sin_idx#10 plex_move::@2/(byte) sin_idx#17 ) + (byte*) scroll_text_next#18 ← phi( plex_move/(byte*) scroll_text_next#25 plex_move::@2/(byte*) scroll_text_next#26 ) + (byte) plex_move::s#2 ← phi( plex_move/(byte) plex_move::s#0 plex_move::@2/(byte) plex_move::s#1 ) + (byte) plex_move::y_idx#2 ← phi( plex_move/(byte) plex_move::y_idx#0 plex_move::@2/(byte) plex_move::y_idx#3 ) + *((const byte*) PLEX_YPOS + (byte) plex_move::s#2) ← *((const byte*) YSIN + (byte) plex_move::y_idx#2) + (byte) plex_move::y_idx#1 ← (byte) plex_move::y_idx#2 + (number) 8 + (byte~) plex_move::$6 ← (byte) plex_move::s#2 * (const byte) SIZEOF_WORD + (bool~) plex_move::$0 ← *((const word*) PLEX_XPOS + (byte~) plex_move::$6) == (number) 0 + (bool~) plex_move::$1 ← ! (bool~) plex_move::$0 + if((bool~) plex_move::$1) goto plex_move::@2 + to:plex_move::@4 +plex_move::@2: scope:[plex_move] from plex_move::@1 plex_move::@3 + (byte) SPRITE_0#10 ← phi( plex_move::@1/(byte) SPRITE_0#7 plex_move::@3/(byte) SPRITE_0#2 ) + (byte*) scroll_text_next#26 ← phi( plex_move::@1/(byte*) scroll_text_next#18 plex_move::@3/(byte*) scroll_text_next#4 ) + (byte) sin_idx#17 ← phi( plex_move::@1/(byte) sin_idx#23 plex_move::@3/(byte) sin_idx#24 ) + (byte) plex_move::y_idx#3 ← phi( plex_move::@1/(byte) plex_move::y_idx#1 plex_move::@3/(byte) plex_move::y_idx#4 ) + (byte) plex_move::s#3 ← phi( plex_move::@1/(byte) plex_move::s#2 plex_move::@3/(byte) plex_move::s#5 ) + (byte) plex_move::s#1 ← (byte) plex_move::s#3 + rangenext(0,PLEX_COUNT-1) + (bool~) plex_move::$5 ← (byte) plex_move::s#1 != rangelast(0,PLEX_COUNT-1) + if((bool~) plex_move::$5) goto plex_move::@1 + to:plex_move::@6 +plex_move::@4: scope:[plex_move] from plex_move::@1 + (byte) sin_idx#27 ← phi( plex_move::@1/(byte) sin_idx#23 ) + (byte) plex_move::y_idx#5 ← phi( plex_move::@1/(byte) plex_move::y_idx#1 ) + (byte) SPRITE_0#4 ← phi( plex_move::@1/(byte) SPRITE_0#7 ) + (byte*) scroll_text_next#11 ← phi( plex_move::@1/(byte*) scroll_text_next#18 ) + (byte) plex_move::s#4 ← phi( plex_move::@1/(byte) plex_move::s#2 ) + (byte~) plex_move::$7 ← (byte) plex_move::s#4 * (const byte) SIZEOF_WORD + *((const word*) PLEX_XPOS + (byte~) plex_move::$7) ← (number) $b*(number) $20 + (bool~) plex_move::$2 ← *((byte*) scroll_text_next#11) == (number) 0 + (bool~) plex_move::$3 ← ! (bool~) plex_move::$2 + if((bool~) plex_move::$3) goto plex_move::@3 + to:plex_move::@5 +plex_move::@3: scope:[plex_move] from plex_move::@4 plex_move::@5 + (byte) sin_idx#24 ← phi( plex_move::@4/(byte) sin_idx#27 plex_move::@5/(byte) sin_idx#28 ) + (byte) plex_move::y_idx#4 ← phi( plex_move::@4/(byte) plex_move::y_idx#5 plex_move::@5/(byte) plex_move::y_idx#6 ) + (byte) plex_move::s#5 ← phi( plex_move::@4/(byte) plex_move::s#4 plex_move::@5/(byte) plex_move::s#6 ) + (byte*) scroll_text_next#12 ← phi( plex_move::@4/(byte*) scroll_text_next#11 plex_move::@5/(byte*) scroll_text_next#5 ) + (byte) SPRITE_0#2 ← phi( plex_move::@4/(byte) SPRITE_0#4 plex_move::@5/(byte) SPRITE_0#5 ) + (byte~) plex_move::$4 ← (byte) SPRITE_0#2 + *((byte*) scroll_text_next#12) + *((const byte*) PLEX_PTR + (byte) plex_move::s#5) ← (byte~) plex_move::$4 + (byte*) scroll_text_next#4 ← ++ (byte*) scroll_text_next#12 + to:plex_move::@2 +plex_move::@5: scope:[plex_move] from plex_move::@4 + (byte) sin_idx#28 ← phi( plex_move::@4/(byte) sin_idx#27 ) + (byte) plex_move::y_idx#6 ← phi( plex_move::@4/(byte) plex_move::y_idx#5 ) + (byte) plex_move::s#6 ← phi( plex_move::@4/(byte) plex_move::s#4 ) + (byte) SPRITE_0#5 ← phi( plex_move::@4/(byte) SPRITE_0#4 ) + (byte*) scroll_text_next#5 ← (const byte*) SCROLL_TEXT + to:plex_move::@3 +plex_move::@6: scope:[plex_move] from plex_move::@2 + (byte*) scroll_text_next#19 ← phi( plex_move::@2/(byte*) scroll_text_next#26 ) + (byte) sin_idx#11 ← phi( plex_move::@2/(byte) sin_idx#17 ) (byte) sin_idx#4 ← (byte) sin_idx#11 + (number) 1 - to:plexSine::@return -plexSine::@return: scope:[plexSine] from plexSine::@2 - (byte) sin_idx#12 ← phi( plexSine::@2/(byte) sin_idx#4 ) + to:plex_move::@return +plex_move::@return: scope:[plex_move] from plex_move::@6 + (byte) sin_idx#12 ← phi( plex_move::@6/(byte) sin_idx#4 ) + (byte*) scroll_text_next#13 ← phi( plex_move::@6/(byte*) scroll_text_next#19 ) + (byte*) scroll_text_next#6 ← (byte*) scroll_text_next#13 (byte) sin_idx#5 ← (byte) sin_idx#12 return to:@return @14: scope:[] from @13 - (byte) sin_idx#23 ← phi( @13/(byte) sin_idx#3 ) + (byte) SPRITE_0#27 ← phi( @13/(byte) SPRITE_0#28 ) + (byte) sin_idx#25 ← phi( @13/(byte) sin_idx#3 ) + (byte*) scroll_text_next#27 ← phi( @13/(byte*) scroll_text_next#3 ) (byte*) PLEX_SCREEN_PTR#21 ← phi( @13/(byte*) PLEX_SCREEN_PTR#26 ) - (volatile bool) framedone ← false + (volatile bool) frame_done ← false to:@17 interrupt(KERNEL_MIN)(void()) plex_irq() @@ -443,19 +542,19 @@ plex_irq::@3: scope:[plex_irq] from plex_irq plex_irq::@7 call plexShowSprite to:plex_irq::@8 plex_irq::@8: scope:[plex_irq] from plex_irq::@3 - (byte*) PLEX_SCREEN_PTR#38 ← phi( plex_irq::@3/(byte*) PLEX_SCREEN_PTR#22 ) + (byte*) PLEX_SCREEN_PTR#41 ← phi( plex_irq::@3/(byte*) PLEX_SCREEN_PTR#22 ) to:plex_irq::plexFreeNextYpos1 plex_irq::plexFreeNextYpos1: scope:[plex_irq] from plex_irq::@8 - (byte*) PLEX_SCREEN_PTR#36 ← phi( plex_irq::@8/(byte*) PLEX_SCREEN_PTR#38 ) + (byte*) PLEX_SCREEN_PTR#38 ← phi( plex_irq::@8/(byte*) PLEX_SCREEN_PTR#41 ) (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) to:plex_irq::plexFreeNextYpos1_@return plex_irq::plexFreeNextYpos1_@return: scope:[plex_irq] from plex_irq::plexFreeNextYpos1 - (byte*) PLEX_SCREEN_PTR#34 ← phi( plex_irq::plexFreeNextYpos1/(byte*) PLEX_SCREEN_PTR#36 ) + (byte*) PLEX_SCREEN_PTR#35 ← phi( plex_irq::plexFreeNextYpos1/(byte*) PLEX_SCREEN_PTR#38 ) (byte) plex_irq::plexFreeNextYpos1_return#2 ← phi( plex_irq::plexFreeNextYpos1/(byte) plex_irq::plexFreeNextYpos1_return#0 ) (byte) plex_irq::plexFreeNextYpos1_return#1 ← (byte) plex_irq::plexFreeNextYpos1_return#2 to:plex_irq::@7 plex_irq::@7: scope:[plex_irq] from plex_irq::plexFreeNextYpos1_@return - (byte*) PLEX_SCREEN_PTR#31 ← phi( plex_irq::plexFreeNextYpos1_@return/(byte*) PLEX_SCREEN_PTR#34 ) + (byte*) PLEX_SCREEN_PTR#31 ← phi( plex_irq::plexFreeNextYpos1_@return/(byte*) PLEX_SCREEN_PTR#35 ) (byte) plex_irq::plexFreeNextYpos1_return#3 ← phi( plex_irq::plexFreeNextYpos1_@return/(byte) plex_irq::plexFreeNextYpos1_return#1 ) (byte~) plex_irq::$2 ← (byte) plex_irq::plexFreeNextYpos1_return#3 (byte) plex_irq::rasterY#1 ← (byte~) plex_irq::$2 @@ -476,7 +575,7 @@ plex_irq::@1: scope:[plex_irq] from plex_irq::@4 to:plex_irq::@2 plex_irq::@5: scope:[plex_irq] from plex_irq::@4 *((const nomodify byte*) RASTER) ← (number) $28 - (volatile bool) framedone ← true + (volatile bool) frame_done ← true to:plex_irq::@2 plex_irq::@2: scope:[plex_irq] from plex_irq::@1 plex_irq::@5 *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER @@ -487,10 +586,10 @@ plex_irq::@return: scope:[plex_irq] from plex_irq::@2 to:@return (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) -font_2x2_to_sprites: scope:[font_2x2_to_sprites] from main::@19 - (byte) font_2x2_to_sprites::num_chars#2 ← phi( main::@19/(byte) font_2x2_to_sprites::num_chars#0 ) - (byte*) font_2x2_to_sprites::sprites#1 ← phi( main::@19/(byte*) font_2x2_to_sprites::sprites#0 ) - (byte*) font_2x2_to_sprites::font_2x2#1 ← phi( main::@19/(byte*) font_2x2_to_sprites::font_2x2#0 ) +font_2x2_to_sprites: scope:[font_2x2_to_sprites] from main::@22 + (byte) font_2x2_to_sprites::num_chars#2 ← phi( main::@22/(byte) font_2x2_to_sprites::num_chars#0 ) + (byte*) font_2x2_to_sprites::sprites#1 ← phi( main::@22/(byte*) font_2x2_to_sprites::sprites#0 ) + (byte*) font_2x2_to_sprites::font_2x2#1 ← phi( main::@22/(byte*) font_2x2_to_sprites::font_2x2#0 ) (byte*) font_2x2_to_sprites::char_current#0 ← (byte*) font_2x2_to_sprites::font_2x2#1 (byte*) font_2x2_to_sprites::sprite#0 ← (byte*) font_2x2_to_sprites::sprites#1 (byte) font_2x2_to_sprites::c#0 ← (byte) 0 @@ -761,23 +860,30 @@ font_2x2::@return: scope:[font_2x2] from font_2x2::@12 return to:@return @17: scope:[] from @14 - (byte) sin_idx#18 ← phi( @14/(byte) sin_idx#23 ) + (byte) SPRITE_0#26 ← phi( @14/(byte) SPRITE_0#27 ) + (byte) sin_idx#18 ← phi( @14/(byte) sin_idx#25 ) + (byte*) scroll_text_next#20 ← phi( @14/(byte*) scroll_text_next#27 ) (byte*) PLEX_SCREEN_PTR#15 ← phi( @14/(byte*) PLEX_SCREEN_PTR#21 ) call main - to:@18 -@18: scope:[] from @17 + to:@19 +@19: scope:[] from @17 (byte) sin_idx#13 ← phi( @17/(byte) sin_idx#2 ) + (byte*) scroll_text_next#14 ← phi( @17/(byte*) scroll_text_next#2 ) (byte*) PLEX_SCREEN_PTR#10 ← phi( @17/(byte*) PLEX_SCREEN_PTR#4 ) (byte*) PLEX_SCREEN_PTR#5 ← (byte*) PLEX_SCREEN_PTR#10 + (byte*) scroll_text_next#7 ← (byte*) scroll_text_next#14 (byte) sin_idx#6 ← (byte) sin_idx#13 to:@end -@end: scope:[] from @18 +@end: scope:[] from @19 SYMBOL TABLE SSA +(byte~) $0 +(label) @12 (label) @13 (label) @14 (label) @17 (label) @18 +(label) @19 (label) @4 (label) @9 (label) @begin @@ -787,7 +893,7 @@ SYMBOL TABLE SSA (const nomodify byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D018 = (byte*)(number) $d018 -(const nomodify byte*) FONT = (byte*)(number) $2000 +(const byte*) FONT[(number) $800] = { fill( $800, 0) } (const nomodify byte*) IRQ_ENABLE = (byte*)(number) $d01a (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*)(number) $d019 @@ -836,6 +942,8 @@ SYMBOL TABLE SSA (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#5 (byte*) PLEX_SCREEN_PTR#6 (byte*) PLEX_SCREEN_PTR#7 @@ -849,6 +957,7 @@ SYMBOL TABLE SSA (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 (const nomodify byte*) RASTER = (byte*)(number) $d012 (const nomodify byte*) SCREEN = (byte*)(number) $400 +(const byte*) SCROLL_TEXT[] = (byte*) "camelot presents a spanking new contribution to the always hungry c64 scene. in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. " (const byte) SIZEOF_WORD = (byte) 2 (const nomodify byte*) SPRITES = (byte*)(number) $3000 (const nomodify byte*) SPRITES_COLS = (byte*)(number) $d027 @@ -856,8 +965,41 @@ SYMBOL TABLE SSA (const nomodify byte*) SPRITES_XMSB = (byte*)(number) $d010 (const nomodify byte*) SPRITES_XPOS = (byte*)(number) $d000 (const nomodify byte*) SPRITES_YPOS = (byte*)(number) $d001 +(byte) SPRITE_0 +(byte) SPRITE_0#0 +(byte) SPRITE_0#1 +(byte) SPRITE_0#10 +(byte) SPRITE_0#11 +(byte) SPRITE_0#12 +(byte) SPRITE_0#13 +(byte) SPRITE_0#14 +(byte) SPRITE_0#15 +(byte) SPRITE_0#16 +(byte) SPRITE_0#17 +(byte) SPRITE_0#18 +(byte) SPRITE_0#19 +(byte) SPRITE_0#2 +(byte) SPRITE_0#20 +(byte) SPRITE_0#21 +(byte) SPRITE_0#22 +(byte) SPRITE_0#23 +(byte) SPRITE_0#24 +(byte) SPRITE_0#25 +(byte) SPRITE_0#26 +(byte) SPRITE_0#27 +(byte) SPRITE_0#28 +(byte) SPRITE_0#3 +(byte) SPRITE_0#4 +(byte) SPRITE_0#5 +(byte) SPRITE_0#6 +(byte) SPRITE_0#7 +(byte) SPRITE_0#8 +(byte) SPRITE_0#9 (const nomodify byte*) VIC_CONTROL = (byte*)(number) $d011 (const nomodify byte) WHITE = (byte) 1 +(const byte*) XMOVEMENT[(number) $200] = kickasm {{ .lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100))) + }} +(const nomodify byte*) XMOVEMENT_HI = (const byte*) XMOVEMENT+(number) $100 (const byte*) YSIN[(number) $100] = kickasm {{ .fill $100, round(142+89.5*sin(toRadians(360*i/256))) }} (void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2) @@ -1119,43 +1261,40 @@ SYMBOL TABLE SSA (byte*) font_2x2_to_sprites::sprites (byte*) font_2x2_to_sprites::sprites#0 (byte*) font_2x2_to_sprites::sprites#1 -(volatile bool) framedone loadstore +(volatile bool) frame_done loadstore (void()) main() (byte~) main::$12 (byte~) main::$3 -(byte~) main::$4 -(bool~) main::$7 +(bool~) main::$6 +(byte~) main::$7 (bool~) main::$8 (bool~) main::$9 (label) main::@1 -(label) main::@10 -(label) main::@17 -(label) main::@18 -(label) main::@19 +(label) main::@12 +(label) main::@14 (label) main::@2 -(label) main::@20 (label) main::@21 (label) main::@22 (label) main::@23 (label) main::@24 (label) main::@25 +(label) main::@26 +(label) main::@27 +(label) main::@28 (label) main::@3 -(label) main::@4 -(label) main::@5 +(label) main::@7 (label) main::@8 +(label) main::@9 (label) main::@return (byte) main::s (byte) main::s#0 (byte) main::s#1 (byte) main::s#2 +(byte) main::s#3 (byte) main::s1 (byte) main::s1#0 (byte) main::s1#1 (byte) main::s1#2 -(byte) main::sprite -(byte) main::sprite#0 -(byte) main::sprite#1 -(byte) main::sprite#2 (label) main::toD0181 (word~) main::toD0181_$0 (number~) main::toD0181_$1 @@ -1178,26 +1317,11 @@ SYMBOL TABLE SSA (byte*) main::toD0181_screen (byte*) main::toD0181_screen#0 (byte*) main::toD0181_screen#1 -(label) main::toSpritePtr1 -(word~) main::toSpritePtr1_$0 -(number~) main::toSpritePtr1_$1 -(byte~) main::toSpritePtr1_$2 -(label) main::toSpritePtr1_@return -(byte) main::toSpritePtr1_return -(byte) main::toSpritePtr1_return#0 -(byte) main::toSpritePtr1_return#1 -(byte) main::toSpritePtr1_return#2 -(byte) main::toSpritePtr1_return#3 -(byte*) main::toSpritePtr1_sprite -(byte*) main::toSpritePtr1_sprite#0 -(byte*) main::toSpritePtr1_sprite#1 -(word) main::xp -(word) main::xp#0 -(word) main::xp#1 -(word) main::xp#2 -(word) main::xp#3 -(word) main::xp#4 -(word) main::xp#5 +(byte) main::x +(byte) main::x#0 +(byte) main::x#1 +(byte) main::x#2 +(byte) main::x#3 (void()) plexInit((byte*) plexInit::screen) (bool~) plexInit::$1 (label) plexInit::@1 @@ -1248,19 +1372,6 @@ SYMBOL TABLE SSA (byte) plexShowSprite::xpos_idx#0 (byte) plexShowSprite::ypos (byte) plexShowSprite::ypos#0 -(void()) plexSine() -(bool~) plexSine::$0 -(label) plexSine::@1 -(label) plexSine::@2 -(label) plexSine::@return -(byte) plexSine::sy -(byte) plexSine::sy#0 -(byte) plexSine::sy#1 -(byte) plexSine::sy#2 -(byte) plexSine::y_idx -(byte) plexSine::y_idx#0 -(byte) plexSine::y_idx#1 -(byte) plexSine::y_idx#2 (void()) plexSort() (number~) plexSort::$1 (bool~) plexSort::$2 @@ -1336,9 +1447,80 @@ interrupt(KERNEL_MIN)(void()) plex_irq() (byte) plex_irq::rasterY#1 (byte) plex_irq::rasterY#2 (byte) plex_irq::rasterY#3 +(void()) plex_move() +(bool~) plex_move::$0 +(bool~) plex_move::$1 +(bool~) plex_move::$2 +(bool~) plex_move::$3 +(byte~) plex_move::$4 +(bool~) plex_move::$5 +(byte~) plex_move::$6 +(byte~) plex_move::$7 +(label) plex_move::@1 +(label) plex_move::@2 +(label) plex_move::@3 +(label) plex_move::@4 +(label) plex_move::@5 +(label) plex_move::@6 +(label) plex_move::@return +(byte) plex_move::s +(byte) plex_move::s#0 +(byte) plex_move::s#1 +(byte) plex_move::s#2 +(byte) plex_move::s#3 +(byte) plex_move::s#4 +(byte) plex_move::s#5 +(byte) plex_move::s#6 +(byte) plex_move::y_idx +(byte) plex_move::y_idx#0 +(byte) plex_move::y_idx#1 +(byte) plex_move::y_idx#2 +(byte) plex_move::y_idx#3 +(byte) plex_move::y_idx#4 +(byte) plex_move::y_idx#5 +(byte) plex_move::y_idx#6 (volatile byte) plex_show_idx loadstore (volatile byte) plex_sprite_idx loadstore (volatile byte) plex_sprite_msb loadstore +(byte*) scroll_text_next +(byte*) scroll_text_next#0 +(byte*) scroll_text_next#1 +(byte*) scroll_text_next#10 +(byte*) scroll_text_next#11 +(byte*) scroll_text_next#12 +(byte*) scroll_text_next#13 +(byte*) scroll_text_next#14 +(byte*) scroll_text_next#15 +(byte*) scroll_text_next#16 +(byte*) scroll_text_next#17 +(byte*) scroll_text_next#18 +(byte*) scroll_text_next#19 +(byte*) scroll_text_next#2 +(byte*) scroll_text_next#20 +(byte*) scroll_text_next#21 +(byte*) scroll_text_next#22 +(byte*) scroll_text_next#23 +(byte*) scroll_text_next#24 +(byte*) scroll_text_next#25 +(byte*) scroll_text_next#26 +(byte*) scroll_text_next#27 +(byte*) scroll_text_next#28 +(byte*) scroll_text_next#29 +(byte*) scroll_text_next#3 +(byte*) scroll_text_next#30 +(byte*) scroll_text_next#31 +(byte*) scroll_text_next#32 +(byte*) scroll_text_next#33 +(byte*) scroll_text_next#34 +(byte*) scroll_text_next#35 +(byte*) scroll_text_next#36 +(byte*) scroll_text_next#37 +(byte*) scroll_text_next#4 +(byte*) scroll_text_next#5 +(byte*) scroll_text_next#6 +(byte*) scroll_text_next#7 +(byte*) scroll_text_next#8 +(byte*) scroll_text_next#9 (byte) sin_idx (byte) sin_idx#0 (byte) sin_idx#1 @@ -1370,13 +1552,31 @@ interrupt(KERNEL_MIN)(void()) plex_irq() (byte) sin_idx#33 (byte) sin_idx#34 (byte) sin_idx#35 +(byte) sin_idx#36 +(byte) sin_idx#37 (byte) sin_idx#4 (byte) sin_idx#5 (byte) sin_idx#6 (byte) sin_idx#7 (byte) sin_idx#8 (byte) sin_idx#9 +(label) toSpritePtr1 +(word~) toSpritePtr1_$0 +(number~) toSpritePtr1_$1 +(byte~) toSpritePtr1_$2 +(label) toSpritePtr1_@return +(byte) toSpritePtr1_return +(byte) toSpritePtr1_return#0 +(byte) toSpritePtr1_return#1 +(byte) toSpritePtr1_return#2 +(byte) toSpritePtr1_return#3 +(byte*) toSpritePtr1_sprite +(byte*) toSpritePtr1_sprite#0 +(byte*) toSpritePtr1_sprite#1 +Fixing inline constructor with main::$13 ← (byte)*(XMOVEMENT_HI + main::x#2) w= (byte)*(XMOVEMENT + main::x#2) +Successful SSA optimization Pass2FixInlineConstructors +Adding number conversion cast (unumber) $100 in Adding number conversion cast (unumber) $3f8 in (byte*~) plexInit::plexSetScreen1_$0 ← (byte*) plexInit::plexSetScreen1_screen#1 + (number) $3f8 Adding number conversion cast (unumber) 1 in (byte) plexInit::i#1 ← (byte) plexInit::i#2 + rangenext(0,PLEX_COUNT-1) Adding number conversion cast (unumber) 1 in (number~) plexSort::$1 ← (byte) plexSort::m#2 + (number) 1 @@ -1408,6 +1608,8 @@ Adding number conversion cast (unumber) plexShowSprite::$6 in (number~) plexShow Adding number conversion cast (unumber) 1 in (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (number) 1 Adding number conversion cast (unumber) 0 in (bool~) plexShowSprite::$7 ← (volatile byte) plex_sprite_msb == (number) 0 Adding number conversion cast (unumber) 1 in (volatile byte) plex_sprite_msb ← (number) 1 +Adding number conversion cast (unumber) $40 in (number~) toSpritePtr1_$1 ← (word~) toSpritePtr1_$0 / (number) $40 +Adding number conversion cast (unumber) toSpritePtr1_$1 in (number~) toSpritePtr1_$1 ← (word~) toSpritePtr1_$0 / (unumber)(number) $40 Adding number conversion cast (unumber) $40 in (byte) font_2x2_to_sprites::num_chars#0 ← (number) $40 Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (number) $3fff Adding number conversion cast (unumber) main::toD0181_$1 in (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (unumber)(number) $3fff @@ -1419,15 +1621,15 @@ Adding number conversion cast (unumber) main::toD0181_$6 in (number~) main::toD0 Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (number) $f Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 -Adding number conversion cast (unumber) $40 in (number~) main::toSpritePtr1_$1 ← (word~) main::toSpritePtr1_$0 / (number) $40 -Adding number conversion cast (unumber) main::toSpritePtr1_$1 in (number~) main::toSpritePtr1_$1 ← (word~) main::toSpritePtr1_$0 / (unumber)(number) $40 -Adding number conversion cast (unumber) $a in (word) main::xp#1 ← (word) main::xp#2 + (number) $a -Adding number conversion cast (unumber) 1 in (byte) main::s#1 ← (byte) main::s#2 + rangenext(0,PLEX_COUNT-1) +Adding number conversion cast (unumber) 8 in (byte) main::x#1 ← (byte) main::x#2 + (number) 8 Adding number conversion cast (unumber) $ff in *((const nomodify byte*) SPRITES_ENABLE) ← (number) $ff Adding number conversion cast (unumber) $7f in *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (number) $7f Adding number conversion cast (unumber) $28 in *((const nomodify byte*) RASTER) ← (number) $28 -Adding number conversion cast (unumber) 8 in (byte) plexSine::y_idx#1 ← (byte) plexSine::y_idx#2 + (number) 8 -Adding number conversion cast (unumber) 1 in (byte) plexSine::sy#1 ← (byte) plexSine::sy#2 + rangenext(0,PLEX_COUNT-1) +Adding number conversion cast (unumber) 8 in (byte) plex_move::y_idx#1 ← (byte) plex_move::y_idx#2 + (number) 8 +Adding number conversion cast (unumber) 0 in (bool~) plex_move::$0 ← *((const word*) PLEX_XPOS + (byte~) plex_move::$6) == (number) 0 +Adding number conversion cast (unumber) 1 in (byte) plex_move::s#1 ← (byte) plex_move::s#3 + rangenext(0,PLEX_COUNT-1) +Adding number conversion cast (unumber) $b*$20 in *((const word*) PLEX_XPOS + (byte~) plex_move::$7) ← (number) $b*(number) $20 +Adding number conversion cast (unumber) 0 in (bool~) plex_move::$2 ← *((byte*) scroll_text_next#11) == (number) 0 Adding number conversion cast (unumber) 1 in (byte) sin_idx#4 ← (byte) sin_idx#11 + (number) 1 Adding number conversion cast (unumber) 3 in (number~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (number) 3 Adding number conversion cast (unumber) plex_irq::$4 in (number~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (unumber)(number) 3 @@ -1473,13 +1675,14 @@ Inlining cast (volatile byte) plex_sprite_msb ← (unumber)(number) 1 Inlining cast *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (unumber)(number) 0 Inlining cast (volatile byte) plex_free_next ← (unumber)(number) 0 Inlining cast (volatile byte) plex_sprite_msb ← (unumber)(number) 1 +Inlining cast (word~) toSpritePtr1_$0 ← (word)(byte*) toSpritePtr1_sprite#1 +Inlining cast (byte~) toSpritePtr1_$2 ← (byte)(unumber~) toSpritePtr1_$1 Inlining cast (byte) font_2x2_to_sprites::num_chars#0 ← (unumber)(number) $40 Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 -Inlining cast (word~) main::toSpritePtr1_$0 ← (word)(byte*) main::toSpritePtr1_sprite#1 -Inlining cast (byte~) main::toSpritePtr1_$2 ← (byte)(unumber~) main::toSpritePtr1_$1 Inlining cast *((const nomodify byte*) SPRITES_ENABLE) ← (unumber)(number) $ff Inlining cast *((const nomodify byte*) RASTER) ← (unumber)(number) $28 +Inlining cast *((const word*) PLEX_XPOS + (byte~) plex_move::$7) ← (unumber)(number) $b*(number) $20 Inlining cast *((const nomodify byte*) RASTER) ← (unumber)(number) $28 Inlining cast *((byte*) font_2x2_to_sprites::sprite#2 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (unumber)(number) 0 Inlining cast (byte) font_2x2::l2#2 ← (unumber)(number) 0 @@ -1499,9 +1702,9 @@ Simplifying constant pointer cast (byte*) 53274 Simplifying constant pointer cast (byte*) 56333 Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 4096 -Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 12288 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast $100 Simplifying constant integer cast $3f8 Simplifying constant integer cast 1 Simplifying constant integer cast 1 @@ -1525,18 +1728,21 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $40 +Simplifying constant integer cast $40 Simplifying constant integer cast $3fff Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f -Simplifying constant integer cast $40 -Simplifying constant integer cast $a -Simplifying constant integer cast 1 +Simplifying constant integer cast *((const nomodify byte*) XMOVEMENT_HI + (byte) main::x#2) +Simplifying constant integer cast *((const byte*) XMOVEMENT + (byte) main::x#2) +Simplifying constant integer cast 8 Simplifying constant integer cast $ff Simplifying constant integer cast $7f Simplifying constant integer cast $28 Simplifying constant integer cast 8 +Simplifying constant integer cast 0 Simplifying constant integer cast 1 +Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast $28 @@ -1564,6 +1770,7 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 8 Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (word) $100 Finalized unsigned number type (word) $3f8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 @@ -1587,18 +1794,19 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $40 +Finalized unsigned number type (byte) $40 Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) $40 -Finalized unsigned number type (byte) $a -Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) $7f Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 8 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $28 @@ -1633,13 +1841,13 @@ Inferred type updated to byte in (unumber~) plexShowSprite::plexFreeAdd1_$2 ← Inferred type updated to byte in (unumber~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb Inferred type updated to byte in (unumber~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1 Inferred type updated to byte in (unumber~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7 +Inferred type updated to word in (unumber~) toSpritePtr1_$1 ← (word~) toSpritePtr1_$0 / (byte) $40 Inferred type updated to word in (unumber~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (word) $3fff Inferred type updated to word in (unumber~) main::toD0181_$2 ← (word~) main::toD0181_$1 * (byte) 4 Inferred type updated to byte in (unumber~) main::toD0181_$3 ← > (word~) main::toD0181_$2 Inferred type updated to byte in (unumber~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (byte) 4 Inferred type updated to byte in (unumber~) main::toD0181_$7 ← (byte~) main::toD0181_$6 & (byte) $f Inferred type updated to byte in (unumber~) main::toD0181_$8 ← (byte~) main::toD0181_$3 | (byte~) main::toD0181_$7 -Inferred type updated to word in (unumber~) main::toSpritePtr1_$1 ← (word~) main::toSpritePtr1_$0 / (byte) $40 Inferred type updated to byte in (unumber~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 Inferred type updated to byte in (unumber~) font_2x2_to_sprites::$2 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7 Inferred type updated to byte in (unumber~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7 @@ -1648,8 +1856,10 @@ Inferred type updated to byte in (unumber~) font_2x2::$11 ← (byte) font_2x2::l Inferred type updated to byte in (unumber~) font_2x2::$14 ← (byte) font_2x2::l2#3 + (byte) 1 Inversing boolean not [25] (bool~) plexSort::$3 ← (byte) plexSort::nxt_y#0 >= *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2)) from [24] (bool~) plexSort::$2 ← (byte) plexSort::nxt_y#0 < *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2)) Inversing boolean not [86] (bool~) plexShowSprite::$8 ← (volatile byte) plex_sprite_msb != (byte) 0 from [85] (bool~) plexShowSprite::$7 ← (volatile byte) plex_sprite_msb == (byte) 0 -Inversing boolean not [265] (bool~) font_2x2_to_sprites::$6 ← (byte) font_2x2_to_sprites::i#3 != (byte) $f from [264] (bool~) font_2x2_to_sprites::$5 ← (byte) font_2x2_to_sprites::i#3 == (byte) $f -Inversing boolean not [328] (bool~) font_2x2::$17 ← (byte) font_2x2::l2#1 != (byte) 8 from [327] (bool~) font_2x2::$16 ← (byte) font_2x2::l2#1 == (byte) 8 +Inversing boolean not [205] (bool~) plex_move::$1 ← *((const word*) PLEX_XPOS + (byte~) plex_move::$6) != (byte) 0 from [204] (bool~) plex_move::$0 ← *((const word*) PLEX_XPOS + (byte~) plex_move::$6) == (byte) 0 +Inversing boolean not [215] (bool~) plex_move::$3 ← *((byte*) scroll_text_next#11) != (byte) 0 from [214] (bool~) plex_move::$2 ← *((byte*) scroll_text_next#11) == (byte) 0 +Inversing boolean not [290] (bool~) font_2x2_to_sprites::$6 ← (byte) font_2x2_to_sprites::i#3 != (byte) $f from [289] (bool~) font_2x2_to_sprites::$5 ← (byte) font_2x2_to_sprites::i#3 == (byte) $f +Inversing boolean not [353] (bool~) font_2x2::$17 ← (byte) font_2x2::l2#1 != (byte) 8 from [352] (bool~) font_2x2::$16 ← (byte) font_2x2::l2#1 == (byte) 8 Successful SSA optimization Pass2UnaryNotSimplification Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 @@ -1665,30 +1875,49 @@ 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#12 = PLEX_SCREEN_PTR#17 PLEX_SCREEN_PTR#7 -Alias PLEX_SCREEN_PTR#0 = PLEX_SCREEN_PTR#29 PLEX_SCREEN_PTR#26 PLEX_SCREEN_PTR#21 PLEX_SCREEN_PTR#15 +Alias PLEX_SCREEN_PTR#0 = PLEX_SCREEN_PTR#42 PLEX_SCREEN_PTR#39 PLEX_SCREEN_PTR#36 PLEX_SCREEN_PTR#32 PLEX_SCREEN_PTR#29 PLEX_SCREEN_PTR#26 PLEX_SCREEN_PTR#21 PLEX_SCREEN_PTR#15 +Alias toSpritePtr1_sprite#0 = toSpritePtr1_sprite#1 +Alias toSpritePtr1_return#0 = toSpritePtr1_$2 toSpritePtr1_return#2 toSpritePtr1_return#1 toSpritePtr1_return#3 $0 SPRITE_0#0 SPRITE_0#28 SPRITE_0#27 SPRITE_0#26 Alias PLEX_SCREEN_PTR#13 = PLEX_SCREEN_PTR#18 PLEX_SCREEN_PTR#23 -Alias sin_idx#26 = sin_idx#34 sin_idx#35 sin_idx#33 sin_idx#32 sin_idx#31 sin_idx#30 sin_idx#29 sin_idx#28 sin_idx#27 -Alias PLEX_SCREEN_PTR#3 = PLEX_SCREEN_PTR#8 PLEX_SCREEN_PTR#44 PLEX_SCREEN_PTR#43 PLEX_SCREEN_PTR#42 PLEX_SCREEN_PTR#41 PLEX_SCREEN_PTR#40 PLEX_SCREEN_PTR#39 +Alias SPRITE_0#11 = SPRITE_0#20 SPRITE_0#23 SPRITE_0#17 SPRITE_0#14 SPRITE_0#8 SPRITE_0#6 +Alias scroll_text_next#31 = scroll_text_next#36 scroll_text_next#37 scroll_text_next#35 scroll_text_next#34 scroll_text_next#33 scroll_text_next#32 +Alias sin_idx#31 = sin_idx#36 sin_idx#37 sin_idx#35 sin_idx#34 sin_idx#33 sin_idx#32 +Alias PLEX_SCREEN_PTR#3 = PLEX_SCREEN_PTR#8 PLEX_SCREEN_PTR#46 PLEX_SCREEN_PTR#45 PLEX_SCREEN_PTR#44 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_$8 main::toD0181_return#2 main::toD0181_return#1 main::toD0181_return#3 main::$3 -Alias main::toSpritePtr1_sprite#0 = main::toSpritePtr1_sprite#1 -Alias main::xp#0 = main::xp#5 main::xp#4 main::xp#3 -Alias main::toSpritePtr1_return#0 = main::toSpritePtr1_$2 main::toSpritePtr1_return#2 main::toSpritePtr1_return#1 main::toSpritePtr1_return#3 main::$4 main::sprite#0 -Alias sin_idx#24 = sin_idx#25 -Alias PLEX_SCREEN_PTR#35 = PLEX_SCREEN_PTR#37 +Alias SPRITE_0#1 = SPRITE_0#3 SPRITE_0#18 +Alias main::s#2 = main::s#3 +Alias main::x#2 = main::x#3 +Alias scroll_text_next#28 = scroll_text_next#30 scroll_text_next#29 +Alias sin_idx#26 = sin_idx#30 sin_idx#29 +Alias PLEX_SCREEN_PTR#37 = PLEX_SCREEN_PTR#43 PLEX_SCREEN_PTR#40 +Alias scroll_text_next#15 = scroll_text_next#21 Alias sin_idx#14 = sin_idx#19 -Alias PLEX_SCREEN_PTR#19 = PLEX_SCREEN_PTR#27 PLEX_SCREEN_PTR#32 PLEX_SCREEN_PTR#24 +Alias PLEX_SCREEN_PTR#19 = PLEX_SCREEN_PTR#27 PLEX_SCREEN_PTR#33 PLEX_SCREEN_PTR#24 +Alias SPRITE_0#13 = SPRITE_0#15 SPRITE_0#24 SPRITE_0#21 +Alias scroll_text_next#0 = scroll_text_next#8 scroll_text_next#22 Alias sin_idx#0 = sin_idx#7 sin_idx#20 +Alias scroll_text_next#16 = scroll_text_next#24 Alias sin_idx#15 = sin_idx#22 -Alias PLEX_SCREEN_PTR#20 = PLEX_SCREEN_PTR#28 PLEX_SCREEN_PTR#33 PLEX_SCREEN_PTR#25 +Alias PLEX_SCREEN_PTR#20 = PLEX_SCREEN_PTR#28 PLEX_SCREEN_PTR#34 PLEX_SCREEN_PTR#25 +Alias SPRITE_0#12 = SPRITE_0#16 SPRITE_0#25 SPRITE_0#22 +Alias scroll_text_next#1 = scroll_text_next#9 scroll_text_next#23 Alias sin_idx#1 = sin_idx#8 sin_idx#21 Alias PLEX_SCREEN_PTR#14 = PLEX_SCREEN_PTR#9 PLEX_SCREEN_PTR#4 +Alias scroll_text_next#10 = scroll_text_next#17 scroll_text_next#2 Alias sin_idx#16 = sin_idx#9 sin_idx#2 +Alias plex_move::s#2 = plex_move::s#4 plex_move::s#6 +Alias scroll_text_next#11 = scroll_text_next#18 +Alias SPRITE_0#4 = SPRITE_0#7 SPRITE_0#5 +Alias plex_move::y_idx#1 = plex_move::y_idx#5 plex_move::y_idx#6 +Alias sin_idx#23 = sin_idx#27 sin_idx#28 Alias sin_idx#11 = sin_idx#17 +Alias scroll_text_next#13 = scroll_text_next#19 scroll_text_next#26 scroll_text_next#6 Alias sin_idx#12 = sin_idx#4 sin_idx#5 -Alias sin_idx#18 = sin_idx#23 sin_idx#3 -Alias PLEX_SCREEN_PTR#22 = PLEX_SCREEN_PTR#38 PLEX_SCREEN_PTR#36 PLEX_SCREEN_PTR#34 PLEX_SCREEN_PTR#31 +Alias scroll_text_next#20 = scroll_text_next#27 scroll_text_next#3 +Alias sin_idx#18 = sin_idx#25 sin_idx#3 +Alias PLEX_SCREEN_PTR#22 = PLEX_SCREEN_PTR#41 PLEX_SCREEN_PTR#38 PLEX_SCREEN_PTR#35 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 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 @@ -1746,10 +1975,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 PLEX_SCREEN_PTR#10 = PLEX_SCREEN_PTR#5 +Alias scroll_text_next#14 = scroll_text_next#7 Alias sin_idx#13 = sin_idx#6 Successful SSA optimization Pass2AliasElimination Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 +Alias SPRITE_0#2 = SPRITE_0#4 +Alias plex_move::s#2 = plex_move::s#5 +Alias plex_move::y_idx#1 = plex_move::y_idx#4 +Alias sin_idx#23 = sin_idx#24 Alias font_2x2_to_sprites::i#2 = font_2x2_to_sprites::i#4 Alias font_2x2_to_sprites::sprite#2 = font_2x2_to_sprites::sprite#3 Alias font_2x2_to_sprites::sprite_idx#3 = font_2x2_to_sprites::sprite_idx#5 @@ -1770,6 +2004,13 @@ Alias font_2x2::c#2 = font_2x2::c#4 font_2x2::c#7 Successful SSA optimization Pass2AliasElimination Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 +Alias plex_move::s#2 = plex_move::s#3 +Alias plex_move::y_idx#1 = plex_move::y_idx#3 +Alias sin_idx#11 = sin_idx#23 +Alias SPRITE_0#10 = SPRITE_0#2 +Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 +Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Identical Phi Values (byte*) plexInit::plexSetScreen1_screen#0 (byte*) plexInit::screen#0 Identical Phi Values (byte*) PLEX_SCREEN_PTR#11 (byte*) PLEX_SCREEN_PTR#1 Identical Phi Values (byte) plexSort::nxt_y#1 (byte) plexSort::nxt_y#0 @@ -1777,17 +2018,28 @@ Identical Phi Values (byte) plexSort::nxt_idx#1 (byte) plexSort::nxt_idx#0 Identical Phi Values (byte) plexSort::m#5 (byte) plexSort::m#2 Identical Phi Values (byte*) PLEX_SCREEN_PTR#12 (byte*) PLEX_SCREEN_PTR#22 Identical Phi Values (byte*) PLEX_SCREEN_PTR#13 (byte*) PLEX_SCREEN_PTR#0 -Identical Phi Values (byte) sin_idx#26 (byte) sin_idx#18 +Identical Phi Values (byte) SPRITE_0#11 (byte) toSpritePtr1_return#0 +Identical Phi Values (byte*) scroll_text_next#31 (byte*) scroll_text_next#20 +Identical Phi Values (byte) sin_idx#31 (byte) sin_idx#18 Identical Phi Values (byte*) PLEX_SCREEN_PTR#3 (byte*) PLEX_SCREEN_PTR#11 -Identical Phi Values (byte) sin_idx#24 (byte) sin_idx#26 -Identical Phi Values (byte*) PLEX_SCREEN_PTR#35 (byte*) PLEX_SCREEN_PTR#3 -Identical Phi Values (byte) sin_idx#14 (byte) sin_idx#24 -Identical Phi Values (byte*) PLEX_SCREEN_PTR#19 (byte*) PLEX_SCREEN_PTR#35 +Identical Phi Values (byte) SPRITE_0#1 (byte) SPRITE_0#11 +Identical Phi Values (byte*) scroll_text_next#28 (byte*) scroll_text_next#31 +Identical Phi Values (byte) sin_idx#26 (byte) sin_idx#31 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#37 (byte*) PLEX_SCREEN_PTR#3 +Identical Phi Values (byte*) scroll_text_next#15 (byte*) scroll_text_next#28 +Identical Phi Values (byte) sin_idx#14 (byte) sin_idx#26 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#19 (byte*) PLEX_SCREEN_PTR#37 +Identical Phi Values (byte) SPRITE_0#13 (byte) SPRITE_0#1 +Identical Phi Values (byte*) scroll_text_next#0 (byte*) scroll_text_next#13 Identical Phi Values (byte) sin_idx#0 (byte) sin_idx#12 +Identical Phi Values (byte*) scroll_text_next#16 (byte*) scroll_text_next#10 Identical Phi Values (byte) sin_idx#15 (byte) sin_idx#16 Identical Phi Values (byte*) PLEX_SCREEN_PTR#20 (byte*) PLEX_SCREEN_PTR#14 +Identical Phi Values (byte) SPRITE_0#12 (byte) SPRITE_0#19 +Identical Phi Values (byte*) scroll_text_next#1 (byte*) scroll_text_next#13 Identical Phi Values (byte) sin_idx#1 (byte) sin_idx#12 Identical Phi Values (byte) sin_idx#11 (byte) sin_idx#10 +Identical Phi Values (byte) SPRITE_0#10 (byte) SPRITE_0#9 Identical Phi Values (byte*) PLEX_SCREEN_PTR#30 (byte*) PLEX_SCREEN_PTR#0 Identical Phi Values (byte*) PLEX_SCREEN_PTR#22 (byte*) PLEX_SCREEN_PTR#30 Identical Phi Values (byte*) font_2x2_to_sprites::char_current#0 (byte*) font_2x2_to_sprites::font_2x2#0 @@ -1808,21 +2060,26 @@ Identical Phi Values (byte*) font_2x2::next_2x2#10 (byte*) font_2x2::next_2x2#11 Identical Phi Values (byte*) font_2x2::next_original#10 (byte*) font_2x2::next_original#2 Identical Phi Values (byte) font_2x2::c#2 (byte) font_2x2::c#10 Identical Phi Values (byte*) PLEX_SCREEN_PTR#10 (byte*) PLEX_SCREEN_PTR#14 +Identical Phi Values (byte*) scroll_text_next#14 (byte*) scroll_text_next#10 Identical Phi Values (byte) sin_idx#13 (byte) sin_idx#16 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte) plexSort::m#3 (byte) plexSort::m#2 Identical Phi Values (byte*) PLEX_SCREEN_PTR#14 (byte*) PLEX_SCREEN_PTR#1 +Identical Phi Values (byte*) scroll_text_next#10 (byte*) scroll_text_next#13 Identical Phi Values (byte) sin_idx#16 (byte) sin_idx#12 +Identical Phi Values (byte) SPRITE_0#19 (byte) toSpritePtr1_return#0 Identical Phi Values (byte) font_2x2_to_sprites::num_chars#1 (byte) font_2x2_to_sprites::num_chars#0 Identical Phi Values (byte*) font_2x2_to_sprites::font_2x2#5 (byte*) font_2x2_to_sprites::font_2x2#0 Identical Phi Values (byte*) font_2x2::next_original#2 (byte*) font_2x2::next_original#4 Identical Phi Values (byte*) font_2x2::next_2x2#11 (byte*) font_2x2::next_2x2_left#0 Identical Phi Values (byte) font_2x2::c#10 (byte) font_2x2::c#11 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) SPRITE_0#9 (byte) toSpritePtr1_return#0 +Successful SSA optimization Pass2IdenticalPhiElimination Identified duplicate assignment right side [73] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 * (const byte) SIZEOF_WORD -Identified duplicate assignment right side [251] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7 -Identified duplicate assignment right side [319] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 -Identified duplicate assignment right side [324] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2 +Identified duplicate assignment right side [276] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7 +Identified duplicate assignment right side [344] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 +Identified duplicate assignment right side [349] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2 Successful SSA optimization Pass2DuplicateRValueIdentification Simple Condition (bool~) plexInit::$1 [11] if((byte) plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 Simple Condition (bool~) plexSort::$3 [19] if((byte) plexSort::nxt_y#0>=*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2))) goto plexSort::@2 @@ -1830,28 +2087,33 @@ Simple Condition (bool~) plexSort::$8 [23] if((byte) plexSort::m#1!=rangelast(0, Simple Condition (bool~) plexSort::plexFreePrepare1_$0 [42] if((byte) plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 Simple Condition (bool~) plexShowSprite::$4 [62] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 Simple Condition (bool~) plexShowSprite::$8 [72] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return -Simple Condition (bool~) main::$7 [117] if((byte) main::s#1!=rangelast(0,PLEX_COUNT-1)) goto main::@1 -Simple Condition (bool~) main::$8 [124] if((byte) main::s1#1!=rangelast(0,7)) goto main::@3 -Simple Condition (bool~) plexSine::$0 [155] if((byte) plexSine::sy#1!=rangelast(0,PLEX_COUNT-1)) goto plexSine::@1 -Simple Condition (bool~) plex_irq::$0 [171] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 -Simple Condition (bool~) font_2x2_to_sprites::$0 [182] if((byte) font_2x2_to_sprites::c#2<(byte) font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2 -Simple Condition (bool~) font_2x2_to_sprites::$4 [196] if((byte) font_2x2_to_sprites::i#2==(byte) 7) goto font_2x2_to_sprites::@5 -Simple Condition (bool~) font_2x2_to_sprites::$6 [200] if((byte) font_2x2_to_sprites::i#2!=(byte) $f) goto font_2x2_to_sprites::@7 -Simple Condition (bool~) font_2x2_to_sprites::$11 [206] if((byte) font_2x2_to_sprites::i#1!=rangelast(0,$14)) goto font_2x2_to_sprites::@4 -Simple Condition (bool~) font_2x2::$22 [224] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4 -Simple Condition (bool~) font_2x2::$9 [235] if((byte) font_2x2::b#1!=rangelast(0,7)) goto font_2x2::@3 -Simple Condition (bool~) font_2x2::$17 [248] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@11 -Simple Condition (bool~) font_2x2::$20 [252] if((byte) font_2x2::l#1!=rangelast(0,7)) goto font_2x2::@2 -Simple Condition (bool~) font_2x2::$21 [260] if((byte) font_2x2::c#1!=rangelast(0,$3f)) goto font_2x2::@1 +Simple Condition (bool~) main::$6 [111] if((byte) main::s#2<(const nomodify byte) PLEX_COUNT) goto main::@2 +Simple Condition (bool~) main::$8 [125] if((byte) main::s1#1!=rangelast(0,7)) goto main::@7 +Simple Condition (bool~) plex_move::$1 [157] if(*((const word*) PLEX_XPOS + (byte~) plex_move::$6)!=(byte) 0) goto plex_move::@2 +Simple Condition (bool~) plex_move::$5 [161] if((byte) plex_move::s#1!=rangelast(0,PLEX_COUNT-1)) goto plex_move::@1 +Simple Condition (bool~) plex_move::$3 [165] if(*((byte*) scroll_text_next#11)!=(byte) 0) goto plex_move::@3 +Simple Condition (bool~) plex_irq::$0 [186] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 +Simple Condition (bool~) font_2x2_to_sprites::$0 [197] if((byte) font_2x2_to_sprites::c#2<(byte) font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2 +Simple Condition (bool~) font_2x2_to_sprites::$4 [211] if((byte) font_2x2_to_sprites::i#2==(byte) 7) goto font_2x2_to_sprites::@5 +Simple Condition (bool~) font_2x2_to_sprites::$6 [215] if((byte) font_2x2_to_sprites::i#2!=(byte) $f) goto font_2x2_to_sprites::@7 +Simple Condition (bool~) font_2x2_to_sprites::$11 [221] if((byte) font_2x2_to_sprites::i#1!=rangelast(0,$14)) goto font_2x2_to_sprites::@4 +Simple Condition (bool~) font_2x2::$22 [239] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4 +Simple Condition (bool~) font_2x2::$9 [250] if((byte) font_2x2::b#1!=rangelast(0,7)) goto font_2x2::@3 +Simple Condition (bool~) font_2x2::$17 [263] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@11 +Simple Condition (bool~) font_2x2::$20 [267] if((byte) font_2x2::l#1!=rangelast(0,7)) goto font_2x2::@2 +Simple Condition (bool~) font_2x2::$21 [275] if((byte) font_2x2::c#1!=rangelast(0,$3f)) goto font_2x2::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Rewriting && if()-condition to two if()s [30] (bool~) plexSort::$7 ← (bool~) plexSort::$5 && (bool~) plexSort::$6 -Rewriting ! if()-condition to reversed if() [139] (bool~) main::$9 ← ! (volatile bool) framedone -Rewriting && if()-condition to two if()s [168] (bool~) plex_irq::$6 ← (bool~) plex_irq::$3 && (bool~) plex_irq::$5 +Rewriting ! if()-condition to reversed if() [140] (bool~) main::$9 ← ! (volatile bool) frame_done +Rewriting && if()-condition to two if()s [183] (bool~) plex_irq::$6 ← (bool~) plex_irq::$3 && (bool~) plex_irq::$5 Successful SSA optimization Pass2ConditionalAndOrRewriting +Constant right-side identified [163] *((const word*) PLEX_XPOS + (byte~) plex_move::$7) ← (unumber)(number) $b*(number) $20 +Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) PLEX_SCREEN_PTR#0 = (byte*)$400+$3f8 Constant (const byte) plexInit::i#0 = 0 Constant (const byte) plexSort::m#0 = 0 Constant (const byte) plexSort::plexFreePrepare1_s#0 = 0 +Constant (const byte*) toSpritePtr1_sprite#0 = SPRITES Constant (const byte*) font_2x2::font_original#0 = CHARGEN Constant (const byte*) font_2x2::font_2x2#0 = FONT Constant (const byte*) font_2x2_to_sprites::font_2x2#0 = FONT @@ -1860,12 +2122,13 @@ Constant (const byte) font_2x2_to_sprites::num_chars#0 = $40 Constant (const byte*) plexInit::screen#0 = SCREEN Constant (const byte*) main::toD0181_screen#0 = SCREEN Constant (const byte*) main::toD0181_gfx#0 = CHARSET_DEFAULT -Constant (const word) main::xp#0 = $18 -Constant (const byte*) main::toSpritePtr1_sprite#0 = SPRITES Constant (const byte) main::s#0 = 0 +Constant (const byte) main::x#0 = 0 Constant (const byte) main::s1#0 = 0 +Constant (const byte*) scroll_text_next#20 = SCROLL_TEXT Constant (const byte) sin_idx#18 = 0 -Constant (const byte) plexSine::sy#0 = 0 +Constant (const byte) plex_move::s#0 = 0 +Constant (const byte*) scroll_text_next#5 = SCROLL_TEXT Constant (const byte) plex_irq::rasterY#0 = 0 Constant (const byte) font_2x2_to_sprites::c#0 = 0 Constant (const byte) font_2x2_to_sprites::sprite_idx#0 = 0 @@ -1879,11 +2142,11 @@ Constant (const byte) font_2x2::$3 = 1 Constant (const byte) font_2x2::$2 = 0 Constant (const byte) font_2x2::l2#2 = 0 Successful SSA optimization Pass2ConstantIdentification +Constant (const word) toSpritePtr1_$0 = (word)toSpritePtr1_sprite#0 Constant (const word) main::toD0181_$0 = (word)main::toD0181_screen#0 Constant (const word) main::toD0181_$4 = (word)main::toD0181_gfx#0 -Constant (const word) main::toSpritePtr1_$0 = (word)main::toSpritePtr1_sprite#0 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [137] if(true) goto main::@8 +if() condition always true - replacing block destination [138] if(true) goto main::@12 Successful SSA optimization Pass2ConstantIfs Resolved ranged next value [9] plexInit::i#1 ← ++ plexInit::i#2 to ++ Resolved ranged comparison value [11] if(plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 to (const nomodify byte) PLEX_COUNT-(byte) 1+(number) 1 @@ -1891,20 +2154,18 @@ Resolved ranged next value [21] plexSort::m#1 ← ++ plexSort::m#2 to ++ Resolved ranged comparison value [23] if(plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1 to (const nomodify byte) PLEX_COUNT-(byte) 2+(number) 1 Resolved ranged next value [40] plexSort::plexFreePrepare1_s#1 ← ++ plexSort::plexFreePrepare1_s#2 to ++ Resolved ranged comparison value [42] if(plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 to (number) 8 -Resolved ranged next value [115] main::s#1 ← ++ main::s#2 to ++ -Resolved ranged comparison value [117] if(main::s#1!=rangelast(0,PLEX_COUNT-1)) goto main::@1 to (const nomodify byte) PLEX_COUNT-(byte) 1+(number) 1 -Resolved ranged next value [122] main::s1#1 ← ++ main::s1#2 to ++ -Resolved ranged comparison value [124] if(main::s1#1!=rangelast(0,7)) goto main::@3 to (number) 8 -Resolved ranged next value [153] plexSine::sy#1 ← ++ plexSine::sy#2 to ++ -Resolved ranged comparison value [155] if(plexSine::sy#1!=rangelast(0,PLEX_COUNT-1)) goto plexSine::@1 to (const nomodify byte) PLEX_COUNT-(byte) 1+(number) 1 -Resolved ranged next value [204] font_2x2_to_sprites::i#1 ← ++ font_2x2_to_sprites::i#2 to ++ -Resolved ranged comparison value [206] if(font_2x2_to_sprites::i#1!=rangelast(0,$14)) goto font_2x2_to_sprites::@4 to (number) $15 -Resolved ranged next value [233] font_2x2::b#1 ← ++ font_2x2::b#2 to ++ -Resolved ranged comparison value [235] if(font_2x2::b#1!=rangelast(0,7)) goto font_2x2::@3 to (number) 8 -Resolved ranged next value [250] font_2x2::l#1 ← ++ font_2x2::l#2 to ++ -Resolved ranged comparison value [252] if(font_2x2::l#1!=rangelast(0,7)) goto font_2x2::@2 to (number) 8 -Resolved ranged next value [258] font_2x2::c#1 ← ++ font_2x2::c#11 to ++ -Resolved ranged comparison value [260] if(font_2x2::c#1!=rangelast(0,$3f)) goto font_2x2::@1 to (number) $40 +Resolved ranged next value [123] main::s1#1 ← ++ main::s1#2 to ++ +Resolved ranged comparison value [125] if(main::s1#1!=rangelast(0,7)) goto main::@7 to (number) 8 +Resolved ranged next value [159] plex_move::s#1 ← ++ plex_move::s#2 to ++ +Resolved ranged comparison value [161] if(plex_move::s#1!=rangelast(0,PLEX_COUNT-1)) goto plex_move::@1 to (const nomodify byte) PLEX_COUNT-(byte) 1+(number) 1 +Resolved ranged next value [219] font_2x2_to_sprites::i#1 ← ++ font_2x2_to_sprites::i#2 to ++ +Resolved ranged comparison value [221] if(font_2x2_to_sprites::i#1!=rangelast(0,$14)) goto font_2x2_to_sprites::@4 to (number) $15 +Resolved ranged next value [248] font_2x2::b#1 ← ++ font_2x2::b#2 to ++ +Resolved ranged comparison value [250] if(font_2x2::b#1!=rangelast(0,7)) goto font_2x2::@3 to (number) 8 +Resolved ranged next value [265] font_2x2::l#1 ← ++ font_2x2::l#2 to ++ +Resolved ranged comparison value [267] if(font_2x2::l#1!=rangelast(0,7)) goto font_2x2::@2 to (number) 8 +Resolved ranged next value [273] font_2x2::c#1 ← ++ font_2x2::c#11 to ++ +Resolved ranged comparison value [275] if(font_2x2::c#1!=rangelast(0,$3f)) goto font_2x2::@1 to (number) $40 Eliminating unused variable (byte*) PLEX_SCREEN_PTR#1 and assignment [3] (byte*) PLEX_SCREEN_PTR#1 ← (const byte*) plexInit::screen#0 + (word) $3f8 Eliminating unused constant (const byte) plex_irq::rasterY#0 Successful SSA optimization PassNEliminateUnusedVars @@ -1917,11 +2178,9 @@ Adding number conversion cast (unumber) 1 in if((byte) plexInit::i#1!=(unumber)( Adding number conversion cast (unumber) PLEX_COUNT-2+1 in if((byte) plexSort::m#1!=(const nomodify byte) PLEX_COUNT-(byte) 2+(number) 1) goto plexSort::@1 Adding number conversion cast (unumber) 1 in if((byte) plexSort::m#1!=(unumber)(const nomodify byte) PLEX_COUNT-(byte) 2+(number) 1) goto plexSort::@1 Adding number conversion cast (unumber) 8 in if((byte) plexSort::plexFreePrepare1_s#1!=(number) 8) goto plexSort::plexFreePrepare1_@1 -Adding number conversion cast (unumber) PLEX_COUNT-1+1 in if((byte) main::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(number) 1) goto main::@1 -Adding number conversion cast (unumber) 1 in if((byte) main::s#1!=(unumber)(const nomodify byte) PLEX_COUNT-(byte) 1+(number) 1) goto main::@1 -Adding number conversion cast (unumber) 8 in if((byte) main::s1#1!=(number) 8) goto main::@3 -Adding number conversion cast (unumber) PLEX_COUNT-1+1 in if((byte) plexSine::sy#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(number) 1) goto plexSine::@1 -Adding number conversion cast (unumber) 1 in if((byte) plexSine::sy#1!=(unumber)(const nomodify byte) PLEX_COUNT-(byte) 1+(number) 1) goto plexSine::@1 +Adding number conversion cast (unumber) 8 in if((byte) main::s1#1!=(number) 8) goto main::@7 +Adding number conversion cast (unumber) PLEX_COUNT-1+1 in if((byte) plex_move::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(number) 1) goto plex_move::@1 +Adding number conversion cast (unumber) 1 in if((byte) plex_move::s#1!=(unumber)(const nomodify byte) PLEX_COUNT-(byte) 1+(number) 1) goto plex_move::@1 Adding number conversion cast (unumber) $15 in if((byte) font_2x2_to_sprites::i#1!=(number) $15) goto font_2x2_to_sprites::@4 Adding number conversion cast (unumber) 8 in if((byte) font_2x2::b#1!=(number) 8) goto font_2x2::@3 Adding number conversion cast (unumber) 8 in if((byte) font_2x2::l#1!=(number) 8) goto font_2x2::@2 @@ -1932,8 +2191,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast (const nomodify byte) PLEX_COUNT-(byte) 2+(unumber)(number) 1 Simplifying constant integer cast 1 Simplifying constant integer cast 8 -Simplifying constant integer cast (const nomodify byte) PLEX_COUNT-(byte) 1+(unumber)(number) 1 -Simplifying constant integer cast 1 Simplifying constant integer cast 8 Simplifying constant integer cast (const nomodify byte) PLEX_COUNT-(byte) 1+(unumber)(number) 1 Simplifying constant integer cast 1 @@ -1945,7 +2202,6 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 8 -Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $15 @@ -1963,26 +2219,26 @@ Successful SSA optimization Pass2AliasElimination Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Simple Condition (bool~) plexSort::$5 [21] if((byte) plexSort::s#1!=(byte) $ff) goto plexSort::@8 -Simple Condition (bool~) plex_irq::$3 [120] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@9 -Simple Condition (bool~) plexSort::$6 [188] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 -Simple Condition (bool~) plex_irq::$5 [189] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3 +Simple Condition (bool~) plex_irq::$3 [131] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@9 +Simple Condition (bool~) plexSort::$6 [199] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 +Simple Condition (bool~) plex_irq::$5 [200] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3 Successful SSA optimization Pass2ConditionalJumpSimplification Negating conditional jump and destination [21] if((byte) plexSort::s#1==(byte) $ff) goto plexSort::@4 -Negating conditional jump and destination [120] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 +Negating conditional jump and destination [131] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement -Constant right-side identified [67] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff -Constant right-side identified [70] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 -Constant right-side identified [75] (word~) main::toSpritePtr1_$1 ← (const word) main::toSpritePtr1_$0 / (byte) $40 -Constant right-side identified [143] (byte*) font_2x2_to_sprites::char_left#2 ← (const byte*) font_2x2_to_sprites::font_2x2#0 + (byte) ' '*(byte) 8 -Constant right-side identified [144] (byte*) font_2x2_to_sprites::char_right#2 ← (const byte*) font_2x2_to_sprites::font_2x2#0 + (byte) ' '*(byte) 8 +Constant right-side identified [60] (word~) toSpritePtr1_$1 ← (const word) toSpritePtr1_$0 / (byte) $40 +Constant right-side identified [69] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff +Constant right-side identified [72] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 +Constant right-side identified [154] (byte*) font_2x2_to_sprites::char_left#2 ← (const byte*) font_2x2_to_sprites::font_2x2#0 + (byte) ' '*(byte) 8 +Constant right-side identified [155] (byte*) font_2x2_to_sprites::char_right#2 ← (const byte*) font_2x2_to_sprites::font_2x2#0 + (byte) ' '*(byte) 8 Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const word) toSpritePtr1_$1 = toSpritePtr1_$0/$40 Constant (const word) main::toD0181_$1 = main::toD0181_$0&$3fff Constant (const byte) main::toD0181_$5 = >main::toD0181_$4 -Constant (const word) main::toSpritePtr1_$1 = main::toSpritePtr1_$0/$40 Constant (const byte*) font_2x2_to_sprites::char_left#2 = font_2x2_to_sprites::font_2x2#0+' '*8 Constant (const byte*) font_2x2_to_sprites::char_right#2 = font_2x2_to_sprites::font_2x2#0+' '*8 Successful SSA optimization Pass2ConstantIdentification -Constant (const byte) main::toSpritePtr1_return#0 = (byte)main::toSpritePtr1_$1 +Constant (const byte) toSpritePtr1_return#0 = (byte)toSpritePtr1_$1 Successful SSA optimization Pass2ConstantIdentification Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2 Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 @@ -2010,15 +2266,17 @@ Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_ Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6 Rewriting multiplication to use shift [31] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx * (byte) 2 Rewriting multiplication to use shift [41] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [69] (byte~) main::$12 ← (byte) main::s#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [70] (byte~) main::$12 ← (byte) main::s#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [99] (byte~) plex_move::$6 ← (byte) plex_move::s#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [104] (byte~) plex_move::$7 ← (byte) plex_move::s#2 * (const byte) SIZEOF_WORD Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte) plexInit::i#0 Inlining constant with var siblings (const byte) plexSort::m#0 Inlining constant with var siblings (const byte) plexSort::plexFreePrepare1_s#0 -Inlining constant with var siblings (const word) main::xp#0 Inlining constant with var siblings (const byte) main::s#0 +Inlining constant with var siblings (const byte) main::x#0 Inlining constant with var siblings (const byte) main::s1#0 -Inlining constant with var siblings (const byte) plexSine::sy#0 +Inlining constant with var siblings (const byte) plex_move::s#0 Inlining constant with var siblings (const byte) font_2x2_to_sprites::c#0 Inlining constant with var siblings (const byte) font_2x2_to_sprites::sprite_idx#0 Inlining constant with var siblings (const byte) font_2x2_to_sprites::i#0 @@ -2030,25 +2288,25 @@ Inlining constant with var siblings (const byte) font_2x2::l#0 Inlining constant with var siblings (const word) font_2x2::glyph_bits_2x2#0 Inlining constant with var siblings (const byte) font_2x2::b#0 Inlining constant with var siblings (const byte) font_2x2::l2#2 +Inlining constant with var siblings (const byte*) scroll_text_next#20 Inlining constant with var siblings (const byte) sin_idx#18 -Constant inlined main::xp#0 = (word) $18 +Inlining constant with var siblings (const byte*) scroll_text_next#5 Constant inlined main::toD0181_screen#0 = (const nomodify byte*) SCREEN Constant inlined main::toD0181_gfx#0 = (const nomodify byte*) CHARSET_DEFAULT -Constant inlined main::toSpritePtr1_$0 = (word)(const nomodify byte*) SPRITES +Constant inlined scroll_text_next#20 = (const byte*) SCROLL_TEXT Constant inlined plexSort::plexFreePrepare1_s#0 = (byte) 0 Constant inlined plexInit::i#0 = (byte) 0 Constant inlined plexSort::m#0 = (byte) 0 Constant inlined font_2x2::glyph_bits_2x2#0 = (word) 0 Constant inlined font_2x2::l2#0 = (byte) 0 -Constant inlined font_2x2::font_2x2#0 = (const nomodify byte*) FONT +Constant inlined font_2x2::font_2x2#0 = (const byte*) FONT Constant inlined sin_idx#18 = (byte) 0 Constant inlined font_2x2::l2#2 = (byte) 0 -Constant inlined font_2x2_to_sprites::char_right#2 = (const nomodify byte*) FONT+(byte) ' '*(byte) 8 -Constant inlined main::toSpritePtr1_$1 = (word)(const nomodify byte*) SPRITES/(byte) $40 -Constant inlined font_2x2_to_sprites::font_2x2#0 = (const nomodify byte*) FONT -Constant inlined plexSine::sy#0 = (byte) 0 +Constant inlined toSpritePtr1_$0 = (word)(const nomodify byte*) SPRITES +Constant inlined toSpritePtr1_$1 = (word)(const nomodify byte*) SPRITES/(byte) $40 +Constant inlined font_2x2_to_sprites::char_right#2 = (const byte*) FONT+(byte) ' '*(byte) 8 +Constant inlined font_2x2_to_sprites::font_2x2#0 = (const byte*) FONT Constant inlined main::s1#0 = (byte) 0 -Constant inlined main::toSpritePtr1_sprite#0 = (const nomodify byte*) SPRITES Constant inlined font_2x2::$2 = (byte) 0 Constant inlined font_2x2::$3 = (byte) 1 Constant inlined main::s#0 = (byte) 0 @@ -2060,13 +2318,17 @@ Constant inlined main::toD0181_$2 = (word)(const nomodify byte*) SCREEN&(word) $ Constant inlined font_2x2_to_sprites::c#0 = (byte) 0 Constant inlined main::toD0181_$1 = (word)(const nomodify byte*) SCREEN&(word) $3fff Constant inlined main::toD0181_$0 = (word)(const nomodify byte*) SCREEN +Constant inlined main::x#0 = (byte) 0 Constant inlined main::toD0181_$6 = >(word)(const nomodify byte*) CHARSET_DEFAULT/(byte) 4 Constant inlined main::toD0181_$5 = >(word)(const nomodify byte*) CHARSET_DEFAULT -Constant inlined font_2x2_to_sprites::char_left#2 = (const nomodify byte*) FONT+(byte) ' '*(byte) 8 +Constant inlined font_2x2_to_sprites::char_left#2 = (const byte*) FONT+(byte) ' '*(byte) 8 Constant inlined main::toD0181_$4 = (word)(const nomodify byte*) CHARSET_DEFAULT Constant inlined main::toD0181_$3 = >(word)(const nomodify byte*) SCREEN&(word) $3fff*(byte) 4 Constant inlined font_2x2::l#0 = (byte) 0 Constant inlined font_2x2_to_sprites::sprites#0 = (const nomodify byte*) SPRITES +Constant inlined plex_move::s#0 = (byte) 0 +Constant inlined toSpritePtr1_sprite#0 = (const nomodify byte*) SPRITES +Constant inlined scroll_text_next#5 = (const byte*) SCROLL_TEXT Constant inlined font_2x2::font_original#0 = (const nomodify byte*) CHARGEN Constant inlined font_2x2_to_sprites::sprite_idx#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining @@ -2088,9 +2350,10 @@ Added new block during phi lifting plexInit::@4(between plexInit::@1 and plexIni Added new block during phi lifting plexSort::@9(between plexSort::@2 and plexSort::@1) Added new block during phi lifting plexSort::@10(between plexSort::@8 and plexSort::@3) Added new block during phi lifting plexSort::@11(between plexSort::plexFreePrepare1_@1 and plexSort::plexFreePrepare1_@1) -Added new block during phi lifting main::@26(between main::@1 and main::@1) -Added new block during phi lifting main::@27(between main::@3 and main::@3) -Added new block during phi lifting plexSine::@3(between plexSine::@1 and plexSine::@1) +Added new block during phi lifting main::@29(between main::@7 and main::@7) +Added new block during phi lifting plex_move::@7(between plex_move::@2 and plex_move::@1) +Added new block during phi lifting plex_move::@8(between plex_move::@1 and plex_move::@2) +Added new block during phi lifting plex_move::@9(between plex_move::@4 and plex_move::@3) Added new block during phi lifting font_2x2_to_sprites::@15(between font_2x2_to_sprites::@7 and font_2x2_to_sprites::@4) Added new block during phi lifting font_2x2_to_sprites::@16(between font_2x2_to_sprites::@8 and font_2x2_to_sprites::@7) Added new block during phi lifting font_2x2::@14(between font_2x2::@12 and font_2x2::@1) @@ -2098,23 +2361,26 @@ Added new block during phi lifting font_2x2::@15(between font_2x2::@11 and font_ Added new block during phi lifting font_2x2::@16(between font_2x2::@6 and font_2x2::@3) Added new block during phi lifting font_2x2::@17(between font_2x2::@9 and font_2x2::@11) Adding NOP phi() at start of @begin +Adding NOP phi() at start of @12 +Adding NOP phi() at start of toSpritePtr1 +Adding NOP phi() at start of toSpritePtr1_@return +Adding NOP phi() at start of @18 Adding NOP phi() at start of @13 Adding NOP phi() at start of @17 -Adding NOP phi() at start of @18 +Adding NOP phi() at start of @19 Adding NOP phi() at start of @end -Adding NOP phi() at start of main::@20 -Adding NOP phi() at start of main::@21 +Adding NOP phi() at start of main::@23 +Adding NOP phi() at start of main::@24 Adding NOP phi() at start of main::toD0181 Adding NOP phi() at start of main::toD0181_@return -Adding NOP phi() at start of main::toSpritePtr1 -Adding NOP phi() at start of main::toSpritePtr1_@return -Adding NOP phi() at start of main::@18 -Adding NOP phi() at start of main::@4 -Adding NOP phi() at start of main::@22 -Adding NOP phi() at start of main::@5 -Adding NOP phi() at start of main::@24 +Adding NOP phi() at start of main::@8 +Adding NOP phi() at start of main::@25 +Adding NOP phi() at start of main::@9 +Adding NOP phi() at start of main::@27 +Adding NOP phi() at start of main::@28 Adding NOP phi() at start of plexSort Adding NOP phi() at start of plexSort::plexFreePrepare1 +Adding NOP phi() at start of plex_move::@5 Adding NOP phi() at start of plexInit Adding NOP phi() at start of plexInit::plexSetScreen1 Adding NOP phi() at start of plexInit::@3 @@ -2127,69 +2393,77 @@ Adding NOP phi() at start of plex_irq::@3 Adding NOP phi() at start of plex_irq::@8 Adding NOP phi() at start of plex_irq::plexFreeNextYpos1_@return CALL GRAPH -Calls in [] to main:8 -Calls in [main] to font_2x2:13 font_2x2_to_sprites:16 plexInit:18 plexSine:40 plexSort:42 plexSine:54 plexSort:56 -Calls in [plex_irq] to plexShowSprite:206 +Calls in [] to main:12 +Calls in [main] to font_2x2:17 font_2x2_to_sprites:20 plexInit:22 plex_move:35 plexSort:37 plex_move:51 plexSort:53 +Calls in [plex_irq] to plexShowSprite:225 -Created 34 initial phi equivalence classes -Coalesced [53] sin_idx#36 ← sin_idx#12 -Coalesced [58] main::s1#3 ← main::s1#1 -Coalesced [59] main::sprite#3 ← main::sprite#1 -Coalesced [60] main::s#3 ← main::s#1 -Coalesced [61] main::xp#6 ← main::xp#1 -Not coalescing [67] plexSort::s#6 ← plexSort::m#2 -Coalesced [87] plexSort::plexFreePrepare1_s#3 ← plexSort::plexFreePrepare1_s#1 -Coalesced [88] plexSort::m#7 ← plexSort::m#1 -Coalesced [89] plexSort::s#5 ← plexSort::s#1 -Coalesced [92] plexSine::y_idx#3 ← plexSine::y_idx#0 -Coalesced [100] plexSine::y_idx#4 ← plexSine::y_idx#1 -Coalesced [101] plexSine::sy#3 ← plexSine::sy#1 -Coalesced [110] plexInit::i#3 ← plexInit::i#1 -Not coalescing [116] font_2x2_to_sprites::char_left#6 ← font_2x2_to_sprites::char_current#2 -Coalesced [117] font_2x2_to_sprites::char_right#6 ← font_2x2_to_sprites::char_right#0 -Coalesced [135] font_2x2_to_sprites::c#10 ← font_2x2_to_sprites::c#1 -Coalesced [136] font_2x2_to_sprites::char_current#10 ← font_2x2_to_sprites::char_current#1 -Coalesced [137] font_2x2_to_sprites::sprite#10 ← font_2x2_to_sprites::sprite#1 -Coalesced [138] font_2x2_to_sprites::i#7 ← font_2x2_to_sprites::i#1 -Coalesced [139] font_2x2_to_sprites::char_left#7 ← font_2x2_to_sprites::char_left#4 -Coalesced [140] font_2x2_to_sprites::sprite_idx#9 ← font_2x2_to_sprites::sprite_idx#3 -Coalesced [141] font_2x2_to_sprites::char_right#7 ← font_2x2_to_sprites::char_right#4 -Coalesced (already) [142] font_2x2_to_sprites::char_left#9 ← font_2x2_to_sprites::char_left#3 -Coalesced (already) [143] font_2x2_to_sprites::char_right#9 ← font_2x2_to_sprites::char_right#3 -Coalesced [146] font_2x2_to_sprites::char_left#8 ← font_2x2_to_sprites::char_left#1 -Coalesced [147] font_2x2_to_sprites::char_right#8 ← font_2x2_to_sprites::char_right#1 -Not coalescing [151] font_2x2::next_2x2_left#10 ← font_2x2::next_2x2_left#0 -Coalesced [152] font_2x2::next_2x2_right#9 ← font_2x2::next_2x2_right#0 -Coalesced [155] font_2x2::glyph_bits#6 ← font_2x2::glyph_bits#0 -Coalesced [180] font_2x2::next_2x2_left#12 ← font_2x2::next_2x2_left#1 -Coalesced [181] font_2x2::next_2x2_right#11 ← font_2x2::next_2x2_right#1 -Coalesced [190] font_2x2::next_2x2_left#9 ← font_2x2::next_2x2#1 -Coalesced [191] font_2x2::next_original#12 ← font_2x2::next_original#1 -Coalesced [192] font_2x2::c#12 ← font_2x2::c#1 -Coalesced [193] font_2x2::l#10 ← font_2x2::l#1 -Coalesced [194] font_2x2::next_2x2_left#11 ← font_2x2::next_2x2_left#8 -Coalesced [195] font_2x2::l2#10 ← font_2x2::l2#9 -Coalesced [196] font_2x2::next_2x2_right#10 ← font_2x2::next_2x2_right#8 -Coalesced (already) [197] font_2x2::next_2x2_left#13 ← font_2x2::next_2x2_left#7 -Coalesced [198] font_2x2::l2#11 ← font_2x2::l2#1 -Coalesced (already) [199] font_2x2::next_2x2_right#12 ← font_2x2::next_2x2_right#7 -Coalesced [200] font_2x2::glyph_bits#7 ← font_2x2::glyph_bits#1 -Coalesced [201] font_2x2::glyph_bits_2x2#8 ← font_2x2::glyph_bits_2x2#2 -Coalesced [202] font_2x2::b#6 ← font_2x2::b#1 +Created 37 initial phi equivalence classes +Coalesced [49] sin_idx#38 ← sin_idx#12 +Coalesced [50] scroll_text_next#38 ← scroll_text_next#13 +Coalesced [55] main::s1#3 ← main::s1#1 +Coalesced [63] main::s#4 ← main::s#1 +Coalesced [64] main::x#4 ← main::x#1 +Not coalescing [70] plexSort::s#6 ← plexSort::m#2 +Coalesced [90] plexSort::plexFreePrepare1_s#3 ← plexSort::plexFreePrepare1_s#1 +Coalesced [91] plexSort::m#7 ← plexSort::m#1 +Coalesced [92] plexSort::s#5 ← plexSort::s#1 +Coalesced [95] plex_move::y_idx#7 ← plex_move::y_idx#0 +Coalesced [96] scroll_text_next#39 ← scroll_text_next#25 +Coalesced [110] scroll_text_next#42 ← scroll_text_next#4 +Coalesced [116] plex_move::y_idx#8 ← plex_move::y_idx#1 +Coalesced [117] plex_move::s#7 ← plex_move::s#1 +Coalesced (already) [118] scroll_text_next#40 ← scroll_text_next#13 +Coalesced [119] scroll_text_next#43 ← scroll_text_next#11 +Coalesced (already) [120] scroll_text_next#41 ← scroll_text_next#11 +Coalesced [129] plexInit::i#3 ← plexInit::i#1 +Not coalescing [135] font_2x2_to_sprites::char_left#6 ← font_2x2_to_sprites::char_current#2 +Coalesced [136] font_2x2_to_sprites::char_right#6 ← font_2x2_to_sprites::char_right#0 +Coalesced [154] font_2x2_to_sprites::c#10 ← font_2x2_to_sprites::c#1 +Coalesced [155] font_2x2_to_sprites::char_current#10 ← font_2x2_to_sprites::char_current#1 +Coalesced [156] font_2x2_to_sprites::sprite#10 ← font_2x2_to_sprites::sprite#1 +Coalesced [157] font_2x2_to_sprites::i#7 ← font_2x2_to_sprites::i#1 +Coalesced [158] font_2x2_to_sprites::char_left#7 ← font_2x2_to_sprites::char_left#4 +Coalesced [159] font_2x2_to_sprites::sprite_idx#9 ← font_2x2_to_sprites::sprite_idx#3 +Coalesced [160] font_2x2_to_sprites::char_right#7 ← font_2x2_to_sprites::char_right#4 +Coalesced (already) [161] font_2x2_to_sprites::char_left#9 ← font_2x2_to_sprites::char_left#3 +Coalesced (already) [162] font_2x2_to_sprites::char_right#9 ← font_2x2_to_sprites::char_right#3 +Coalesced [165] font_2x2_to_sprites::char_left#8 ← font_2x2_to_sprites::char_left#1 +Coalesced [166] font_2x2_to_sprites::char_right#8 ← font_2x2_to_sprites::char_right#1 +Not coalescing [170] font_2x2::next_2x2_left#10 ← font_2x2::next_2x2_left#0 +Coalesced [171] font_2x2::next_2x2_right#9 ← font_2x2::next_2x2_right#0 +Coalesced [174] font_2x2::glyph_bits#6 ← font_2x2::glyph_bits#0 +Coalesced [199] font_2x2::next_2x2_left#12 ← font_2x2::next_2x2_left#1 +Coalesced [200] font_2x2::next_2x2_right#11 ← font_2x2::next_2x2_right#1 +Coalesced [209] font_2x2::next_2x2_left#9 ← font_2x2::next_2x2#1 +Coalesced [210] font_2x2::next_original#12 ← font_2x2::next_original#1 +Coalesced [211] font_2x2::c#12 ← font_2x2::c#1 +Coalesced [212] font_2x2::l#10 ← font_2x2::l#1 +Coalesced [213] font_2x2::next_2x2_left#11 ← font_2x2::next_2x2_left#8 +Coalesced [214] font_2x2::l2#10 ← font_2x2::l2#9 +Coalesced [215] font_2x2::next_2x2_right#10 ← font_2x2::next_2x2_right#8 +Coalesced (already) [216] font_2x2::next_2x2_left#13 ← font_2x2::next_2x2_left#7 +Coalesced [217] font_2x2::l2#11 ← font_2x2::l2#1 +Coalesced (already) [218] font_2x2::next_2x2_right#12 ← font_2x2::next_2x2_right#7 +Coalesced [219] font_2x2::glyph_bits#7 ← font_2x2::glyph_bits#1 +Coalesced [220] font_2x2::glyph_bits_2x2#8 ← font_2x2::glyph_bits_2x2#2 +Coalesced [221] font_2x2::b#6 ← font_2x2::b#1 Coalesced down to 29 phi equivalence classes -Culled Empty Block (label) @13 +Culled Empty Block (label) @12 +Culled Empty Block (label) toSpritePtr1_@return Culled Empty Block (label) @18 -Culled Empty Block (label) main::@21 +Culled Empty Block (label) @13 +Culled Empty Block (label) @19 +Culled Empty Block (label) main::@24 Culled Empty Block (label) main::toD0181_@return -Culled Empty Block (label) main::toSpritePtr1_@return -Culled Empty Block (label) main::@18 -Culled Empty Block (label) main::@5 -Culled Empty Block (label) main::@27 -Culled Empty Block (label) main::@26 +Culled Empty Block (label) main::@9 +Culled Empty Block (label) main::@28 +Culled Empty Block (label) main::@29 Culled Empty Block (label) plexSort::@11 Culled Empty Block (label) plexSort::@9 Culled Empty Block (label) plexSort::@10 -Culled Empty Block (label) plexSine::@3 +Culled Empty Block (label) plex_move::@5 +Culled Empty Block (label) plex_move::@7 +Culled Empty Block (label) plex_move::@8 Culled Empty Block (label) plexInit::@3 Culled Empty Block (label) plexInit::@4 Culled Empty Block (label) font_2x2_to_sprites::@9 @@ -2209,15 +2483,18 @@ Renumbering block plexSort::@8 to plexSort::@7 Renumbering block plexShowSprite::@4 to plexShowSprite::@3 Renumbering block plexShowSprite::@6 to plexShowSprite::@4 Renumbering block plexShowSprite::@7 to plexShowSprite::@5 +Renumbering block main::@7 to main::@4 Renumbering block main::@8 to main::@5 -Renumbering block main::@10 to main::@6 -Renumbering block main::@17 to main::@7 -Renumbering block main::@19 to main::@8 -Renumbering block main::@20 to main::@9 -Renumbering block main::@22 to main::@10 -Renumbering block main::@23 to main::@11 -Renumbering block main::@24 to main::@12 -Renumbering block main::@25 to main::@13 +Renumbering block main::@12 to main::@6 +Renumbering block main::@14 to main::@7 +Renumbering block main::@21 to main::@8 +Renumbering block main::@22 to main::@9 +Renumbering block main::@23 to main::@10 +Renumbering block main::@25 to main::@11 +Renumbering block main::@26 to main::@12 +Renumbering block main::@27 to main::@13 +Renumbering block plex_move::@6 to plex_move::@5 +Renumbering block plex_move::@9 to plex_move::@6 Renumbering block plex_irq::@7 to plex_irq::@6 Renumbering block plex_irq::@9 to plex_irq::@7 Renumbering block font_2x2_to_sprites::@4 to font_2x2_to_sprites::@3 @@ -2232,17 +2509,17 @@ Renumbering block font_2x2::@10 to font_2x2::@7 Renumbering block font_2x2::@11 to font_2x2::@8 Renumbering block font_2x2::@12 to font_2x2::@9 Adding NOP phi() at start of @begin +Adding NOP phi() at start of toSpritePtr1 Adding NOP phi() at start of @4 Adding NOP phi() at start of @end -Adding NOP phi() at start of main::@9 -Adding NOP phi() at start of main::toD0181 -Adding NOP phi() at start of main::toSpritePtr1 -Adding NOP phi() at start of main::@4 Adding NOP phi() at start of main::@10 -Adding NOP phi() at start of main::@6 -Adding NOP phi() at start of main::@12 +Adding NOP phi() at start of main::toD0181 +Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@11 +Adding NOP phi() at start of main::@13 Adding NOP phi() at start of plexSort Adding NOP phi() at start of plexSort::plexFreePrepare1 +Adding NOP phi() at start of plex_move::@6 Adding NOP phi() at start of plexInit Adding NOP phi() at start of plexInit::plexSetScreen1 Adding NOP phi() at start of font_2x2_to_sprites @@ -2262,97 +2539,96 @@ FINAL CONTROL FLOW GRAPH to:@2 @2: scope:[] from @1 [4] (volatile byte) plex_free_next ← (byte) 0 + to:toSpritePtr1 +toSpritePtr1: scope:[] from @2 + [5] phi() to:@3 -@3: scope:[] from @2 - [5] (volatile bool) framedone ← false +@3: scope:[] from toSpritePtr1 + [6] (volatile bool) frame_done ← false to:@4 @4: scope:[] from @3 - [6] phi() - [7] call main + [7] phi() + [8] call main to:@end @end: scope:[] from @4 - [8] phi() + [9] phi() (void()) main() main: scope:[main] from @4 asm { sei } - [10] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM - [11] call font_2x2 - to:main::@8 -main::@8: scope:[main] from main - [12] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO - asm { cli } - [14] call font_2x2_to_sprites + [11] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM + [12] call font_2x2 to:main::@9 -main::@9: scope:[main] from main::@8 - [15] phi() - [16] call plexInit - to:main::toD0181 -main::toD0181: scope:[main] from main::@9 - [17] phi() - to:main::@7 -main::@7: scope:[main] from main::toD0181 - [18] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 - to:main::toSpritePtr1 -main::toSpritePtr1: scope:[main] from main::@7 - [19] phi() - to:main::@1 -main::@1: scope:[main] from main::@1 main::toSpritePtr1 - [20] (word) main::xp#2 ← phi( main::@1/(word) main::xp#1 main::toSpritePtr1/(word) $18 ) - [20] (byte) main::s#2 ← phi( main::@1/(byte) main::s#1 main::toSpritePtr1/(byte) 0 ) - [20] (byte) main::sprite#2 ← phi( main::@1/(byte) main::sprite#1 main::toSpritePtr1/(const byte) main::toSpritePtr1_return#0 ) - [21] *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte) main::sprite#2 - [22] (byte) main::sprite#1 ← ++ (byte) main::sprite#2 - [23] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1 - [24] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word) main::xp#2 - [25] (word) main::xp#1 ← (word) main::xp#2 + (byte) $a - [26] (byte) main::s#1 ← ++ (byte) main::s#2 - [27] if((byte) main::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto main::@1 - to:main::@2 -main::@2: scope:[main] from main::@1 - [28] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff - to:main::@3 -main::@3: scope:[main] from main::@2 main::@3 - [29] (byte) main::s1#2 ← phi( main::@2/(byte) 0 main::@3/(byte) main::s1#1 ) - [30] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE - [31] (byte) main::s1#1 ← ++ (byte) main::s1#2 - [32] if((byte) main::s1#1!=(byte) 8) goto main::@3 - to:main::@4 -main::@4: scope:[main] from main::@3 - [33] phi() - [34] call plexSine - to:main::@10 -main::@10: scope:[main] from main::@4 - [35] phi() - [36] call plexSort - to:main::@11 -main::@11: scope:[main] from main::@10 - asm { sei } - [38] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR - [39] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f - [40] *((const nomodify byte*) RASTER) ← (byte) $28 - [41] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER - [42] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER - [43] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() +main::@9: scope:[main] from main + [13] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO asm { cli } + [15] call font_2x2_to_sprites + to:main::@10 +main::@10: scope:[main] from main::@9 + [16] phi() + [17] call plexInit + to:main::toD0181 +main::toD0181: scope:[main] from main::@10 + [18] phi() + to:main::@8 +main::@8: scope:[main] from main::toD0181 + [19] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 + to:main::@1 +main::@1: scope:[main] from main::@2 main::@8 + [20] (byte) main::x#2 ← phi( main::@2/(byte) main::x#1 main::@8/(byte) 0 ) + [20] (byte) main::s#2 ← phi( main::@2/(byte) main::s#1 main::@8/(byte) 0 ) + [21] if((byte) main::s#2<(const nomodify byte) PLEX_COUNT) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 + [22] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff + to:main::@4 +main::@4: scope:[main] from main::@3 main::@4 + [23] (byte) main::s1#2 ← phi( main::@3/(byte) 0 main::@4/(byte) main::s1#1 ) + [24] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE + [25] (byte) main::s1#1 ← ++ (byte) main::s1#2 + [26] if((byte) main::s1#1!=(byte) 8) goto main::@4 to:main::@5 -main::@5: scope:[main] from main::@11 main::@13 main::@5 - [45] if((volatile bool) framedone) goto main::@6 - to:main::@5 -main::@6: scope:[main] from main::@5 - [46] phi() - [47] call plexSine +main::@5: scope:[main] from main::@4 + [27] phi() + [28] call plex_move + to:main::@11 +main::@11: scope:[main] from main::@5 + [29] phi() + [30] call plexSort to:main::@12 -main::@12: scope:[main] from main::@6 - [48] phi() - [49] call plexSort +main::@12: scope:[main] from main::@11 + asm { sei } + [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f + [34] *((const nomodify byte*) RASTER) ← (byte) $28 + [35] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER + [36] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER + [37] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() + asm { cli } + to:main::@6 +main::@6: scope:[main] from main::@12 main::@13 main::@6 + [39] if((volatile bool) frame_done) goto main::@7 + to:main::@6 +main::@7: scope:[main] from main::@6 + [40] (volatile bool) frame_done ← false + [41] call plex_move to:main::@13 -main::@13: scope:[main] from main::@12 - [50] (volatile bool) framedone ← false - to:main::@5 +main::@13: scope:[main] from main::@7 + [42] phi() + [43] call plexSort + to:main::@6 +main::@2: scope:[main] from main::@1 + [44] (byte~) main::$7 ← (const byte) toSpritePtr1_return#0 + (byte) main::s#2 + [45] *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte~) main::$7 + [46] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1 + [47] (word~) main::$13 ← *((const nomodify byte*) XMOVEMENT_HI + (byte) main::x#2) w= *((const byte*) XMOVEMENT + (byte) main::x#2) + [48] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word~) main::$13 + [49] (byte) main::x#1 ← (byte) main::x#2 + (byte) 8 + [50] (byte) main::s#1 ← ++ (byte) main::s#2 + to:main::@1 (void()) plexSort() -plexSort: scope:[plexSort] from main::@10 main::@12 +plexSort: scope:[plexSort] from main::@11 main::@13 [51] phi() to:plexSort::@1 plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 @@ -2402,165 +2678,186 @@ plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@2 [75] return to:@return -(void()) plexSine() -plexSine: scope:[plexSine] from main::@4 main::@6 - [76] (byte) sin_idx#10 ← phi( main::@6/(byte) sin_idx#12 main::@4/(byte) 0 ) - [77] (byte) plexSine::y_idx#0 ← (byte) sin_idx#10 - to:plexSine::@1 -plexSine::@1: scope:[plexSine] from plexSine plexSine::@1 - [78] (byte) plexSine::sy#2 ← phi( plexSine/(byte) 0 plexSine::@1/(byte) plexSine::sy#1 ) - [78] (byte) plexSine::y_idx#2 ← phi( plexSine/(byte) plexSine::y_idx#0 plexSine::@1/(byte) plexSine::y_idx#1 ) - [79] *((const byte*) PLEX_YPOS + (byte) plexSine::sy#2) ← *((const byte*) YSIN + (byte) plexSine::y_idx#2) - [80] (byte) plexSine::y_idx#1 ← (byte) plexSine::y_idx#2 + (byte) 8 - [81] (byte) plexSine::sy#1 ← ++ (byte) plexSine::sy#2 - [82] if((byte) plexSine::sy#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexSine::@1 - to:plexSine::@2 -plexSine::@2: scope:[plexSine] from plexSine::@1 - [83] (byte) sin_idx#12 ← (byte) sin_idx#10 + (byte) 1 - to:plexSine::@return -plexSine::@return: scope:[plexSine] from plexSine::@2 - [84] return +(void()) plex_move() +plex_move: scope:[plex_move] from main::@5 main::@7 + [76] (byte*) scroll_text_next#25 ← phi( main::@7/(byte*) scroll_text_next#13 main::@5/(const byte*) SCROLL_TEXT ) + [76] (byte) sin_idx#10 ← phi( main::@7/(byte) sin_idx#12 main::@5/(byte) 0 ) + [77] (byte) plex_move::y_idx#0 ← (byte) sin_idx#10 + to:plex_move::@1 +plex_move::@1: scope:[plex_move] from plex_move plex_move::@2 + [78] (byte*) scroll_text_next#11 ← phi( plex_move/(byte*) scroll_text_next#25 plex_move::@2/(byte*) scroll_text_next#13 ) + [78] (byte) plex_move::s#2 ← phi( plex_move/(byte) 0 plex_move::@2/(byte) plex_move::s#1 ) + [78] (byte) plex_move::y_idx#2 ← phi( plex_move/(byte) plex_move::y_idx#0 plex_move::@2/(byte) plex_move::y_idx#1 ) + [79] *((const byte*) PLEX_YPOS + (byte) plex_move::s#2) ← *((const byte*) YSIN + (byte) plex_move::y_idx#2) + [80] (byte) plex_move::y_idx#1 ← (byte) plex_move::y_idx#2 + (byte) 8 + [81] (byte~) plex_move::$6 ← (byte) plex_move::s#2 << (byte) 1 + [82] if(*((const word*) PLEX_XPOS + (byte~) plex_move::$6)!=(byte) 0) goto plex_move::@2 + to:plex_move::@4 +plex_move::@4: scope:[plex_move] from plex_move::@1 + [83] (byte~) plex_move::$7 ← (byte) plex_move::s#2 << (byte) 1 + [84] *((const word*) PLEX_XPOS + (byte~) plex_move::$7) ← (word)(number) $b*(number) $20 + [85] if(*((byte*) scroll_text_next#11)!=(byte) 0) goto plex_move::@6 + to:plex_move::@3 +plex_move::@6: scope:[plex_move] from plex_move::@4 + [86] phi() + to:plex_move::@3 +plex_move::@3: scope:[plex_move] from plex_move::@4 plex_move::@6 + [87] (byte*) scroll_text_next#12 ← phi( plex_move::@6/(byte*) scroll_text_next#11 plex_move::@4/(const byte*) SCROLL_TEXT ) + [88] (byte~) plex_move::$4 ← (const byte) toSpritePtr1_return#0 + *((byte*) scroll_text_next#12) + [89] *((const byte*) PLEX_PTR + (byte) plex_move::s#2) ← (byte~) plex_move::$4 + [90] (byte*) scroll_text_next#4 ← ++ (byte*) scroll_text_next#12 + to:plex_move::@2 +plex_move::@2: scope:[plex_move] from plex_move::@1 plex_move::@3 + [91] (byte*) scroll_text_next#13 ← phi( plex_move::@1/(byte*) scroll_text_next#11 plex_move::@3/(byte*) scroll_text_next#4 ) + [92] (byte) plex_move::s#1 ← ++ (byte) plex_move::s#2 + [93] if((byte) plex_move::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plex_move::@1 + to:plex_move::@5 +plex_move::@5: scope:[plex_move] from plex_move::@2 + [94] (byte) sin_idx#12 ← (byte) sin_idx#10 + (byte) 1 + to:plex_move::@return +plex_move::@return: scope:[plex_move] from plex_move::@5 + [95] return to:@return (void()) plexInit((byte*) plexInit::screen) -plexInit: scope:[plexInit] from main::@9 - [85] phi() +plexInit: scope:[plexInit] from main::@10 + [96] phi() to:plexInit::plexSetScreen1 plexInit::plexSetScreen1: scope:[plexInit] from plexInit - [86] phi() + [97] phi() to:plexInit::@1 plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1 - [87] (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::plexSetScreen1/(byte) 0 ) - [88] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 - [89] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 - [90] if((byte) plexInit::i#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1 + [98] (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::plexSetScreen1/(byte) 0 ) + [99] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 + [100] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 + [101] if((byte) plexInit::i#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1 to:plexInit::@return plexInit::@return: scope:[plexInit] from plexInit::@1 - [91] return + [102] return to:@return (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) -font_2x2_to_sprites: scope:[font_2x2_to_sprites] from main::@8 - [92] phi() +font_2x2_to_sprites: scope:[font_2x2_to_sprites] from main::@9 + [103] phi() to:font_2x2_to_sprites::@1 font_2x2_to_sprites::@1: scope:[font_2x2_to_sprites] from font_2x2_to_sprites font_2x2_to_sprites::@7 - [93] (byte*) font_2x2_to_sprites::sprite#4 ← phi( font_2x2_to_sprites/(const nomodify byte*) SPRITES font_2x2_to_sprites::@7/(byte*) font_2x2_to_sprites::sprite#1 ) - [93] (byte*) font_2x2_to_sprites::char_current#2 ← phi( font_2x2_to_sprites/(const nomodify byte*) FONT font_2x2_to_sprites::@7/(byte*) font_2x2_to_sprites::char_current#1 ) - [93] (byte) font_2x2_to_sprites::c#2 ← phi( font_2x2_to_sprites/(byte) 0 font_2x2_to_sprites::@7/(byte) font_2x2_to_sprites::c#1 ) - [94] if((byte) font_2x2_to_sprites::c#2<(const byte) font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2 + [104] (byte*) font_2x2_to_sprites::sprite#4 ← phi( font_2x2_to_sprites/(const nomodify byte*) SPRITES font_2x2_to_sprites::@7/(byte*) font_2x2_to_sprites::sprite#1 ) + [104] (byte*) font_2x2_to_sprites::char_current#2 ← phi( font_2x2_to_sprites/(const byte*) FONT font_2x2_to_sprites::@7/(byte*) font_2x2_to_sprites::char_current#1 ) + [104] (byte) font_2x2_to_sprites::c#2 ← phi( font_2x2_to_sprites/(byte) 0 font_2x2_to_sprites::@7/(byte) font_2x2_to_sprites::c#1 ) + [105] if((byte) font_2x2_to_sprites::c#2<(const byte) font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2 to:font_2x2_to_sprites::@return font_2x2_to_sprites::@return: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@1 - [95] return + [106] return to:@return font_2x2_to_sprites::@2: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@1 - [96] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 8 - [97] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) font_2x2_to_sprites::char_current#2 + [107] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 8 + [108] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) font_2x2_to_sprites::char_current#2 to:font_2x2_to_sprites::@3 font_2x2_to_sprites::@3: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@2 font_2x2_to_sprites::@5 - [98] (byte*) font_2x2_to_sprites::char_right#3 ← phi( font_2x2_to_sprites::@2/(byte*) font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::@5/(byte*) font_2x2_to_sprites::char_right#4 ) - [98] (byte) font_2x2_to_sprites::sprite_idx#4 ← phi( font_2x2_to_sprites::@2/(byte) 0 font_2x2_to_sprites::@5/(byte) font_2x2_to_sprites::sprite_idx#3 ) - [98] (byte*) font_2x2_to_sprites::char_left#3 ← phi( font_2x2_to_sprites::@2/(byte*) font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::@5/(byte*) font_2x2_to_sprites::char_left#4 ) - [98] (byte) font_2x2_to_sprites::i#2 ← phi( font_2x2_to_sprites::@2/(byte) 0 font_2x2_to_sprites::@5/(byte) font_2x2_to_sprites::i#1 ) - [99] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7 - [100] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) font_2x2_to_sprites::$3) - [101] (byte) font_2x2_to_sprites::sprite_idx#1 ← ++ (byte) font_2x2_to_sprites::sprite_idx#4 - [102] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) font_2x2_to_sprites::$3) - [103] (byte) font_2x2_to_sprites::sprite_idx#2 ← ++ (byte) font_2x2_to_sprites::sprite_idx#1 - [104] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 0 - [105] (byte) font_2x2_to_sprites::sprite_idx#3 ← ++ (byte) font_2x2_to_sprites::sprite_idx#2 - [106] if((byte) font_2x2_to_sprites::i#2==(byte) 7) goto font_2x2_to_sprites::@4 + [109] (byte*) font_2x2_to_sprites::char_right#3 ← phi( font_2x2_to_sprites::@2/(byte*) font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::@5/(byte*) font_2x2_to_sprites::char_right#4 ) + [109] (byte) font_2x2_to_sprites::sprite_idx#4 ← phi( font_2x2_to_sprites::@2/(byte) 0 font_2x2_to_sprites::@5/(byte) font_2x2_to_sprites::sprite_idx#3 ) + [109] (byte*) font_2x2_to_sprites::char_left#3 ← phi( font_2x2_to_sprites::@2/(byte*) font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::@5/(byte*) font_2x2_to_sprites::char_left#4 ) + [109] (byte) font_2x2_to_sprites::i#2 ← phi( font_2x2_to_sprites::@2/(byte) 0 font_2x2_to_sprites::@5/(byte) font_2x2_to_sprites::i#1 ) + [110] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7 + [111] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) font_2x2_to_sprites::$3) + [112] (byte) font_2x2_to_sprites::sprite_idx#1 ← ++ (byte) font_2x2_to_sprites::sprite_idx#4 + [113] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) font_2x2_to_sprites::$3) + [114] (byte) font_2x2_to_sprites::sprite_idx#2 ← ++ (byte) font_2x2_to_sprites::sprite_idx#1 + [115] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 0 + [116] (byte) font_2x2_to_sprites::sprite_idx#3 ← ++ (byte) font_2x2_to_sprites::sprite_idx#2 + [117] if((byte) font_2x2_to_sprites::i#2==(byte) 7) goto font_2x2_to_sprites::@4 to:font_2x2_to_sprites::@6 font_2x2_to_sprites::@6: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@3 - [107] if((byte) font_2x2_to_sprites::i#2!=(byte) $f) goto font_2x2_to_sprites::@8 + [118] if((byte) font_2x2_to_sprites::i#2!=(byte) $f) goto font_2x2_to_sprites::@8 to:font_2x2_to_sprites::@5 font_2x2_to_sprites::@8: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@6 - [108] phi() + [119] phi() to:font_2x2_to_sprites::@5 font_2x2_to_sprites::@5: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@4 font_2x2_to_sprites::@6 font_2x2_to_sprites::@8 - [109] (byte*) font_2x2_to_sprites::char_right#4 ← phi( font_2x2_to_sprites::@4/(byte*) font_2x2_to_sprites::char_right#1 font_2x2_to_sprites::@8/(byte*) font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::@6/(const nomodify byte*) FONT+(byte) ' '*(byte) 8 ) - [109] (byte*) font_2x2_to_sprites::char_left#4 ← phi( font_2x2_to_sprites::@4/(byte*) font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::@8/(byte*) font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::@6/(const nomodify byte*) FONT+(byte) ' '*(byte) 8 ) - [110] (byte) font_2x2_to_sprites::i#1 ← ++ (byte) font_2x2_to_sprites::i#2 - [111] if((byte) font_2x2_to_sprites::i#1!=(byte) $15) goto font_2x2_to_sprites::@3 + [120] (byte*) font_2x2_to_sprites::char_right#4 ← phi( font_2x2_to_sprites::@4/(byte*) font_2x2_to_sprites::char_right#1 font_2x2_to_sprites::@8/(byte*) font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::@6/(const byte*) FONT+(byte) ' '*(byte) 8 ) + [120] (byte*) font_2x2_to_sprites::char_left#4 ← phi( font_2x2_to_sprites::@4/(byte*) font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::@8/(byte*) font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::@6/(const byte*) FONT+(byte) ' '*(byte) 8 ) + [121] (byte) font_2x2_to_sprites::i#1 ← ++ (byte) font_2x2_to_sprites::i#2 + [122] if((byte) font_2x2_to_sprites::i#1!=(byte) $15) goto font_2x2_to_sprites::@3 to:font_2x2_to_sprites::@7 font_2x2_to_sprites::@7: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@5 - [112] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8 - [113] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40 - [114] (byte) font_2x2_to_sprites::c#1 ← ++ (byte) font_2x2_to_sprites::c#2 + [123] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8 + [124] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40 + [125] (byte) font_2x2_to_sprites::c#1 ← ++ (byte) font_2x2_to_sprites::c#2 to:font_2x2_to_sprites::@1 font_2x2_to_sprites::@4: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@3 - [115] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 8 - [116] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 8 + [126] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 8 + [127] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 8 to:font_2x2_to_sprites::@5 (void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2) font_2x2: scope:[font_2x2] from main - [117] phi() + [128] phi() to:font_2x2::@1 font_2x2::@1: scope:[font_2x2] from font_2x2 font_2x2::@9 - [118] (byte) font_2x2::c#11 ← phi( font_2x2/(byte) 0 font_2x2::@9/(byte) font_2x2::c#1 ) - [118] (byte*) font_2x2::next_original#4 ← phi( font_2x2/(const nomodify byte*) CHARGEN font_2x2::@9/(byte*) font_2x2::next_original#1 ) - [118] (byte*) font_2x2::next_2x2_left#0 ← phi( font_2x2/(const nomodify byte*) FONT font_2x2::@9/(byte*) font_2x2::next_2x2#1 ) - [119] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 - [120] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0 + [129] (byte) font_2x2::c#11 ← phi( font_2x2/(byte) 0 font_2x2::@9/(byte) font_2x2::c#1 ) + [129] (byte*) font_2x2::next_original#4 ← phi( font_2x2/(const nomodify byte*) CHARGEN font_2x2::@9/(byte*) font_2x2::next_original#1 ) + [129] (byte*) font_2x2::next_2x2_left#0 ← phi( font_2x2/(const byte*) FONT font_2x2::@9/(byte*) font_2x2::next_2x2#1 ) + [130] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 + [131] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0 to:font_2x2::@2 font_2x2::@2: scope:[font_2x2] from font_2x2::@1 font_2x2::@8 - [121] (byte*) font_2x2::next_2x2_right#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_right#0 font_2x2::@8/(byte*) font_2x2::next_2x2_right#8 ) - [121] (byte) font_2x2::l2#8 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l2#9 ) - [121] (byte*) font_2x2::next_2x2_left#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_left#10 font_2x2::@8/(byte*) font_2x2::next_2x2_left#8 ) - [121] (byte) font_2x2::l#2 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l#1 ) - [122] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2) + [132] (byte*) font_2x2::next_2x2_right#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_right#0 font_2x2::@8/(byte*) font_2x2::next_2x2_right#8 ) + [132] (byte) font_2x2::l2#8 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l2#9 ) + [132] (byte*) font_2x2::next_2x2_left#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_left#10 font_2x2::@8/(byte*) font_2x2::next_2x2_left#8 ) + [132] (byte) font_2x2::l#2 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l#1 ) + [133] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2) to:font_2x2::@3 font_2x2::@3: scope:[font_2x2] from font_2x2::@2 font_2x2::@5 - [123] (byte) font_2x2::b#2 ← phi( font_2x2::@2/(byte) 0 font_2x2::@5/(byte) font_2x2::b#1 ) - [123] (word) font_2x2::glyph_bits_2x2#3 ← phi( font_2x2::@2/(word) 0 font_2x2::@5/(word) font_2x2::glyph_bits_2x2#2 ) - [123] (byte) font_2x2::glyph_bits#2 ← phi( font_2x2::@2/(byte) font_2x2::glyph_bits#0 font_2x2::@5/(byte) font_2x2::glyph_bits#1 ) - [124] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80 - [125] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4 + [134] (byte) font_2x2::b#2 ← phi( font_2x2::@2/(byte) 0 font_2x2::@5/(byte) font_2x2::b#1 ) + [134] (word) font_2x2::glyph_bits_2x2#3 ← phi( font_2x2::@2/(word) 0 font_2x2::@5/(word) font_2x2::glyph_bits_2x2#2 ) + [134] (byte) font_2x2::glyph_bits#2 ← phi( font_2x2::@2/(byte) font_2x2::glyph_bits#0 font_2x2::@5/(byte) font_2x2::glyph_bits#1 ) + [135] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80 + [136] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4 to:font_2x2::@5 font_2x2::@4: scope:[font_2x2] from font_2x2::@3 - [126] phi() + [137] phi() to:font_2x2::@5 font_2x2::@5: scope:[font_2x2] from font_2x2::@3 font_2x2::@4 - [127] (byte) font_2x2::glyph_bit#0 ← phi( font_2x2::@4/(byte) 1 font_2x2::@3/(byte) 0 ) - [128] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1 - [129] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0 - [130] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1 - [131] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0 - [132] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1 - [133] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2 - [134] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3 + [138] (byte) font_2x2::glyph_bit#0 ← phi( font_2x2::@4/(byte) 1 font_2x2::@3/(byte) 0 ) + [139] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1 + [140] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0 + [141] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1 + [142] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0 + [143] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1 + [144] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2 + [145] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3 to:font_2x2::@6 font_2x2::@6: scope:[font_2x2] from font_2x2::@5 - [135] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 - [136] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12 - [137] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1 - [138] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12 - [139] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2 - [140] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15 - [141] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1 - [142] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15 - [143] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2 - [144] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8 + [146] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 + [147] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12 + [148] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1 + [149] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12 + [150] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2 + [151] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15 + [152] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1 + [153] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15 + [154] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2 + [155] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8 to:font_2x2::@7 font_2x2::@7: scope:[font_2x2] from font_2x2::@6 - [145] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8 - [146] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 + [156] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8 + [157] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 to:font_2x2::@8 font_2x2::@8: scope:[font_2x2] from font_2x2::@6 font_2x2::@7 - [147] (byte*) font_2x2::next_2x2_right#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_right#1 font_2x2::@6/(byte*) font_2x2::next_2x2_right#7 ) - [147] (byte) font_2x2::l2#9 ← phi( font_2x2::@7/(byte) 0 font_2x2::@6/(byte) font_2x2::l2#1 ) - [147] (byte*) font_2x2::next_2x2_left#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_left#1 font_2x2::@6/(byte*) font_2x2::next_2x2_left#7 ) - [148] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2 - [149] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2 + [158] (byte*) font_2x2::next_2x2_right#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_right#1 font_2x2::@6/(byte*) font_2x2::next_2x2_right#7 ) + [158] (byte) font_2x2::l2#9 ← phi( font_2x2::@7/(byte) 0 font_2x2::@6/(byte) font_2x2::l2#1 ) + [158] (byte*) font_2x2::next_2x2_left#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_left#1 font_2x2::@6/(byte*) font_2x2::next_2x2_left#7 ) + [159] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2 + [160] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2 to:font_2x2::@9 font_2x2::@9: scope:[font_2x2] from font_2x2::@8 - [150] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 - [151] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 - [152] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11 - [153] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1 + [161] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 + [162] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 + [163] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11 + [164] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1 to:font_2x2::@return font_2x2::@return: scope:[font_2x2] from font_2x2::@9 - [154] return + [165] return to:@return interrupt(KERNEL_MIN)(void()) plex_irq() @@ -2568,84 +2865,85 @@ plex_irq: scope:[plex_irq] from asm { sei } to:plex_irq::@3 plex_irq::@3: scope:[plex_irq] from plex_irq plex_irq::@7 - [156] phi() - [157] call plexShowSprite + [167] phi() + [168] call plexShowSprite to:plex_irq::plexFreeNextYpos1 plex_irq::plexFreeNextYpos1: scope:[plex_irq] from plex_irq::@3 - [158] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) + [169] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) to:plex_irq::@6 plex_irq::@6: scope:[plex_irq] from plex_irq::plexFreeNextYpos1 - [159] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 - [160] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 + [170] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 + [171] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 to:plex_irq::@7 plex_irq::@7: scope:[plex_irq] from plex_irq::@6 - [161] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3 + [172] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3 to:plex_irq::@4 plex_irq::@4: scope:[plex_irq] from plex_irq::@6 plex_irq::@7 - [162] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 + [173] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 to:plex_irq::@5 plex_irq::@5: scope:[plex_irq] from plex_irq::@4 - [163] *((const nomodify byte*) RASTER) ← (byte) $28 - [164] (volatile bool) framedone ← true + [174] *((const nomodify byte*) RASTER) ← (byte) $28 + [175] (volatile bool) frame_done ← true to:plex_irq::@2 plex_irq::@2: scope:[plex_irq] from plex_irq::@1 plex_irq::@5 - [165] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER + [176] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER asm { cli } to:plex_irq::@return plex_irq::@return: scope:[plex_irq] from plex_irq::@2 - [167] return + [178] return to:@return plex_irq::@1: scope:[plex_irq] from plex_irq::@4 - [168] *((const nomodify byte*) RASTER) ← (byte) plex_irq::plexFreeNextYpos1_return#0 + [179] *((const nomodify byte*) RASTER) ← (byte) plex_irq::plexFreeNextYpos1_return#0 to:plex_irq::@2 (void()) plexShowSprite() plexShowSprite: scope:[plexShowSprite] from plex_irq::@3 - [169] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 - [170] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) - [171] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + [180] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 + [181] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) + [182] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 to:plexShowSprite::plexFreeAdd1 plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite - [172] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 - [173] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 - [174] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (volatile byte) plex_free_next + (byte) 1 - [175] (byte~) plexShowSprite::plexFreeAdd1_$2 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 - [176] (volatile byte) plex_free_next ← (byte~) plexShowSprite::plexFreeAdd1_$2 + [183] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 + [184] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 + [185] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (volatile byte) plex_free_next + (byte) 1 + [186] (byte~) plexShowSprite::plexFreeAdd1_$2 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 + [187] (volatile byte) plex_free_next ← (byte~) plexShowSprite::plexFreeAdd1_$2 to:plexShowSprite::@5 plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 - [177] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) - [178] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) - [179] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 - [180] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) - [181] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 - [182] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) - [183] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 + [188] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) + [189] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) + [190] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 + [191] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) + [192] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 + [193] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) + [194] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 to:plexShowSprite::@3 plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@5 - [184] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb - [185] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 + [195] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb + [196] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 to:plexShowSprite::@2 plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3 - [186] (byte~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1 - [187] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7 - [188] (volatile byte) plex_sprite_idx ← (byte~) plexShowSprite::$6 - [189] (volatile byte) plex_show_idx ← ++ (volatile byte) plex_show_idx - [190] (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (byte) 1 - [191] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return + [197] (byte~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1 + [198] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7 + [199] (volatile byte) plex_sprite_idx ← (byte~) plexShowSprite::$6 + [200] (volatile byte) plex_show_idx ← ++ (volatile byte) plex_show_idx + [201] (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (byte) 1 + [202] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return to:plexShowSprite::@4 plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@2 - [192] (volatile byte) plex_sprite_msb ← (byte) 1 + [203] (volatile byte) plex_sprite_msb ← (byte) 1 to:plexShowSprite::@return plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4 - [193] return + [204] return to:@return plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5 - [194] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb + [205] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb to:plexShowSprite::@2 VARIABLE REGISTER WEIGHTS (byte*) PLEX_SCREEN_PTR +(byte) SPRITE_0 (void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2) (byte~) font_2x2::$1 200002.0 (byte~) font_2x2::$11 20002.0 @@ -2727,26 +3025,23 @@ VARIABLE REGISTER WEIGHTS (byte) font_2x2_to_sprites::sprite_idx#3 2222.4444444444443 (byte) font_2x2_to_sprites::sprite_idx#4 10001.0 (byte*) font_2x2_to_sprites::sprites -(volatile bool) framedone loadstore 27.65 +(volatile bool) frame_done loadstore 25.72093023255814 (void()) main() -(byte~) main::$12 202.0 +(byte~) main::$12 101.0 +(word~) main::$13 202.0 +(byte~) main::$7 202.0 (byte) main::s -(byte) main::s#1 151.5 -(byte) main::s#2 67.33333333333333 +(byte) main::s#1 202.0 +(byte) main::s#2 75.75 (byte) main::s1 (byte) main::s1#1 151.5 (byte) main::s1#2 151.5 -(byte) main::sprite -(byte) main::sprite#1 33.666666666666664 -(byte) main::sprite#2 151.5 (byte*) main::toD0181_gfx (byte) main::toD0181_return (byte*) main::toD0181_screen -(byte) main::toSpritePtr1_return -(byte*) main::toSpritePtr1_sprite -(word) main::xp -(word) main::xp#1 67.33333333333333 -(word) main::xp#2 60.599999999999994 +(byte) main::x +(byte) main::x#1 101.0 +(byte) main::x#2 57.714285714285715 (void()) plexInit((byte*) plexInit::screen) (byte) plexInit::i (byte) plexInit::i#1 1501.5 @@ -2770,14 +3065,6 @@ VARIABLE REGISTER WEIGHTS (byte) plexShowSprite::xpos_idx (byte) plexShowSprite::xpos_idx#0 202.0 (byte) plexShowSprite::ypos -(void()) plexSine() -(byte) plexSine::sy -(byte) plexSine::sy#1 150001.5 -(byte) plexSine::sy#2 100001.0 -(byte) plexSine::y_idx -(byte) plexSine::y_idx#0 2002.0 -(byte) plexSine::y_idx#1 66667.33333333333 -(byte) plexSine::y_idx#2 150502.0 (void()) plexSort() (byte) plexSort::m (byte) plexSort::m#1 150001.5 @@ -2800,24 +3087,43 @@ interrupt(KERNEL_MIN)(void()) plex_irq() (byte) plex_irq::plexFreeNextYpos1_return (byte) plex_irq::plexFreeNextYpos1_return#0 4.800000000000001 (byte) plex_irq::rasterY +(void()) plex_move() +(byte~) plex_move::$4 200002.0 +(byte~) plex_move::$6 200002.0 +(byte~) plex_move::$7 200002.0 +(byte) plex_move::s +(byte) plex_move::s#1 150001.5 +(byte) plex_move::s#2 42857.57142857143 +(byte) plex_move::y_idx +(byte) plex_move::y_idx#0 2002.0 +(byte) plex_move::y_idx#1 14285.857142857143 +(byte) plex_move::y_idx#2 150502.0 (volatile byte) plex_show_idx loadstore 46.0909090909091 (volatile byte) plex_sprite_idx loadstore 45.387096774193544 (volatile byte) plex_sprite_msb loadstore 48.757575757575765 +(byte*) scroll_text_next +(byte*) scroll_text_next#11 44556.11111111111 +(byte*) scroll_text_next#12 100001.0 +(byte*) scroll_text_next#13 14290.666666666668 +(byte*) scroll_text_next#25 551.0 +(byte*) scroll_text_next#4 200002.0 (byte) sin_idx -(byte) sin_idx#10 300.42857142857144 -(byte) sin_idx#12 58.0 +(byte) sin_idx#10 116.83333333333334 +(byte) sin_idx#12 61.22222222222223 +(byte) toSpritePtr1_return +(byte*) toSpritePtr1_sprite Initial phi equivalence classes -[ main::sprite#2 main::sprite#1 ] [ main::s#2 main::s#1 ] -[ main::xp#2 main::xp#1 ] +[ main::x#2 main::x#1 ] [ main::s1#2 main::s1#1 ] [ plexSort::m#2 plexSort::m#1 ] [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] [ sin_idx#10 sin_idx#12 ] -[ plexSine::y_idx#2 plexSine::y_idx#0 plexSine::y_idx#1 ] -[ plexSine::sy#2 plexSine::sy#1 ] +[ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] +[ plex_move::s#2 plex_move::s#1 ] +[ scroll_text_next#12 scroll_text_next#11 scroll_text_next#25 scroll_text_next#13 scroll_text_next#4 ] [ plexInit::i#2 plexInit::i#1 ] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] @@ -2841,11 +3147,16 @@ 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 ] Added variable plex_free_next to live range equivalence class [ plex_free_next ] -Added variable framedone to live range equivalence class [ framedone ] +Added variable frame_done to live range equivalence class [ frame_done ] +Added variable main::$7 to live range equivalence class [ main::$7 ] Added variable main::$12 to live range equivalence class [ main::$12 ] +Added variable main::$13 to live range equivalence class [ main::$13 ] Added variable plexSort::nxt_idx#0 to live range equivalence class [ plexSort::nxt_idx#0 ] 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 ] +Added variable plex_move::$6 to live range equivalence class [ plex_move::$6 ] +Added variable plex_move::$7 to live range equivalence class [ plex_move::$7 ] +Added variable plex_move::$4 to live range equivalence class [ plex_move::$4 ] Added variable font_2x2_to_sprites::$3 to live range equivalence class [ font_2x2_to_sprites::$3 ] Added variable font_2x2_to_sprites::sprite_idx#1 to live range equivalence class [ font_2x2_to_sprites::sprite_idx#1 ] Added variable font_2x2_to_sprites::sprite_idx#2 to live range equivalence class [ font_2x2_to_sprites::sprite_idx#2 ] @@ -2872,16 +3183,16 @@ Added variable plexShowSprite::$9 to live range equivalence class [ plexShowSpri Added variable plexShowSprite::$5 to live range equivalence class [ plexShowSprite::$5 ] Added variable plexShowSprite::$6 to live range equivalence class [ plexShowSprite::$6 ] Complete equivalence classes -[ main::sprite#2 main::sprite#1 ] [ main::s#2 main::s#1 ] -[ main::xp#2 main::xp#1 ] +[ main::x#2 main::x#1 ] [ main::s1#2 main::s1#1 ] [ plexSort::m#2 plexSort::m#1 ] [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] [ sin_idx#10 sin_idx#12 ] -[ plexSine::y_idx#2 plexSine::y_idx#0 plexSine::y_idx#1 ] -[ plexSine::sy#2 plexSine::sy#1 ] +[ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] +[ plex_move::s#2 plex_move::s#1 ] +[ scroll_text_next#12 scroll_text_next#11 scroll_text_next#25 scroll_text_next#13 scroll_text_next#4 ] [ plexInit::i#2 plexInit::i#1 ] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] @@ -2905,11 +3216,16 @@ Complete equivalence classes [ plex_sprite_idx ] [ plex_sprite_msb ] [ plex_free_next ] -[ framedone ] +[ frame_done ] +[ main::$7 ] [ main::$12 ] +[ main::$13 ] [ plexSort::nxt_idx#0 ] [ plexSort::nxt_y#0 ] [ plexSort::s#2 ] +[ plex_move::$6 ] +[ plex_move::$7 ] +[ plex_move::$4 ] [ font_2x2_to_sprites::$3 ] [ font_2x2_to_sprites::sprite_idx#1 ] [ font_2x2_to_sprites::sprite_idx#2 ] @@ -2935,16 +3251,16 @@ Complete equivalence classes [ plexShowSprite::$9 ] [ plexShowSprite::$5 ] [ plexShowSprite::$6 ] -Allocated zp[1]:2 [ main::sprite#2 main::sprite#1 ] -Allocated zp[1]:3 [ main::s#2 main::s#1 ] -Allocated zp[2]:4 [ main::xp#2 main::xp#1 ] -Allocated zp[1]:6 [ main::s1#2 main::s1#1 ] -Allocated zp[1]:7 [ plexSort::m#2 plexSort::m#1 ] -Allocated zp[1]:8 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] -Allocated zp[1]:9 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] -Allocated zp[1]:10 [ sin_idx#10 sin_idx#12 ] -Allocated zp[1]:11 [ plexSine::y_idx#2 plexSine::y_idx#0 plexSine::y_idx#1 ] -Allocated zp[1]:12 [ plexSine::sy#2 plexSine::sy#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[1]:5 [ plexSort::m#2 plexSort::m#1 ] +Allocated zp[1]:6 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +Allocated zp[1]:7 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +Allocated zp[1]:8 [ sin_idx#10 sin_idx#12 ] +Allocated zp[1]:9 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] +Allocated zp[1]:10 [ plex_move::s#2 plex_move::s#1 ] +Allocated zp[2]:11 [ scroll_text_next#12 scroll_text_next#11 scroll_text_next#25 scroll_text_next#13 scroll_text_next#4 ] Allocated zp[1]:13 [ plexInit::i#2 plexInit::i#1 ] Allocated zp[1]:14 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] Allocated zp[2]:15 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] @@ -2968,36 +3284,41 @@ Allocated zp[1]:41 [ plex_show_idx ] Allocated zp[1]:42 [ plex_sprite_idx ] Allocated zp[1]:43 [ plex_sprite_msb ] Allocated zp[1]:44 [ plex_free_next ] -Allocated zp[1]:45 [ framedone ] -Allocated zp[1]:46 [ main::$12 ] -Allocated zp[1]:47 [ plexSort::nxt_idx#0 ] -Allocated zp[1]:48 [ plexSort::nxt_y#0 ] -Allocated zp[1]:49 [ plexSort::s#2 ] -Allocated zp[1]:50 [ font_2x2_to_sprites::$3 ] -Allocated zp[1]:51 [ font_2x2_to_sprites::sprite_idx#1 ] -Allocated zp[1]:52 [ font_2x2_to_sprites::sprite_idx#2 ] -Allocated zp[1]:53 [ font_2x2::$1 ] -Allocated zp[2]:54 [ font_2x2::$5 ] -Allocated zp[2]:56 [ font_2x2::glyph_bits_2x2#1 ] -Allocated zp[2]:58 [ font_2x2::$7 ] -Allocated zp[1]:60 [ font_2x2::$12 ] -Allocated zp[1]:61 [ font_2x2::$11 ] -Allocated zp[1]:62 [ font_2x2::$15 ] -Allocated zp[1]:63 [ font_2x2::$14 ] -Allocated zp[1]:64 [ plex_irq::plexFreeNextYpos1_return#0 ] -Allocated zp[1]:65 [ plex_irq::$4 ] -Allocated zp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] -Allocated zp[1]:67 [ plexShowSprite::plexFreeAdd1_ypos#0 ] -Allocated zp[1]:68 [ plexShowSprite::plexFreeAdd1_$0 ] -Allocated zp[1]:69 [ plexShowSprite::plexFreeAdd1_$1 ] -Allocated zp[1]:70 [ plexShowSprite::plexFreeAdd1_$2 ] -Allocated zp[1]:71 [ plexShowSprite::xpos_idx#0 ] -Allocated zp[1]:72 [ plexShowSprite::$11 ] -Allocated zp[1]:73 [ plexShowSprite::$2 ] -Allocated zp[1]:74 [ plexShowSprite::$3 ] -Allocated zp[1]:75 [ plexShowSprite::$9 ] -Allocated zp[1]:76 [ plexShowSprite::$5 ] -Allocated zp[1]:77 [ plexShowSprite::$6 ] +Allocated zp[1]:45 [ frame_done ] +Allocated zp[1]:46 [ main::$7 ] +Allocated zp[1]:47 [ main::$12 ] +Allocated zp[2]:48 [ main::$13 ] +Allocated zp[1]:50 [ plexSort::nxt_idx#0 ] +Allocated zp[1]:51 [ plexSort::nxt_y#0 ] +Allocated zp[1]:52 [ plexSort::s#2 ] +Allocated zp[1]:53 [ plex_move::$6 ] +Allocated zp[1]:54 [ plex_move::$7 ] +Allocated zp[1]:55 [ plex_move::$4 ] +Allocated zp[1]:56 [ font_2x2_to_sprites::$3 ] +Allocated zp[1]:57 [ font_2x2_to_sprites::sprite_idx#1 ] +Allocated zp[1]:58 [ font_2x2_to_sprites::sprite_idx#2 ] +Allocated zp[1]:59 [ font_2x2::$1 ] +Allocated zp[2]:60 [ font_2x2::$5 ] +Allocated zp[2]:62 [ font_2x2::glyph_bits_2x2#1 ] +Allocated zp[2]:64 [ font_2x2::$7 ] +Allocated zp[1]:66 [ font_2x2::$12 ] +Allocated zp[1]:67 [ font_2x2::$11 ] +Allocated zp[1]:68 [ font_2x2::$15 ] +Allocated zp[1]:69 [ font_2x2::$14 ] +Allocated zp[1]:70 [ plex_irq::plexFreeNextYpos1_return#0 ] +Allocated zp[1]:71 [ plex_irq::$4 ] +Allocated zp[1]:72 [ plexShowSprite::plex_sprite_idx2#0 ] +Allocated zp[1]:73 [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Allocated zp[1]:74 [ plexShowSprite::plexFreeAdd1_$0 ] +Allocated zp[1]:75 [ plexShowSprite::plexFreeAdd1_$1 ] +Allocated zp[1]:76 [ plexShowSprite::plexFreeAdd1_$2 ] +Allocated zp[1]:77 [ plexShowSprite::xpos_idx#0 ] +Allocated zp[1]:78 [ plexShowSprite::$11 ] +Allocated zp[1]:79 [ plexShowSprite::$2 ] +Allocated zp[1]:80 [ plexShowSprite::$3 ] +Allocated zp[1]:81 [ plexShowSprite::$9 ] +Allocated zp[1]:82 [ plexShowSprite::$5 ] +Allocated zp[1]:83 [ plexShowSprite::$6 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -3040,18 +3361,22 @@ Target platform is c64basic / MOS6502X // The number of sprites in the multiplexer .const PLEX_COUNT = $20 .label CHARSET_DEFAULT = $1000 - .label FONT = $2000 .label SPRITES = $3000 .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 = $400+$3f8 + .const toSpritePtr1_return = SPRITES/$40 .label plex_show_idx = $29 .label plex_sprite_idx = $2a .label plex_sprite_msb = $2b .label plex_free_next = $2c - .label framedone = $2d + .label frame_done = $2d + // The next char to use from the scroll text + .label scroll_text_next = $b // Y-sine index - .label sin_idx = $a + .label sin_idx = 8 // @begin __bbegin: jmp __b1 @@ -3076,215 +3401,184 @@ __b2: // The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown. lda #0 sta.z plex_free_next + // [5] phi from @2 to toSpritePtr1 [phi:@2->toSpritePtr1] +toSpritePtr1_from___b2: + jmp toSpritePtr1 + // toSpritePtr1 +toSpritePtr1: jmp __b3 // @3 __b3: - // [5] (volatile bool) framedone ← false -- vboz1=vboc1 + // [6] (volatile bool) frame_done ← false -- vboz1=vboc1 + // Signal used between IRQ and main loop. Set to true when the IRQ is done showing the sprites. lda #0 - sta.z framedone - // [6] phi from @3 to @4 [phi:@3->@4] + sta.z frame_done + // [7] phi from @3 to @4 [phi:@3->@4] __b4_from___b3: jmp __b4 // @4 __b4: - // [7] call main + // [8] call main jsr main - // [8] phi from @4 to @end [phi:@4->@end] + // [9] phi from @4 to @end [phi:@4->@end] __bend_from___b4: jmp __bend // @end __bend: // main main: { - .const toSpritePtr1_return = SPRITES/$40 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET_DEFAULT)/4&$f - .label __12 = $2e - .label sprite = 2 - // Set the x-positions & pointers - .label xp = 4 - .label s = 3 - .label s1 = 6 + .label __7 = $2e + .label __12 = $2f + .label x = 3 + .label s = 2 + .label s1 = 4 + .label __13 = $30 // asm { sei } // Create 2x2 font from CHARGEN sei - // [10] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2 + // [11] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_CHARROM sta PROCPORT - // [11] call font_2x2 - // [117] phi from main to font_2x2 [phi:main->font_2x2] + // [12] call font_2x2 + // [128] phi from main to font_2x2 [phi:main->font_2x2] font_2x2_from_main: jsr font_2x2 - jmp __b8 - // main::@8 - __b8: - // [12] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO -- _deref_pbuc1=vbuc2 + jmp __b9 + // main::@9 + __b9: + // [13] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_BASIC_KERNEL_IO sta PROCPORT // asm { cli } cli - // [14] call font_2x2_to_sprites + // [15] call font_2x2_to_sprites // Convert font to sprites - // [92] phi from main::@8 to font_2x2_to_sprites [phi:main::@8->font_2x2_to_sprites] - font_2x2_to_sprites_from___b8: + // [103] phi from main::@9 to font_2x2_to_sprites [phi:main::@9->font_2x2_to_sprites] + font_2x2_to_sprites_from___b9: jsr font_2x2_to_sprites - // [15] phi from main::@8 to main::@9 [phi:main::@8->main::@9] - __b9_from___b8: - jmp __b9 - // main::@9 - __b9: - // [16] call plexInit - // Initialize the multiplexer - // [85] phi from main::@9 to plexInit [phi:main::@9->plexInit] - plexInit_from___b9: - jsr plexInit - // [17] phi from main::@9 to main::toD0181 [phi:main::@9->main::toD0181] - toD0181_from___b9: - jmp toD0181 - // main::toD0181 - toD0181: - jmp __b7 - // main::@7 - __b7: - // [18] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 - // Show screen - lda #toD0181_return - sta D018 - // [19] phi from main::@7 to main::toSpritePtr1 [phi:main::@7->main::toSpritePtr1] - toSpritePtr1_from___b7: - jmp toSpritePtr1 - // main::toSpritePtr1 - toSpritePtr1: - // [20] phi from main::toSpritePtr1 to main::@1 [phi:main::toSpritePtr1->main::@1] - __b1_from_toSpritePtr1: - // [20] phi (word) main::xp#2 = (word) $18 [phi:main::toSpritePtr1->main::@1#0] -- vwuz1=vwuc1 - lda #<$18 - sta.z xp - lda #>$18 - sta.z xp+1 - // [20] phi (byte) main::s#2 = (byte) 0 [phi:main::toSpritePtr1->main::@1#1] -- vbuz1=vbuc1 - lda #0 - sta.z s - // [20] phi (byte) main::sprite#2 = (const byte) main::toSpritePtr1_return#0 [phi:main::toSpritePtr1->main::@1#2] -- vbuz1=vbuc1 - lda #toSpritePtr1_return - sta.z sprite - jmp __b1 - // [20] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - __b1_from___b1: - // [20] phi (word) main::xp#2 = (word) main::xp#1 [phi:main::@1->main::@1#0] -- register_copy - // [20] phi (byte) main::s#2 = (byte) main::s#1 [phi:main::@1->main::@1#1] -- register_copy - // [20] phi (byte) main::sprite#2 = (byte) main::sprite#1 [phi:main::@1->main::@1#2] -- register_copy - jmp __b1 - // main::@1 - __b1: - // [21] *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte) main::sprite#2 -- pbuc1_derefidx_vbuz1=vbuz2 - lda.z sprite - ldy.z s - sta PLEX_PTR,y - // [22] (byte) main::sprite#1 ← ++ (byte) main::sprite#2 -- vbuz1=_inc_vbuz1 - inc.z sprite - // [23] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 - lda.z s - asl - sta.z __12 - // [24] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word) main::xp#2 -- pwuc1_derefidx_vbuz1=vwuz2 - ldy.z __12 - lda.z xp - sta PLEX_XPOS,y - lda.z xp+1 - sta PLEX_XPOS+1,y - // [25] (word) main::xp#1 ← (word) main::xp#2 + (byte) $a -- vwuz1=vwuz1_plus_vbuc1 - lda #$a - clc - adc.z xp - sta.z xp - bcc !+ - inc.z xp+1 - !: - // [26] (byte) main::s#1 ← ++ (byte) main::s#2 -- vbuz1=_inc_vbuz1 - inc.z s - // [27] if((byte) main::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #PLEX_COUNT-1+1 - cmp.z s - bne __b1_from___b1 - jmp __b2 - // main::@2 - __b2: - // [28] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff -- _deref_pbuc1=vbuc2 - // Enable & initialize sprites - lda #$ff - sta SPRITES_ENABLE - // [29] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - __b3_from___b2: - // [29] phi (byte) main::s1#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 - lda #0 - sta.z s1 - jmp __b3 - // [29] phi from main::@3 to main::@3 [phi:main::@3->main::@3] - __b3_from___b3: - // [29] phi (byte) main::s1#2 = (byte) main::s1#1 [phi:main::@3->main::@3#0] -- register_copy - jmp __b3 - // main::@3 - __b3: - // [30] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE -- pbuc1_derefidx_vbuz1=vbuc2 - lda #WHITE - ldy.z s1 - sta SPRITES_COLS,y - // [31] (byte) main::s1#1 ← ++ (byte) main::s1#2 -- vbuz1=_inc_vbuz1 - inc.z s1 - // [32] if((byte) main::s1#1!=(byte) 8) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 - lda #8 - cmp.z s1 - bne __b3_from___b3 - // [33] phi from main::@3 to main::@4 [phi:main::@3->main::@4] - __b4_from___b3: - jmp __b4 - // main::@4 - __b4: - // [34] call plexSine - // Move the sprites - // [76] phi from main::@4 to plexSine [phi:main::@4->plexSine] - plexSine_from___b4: - // [76] phi (byte) sin_idx#10 = (byte) 0 [phi:main::@4->plexSine#0] -- vbuz1=vbuc1 - lda #0 - sta.z sin_idx - jsr plexSine - // [35] phi from main::@4 to main::@10 [phi:main::@4->main::@10] - __b10_from___b4: + // [16] phi from main::@9 to main::@10 [phi:main::@9->main::@10] + __b10_from___b9: jmp __b10 // main::@10 __b10: - // [36] call plexSort - // Sort the sprites by y-position - // [51] phi from main::@10 to plexSort [phi:main::@10->plexSort] - plexSort_from___b10: - jsr plexSort + // [17] call plexInit + // Initialize the multiplexer + // [96] phi from main::@10 to plexInit [phi:main::@10->plexInit] + plexInit_from___b10: + jsr plexInit + // [18] phi from main::@10 to main::toD0181 [phi:main::@10->main::toD0181] + toD0181_from___b10: + jmp toD0181 + // main::toD0181 + toD0181: + jmp __b8 + // main::@8 + __b8: + // [19] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 + // Show screen + lda #toD0181_return + sta D018 + // [20] phi from main::@8 to main::@1 [phi:main::@8->main::@1] + __b1_from___b8: + // [20] phi (byte) main::x#2 = (byte) 0 [phi:main::@8->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z x + // [20] phi (byte) main::s#2 = (byte) 0 [phi:main::@8->main::@1#1] -- vbuz1=vbuc1 + lda #0 + sta.z s + jmp __b1 + // Set the x-positions & pointers + // main::@1 + __b1: + // [21] if((byte) main::s#2<(const nomodify byte) PLEX_COUNT) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z s + cmp #PLEX_COUNT + bcc __b2 + jmp __b3 + // main::@3 + __b3: + // [22] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // Enable & initialize sprites + lda #$ff + sta SPRITES_ENABLE + // [23] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + __b4_from___b3: + // [23] phi (byte) main::s1#2 = (byte) 0 [phi:main::@3->main::@4#0] -- vbuz1=vbuc1 + lda #0 + sta.z s1 + jmp __b4 + // [23] phi from main::@4 to main::@4 [phi:main::@4->main::@4] + __b4_from___b4: + // [23] phi (byte) main::s1#2 = (byte) main::s1#1 [phi:main::@4->main::@4#0] -- register_copy + jmp __b4 + // main::@4 + __b4: + // [24] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE -- pbuc1_derefidx_vbuz1=vbuc2 + lda #WHITE + ldy.z s1 + sta SPRITES_COLS,y + // [25] (byte) main::s1#1 ← ++ (byte) main::s1#2 -- vbuz1=_inc_vbuz1 + inc.z s1 + // [26] if((byte) main::s1#1!=(byte) 8) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 + lda #8 + cmp.z s1 + bne __b4_from___b4 + // [27] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + __b5_from___b4: + jmp __b5 + // main::@5 + __b5: + // [28] call plex_move + // Move the sprites + // [76] phi from main::@5 to plex_move [phi:main::@5->plex_move] + plex_move_from___b5: + // [76] phi (byte*) scroll_text_next#25 = (const byte*) SCROLL_TEXT [phi:main::@5->plex_move#0] -- pbuz1=pbuc1 + lda #SCROLL_TEXT + sta.z scroll_text_next+1 + // [76] phi (byte) sin_idx#10 = (byte) 0 [phi:main::@5->plex_move#1] -- vbuz1=vbuc1 + lda #0 + sta.z sin_idx + jsr plex_move + // [29] phi from main::@5 to main::@11 [phi:main::@5->main::@11] + __b11_from___b5: jmp __b11 // main::@11 __b11: + // [30] call plexSort + // Sort the sprites by y-position + // [51] phi from main::@11 to plexSort [phi:main::@11->plexSort] + plexSort_from___b11: + jsr plexSort + jmp __b12 + // main::@12 + __b12: // asm { sei } // Enable the plex IRQ sei - // [38] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT - // [39] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to 0x00 lda #$7f and VIC_CONTROL sta VIC_CONTROL - // [40] *((const nomodify byte*) RASTER) ← (byte) $28 -- _deref_pbuc1=vbuc2 + // [34] *((const nomodify byte*) RASTER) ← (byte) $28 -- _deref_pbuc1=vbuc2 lda #$28 sta RASTER - // [41] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [35] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE - // [42] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [36] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge any IRQ lda #IRQ_RASTER sta IRQ_STATUS - // [43] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() -- _deref_pptc1=pprc2 + // [37] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #main::@6] - __b6_from___b5: jmp __b6 // main::@6 __b6: - // [47] call plexSine + // [39] if((volatile bool) frame_done) goto main::@7 -- vboz1_then_la1 + lda.z frame_done + cmp #0 + bne __b7 + jmp __b6 + // main::@7 + __b7: + // [40] (volatile bool) frame_done ← false -- vboz1=vboc1 + lda #0 + sta.z frame_done + // [41] call plex_move //*BORDERCOL = RED; // Move the sprites - // [76] phi from main::@6 to plexSine [phi:main::@6->plexSine] - plexSine_from___b6: - // [76] phi (byte) sin_idx#10 = (byte) sin_idx#12 [phi:main::@6->plexSine#0] -- register_copy - jsr plexSine - // [48] phi from main::@6 to main::@12 [phi:main::@6->main::@12] - __b12_from___b6: - jmp __b12 - // main::@12 - __b12: - // [49] call plexSort - // Sort the sprites by y-position - // [51] phi from main::@12 to plexSort [phi:main::@12->plexSort] - plexSort_from___b12: - jsr plexSort + // [76] phi from main::@7 to plex_move [phi:main::@7->plex_move] + plex_move_from___b7: + // [76] phi (byte*) scroll_text_next#25 = (byte*) scroll_text_next#13 [phi:main::@7->plex_move#0] -- register_copy + // [76] phi (byte) sin_idx#10 = (byte) sin_idx#12 [phi:main::@7->plex_move#1] -- register_copy + jsr plex_move + // [42] phi from main::@7 to main::@13 [phi:main::@7->main::@13] + __b13_from___b7: jmp __b13 // main::@13 __b13: - // [50] (volatile bool) framedone ← false -- vboz1=vboc1 - //*BORDERCOL = GREEN; - lda #0 - sta.z framedone - jmp __b5 + // [43] call plexSort + // Sort the sprites by y-position + // [51] phi from main::@13 to plexSort [phi:main::@13->plexSort] + plexSort_from___b13: + jsr plexSort + jmp __b6 + // main::@2 + __b2: + // [44] (byte~) main::$7 ← (const byte) toSpritePtr1_return#0 + (byte) main::s#2 -- vbuz1=vbuc1_plus_vbuz2 + lax.z s + axs #-[toSpritePtr1_return] + stx.z __7 + // [45] *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte~) main::$7 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z __7 + ldy.z s + sta PLEX_PTR,y + // [46] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z s + asl + sta.z __12 + // [47] (word~) main::$13 ← *((const nomodify byte*) XMOVEMENT_HI + (byte) main::x#2) w= *((const byte*) XMOVEMENT + (byte) main::x#2) -- vwuz1=pbuc1_derefidx_vbuz2_word_pbuc2_derefidx_vbuz2 + ldy.z x + lda XMOVEMENT_HI,y + sta.z __13+1 + lda XMOVEMENT,y + sta.z __13 + // [48] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word~) main::$13 -- pwuc1_derefidx_vbuz1=vwuz2 + ldy.z __12 + lda.z __13 + sta PLEX_XPOS,y + lda.z __13+1 + sta PLEX_XPOS+1,y + // [49] (byte) main::x#1 ← (byte) main::x#2 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 + lax.z x + axs #-[8] + stx.z x + // [50] (byte) main::s#1 ← ++ (byte) main::s#2 -- vbuz1=_inc_vbuz1 + inc.z s + // [20] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + __b1_from___b2: + // [20] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@2->main::@1#0] -- register_copy + // [20] phi (byte) main::s#2 = (byte) main::s#1 [phi:main::@2->main::@1#1] -- register_copy + jmp __b1 } // plexSort // Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions in PLEX_YPOS @@ -3342,12 +3667,12 @@ main: { // 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 = $2f - .label nxt_y = $30 - .label m = 7 - .label s = 8 - .label s_1 = $31 - .label plexFreePrepare1_s = 9 + .label nxt_idx = $32 + .label nxt_y = $33 + .label m = 5 + .label s = 6 + .label s_1 = $34 + .label plexFreePrepare1_s = 7 // [52] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] __b1_from_plexSort: // [52] phi (byte) plexSort::m#2 = (byte) 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 @@ -3478,90 +3803,166 @@ plexSort: { // [75] return rts } - // plexSine -// Move the plex sprites in an Y-sine -plexSine: { - .label y_idx = $b - .label sy = $c - // [77] (byte) plexSine::y_idx#0 ← (byte) sin_idx#10 -- vbuz1=vbuz2 - // Assign sinus positions + // plex_move +// Move the plex sprites in an Y-sine and scroll them to the left. +plex_move: { + .label __4 = $37 + .label __6 = $35 + .label __7 = $36 + .label y_idx = 9 + .label s = $a + // [77] (byte) plex_move::y_idx#0 ← (byte) sin_idx#10 -- vbuz1=vbuz2 lda.z sin_idx sta.z y_idx - // [78] phi from plexSine to plexSine::@1 [phi:plexSine->plexSine::@1] - __b1_from_plexSine: - // [78] phi (byte) plexSine::sy#2 = (byte) 0 [phi:plexSine->plexSine::@1#0] -- vbuz1=vbuc1 + // [78] phi from plex_move to plex_move::@1 [phi:plex_move->plex_move::@1] + __b1_from_plex_move: + // [78] phi (byte*) scroll_text_next#11 = (byte*) scroll_text_next#25 [phi:plex_move->plex_move::@1#0] -- register_copy + // [78] phi (byte) plex_move::s#2 = (byte) 0 [phi:plex_move->plex_move::@1#1] -- vbuz1=vbuc1 lda #0 - sta.z sy - // [78] phi (byte) plexSine::y_idx#2 = (byte) plexSine::y_idx#0 [phi:plexSine->plexSine::@1#1] -- register_copy + sta.z s + // [78] phi (byte) plex_move::y_idx#2 = (byte) plex_move::y_idx#0 [phi:plex_move->plex_move::@1#2] -- register_copy jmp __b1 - // [78] phi from plexSine::@1 to plexSine::@1 [phi:plexSine::@1->plexSine::@1] - __b1_from___b1: - // [78] phi (byte) plexSine::sy#2 = (byte) plexSine::sy#1 [phi:plexSine::@1->plexSine::@1#0] -- register_copy - // [78] phi (byte) plexSine::y_idx#2 = (byte) plexSine::y_idx#1 [phi:plexSine::@1->plexSine::@1#1] -- register_copy + // [78] phi from plex_move::@2 to plex_move::@1 [phi:plex_move::@2->plex_move::@1] + __b1_from___b2: + // [78] phi (byte*) scroll_text_next#11 = (byte*) scroll_text_next#13 [phi:plex_move::@2->plex_move::@1#0] -- register_copy + // [78] phi (byte) plex_move::s#2 = (byte) plex_move::s#1 [phi:plex_move::@2->plex_move::@1#1] -- register_copy + // [78] phi (byte) plex_move::y_idx#2 = (byte) plex_move::y_idx#1 [phi:plex_move::@2->plex_move::@1#2] -- register_copy jmp __b1 - // plexSine::@1 + // plex_move::@1 __b1: - // [79] *((const byte*) PLEX_YPOS + (byte) plexSine::sy#2) ← *((const byte*) YSIN + (byte) plexSine::y_idx#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2 + // [79] *((const byte*) PLEX_YPOS + (byte) plex_move::s#2) ← *((const byte*) YSIN + (byte) plex_move::y_idx#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2 + // Assign sine value ldy.z y_idx lda YSIN,y - ldy.z sy + ldy.z s sta PLEX_YPOS,y - // [80] (byte) plexSine::y_idx#1 ← (byte) plexSine::y_idx#2 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 + // [80] (byte) plex_move::y_idx#1 ← (byte) plex_move::y_idx#2 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 lax.z y_idx axs #-[8] stx.z y_idx - // [81] (byte) plexSine::sy#1 ← ++ (byte) plexSine::sy#2 -- vbuz1=_inc_vbuz1 - inc.z sy - // [82] if((byte) plexSine::sy#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexSine::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #PLEX_COUNT-1+1 - cmp.z sy - bne __b1_from___b1 + // [81] (byte~) plex_move::$6 ← (byte) plex_move::s#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z s + asl + sta.z __6 + // [82] if(*((const word*) PLEX_XPOS + (byte~) plex_move::$6)!=(byte) 0) goto plex_move::@2 -- pwuc1_derefidx_vbuz1_neq_0_then_la1 + ldy.z __6 + lda PLEX_XPOS+1,y + bne __b2_from___b1 + lda PLEX_XPOS,y + bne __b2_from___b1 + jmp __b4 + // plex_move::@4 + __b4: + // [83] (byte~) plex_move::$7 ← (byte) plex_move::s#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z s + asl + sta.z __7 + // [84] *((const word*) PLEX_XPOS + (byte~) plex_move::$7) ← (word)(number) $b*(number) $20 -- pwuc1_derefidx_vbuz1=vwuc2 + // Move sprite to far right + ldy.z __7 + lda #<$b*$20 + sta PLEX_XPOS,y + lda #>$b*$20 + sta PLEX_XPOS+1,y + // [85] if(*((byte*) scroll_text_next#11)!=(byte) 0) goto plex_move::@6 -- _deref_pbuz1_neq_0_then_la1 + ldy #0 + lda (scroll_text_next),y + cmp #0 + bne __b6_from___b4 + // [87] phi from plex_move::@4 to plex_move::@3 [phi:plex_move::@4->plex_move::@3] + __b3_from___b4: + // [87] phi (byte*) scroll_text_next#12 = (const byte*) SCROLL_TEXT [phi:plex_move::@4->plex_move::@3#0] -- pbuz1=pbuc1 + lda #SCROLL_TEXT + sta.z scroll_text_next+1 + jmp __b3 + // [86] phi from plex_move::@4 to plex_move::@6 [phi:plex_move::@4->plex_move::@6] + __b6_from___b4: + jmp __b6 + // plex_move::@6 + __b6: + // [87] phi from plex_move::@6 to plex_move::@3 [phi:plex_move::@6->plex_move::@3] + __b3_from___b6: + // [87] phi (byte*) scroll_text_next#12 = (byte*) scroll_text_next#11 [phi:plex_move::@6->plex_move::@3#0] -- register_copy + jmp __b3 + // plex_move::@3 + __b3: + // [88] (byte~) plex_move::$4 ← (const byte) toSpritePtr1_return#0 + *((byte*) scroll_text_next#12) -- vbuz1=vbuc1_plus__deref_pbuz2 + lda #toSpritePtr1_return + clc + ldy #0 + adc (scroll_text_next),y + sta.z __4 + // [89] *((const byte*) PLEX_PTR + (byte) plex_move::s#2) ← (byte~) plex_move::$4 -- pbuc1_derefidx_vbuz1=vbuz2 + // Read next char from the scroll text + lda.z __4 + ldy.z s + sta PLEX_PTR,y + // [90] (byte*) scroll_text_next#4 ← ++ (byte*) scroll_text_next#12 -- pbuz1=_inc_pbuz1 + inc.z scroll_text_next + bne !+ + inc.z scroll_text_next+1 + !: + // [91] phi from plex_move::@1 plex_move::@3 to plex_move::@2 [phi:plex_move::@1/plex_move::@3->plex_move::@2] + __b2_from___b1: + __b2_from___b3: + // [91] phi (byte*) scroll_text_next#13 = (byte*) scroll_text_next#11 [phi:plex_move::@1/plex_move::@3->plex_move::@2#0] -- register_copy jmp __b2 - // plexSine::@2 + // plex_move::@2 __b2: - // [83] (byte) sin_idx#12 ← (byte) sin_idx#10 + (byte) 1 -- vbuz1=vbuz1_plus_1 + // [92] (byte) plex_move::s#1 ← ++ (byte) plex_move::s#2 -- vbuz1=_inc_vbuz1 + inc.z s + // [93] if((byte) plex_move::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plex_move::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #PLEX_COUNT-1+1 + cmp.z s + bne __b1_from___b2 + jmp __b5 + // plex_move::@5 + __b5: + // [94] (byte) sin_idx#12 ← (byte) sin_idx#10 + (byte) 1 -- vbuz1=vbuz1_plus_1 inc.z sin_idx jmp __breturn - // plexSine::@return + // plex_move::@return __breturn: - // [84] return + // [95] return rts } // plexInit // Initialize the multiplexer data structures plexInit: { .label i = $d - // [86] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] + // [97] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] plexSetScreen1_from_plexInit: jmp plexSetScreen1 // plexInit::plexSetScreen1 plexSetScreen1: - // [87] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] + // [98] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] __b1_from_plexSetScreen1: - // [87] phi (byte) plexInit::i#2 = (byte) 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuz1=vbuc1 + // [98] phi (byte) plexInit::i#2 = (byte) 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b1 - // [87] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] + // [98] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] __b1_from___b1: - // [87] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy + // [98] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy jmp __b1 // plexInit::@1 __b1: - // [88] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 -- pbuc1_derefidx_vbuz1=vbuz1 + // [99] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 -- pbuc1_derefidx_vbuz1=vbuz1 ldy.z i tya sta PLEX_SORTED_IDX,y - // [89] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 -- vbuz1=_inc_vbuz1 + // [100] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [90] if((byte) plexInit::i#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1 -- vbuz1_neq_vbuc1_then_la1 + // [101] if((byte) plexInit::i#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1 -- vbuz1_neq_vbuc1_then_la1 lda #PLEX_COUNT-1+1 cmp.z i bne __b1_from___b1 jmp __breturn // plexInit::@return __breturn: - // [91] return + // [102] return rts } // font_2x2_to_sprites @@ -3571,46 +3972,46 @@ plexInit: { // - num_chars The number of chars to convert font_2x2_to_sprites: { .const num_chars = $40 - .label __3 = $32 + .label __3 = $38 .label char_right = $17 - .label sprite_idx = $33 - .label sprite_idx_1 = $34 + .label sprite_idx = $39 + .label sprite_idx_1 = $3a .label sprite_idx_2 = $16 .label char_left = $14 .label i = $13 .label char_current = $f .label sprite = $11 .label c = $e - // [93] phi from font_2x2_to_sprites to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1] + // [104] 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: - // [93] phi (byte*) font_2x2_to_sprites::sprite#4 = (const nomodify byte*) SPRITES [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#0] -- pbuz1=pbuc1 + // [104] phi (byte*) font_2x2_to_sprites::sprite#4 = (const nomodify byte*) SPRITES [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#0] -- pbuz1=pbuc1 lda #SPRITES sta.z sprite+1 - // [93] phi (byte*) font_2x2_to_sprites::char_current#2 = (const nomodify byte*) FONT [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#1] -- pbuz1=pbuc1 + // [104] phi (byte*) font_2x2_to_sprites::char_current#2 = (const byte*) FONT [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#1] -- pbuz1=pbuc1 lda #FONT sta.z char_current+1 - // [93] phi (byte) font_2x2_to_sprites::c#2 = (byte) 0 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#2] -- vbuz1=vbuc1 + // [104] phi (byte) font_2x2_to_sprites::c#2 = (byte) 0 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#2] -- vbuz1=vbuc1 lda #0 sta.z c jmp __b1 // font_2x2_to_sprites::@1 __b1: - // [94] if((byte) font_2x2_to_sprites::c#2<(const byte) font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2 -- vbuz1_lt_vbuc1_then_la1 + // [105] if((byte) font_2x2_to_sprites::c#2<(const byte) font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z c cmp #num_chars bcc __b2 jmp __breturn // font_2x2_to_sprites::@return __breturn: - // [95] return + // [106] return rts // font_2x2_to_sprites::@2 __b2: - // [96] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [107] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z char_current clc adc #<$40*8 @@ -3618,108 +4019,108 @@ font_2x2_to_sprites: { lda.z char_current+1 adc #>$40*8 sta.z char_right+1 - // [97] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) font_2x2_to_sprites::char_current#2 -- pbuz1=pbuz2 + // [108] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) font_2x2_to_sprites::char_current#2 -- pbuz1=pbuz2 lda.z char_current sta.z char_left lda.z char_current+1 sta.z char_left+1 - // [98] phi from font_2x2_to_sprites::@2 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3] + // [109] phi from font_2x2_to_sprites::@2 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3] __b3_from___b2: - // [98] phi (byte*) font_2x2_to_sprites::char_right#3 = (byte*) font_2x2_to_sprites::char_right#0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#0] -- register_copy - // [98] phi (byte) font_2x2_to_sprites::sprite_idx#4 = (byte) 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#1] -- vbuz1=vbuc1 + // [109] phi (byte*) font_2x2_to_sprites::char_right#3 = (byte*) font_2x2_to_sprites::char_right#0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#0] -- register_copy + // [109] phi (byte) font_2x2_to_sprites::sprite_idx#4 = (byte) 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#1] -- vbuz1=vbuc1 lda #0 sta.z sprite_idx_2 - // [98] phi (byte*) font_2x2_to_sprites::char_left#3 = (byte*) font_2x2_to_sprites::char_left#6 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#2] -- register_copy - // [98] phi (byte) font_2x2_to_sprites::i#2 = (byte) 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#3] -- vbuz1=vbuc1 + // [109] phi (byte*) font_2x2_to_sprites::char_left#3 = (byte*) font_2x2_to_sprites::char_left#6 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#2] -- register_copy + // [109] phi (byte) font_2x2_to_sprites::i#2 = (byte) 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#3] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b3 - // [98] phi from font_2x2_to_sprites::@5 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3] + // [109] phi from font_2x2_to_sprites::@5 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3] __b3_from___b5: - // [98] phi (byte*) font_2x2_to_sprites::char_right#3 = (byte*) font_2x2_to_sprites::char_right#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#0] -- register_copy - // [98] phi (byte) font_2x2_to_sprites::sprite_idx#4 = (byte) font_2x2_to_sprites::sprite_idx#3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#1] -- register_copy - // [98] phi (byte*) font_2x2_to_sprites::char_left#3 = (byte*) font_2x2_to_sprites::char_left#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#2] -- register_copy - // [98] phi (byte) font_2x2_to_sprites::i#2 = (byte) font_2x2_to_sprites::i#1 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#3] -- register_copy + // [109] phi (byte*) font_2x2_to_sprites::char_right#3 = (byte*) font_2x2_to_sprites::char_right#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#0] -- register_copy + // [109] phi (byte) font_2x2_to_sprites::sprite_idx#4 = (byte) font_2x2_to_sprites::sprite_idx#3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#1] -- register_copy + // [109] phi (byte*) font_2x2_to_sprites::char_left#3 = (byte*) font_2x2_to_sprites::char_left#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#2] -- register_copy + // [109] phi (byte) font_2x2_to_sprites::i#2 = (byte) font_2x2_to_sprites::i#1 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#3] -- register_copy jmp __b3 // font_2x2_to_sprites::@3 __b3: - // [99] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + // [110] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 lda #7 and.z i sta.z __3 - // [100] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) font_2x2_to_sprites::$3) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 + // [111] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) font_2x2_to_sprites::$3) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 ldy.z __3 lda (char_left),y ldy.z sprite_idx_2 sta (sprite),y - // [101] (byte) font_2x2_to_sprites::sprite_idx#1 ← ++ (byte) font_2x2_to_sprites::sprite_idx#4 -- vbuz1=_inc_vbuz2 + // [112] (byte) font_2x2_to_sprites::sprite_idx#1 ← ++ (byte) font_2x2_to_sprites::sprite_idx#4 -- vbuz1=_inc_vbuz2 ldy.z sprite_idx_2 iny sty.z sprite_idx - // [102] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) font_2x2_to_sprites::$3) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 + // [113] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) font_2x2_to_sprites::$3) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 ldy.z __3 lda (char_right),y ldy.z sprite_idx sta (sprite),y - // [103] (byte) font_2x2_to_sprites::sprite_idx#2 ← ++ (byte) font_2x2_to_sprites::sprite_idx#1 -- vbuz1=_inc_vbuz2 + // [114] (byte) font_2x2_to_sprites::sprite_idx#2 ← ++ (byte) font_2x2_to_sprites::sprite_idx#1 -- vbuz1=_inc_vbuz2 ldy.z sprite_idx iny sty.z sprite_idx_1 - // [104] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + // [115] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy.z sprite_idx_1 sta (sprite),y - // [105] (byte) font_2x2_to_sprites::sprite_idx#3 ← ++ (byte) font_2x2_to_sprites::sprite_idx#2 -- vbuz1=_inc_vbuz2 + // [116] (byte) font_2x2_to_sprites::sprite_idx#3 ← ++ (byte) font_2x2_to_sprites::sprite_idx#2 -- vbuz1=_inc_vbuz2 ldy.z sprite_idx_1 iny sty.z sprite_idx_2 - // [106] if((byte) font_2x2_to_sprites::i#2==(byte) 7) goto font_2x2_to_sprites::@4 -- vbuz1_eq_vbuc1_then_la1 + // [117] if((byte) font_2x2_to_sprites::i#2==(byte) 7) goto font_2x2_to_sprites::@4 -- vbuz1_eq_vbuc1_then_la1 lda #7 cmp.z i beq __b4 jmp __b6 // font_2x2_to_sprites::@6 __b6: - // [107] if((byte) font_2x2_to_sprites::i#2!=(byte) $f) goto font_2x2_to_sprites::@8 -- vbuz1_neq_vbuc1_then_la1 + // [118] if((byte) font_2x2_to_sprites::i#2!=(byte) $f) goto font_2x2_to_sprites::@8 -- vbuz1_neq_vbuc1_then_la1 lda #$f cmp.z i bne __b8_from___b6 - // [109] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5] + // [120] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5] __b5_from___b6: - // [109] phi (byte*) font_2x2_to_sprites::char_right#4 = (const nomodify byte*) FONT+(byte) ' '*(byte) 8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#0] -- pbuz1=pbuc1 + // [120] phi (byte*) font_2x2_to_sprites::char_right#4 = (const byte*) FONT+(byte) ' '*(byte) 8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#0] -- pbuz1=pbuc1 lda #FONT+' '*8 sta.z char_right+1 - // [109] phi (byte*) font_2x2_to_sprites::char_left#4 = (const nomodify byte*) FONT+(byte) ' '*(byte) 8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#1] -- pbuz1=pbuc1 + // [120] phi (byte*) font_2x2_to_sprites::char_left#4 = (const byte*) FONT+(byte) ' '*(byte) 8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#1] -- pbuz1=pbuc1 lda #FONT+' '*8 sta.z char_left+1 jmp __b5 - // [108] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@8] + // [119] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@8] __b8_from___b6: jmp __b8 // font_2x2_to_sprites::@8 __b8: - // [109] phi from font_2x2_to_sprites::@4 font_2x2_to_sprites::@8 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5] + // [120] phi from font_2x2_to_sprites::@4 font_2x2_to_sprites::@8 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5] __b5_from___b4: __b5_from___b8: - // [109] phi (byte*) font_2x2_to_sprites::char_right#4 = (byte*) font_2x2_to_sprites::char_right#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#0] -- register_copy - // [109] phi (byte*) font_2x2_to_sprites::char_left#4 = (byte*) font_2x2_to_sprites::char_left#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#1] -- register_copy + // [120] phi (byte*) font_2x2_to_sprites::char_right#4 = (byte*) font_2x2_to_sprites::char_right#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#0] -- register_copy + // [120] phi (byte*) font_2x2_to_sprites::char_left#4 = (byte*) font_2x2_to_sprites::char_left#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#1] -- register_copy jmp __b5 // font_2x2_to_sprites::@5 __b5: - // [110] (byte) font_2x2_to_sprites::i#1 ← ++ (byte) font_2x2_to_sprites::i#2 -- vbuz1=_inc_vbuz1 + // [121] (byte) font_2x2_to_sprites::i#1 ← ++ (byte) font_2x2_to_sprites::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [111] if((byte) font_2x2_to_sprites::i#1!=(byte) $15) goto font_2x2_to_sprites::@3 -- vbuz1_neq_vbuc1_then_la1 + // [122] if((byte) font_2x2_to_sprites::i#1!=(byte) $15) goto font_2x2_to_sprites::@3 -- vbuz1_neq_vbuc1_then_la1 lda #$15 cmp.z i bne __b3_from___b5 jmp __b7 // font_2x2_to_sprites::@7 __b7: - // [112] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [123] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z char_current @@ -3727,7 +4128,7 @@ font_2x2_to_sprites: { bcc !+ inc.z char_current+1 !: - // [113] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40 -- pbuz1=pbuz1_plus_vbuc1 + // [124] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40 -- pbuz1=pbuz1_plus_vbuc1 lda #$40 clc adc.z sprite @@ -3735,17 +4136,17 @@ font_2x2_to_sprites: { bcc !+ inc.z sprite+1 !: - // [114] (byte) font_2x2_to_sprites::c#1 ← ++ (byte) font_2x2_to_sprites::c#2 -- vbuz1=_inc_vbuz1 + // [125] (byte) font_2x2_to_sprites::c#1 ← ++ (byte) font_2x2_to_sprites::c#2 -- vbuz1=_inc_vbuz1 inc.z c - // [93] phi from font_2x2_to_sprites::@7 to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1] + // [104] phi from font_2x2_to_sprites::@7 to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1] __b1_from___b7: - // [93] phi (byte*) font_2x2_to_sprites::sprite#4 = (byte*) font_2x2_to_sprites::sprite#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#0] -- register_copy - // [93] phi (byte*) font_2x2_to_sprites::char_current#2 = (byte*) font_2x2_to_sprites::char_current#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#1] -- register_copy - // [93] phi (byte) font_2x2_to_sprites::c#2 = (byte) font_2x2_to_sprites::c#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#2] -- register_copy + // [104] phi (byte*) font_2x2_to_sprites::sprite#4 = (byte*) font_2x2_to_sprites::sprite#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#0] -- register_copy + // [104] phi (byte*) font_2x2_to_sprites::char_current#2 = (byte*) font_2x2_to_sprites::char_current#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#1] -- register_copy + // [104] phi (byte) font_2x2_to_sprites::c#2 = (byte) font_2x2_to_sprites::c#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#2] -- register_copy jmp __b1 // font_2x2_to_sprites::@4 __b4: - // [115] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [126] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z char_current clc adc #<$80*8 @@ -3753,7 +4154,7 @@ font_2x2_to_sprites: { lda.z char_current+1 adc #>$80*8 sta.z char_left+1 - // [116] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [127] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z char_current clc adc #<$c0*8 @@ -3771,18 +4172,18 @@ font_2x2_to_sprites: { // - 0x80 - 0xbf Lower left glyphs // - 0xc0 - 0xff Lower right glyphs font_2x2: { - .label __1 = $35 - .label __5 = $36 - .label __7 = $3a - .label __11 = $3d - .label __12 = $3c - .label __14 = $3f - .label __15 = $3e + .label __1 = $3b + .label __5 = $3c + .label __7 = $40 + .label __11 = $43 + .label __12 = $42 + .label __14 = $45 + .label __15 = $44 .label next_2x2_left = $19 .label next_2x2_right = $22 .label glyph_bits = $24 .label glyph_bit = $28 - .label glyph_bits_2x2 = $38 + .label glyph_bits_2x2 = $3e .label glyph_bits_2x2_1 = $25 .label b = $27 .label l2 = $21 @@ -3791,31 +4192,31 @@ font_2x2: { .label next_2x2 = $19 .label next_original = $1b .label c = $1d - // [118] phi from font_2x2 to font_2x2::@1 [phi:font_2x2->font_2x2::@1] + // [129] phi from font_2x2 to font_2x2::@1 [phi:font_2x2->font_2x2::@1] __b1_from_font_2x2: - // [118] phi (byte) font_2x2::c#11 = (byte) 0 [phi:font_2x2->font_2x2::@1#0] -- vbuz1=vbuc1 + // [129] phi (byte) font_2x2::c#11 = (byte) 0 [phi:font_2x2->font_2x2::@1#0] -- vbuz1=vbuc1 lda #0 sta.z c - // [118] phi (byte*) font_2x2::next_original#4 = (const nomodify byte*) CHARGEN [phi:font_2x2->font_2x2::@1#1] -- pbuz1=pbuc1 + // [129] phi (byte*) font_2x2::next_original#4 = (const nomodify byte*) CHARGEN [phi:font_2x2->font_2x2::@1#1] -- pbuz1=pbuc1 lda #CHARGEN sta.z next_original+1 - // [118] phi (byte*) font_2x2::next_2x2_left#0 = (const nomodify byte*) FONT [phi:font_2x2->font_2x2::@1#2] -- pbuz1=pbuc1 + // [129] phi (byte*) font_2x2::next_2x2_left#0 = (const byte*) FONT [phi:font_2x2->font_2x2::@1#2] -- pbuz1=pbuc1 lda #FONT sta.z next_2x2_left+1 jmp __b1 - // [118] phi from font_2x2::@9 to font_2x2::@1 [phi:font_2x2::@9->font_2x2::@1] + // [129] phi from font_2x2::@9 to font_2x2::@1 [phi:font_2x2::@9->font_2x2::@1] __b1_from___b9: - // [118] phi (byte) font_2x2::c#11 = (byte) font_2x2::c#1 [phi:font_2x2::@9->font_2x2::@1#0] -- register_copy - // [118] phi (byte*) font_2x2::next_original#4 = (byte*) font_2x2::next_original#1 [phi:font_2x2::@9->font_2x2::@1#1] -- register_copy - // [118] phi (byte*) font_2x2::next_2x2_left#0 = (byte*) font_2x2::next_2x2#1 [phi:font_2x2::@9->font_2x2::@1#2] -- register_copy + // [129] phi (byte) font_2x2::c#11 = (byte) font_2x2::c#1 [phi:font_2x2::@9->font_2x2::@1#0] -- register_copy + // [129] phi (byte*) font_2x2::next_original#4 = (byte*) font_2x2::next_original#1 [phi:font_2x2::@9->font_2x2::@1#1] -- register_copy + // [129] phi (byte*) font_2x2::next_2x2_left#0 = (byte*) font_2x2::next_2x2#1 [phi:font_2x2::@9->font_2x2::@1#2] -- register_copy jmp __b1 // font_2x2::@1 __b1: - // [119] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [130] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z next_2x2_left clc adc #<$40*8 @@ -3823,164 +4224,164 @@ font_2x2: { lda.z next_2x2_left+1 adc #>$40*8 sta.z next_2x2_right+1 - // [120] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0 -- pbuz1=pbuz2 + // [131] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0 -- pbuz1=pbuz2 lda.z next_2x2_left sta.z next_2x2_left_1 lda.z next_2x2_left+1 sta.z next_2x2_left_1+1 - // [121] phi from font_2x2::@1 to font_2x2::@2 [phi:font_2x2::@1->font_2x2::@2] + // [132] phi from font_2x2::@1 to font_2x2::@2 [phi:font_2x2::@1->font_2x2::@2] __b2_from___b1: - // [121] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#0 [phi:font_2x2::@1->font_2x2::@2#0] -- register_copy - // [121] phi (byte) font_2x2::l2#8 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#1] -- vbuz1=vbuc1 + // [132] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#0 [phi:font_2x2::@1->font_2x2::@2#0] -- register_copy + // [132] phi (byte) font_2x2::l2#8 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#1] -- vbuz1=vbuc1 lda #0 sta.z l2 - // [121] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#10 [phi:font_2x2::@1->font_2x2::@2#2] -- register_copy - // [121] phi (byte) font_2x2::l#2 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#3] -- vbuz1=vbuc1 + // [132] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#10 [phi:font_2x2::@1->font_2x2::@2#2] -- register_copy + // [132] phi (byte) font_2x2::l#2 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#3] -- vbuz1=vbuc1 lda #0 sta.z l jmp __b2 - // [121] phi from font_2x2::@8 to font_2x2::@2 [phi:font_2x2::@8->font_2x2::@2] + // [132] phi from font_2x2::@8 to font_2x2::@2 [phi:font_2x2::@8->font_2x2::@2] __b2_from___b8: - // [121] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#8 [phi:font_2x2::@8->font_2x2::@2#0] -- register_copy - // [121] phi (byte) font_2x2::l2#8 = (byte) font_2x2::l2#9 [phi:font_2x2::@8->font_2x2::@2#1] -- register_copy - // [121] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#8 [phi:font_2x2::@8->font_2x2::@2#2] -- register_copy - // [121] phi (byte) font_2x2::l#2 = (byte) font_2x2::l#1 [phi:font_2x2::@8->font_2x2::@2#3] -- register_copy + // [132] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#8 [phi:font_2x2::@8->font_2x2::@2#0] -- register_copy + // [132] phi (byte) font_2x2::l2#8 = (byte) font_2x2::l2#9 [phi:font_2x2::@8->font_2x2::@2#1] -- register_copy + // [132] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#8 [phi:font_2x2::@8->font_2x2::@2#2] -- register_copy + // [132] phi (byte) font_2x2::l#2 = (byte) font_2x2::l#1 [phi:font_2x2::@8->font_2x2::@2#3] -- register_copy jmp __b2 // font_2x2::@2 __b2: - // [122] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2) -- vbuz1=pbuz2_derefidx_vbuz3 + // [133] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2) -- vbuz1=pbuz2_derefidx_vbuz3 ldy.z l lda (next_original),y sta.z glyph_bits - // [123] phi from font_2x2::@2 to font_2x2::@3 [phi:font_2x2::@2->font_2x2::@3] + // [134] phi from font_2x2::@2 to font_2x2::@3 [phi:font_2x2::@2->font_2x2::@3] __b3_from___b2: - // [123] phi (byte) font_2x2::b#2 = (byte) 0 [phi:font_2x2::@2->font_2x2::@3#0] -- vbuz1=vbuc1 + // [134] phi (byte) font_2x2::b#2 = (byte) 0 [phi:font_2x2::@2->font_2x2::@3#0] -- vbuz1=vbuc1 lda #0 sta.z b - // [123] phi (word) font_2x2::glyph_bits_2x2#3 = (word) 0 [phi:font_2x2::@2->font_2x2::@3#1] -- vwuz1=vwuc1 + // [134] phi (word) font_2x2::glyph_bits_2x2#3 = (word) 0 [phi:font_2x2::@2->font_2x2::@3#1] -- vwuz1=vwuc1 lda #<0 sta.z glyph_bits_2x2_1 lda #>0 sta.z glyph_bits_2x2_1+1 - // [123] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#0 [phi:font_2x2::@2->font_2x2::@3#2] -- register_copy + // [134] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#0 [phi:font_2x2::@2->font_2x2::@3#2] -- register_copy jmp __b3 - // [123] phi from font_2x2::@5 to font_2x2::@3 [phi:font_2x2::@5->font_2x2::@3] + // [134] phi from font_2x2::@5 to font_2x2::@3 [phi:font_2x2::@5->font_2x2::@3] __b3_from___b5: - // [123] phi (byte) font_2x2::b#2 = (byte) font_2x2::b#1 [phi:font_2x2::@5->font_2x2::@3#0] -- register_copy - // [123] phi (word) font_2x2::glyph_bits_2x2#3 = (word) font_2x2::glyph_bits_2x2#2 [phi:font_2x2::@5->font_2x2::@3#1] -- register_copy - // [123] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#1 [phi:font_2x2::@5->font_2x2::@3#2] -- register_copy + // [134] phi (byte) font_2x2::b#2 = (byte) font_2x2::b#1 [phi:font_2x2::@5->font_2x2::@3#0] -- register_copy + // [134] phi (word) font_2x2::glyph_bits_2x2#3 = (word) font_2x2::glyph_bits_2x2#2 [phi:font_2x2::@5->font_2x2::@3#1] -- register_copy + // [134] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#1 [phi:font_2x2::@5->font_2x2::@3#2] -- register_copy jmp __b3 // font_2x2::@3 __b3: - // [124] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 + // [135] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 lda #$80 and.z glyph_bits sta.z __1 - // [125] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4 -- vbuc1_neq_vbuz1_then_la1 + // [136] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp.z __1 bne __b4_from___b3 - // [127] phi from font_2x2::@3 to font_2x2::@5 [phi:font_2x2::@3->font_2x2::@5] + // [138] phi from font_2x2::@3 to font_2x2::@5 [phi:font_2x2::@3->font_2x2::@5] __b5_from___b3: - // [127] phi (byte) font_2x2::glyph_bit#0 = (byte) 0 [phi:font_2x2::@3->font_2x2::@5#0] -- vbuz1=vbuc1 + // [138] phi (byte) font_2x2::glyph_bit#0 = (byte) 0 [phi:font_2x2::@3->font_2x2::@5#0] -- vbuz1=vbuc1 lda #0 sta.z glyph_bit jmp __b5 - // [126] phi from font_2x2::@3 to font_2x2::@4 [phi:font_2x2::@3->font_2x2::@4] + // [137] phi from font_2x2::@3 to font_2x2::@4 [phi:font_2x2::@3->font_2x2::@4] __b4_from___b3: jmp __b4 // font_2x2::@4 __b4: - // [127] phi from font_2x2::@4 to font_2x2::@5 [phi:font_2x2::@4->font_2x2::@5] + // [138] phi from font_2x2::@4 to font_2x2::@5 [phi:font_2x2::@4->font_2x2::@5] __b5_from___b4: - // [127] phi (byte) font_2x2::glyph_bit#0 = (byte) 1 [phi:font_2x2::@4->font_2x2::@5#0] -- vbuz1=vbuc1 + // [138] phi (byte) font_2x2::glyph_bit#0 = (byte) 1 [phi:font_2x2::@4->font_2x2::@5#0] -- vbuz1=vbuc1 lda #1 sta.z glyph_bit jmp __b5 // font_2x2::@5 __b5: - // [128] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [139] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda.z glyph_bits_2x2_1 asl sta.z __5 lda.z glyph_bits_2x2_1+1 rol sta.z __5+1 - // [129] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz2_bor_vbuz3 + // [140] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz2_bor_vbuz3 lda.z glyph_bit ora.z __5 sta.z glyph_bits_2x2 lda.z __5+1 sta.z glyph_bits_2x2+1 - // [130] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [141] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda.z glyph_bits_2x2 asl sta.z __7 lda.z glyph_bits_2x2+1 rol sta.z __7+1 - // [131] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz2_bor_vbuz3 + // [142] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz2_bor_vbuz3 lda.z glyph_bit ora.z __7 sta.z glyph_bits_2x2_1 lda.z __7+1 sta.z glyph_bits_2x2_1+1 - // [132] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 + // [143] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 // Move to next bit asl.z glyph_bits - // [133] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2 -- vbuz1=_inc_vbuz1 + // [144] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2 -- vbuz1=_inc_vbuz1 inc.z b - // [134] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3 -- vbuz1_neq_vbuc1_then_la1 + // [145] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z b bne __b3_from___b5 jmp __b6 // font_2x2::@6 __b6: - // [135] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 -- vbuz1=_hi_vwuz2 + // [146] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 -- vbuz1=_hi_vwuz2 lda.z glyph_bits_2x2_1+1 sta.z __12 - // [136] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuz2=vbuz3 + // [147] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuz2=vbuz3 // Put the generated 2x2-line into the 2x2-font twice lda.z __12 ldy.z l2 sta (next_2x2_left_1),y - // [137] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [148] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z l2 iny sty.z __11 - // [138] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuz2=vbuz3 + // [149] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z __12 ldy.z __11 sta (next_2x2_left_1),y - // [139] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2 -- vbuz1=_lo_vwuz2 + // [150] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2 -- vbuz1=_lo_vwuz2 lda.z glyph_bits_2x2_1 sta.z __15 - // [140] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15 -- pbuz1_derefidx_vbuz2=vbuz3 + // [151] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z __15 ldy.z l2 sta (next_2x2_right),y - // [141] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [152] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z l2 iny sty.z __14 - // [142] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15 -- pbuz1_derefidx_vbuz2=vbuz3 + // [153] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z __15 ldy.z __14 sta (next_2x2_right),y - // [143] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2 -- vbuz1=vbuz1_plus_2 + // [154] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2 -- vbuz1=vbuz1_plus_2 lda.z l2 clc adc #2 sta.z l2 - // [144] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8 -- vbuz1_neq_vbuc1_then_la1 + // [155] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z l2 bne __b8_from___b6 jmp __b7 // font_2x2::@7 __b7: - // [145] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [156] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z next_2x2_left clc adc #<$80*8 @@ -3988,7 +4389,7 @@ font_2x2: { lda.z next_2x2_left+1 adc #>$80*8 sta.z next_2x2_left_1+1 - // [146] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [157] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z next_2x2_left clc adc #<$c0*8 @@ -3996,32 +4397,32 @@ font_2x2: { lda.z next_2x2_left+1 adc #>$c0*8 sta.z next_2x2_right+1 - // [147] phi from font_2x2::@7 to font_2x2::@8 [phi:font_2x2::@7->font_2x2::@8] + // [158] phi from font_2x2::@7 to font_2x2::@8 [phi:font_2x2::@7->font_2x2::@8] __b8_from___b7: - // [147] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#1 [phi:font_2x2::@7->font_2x2::@8#0] -- register_copy - // [147] phi (byte) font_2x2::l2#9 = (byte) 0 [phi:font_2x2::@7->font_2x2::@8#1] -- vbuz1=vbuc1 + // [158] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#1 [phi:font_2x2::@7->font_2x2::@8#0] -- register_copy + // [158] phi (byte) font_2x2::l2#9 = (byte) 0 [phi:font_2x2::@7->font_2x2::@8#1] -- vbuz1=vbuc1 lda #0 sta.z l2 - // [147] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#1 [phi:font_2x2::@7->font_2x2::@8#2] -- register_copy + // [158] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#1 [phi:font_2x2::@7->font_2x2::@8#2] -- register_copy jmp __b8 - // [147] phi from font_2x2::@6 to font_2x2::@8 [phi:font_2x2::@6->font_2x2::@8] + // [158] phi from font_2x2::@6 to font_2x2::@8 [phi:font_2x2::@6->font_2x2::@8] __b8_from___b6: - // [147] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#7 [phi:font_2x2::@6->font_2x2::@8#0] -- register_copy - // [147] phi (byte) font_2x2::l2#9 = (byte) font_2x2::l2#1 [phi:font_2x2::@6->font_2x2::@8#1] -- register_copy - // [147] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#7 [phi:font_2x2::@6->font_2x2::@8#2] -- register_copy + // [158] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#7 [phi:font_2x2::@6->font_2x2::@8#0] -- register_copy + // [158] phi (byte) font_2x2::l2#9 = (byte) font_2x2::l2#1 [phi:font_2x2::@6->font_2x2::@8#1] -- register_copy + // [158] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#7 [phi:font_2x2::@6->font_2x2::@8#2] -- register_copy jmp __b8 // font_2x2::@8 __b8: - // [148] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2 -- vbuz1=_inc_vbuz1 + // [159] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2 -- vbuz1=_inc_vbuz1 inc.z l - // [149] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2 -- vbuz1_neq_vbuc1_then_la1 + // [160] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z l bne __b2_from___b8 jmp __b9 // font_2x2::@9 __b9: - // [150] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [161] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z next_2x2 @@ -4029,7 +4430,7 @@ font_2x2: { bcc !+ inc.z next_2x2+1 !: - // [151] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [162] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z next_original @@ -4037,81 +4438,82 @@ font_2x2: { bcc !+ inc.z next_original+1 !: - // [152] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11 -- vbuz1=_inc_vbuz1 + // [163] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11 -- vbuz1=_inc_vbuz1 inc.z c - // [153] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1 -- vbuz1_neq_vbuc1_then_la1 + // [164] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$40 cmp.z c bne __b1_from___b9 jmp __breturn // font_2x2::@return __breturn: - // [154] return + // [165] return rts } // plex_irq // Show sprites from the multiplexer, rescheduling the IRQ as many times as needed plex_irq: { - .label __4 = $41 - .label plexFreeNextYpos1_return = $40 + .label __4 = $47 + .label plexFreeNextYpos1_return = $46 // entry interrupt(KERNEL_MIN) // asm { sei } sei - // [156] phi from plex_irq plex_irq::@7 to plex_irq::@3 [phi:plex_irq/plex_irq::@7->plex_irq::@3] + // [167] phi from plex_irq plex_irq::@7 to plex_irq::@3 [phi:plex_irq/plex_irq::@7->plex_irq::@3] __b3_from_plex_irq: __b3_from___b7: jmp __b3 // plex_irq::@3 __b3: - // [157] call plexShowSprite + // [168] call plexShowSprite jsr plexShowSprite jmp plexFreeNextYpos1 // plex_irq::plexFreeNextYpos1 plexFreeNextYpos1: - // [158] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) -- vbuz1=pbuc1_derefidx_vbuz2 + // [169] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z plex_free_next lda PLEX_FREE_YPOS,y sta.z plexFreeNextYpos1_return jmp __b6 // plex_irq::@6 __b6: - // [159] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 -- vbuz1=_deref_pbuc1_plus_vbuc2 + // [170] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 -- vbuz1=_deref_pbuc1_plus_vbuc2 lda #3 clc adc RASTER sta.z __4 - // [160] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 -- vbuz1_ge_vbuc1_then_la1 + // [171] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 -- vbuz1_ge_vbuc1_then_la1 lda.z plex_show_idx cmp #PLEX_COUNT bcs __b4 jmp __b7 // plex_irq::@7 __b7: - // [161] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3 -- vbuz1_lt_vbuz2_then_la1 + // [172] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3 -- vbuz1_lt_vbuz2_then_la1 lda.z plexFreeNextYpos1_return cmp.z __4 bcc __b3_from___b7 jmp __b4 // plex_irq::@4 __b4: - // [162] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 -- vbuz1_lt_vbuc1_then_la1 + // [173] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 -- vbuz1_lt_vbuc1_then_la1 lda.z plex_show_idx cmp #PLEX_COUNT bcc __b1 jmp __b5 // plex_irq::@5 __b5: - // [163] *((const nomodify byte*) RASTER) ← (byte) $28 -- _deref_pbuc1=vbuc2 + // [174] *((const nomodify byte*) RASTER) ← (byte) $28 -- _deref_pbuc1=vbuc2 // Reset the raster IRQ to the top of the screen lda #$28 sta RASTER - // [164] (volatile bool) framedone ← true -- vboz1=vboc1 + // [175] (volatile bool) frame_done ← true -- vboz1=vboc1 + // Signal that the IRQ is done showing sprites lda #1 - sta.z framedone + sta.z frame_done jmp __b2 // plex_irq::@2 __b2: - // [165] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [176] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER sta IRQ_STATUS @@ -4121,11 +4523,11 @@ plex_irq: { jmp __breturn // plex_irq::@return __breturn: - // [167] return - exit interrupt(KERNEL_MIN) + // [178] return - exit interrupt(KERNEL_MIN) jmp $ea81 // plex_irq::@1 __b1: - // [168] *((const nomodify byte*) RASTER) ← (byte) plex_irq::plexFreeNextYpos1_return#0 -- _deref_pbuc1=vbuz1 + // [179] *((const nomodify byte*) RASTER) ← (byte) plex_irq::plexFreeNextYpos1_return#0 -- _deref_pbuc1=vbuz1 // Set raster IRQ line to the next sprite Y-position lda.z plexFreeNextYpos1_return sta RASTER @@ -4135,133 +4537,133 @@ plex_irq: { // Show the next sprite. // plexSort() prepares showing the sprites plexShowSprite: { - .label __2 = $49 - .label __3 = $4a - .label __5 = $4c - .label __6 = $4d - .label __9 = $4b - .label __11 = $48 - .label plexFreeAdd1___0 = $44 - .label plexFreeAdd1___1 = $45 - .label plexFreeAdd1___2 = $46 - .label plex_sprite_idx2 = $42 - .label plexFreeAdd1_ypos = $43 - .label xpos_idx = $47 - // [169] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 -- vbuz1=vbuz2_rol_1 + .label __2 = $4f + .label __3 = $50 + .label __5 = $52 + .label __6 = $53 + .label __9 = $51 + .label __11 = $4e + .label plexFreeAdd1___0 = $4a + .label plexFreeAdd1___1 = $4b + .label plexFreeAdd1___2 = $4c + .label plex_sprite_idx2 = $48 + .label plexFreeAdd1_ypos = $49 + .label xpos_idx = $4d + // [180] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z plex_sprite_idx asl sta.z plex_sprite_idx2 - // [170] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) -- vbuz1=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) + // [181] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) -- vbuz1=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) ldx.z plex_show_idx ldy PLEX_SORTED_IDX,x ldx PLEX_YPOS,y stx.z plexFreeAdd1_ypos - // [171] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [182] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z plexFreeAdd1_ypos ldy.z plex_sprite_idx2 sta SPRITES_YPOS,y jmp plexFreeAdd1 // plexShowSprite::plexFreeAdd1 plexFreeAdd1: - // [172] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 -- vbuz1=vbuz2_plus_vbuc1 + // [183] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 -- vbuz1=vbuz2_plus_vbuc1 lax.z plexFreeAdd1_ypos axs #-[$15] stx.z plexFreeAdd1___0 - // [173] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [184] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z plexFreeAdd1___0 ldy.z plex_free_next sta PLEX_FREE_YPOS,y - // [174] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (volatile byte) plex_free_next + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [185] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (volatile byte) plex_free_next + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z plex_free_next iny sty.z plexFreeAdd1___1 - // [175] (byte~) plexShowSprite::plexFreeAdd1_$2 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + // [186] (byte~) plexShowSprite::plexFreeAdd1_$2 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 lda #7 and.z plexFreeAdd1___1 sta.z plexFreeAdd1___2 - // [176] (volatile byte) plex_free_next ← (byte~) plexShowSprite::plexFreeAdd1_$2 -- vbuz1=vbuz2 + // [187] (volatile byte) plex_free_next ← (byte~) plexShowSprite::plexFreeAdd1_$2 -- vbuz1=vbuz2 lda.z plexFreeAdd1___2 sta.z plex_free_next jmp __b5 // plexShowSprite::@5 __b5: - // [177] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz2) + // [188] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz2) ldx.z plex_show_idx ldy PLEX_SORTED_IDX,x lda PLEX_PTR,y ldx.z plex_sprite_idx sta PLEX_SCREEN_PTR,x - // [178] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) -- vbuz1=pbuc1_derefidx_vbuz2 + // [189] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z plex_show_idx lda PLEX_SORTED_IDX,y sta.z xpos_idx - // [179] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [190] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z xpos_idx asl sta.z __11 - // [180] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuz1=_lo_pwuc1_derefidx_vbuz2 + // [191] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuz1=_lo_pwuc1_derefidx_vbuz2 ldy.z __11 lda PLEX_XPOS,y sta.z __2 - // [181] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [192] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z __2 ldy.z plex_sprite_idx2 sta SPRITES_XPOS,y - // [182] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuz1=_hi_pwuc1_derefidx_vbuz2 + // [193] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuz1=_hi_pwuc1_derefidx_vbuz2 ldy.z __11 lda PLEX_XPOS+1,y sta.z __3 - // [183] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 -- vbuz1_neq_0_then_la1 + // [194] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 -- vbuz1_neq_0_then_la1 lda.z __3 cmp #0 bne __b1 jmp __b3 // plexShowSprite::@3 __b3: - // [184] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb -- vbuz1=vbuc1_bxor_vbuz2 + // [195] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb -- vbuz1=vbuc1_bxor_vbuz2 lda #$ff eor.z plex_sprite_msb sta.z __9 - // [185] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1 + // [196] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1 lda SPRITES_XMSB and.z __9 sta SPRITES_XMSB jmp __b2 // plexShowSprite::@2 __b2: - // [186] (byte~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [197] (byte~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z plex_sprite_idx iny sty.z __5 - // [187] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + // [198] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 lda #7 and.z __5 sta.z __6 - // [188] (volatile byte) plex_sprite_idx ← (byte~) plexShowSprite::$6 -- vbuz1=vbuz2 + // [199] (volatile byte) plex_sprite_idx ← (byte~) plexShowSprite::$6 -- vbuz1=vbuz2 lda.z __6 sta.z plex_sprite_idx - // [189] (volatile byte) plex_show_idx ← ++ (volatile byte) plex_show_idx -- vbuz1=_inc_vbuz1 + // [200] (volatile byte) plex_show_idx ← ++ (volatile byte) plex_show_idx -- vbuz1=_inc_vbuz1 inc.z plex_show_idx - // [190] (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (byte) 1 -- vbuz1=vbuz1_rol_1 + // [201] (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (byte) 1 -- vbuz1=vbuz1_rol_1 asl.z plex_sprite_msb - // [191] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1 + // [202] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1 lda.z plex_sprite_msb cmp #0 bne __breturn jmp __b4 // plexShowSprite::@4 __b4: - // [192] (volatile byte) plex_sprite_msb ← (byte) 1 -- vbuz1=vbuc1 + // [203] (volatile byte) plex_sprite_msb ← (byte) 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb jmp __breturn // plexShowSprite::@return __breturn: - // [193] return + // [204] return rts // plexShowSprite::@1 __b1: - // [194] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + // [205] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 lda SPRITES_XMSB ora.z plex_sprite_msb sta SPRITES_XMSB @@ -4278,282 +4680,321 @@ plexShowSprite: { PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 // Contains the Y-position where each sprite is free again. PLEX_FREE_YPOS[s] holds the Y-position where sprite s is free to use again. PLEX_FREE_YPOS: .fill 8, 0 - //kickasm(pc FONT, resource "elefont.bin") {{ + //char FONT[0x0800] = kickasm(resource "elefont.bin") {{ // .import binary "elefont.bin" - //}} + //}}; + FONT: .fill $800, 0 .align $100 YSIN: .fill $100, round(142+89.5*sin(toRadians(360*i/256))) + .align $100 +XMOVEMENT: +.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100))) + + // The scroll text + SCROLL_TEXT: .text "camelot presents a spanking new contribution to the always hungry c64 scene. in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. " + .byte 0 REGISTER UPLIFT POTENTIAL REGISTERS Statement [1] (volatile byte) plex_show_idx ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] (volatile byte) plex_sprite_idx ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [3] (volatile byte) plex_sprite_msb ← (byte) 1 [ ] ( [ ] { } ) always clobbers reg byte a Statement [4] (volatile byte) plex_free_next ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [5] (volatile bool) framedone ← false [ framedone ] ( [ framedone ] { } ) always clobbers reg byte a -Statement [10] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM [ framedone ] ( main:7 [ framedone ] { } ) always clobbers reg byte a -Statement [12] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO [ framedone ] ( main:7 [ framedone ] { } ) always clobbers reg byte a -Statement [18] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ framedone ] ( main:7 [ framedone ] { } ) always clobbers reg byte a -Statement [23] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1 [ framedone main::s#2 main::xp#2 main::sprite#1 main::$12 ] ( main:7 [ framedone main::s#2 main::xp#2 main::sprite#1 main::$12 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::s#2 main::s#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::sprite#2 main::sprite#1 ] -Statement [24] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word) main::xp#2 [ framedone main::s#2 main::xp#2 main::sprite#1 ] ( main:7 [ framedone main::s#2 main::xp#2 main::sprite#1 ] { } ) always clobbers reg byte a -Statement [25] (word) main::xp#1 ← (word) main::xp#2 + (byte) $a [ framedone main::s#2 main::sprite#1 main::xp#1 ] ( main:7 [ framedone main::s#2 main::sprite#1 main::xp#1 ] { } ) always clobbers reg byte a -Statement [28] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ framedone ] ( main:7 [ framedone ] { } ) always clobbers reg byte a -Statement [30] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE [ framedone main::s1#2 ] ( main:7 [ framedone main::s1#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::s1#2 main::s1#1 ] -Statement [38] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:10 [ sin_idx#10 sin_idx#12 ] -Statement [39] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [40] *((const nomodify byte*) RASTER) ← (byte) $28 [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [41] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [42] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [43] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [45] if((volatile bool) framedone) goto main::@6 [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [50] (volatile bool) framedone ← false [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [58] *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::s#3) ← *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:7::plexSort:36 [ framedone sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:7::plexSort:49 [ sin_idx#12 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]:7 [ plexSort::m#2 plexSort::m#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:47 [ plexSort::nxt_idx#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:48 [ plexSort::nxt_y#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:8 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] -Statement [61] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:7::plexSort:36 [ framedone sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } main:7::plexSort:49 [ sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } ) always clobbers reg byte a -Statement [63] *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:7::plexSort:36 [ framedone sin_idx#12 plexSort::m#2 ] { } main:7::plexSort:49 [ sin_idx#12 plexSort::m#2 ] { } ) always clobbers reg byte a -Statement [66] (volatile byte) plex_show_idx ← (byte) 0 [ ] ( main:7::plexSort:36 [ framedone sin_idx#12 ] { } main:7::plexSort:49 [ sin_idx#12 ] { } ) always clobbers reg byte a -Statement [67] (volatile byte) plex_sprite_idx ← (byte) 0 [ ] ( main:7::plexSort:36 [ framedone sin_idx#12 ] { } main:7::plexSort:49 [ sin_idx#12 ] { } ) always clobbers reg byte a -Statement [68] (volatile byte) plex_sprite_msb ← (byte) 1 [ ] ( main:7::plexSort:36 [ framedone sin_idx#12 ] { } main:7::plexSort:49 [ sin_idx#12 ] { } ) always clobbers reg byte a -Statement [71] *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 [ plexSort::plexFreePrepare1_s#2 ] ( main:7::plexSort:36 [ framedone sin_idx#12 plexSort::plexFreePrepare1_s#2 ] { } main:7::plexSort:49 [ sin_idx#12 plexSort::plexFreePrepare1_s#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:9 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] -Statement [74] (volatile byte) plex_free_next ← (byte) 0 [ ] ( main:7::plexSort:36 [ framedone sin_idx#12 ] { } main:7::plexSort:49 [ sin_idx#12 ] { } ) always clobbers reg byte a -Statement [79] *((const byte*) PLEX_YPOS + (byte) plexSine::sy#2) ← *((const byte*) YSIN + (byte) plexSine::y_idx#2) [ sin_idx#10 plexSine::y_idx#2 plexSine::sy#2 ] ( main:7::plexSine:34 [ framedone sin_idx#10 plexSine::y_idx#2 plexSine::sy#2 ] { } main:7::plexSine:47 [ sin_idx#10 plexSine::y_idx#2 plexSine::sy#2 ] { { sin_idx#10 = sin_idx#12 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:11 [ plexSine::y_idx#2 plexSine::y_idx#0 plexSine::y_idx#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:12 [ plexSine::sy#2 plexSine::sy#1 ] -Statement [80] (byte) plexSine::y_idx#1 ← (byte) plexSine::y_idx#2 + (byte) 8 [ sin_idx#10 plexSine::sy#2 plexSine::y_idx#1 ] ( main:7::plexSine:34 [ framedone sin_idx#10 plexSine::sy#2 plexSine::y_idx#1 ] { } main:7::plexSine:47 [ sin_idx#10 plexSine::sy#2 plexSine::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } } ) always clobbers reg byte a -Statement [96] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 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:7::font_2x2_to_sprites:14 [ framedone 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 [6] (volatile bool) frame_done ← false [ frame_done ] ( [ frame_done ] { } ) always clobbers reg byte a +Statement [11] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a +Statement [13] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a +Statement [19] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a +Statement [22] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a +Statement [24] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE [ frame_done main::s1#2 ] ( main:8 [ frame_done main::s1#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::s1#2 main::s1#1 ] +Statement [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:8 [ sin_idx#10 sin_idx#12 ] +Statement [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [34] *((const nomodify byte*) RASTER) ← (byte) $28 [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [35] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [36] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [37] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [39] if((volatile bool) frame_done) goto main::@7 [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [40] (volatile bool) frame_done ← false [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [46] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1 [ frame_done main::s#2 main::x#2 main::$12 ] ( main:8 [ frame_done main::s#2 main::x#2 main::$12 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::s#2 main::s#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::x#2 main::x#1 ] +Statement [47] (word~) main::$13 ← *((const nomodify byte*) XMOVEMENT_HI + (byte) main::x#2) w= *((const byte*) XMOVEMENT + (byte) main::x#2) [ frame_done main::s#2 main::x#2 main::$12 main::$13 ] ( main:8 [ frame_done main::s#2 main::x#2 main::$12 main::$13 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:47 [ main::$12 ] +Statement [48] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word~) main::$13 [ frame_done main::s#2 main::x#2 ] ( main:8 [ frame_done main::s#2 main::x#2 ] { } ) always clobbers reg byte a +Statement [49] (byte) main::x#1 ← (byte) main::x#2 + (byte) 8 [ frame_done main::s#2 main::x#1 ] ( main:8 [ frame_done main::s#2 main::x#1 ] { } ) always clobbers reg byte a +Statement [58] *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::s#3) ← *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 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]:5 [ plexSort::m#2 plexSort::m#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:50 [ plexSort::nxt_idx#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:51 [ plexSort::nxt_y#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:6 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +Statement [61] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } ) always clobbers reg byte a +Statement [63] *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 ] { } ) always clobbers reg byte a +Statement [66] (volatile byte) plex_show_idx ← (byte) 0 [ ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [67] (volatile byte) plex_sprite_idx ← (byte) 0 [ ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [68] (volatile byte) plex_sprite_msb ← (byte) 1 [ ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [71] *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 [ plexSort::plexFreePrepare1_s#2 ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::plexFreePrepare1_s#2 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::plexFreePrepare1_s#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:7 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] +Statement [74] (volatile byte) plex_free_next ← (byte) 0 [ ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [79] *((const byte*) PLEX_YPOS + (byte) plex_move::s#2) ← *((const byte*) YSIN + (byte) plex_move::y_idx#2) [ sin_idx#10 plex_move::y_idx#2 plex_move::s#2 scroll_text_next#11 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::y_idx#2 plex_move::s#2 scroll_text_next#11 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::y_idx#2 plex_move::s#2 scroll_text_next#11 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:9 [ 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]:10 [ plex_move::s#2 plex_move::s#1 ] +Statement [80] (byte) plex_move::y_idx#1 ← (byte) plex_move::y_idx#2 + (byte) 8 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [81] (byte~) plex_move::$6 ← (byte) plex_move::s#2 << (byte) 1 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$6 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$6 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$6 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [82] if(*((const word*) PLEX_XPOS + (byte~) plex_move::$6)!=(byte) 0) goto plex_move::@2 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [83] (byte~) plex_move::$7 ← (byte) plex_move::s#2 << (byte) 1 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$7 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$7 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$7 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [84] *((const word*) PLEX_XPOS + (byte~) plex_move::$7) ← (word)(number) $b*(number) $20 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [85] if(*((byte*) scroll_text_next#11)!=(byte) 0) goto plex_move::@6 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:8 [ sin_idx#10 sin_idx#12 ] +Removing always clobbered register reg byte y as potential for zp[1]:10 [ plex_move::s#2 plex_move::s#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:9 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] +Statement [88] (byte~) plex_move::$4 ← (const byte) toSpritePtr1_return#0 + *((byte*) scroll_text_next#12) [ sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 plex_move::$4 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 plex_move::$4 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 plex_move::$4 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a reg byte y +Statement [107] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 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:15 [ 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]:14 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] -Statement [97] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) 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:7::font_2x2_to_sprites:14 [ framedone 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 [100] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) 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:7::font_2x2_to_sprites:14 [ framedone 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 [108] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) 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:15 [ 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 [111] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) 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:15 [ 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]:19 [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] Removing always clobbered register reg byte a as potential for zp[1]:22 [ 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]:50 [ font_2x2_to_sprites::$3 ] -Statement [102] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) 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:7::font_2x2_to_sprites:14 [ framedone 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]:51 [ font_2x2_to_sprites::sprite_idx#1 ] -Statement [104] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 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:7::font_2x2_to_sprites:14 [ framedone 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]:52 [ font_2x2_to_sprites::sprite_idx#2 ] -Statement [112] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] ( main:7::font_2x2_to_sprites:14 [ framedone 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 [113] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] ( main:7::font_2x2_to_sprites:14 [ framedone 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 [115] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 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:7::font_2x2_to_sprites:14 [ framedone 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 [116] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 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:7::font_2x2_to_sprites:14 [ framedone 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 [119] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] ( main:7::font_2x2:11 [ framedone 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]:56 [ font_2x2_to_sprites::$3 ] +Statement [113] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) 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:15 [ 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]:57 [ font_2x2_to_sprites::sprite_idx#1 ] +Statement [115] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 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:15 [ 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]:58 [ font_2x2_to_sprites::sprite_idx#2 ] +Statement [123] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 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:15 [ 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 [124] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $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:15 [ 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 [126] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 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:15 [ 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 [127] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 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:15 [ 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 [130] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 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:12 [ 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]:29 [ font_2x2::c#11 font_2x2::c#1 ] -Statement [120] (byte*) font_2x2::next_2x2_left#10 ← (byte*) 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:7::font_2x2:11 [ framedone 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 [122] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) 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:7::font_2x2:11 [ framedone 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 [131] (byte*) font_2x2::next_2x2_left#10 ← (byte*) 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:12 [ 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 [133] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) 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:12 [ 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]:30 [ font_2x2::l#2 font_2x2::l#1 ] Removing always clobbered register reg byte a as potential for zp[1]:33 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] -Statement [128] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 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:7::font_2x2:11 [ framedone 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 [139] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 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:12 [ 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]:36 [ 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]:39 [ font_2x2::b#2 font_2x2::b#1 ] Removing always clobbered register reg byte a as potential for zp[1]:40 [ font_2x2::glyph_bit#0 ] -Statement [129] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) 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:7::font_2x2:11 [ framedone 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 [130] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 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:7::font_2x2:11 [ framedone 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 [131] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) 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:7::font_2x2:11 [ framedone 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 [145] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 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:7::font_2x2:11 [ framedone 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 [146] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 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:7::font_2x2:11 [ framedone 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 [150] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:7::font_2x2:11 [ framedone font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a -Statement [151] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:7::font_2x2:11 [ framedone font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a -Statement [158] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y -Statement [159] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ 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]:64 [ plex_irq::plexFreeNextYpos1_return#0 ] -Statement [160] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ 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]:65 [ plex_irq::$4 ] -Statement [162] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 [ plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte a -Statement [163] *((const nomodify byte*) RASTER) ← (byte) $28 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [164] (volatile bool) framedone ← true [ ] ( [ ] { } ) always clobbers reg byte a -Statement [165] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a -Statement [169] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a -Statement [170] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte x reg byte y -Removing always clobbered register reg byte x as potential for zp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] -Statement [173] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte y -Statement [177] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:157 [ 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]:66 [ plexShowSprite::plex_sprite_idx2#0 ] -Statement [178] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:157 [ 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 [179] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:157 [ 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 [180] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:157 [ 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]:72 [ plexShowSprite::$11 ] -Statement [181] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:157 [ 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]:72 [ plexShowSprite::$11 ] -Statement [182] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [184] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [185] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [191] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [192] (volatile byte) plex_sprite_msb ← (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [194] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [140] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) 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:12 [ 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 [141] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 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:12 [ 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 [142] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) 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:12 [ 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 [156] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 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:12 [ 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 [157] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 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:12 [ 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 [161] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:8::font_2x2:12 [ frame_done font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a +Statement [162] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:8::font_2x2:12 [ frame_done font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a +Statement [169] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y +Statement [170] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ 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]:70 [ plex_irq::plexFreeNextYpos1_return#0 ] +Statement [171] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ 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]:71 [ plex_irq::$4 ] +Statement [173] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 [ plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte a +Statement [174] *((const nomodify byte*) RASTER) ← (byte) $28 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [175] (volatile bool) frame_done ← true [ ] ( [ ] { } ) always clobbers reg byte a +Statement [176] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a +Statement [180] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a +Statement [181] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte x reg byte y +Removing always clobbered register reg byte x as potential for zp[1]:72 [ plexShowSprite::plex_sprite_idx2#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:72 [ plexShowSprite::plex_sprite_idx2#0 ] +Statement [184] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte y +Statement [188] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:168 [ 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]:72 [ plexShowSprite::plex_sprite_idx2#0 ] +Statement [189] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:168 [ 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 [190] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:168 [ 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 [191] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:168 [ 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]:78 [ plexShowSprite::$11 ] +Statement [192] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:168 [ 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]:78 [ plexShowSprite::$11 ] +Statement [193] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [195] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [196] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [202] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [203] (volatile byte) plex_sprite_msb ← (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [205] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a Statement [1] (volatile byte) plex_show_idx ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] (volatile byte) plex_sprite_idx ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [3] (volatile byte) plex_sprite_msb ← (byte) 1 [ ] ( [ ] { } ) always clobbers reg byte a Statement [4] (volatile byte) plex_free_next ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [5] (volatile bool) framedone ← false [ framedone ] ( [ framedone ] { } ) always clobbers reg byte a -Statement [10] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM [ framedone ] ( main:7 [ framedone ] { } ) always clobbers reg byte a -Statement [12] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO [ framedone ] ( main:7 [ framedone ] { } ) always clobbers reg byte a -Statement [18] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ framedone ] ( main:7 [ framedone ] { } ) always clobbers reg byte a -Statement [21] *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte) main::sprite#2 [ framedone main::sprite#2 main::s#2 main::xp#2 ] ( main:7 [ framedone main::sprite#2 main::s#2 main::xp#2 ] { } ) always clobbers reg byte a -Statement [23] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1 [ framedone main::s#2 main::xp#2 main::sprite#1 main::$12 ] ( main:7 [ framedone main::s#2 main::xp#2 main::sprite#1 main::$12 ] { } ) always clobbers reg byte a -Statement [24] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word) main::xp#2 [ framedone main::s#2 main::xp#2 main::sprite#1 ] ( main:7 [ framedone main::s#2 main::xp#2 main::sprite#1 ] { } ) always clobbers reg byte a -Statement [25] (word) main::xp#1 ← (word) main::xp#2 + (byte) $a [ framedone main::s#2 main::sprite#1 main::xp#1 ] ( main:7 [ framedone main::s#2 main::sprite#1 main::xp#1 ] { } ) always clobbers reg byte a -Statement [28] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ framedone ] ( main:7 [ framedone ] { } ) always clobbers reg byte a -Statement [30] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE [ framedone main::s1#2 ] ( main:7 [ framedone main::s1#2 ] { } ) always clobbers reg byte a -Statement [38] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [39] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [40] *((const nomodify byte*) RASTER) ← (byte) $28 [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [41] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [42] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [43] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [45] if((volatile bool) framedone) goto main::@6 [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [50] (volatile bool) framedone ← false [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [55] if((byte) plexSort::nxt_y#0>=*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2))) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:7::plexSort:36 [ framedone sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } main:7::plexSort:49 [ sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a -Statement [58] *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::s#3) ← *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:7::plexSort:36 [ framedone sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:7::plexSort:49 [ sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a -Statement [61] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:7::plexSort:36 [ framedone sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } main:7::plexSort:49 [ sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } ) always clobbers reg byte a -Statement [63] *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:7::plexSort:36 [ framedone sin_idx#12 plexSort::m#2 ] { } main:7::plexSort:49 [ sin_idx#12 plexSort::m#2 ] { } ) always clobbers reg byte a -Statement [66] (volatile byte) plex_show_idx ← (byte) 0 [ ] ( main:7::plexSort:36 [ framedone sin_idx#12 ] { } main:7::plexSort:49 [ sin_idx#12 ] { } ) always clobbers reg byte a -Statement [67] (volatile byte) plex_sprite_idx ← (byte) 0 [ ] ( main:7::plexSort:36 [ framedone sin_idx#12 ] { } main:7::plexSort:49 [ sin_idx#12 ] { } ) always clobbers reg byte a -Statement [68] (volatile byte) plex_sprite_msb ← (byte) 1 [ ] ( main:7::plexSort:36 [ framedone sin_idx#12 ] { } main:7::plexSort:49 [ sin_idx#12 ] { } ) always clobbers reg byte a -Statement [71] *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 [ plexSort::plexFreePrepare1_s#2 ] ( main:7::plexSort:36 [ framedone sin_idx#12 plexSort::plexFreePrepare1_s#2 ] { } main:7::plexSort:49 [ sin_idx#12 plexSort::plexFreePrepare1_s#2 ] { } ) always clobbers reg byte a -Statement [74] (volatile byte) plex_free_next ← (byte) 0 [ ] ( main:7::plexSort:36 [ framedone sin_idx#12 ] { } main:7::plexSort:49 [ sin_idx#12 ] { } ) always clobbers reg byte a -Statement [79] *((const byte*) PLEX_YPOS + (byte) plexSine::sy#2) ← *((const byte*) YSIN + (byte) plexSine::y_idx#2) [ sin_idx#10 plexSine::y_idx#2 plexSine::sy#2 ] ( main:7::plexSine:34 [ framedone sin_idx#10 plexSine::y_idx#2 plexSine::sy#2 ] { } main:7::plexSine:47 [ sin_idx#10 plexSine::y_idx#2 plexSine::sy#2 ] { { sin_idx#10 = sin_idx#12 } } ) always clobbers reg byte a -Statement [80] (byte) plexSine::y_idx#1 ← (byte) plexSine::y_idx#2 + (byte) 8 [ sin_idx#10 plexSine::sy#2 plexSine::y_idx#1 ] ( main:7::plexSine:34 [ framedone sin_idx#10 plexSine::sy#2 plexSine::y_idx#1 ] { } main:7::plexSine:47 [ sin_idx#10 plexSine::sy#2 plexSine::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } } ) always clobbers reg byte a -Statement [96] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 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:7::font_2x2_to_sprites:14 [ framedone 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 [97] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) 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:7::font_2x2_to_sprites:14 [ framedone 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 [99] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 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:7::font_2x2_to_sprites:14 [ framedone 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 [100] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) 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:7::font_2x2_to_sprites:14 [ framedone 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 [102] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) 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:7::font_2x2_to_sprites:14 [ framedone 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 [104] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 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:7::font_2x2_to_sprites:14 [ framedone 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 [112] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] ( main:7::font_2x2_to_sprites:14 [ framedone 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 [113] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] ( main:7::font_2x2_to_sprites:14 [ framedone 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 [115] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 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:7::font_2x2_to_sprites:14 [ framedone 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 [116] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 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:7::font_2x2_to_sprites:14 [ framedone 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 [119] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] ( main:7::font_2x2:11 [ framedone 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 [120] (byte*) font_2x2::next_2x2_left#10 ← (byte*) 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:7::font_2x2:11 [ framedone 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 [122] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) 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:7::font_2x2:11 [ framedone 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 [124] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $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:7::font_2x2:11 [ framedone 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 [128] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 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:7::font_2x2:11 [ framedone 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 [129] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) 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:7::font_2x2:11 [ framedone 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 [130] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 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:7::font_2x2:11 [ framedone 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 [131] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) 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:7::font_2x2:11 [ framedone 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 [145] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 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:7::font_2x2:11 [ framedone 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 [146] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 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:7::font_2x2:11 [ framedone 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 [150] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:7::font_2x2:11 [ framedone font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a -Statement [151] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:7::font_2x2:11 [ framedone font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a -Statement [158] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y -Statement [159] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ 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 [160] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ 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 [162] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 [ plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte a -Statement [163] *((const nomodify byte*) RASTER) ← (byte) $28 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [164] (volatile bool) framedone ← true [ ] ( [ ] { } ) always clobbers reg byte a -Statement [165] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a -Statement [169] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a -Statement [170] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte x reg byte y -Statement [171] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:67 [ plexShowSprite::plexFreeAdd1_ypos#0 ] -Statement [173] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte y -Statement [177] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:157 [ 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 [178] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:157 [ 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 [179] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:157 [ 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 [180] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:157 [ 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 [181] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] { } ) always clobbers reg byte y -Statement [182] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [184] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [185] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [191] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [192] (volatile byte) plex_sprite_msb ← (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [194] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [6] (volatile bool) frame_done ← false [ frame_done ] ( [ frame_done ] { } ) always clobbers reg byte a +Statement [11] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a +Statement [13] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a +Statement [19] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a +Statement [22] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a +Statement [24] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE [ frame_done main::s1#2 ] ( main:8 [ frame_done main::s1#2 ] { } ) always clobbers reg byte a +Statement [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [34] *((const nomodify byte*) RASTER) ← (byte) $28 [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [35] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [36] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [37] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [39] if((volatile bool) frame_done) goto main::@7 [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [40] (volatile bool) frame_done ← false [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [44] (byte~) main::$7 ← (const byte) toSpritePtr1_return#0 + (byte) main::s#2 [ frame_done main::s#2 main::x#2 main::$7 ] ( main:8 [ frame_done main::s#2 main::x#2 main::$7 ] { } ) always clobbers reg byte a +Statement [46] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1 [ frame_done main::s#2 main::x#2 main::$12 ] ( main:8 [ frame_done main::s#2 main::x#2 main::$12 ] { } ) always clobbers reg byte a +Statement [47] (word~) main::$13 ← *((const nomodify byte*) XMOVEMENT_HI + (byte) main::x#2) w= *((const byte*) XMOVEMENT + (byte) main::x#2) [ frame_done main::s#2 main::x#2 main::$12 main::$13 ] ( main:8 [ frame_done main::s#2 main::x#2 main::$12 main::$13 ] { } ) always clobbers reg byte a +Statement [48] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word~) main::$13 [ frame_done main::s#2 main::x#2 ] ( main:8 [ frame_done main::s#2 main::x#2 ] { } ) always clobbers reg byte a +Statement [49] (byte) main::x#1 ← (byte) main::x#2 + (byte) 8 [ frame_done main::s#2 main::x#1 ] ( main:8 [ frame_done main::s#2 main::x#1 ] { } ) always clobbers reg byte a +Statement [55] if((byte) plexSort::nxt_y#0>=*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2))) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a +Statement [58] *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::s#3) ← *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a +Statement [61] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } ) always clobbers reg byte a +Statement [63] *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 ] { } ) always clobbers reg byte a +Statement [66] (volatile byte) plex_show_idx ← (byte) 0 [ ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [67] (volatile byte) plex_sprite_idx ← (byte) 0 [ ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [68] (volatile byte) plex_sprite_msb ← (byte) 1 [ ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [71] *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 [ plexSort::plexFreePrepare1_s#2 ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::plexFreePrepare1_s#2 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::plexFreePrepare1_s#2 ] { } ) always clobbers reg byte a +Statement [74] (volatile byte) plex_free_next ← (byte) 0 [ ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [79] *((const byte*) PLEX_YPOS + (byte) plex_move::s#2) ← *((const byte*) YSIN + (byte) plex_move::y_idx#2) [ sin_idx#10 plex_move::y_idx#2 plex_move::s#2 scroll_text_next#11 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::y_idx#2 plex_move::s#2 scroll_text_next#11 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::y_idx#2 plex_move::s#2 scroll_text_next#11 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [80] (byte) plex_move::y_idx#1 ← (byte) plex_move::y_idx#2 + (byte) 8 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte x as potential for zp[1]:8 [ sin_idx#10 sin_idx#12 ] +Removing always clobbered register reg byte x as potential for zp[1]:10 [ plex_move::s#2 plex_move::s#1 ] +Statement [81] (byte~) plex_move::$6 ← (byte) plex_move::s#2 << (byte) 1 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$6 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$6 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$6 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [82] if(*((const word*) PLEX_XPOS + (byte~) plex_move::$6)!=(byte) 0) goto plex_move::@2 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [83] (byte~) plex_move::$7 ← (byte) plex_move::s#2 << (byte) 1 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$7 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$7 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$7 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [84] *((const word*) PLEX_XPOS + (byte~) plex_move::$7) ← (word)(number) $b*(number) $20 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [85] if(*((byte*) scroll_text_next#11)!=(byte) 0) goto plex_move::@6 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a reg byte y +Statement [88] (byte~) plex_move::$4 ← (const byte) toSpritePtr1_return#0 + *((byte*) scroll_text_next#12) [ sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 plex_move::$4 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 plex_move::$4 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 plex_move::$4 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a reg byte y +Statement [89] *((const byte*) PLEX_PTR + (byte) plex_move::s#2) ← (byte~) plex_move::$4 [ sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte y +Statement [93] if((byte) plex_move::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plex_move::@1 [ sin_idx#10 scroll_text_next#13 plex_move::y_idx#1 plex_move::s#1 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 scroll_text_next#13 plex_move::y_idx#1 plex_move::s#1 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 scroll_text_next#13 plex_move::y_idx#1 plex_move::s#1 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [107] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 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:15 [ 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 [108] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) 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:15 [ 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 [110] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 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:15 [ 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 [111] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) 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:15 [ 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 [113] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) 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:15 [ 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 [115] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 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:15 [ 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 [123] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 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:15 [ 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 [124] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $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:15 [ 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 [126] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 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:15 [ 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 [127] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 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:15 [ 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 [130] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 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:12 [ 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 [131] (byte*) font_2x2::next_2x2_left#10 ← (byte*) 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:12 [ 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 [133] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) 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:12 [ 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 [135] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $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:12 [ 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 [139] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 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:12 [ 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 [140] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) 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:12 [ 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 [141] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 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:12 [ 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 [142] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) 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:12 [ 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 [156] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 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:12 [ 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 [157] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 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:12 [ 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 [161] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:8::font_2x2:12 [ frame_done font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a +Statement [162] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:8::font_2x2:12 [ frame_done font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a +Statement [169] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y +Statement [170] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ 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 [171] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ 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 [173] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 [ plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte a +Statement [174] *((const nomodify byte*) RASTER) ← (byte) $28 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [175] (volatile bool) frame_done ← true [ ] ( [ ] { } ) always clobbers reg byte a +Statement [176] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a +Statement [180] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a +Statement [181] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte x reg byte y +Statement [182] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:73 [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Statement [184] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte y +Statement [188] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:168 [ 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 [189] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:168 [ 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 [190] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:168 [ 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 [191] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:168 [ 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 [192] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] { } ) always clobbers reg byte y +Statement [193] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [195] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [196] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [202] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [203] (volatile byte) plex_sprite_msb ← (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [205] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a Statement [1] (volatile byte) plex_show_idx ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] (volatile byte) plex_sprite_idx ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [3] (volatile byte) plex_sprite_msb ← (byte) 1 [ ] ( [ ] { } ) always clobbers reg byte a Statement [4] (volatile byte) plex_free_next ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [5] (volatile bool) framedone ← false [ framedone ] ( [ framedone ] { } ) always clobbers reg byte a -Statement [10] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM [ framedone ] ( main:7 [ framedone ] { } ) always clobbers reg byte a -Statement [12] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO [ framedone ] ( main:7 [ framedone ] { } ) always clobbers reg byte a -Statement [18] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ framedone ] ( main:7 [ framedone ] { } ) always clobbers reg byte a -Statement [21] *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte) main::sprite#2 [ framedone main::sprite#2 main::s#2 main::xp#2 ] ( main:7 [ framedone main::sprite#2 main::s#2 main::xp#2 ] { } ) always clobbers reg byte a -Statement [23] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1 [ framedone main::s#2 main::xp#2 main::sprite#1 main::$12 ] ( main:7 [ framedone main::s#2 main::xp#2 main::sprite#1 main::$12 ] { } ) always clobbers reg byte a -Statement [24] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word) main::xp#2 [ framedone main::s#2 main::xp#2 main::sprite#1 ] ( main:7 [ framedone main::s#2 main::xp#2 main::sprite#1 ] { } ) always clobbers reg byte a -Statement [25] (word) main::xp#1 ← (word) main::xp#2 + (byte) $a [ framedone main::s#2 main::sprite#1 main::xp#1 ] ( main:7 [ framedone main::s#2 main::sprite#1 main::xp#1 ] { } ) always clobbers reg byte a -Statement [28] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ framedone ] ( main:7 [ framedone ] { } ) always clobbers reg byte a -Statement [30] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE [ framedone main::s1#2 ] ( main:7 [ framedone main::s1#2 ] { } ) always clobbers reg byte a -Statement [38] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [39] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [40] *((const nomodify byte*) RASTER) ← (byte) $28 [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [41] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [42] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [43] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [45] if((volatile bool) framedone) goto main::@6 [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [50] (volatile bool) framedone ← false [ framedone sin_idx#12 ] ( main:7 [ framedone sin_idx#12 ] { } ) always clobbers reg byte a -Statement [55] if((byte) plexSort::nxt_y#0>=*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2))) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:7::plexSort:36 [ framedone sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } main:7::plexSort:49 [ sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a -Statement [58] *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::s#3) ← *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:7::plexSort:36 [ framedone sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:7::plexSort:49 [ sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a -Statement [61] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:7::plexSort:36 [ framedone sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } main:7::plexSort:49 [ sin_idx#12 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } ) always clobbers reg byte a -Statement [63] *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:7::plexSort:36 [ framedone sin_idx#12 plexSort::m#2 ] { } main:7::plexSort:49 [ sin_idx#12 plexSort::m#2 ] { } ) always clobbers reg byte a -Statement [66] (volatile byte) plex_show_idx ← (byte) 0 [ ] ( main:7::plexSort:36 [ framedone sin_idx#12 ] { } main:7::plexSort:49 [ sin_idx#12 ] { } ) always clobbers reg byte a -Statement [67] (volatile byte) plex_sprite_idx ← (byte) 0 [ ] ( main:7::plexSort:36 [ framedone sin_idx#12 ] { } main:7::plexSort:49 [ sin_idx#12 ] { } ) always clobbers reg byte a -Statement [68] (volatile byte) plex_sprite_msb ← (byte) 1 [ ] ( main:7::plexSort:36 [ framedone sin_idx#12 ] { } main:7::plexSort:49 [ sin_idx#12 ] { } ) always clobbers reg byte a -Statement [71] *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 [ plexSort::plexFreePrepare1_s#2 ] ( main:7::plexSort:36 [ framedone sin_idx#12 plexSort::plexFreePrepare1_s#2 ] { } main:7::plexSort:49 [ sin_idx#12 plexSort::plexFreePrepare1_s#2 ] { } ) always clobbers reg byte a -Statement [74] (volatile byte) plex_free_next ← (byte) 0 [ ] ( main:7::plexSort:36 [ framedone sin_idx#12 ] { } main:7::plexSort:49 [ sin_idx#12 ] { } ) always clobbers reg byte a -Statement [79] *((const byte*) PLEX_YPOS + (byte) plexSine::sy#2) ← *((const byte*) YSIN + (byte) plexSine::y_idx#2) [ sin_idx#10 plexSine::y_idx#2 plexSine::sy#2 ] ( main:7::plexSine:34 [ framedone sin_idx#10 plexSine::y_idx#2 plexSine::sy#2 ] { } main:7::plexSine:47 [ sin_idx#10 plexSine::y_idx#2 plexSine::sy#2 ] { { sin_idx#10 = sin_idx#12 } } ) always clobbers reg byte a -Statement [80] (byte) plexSine::y_idx#1 ← (byte) plexSine::y_idx#2 + (byte) 8 [ sin_idx#10 plexSine::sy#2 plexSine::y_idx#1 ] ( main:7::plexSine:34 [ framedone sin_idx#10 plexSine::sy#2 plexSine::y_idx#1 ] { } main:7::plexSine:47 [ sin_idx#10 plexSine::sy#2 plexSine::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } } ) always clobbers reg byte a -Statement [96] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 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:7::font_2x2_to_sprites:14 [ framedone 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 [97] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) 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:7::font_2x2_to_sprites:14 [ framedone 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 [99] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 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:7::font_2x2_to_sprites:14 [ framedone 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 [100] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) 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:7::font_2x2_to_sprites:14 [ framedone 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 [102] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) 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:7::font_2x2_to_sprites:14 [ framedone 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 [104] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 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:7::font_2x2_to_sprites:14 [ framedone 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 [112] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] ( main:7::font_2x2_to_sprites:14 [ framedone 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 [113] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] ( main:7::font_2x2_to_sprites:14 [ framedone 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 [115] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 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:7::font_2x2_to_sprites:14 [ framedone 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 [116] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 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:7::font_2x2_to_sprites:14 [ framedone 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 [119] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] ( main:7::font_2x2:11 [ framedone 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 [120] (byte*) font_2x2::next_2x2_left#10 ← (byte*) 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:7::font_2x2:11 [ framedone 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 [122] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) 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:7::font_2x2:11 [ framedone 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 [124] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $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:7::font_2x2:11 [ framedone 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 [128] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 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:7::font_2x2:11 [ framedone 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 [129] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) 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:7::font_2x2:11 [ framedone 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 [130] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 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:7::font_2x2:11 [ framedone 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 [131] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) 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:7::font_2x2:11 [ framedone 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 [145] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 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:7::font_2x2:11 [ framedone 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 [146] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 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:7::font_2x2:11 [ framedone 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 [150] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:7::font_2x2:11 [ framedone font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a -Statement [151] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:7::font_2x2:11 [ framedone font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a -Statement [158] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y -Statement [159] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ 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 [160] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ 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 [162] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 [ plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte a -Statement [163] *((const nomodify byte*) RASTER) ← (byte) $28 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [164] (volatile bool) framedone ← true [ ] ( [ ] { } ) always clobbers reg byte a -Statement [165] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a -Statement [169] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a -Statement [170] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte x reg byte y -Statement [171] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte y -Statement [173] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte y -Statement [177] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:157 [ 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 [178] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:157 [ 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 [179] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:157 [ 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 [180] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:157 [ 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 [181] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] { } ) always clobbers reg byte y -Statement [182] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a -Statement [184] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a -Statement [185] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [191] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [192] (volatile byte) plex_sprite_msb ← (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Statement [194] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:157 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a -Potential registers zp[1]:2 [ main::sprite#2 main::sprite#1 ] : zp[1]:2 , reg byte x , reg byte y , -Potential registers zp[1]:3 [ main::s#2 main::s#1 ] : zp[1]:3 , reg byte x , reg byte y , -Potential registers zp[2]:4 [ main::xp#2 main::xp#1 ] : zp[2]:4 , -Potential registers zp[1]:6 [ main::s1#2 main::s1#1 ] : zp[1]:6 , reg byte x , reg byte y , -Potential registers zp[1]:7 [ plexSort::m#2 plexSort::m#1 ] : zp[1]:7 , reg byte x , reg byte y , -Potential registers zp[1]:8 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] : zp[1]:8 , reg byte x , reg byte y , -Potential registers zp[1]:9 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] : zp[1]:9 , reg byte x , reg byte y , -Potential registers zp[1]:10 [ sin_idx#10 sin_idx#12 ] : zp[1]:10 , reg byte x , reg byte y , -Potential registers zp[1]:11 [ plexSine::y_idx#2 plexSine::y_idx#0 plexSine::y_idx#1 ] : zp[1]:11 , reg byte x , reg byte y , -Potential registers zp[1]:12 [ plexSine::sy#2 plexSine::sy#1 ] : zp[1]:12 , reg byte x , reg byte y , +Statement [6] (volatile bool) frame_done ← false [ frame_done ] ( [ frame_done ] { } ) always clobbers reg byte a +Statement [11] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a +Statement [13] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a +Statement [19] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a +Statement [22] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a +Statement [24] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE [ frame_done main::s1#2 ] ( main:8 [ frame_done main::s1#2 ] { } ) always clobbers reg byte a +Statement [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [34] *((const nomodify byte*) RASTER) ← (byte) $28 [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [35] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [36] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [37] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [39] if((volatile bool) frame_done) goto main::@7 [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [40] (volatile bool) frame_done ← false [ frame_done sin_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done sin_idx#12 scroll_text_next#13 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [44] (byte~) main::$7 ← (const byte) toSpritePtr1_return#0 + (byte) main::s#2 [ frame_done main::s#2 main::x#2 main::$7 ] ( main:8 [ frame_done main::s#2 main::x#2 main::$7 ] { } ) always clobbers reg byte a +Statement [46] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1 [ frame_done main::s#2 main::x#2 main::$12 ] ( main:8 [ frame_done main::s#2 main::x#2 main::$12 ] { } ) always clobbers reg byte a +Statement [47] (word~) main::$13 ← *((const nomodify byte*) XMOVEMENT_HI + (byte) main::x#2) w= *((const byte*) XMOVEMENT + (byte) main::x#2) [ frame_done main::s#2 main::x#2 main::$12 main::$13 ] ( main:8 [ frame_done main::s#2 main::x#2 main::$12 main::$13 ] { } ) always clobbers reg byte a +Statement [48] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word~) main::$13 [ frame_done main::s#2 main::x#2 ] ( main:8 [ frame_done main::s#2 main::x#2 ] { } ) always clobbers reg byte a +Statement [49] (byte) main::x#1 ← (byte) main::x#2 + (byte) 8 [ frame_done main::s#2 main::x#1 ] ( main:8 [ frame_done main::s#2 main::x#1 ] { } ) always clobbers reg byte a +Statement [55] if((byte) plexSort::nxt_y#0>=*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::m#2))) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a +Statement [58] *((const byte*) PLEX_SORTED_IDX+(byte) 1 + (byte) plexSort::s#3) ← *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a +Statement [61] if((byte) plexSort::nxt_y#0<*((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } ) always clobbers reg byte a +Statement [63] *((const byte*) PLEX_SORTED_IDX + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::m#2 ] { } ) always clobbers reg byte a +Statement [66] (volatile byte) plex_show_idx ← (byte) 0 [ ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [67] (volatile byte) plex_sprite_idx ← (byte) 0 [ ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [68] (volatile byte) plex_sprite_msb ← (byte) 1 [ ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [71] *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 [ plexSort::plexFreePrepare1_s#2 ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::plexFreePrepare1_s#2 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 plexSort::plexFreePrepare1_s#2 ] { } ) always clobbers reg byte a +Statement [74] (volatile byte) plex_free_next ← (byte) 0 [ ] ( main:8::plexSort:30 [ frame_done sin_idx#12 scroll_text_next#13 ] { } main:8::plexSort:43 [ frame_done sin_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [79] *((const byte*) PLEX_YPOS + (byte) plex_move::s#2) ← *((const byte*) YSIN + (byte) plex_move::y_idx#2) [ sin_idx#10 plex_move::y_idx#2 plex_move::s#2 scroll_text_next#11 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::y_idx#2 plex_move::s#2 scroll_text_next#11 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::y_idx#2 plex_move::s#2 scroll_text_next#11 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a reg byte y +Statement [80] (byte) plex_move::y_idx#1 ← (byte) plex_move::y_idx#2 + (byte) 8 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a reg byte x +Statement [81] (byte~) plex_move::$6 ← (byte) plex_move::s#2 << (byte) 1 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$6 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$6 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$6 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [82] if(*((const word*) PLEX_XPOS + (byte~) plex_move::$6)!=(byte) 0) goto plex_move::@2 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [83] (byte~) plex_move::$7 ← (byte) plex_move::s#2 << (byte) 1 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$7 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$7 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 plex_move::$7 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [84] *((const word*) PLEX_XPOS + (byte~) plex_move::$7) ← (word)(number) $b*(number) $20 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [85] if(*((byte*) scroll_text_next#11)!=(byte) 0) goto plex_move::@6 [ sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 scroll_text_next#11 plex_move::y_idx#1 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a reg byte y +Statement [88] (byte~) plex_move::$4 ← (const byte) toSpritePtr1_return#0 + *((byte*) scroll_text_next#12) [ sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 plex_move::$4 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 plex_move::$4 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 plex_move::$4 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a reg byte y +Statement [89] *((const byte*) PLEX_PTR + (byte) plex_move::s#2) ← (byte~) plex_move::$4 [ sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 plex_move::s#2 plex_move::y_idx#1 scroll_text_next#12 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte y +Statement [93] if((byte) plex_move::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plex_move::@1 [ sin_idx#10 scroll_text_next#13 plex_move::y_idx#1 plex_move::s#1 ] ( main:8::plex_move:28 [ frame_done sin_idx#10 scroll_text_next#13 plex_move::y_idx#1 plex_move::s#1 ] { } main:8::plex_move:41 [ frame_done sin_idx#10 scroll_text_next#13 plex_move::y_idx#1 plex_move::s#1 ] { { sin_idx#10 = sin_idx#12 } { scroll_text_next#13 = scroll_text_next#25 } } ) always clobbers reg byte a +Statement [107] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 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:15 [ 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 [108] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) 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:15 [ 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 [110] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 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:15 [ 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 [111] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) 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:15 [ 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 [113] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) 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:15 [ 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 [115] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 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:15 [ 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 [123] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 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:15 [ 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 [124] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $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:15 [ 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 [126] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 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:15 [ 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 [127] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 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:15 [ 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 [130] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 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:12 [ 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 [131] (byte*) font_2x2::next_2x2_left#10 ← (byte*) 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:12 [ 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 [133] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) 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:12 [ 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 [135] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $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:12 [ 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 [139] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 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:12 [ 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 [140] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) 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:12 [ 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 [141] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 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:12 [ 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 [142] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) 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:12 [ 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 [156] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 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:12 [ 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 [157] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 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:12 [ 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 [161] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:8::font_2x2:12 [ frame_done font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a +Statement [162] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:8::font_2x2:12 [ frame_done font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a +Statement [169] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y +Statement [170] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ 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 [171] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ 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 [173] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 [ plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte a +Statement [174] *((const nomodify byte*) RASTER) ← (byte) $28 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [175] (volatile bool) frame_done ← true [ ] ( [ ] { } ) always clobbers reg byte a +Statement [176] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a +Statement [180] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a +Statement [181] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte x reg byte y +Statement [182] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte y +Statement [184] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte y +Statement [188] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:168 [ 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 [189] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:168 [ 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 [190] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:168 [ 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 [191] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:168 [ 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 [192] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] { } ) always clobbers reg byte y +Statement [193] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a +Statement [195] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a +Statement [196] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [202] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [203] (volatile byte) plex_sprite_msb ← (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Statement [205] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:168 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a +Potential registers zp[1]:2 [ main::s#2 main::s#1 ] : zp[1]:2 , reg byte x , reg byte y , +Potential registers zp[1]:3 [ main::x#2 main::x#1 ] : zp[1]:3 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ main::s1#2 main::s1#1 ] : zp[1]:4 , reg byte x , reg byte y , +Potential registers zp[1]:5 [ plexSort::m#2 plexSort::m#1 ] : zp[1]:5 , reg byte x , reg byte y , +Potential registers zp[1]:6 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] : zp[1]:6 , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] : zp[1]:7 , reg byte x , reg byte y , +Potential registers zp[1]:8 [ sin_idx#10 sin_idx#12 ] : zp[1]:8 , +Potential registers zp[1]:9 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] : zp[1]:9 , reg byte x , +Potential registers zp[1]:10 [ plex_move::s#2 plex_move::s#1 ] : zp[1]:10 , +Potential registers zp[2]:11 [ scroll_text_next#12 scroll_text_next#11 scroll_text_next#25 scroll_text_next#13 scroll_text_next#4 ] : zp[2]:11 , Potential registers zp[1]:13 [ plexInit::i#2 plexInit::i#1 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:14 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] : zp[1]:14 , reg byte x , reg byte y , Potential registers zp[2]:15 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] : zp[2]:15 , @@ -4577,157 +5018,169 @@ Potential registers zp[1]:41 [ plex_show_idx ] : zp[1]:41 , Potential registers zp[1]:42 [ plex_sprite_idx ] : zp[1]:42 , Potential registers zp[1]:43 [ plex_sprite_msb ] : zp[1]:43 , Potential registers zp[1]:44 [ plex_free_next ] : zp[1]:44 , -Potential registers zp[1]:45 [ framedone ] : zp[1]:45 , -Potential registers zp[1]:46 [ main::$12 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:47 [ plexSort::nxt_idx#0 ] : zp[1]:47 , reg byte x , reg byte y , -Potential registers zp[1]:48 [ plexSort::nxt_y#0 ] : zp[1]:48 , reg byte x , reg byte y , -Potential registers zp[1]:49 [ plexSort::s#2 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:50 [ font_2x2_to_sprites::$3 ] : zp[1]:50 , reg byte x , reg byte y , -Potential registers zp[1]:51 [ font_2x2_to_sprites::sprite_idx#1 ] : zp[1]:51 , reg byte x , reg byte y , -Potential registers zp[1]:52 [ font_2x2_to_sprites::sprite_idx#2 ] : zp[1]:52 , reg byte x , reg byte y , -Potential registers zp[1]:53 [ font_2x2::$1 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:54 [ font_2x2::$5 ] : zp[2]:54 , -Potential registers zp[2]:56 [ font_2x2::glyph_bits_2x2#1 ] : zp[2]:56 , -Potential registers zp[2]:58 [ font_2x2::$7 ] : zp[2]:58 , -Potential registers zp[1]:60 [ font_2x2::$12 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:61 [ font_2x2::$11 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:62 [ font_2x2::$15 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:63 [ font_2x2::$14 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:64 [ plex_irq::plexFreeNextYpos1_return#0 ] : zp[1]:64 , reg byte x , reg byte y , -Potential registers zp[1]:65 [ plex_irq::$4 ] : zp[1]:65 , reg byte x , reg byte y , -Potential registers zp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] : zp[1]:66 , -Potential registers zp[1]:67 [ plexShowSprite::plexFreeAdd1_ypos#0 ] : zp[1]:67 , reg byte a , reg byte x , -Potential registers zp[1]:68 [ plexShowSprite::plexFreeAdd1_$0 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:69 [ plexShowSprite::plexFreeAdd1_$1 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:70 [ plexShowSprite::plexFreeAdd1_$2 ] : zp[1]:70 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:71 [ plexShowSprite::xpos_idx#0 ] : zp[1]:71 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:72 [ plexShowSprite::$11 ] : zp[1]:72 , reg byte x , -Potential registers zp[1]:73 [ plexShowSprite::$2 ] : zp[1]:73 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:74 [ plexShowSprite::$3 ] : zp[1]:74 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:75 [ plexShowSprite::$9 ] : zp[1]:75 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:76 [ plexShowSprite::$5 ] : zp[1]:76 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:77 [ plexShowSprite::$6 ] : zp[1]:77 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:45 [ frame_done ] : zp[1]:45 , +Potential registers zp[1]:46 [ main::$7 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:47 [ main::$12 ] : zp[1]:47 , reg byte x , reg byte y , +Potential registers zp[2]:48 [ main::$13 ] : zp[2]:48 , +Potential registers zp[1]:50 [ plexSort::nxt_idx#0 ] : zp[1]:50 , reg byte x , reg byte y , +Potential registers zp[1]:51 [ plexSort::nxt_y#0 ] : zp[1]:51 , reg byte x , reg byte y , +Potential registers zp[1]:52 [ plexSort::s#2 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:53 [ plex_move::$6 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:54 [ plex_move::$7 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:55 [ plex_move::$4 ] : zp[1]:55 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:56 [ font_2x2_to_sprites::$3 ] : zp[1]:56 , reg byte x , reg byte y , +Potential registers zp[1]:57 [ font_2x2_to_sprites::sprite_idx#1 ] : zp[1]:57 , reg byte x , reg byte y , +Potential registers zp[1]:58 [ font_2x2_to_sprites::sprite_idx#2 ] : zp[1]:58 , reg byte x , reg byte y , +Potential registers zp[1]:59 [ font_2x2::$1 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:60 [ font_2x2::$5 ] : zp[2]:60 , +Potential registers zp[2]:62 [ font_2x2::glyph_bits_2x2#1 ] : zp[2]:62 , +Potential registers zp[2]:64 [ font_2x2::$7 ] : zp[2]:64 , +Potential registers zp[1]:66 [ font_2x2::$12 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:67 [ font_2x2::$11 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:68 [ font_2x2::$15 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:69 [ font_2x2::$14 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:70 [ plex_irq::plexFreeNextYpos1_return#0 ] : zp[1]:70 , reg byte x , reg byte y , +Potential registers zp[1]:71 [ plex_irq::$4 ] : zp[1]:71 , reg byte x , reg byte y , +Potential registers zp[1]:72 [ plexShowSprite::plex_sprite_idx2#0 ] : zp[1]:72 , +Potential registers zp[1]:73 [ plexShowSprite::plexFreeAdd1_ypos#0 ] : zp[1]:73 , reg byte a , reg byte x , +Potential registers zp[1]:74 [ plexShowSprite::plexFreeAdd1_$0 ] : zp[1]:74 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:75 [ plexShowSprite::plexFreeAdd1_$1 ] : zp[1]:75 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:76 [ plexShowSprite::plexFreeAdd1_$2 ] : zp[1]:76 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:77 [ plexShowSprite::xpos_idx#0 ] : zp[1]:77 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:78 [ plexShowSprite::$11 ] : zp[1]:78 , reg byte x , +Potential registers zp[1]:79 [ plexShowSprite::$2 ] : zp[1]:79 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:80 [ plexShowSprite::$3 ] : zp[1]:80 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:81 [ plexShowSprite::$9 ] : zp[1]:81 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:82 [ plexShowSprite::$5 ] : zp[1]:82 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:83 [ plexShowSprite::$6 ] : zp[1]:83 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [plexSort] 3,616,672.83: zp[1]:8 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] 300,003: zp[1]:9 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] 200,002: zp[1]:49 [ plexSort::s#2 ] 191,668.58: zp[1]:7 [ plexSort::m#2 plexSort::m#1 ] 150,000.38: zp[1]:48 [ plexSort::nxt_y#0 ] 30,000.3: zp[1]:47 [ plexSort::nxt_idx#0 ] -Uplift Scope [font_2x2] 200,002: zp[1]:53 [ font_2x2::$1 ] 200,002: zp[2]:54 [ font_2x2::$5 ] 200,002: zp[2]:56 [ font_2x2::glyph_bits_2x2#1 ] 200,002: zp[2]:58 [ font_2x2::$7 ] 170,001.7: zp[1]:39 [ font_2x2::b#2 font_2x2::b#1 ] 121,114.22: zp[1]:36 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] 67,500.9: zp[2]:37 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] 50,000.5: zp[1]:40 [ font_2x2::glyph_bit#0 ] 32,712.54: zp[2]:34 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] 24,396.38: zp[1]:33 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] 23,712.54: zp[2]:31 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] 20,002: zp[1]:61 [ font_2x2::$11 ] 20,002: zp[1]:63 [ font_2x2::$14 ] 16,112.72: zp[1]:30 [ font_2x2::l#2 font_2x2::l#1 ] 10,001: zp[1]:60 [ font_2x2::$12 ] 10,001: zp[1]:62 [ font_2x2::$15 ] 1,560.38: zp[1]:29 [ font_2x2::c#11 font_2x2::c#1 ] 1,250.69: zp[2]:25 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] 1,031.06: zp[2]:27 [ font_2x2::next_original#4 font_2x2::next_original#1 ] -Uplift Scope [plexSine] 250,002.5: zp[1]:12 [ plexSine::sy#2 plexSine::sy#1 ] 219,171.33: zp[1]:11 [ plexSine::y_idx#2 plexSine::y_idx#0 plexSine::y_idx#1 ] -Uplift Scope [font_2x2_to_sprites] 33,822.55: zp[2]:23 [ 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 ] 24,822.55: zp[2]:20 [ 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 ] 18,573.29: zp[1]:19 [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] 15,001.5: zp[1]:51 [ font_2x2_to_sprites::sprite_idx#1 ] 15,001.5: zp[1]:52 [ font_2x2_to_sprites::sprite_idx#2 ] 12,223.44: zp[1]:22 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] 10,001: zp[1]:50 [ font_2x2_to_sprites::$3 ] 2,525.05: zp[2]:17 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] 2,138.5: zp[1]:14 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] 1,867.63: zp[2]:15 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] +Uplift Scope [plexSort] 3,616,672.83: zp[1]:6 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] 300,003: zp[1]:7 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] 200,002: zp[1]:52 [ plexSort::s#2 ] 191,668.58: zp[1]:5 [ plexSort::m#2 plexSort::m#1 ] 150,000.38: zp[1]:51 [ plexSort::nxt_y#0 ] 30,000.3: zp[1]:50 [ plexSort::nxt_idx#0 ] +Uplift Scope [font_2x2] 200,002: zp[1]:59 [ font_2x2::$1 ] 200,002: zp[2]:60 [ font_2x2::$5 ] 200,002: zp[2]:62 [ font_2x2::glyph_bits_2x2#1 ] 200,002: zp[2]:64 [ font_2x2::$7 ] 170,001.7: zp[1]:39 [ font_2x2::b#2 font_2x2::b#1 ] 121,114.22: zp[1]:36 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] 67,500.9: zp[2]:37 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] 50,000.5: zp[1]:40 [ font_2x2::glyph_bit#0 ] 32,712.54: zp[2]:34 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] 24,396.38: zp[1]:33 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] 23,712.54: zp[2]:31 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] 20,002: zp[1]:67 [ font_2x2::$11 ] 20,002: zp[1]:69 [ font_2x2::$14 ] 16,112.72: zp[1]:30 [ font_2x2::l#2 font_2x2::l#1 ] 10,001: zp[1]:66 [ font_2x2::$12 ] 10,001: zp[1]:68 [ font_2x2::$15 ] 1,560.38: zp[1]:29 [ font_2x2::c#11 font_2x2::c#1 ] 1,250.69: zp[2]:25 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] 1,031.06: zp[2]:27 [ font_2x2::next_original#4 font_2x2::next_original#1 ] +Uplift Scope [plex_move] 200,002: zp[1]:53 [ plex_move::$6 ] 200,002: zp[1]:54 [ plex_move::$7 ] 200,002: zp[1]:55 [ plex_move::$4 ] 192,859.07: zp[1]:10 [ plex_move::s#2 plex_move::s#1 ] 166,789.86: zp[1]:9 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] +Uplift Scope [] 359,400.78: zp[2]:11 [ scroll_text_next#12 scroll_text_next#11 scroll_text_next#25 scroll_text_next#13 scroll_text_next#4 ] 178.06: zp[1]:8 [ sin_idx#10 sin_idx#12 ] 48.76: zp[1]:43 [ plex_sprite_msb ] 46.09: zp[1]:41 [ plex_show_idx ] 45.39: zp[1]:42 [ plex_sprite_idx ] 42.48: zp[1]:44 [ plex_free_next ] 25.72: zp[1]:45 [ frame_done ] +Uplift Scope [font_2x2_to_sprites] 33,822.55: zp[2]:23 [ 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 ] 24,822.55: zp[2]:20 [ 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 ] 18,573.29: zp[1]:19 [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] 15,001.5: zp[1]:57 [ font_2x2_to_sprites::sprite_idx#1 ] 15,001.5: zp[1]:58 [ font_2x2_to_sprites::sprite_idx#2 ] 12,223.44: zp[1]:22 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] 10,001: zp[1]:56 [ font_2x2_to_sprites::$3 ] 2,525.05: zp[2]:17 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] 2,138.5: zp[1]:14 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] 1,867.63: zp[2]:15 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] Uplift Scope [plexInit] 3,503.5: zp[1]:13 [ plexInit::i#2 plexInit::i#1 ] -Uplift Scope [plexShowSprite] 202: zp[1]:68 [ plexShowSprite::plexFreeAdd1_$0 ] 202: zp[1]:69 [ plexShowSprite::plexFreeAdd1_$1 ] 202: zp[1]:70 [ plexShowSprite::plexFreeAdd1_$2 ] 202: zp[1]:71 [ plexShowSprite::xpos_idx#0 ] 202: zp[1]:73 [ plexShowSprite::$2 ] 202: zp[1]:74 [ plexShowSprite::$3 ] 202: zp[1]:75 [ plexShowSprite::$9 ] 202: zp[1]:76 [ plexShowSprite::$5 ] 202: zp[1]:77 [ plexShowSprite::$6 ] 151.5: zp[1]:67 [ plexShowSprite::plexFreeAdd1_ypos#0 ] 101: zp[1]:72 [ plexShowSprite::$11 ] 25.25: zp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] -Uplift Scope [main] 303: zp[1]:6 [ main::s1#2 main::s1#1 ] 218.83: zp[1]:3 [ main::s#2 main::s#1 ] 202: zp[1]:46 [ main::$12 ] 185.17: zp[1]:2 [ main::sprite#2 main::sprite#1 ] 127.93: zp[2]:4 [ main::xp#2 main::xp#1 ] -Uplift Scope [] 358.43: zp[1]:10 [ sin_idx#10 sin_idx#12 ] 48.76: zp[1]:43 [ plex_sprite_msb ] 46.09: zp[1]:41 [ plex_show_idx ] 45.39: zp[1]:42 [ plex_sprite_idx ] 42.48: zp[1]:44 [ plex_free_next ] 27.65: zp[1]:45 [ framedone ] -Uplift Scope [plex_irq] 11: zp[1]:65 [ plex_irq::$4 ] 4.8: zp[1]:64 [ plex_irq::plexFreeNextYpos1_return#0 ] +Uplift Scope [plexShowSprite] 202: zp[1]:74 [ plexShowSprite::plexFreeAdd1_$0 ] 202: zp[1]:75 [ plexShowSprite::plexFreeAdd1_$1 ] 202: zp[1]:76 [ plexShowSprite::plexFreeAdd1_$2 ] 202: zp[1]:77 [ plexShowSprite::xpos_idx#0 ] 202: zp[1]:79 [ plexShowSprite::$2 ] 202: zp[1]:80 [ plexShowSprite::$3 ] 202: zp[1]:81 [ plexShowSprite::$9 ] 202: zp[1]:82 [ plexShowSprite::$5 ] 202: zp[1]:83 [ plexShowSprite::$6 ] 151.5: zp[1]:73 [ plexShowSprite::plexFreeAdd1_ypos#0 ] 101: zp[1]:78 [ plexShowSprite::$11 ] 25.25: zp[1]:72 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplift Scope [main] 303: zp[1]:4 [ main::s1#2 main::s1#1 ] 277.75: zp[1]:2 [ main::s#2 main::s#1 ] 202: zp[1]:46 [ main::$7 ] 202: zp[2]:48 [ main::$13 ] 158.71: zp[1]:3 [ main::x#2 main::x#1 ] 101: zp[1]:47 [ main::$12 ] +Uplift Scope [plex_irq] 11: zp[1]:71 [ plex_irq::$4 ] 4.8: zp[1]:70 [ plex_irq::plexFreeNextYpos1_return#0 ] -Uplifting [plexSort] best 237905 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]:7 [ plexSort::m#2 plexSort::m#1 ] zp[1]:48 [ plexSort::nxt_y#0 ] zp[1]:47 [ plexSort::nxt_idx#0 ] +Uplifting [plexSort] best 250397 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]:5 [ plexSort::m#2 plexSort::m#1 ] zp[1]:51 [ plexSort::nxt_y#0 ] zp[1]:50 [ plexSort::nxt_idx#0 ] Limited combination testing to 100 combinations of 972 possible. -Uplifting [font_2x2] best 214905 combination reg byte a [ font_2x2::$1 ] zp[2]:54 [ font_2x2::$5 ] zp[2]:56 [ font_2x2::glyph_bits_2x2#1 ] zp[2]:58 [ font_2x2::$7 ] reg byte y [ font_2x2::b#2 font_2x2::b#1 ] zp[1]:36 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] zp[2]:37 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] reg byte x [ font_2x2::glyph_bit#0 ] zp[2]:34 [ 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[1]:33 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] zp[2]:31 [ 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[1]:61 [ font_2x2::$11 ] zp[1]:63 [ font_2x2::$14 ] zp[1]:30 [ font_2x2::l#2 font_2x2::l#1 ] zp[1]:60 [ font_2x2::$12 ] zp[1]:62 [ font_2x2::$15 ] zp[1]:29 [ font_2x2::c#11 font_2x2::c#1 ] zp[2]:25 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] zp[2]:27 [ font_2x2::next_original#4 font_2x2::next_original#1 ] +Uplifting [font_2x2] best 227397 combination reg byte a [ font_2x2::$1 ] zp[2]:60 [ font_2x2::$5 ] zp[2]:62 [ font_2x2::glyph_bits_2x2#1 ] zp[2]:64 [ font_2x2::$7 ] reg byte y [ font_2x2::b#2 font_2x2::b#1 ] zp[1]:36 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] zp[2]:37 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] reg byte x [ font_2x2::glyph_bit#0 ] zp[2]:34 [ 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[1]:33 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] zp[2]:31 [ 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[1]:67 [ font_2x2::$11 ] zp[1]:69 [ font_2x2::$14 ] zp[1]:30 [ font_2x2::l#2 font_2x2::l#1 ] zp[1]:66 [ font_2x2::$12 ] zp[1]:68 [ font_2x2::$15 ] zp[1]:29 [ font_2x2::c#11 font_2x2::c#1 ] zp[2]:25 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] zp[2]:27 [ font_2x2::next_original#4 font_2x2::next_original#1 ] Limited combination testing to 100 combinations of 746496 possible. -Uplifting [plexSine] best 213002 combination reg byte y [ plexSine::sy#2 plexSine::sy#1 ] reg byte x [ plexSine::y_idx#2 plexSine::y_idx#0 plexSine::y_idx#1 ] -Uplifting [font_2x2_to_sprites] best 210302 combination zp[2]:23 [ 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 ] zp[2]:20 [ 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 ] reg byte x [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] zp[1]:51 [ font_2x2_to_sprites::sprite_idx#1 ] reg byte y [ font_2x2_to_sprites::sprite_idx#2 ] zp[1]:22 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] zp[1]:50 [ font_2x2_to_sprites::$3 ] zp[2]:17 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] zp[1]:14 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] zp[2]:15 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] +Uplifting [plex_move] best 225294 combination reg byte a [ plex_move::$6 ] reg byte a [ plex_move::$7 ] reg byte a [ plex_move::$4 ] zp[1]:10 [ plex_move::s#2 plex_move::s#1 ] reg byte x [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] +Limited combination testing to 100 combinations of 128 possible. +Uplifting [] best 225294 combination zp[2]:11 [ scroll_text_next#12 scroll_text_next#11 scroll_text_next#25 scroll_text_next#13 scroll_text_next#4 ] zp[1]:8 [ sin_idx#10 sin_idx#12 ] zp[1]:43 [ plex_sprite_msb ] zp[1]:41 [ plex_show_idx ] zp[1]:42 [ plex_sprite_idx ] zp[1]:44 [ plex_free_next ] zp[1]:45 [ frame_done ] +Uplifting [font_2x2_to_sprites] best 222594 combination zp[2]:23 [ 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 ] zp[2]:20 [ 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 ] reg byte x [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] zp[1]:57 [ font_2x2_to_sprites::sprite_idx#1 ] reg byte y [ font_2x2_to_sprites::sprite_idx#2 ] zp[1]:22 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] zp[1]:56 [ font_2x2_to_sprites::$3 ] zp[2]:17 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] zp[1]:14 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] zp[2]:15 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] Limited combination testing to 100 combinations of 729 possible. -Uplifting [plexInit] best 210182 combination reg byte x [ plexInit::i#2 plexInit::i#1 ] -Uplifting [plexShowSprite] best 210162 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]:73 [ plexShowSprite::$2 ] zp[1]:74 [ plexShowSprite::$3 ] zp[1]:75 [ plexShowSprite::$9 ] zp[1]:76 [ plexShowSprite::$5 ] zp[1]:77 [ plexShowSprite::$6 ] zp[1]:67 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:72 [ plexShowSprite::$11 ] zp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplifting [plexInit] best 222474 combination reg byte x [ plexInit::i#2 plexInit::i#1 ] +Uplifting [plexShowSprite] best 222454 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]:79 [ plexShowSprite::$2 ] zp[1]:80 [ plexShowSprite::$3 ] zp[1]:81 [ plexShowSprite::$9 ] zp[1]:82 [ plexShowSprite::$5 ] zp[1]:83 [ plexShowSprite::$6 ] zp[1]:73 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:78 [ plexShowSprite::$11 ] zp[1]:72 [ plexShowSprite::plex_sprite_idx2#0 ] Limited combination testing to 100 combinations of 1572864 possible. -Uplifting [main] best 209872 combination reg byte x [ main::s1#2 main::s1#1 ] reg byte x [ main::s#2 main::s#1 ] reg byte a [ main::$12 ] zp[1]:2 [ main::sprite#2 main::sprite#1 ] zp[2]:4 [ main::xp#2 main::xp#1 ] -Limited combination testing to 100 combinations of 108 possible. -Uplifting [] best 209872 combination zp[1]:10 [ sin_idx#10 sin_idx#12 ] zp[1]:43 [ plex_sprite_msb ] zp[1]:41 [ plex_show_idx ] zp[1]:42 [ plex_sprite_idx ] zp[1]:44 [ plex_free_next ] zp[1]:45 [ framedone ] -Uplifting [plex_irq] best 209809 combination zp[1]:65 [ plex_irq::$4 ] reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ] -Attempting to uplift remaining variables inzp[1]:7 [ plexSort::m#2 plexSort::m#1 ] -Uplifting [plexSort] best 209809 combination zp[1]:7 [ plexSort::m#2 plexSort::m#1 ] -Attempting to uplift remaining variables inzp[1]:48 [ plexSort::nxt_y#0 ] -Uplifting [plexSort] best 209809 combination zp[1]:48 [ plexSort::nxt_y#0 ] +Uplifting [main] best 222194 combination reg byte x [ main::s1#2 main::s1#1 ] zp[1]:2 [ main::s#2 main::s#1 ] reg byte a [ main::$7 ] zp[2]:48 [ main::$13 ] reg byte x [ main::x#2 main::x#1 ] zp[1]:47 [ main::$12 ] +Limited combination testing to 100 combinations of 324 possible. +Uplifting [plex_irq] best 222131 combination zp[1]:71 [ plex_irq::$4 ] reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ] +Attempting to uplift remaining variables inzp[1]:10 [ plex_move::s#2 plex_move::s#1 ] +Uplifting [plex_move] best 222131 combination zp[1]:10 [ plex_move::s#2 plex_move::s#1 ] +Attempting to uplift remaining variables inzp[1]:5 [ plexSort::m#2 plexSort::m#1 ] +Uplifting [plexSort] best 222131 combination zp[1]:5 [ plexSort::m#2 plexSort::m#1 ] +Attempting to uplift remaining variables inzp[1]:51 [ plexSort::nxt_y#0 ] +Uplifting [plexSort] best 222131 combination zp[1]:51 [ plexSort::nxt_y#0 ] Attempting to uplift remaining variables inzp[1]:36 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] -Uplifting [font_2x2] best 209809 combination zp[1]:36 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] -Attempting to uplift remaining variables inzp[1]:47 [ plexSort::nxt_idx#0 ] -Uplifting [plexSort] best 209809 combination zp[1]:47 [ plexSort::nxt_idx#0 ] +Uplifting [font_2x2] best 222131 combination zp[1]:36 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] +Attempting to uplift remaining variables inzp[1]:50 [ plexSort::nxt_idx#0 ] +Uplifting [plexSort] best 222131 combination zp[1]:50 [ plexSort::nxt_idx#0 ] Attempting to uplift remaining variables inzp[1]:33 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] -Uplifting [font_2x2] best 209809 combination zp[1]:33 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] -Attempting to uplift remaining variables inzp[1]:61 [ font_2x2::$11 ] -Uplifting [font_2x2] best 209209 combination reg byte y [ font_2x2::$11 ] -Attempting to uplift remaining variables inzp[1]:63 [ font_2x2::$14 ] -Uplifting [font_2x2] best 208609 combination reg byte y [ font_2x2::$14 ] +Uplifting [font_2x2] best 222131 combination zp[1]:33 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] +Attempting to uplift remaining variables inzp[1]:67 [ font_2x2::$11 ] +Uplifting [font_2x2] best 221531 combination reg byte y [ font_2x2::$11 ] +Attempting to uplift remaining variables inzp[1]:69 [ font_2x2::$14 ] +Uplifting [font_2x2] best 220931 combination reg byte y [ font_2x2::$14 ] Attempting to uplift remaining variables inzp[1]:30 [ font_2x2::l#2 font_2x2::l#1 ] -Uplifting [font_2x2] best 208609 combination zp[1]:30 [ font_2x2::l#2 font_2x2::l#1 ] -Attempting to uplift remaining variables inzp[1]:51 [ font_2x2_to_sprites::sprite_idx#1 ] -Uplifting [font_2x2_to_sprites] best 208609 combination zp[1]:51 [ font_2x2_to_sprites::sprite_idx#1 ] +Uplifting [font_2x2] best 220931 combination zp[1]:30 [ font_2x2::l#2 font_2x2::l#1 ] +Attempting to uplift remaining variables inzp[1]:57 [ font_2x2_to_sprites::sprite_idx#1 ] +Uplifting [font_2x2_to_sprites] best 220931 combination zp[1]:57 [ font_2x2_to_sprites::sprite_idx#1 ] Attempting to uplift remaining variables inzp[1]:22 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] -Uplifting [font_2x2_to_sprites] best 208609 combination zp[1]:22 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] -Attempting to uplift remaining variables inzp[1]:50 [ font_2x2_to_sprites::$3 ] -Uplifting [font_2x2_to_sprites] best 208609 combination zp[1]:50 [ font_2x2_to_sprites::$3 ] -Attempting to uplift remaining variables inzp[1]:60 [ font_2x2::$12 ] -Uplifting [font_2x2] best 207709 combination reg byte a [ font_2x2::$12 ] -Attempting to uplift remaining variables inzp[1]:62 [ font_2x2::$15 ] -Uplifting [font_2x2] best 206809 combination reg byte a [ font_2x2::$15 ] +Uplifting [font_2x2_to_sprites] best 220931 combination zp[1]:22 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] +Attempting to uplift remaining variables inzp[1]:56 [ font_2x2_to_sprites::$3 ] +Uplifting [font_2x2_to_sprites] best 220931 combination zp[1]:56 [ font_2x2_to_sprites::$3 ] +Attempting to uplift remaining variables inzp[1]:66 [ font_2x2::$12 ] +Uplifting [font_2x2] best 220031 combination reg byte a [ font_2x2::$12 ] +Attempting to uplift remaining variables inzp[1]:68 [ font_2x2::$15 ] +Uplifting [font_2x2] best 219131 combination reg byte a [ font_2x2::$15 ] Attempting to uplift remaining variables inzp[1]:14 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] -Uplifting [font_2x2_to_sprites] best 206809 combination zp[1]:14 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] +Uplifting [font_2x2_to_sprites] best 219131 combination zp[1]:14 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] Attempting to uplift remaining variables inzp[1]:29 [ font_2x2::c#11 font_2x2::c#1 ] -Uplifting [font_2x2] best 206809 combination zp[1]:29 [ font_2x2::c#11 font_2x2::c#1 ] -Attempting to uplift remaining variables inzp[1]:10 [ sin_idx#10 sin_idx#12 ] -Uplifting [] best 206809 combination zp[1]:10 [ sin_idx#10 sin_idx#12 ] -Attempting to uplift remaining variables inzp[1]:73 [ plexShowSprite::$2 ] -Uplifting [plexShowSprite] best 206803 combination reg byte a [ plexShowSprite::$2 ] -Attempting to uplift remaining variables inzp[1]:74 [ plexShowSprite::$3 ] -Uplifting [plexShowSprite] best 206797 combination reg byte a [ plexShowSprite::$3 ] -Attempting to uplift remaining variables inzp[1]:75 [ plexShowSprite::$9 ] -Uplifting [plexShowSprite] best 206791 combination reg byte a [ plexShowSprite::$9 ] -Attempting to uplift remaining variables inzp[1]:76 [ plexShowSprite::$5 ] -Uplifting [plexShowSprite] best 206785 combination reg byte x [ plexShowSprite::$5 ] -Attempting to uplift remaining variables inzp[1]:77 [ plexShowSprite::$6 ] -Uplifting [plexShowSprite] best 206781 combination reg byte a [ plexShowSprite::$6 ] -Attempting to uplift remaining variables inzp[1]:2 [ main::sprite#2 main::sprite#1 ] -Uplifting [main] best 206781 combination zp[1]:2 [ main::sprite#2 main::sprite#1 ] -Attempting to uplift remaining variables inzp[1]:67 [ plexShowSprite::plexFreeAdd1_ypos#0 ] -Uplifting [plexShowSprite] best 206772 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] -Attempting to uplift remaining variables inzp[1]:72 [ plexShowSprite::$11 ] -Uplifting [plexShowSprite] best 206765 combination reg byte x [ plexShowSprite::$11 ] +Uplifting [font_2x2] best 219131 combination zp[1]:29 [ font_2x2::c#11 font_2x2::c#1 ] +Attempting to uplift remaining variables inzp[1]:2 [ main::s#2 main::s#1 ] +Uplifting [main] best 219131 combination zp[1]:2 [ main::s#2 main::s#1 ] +Attempting to uplift remaining variables inzp[1]:79 [ plexShowSprite::$2 ] +Uplifting [plexShowSprite] best 219125 combination reg byte a [ plexShowSprite::$2 ] +Attempting to uplift remaining variables inzp[1]:80 [ plexShowSprite::$3 ] +Uplifting [plexShowSprite] best 219119 combination reg byte a [ plexShowSprite::$3 ] +Attempting to uplift remaining variables inzp[1]:81 [ plexShowSprite::$9 ] +Uplifting [plexShowSprite] best 219113 combination reg byte a [ plexShowSprite::$9 ] +Attempting to uplift remaining variables inzp[1]:82 [ plexShowSprite::$5 ] +Uplifting [plexShowSprite] best 219107 combination reg byte x [ plexShowSprite::$5 ] +Attempting to uplift remaining variables inzp[1]:83 [ plexShowSprite::$6 ] +Uplifting [plexShowSprite] best 219103 combination reg byte a [ plexShowSprite::$6 ] +Attempting to uplift remaining variables inzp[1]:8 [ sin_idx#10 sin_idx#12 ] +Uplifting [] best 219103 combination zp[1]:8 [ sin_idx#10 sin_idx#12 ] +Attempting to uplift remaining variables inzp[1]:73 [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Uplifting [plexShowSprite] best 219094 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Attempting to uplift remaining variables inzp[1]:47 [ main::$12 ] +Uplifting [main] best 219054 combination reg byte y [ main::$12 ] +Attempting to uplift remaining variables inzp[1]:78 [ plexShowSprite::$11 ] +Uplifting [plexShowSprite] best 219047 combination reg byte x [ plexShowSprite::$11 ] Attempting to uplift remaining variables inzp[1]:43 [ plex_sprite_msb ] -Uplifting [] best 206765 combination zp[1]:43 [ plex_sprite_msb ] +Uplifting [] best 219047 combination zp[1]:43 [ plex_sprite_msb ] Attempting to uplift remaining variables inzp[1]:41 [ plex_show_idx ] -Uplifting [] best 206765 combination zp[1]:41 [ plex_show_idx ] +Uplifting [] best 219047 combination zp[1]:41 [ plex_show_idx ] Attempting to uplift remaining variables inzp[1]:42 [ plex_sprite_idx ] -Uplifting [] best 206765 combination zp[1]:42 [ plex_sprite_idx ] +Uplifting [] best 219047 combination zp[1]:42 [ plex_sprite_idx ] Attempting to uplift remaining variables inzp[1]:44 [ plex_free_next ] -Uplifting [] best 206765 combination zp[1]:44 [ plex_free_next ] -Attempting to uplift remaining variables inzp[1]:45 [ framedone ] -Uplifting [] best 206765 combination zp[1]:45 [ framedone ] -Attempting to uplift remaining variables inzp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] -Uplifting [plexShowSprite] best 206765 combination zp[1]:66 [ plexShowSprite::plex_sprite_idx2#0 ] -Attempting to uplift remaining variables inzp[1]:65 [ plex_irq::$4 ] -Uplifting [plex_irq] best 206765 combination zp[1]:65 [ plex_irq::$4 ] -Coalescing zero page register [ zp[1]:22 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] ] with [ zp[1]:51 [ font_2x2_to_sprites::sprite_idx#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:37 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] ] with [ zp[2]:54 [ font_2x2::$5 ] ] - score: 1 -Coalescing zero page register [ zp[2]:37 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 ] ] with [ zp[2]:58 [ font_2x2::$7 ] ] - score: 1 -Coalescing zero page register [ zp[2]:37 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 ] ] with [ zp[2]:56 [ font_2x2::glyph_bits_2x2#1 ] ] - score: 2 -Coalescing zero page register [ zp[1]:10 [ sin_idx#10 sin_idx#12 ] ] with [ zp[1]:2 [ main::sprite#2 main::sprite#1 ] ] -Coalescing zero page register [ zp[1]:14 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] ] with [ zp[1]:7 [ plexSort::m#2 plexSort::m#1 ] ] +Uplifting [] best 219047 combination zp[1]:44 [ plex_free_next ] +Attempting to uplift remaining variables inzp[1]:45 [ frame_done ] +Uplifting [] best 219047 combination zp[1]:45 [ frame_done ] +Attempting to uplift remaining variables inzp[1]:72 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplifting [plexShowSprite] best 219047 combination zp[1]:72 [ plexShowSprite::plex_sprite_idx2#0 ] +Attempting to uplift remaining variables inzp[1]:71 [ plex_irq::$4 ] +Uplifting [plex_irq] best 219047 combination zp[1]:71 [ plex_irq::$4 ] +Coalescing zero page register [ zp[1]:22 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] ] with [ zp[1]:57 [ font_2x2_to_sprites::sprite_idx#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:37 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] ] with [ zp[2]:60 [ font_2x2::$5 ] ] - score: 1 +Coalescing zero page register [ zp[2]:37 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 ] ] with [ zp[2]:64 [ font_2x2::$7 ] ] - score: 1 +Coalescing zero page register [ zp[2]:37 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 ] ] with [ zp[2]:62 [ font_2x2::glyph_bits_2x2#1 ] ] - score: 2 +Coalescing zero page register [ zp[1]:8 [ sin_idx#10 sin_idx#12 ] ] with [ zp[1]:2 [ main::s#2 main::s#1 ] ] +Coalescing zero page register [ zp[1]:10 [ plex_move::s#2 plex_move::s#1 ] ] with [ zp[1]:5 [ plexSort::m#2 plexSort::m#1 ] ] Coalescing zero page register [ zp[2]:25 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] ] with [ zp[2]:15 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] ] Coalescing zero page register [ zp[2]:27 [ font_2x2::next_original#4 font_2x2::next_original#1 ] ] with [ zp[2]:17 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] ] -Coalescing zero page register [ zp[1]:29 [ font_2x2::c#11 font_2x2::c#1 ] ] with [ zp[1]:22 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 ] ] +Coalescing zero page register [ zp[1]:29 [ font_2x2::c#11 font_2x2::c#1 ] ] with [ zp[1]:14 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] ] +Coalescing zero page register [ zp[1]:30 [ font_2x2::l#2 font_2x2::l#1 ] ] with [ zp[1]:22 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 ] ] Coalescing zero page register [ zp[2]:31 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] ] with [ zp[2]:20 [ 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 ] ] Coalescing zero page register [ zp[2]:34 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] ] with [ zp[2]:23 [ 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 ] ] -Coalescing zero page register [ zp[1]:47 [ plexSort::nxt_idx#0 ] ] with [ zp[1]:30 [ font_2x2::l#2 font_2x2::l#1 ] ] -Coalescing zero page register [ zp[1]:48 [ plexSort::nxt_y#0 ] ] with [ zp[1]:33 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] ] -Coalescing zero page register [ zp[1]:50 [ font_2x2_to_sprites::$3 ] ] with [ zp[1]:36 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] ] -Allocated (was zp[2]:4) zp[2]:2 [ main::xp#2 main::xp#1 ] -Allocated (was zp[1]:10) zp[1]:4 [ sin_idx#10 sin_idx#12 main::sprite#2 main::sprite#1 ] -Allocated (was zp[1]:14) zp[1]:5 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 plexSort::m#2 plexSort::m#1 ] -Allocated (was zp[2]:25) zp[2]:6 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] -Allocated (was zp[2]:27) zp[2]:8 [ font_2x2::next_original#4 font_2x2::next_original#1 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] -Allocated (was zp[1]:29) zp[1]:10 [ font_2x2::c#11 font_2x2::c#1 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 ] +Coalescing zero page register [ zp[2]:48 [ main::$13 ] ] with [ zp[2]:37 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ] ] +Coalescing zero page register [ zp[1]:50 [ plexSort::nxt_idx#0 ] ] with [ zp[1]:33 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] ] +Coalescing zero page register [ zp[1]:51 [ plexSort::nxt_y#0 ] ] with [ zp[1]:36 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] ] +Coalescing zero page register [ zp[1]:29 [ font_2x2::c#11 font_2x2::c#1 font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] ] with [ zp[1]:10 [ plex_move::s#2 plex_move::s#1 plexSort::m#2 plexSort::m#1 ] ] +Coalescing zero page register [ zp[1]:56 [ font_2x2_to_sprites::$3 ] ] with [ zp[1]:50 [ plexSort::nxt_idx#0 font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] ] +Allocated (was zp[1]:8) zp[1]:2 [ sin_idx#10 sin_idx#12 main::s#2 main::s#1 ] +Allocated (was zp[2]:11) zp[2]:3 [ scroll_text_next#12 scroll_text_next#11 scroll_text_next#25 scroll_text_next#13 scroll_text_next#4 ] +Allocated (was zp[2]:25) zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] +Allocated (was zp[2]:27) zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] +Allocated (was zp[1]:29) zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 plex_move::s#2 plex_move::s#1 plexSort::m#2 plexSort::m#1 ] +Allocated (was zp[1]:30) zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 ] Allocated (was zp[2]:31) 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 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 (was zp[2]:34) zp[2]:13 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 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 (was zp[2]:37) zp[2]:15 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ] -Allocated (was zp[1]:41) zp[1]:17 [ plex_show_idx ] -Allocated (was zp[1]:42) zp[1]:18 [ plex_sprite_idx ] -Allocated (was zp[1]:43) zp[1]:19 [ plex_sprite_msb ] -Allocated (was zp[1]:44) zp[1]:20 [ plex_free_next ] -Allocated (was zp[1]:45) zp[1]:21 [ framedone ] -Allocated (was zp[1]:47) zp[1]:22 [ plexSort::nxt_idx#0 font_2x2::l#2 font_2x2::l#1 ] -Allocated (was zp[1]:48) zp[1]:23 [ plexSort::nxt_y#0 font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] -Allocated (was zp[1]:50) zp[1]:24 [ font_2x2_to_sprites::$3 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] -Allocated (was zp[1]:65) zp[1]:25 [ plex_irq::$4 ] -Allocated (was zp[1]:66) zp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ] +Allocated (was zp[1]:41) zp[1]:15 [ plex_show_idx ] +Allocated (was zp[1]:42) zp[1]:16 [ plex_sprite_idx ] +Allocated (was zp[1]:43) zp[1]:17 [ plex_sprite_msb ] +Allocated (was zp[1]:44) zp[1]:18 [ plex_free_next ] +Allocated (was zp[1]:45) zp[1]:19 [ frame_done ] +Allocated (was zp[2]:48) zp[2]:20 [ main::$13 font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ] +Allocated (was zp[1]:51) zp[1]:22 [ plexSort::nxt_y#0 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] +Allocated (was zp[1]:56) zp[1]:23 [ font_2x2_to_sprites::$3 plexSort::nxt_idx#0 font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] +Allocated (was zp[1]:71) zp[1]:24 [ plex_irq::$4 ] +Allocated (was zp[1]:72) zp[1]:25 [ plexShowSprite::plex_sprite_idx2#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -4769,18 +5222,22 @@ ASSEMBLER BEFORE OPTIMIZATION // The number of sprites in the multiplexer .const PLEX_COUNT = $20 .label CHARSET_DEFAULT = $1000 - .label FONT = $2000 .label SPRITES = $3000 .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 = $400+$3f8 - .label plex_show_idx = $11 - .label plex_sprite_idx = $12 - .label plex_sprite_msb = $13 - .label plex_free_next = $14 - .label framedone = $15 + .const toSpritePtr1_return = SPRITES/$40 + .label plex_show_idx = $f + .label plex_sprite_idx = $10 + .label plex_sprite_msb = $11 + .label plex_free_next = $12 + .label frame_done = $13 + // The next char to use from the scroll text + .label scroll_text_next = 3 // Y-sine index - .label sin_idx = 4 + .label sin_idx = 2 // @begin __bbegin: jmp __b1 @@ -4805,205 +5262,176 @@ __b2: // The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown. lda #0 sta.z plex_free_next + // [5] phi from @2 to toSpritePtr1 [phi:@2->toSpritePtr1] +toSpritePtr1_from___b2: + jmp toSpritePtr1 + // toSpritePtr1 +toSpritePtr1: jmp __b3 // @3 __b3: - // [5] (volatile bool) framedone ← false -- vboz1=vboc1 + // [6] (volatile bool) frame_done ← false -- vboz1=vboc1 + // Signal used between IRQ and main loop. Set to true when the IRQ is done showing the sprites. lda #0 - sta.z framedone - // [6] phi from @3 to @4 [phi:@3->@4] + sta.z frame_done + // [7] phi from @3 to @4 [phi:@3->@4] __b4_from___b3: jmp __b4 // @4 __b4: - // [7] call main + // [8] call main jsr main - // [8] phi from @4 to @end [phi:@4->@end] + // [9] phi from @4 to @end [phi:@4->@end] __bend_from___b4: jmp __bend // @end __bend: // main main: { - .const toSpritePtr1_return = SPRITES/$40 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET_DEFAULT)/4&$f - .label sprite = 4 - // Set the x-positions & pointers - .label xp = 2 + .label s = 2 + .label __13 = $14 // asm { sei } // Create 2x2 font from CHARGEN sei - // [10] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2 + // [11] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_CHARROM sta PROCPORT - // [11] call font_2x2 - // [117] phi from main to font_2x2 [phi:main->font_2x2] + // [12] call font_2x2 + // [128] phi from main to font_2x2 [phi:main->font_2x2] font_2x2_from_main: jsr font_2x2 - jmp __b8 - // main::@8 - __b8: - // [12] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO -- _deref_pbuc1=vbuc2 + jmp __b9 + // main::@9 + __b9: + // [13] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_BASIC_KERNEL_IO sta PROCPORT // asm { cli } cli - // [14] call font_2x2_to_sprites + // [15] call font_2x2_to_sprites // Convert font to sprites - // [92] phi from main::@8 to font_2x2_to_sprites [phi:main::@8->font_2x2_to_sprites] - font_2x2_to_sprites_from___b8: + // [103] phi from main::@9 to font_2x2_to_sprites [phi:main::@9->font_2x2_to_sprites] + font_2x2_to_sprites_from___b9: jsr font_2x2_to_sprites - // [15] phi from main::@8 to main::@9 [phi:main::@8->main::@9] - __b9_from___b8: - jmp __b9 - // main::@9 - __b9: - // [16] call plexInit - // Initialize the multiplexer - // [85] phi from main::@9 to plexInit [phi:main::@9->plexInit] - plexInit_from___b9: - jsr plexInit - // [17] phi from main::@9 to main::toD0181 [phi:main::@9->main::toD0181] - toD0181_from___b9: - jmp toD0181 - // main::toD0181 - toD0181: - jmp __b7 - // main::@7 - __b7: - // [18] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 - // Show screen - lda #toD0181_return - sta D018 - // [19] phi from main::@7 to main::toSpritePtr1 [phi:main::@7->main::toSpritePtr1] - toSpritePtr1_from___b7: - jmp toSpritePtr1 - // main::toSpritePtr1 - toSpritePtr1: - // [20] phi from main::toSpritePtr1 to main::@1 [phi:main::toSpritePtr1->main::@1] - __b1_from_toSpritePtr1: - // [20] phi (word) main::xp#2 = (word) $18 [phi:main::toSpritePtr1->main::@1#0] -- vwuz1=vwuc1 - lda #<$18 - sta.z xp - lda #>$18 - sta.z xp+1 - // [20] phi (byte) main::s#2 = (byte) 0 [phi:main::toSpritePtr1->main::@1#1] -- vbuxx=vbuc1 - ldx #0 - // [20] phi (byte) main::sprite#2 = (const byte) main::toSpritePtr1_return#0 [phi:main::toSpritePtr1->main::@1#2] -- vbuz1=vbuc1 - lda #toSpritePtr1_return - sta.z sprite - jmp __b1 - // [20] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - __b1_from___b1: - // [20] phi (word) main::xp#2 = (word) main::xp#1 [phi:main::@1->main::@1#0] -- register_copy - // [20] phi (byte) main::s#2 = (byte) main::s#1 [phi:main::@1->main::@1#1] -- register_copy - // [20] phi (byte) main::sprite#2 = (byte) main::sprite#1 [phi:main::@1->main::@1#2] -- register_copy - jmp __b1 - // main::@1 - __b1: - // [21] *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte) main::sprite#2 -- pbuc1_derefidx_vbuxx=vbuz1 - lda.z sprite - sta PLEX_PTR,x - // [22] (byte) main::sprite#1 ← ++ (byte) main::sprite#2 -- vbuz1=_inc_vbuz1 - inc.z sprite - // [23] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 - txa - asl - // [24] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word) main::xp#2 -- pwuc1_derefidx_vbuaa=vwuz1 - tay - lda.z xp - sta PLEX_XPOS,y - lda.z xp+1 - sta PLEX_XPOS+1,y - // [25] (word) main::xp#1 ← (word) main::xp#2 + (byte) $a -- vwuz1=vwuz1_plus_vbuc1 - lda #$a - clc - adc.z xp - sta.z xp - bcc !+ - inc.z xp+1 - !: - // [26] (byte) main::s#1 ← ++ (byte) main::s#2 -- vbuxx=_inc_vbuxx - inx - // [27] if((byte) main::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #PLEX_COUNT-1+1 - bne __b1_from___b1 - jmp __b2 - // main::@2 - __b2: - // [28] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff -- _deref_pbuc1=vbuc2 - // Enable & initialize sprites - lda #$ff - sta SPRITES_ENABLE - // [29] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - __b3_from___b2: - // [29] phi (byte) main::s1#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuxx=vbuc1 - ldx #0 - jmp __b3 - // [29] phi from main::@3 to main::@3 [phi:main::@3->main::@3] - __b3_from___b3: - // [29] phi (byte) main::s1#2 = (byte) main::s1#1 [phi:main::@3->main::@3#0] -- register_copy - jmp __b3 - // main::@3 - __b3: - // [30] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE -- pbuc1_derefidx_vbuxx=vbuc2 - lda #WHITE - sta SPRITES_COLS,x - // [31] (byte) main::s1#1 ← ++ (byte) main::s1#2 -- vbuxx=_inc_vbuxx - inx - // [32] if((byte) main::s1#1!=(byte) 8) goto main::@3 -- vbuxx_neq_vbuc1_then_la1 - cpx #8 - bne __b3_from___b3 - // [33] phi from main::@3 to main::@4 [phi:main::@3->main::@4] - __b4_from___b3: - jmp __b4 - // main::@4 - __b4: - // [34] call plexSine - // Move the sprites - // [76] phi from main::@4 to plexSine [phi:main::@4->plexSine] - plexSine_from___b4: - // [76] phi (byte) sin_idx#10 = (byte) 0 [phi:main::@4->plexSine#0] -- vbuz1=vbuc1 - lda #0 - sta.z sin_idx - jsr plexSine - // [35] phi from main::@4 to main::@10 [phi:main::@4->main::@10] - __b10_from___b4: + // [16] phi from main::@9 to main::@10 [phi:main::@9->main::@10] + __b10_from___b9: jmp __b10 // main::@10 __b10: - // [36] call plexSort - // Sort the sprites by y-position - // [51] phi from main::@10 to plexSort [phi:main::@10->plexSort] - plexSort_from___b10: - jsr plexSort + // [17] call plexInit + // Initialize the multiplexer + // [96] phi from main::@10 to plexInit [phi:main::@10->plexInit] + plexInit_from___b10: + jsr plexInit + // [18] phi from main::@10 to main::toD0181 [phi:main::@10->main::toD0181] + toD0181_from___b10: + jmp toD0181 + // main::toD0181 + toD0181: + jmp __b8 + // main::@8 + __b8: + // [19] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 + // Show screen + lda #toD0181_return + sta D018 + // [20] phi from main::@8 to main::@1 [phi:main::@8->main::@1] + __b1_from___b8: + // [20] phi (byte) main::x#2 = (byte) 0 [phi:main::@8->main::@1#0] -- vbuxx=vbuc1 + ldx #0 + // [20] phi (byte) main::s#2 = (byte) 0 [phi:main::@8->main::@1#1] -- vbuz1=vbuc1 + lda #0 + sta.z s + jmp __b1 + // Set the x-positions & pointers + // main::@1 + __b1: + // [21] if((byte) main::s#2<(const nomodify byte) PLEX_COUNT) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z s + cmp #PLEX_COUNT + bcc __b2 + jmp __b3 + // main::@3 + __b3: + // [22] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // Enable & initialize sprites + lda #$ff + sta SPRITES_ENABLE + // [23] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + __b4_from___b3: + // [23] phi (byte) main::s1#2 = (byte) 0 [phi:main::@3->main::@4#0] -- vbuxx=vbuc1 + ldx #0 + jmp __b4 + // [23] phi from main::@4 to main::@4 [phi:main::@4->main::@4] + __b4_from___b4: + // [23] phi (byte) main::s1#2 = (byte) main::s1#1 [phi:main::@4->main::@4#0] -- register_copy + jmp __b4 + // main::@4 + __b4: + // [24] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE -- pbuc1_derefidx_vbuxx=vbuc2 + lda #WHITE + sta SPRITES_COLS,x + // [25] (byte) main::s1#1 ← ++ (byte) main::s1#2 -- vbuxx=_inc_vbuxx + inx + // [26] if((byte) main::s1#1!=(byte) 8) goto main::@4 -- vbuxx_neq_vbuc1_then_la1 + cpx #8 + bne __b4_from___b4 + // [27] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + __b5_from___b4: + jmp __b5 + // main::@5 + __b5: + // [28] call plex_move + // Move the sprites + // [76] phi from main::@5 to plex_move [phi:main::@5->plex_move] + plex_move_from___b5: + // [76] phi (byte*) scroll_text_next#25 = (const byte*) SCROLL_TEXT [phi:main::@5->plex_move#0] -- pbuz1=pbuc1 + lda #SCROLL_TEXT + sta.z scroll_text_next+1 + // [76] phi (byte) sin_idx#10 = (byte) 0 [phi:main::@5->plex_move#1] -- vbuz1=vbuc1 + lda #0 + sta.z sin_idx + jsr plex_move + // [29] phi from main::@5 to main::@11 [phi:main::@5->main::@11] + __b11_from___b5: jmp __b11 // main::@11 __b11: + // [30] call plexSort + // Sort the sprites by y-position + // [51] phi from main::@11 to plexSort [phi:main::@11->plexSort] + plexSort_from___b11: + jsr plexSort + jmp __b12 + // main::@12 + __b12: // asm { sei } // Enable the plex IRQ sei - // [38] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT - // [39] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to 0x00 lda #$7f and VIC_CONTROL sta VIC_CONTROL - // [40] *((const nomodify byte*) RASTER) ← (byte) $28 -- _deref_pbuc1=vbuc2 + // [34] *((const nomodify byte*) RASTER) ← (byte) $28 -- _deref_pbuc1=vbuc2 lda #$28 sta RASTER - // [41] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [35] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE - // [42] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [36] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge any IRQ lda #IRQ_RASTER sta IRQ_STATUS - // [43] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() -- _deref_pptc1=pprc2 + // [37] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #main::@6] - __b6_from___b5: jmp __b6 // main::@6 __b6: - // [47] call plexSine + // [39] if((volatile bool) frame_done) goto main::@7 -- vboz1_then_la1 + lda.z frame_done + cmp #0 + bne __b7 + jmp __b6 + // main::@7 + __b7: + // [40] (volatile bool) frame_done ← false -- vboz1=vboc1 + lda #0 + sta.z frame_done + // [41] call plex_move //*BORDERCOL = RED; // Move the sprites - // [76] phi from main::@6 to plexSine [phi:main::@6->plexSine] - plexSine_from___b6: - // [76] phi (byte) sin_idx#10 = (byte) sin_idx#12 [phi:main::@6->plexSine#0] -- register_copy - jsr plexSine - // [48] phi from main::@6 to main::@12 [phi:main::@6->main::@12] - __b12_from___b6: - jmp __b12 - // main::@12 - __b12: - // [49] call plexSort - // Sort the sprites by y-position - // [51] phi from main::@12 to plexSort [phi:main::@12->plexSort] - plexSort_from___b12: - jsr plexSort + // [76] phi from main::@7 to plex_move [phi:main::@7->plex_move] + plex_move_from___b7: + // [76] phi (byte*) scroll_text_next#25 = (byte*) scroll_text_next#13 [phi:main::@7->plex_move#0] -- register_copy + // [76] phi (byte) sin_idx#10 = (byte) sin_idx#12 [phi:main::@7->plex_move#1] -- register_copy + jsr plex_move + // [42] phi from main::@7 to main::@13 [phi:main::@7->main::@13] + __b13_from___b7: jmp __b13 // main::@13 __b13: - // [50] (volatile bool) framedone ← false -- vboz1=vboc1 - //*BORDERCOL = GREEN; - lda #0 - sta.z framedone - jmp __b5 + // [43] call plexSort + // Sort the sprites by y-position + // [51] phi from main::@13 to plexSort [phi:main::@13->plexSort] + plexSort_from___b13: + jsr plexSort + jmp __b6 + // main::@2 + __b2: + // [44] (byte~) main::$7 ← (const byte) toSpritePtr1_return#0 + (byte) main::s#2 -- vbuaa=vbuc1_plus_vbuz1 + lda #toSpritePtr1_return + clc + adc.z s + // [45] *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte~) main::$7 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z s + sta PLEX_PTR,y + // [46] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1 -- vbuyy=vbuz1_rol_1 + lda.z s + asl + tay + // [47] (word~) main::$13 ← *((const nomodify byte*) XMOVEMENT_HI + (byte) main::x#2) w= *((const byte*) XMOVEMENT + (byte) main::x#2) -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx + lda XMOVEMENT_HI,x + sta.z __13+1 + lda XMOVEMENT,x + sta.z __13 + // [48] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word~) main::$13 -- pwuc1_derefidx_vbuyy=vwuz1 + lda.z __13 + sta PLEX_XPOS,y + lda.z __13+1 + sta PLEX_XPOS+1,y + // [49] (byte) main::x#1 ← (byte) main::x#2 + (byte) 8 -- vbuxx=vbuxx_plus_vbuc1 + txa + axs #-[8] + // [50] (byte) main::s#1 ← ++ (byte) main::s#2 -- vbuz1=_inc_vbuz1 + inc.z s + // [20] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + __b1_from___b2: + // [20] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@2->main::@1#0] -- register_copy + // [20] phi (byte) main::s#2 = (byte) main::s#1 [phi:main::@2->main::@1#1] -- register_copy + jmp __b1 } // plexSort // Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions in PLEX_YPOS @@ -5061,9 +5516,9 @@ main: { // 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 = 5 + .label nxt_idx = $17 + .label nxt_y = $16 + .label m = 9 // [52] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] __b1_from_plexSort: // [52] phi (byte) plexSort::m#2 = (byte) 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 @@ -5184,78 +5639,151 @@ plexSort: { // [75] return rts } - // plexSine -// Move the plex sprites in an Y-sine -plexSine: { - // [77] (byte) plexSine::y_idx#0 ← (byte) sin_idx#10 -- vbuxx=vbuz1 - // Assign sinus positions + // plex_move +// Move the plex sprites in an Y-sine and scroll them to the left. +plex_move: { + .label s = 9 + // [77] (byte) plex_move::y_idx#0 ← (byte) sin_idx#10 -- vbuxx=vbuz1 ldx.z sin_idx - // [78] phi from plexSine to plexSine::@1 [phi:plexSine->plexSine::@1] - __b1_from_plexSine: - // [78] phi (byte) plexSine::sy#2 = (byte) 0 [phi:plexSine->plexSine::@1#0] -- vbuyy=vbuc1 - ldy #0 - // [78] phi (byte) plexSine::y_idx#2 = (byte) plexSine::y_idx#0 [phi:plexSine->plexSine::@1#1] -- register_copy + // [78] phi from plex_move to plex_move::@1 [phi:plex_move->plex_move::@1] + __b1_from_plex_move: + // [78] phi (byte*) scroll_text_next#11 = (byte*) scroll_text_next#25 [phi:plex_move->plex_move::@1#0] -- register_copy + // [78] phi (byte) plex_move::s#2 = (byte) 0 [phi:plex_move->plex_move::@1#1] -- vbuz1=vbuc1 + lda #0 + sta.z s + // [78] phi (byte) plex_move::y_idx#2 = (byte) plex_move::y_idx#0 [phi:plex_move->plex_move::@1#2] -- register_copy jmp __b1 - // [78] phi from plexSine::@1 to plexSine::@1 [phi:plexSine::@1->plexSine::@1] - __b1_from___b1: - // [78] phi (byte) plexSine::sy#2 = (byte) plexSine::sy#1 [phi:plexSine::@1->plexSine::@1#0] -- register_copy - // [78] phi (byte) plexSine::y_idx#2 = (byte) plexSine::y_idx#1 [phi:plexSine::@1->plexSine::@1#1] -- register_copy + // [78] phi from plex_move::@2 to plex_move::@1 [phi:plex_move::@2->plex_move::@1] + __b1_from___b2: + // [78] phi (byte*) scroll_text_next#11 = (byte*) scroll_text_next#13 [phi:plex_move::@2->plex_move::@1#0] -- register_copy + // [78] phi (byte) plex_move::s#2 = (byte) plex_move::s#1 [phi:plex_move::@2->plex_move::@1#1] -- register_copy + // [78] phi (byte) plex_move::y_idx#2 = (byte) plex_move::y_idx#1 [phi:plex_move::@2->plex_move::@1#2] -- register_copy jmp __b1 - // plexSine::@1 + // plex_move::@1 __b1: - // [79] *((const byte*) PLEX_YPOS + (byte) plexSine::sy#2) ← *((const byte*) YSIN + (byte) plexSine::y_idx#2) -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx + // [79] *((const byte*) PLEX_YPOS + (byte) plex_move::s#2) ← *((const byte*) YSIN + (byte) plex_move::y_idx#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuxx + // Assign sine value lda YSIN,x + ldy.z s sta PLEX_YPOS,y - // [80] (byte) plexSine::y_idx#1 ← (byte) plexSine::y_idx#2 + (byte) 8 -- vbuxx=vbuxx_plus_vbuc1 + // [80] (byte) plex_move::y_idx#1 ← (byte) plex_move::y_idx#2 + (byte) 8 -- vbuxx=vbuxx_plus_vbuc1 txa axs #-[8] - // [81] (byte) plexSine::sy#1 ← ++ (byte) plexSine::sy#2 -- vbuyy=_inc_vbuyy - iny - // [82] if((byte) plexSine::sy#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexSine::@1 -- vbuyy_neq_vbuc1_then_la1 - cpy #PLEX_COUNT-1+1 - bne __b1_from___b1 + // [81] (byte~) plex_move::$6 ← (byte) plex_move::s#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z s + asl + // [82] if(*((const word*) PLEX_XPOS + (byte~) plex_move::$6)!=(byte) 0) goto plex_move::@2 -- pwuc1_derefidx_vbuaa_neq_0_then_la1 + tay + lda PLEX_XPOS+1,y + bne __b2_from___b1 + lda PLEX_XPOS,y + bne __b2_from___b1 + jmp __b4 + // plex_move::@4 + __b4: + // [83] (byte~) plex_move::$7 ← (byte) plex_move::s#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z s + asl + // [84] *((const word*) PLEX_XPOS + (byte~) plex_move::$7) ← (word)(number) $b*(number) $20 -- pwuc1_derefidx_vbuaa=vwuc2 + // Move sprite to far right + tay + lda #<$b*$20 + sta PLEX_XPOS,y + lda #>$b*$20 + sta PLEX_XPOS+1,y + // [85] if(*((byte*) scroll_text_next#11)!=(byte) 0) goto plex_move::@6 -- _deref_pbuz1_neq_0_then_la1 + ldy #0 + lda (scroll_text_next),y + cmp #0 + bne __b6_from___b4 + // [87] phi from plex_move::@4 to plex_move::@3 [phi:plex_move::@4->plex_move::@3] + __b3_from___b4: + // [87] phi (byte*) scroll_text_next#12 = (const byte*) SCROLL_TEXT [phi:plex_move::@4->plex_move::@3#0] -- pbuz1=pbuc1 + lda #SCROLL_TEXT + sta.z scroll_text_next+1 + jmp __b3 + // [86] phi from plex_move::@4 to plex_move::@6 [phi:plex_move::@4->plex_move::@6] + __b6_from___b4: + jmp __b6 + // plex_move::@6 + __b6: + // [87] phi from plex_move::@6 to plex_move::@3 [phi:plex_move::@6->plex_move::@3] + __b3_from___b6: + // [87] phi (byte*) scroll_text_next#12 = (byte*) scroll_text_next#11 [phi:plex_move::@6->plex_move::@3#0] -- register_copy + jmp __b3 + // plex_move::@3 + __b3: + // [88] (byte~) plex_move::$4 ← (const byte) toSpritePtr1_return#0 + *((byte*) scroll_text_next#12) -- vbuaa=vbuc1_plus__deref_pbuz1 + lda #toSpritePtr1_return + clc + ldy #0 + adc (scroll_text_next),y + // [89] *((const byte*) PLEX_PTR + (byte) plex_move::s#2) ← (byte~) plex_move::$4 -- pbuc1_derefidx_vbuz1=vbuaa + // Read next char from the scroll text + ldy.z s + sta PLEX_PTR,y + // [90] (byte*) scroll_text_next#4 ← ++ (byte*) scroll_text_next#12 -- pbuz1=_inc_pbuz1 + inc.z scroll_text_next + bne !+ + inc.z scroll_text_next+1 + !: + // [91] phi from plex_move::@1 plex_move::@3 to plex_move::@2 [phi:plex_move::@1/plex_move::@3->plex_move::@2] + __b2_from___b1: + __b2_from___b3: + // [91] phi (byte*) scroll_text_next#13 = (byte*) scroll_text_next#11 [phi:plex_move::@1/plex_move::@3->plex_move::@2#0] -- register_copy jmp __b2 - // plexSine::@2 + // plex_move::@2 __b2: - // [83] (byte) sin_idx#12 ← (byte) sin_idx#10 + (byte) 1 -- vbuz1=vbuz1_plus_1 + // [92] (byte) plex_move::s#1 ← ++ (byte) plex_move::s#2 -- vbuz1=_inc_vbuz1 + inc.z s + // [93] if((byte) plex_move::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plex_move::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #PLEX_COUNT-1+1 + cmp.z s + bne __b1_from___b2 + jmp __b5 + // plex_move::@5 + __b5: + // [94] (byte) sin_idx#12 ← (byte) sin_idx#10 + (byte) 1 -- vbuz1=vbuz1_plus_1 inc.z sin_idx jmp __breturn - // plexSine::@return + // plex_move::@return __breturn: - // [84] return + // [95] return rts } // plexInit // Initialize the multiplexer data structures plexInit: { - // [86] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] + // [97] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] plexSetScreen1_from_plexInit: jmp plexSetScreen1 // plexInit::plexSetScreen1 plexSetScreen1: - // [87] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] + // [98] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] __b1_from_plexSetScreen1: - // [87] phi (byte) plexInit::i#2 = (byte) 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 + // [98] phi (byte) plexInit::i#2 = (byte) 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 ldx #0 jmp __b1 - // [87] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] + // [98] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] __b1_from___b1: - // [87] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy + // [98] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy jmp __b1 // plexInit::@1 __b1: - // [88] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx + // [99] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx txa sta PLEX_SORTED_IDX,x - // [89] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 -- vbuxx=_inc_vbuxx + // [100] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 -- vbuxx=_inc_vbuxx inx - // [90] if((byte) plexInit::i#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1 + // [101] if((byte) plexInit::i#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #PLEX_COUNT-1+1 bne __b1_from___b1 jmp __breturn // plexInit::@return __breturn: - // [91] return + // [102] return rts } // font_2x2_to_sprites @@ -5265,43 +5793,43 @@ plexInit: { // - num_chars The number of chars to convert font_2x2_to_sprites: { .const num_chars = $40 - .label __3 = $18 + .label __3 = $17 .label char_right = $d .label sprite_idx = $a .label char_left = $b - .label char_current = 6 - .label sprite = 8 - .label c = 5 - // [93] phi from font_2x2_to_sprites to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1] + .label char_current = 5 + .label sprite = 7 + .label c = 9 + // [104] 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: - // [93] phi (byte*) font_2x2_to_sprites::sprite#4 = (const nomodify byte*) SPRITES [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#0] -- pbuz1=pbuc1 + // [104] phi (byte*) font_2x2_to_sprites::sprite#4 = (const nomodify byte*) SPRITES [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#0] -- pbuz1=pbuc1 lda #SPRITES sta.z sprite+1 - // [93] phi (byte*) font_2x2_to_sprites::char_current#2 = (const nomodify byte*) FONT [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#1] -- pbuz1=pbuc1 + // [104] phi (byte*) font_2x2_to_sprites::char_current#2 = (const byte*) FONT [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#1] -- pbuz1=pbuc1 lda #FONT sta.z char_current+1 - // [93] phi (byte) font_2x2_to_sprites::c#2 = (byte) 0 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#2] -- vbuz1=vbuc1 + // [104] phi (byte) font_2x2_to_sprites::c#2 = (byte) 0 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#2] -- vbuz1=vbuc1 lda #0 sta.z c jmp __b1 // font_2x2_to_sprites::@1 __b1: - // [94] if((byte) font_2x2_to_sprites::c#2<(const byte) font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2 -- vbuz1_lt_vbuc1_then_la1 + // [105] if((byte) font_2x2_to_sprites::c#2<(const byte) font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z c cmp #num_chars bcc __b2 jmp __breturn // font_2x2_to_sprites::@return __breturn: - // [95] return + // [106] return rts // font_2x2_to_sprites::@2 __b2: - // [96] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [107] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z char_current clc adc #<$40*8 @@ -5309,98 +5837,98 @@ font_2x2_to_sprites: { lda.z char_current+1 adc #>$40*8 sta.z char_right+1 - // [97] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) font_2x2_to_sprites::char_current#2 -- pbuz1=pbuz2 + // [108] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) font_2x2_to_sprites::char_current#2 -- pbuz1=pbuz2 lda.z char_current sta.z char_left lda.z char_current+1 sta.z char_left+1 - // [98] phi from font_2x2_to_sprites::@2 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3] + // [109] phi from font_2x2_to_sprites::@2 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3] __b3_from___b2: - // [98] phi (byte*) font_2x2_to_sprites::char_right#3 = (byte*) font_2x2_to_sprites::char_right#0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#0] -- register_copy - // [98] phi (byte) font_2x2_to_sprites::sprite_idx#4 = (byte) 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#1] -- vbuz1=vbuc1 + // [109] phi (byte*) font_2x2_to_sprites::char_right#3 = (byte*) font_2x2_to_sprites::char_right#0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#0] -- register_copy + // [109] phi (byte) font_2x2_to_sprites::sprite_idx#4 = (byte) 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#1] -- vbuz1=vbuc1 lda #0 sta.z sprite_idx - // [98] phi (byte*) font_2x2_to_sprites::char_left#3 = (byte*) font_2x2_to_sprites::char_left#6 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#2] -- register_copy - // [98] phi (byte) font_2x2_to_sprites::i#2 = (byte) 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#3] -- vbuxx=vbuc1 + // [109] phi (byte*) font_2x2_to_sprites::char_left#3 = (byte*) font_2x2_to_sprites::char_left#6 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#2] -- register_copy + // [109] phi (byte) font_2x2_to_sprites::i#2 = (byte) 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#3] -- vbuxx=vbuc1 ldx #0 jmp __b3 - // [98] phi from font_2x2_to_sprites::@5 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3] + // [109] phi from font_2x2_to_sprites::@5 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3] __b3_from___b5: - // [98] phi (byte*) font_2x2_to_sprites::char_right#3 = (byte*) font_2x2_to_sprites::char_right#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#0] -- register_copy - // [98] phi (byte) font_2x2_to_sprites::sprite_idx#4 = (byte) font_2x2_to_sprites::sprite_idx#3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#1] -- register_copy - // [98] phi (byte*) font_2x2_to_sprites::char_left#3 = (byte*) font_2x2_to_sprites::char_left#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#2] -- register_copy - // [98] phi (byte) font_2x2_to_sprites::i#2 = (byte) font_2x2_to_sprites::i#1 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#3] -- register_copy + // [109] phi (byte*) font_2x2_to_sprites::char_right#3 = (byte*) font_2x2_to_sprites::char_right#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#0] -- register_copy + // [109] phi (byte) font_2x2_to_sprites::sprite_idx#4 = (byte) font_2x2_to_sprites::sprite_idx#3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#1] -- register_copy + // [109] phi (byte*) font_2x2_to_sprites::char_left#3 = (byte*) font_2x2_to_sprites::char_left#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#2] -- register_copy + // [109] phi (byte) font_2x2_to_sprites::i#2 = (byte) font_2x2_to_sprites::i#1 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#3] -- register_copy jmp __b3 // font_2x2_to_sprites::@3 __b3: - // [99] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 + // [110] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 lda #7 sax.z __3 - // [100] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) font_2x2_to_sprites::$3) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 + // [111] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) font_2x2_to_sprites::$3) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 ldy.z __3 lda (char_left),y ldy.z sprite_idx sta (sprite),y - // [101] (byte) font_2x2_to_sprites::sprite_idx#1 ← ++ (byte) font_2x2_to_sprites::sprite_idx#4 -- vbuz1=_inc_vbuz1 + // [112] (byte) font_2x2_to_sprites::sprite_idx#1 ← ++ (byte) font_2x2_to_sprites::sprite_idx#4 -- vbuz1=_inc_vbuz1 inc.z sprite_idx - // [102] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) font_2x2_to_sprites::$3) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 + // [113] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) font_2x2_to_sprites::$3) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 ldy.z __3 lda (char_right),y ldy.z sprite_idx sta (sprite),y - // [103] (byte) font_2x2_to_sprites::sprite_idx#2 ← ++ (byte) font_2x2_to_sprites::sprite_idx#1 -- vbuyy=_inc_vbuz1 + // [114] (byte) font_2x2_to_sprites::sprite_idx#2 ← ++ (byte) font_2x2_to_sprites::sprite_idx#1 -- vbuyy=_inc_vbuz1 ldy.z sprite_idx iny - // [104] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + // [115] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 lda #0 sta (sprite),y - // [105] (byte) font_2x2_to_sprites::sprite_idx#3 ← ++ (byte) font_2x2_to_sprites::sprite_idx#2 -- vbuz1=_inc_vbuyy + // [116] (byte) font_2x2_to_sprites::sprite_idx#3 ← ++ (byte) font_2x2_to_sprites::sprite_idx#2 -- vbuz1=_inc_vbuyy iny sty.z sprite_idx - // [106] if((byte) font_2x2_to_sprites::i#2==(byte) 7) goto font_2x2_to_sprites::@4 -- vbuxx_eq_vbuc1_then_la1 + // [117] if((byte) font_2x2_to_sprites::i#2==(byte) 7) goto font_2x2_to_sprites::@4 -- vbuxx_eq_vbuc1_then_la1 cpx #7 beq __b4 jmp __b6 // font_2x2_to_sprites::@6 __b6: - // [107] if((byte) font_2x2_to_sprites::i#2!=(byte) $f) goto font_2x2_to_sprites::@8 -- vbuxx_neq_vbuc1_then_la1 + // [118] if((byte) font_2x2_to_sprites::i#2!=(byte) $f) goto font_2x2_to_sprites::@8 -- vbuxx_neq_vbuc1_then_la1 cpx #$f bne __b8_from___b6 - // [109] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5] + // [120] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5] __b5_from___b6: - // [109] phi (byte*) font_2x2_to_sprites::char_right#4 = (const nomodify byte*) FONT+(byte) ' '*(byte) 8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#0] -- pbuz1=pbuc1 + // [120] phi (byte*) font_2x2_to_sprites::char_right#4 = (const byte*) FONT+(byte) ' '*(byte) 8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#0] -- pbuz1=pbuc1 lda #FONT+' '*8 sta.z char_right+1 - // [109] phi (byte*) font_2x2_to_sprites::char_left#4 = (const nomodify byte*) FONT+(byte) ' '*(byte) 8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#1] -- pbuz1=pbuc1 + // [120] phi (byte*) font_2x2_to_sprites::char_left#4 = (const byte*) FONT+(byte) ' '*(byte) 8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#1] -- pbuz1=pbuc1 lda #FONT+' '*8 sta.z char_left+1 jmp __b5 - // [108] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@8] + // [119] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@8] __b8_from___b6: jmp __b8 // font_2x2_to_sprites::@8 __b8: - // [109] phi from font_2x2_to_sprites::@4 font_2x2_to_sprites::@8 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5] + // [120] phi from font_2x2_to_sprites::@4 font_2x2_to_sprites::@8 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5] __b5_from___b4: __b5_from___b8: - // [109] phi (byte*) font_2x2_to_sprites::char_right#4 = (byte*) font_2x2_to_sprites::char_right#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#0] -- register_copy - // [109] phi (byte*) font_2x2_to_sprites::char_left#4 = (byte*) font_2x2_to_sprites::char_left#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#1] -- register_copy + // [120] phi (byte*) font_2x2_to_sprites::char_right#4 = (byte*) font_2x2_to_sprites::char_right#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#0] -- register_copy + // [120] phi (byte*) font_2x2_to_sprites::char_left#4 = (byte*) font_2x2_to_sprites::char_left#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#1] -- register_copy jmp __b5 // font_2x2_to_sprites::@5 __b5: - // [110] (byte) font_2x2_to_sprites::i#1 ← ++ (byte) font_2x2_to_sprites::i#2 -- vbuxx=_inc_vbuxx + // [121] (byte) font_2x2_to_sprites::i#1 ← ++ (byte) font_2x2_to_sprites::i#2 -- vbuxx=_inc_vbuxx inx - // [111] if((byte) font_2x2_to_sprites::i#1!=(byte) $15) goto font_2x2_to_sprites::@3 -- vbuxx_neq_vbuc1_then_la1 + // [122] if((byte) font_2x2_to_sprites::i#1!=(byte) $15) goto font_2x2_to_sprites::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #$15 bne __b3_from___b5 jmp __b7 // font_2x2_to_sprites::@7 __b7: - // [112] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [123] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z char_current @@ -5408,7 +5936,7 @@ font_2x2_to_sprites: { bcc !+ inc.z char_current+1 !: - // [113] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40 -- pbuz1=pbuz1_plus_vbuc1 + // [124] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40 -- pbuz1=pbuz1_plus_vbuc1 lda #$40 clc adc.z sprite @@ -5416,17 +5944,17 @@ font_2x2_to_sprites: { bcc !+ inc.z sprite+1 !: - // [114] (byte) font_2x2_to_sprites::c#1 ← ++ (byte) font_2x2_to_sprites::c#2 -- vbuz1=_inc_vbuz1 + // [125] (byte) font_2x2_to_sprites::c#1 ← ++ (byte) font_2x2_to_sprites::c#2 -- vbuz1=_inc_vbuz1 inc.z c - // [93] phi from font_2x2_to_sprites::@7 to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1] + // [104] phi from font_2x2_to_sprites::@7 to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1] __b1_from___b7: - // [93] phi (byte*) font_2x2_to_sprites::sprite#4 = (byte*) font_2x2_to_sprites::sprite#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#0] -- register_copy - // [93] phi (byte*) font_2x2_to_sprites::char_current#2 = (byte*) font_2x2_to_sprites::char_current#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#1] -- register_copy - // [93] phi (byte) font_2x2_to_sprites::c#2 = (byte) font_2x2_to_sprites::c#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#2] -- register_copy + // [104] phi (byte*) font_2x2_to_sprites::sprite#4 = (byte*) font_2x2_to_sprites::sprite#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#0] -- register_copy + // [104] phi (byte*) font_2x2_to_sprites::char_current#2 = (byte*) font_2x2_to_sprites::char_current#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#1] -- register_copy + // [104] phi (byte) font_2x2_to_sprites::c#2 = (byte) font_2x2_to_sprites::c#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#2] -- register_copy jmp __b1 // font_2x2_to_sprites::@4 __b4: - // [115] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [126] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z char_current clc adc #<$80*8 @@ -5434,7 +5962,7 @@ font_2x2_to_sprites: { lda.z char_current+1 adc #>$80*8 sta.z char_left+1 - // [116] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [127] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z char_current clc adc #<$c0*8 @@ -5452,43 +5980,43 @@ font_2x2_to_sprites: { // - 0x80 - 0xbf Lower left glyphs // - 0xc0 - 0xff Lower right glyphs font_2x2: { - .label __5 = $f - .label __7 = $f - .label next_2x2_left = 6 + .label __5 = $14 + .label __7 = $14 + .label next_2x2_left = 5 .label next_2x2_right = $d - .label glyph_bits = $18 - .label glyph_bits_2x2 = $f + .label glyph_bits = $16 + .label glyph_bits_2x2 = $14 .label l2 = $17 - .label l = $16 + .label l = $a .label next_2x2_left_1 = $b - .label next_2x2 = 6 - .label next_original = 8 - .label c = $a - // [118] phi from font_2x2 to font_2x2::@1 [phi:font_2x2->font_2x2::@1] + .label next_2x2 = 5 + .label next_original = 7 + .label c = 9 + // [129] phi from font_2x2 to font_2x2::@1 [phi:font_2x2->font_2x2::@1] __b1_from_font_2x2: - // [118] phi (byte) font_2x2::c#11 = (byte) 0 [phi:font_2x2->font_2x2::@1#0] -- vbuz1=vbuc1 + // [129] phi (byte) font_2x2::c#11 = (byte) 0 [phi:font_2x2->font_2x2::@1#0] -- vbuz1=vbuc1 lda #0 sta.z c - // [118] phi (byte*) font_2x2::next_original#4 = (const nomodify byte*) CHARGEN [phi:font_2x2->font_2x2::@1#1] -- pbuz1=pbuc1 + // [129] phi (byte*) font_2x2::next_original#4 = (const nomodify byte*) CHARGEN [phi:font_2x2->font_2x2::@1#1] -- pbuz1=pbuc1 lda #CHARGEN sta.z next_original+1 - // [118] phi (byte*) font_2x2::next_2x2_left#0 = (const nomodify byte*) FONT [phi:font_2x2->font_2x2::@1#2] -- pbuz1=pbuc1 + // [129] phi (byte*) font_2x2::next_2x2_left#0 = (const byte*) FONT [phi:font_2x2->font_2x2::@1#2] -- pbuz1=pbuc1 lda #FONT sta.z next_2x2_left+1 jmp __b1 - // [118] phi from font_2x2::@9 to font_2x2::@1 [phi:font_2x2::@9->font_2x2::@1] + // [129] phi from font_2x2::@9 to font_2x2::@1 [phi:font_2x2::@9->font_2x2::@1] __b1_from___b9: - // [118] phi (byte) font_2x2::c#11 = (byte) font_2x2::c#1 [phi:font_2x2::@9->font_2x2::@1#0] -- register_copy - // [118] phi (byte*) font_2x2::next_original#4 = (byte*) font_2x2::next_original#1 [phi:font_2x2::@9->font_2x2::@1#1] -- register_copy - // [118] phi (byte*) font_2x2::next_2x2_left#0 = (byte*) font_2x2::next_2x2#1 [phi:font_2x2::@9->font_2x2::@1#2] -- register_copy + // [129] phi (byte) font_2x2::c#11 = (byte) font_2x2::c#1 [phi:font_2x2::@9->font_2x2::@1#0] -- register_copy + // [129] phi (byte*) font_2x2::next_original#4 = (byte*) font_2x2::next_original#1 [phi:font_2x2::@9->font_2x2::@1#1] -- register_copy + // [129] phi (byte*) font_2x2::next_2x2_left#0 = (byte*) font_2x2::next_2x2#1 [phi:font_2x2::@9->font_2x2::@1#2] -- register_copy jmp __b1 // font_2x2::@1 __b1: - // [119] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [130] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z next_2x2_left clc adc #<$40*8 @@ -5496,136 +6024,136 @@ font_2x2: { lda.z next_2x2_left+1 adc #>$40*8 sta.z next_2x2_right+1 - // [120] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0 -- pbuz1=pbuz2 + // [131] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0 -- pbuz1=pbuz2 lda.z next_2x2_left sta.z next_2x2_left_1 lda.z next_2x2_left+1 sta.z next_2x2_left_1+1 - // [121] phi from font_2x2::@1 to font_2x2::@2 [phi:font_2x2::@1->font_2x2::@2] + // [132] phi from font_2x2::@1 to font_2x2::@2 [phi:font_2x2::@1->font_2x2::@2] __b2_from___b1: - // [121] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#0 [phi:font_2x2::@1->font_2x2::@2#0] -- register_copy - // [121] phi (byte) font_2x2::l2#8 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#1] -- vbuz1=vbuc1 + // [132] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#0 [phi:font_2x2::@1->font_2x2::@2#0] -- register_copy + // [132] phi (byte) font_2x2::l2#8 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#1] -- vbuz1=vbuc1 lda #0 sta.z l2 - // [121] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#10 [phi:font_2x2::@1->font_2x2::@2#2] -- register_copy - // [121] phi (byte) font_2x2::l#2 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#3] -- vbuz1=vbuc1 + // [132] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#10 [phi:font_2x2::@1->font_2x2::@2#2] -- register_copy + // [132] phi (byte) font_2x2::l#2 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#3] -- vbuz1=vbuc1 lda #0 sta.z l jmp __b2 - // [121] phi from font_2x2::@8 to font_2x2::@2 [phi:font_2x2::@8->font_2x2::@2] + // [132] phi from font_2x2::@8 to font_2x2::@2 [phi:font_2x2::@8->font_2x2::@2] __b2_from___b8: - // [121] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#8 [phi:font_2x2::@8->font_2x2::@2#0] -- register_copy - // [121] phi (byte) font_2x2::l2#8 = (byte) font_2x2::l2#9 [phi:font_2x2::@8->font_2x2::@2#1] -- register_copy - // [121] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#8 [phi:font_2x2::@8->font_2x2::@2#2] -- register_copy - // [121] phi (byte) font_2x2::l#2 = (byte) font_2x2::l#1 [phi:font_2x2::@8->font_2x2::@2#3] -- register_copy + // [132] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#8 [phi:font_2x2::@8->font_2x2::@2#0] -- register_copy + // [132] phi (byte) font_2x2::l2#8 = (byte) font_2x2::l2#9 [phi:font_2x2::@8->font_2x2::@2#1] -- register_copy + // [132] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#8 [phi:font_2x2::@8->font_2x2::@2#2] -- register_copy + // [132] phi (byte) font_2x2::l#2 = (byte) font_2x2::l#1 [phi:font_2x2::@8->font_2x2::@2#3] -- register_copy jmp __b2 // font_2x2::@2 __b2: - // [122] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2) -- vbuz1=pbuz2_derefidx_vbuz3 + // [133] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2) -- vbuz1=pbuz2_derefidx_vbuz3 ldy.z l lda (next_original),y sta.z glyph_bits - // [123] phi from font_2x2::@2 to font_2x2::@3 [phi:font_2x2::@2->font_2x2::@3] + // [134] phi from font_2x2::@2 to font_2x2::@3 [phi:font_2x2::@2->font_2x2::@3] __b3_from___b2: - // [123] phi (byte) font_2x2::b#2 = (byte) 0 [phi:font_2x2::@2->font_2x2::@3#0] -- vbuyy=vbuc1 + // [134] phi (byte) font_2x2::b#2 = (byte) 0 [phi:font_2x2::@2->font_2x2::@3#0] -- vbuyy=vbuc1 ldy #0 - // [123] phi (word) font_2x2::glyph_bits_2x2#3 = (word) 0 [phi:font_2x2::@2->font_2x2::@3#1] -- vwuz1=vwuc1 + // [134] phi (word) font_2x2::glyph_bits_2x2#3 = (word) 0 [phi:font_2x2::@2->font_2x2::@3#1] -- vwuz1=vwuc1 lda #<0 sta.z glyph_bits_2x2 lda #>0 sta.z glyph_bits_2x2+1 - // [123] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#0 [phi:font_2x2::@2->font_2x2::@3#2] -- register_copy + // [134] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#0 [phi:font_2x2::@2->font_2x2::@3#2] -- register_copy jmp __b3 - // [123] phi from font_2x2::@5 to font_2x2::@3 [phi:font_2x2::@5->font_2x2::@3] + // [134] phi from font_2x2::@5 to font_2x2::@3 [phi:font_2x2::@5->font_2x2::@3] __b3_from___b5: - // [123] phi (byte) font_2x2::b#2 = (byte) font_2x2::b#1 [phi:font_2x2::@5->font_2x2::@3#0] -- register_copy - // [123] phi (word) font_2x2::glyph_bits_2x2#3 = (word) font_2x2::glyph_bits_2x2#2 [phi:font_2x2::@5->font_2x2::@3#1] -- register_copy - // [123] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#1 [phi:font_2x2::@5->font_2x2::@3#2] -- register_copy + // [134] phi (byte) font_2x2::b#2 = (byte) font_2x2::b#1 [phi:font_2x2::@5->font_2x2::@3#0] -- register_copy + // [134] phi (word) font_2x2::glyph_bits_2x2#3 = (word) font_2x2::glyph_bits_2x2#2 [phi:font_2x2::@5->font_2x2::@3#1] -- register_copy + // [134] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#1 [phi:font_2x2::@5->font_2x2::@3#2] -- register_copy jmp __b3 // font_2x2::@3 __b3: - // [124] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80 -- vbuaa=vbuz1_band_vbuc1 + // [135] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80 -- vbuaa=vbuz1_band_vbuc1 lda #$80 and.z glyph_bits - // [125] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4 -- vbuc1_neq_vbuaa_then_la1 + // [136] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne __b4_from___b3 - // [127] phi from font_2x2::@3 to font_2x2::@5 [phi:font_2x2::@3->font_2x2::@5] + // [138] phi from font_2x2::@3 to font_2x2::@5 [phi:font_2x2::@3->font_2x2::@5] __b5_from___b3: - // [127] phi (byte) font_2x2::glyph_bit#0 = (byte) 0 [phi:font_2x2::@3->font_2x2::@5#0] -- vbuxx=vbuc1 + // [138] phi (byte) font_2x2::glyph_bit#0 = (byte) 0 [phi:font_2x2::@3->font_2x2::@5#0] -- vbuxx=vbuc1 ldx #0 jmp __b5 - // [126] phi from font_2x2::@3 to font_2x2::@4 [phi:font_2x2::@3->font_2x2::@4] + // [137] phi from font_2x2::@3 to font_2x2::@4 [phi:font_2x2::@3->font_2x2::@4] __b4_from___b3: jmp __b4 // font_2x2::@4 __b4: - // [127] phi from font_2x2::@4 to font_2x2::@5 [phi:font_2x2::@4->font_2x2::@5] + // [138] phi from font_2x2::@4 to font_2x2::@5 [phi:font_2x2::@4->font_2x2::@5] __b5_from___b4: - // [127] phi (byte) font_2x2::glyph_bit#0 = (byte) 1 [phi:font_2x2::@4->font_2x2::@5#0] -- vbuxx=vbuc1 + // [138] phi (byte) font_2x2::glyph_bit#0 = (byte) 1 [phi:font_2x2::@4->font_2x2::@5#0] -- vbuxx=vbuc1 ldx #1 jmp __b5 // font_2x2::@5 __b5: - // [128] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [139] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z __5 rol.z __5+1 - // [129] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx + // [140] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx txa ora.z glyph_bits_2x2 sta.z glyph_bits_2x2 - // [130] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [141] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z __7 rol.z __7+1 - // [131] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx + // [142] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx txa ora.z glyph_bits_2x2 sta.z glyph_bits_2x2 - // [132] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 + // [143] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 // Move to next bit asl.z glyph_bits - // [133] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2 -- vbuyy=_inc_vbuyy + // [144] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2 -- vbuyy=_inc_vbuyy iny - // [134] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3 -- vbuyy_neq_vbuc1_then_la1 + // [145] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3 -- vbuyy_neq_vbuc1_then_la1 cpy #8 bne __b3_from___b5 jmp __b6 // font_2x2::@6 __b6: - // [135] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 -- vbuaa=_hi_vwuz1 + // [146] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 -- vbuaa=_hi_vwuz1 lda.z glyph_bits_2x2+1 - // [136] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuz2=vbuaa + // [147] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuz2=vbuaa // Put the generated 2x2-line into the 2x2-font twice ldy.z l2 sta (next_2x2_left_1),y - // [137] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuyy=vbuz1_plus_1 + // [148] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuyy=vbuz1_plus_1 ldy.z l2 iny - // [138] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuyy=vbuaa + // [149] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuyy=vbuaa sta (next_2x2_left_1),y - // [139] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2 -- vbuaa=_lo_vwuz1 + // [150] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2 -- vbuaa=_lo_vwuz1 lda.z glyph_bits_2x2 - // [140] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [151] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z l2 sta (next_2x2_right),y - // [141] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuyy=vbuz1_plus_1 + // [152] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuyy=vbuz1_plus_1 ldy.z l2 iny - // [142] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15 -- pbuz1_derefidx_vbuyy=vbuaa + // [153] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15 -- pbuz1_derefidx_vbuyy=vbuaa sta (next_2x2_right),y - // [143] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2 -- vbuz1=vbuz1_plus_2 + // [154] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2 -- vbuz1=vbuz1_plus_2 lda.z l2 clc adc #2 sta.z l2 - // [144] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8 -- vbuz1_neq_vbuc1_then_la1 + // [155] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z l2 bne __b8_from___b6 jmp __b7 // font_2x2::@7 __b7: - // [145] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [156] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z next_2x2_left clc adc #<$80*8 @@ -5633,7 +6161,7 @@ font_2x2: { lda.z next_2x2_left+1 adc #>$80*8 sta.z next_2x2_left_1+1 - // [146] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [157] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z next_2x2_left clc adc #<$c0*8 @@ -5641,32 +6169,32 @@ font_2x2: { lda.z next_2x2_left+1 adc #>$c0*8 sta.z next_2x2_right+1 - // [147] phi from font_2x2::@7 to font_2x2::@8 [phi:font_2x2::@7->font_2x2::@8] + // [158] phi from font_2x2::@7 to font_2x2::@8 [phi:font_2x2::@7->font_2x2::@8] __b8_from___b7: - // [147] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#1 [phi:font_2x2::@7->font_2x2::@8#0] -- register_copy - // [147] phi (byte) font_2x2::l2#9 = (byte) 0 [phi:font_2x2::@7->font_2x2::@8#1] -- vbuz1=vbuc1 + // [158] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#1 [phi:font_2x2::@7->font_2x2::@8#0] -- register_copy + // [158] phi (byte) font_2x2::l2#9 = (byte) 0 [phi:font_2x2::@7->font_2x2::@8#1] -- vbuz1=vbuc1 lda #0 sta.z l2 - // [147] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#1 [phi:font_2x2::@7->font_2x2::@8#2] -- register_copy + // [158] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#1 [phi:font_2x2::@7->font_2x2::@8#2] -- register_copy jmp __b8 - // [147] phi from font_2x2::@6 to font_2x2::@8 [phi:font_2x2::@6->font_2x2::@8] + // [158] phi from font_2x2::@6 to font_2x2::@8 [phi:font_2x2::@6->font_2x2::@8] __b8_from___b6: - // [147] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#7 [phi:font_2x2::@6->font_2x2::@8#0] -- register_copy - // [147] phi (byte) font_2x2::l2#9 = (byte) font_2x2::l2#1 [phi:font_2x2::@6->font_2x2::@8#1] -- register_copy - // [147] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#7 [phi:font_2x2::@6->font_2x2::@8#2] -- register_copy + // [158] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#7 [phi:font_2x2::@6->font_2x2::@8#0] -- register_copy + // [158] phi (byte) font_2x2::l2#9 = (byte) font_2x2::l2#1 [phi:font_2x2::@6->font_2x2::@8#1] -- register_copy + // [158] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#7 [phi:font_2x2::@6->font_2x2::@8#2] -- register_copy jmp __b8 // font_2x2::@8 __b8: - // [148] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2 -- vbuz1=_inc_vbuz1 + // [159] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2 -- vbuz1=_inc_vbuz1 inc.z l - // [149] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2 -- vbuz1_neq_vbuc1_then_la1 + // [160] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z l bne __b2_from___b8 jmp __b9 // font_2x2::@9 __b9: - // [150] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [161] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z next_2x2 @@ -5674,7 +6202,7 @@ font_2x2: { bcc !+ inc.z next_2x2+1 !: - // [151] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [162] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z next_original @@ -5682,78 +6210,79 @@ font_2x2: { bcc !+ inc.z next_original+1 !: - // [152] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11 -- vbuz1=_inc_vbuz1 + // [163] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11 -- vbuz1=_inc_vbuz1 inc.z c - // [153] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1 -- vbuz1_neq_vbuc1_then_la1 + // [164] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$40 cmp.z c bne __b1_from___b9 jmp __breturn // font_2x2::@return __breturn: - // [154] return + // [165] return rts } // plex_irq // Show sprites from the multiplexer, rescheduling the IRQ as many times as needed plex_irq: { - .label __4 = $19 + .label __4 = $18 // entry interrupt(KERNEL_MIN) // asm { sei } sei - // [156] phi from plex_irq plex_irq::@7 to plex_irq::@3 [phi:plex_irq/plex_irq::@7->plex_irq::@3] + // [167] phi from plex_irq plex_irq::@7 to plex_irq::@3 [phi:plex_irq/plex_irq::@7->plex_irq::@3] __b3_from_plex_irq: __b3_from___b7: jmp __b3 // plex_irq::@3 __b3: - // [157] call plexShowSprite + // [168] call plexShowSprite jsr plexShowSprite jmp plexFreeNextYpos1 // plex_irq::plexFreeNextYpos1 plexFreeNextYpos1: - // [158] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) -- vbuxx=pbuc1_derefidx_vbuz1 + // [169] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) -- vbuxx=pbuc1_derefidx_vbuz1 ldy.z plex_free_next ldx PLEX_FREE_YPOS,y jmp __b6 // plex_irq::@6 __b6: - // [159] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 -- vbuz1=_deref_pbuc1_plus_vbuc2 + // [170] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 -- vbuz1=_deref_pbuc1_plus_vbuc2 lda #3 clc adc RASTER sta.z __4 - // [160] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 -- vbuz1_ge_vbuc1_then_la1 + // [171] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 -- vbuz1_ge_vbuc1_then_la1 lda.z plex_show_idx cmp #PLEX_COUNT bcs __b4 jmp __b7 // plex_irq::@7 __b7: - // [161] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3 -- vbuxx_lt_vbuz1_then_la1 + // [172] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3 -- vbuxx_lt_vbuz1_then_la1 cpx.z __4 bcc __b3_from___b7 jmp __b4 // plex_irq::@4 __b4: - // [162] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 -- vbuz1_lt_vbuc1_then_la1 + // [173] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 -- vbuz1_lt_vbuc1_then_la1 lda.z plex_show_idx cmp #PLEX_COUNT bcc __b1 jmp __b5 // plex_irq::@5 __b5: - // [163] *((const nomodify byte*) RASTER) ← (byte) $28 -- _deref_pbuc1=vbuc2 + // [174] *((const nomodify byte*) RASTER) ← (byte) $28 -- _deref_pbuc1=vbuc2 // Reset the raster IRQ to the top of the screen lda #$28 sta RASTER - // [164] (volatile bool) framedone ← true -- vboz1=vboc1 + // [175] (volatile bool) frame_done ← true -- vboz1=vboc1 + // Signal that the IRQ is done showing sprites lda #1 - sta.z framedone + sta.z frame_done jmp __b2 // plex_irq::@2 __b2: - // [165] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [176] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER sta IRQ_STATUS @@ -5763,11 +6292,11 @@ plex_irq: { jmp __breturn // plex_irq::@return __breturn: - // [167] return - exit interrupt(KERNEL_MIN) + // [178] return - exit interrupt(KERNEL_MIN) jmp $ea81 // plex_irq::@1 __b1: - // [168] *((const nomodify byte*) RASTER) ← (byte) plex_irq::plexFreeNextYpos1_return#0 -- _deref_pbuc1=vbuxx + // [179] *((const nomodify byte*) RASTER) ← (byte) plex_irq::plexFreeNextYpos1_return#0 -- _deref_pbuc1=vbuxx // Set raster IRQ line to the next sprite Y-position stx RASTER jmp __b2 @@ -5776,102 +6305,102 @@ plex_irq: { // Show the next sprite. // plexSort() prepares showing the sprites plexShowSprite: { - .label plex_sprite_idx2 = $1a - // [169] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 -- vbuz1=vbuz2_rol_1 + .label plex_sprite_idx2 = $19 + // [180] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z plex_sprite_idx asl sta.z plex_sprite_idx2 - // [170] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) -- vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) + // [181] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) -- vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) ldx.z plex_show_idx ldy PLEX_SORTED_IDX,x lda PLEX_YPOS,y - // [171] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuaa + // [182] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z plex_sprite_idx2 sta SPRITES_YPOS,y jmp plexFreeAdd1 // plexShowSprite::plexFreeAdd1 plexFreeAdd1: - // [172] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 -- vbuaa=vbuaa_plus_vbuc1 + // [183] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 -- vbuaa=vbuaa_plus_vbuc1 clc adc #$15 - // [173] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuaa + // [184] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z plex_free_next sta PLEX_FREE_YPOS,y - // [174] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (volatile byte) plex_free_next + (byte) 1 -- vbuaa=vbuz1_plus_1 + // [185] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (volatile byte) plex_free_next + (byte) 1 -- vbuaa=vbuz1_plus_1 lda.z plex_free_next clc adc #1 - // [175] (byte~) plexShowSprite::plexFreeAdd1_$2 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 -- vbuaa=vbuaa_band_vbuc1 + // [186] (byte~) plexShowSprite::plexFreeAdd1_$2 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 -- vbuaa=vbuaa_band_vbuc1 and #7 - // [176] (volatile byte) plex_free_next ← (byte~) plexShowSprite::plexFreeAdd1_$2 -- vbuz1=vbuaa + // [187] (volatile byte) plex_free_next ← (byte~) plexShowSprite::plexFreeAdd1_$2 -- vbuz1=vbuaa sta.z plex_free_next jmp __b5 // plexShowSprite::@5 __b5: - // [177] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz2) + // [188] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz2) ldx.z plex_show_idx ldy PLEX_SORTED_IDX,x lda PLEX_PTR,y ldx.z plex_sprite_idx sta PLEX_SCREEN_PTR,x - // [178] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) -- vbuaa=pbuc1_derefidx_vbuz1 + // [189] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z plex_show_idx lda PLEX_SORTED_IDX,y - // [179] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 -- vbuxx=vbuaa_rol_1 + // [190] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 -- vbuxx=vbuaa_rol_1 asl tax - // [180] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuaa=_lo_pwuc1_derefidx_vbuxx + // [191] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuaa=_lo_pwuc1_derefidx_vbuxx lda PLEX_XPOS,x - // [181] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 -- pbuc1_derefidx_vbuz1=vbuaa + // [192] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z plex_sprite_idx2 sta SPRITES_XPOS,y - // [182] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuaa=_hi_pwuc1_derefidx_vbuxx + // [193] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuaa=_hi_pwuc1_derefidx_vbuxx lda PLEX_XPOS+1,x - // [183] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1 + // [194] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1 cmp #0 bne __b1 jmp __b3 // plexShowSprite::@3 __b3: - // [184] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb -- vbuaa=vbuc1_bxor_vbuz1 + // [195] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb -- vbuaa=vbuc1_bxor_vbuz1 lda #$ff eor.z plex_sprite_msb - // [185] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa + // [196] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa and SPRITES_XMSB sta SPRITES_XMSB jmp __b2 // plexShowSprite::@2 __b2: - // [186] (byte~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1 -- vbuxx=vbuz1_plus_1 + // [197] (byte~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1 -- vbuxx=vbuz1_plus_1 ldx.z plex_sprite_idx inx - // [187] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7 -- vbuaa=vbuxx_band_vbuc1 + // [198] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7 -- vbuaa=vbuxx_band_vbuc1 txa and #7 - // [188] (volatile byte) plex_sprite_idx ← (byte~) plexShowSprite::$6 -- vbuz1=vbuaa + // [199] (volatile byte) plex_sprite_idx ← (byte~) plexShowSprite::$6 -- vbuz1=vbuaa sta.z plex_sprite_idx - // [189] (volatile byte) plex_show_idx ← ++ (volatile byte) plex_show_idx -- vbuz1=_inc_vbuz1 + // [200] (volatile byte) plex_show_idx ← ++ (volatile byte) plex_show_idx -- vbuz1=_inc_vbuz1 inc.z plex_show_idx - // [190] (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (byte) 1 -- vbuz1=vbuz1_rol_1 + // [201] (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (byte) 1 -- vbuz1=vbuz1_rol_1 asl.z plex_sprite_msb - // [191] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1 + // [202] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1 lda.z plex_sprite_msb cmp #0 bne __breturn jmp __b4 // plexShowSprite::@4 __b4: - // [192] (volatile byte) plex_sprite_msb ← (byte) 1 -- vbuz1=vbuc1 + // [203] (volatile byte) plex_sprite_msb ← (byte) 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb jmp __breturn // plexShowSprite::@return __breturn: - // [193] return + // [204] return rts // plexShowSprite::@1 __b1: - // [194] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + // [205] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 lda SPRITES_XMSB ora.z plex_sprite_msb sta SPRITES_XMSB @@ -5888,34 +6417,40 @@ plexShowSprite: { PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 // Contains the Y-position where each sprite is free again. PLEX_FREE_YPOS[s] holds the Y-position where sprite s is free to use again. PLEX_FREE_YPOS: .fill 8, 0 - //kickasm(pc FONT, resource "elefont.bin") {{ + //char FONT[0x0800] = kickasm(resource "elefont.bin") {{ // .import binary "elefont.bin" - //}} + //}}; + FONT: .fill $800, 0 .align $100 YSIN: .fill $100, round(142+89.5*sin(toRadians(360*i/256))) + .align $100 +XMOVEMENT: +.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100))) + + // The scroll text + SCROLL_TEXT: .text "camelot presents a spanking new contribution to the always hungry c64 scene. in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. " + .byte 0 ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 Removing instruction jmp __b2 +Removing instruction jmp toSpritePtr1 Removing instruction jmp __b3 Removing instruction jmp __b4 Removing instruction jmp __bend -Removing instruction jmp __b8 Removing instruction jmp __b9 +Removing instruction jmp __b10 Removing instruction jmp toD0181 -Removing instruction jmp __b7 -Removing instruction jmp toSpritePtr1 +Removing instruction jmp __b8 Removing instruction jmp __b1 -Removing instruction jmp __b2 Removing instruction jmp __b3 Removing instruction jmp __b4 -Removing instruction jmp __b10 -Removing instruction jmp __b11 Removing instruction jmp __b5 -Removing instruction jmp __b6 +Removing instruction jmp __b11 Removing instruction jmp __b12 +Removing instruction jmp __b6 Removing instruction jmp __b13 Removing instruction jmp __b1 Removing instruction jmp __b5 @@ -5929,7 +6464,11 @@ Removing instruction jmp plexFreePrepare1___b1 Removing instruction jmp plexFreePrepare1___b2 Removing instruction jmp __breturn Removing instruction jmp __b1 +Removing instruction jmp __b4 +Removing instruction jmp __b6 +Removing instruction jmp __b3 Removing instruction jmp __b2 +Removing instruction jmp __b5 Removing instruction jmp __breturn Removing instruction jmp plexSetScreen1 Removing instruction jmp __b1 @@ -5967,10 +6506,14 @@ Removing instruction jmp __b4 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 +Replacing instruction lda #0 with TXA Removing instruction lda #IRQ_RASTER +Replacing instruction lda.z s with TYA +Removing instruction lda.z __13 Replacing instruction ldy.z nxt_idx with TAY Removing instruction lda.z nxt_y Removing instruction lda #0 +Replacing instruction lda.z s with TYA Replacing instruction ldx #0 with TAX Removing instruction ldy.z sprite_idx Removing instruction lda #0 @@ -5980,13 +6523,14 @@ Removing instruction ldy.z l2 Removing instruction ldy.z l2 Replacing instruction lda.z plex_free_next with TYA Succesful ASM optimization Pass5UnnecesaryLoadElimination -Replacing label __b1_from___b1 with __b1 -Replacing label __b3_from___b3 with __b3 -Replacing label __b6_from___b5 with __b6 +Replacing label __b4_from___b4 with __b4 Replacing label __b3_from___b7 with __b3 Replacing label __b1_from___b2 with __b1 Replacing label plexFreePrepare1___b1_from_plexFreePrepare1___b1 with plexFreePrepare1___b1 -Replacing label __b1_from___b1 with __b1 +Replacing label __b2_from___b1 with __b2 +Replacing label __b2_from___b1 with __b2 +Replacing label __b6_from___b4 with __b3 +Replacing label __b1_from___b2 with __b1 Replacing label __b1_from___b1 with __b1 Replacing label __b8_from___b6 with __b5 Replacing label __b3_from___b5 with __b3 @@ -5998,26 +6542,29 @@ Replacing label __b2_from___b8 with __b2 Replacing label __b1_from___b9 with __b1 Replacing label __b3_from___b7 with __b3 Removing instruction __b1: +Removing instruction toSpritePtr1_from___b2: +Removing instruction toSpritePtr1: Removing instruction __b4_from___b3: Removing instruction __bend_from___b4: -Removing instruction __b9_from___b8: -Removing instruction toD0181_from___b9: +Removing instruction __b10_from___b9: +Removing instruction toD0181_from___b10: Removing instruction toD0181: -Removing instruction toSpritePtr1_from___b7: -Removing instruction __b1_from_toSpritePtr1: -Removing instruction __b1_from___b1: -Removing instruction __b3_from___b3: -Removing instruction __b4_from___b3: -Removing instruction __b10_from___b4: -Removing instruction __b6_from___b5: -Removing instruction __b12_from___b6: +Removing instruction __b4_from___b4: +Removing instruction __b5_from___b4: +Removing instruction __b11_from___b5: +Removing instruction __b13_from___b7: Removing instruction __b1_from___b2: Removing instruction __b3_from___b5: Removing instruction __b3_from___b7: Removing instruction plexFreePrepare1_from___b6: Removing instruction plexFreePrepare1___b1_from_plexFreePrepare1: Removing instruction plexFreePrepare1___b1_from_plexFreePrepare1___b1: -Removing instruction __b1_from___b1: +Removing instruction __b1_from___b2: +Removing instruction __b6_from___b4: +Removing instruction __b6: +Removing instruction __b3_from___b6: +Removing instruction __b2_from___b1: +Removing instruction __b2_from___b3: Removing instruction plexSetScreen1_from_plexInit: Removing instruction __b1_from_plexSetScreen1: Removing instruction __b1_from___b1: @@ -6040,23 +6587,23 @@ Removing instruction __b3: Removing instruction __b4: Removing instruction __bend: Removing instruction font_2x2_from_main: -Removing instruction __b8: -Removing instruction font_2x2_to_sprites_from___b8: Removing instruction __b9: -Removing instruction plexInit_from___b9: -Removing instruction __b7: -Removing instruction toSpritePtr1: -Removing instruction __b2: -Removing instruction __b3_from___b2: -Removing instruction __b4: -Removing instruction plexSine_from___b4: +Removing instruction font_2x2_to_sprites_from___b9: Removing instruction __b10: -Removing instruction plexSort_from___b10: +Removing instruction plexInit_from___b10: +Removing instruction __b8: +Removing instruction __b1_from___b8: +Removing instruction __b3: +Removing instruction __b4_from___b3: +Removing instruction __b5: +Removing instruction plex_move_from___b5: Removing instruction __b11: -Removing instruction plexSine_from___b6: +Removing instruction plexSort_from___b11: Removing instruction __b12: -Removing instruction plexSort_from___b12: +Removing instruction plex_move_from___b7: Removing instruction __b13: +Removing instruction plexSort_from___b13: +Removing instruction __b1_from___b2: Removing instruction __b1_from_plexSort: Removing instruction __b5: Removing instruction __b7: @@ -6064,8 +6611,10 @@ Removing instruction __b6: Removing instruction plexFreePrepare1: Removing instruction plexFreePrepare1___b2: Removing instruction __breturn: -Removing instruction __b1_from_plexSine: -Removing instruction __b2: +Removing instruction __b1_from_plex_move: +Removing instruction __b4: +Removing instruction __b3_from___b4: +Removing instruction __b5: Removing instruction __breturn: Removing instruction plexSetScreen1: Removing instruction __breturn: @@ -6097,11 +6646,11 @@ Removing instruction __b4: Succesful ASM optimization Pass5UnusedLabelElimination Adding RTS to root block Succesful ASM optimization Pass5AddMainRts -Removing instruction jmp __b1 -Removing instruction jmp __b3 +Removing instruction jmp __b4 Removing instruction jmp __b1 Removing instruction jmp plexFreePrepare1___b1 Removing instruction jmp __b1 +Removing instruction jmp __b3 Removing instruction jmp __b1 Removing instruction jmp __b3 Removing instruction jmp __b5 @@ -6116,7 +6665,7 @@ Removing instruction lda #0 Removing instruction lda #8 Removing instruction ldx.z plex_show_idx Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [495] bne __b1 to beq +Fixing long branch [541] bne __b1 to beq FINAL SYMBOL TABLE (label) @1 @@ -6130,7 +6679,7 @@ FINAL SYMBOL TABLE (const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D018 = (byte*) 53272 -(const nomodify byte*) FONT = (byte*) 8192 +(const byte*) FONT[(number) $800] = { fill( $800, 0) } (const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 @@ -6148,14 +6697,19 @@ FINAL SYMBOL TABLE (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) SCREEN = (byte*) 1024 +(const byte*) SCROLL_TEXT[] = (byte*) "camelot presents a spanking new contribution to the always hungry c64 scene. in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. " (const nomodify byte*) SPRITES = (byte*) 12288 (const nomodify byte*) SPRITES_COLS = (byte*) 53287 (const nomodify byte*) SPRITES_ENABLE = (byte*) 53269 (const nomodify byte*) SPRITES_XMSB = (byte*) 53264 (const nomodify byte*) SPRITES_XPOS = (byte*) 53248 (const nomodify byte*) SPRITES_YPOS = (byte*) 53249 +(byte) SPRITE_0 (const nomodify byte*) VIC_CONTROL = (byte*) 53265 (const nomodify byte) WHITE = (byte) 1 +(const byte*) XMOVEMENT[(number) $200] = kickasm {{ .lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100))) + }} +(const nomodify byte*) XMOVEMENT_HI = (const byte*) XMOVEMENT+(word) $100 (const byte*) YSIN[(number) $100] = kickasm {{ .fill $100, round(142+89.5*sin(toRadians(360*i/256))) }} (void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2) @@ -6164,8 +6718,8 @@ FINAL SYMBOL TABLE (byte~) font_2x2::$12 reg byte a 10001.0 (byte~) font_2x2::$14 reg byte y 20002.0 (byte~) font_2x2::$15 reg byte a 10001.0 -(word~) font_2x2::$5 zp[2]:15 200002.0 -(word~) font_2x2::$7 zp[2]:15 200002.0 +(word~) font_2x2::$5 zp[2]:20 200002.0 +(word~) font_2x2::$7 zp[2]:20 200002.0 (label) font_2x2::@1 (label) font_2x2::@2 (label) font_2x2::@3 @@ -6180,31 +6734,31 @@ FINAL SYMBOL TABLE (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]:10 1501.5 -(byte) font_2x2::c#11 c zp[1]:10 58.88235294117647 +(byte) font_2x2::c#1 c zp[1]:9 1501.5 +(byte) font_2x2::c#11 c zp[1]:9 58.88235294117647 (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]:24 20002.0 -(byte) font_2x2::glyph_bits#1 glyph_bits zp[1]:24 66667.33333333333 -(byte) font_2x2::glyph_bits#2 glyph_bits zp[1]:24 34444.88888888889 +(byte) font_2x2::glyph_bits#0 glyph_bits zp[1]:22 20002.0 +(byte) font_2x2::glyph_bits#1 glyph_bits zp[1]:22 66667.33333333333 +(byte) font_2x2::glyph_bits#2 glyph_bits zp[1]:22 34444.88888888889 (word) font_2x2::glyph_bits_2x2 -(word) font_2x2::glyph_bits_2x2#1 glyph_bits_2x2 zp[2]:15 200002.0 -(word) font_2x2::glyph_bits_2x2#2 glyph_bits_2x2 zp[2]:15 27500.5 -(word) font_2x2::glyph_bits_2x2#3 glyph_bits_2x2 zp[2]:15 40000.4 +(word) font_2x2::glyph_bits_2x2#1 glyph_bits_2x2 zp[2]:20 200002.0 +(word) font_2x2::glyph_bits_2x2#2 glyph_bits_2x2 zp[2]:20 27500.5 +(word) font_2x2::glyph_bits_2x2#3 glyph_bits_2x2 zp[2]:20 40000.4 (byte) font_2x2::l -(byte) font_2x2::l#1 l zp[1]:22 15001.5 -(byte) font_2x2::l#2 l zp[1]:22 1111.2222222222222 +(byte) font_2x2::l#1 l zp[1]:10 15001.5 +(byte) font_2x2::l#2 l zp[1]:10 1111.2222222222222 (byte) font_2x2::l2 (byte) font_2x2::l2#1 l2 zp[1]:23 15001.5 (byte) font_2x2::l2#8 l2 zp[1]:23 2727.5454545454545 (byte) font_2x2::l2#9 l2 zp[1]:23 6667.333333333333 (byte*) font_2x2::next_2x2 -(byte*) font_2x2::next_2x2#1 next_2x2 zp[2]:6 500.5 +(byte*) font_2x2::next_2x2#1 next_2x2 zp[2]:5 500.5 (byte*) font_2x2::next_2x2_left -(byte*) font_2x2::next_2x2_left#0 next_2x2_left zp[2]:6 750.1875 +(byte*) font_2x2::next_2x2_left#0 next_2x2_left zp[2]:5 750.1875 (byte*) font_2x2::next_2x2_left#1 next_2x2_left_1 zp[2]:11 10001.0 (byte*) font_2x2::next_2x2_left#10 next_2x2_left_1 zp[2]:11 2002.0 (byte*) font_2x2::next_2x2_left#7 next_2x2_left_1 zp[2]:11 1708.5416666666665 @@ -6215,10 +6769,10 @@ FINAL SYMBOL TABLE (byte*) font_2x2::next_2x2_right#7 next_2x2_right zp[2]:13 1708.5416666666665 (byte*) font_2x2::next_2x2_right#8 next_2x2_right zp[2]:13 10001.0 (byte*) font_2x2::next_original -(byte*) font_2x2::next_original#1 next_original zp[2]:8 667.3333333333334 -(byte*) font_2x2::next_original#4 next_original zp[2]:8 363.7272727272727 +(byte*) font_2x2::next_original#1 next_original zp[2]:7 667.3333333333334 +(byte*) font_2x2::next_original#4 next_original zp[2]:7 363.7272727272727 (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]:24 10001.0 +(byte~) font_2x2_to_sprites::$3 zp[1]:23 10001.0 (label) font_2x2_to_sprites::@1 (label) font_2x2_to_sprites::@2 (label) font_2x2_to_sprites::@3 @@ -6229,11 +6783,11 @@ FINAL SYMBOL TABLE (label) font_2x2_to_sprites::@8 (label) font_2x2_to_sprites::@return (byte) font_2x2_to_sprites::c -(byte) font_2x2_to_sprites::c#1 c zp[1]:5 2002.0 -(byte) font_2x2_to_sprites::c#2 c zp[1]:5 136.5 +(byte) font_2x2_to_sprites::c#1 c zp[1]:9 2002.0 +(byte) font_2x2_to_sprites::c#2 c zp[1]:9 136.5 (byte*) font_2x2_to_sprites::char_current -(byte*) font_2x2_to_sprites::char_current#1 char_current zp[2]:6 667.3333333333334 -(byte*) font_2x2_to_sprites::char_current#2 char_current zp[2]:6 1200.3 +(byte*) font_2x2_to_sprites::char_current#1 char_current zp[2]:5 667.3333333333334 +(byte*) font_2x2_to_sprites::char_current#2 char_current zp[2]:5 1200.3 (byte*) font_2x2_to_sprites::char_left (byte*) font_2x2_to_sprites::char_left#1 char_left zp[2]:11 10001.0 (byte*) font_2x2_to_sprites::char_left#3 char_left zp[2]:11 2818.5454545454545 @@ -6251,17 +6805,19 @@ FINAL SYMBOL TABLE (byte) font_2x2_to_sprites::num_chars (const byte) font_2x2_to_sprites::num_chars#0 num_chars = (byte) $40 (byte*) font_2x2_to_sprites::sprite -(byte*) font_2x2_to_sprites::sprite#1 sprite zp[2]:8 1001.0 -(byte*) font_2x2_to_sprites::sprite#4 sprite zp[2]:8 1524.047619047619 +(byte*) font_2x2_to_sprites::sprite#1 sprite zp[2]:7 1001.0 +(byte*) font_2x2_to_sprites::sprite#4 sprite zp[2]:7 1524.047619047619 (byte) font_2x2_to_sprites::sprite_idx (byte) font_2x2_to_sprites::sprite_idx#1 sprite_idx zp[1]:10 15001.5 (byte) font_2x2_to_sprites::sprite_idx#2 reg byte y 15001.5 (byte) font_2x2_to_sprites::sprite_idx#3 sprite_idx zp[1]:10 2222.4444444444443 (byte) font_2x2_to_sprites::sprite_idx#4 sprite_idx zp[1]:10 10001.0 (byte*) font_2x2_to_sprites::sprites -(volatile bool) framedone loadstore zp[1]:21 27.65 +(volatile bool) frame_done loadstore zp[1]:19 25.72093023255814 (void()) main() -(byte~) main::$12 reg byte a 202.0 +(byte~) main::$12 reg byte y 101.0 +(word~) main::$13 zp[2]:20 202.0 +(byte~) main::$7 reg byte a 202.0 (label) main::@1 (label) main::@10 (label) main::@11 @@ -6276,26 +6832,19 @@ FINAL SYMBOL TABLE (label) main::@8 (label) main::@9 (byte) main::s -(byte) main::s#1 reg byte x 151.5 -(byte) main::s#2 reg byte x 67.33333333333333 +(byte) main::s#1 s zp[1]:2 202.0 +(byte) main::s#2 s zp[1]:2 75.75 (byte) main::s1 (byte) main::s1#1 reg byte x 151.5 (byte) main::s1#2 reg byte x 151.5 -(byte) main::sprite -(byte) main::sprite#1 sprite zp[1]:4 33.666666666666664 -(byte) main::sprite#2 sprite zp[1]:4 151.5 (label) main::toD0181 (byte*) main::toD0181_gfx (byte) main::toD0181_return (const byte) main::toD0181_return#0 toD0181_return = >(word)(const nomodify byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const nomodify byte*) CHARSET_DEFAULT/(byte) 4&(byte) $f (byte*) main::toD0181_screen -(label) main::toSpritePtr1 -(byte) main::toSpritePtr1_return -(const byte) main::toSpritePtr1_return#0 toSpritePtr1_return = (byte)(word)(const nomodify byte*) SPRITES/(byte) $40 -(byte*) main::toSpritePtr1_sprite -(word) main::xp -(word) main::xp#1 xp zp[2]:2 67.33333333333333 -(word) main::xp#2 xp zp[2]:2 60.599999999999994 +(byte) main::x +(byte) main::x#1 reg byte x 101.0 +(byte) main::x#2 reg byte x 57.714285714285715 (void()) plexInit((byte*) plexInit::screen) (label) plexInit::@1 (label) plexInit::@return @@ -6325,21 +6874,10 @@ FINAL SYMBOL TABLE (byte) plexShowSprite::plexFreeAdd1_ypos (byte) plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 151.5 (byte) plexShowSprite::plex_sprite_idx2 -(byte) plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:26 25.25 +(byte) plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:25 25.25 (byte) plexShowSprite::xpos_idx (byte) plexShowSprite::xpos_idx#0 reg byte a 202.0 (byte) plexShowSprite::ypos -(void()) plexSine() -(label) plexSine::@1 -(label) plexSine::@2 -(label) plexSine::@return -(byte) plexSine::sy -(byte) plexSine::sy#1 reg byte y 150001.5 -(byte) plexSine::sy#2 reg byte y 100001.0 -(byte) plexSine::y_idx -(byte) plexSine::y_idx#0 reg byte x 2002.0 -(byte) plexSine::y_idx#1 reg byte x 66667.33333333333 -(byte) plexSine::y_idx#2 reg byte x 150502.0 (void()) plexSort() (label) plexSort::@1 (label) plexSort::@2 @@ -6350,12 +6888,12 @@ FINAL SYMBOL TABLE (label) plexSort::@7 (label) plexSort::@return (byte) plexSort::m -(byte) plexSort::m#1 m zp[1]:5 150001.5 -(byte) plexSort::m#2 m zp[1]:5 41667.08333333333 +(byte) plexSort::m#1 m zp[1]:9 150001.5 +(byte) plexSort::m#2 m zp[1]:9 41667.08333333333 (byte) plexSort::nxt_idx -(byte) plexSort::nxt_idx#0 nxt_idx zp[1]:22 30000.300000000003 +(byte) plexSort::nxt_idx#0 nxt_idx zp[1]:23 30000.300000000003 (byte) plexSort::nxt_y -(byte) plexSort::nxt_y#0 nxt_y zp[1]:23 150000.375 +(byte) plexSort::nxt_y#0 nxt_y zp[1]:22 150000.375 (label) plexSort::plexFreePrepare1 (label) plexSort::plexFreePrepare1_@1 (label) plexSort::plexFreePrepare1_@2 @@ -6367,9 +6905,9 @@ FINAL SYMBOL TABLE (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 42.48387096774193 +(volatile byte) plex_free_next loadstore zp[1]:18 42.48387096774193 interrupt(KERNEL_MIN)(void()) plex_irq() -(byte~) plex_irq::$4 zp[1]:25 11.0 +(byte~) plex_irq::$4 zp[1]:24 11.0 (label) plex_irq::@1 (label) plex_irq::@2 (label) plex_irq::@3 @@ -6382,42 +6920,72 @@ interrupt(KERNEL_MIN)(void()) plex_irq() (byte) plex_irq::plexFreeNextYpos1_return (byte) plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.800000000000001 (byte) plex_irq::rasterY -(volatile byte) plex_show_idx loadstore zp[1]:17 46.0909090909091 -(volatile byte) plex_sprite_idx loadstore zp[1]:18 45.387096774193544 -(volatile byte) plex_sprite_msb loadstore zp[1]:19 48.757575757575765 +(void()) plex_move() +(byte~) plex_move::$4 reg byte a 200002.0 +(byte~) plex_move::$6 reg byte a 200002.0 +(byte~) plex_move::$7 reg byte a 200002.0 +(label) plex_move::@1 +(label) plex_move::@2 +(label) plex_move::@3 +(label) plex_move::@4 +(label) plex_move::@5 +(label) plex_move::@6 +(label) plex_move::@return +(byte) plex_move::s +(byte) plex_move::s#1 s zp[1]:9 150001.5 +(byte) plex_move::s#2 s zp[1]:9 42857.57142857143 +(byte) plex_move::y_idx +(byte) plex_move::y_idx#0 reg byte x 2002.0 +(byte) plex_move::y_idx#1 reg byte x 14285.857142857143 +(byte) plex_move::y_idx#2 reg byte x 150502.0 +(volatile byte) plex_show_idx loadstore zp[1]:15 46.0909090909091 +(volatile byte) plex_sprite_idx loadstore zp[1]:16 45.387096774193544 +(volatile byte) plex_sprite_msb loadstore zp[1]:17 48.757575757575765 +(byte*) scroll_text_next +(byte*) scroll_text_next#11 scroll_text_next zp[2]:3 44556.11111111111 +(byte*) scroll_text_next#12 scroll_text_next zp[2]:3 100001.0 +(byte*) scroll_text_next#13 scroll_text_next zp[2]:3 14290.666666666668 +(byte*) scroll_text_next#25 scroll_text_next zp[2]:3 551.0 +(byte*) scroll_text_next#4 scroll_text_next zp[2]:3 200002.0 (byte) sin_idx -(byte) sin_idx#10 sin_idx zp[1]:4 300.42857142857144 -(byte) sin_idx#12 sin_idx zp[1]:4 58.0 +(byte) sin_idx#10 sin_idx zp[1]:2 116.83333333333334 +(byte) sin_idx#12 sin_idx zp[1]:2 61.22222222222223 +(label) toSpritePtr1 +(byte) toSpritePtr1_return +(const byte) toSpritePtr1_return#0 toSpritePtr1_return = (byte)(word)(const nomodify byte*) SPRITES/(byte) $40 +(byte*) toSpritePtr1_sprite -reg byte x [ main::s#2 main::s#1 ] -zp[2]:2 [ main::xp#2 main::xp#1 ] +reg byte x [ main::x#2 main::x#1 ] reg byte x [ main::s1#2 main::s1#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]:4 [ sin_idx#10 sin_idx#12 main::sprite#2 main::sprite#1 ] -reg byte x [ plexSine::y_idx#2 plexSine::y_idx#0 plexSine::y_idx#1 ] -reg byte y [ plexSine::sy#2 plexSine::sy#1 ] +zp[1]:2 [ sin_idx#10 sin_idx#12 main::s#2 main::s#1 ] +reg byte x [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] +zp[2]:3 [ scroll_text_next#12 scroll_text_next#11 scroll_text_next#25 scroll_text_next#13 scroll_text_next#4 ] reg byte x [ plexInit::i#2 plexInit::i#1 ] -zp[1]:5 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 plexSort::m#2 plexSort::m#1 ] reg byte x [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] -zp[2]:6 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] -zp[2]:8 [ font_2x2::next_original#4 font_2x2::next_original#1 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] -zp[1]:10 [ font_2x2::c#11 font_2x2::c#1 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 ] +zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] +zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] +zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 plex_move::s#2 plex_move::s#1 plexSort::m#2 plexSort::m#1 ] +zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 ] 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 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 ] zp[2]:13 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 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 ] -zp[2]:15 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ] reg byte y [ font_2x2::b#2 font_2x2::b#1 ] reg byte x [ font_2x2::glyph_bit#0 ] -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[1]:21 [ framedone ] -reg byte a [ main::$12 ] -zp[1]:22 [ plexSort::nxt_idx#0 font_2x2::l#2 font_2x2::l#1 ] -zp[1]:23 [ plexSort::nxt_y#0 font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] +zp[1]:15 [ plex_show_idx ] +zp[1]:16 [ plex_sprite_idx ] +zp[1]:17 [ plex_sprite_msb ] +zp[1]:18 [ plex_free_next ] +zp[1]:19 [ frame_done ] +reg byte a [ main::$7 ] +reg byte y [ main::$12 ] +zp[2]:20 [ main::$13 font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ] +zp[1]:22 [ plexSort::nxt_y#0 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] reg byte x [ plexSort::s#2 ] -zp[1]:24 [ font_2x2_to_sprites::$3 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] +reg byte a [ plex_move::$6 ] +reg byte a [ plex_move::$7 ] +reg byte a [ plex_move::$4 ] +zp[1]:23 [ font_2x2_to_sprites::$3 plexSort::nxt_idx#0 font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] reg byte y [ font_2x2_to_sprites::sprite_idx#2 ] reg byte a [ font_2x2::$1 ] reg byte a [ font_2x2::$12 ] @@ -6425,8 +6993,8 @@ reg byte y [ font_2x2::$11 ] reg byte a [ font_2x2::$15 ] reg byte y [ font_2x2::$14 ] reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ] -zp[1]:25 [ plex_irq::$4 ] -zp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ] +zp[1]:24 [ plex_irq::$4 ] +zp[1]:25 [ plexShowSprite::plex_sprite_idx2#0 ] reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$1 ] @@ -6441,7 +7009,7 @@ reg byte a [ plexShowSprite::$6 ] FINAL ASSEMBLER -Score: 146729 +Score: 157407 // File Comments // Put a 2x2 font into sprites and show it on screen @@ -6482,18 +7050,22 @@ Score: 146729 // The number of sprites in the multiplexer .const PLEX_COUNT = $20 .label CHARSET_DEFAULT = $1000 - .label FONT = $2000 .label SPRITES = $3000 .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 = $400+$3f8 - .label plex_show_idx = $11 - .label plex_sprite_idx = $12 - .label plex_sprite_msb = $13 - .label plex_free_next = $14 - .label framedone = $15 + .const toSpritePtr1_return = SPRITES/$40 + .label plex_show_idx = $f + .label plex_sprite_idx = $10 + .label plex_sprite_msb = $11 + .label plex_free_next = $12 + .label frame_done = $13 + // The next char to use from the scroll text + .label scroll_text_next = 3 // Y-sine index - .label sin_idx = 4 + .label sin_idx = 2 // @begin __bbegin: // @1 @@ -6517,186 +7089,155 @@ __bbegin: // The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown. lda #0 sta.z plex_free_next + // [5] phi from @2 to toSpritePtr1 [phi:@2->toSpritePtr1] + // toSpritePtr1 // @3 - // framedone = false - // [5] (volatile bool) framedone ← false -- vboz1=vboc1 - sta.z framedone - // [6] phi from @3 to @4 [phi:@3->@4] + // frame_done = false + // [6] (volatile bool) frame_done ← false -- vboz1=vboc1 + // Signal used between IRQ and main loop. Set to true when the IRQ is done showing the sprites. + sta.z frame_done + // [7] phi from @3 to @4 [phi:@3->@4] // @4 - // [7] call main + // [8] call main jsr main rts - // [8] phi from @4 to @end [phi:@4->@end] + // [9] phi from @4 to @end [phi:@4->@end] // @end // main main: { - .const toSpritePtr1_return = SPRITES/$40 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET_DEFAULT)/4&$f - .label sprite = 4 - // Set the x-positions & pointers - .label xp = 2 + .label s = 2 + .label __13 = $14 // asm // asm { sei } // Create 2x2 font from CHARGEN sei // *PROCPORT = PROCPORT_RAM_CHARROM - // [10] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2 + // [11] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_CHARROM sta PROCPORT // font_2x2(CHARGEN, FONT) - // [11] call font_2x2 - // [117] phi from main to font_2x2 [phi:main->font_2x2] + // [12] call font_2x2 + // [128] phi from main to font_2x2 [phi:main->font_2x2] jsr font_2x2 - // main::@8 + // main::@9 // *PROCPORT = PROCPORT_BASIC_KERNEL_IO - // [12] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO -- _deref_pbuc1=vbuc2 + // [13] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_BASIC_KERNEL_IO sta PROCPORT // asm // asm { cli } cli // font_2x2_to_sprites(FONT, SPRITES, 64) - // [14] call font_2x2_to_sprites + // [15] call font_2x2_to_sprites // Convert font to sprites - // [92] phi from main::@8 to font_2x2_to_sprites [phi:main::@8->font_2x2_to_sprites] + // [103] phi from main::@9 to font_2x2_to_sprites [phi:main::@9->font_2x2_to_sprites] jsr font_2x2_to_sprites - // [15] phi from main::@8 to main::@9 [phi:main::@8->main::@9] - // main::@9 + // [16] phi from main::@9 to main::@10 [phi:main::@9->main::@10] + // main::@10 // plexInit(SCREEN) - // [16] call plexInit + // [17] call plexInit // Initialize the multiplexer - // [85] phi from main::@9 to plexInit [phi:main::@9->plexInit] + // [96] phi from main::@10 to plexInit [phi:main::@10->plexInit] jsr plexInit - // [17] phi from main::@9 to main::toD0181 [phi:main::@9->main::toD0181] + // [18] phi from main::@10 to main::toD0181 [phi:main::@10->main::toD0181] // main::toD0181 - // main::@7 + // main::@8 // *D018 = toD018(SCREEN, CHARSET_DEFAULT) - // [18] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 + // [19] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 // Show screen lda #toD0181_return sta D018 - // [19] phi from main::@7 to main::toSpritePtr1 [phi:main::@7->main::toSpritePtr1] - // main::toSpritePtr1 - // [20] phi from main::toSpritePtr1 to main::@1 [phi:main::toSpritePtr1->main::@1] - // [20] phi (word) main::xp#2 = (word) $18 [phi:main::toSpritePtr1->main::@1#0] -- vwuz1=vwuc1 - lda #<$18 - sta.z xp - lda #>$18 - sta.z xp+1 - // [20] phi (byte) main::s#2 = (byte) 0 [phi:main::toSpritePtr1->main::@1#1] -- vbuxx=vbuc1 + // [20] phi from main::@8 to main::@1 [phi:main::@8->main::@1] + // [20] phi (byte) main::x#2 = (byte) 0 [phi:main::@8->main::@1#0] -- vbuxx=vbuc1 ldx #0 - // [20] phi (byte) main::sprite#2 = (const byte) main::toSpritePtr1_return#0 [phi:main::toSpritePtr1->main::@1#2] -- vbuz1=vbuc1 - lda #toSpritePtr1_return - sta.z sprite - // [20] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - // [20] phi (word) main::xp#2 = (word) main::xp#1 [phi:main::@1->main::@1#0] -- register_copy - // [20] phi (byte) main::s#2 = (byte) main::s#1 [phi:main::@1->main::@1#1] -- register_copy - // [20] phi (byte) main::sprite#2 = (byte) main::sprite#1 [phi:main::@1->main::@1#2] -- register_copy + // [20] phi (byte) main::s#2 = (byte) 0 [phi:main::@8->main::@1#1] -- vbuz1=vbuc1 + txa + sta.z s + // Set the x-positions & pointers // main::@1 __b1: - // PLEX_PTR[s] = sprite++ - // [21] *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte) main::sprite#2 -- pbuc1_derefidx_vbuxx=vbuz1 - lda.z sprite - sta PLEX_PTR,x - // PLEX_PTR[s] = sprite++; - // [22] (byte) main::sprite#1 ← ++ (byte) main::sprite#2 -- vbuz1=_inc_vbuz1 - inc.z sprite - // PLEX_XPOS[s] = xp - // [23] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 - txa - asl - // [24] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word) main::xp#2 -- pwuc1_derefidx_vbuaa=vwuz1 - tay - lda.z xp - sta PLEX_XPOS,y - lda.z xp+1 - sta PLEX_XPOS+1,y - // xp += 10 - // [25] (word) main::xp#1 ← (word) main::xp#2 + (byte) $a -- vwuz1=vwuz1_plus_vbuc1 - lda #$a - clc - adc.z xp - sta.z xp - bcc !+ - inc.z xp+1 - !: - // for(char s: 0..PLEX_COUNT-1) - // [26] (byte) main::s#1 ← ++ (byte) main::s#2 -- vbuxx=_inc_vbuxx - inx - // [27] if((byte) main::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #PLEX_COUNT-1+1 - bne __b1 - // main::@2 + // for(char s=0, x=0;smain::@3] - // [29] phi (byte) main::s1#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuxx=vbuc1 + // [23] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [23] phi (byte) main::s1#2 = (byte) 0 [phi:main::@3->main::@4#0] -- vbuxx=vbuc1 ldx #0 - // [29] phi from main::@3 to main::@3 [phi:main::@3->main::@3] - // [29] phi (byte) main::s1#2 = (byte) main::s1#1 [phi:main::@3->main::@3#0] -- register_copy - // main::@3 - __b3: + // [23] phi from main::@4 to main::@4 [phi:main::@4->main::@4] + // [23] phi (byte) main::s1#2 = (byte) main::s1#1 [phi:main::@4->main::@4#0] -- register_copy + // main::@4 + __b4: // SPRITES_COLS[s] = WHITE - // [30] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE -- pbuc1_derefidx_vbuxx=vbuc2 + // [24] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE -- pbuc1_derefidx_vbuxx=vbuc2 lda #WHITE sta SPRITES_COLS,x // for(char s: 0..7) - // [31] (byte) main::s1#1 ← ++ (byte) main::s1#2 -- vbuxx=_inc_vbuxx + // [25] (byte) main::s1#1 ← ++ (byte) main::s1#2 -- vbuxx=_inc_vbuxx inx - // [32] if((byte) main::s1#1!=(byte) 8) goto main::@3 -- vbuxx_neq_vbuc1_then_la1 + // [26] if((byte) main::s1#1!=(byte) 8) goto main::@4 -- vbuxx_neq_vbuc1_then_la1 cpx #8 - bne __b3 - // [33] phi from main::@3 to main::@4 [phi:main::@3->main::@4] - // main::@4 - // plexSine() - // [34] call plexSine + bne __b4 + // [27] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // main::@5 + // plex_move() + // [28] call plex_move // Move the sprites - // [76] phi from main::@4 to plexSine [phi:main::@4->plexSine] - // [76] phi (byte) sin_idx#10 = (byte) 0 [phi:main::@4->plexSine#0] -- vbuz1=vbuc1 + // [76] phi from main::@5 to plex_move [phi:main::@5->plex_move] + // [76] phi (byte*) scroll_text_next#25 = (const byte*) SCROLL_TEXT [phi:main::@5->plex_move#0] -- pbuz1=pbuc1 + lda #SCROLL_TEXT + sta.z scroll_text_next+1 + // [76] phi (byte) sin_idx#10 = (byte) 0 [phi:main::@5->plex_move#1] -- vbuz1=vbuc1 lda #0 sta.z sin_idx - jsr plexSine - // [35] phi from main::@4 to main::@10 [phi:main::@4->main::@10] - // main::@10 - // plexSort() - // [36] call plexSort - // Sort the sprites by y-position - // [51] phi from main::@10 to plexSort [phi:main::@10->plexSort] - jsr plexSort + jsr plex_move + // [29] phi from main::@5 to main::@11 [phi:main::@5->main::@11] // main::@11 + // plexSort() + // [30] call plexSort + // Sort the sprites by y-position + // [51] phi from main::@11 to plexSort [phi:main::@11->plexSort] + jsr plexSort + // main::@12 // asm // asm { sei } // Enable the plex IRQ sei // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [38] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT // *VIC_CONTROL &=0x7f - // [39] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to 0x00 lda #$7f and VIC_CONTROL sta VIC_CONTROL // *RASTER = 0x28 - // [40] *((const nomodify byte*) RASTER) ← (byte) $28 -- _deref_pbuc1=vbuc2 + // [34] *((const nomodify byte*) RASTER) ← (byte) $28 -- _deref_pbuc1=vbuc2 lda #$28 sta RASTER // *IRQ_ENABLE = IRQ_RASTER - // [41] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [35] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE // *IRQ_STATUS = IRQ_RASTER - // [42] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [36] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge any IRQ sta IRQ_STATUS // *KERNEL_IRQ = &plex_irq - // [43] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() -- _deref_pptc1=pprc2 + // [37] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #main::@6] // main::@6 __b6: - // plexSine() - // [47] call plexSine + // while(!frame_done) + // [39] if((volatile bool) frame_done) goto main::@7 -- vboz1_then_la1 + lda.z frame_done + cmp #0 + bne __b7 + jmp __b6 + // main::@7 + __b7: + // frame_done = false + // [40] (volatile bool) frame_done ← false -- vboz1=vboc1 + lda #0 + sta.z frame_done + // plex_move() + // [41] call plex_move //*BORDERCOL = RED; // Move the sprites - // [76] phi from main::@6 to plexSine [phi:main::@6->plexSine] - // [76] phi (byte) sin_idx#10 = (byte) sin_idx#12 [phi:main::@6->plexSine#0] -- register_copy - jsr plexSine - // [48] phi from main::@6 to main::@12 [phi:main::@6->main::@12] - // main::@12 - // plexSort() - // [49] call plexSort - // Sort the sprites by y-position - // [51] phi from main::@12 to plexSort [phi:main::@12->plexSort] - jsr plexSort + // [76] phi from main::@7 to plex_move [phi:main::@7->plex_move] + // [76] phi (byte*) scroll_text_next#25 = (byte*) scroll_text_next#13 [phi:main::@7->plex_move#0] -- register_copy + // [76] phi (byte) sin_idx#10 = (byte) sin_idx#12 [phi:main::@7->plex_move#1] -- register_copy + jsr plex_move + // [42] phi from main::@7 to main::@13 [phi:main::@7->main::@13] // main::@13 - // framedone = false - // [50] (volatile bool) framedone ← false -- vboz1=vboc1 - //*BORDERCOL = GREEN; - lda #0 - sta.z framedone - jmp __b5 + // plexSort() + // [43] call plexSort + // Sort the sprites by y-position + // [51] phi from main::@13 to plexSort [phi:main::@13->plexSort] + jsr plexSort + jmp __b6 + // main::@2 + __b2: + // SPRITE_0+s + // [44] (byte~) main::$7 ← (const byte) toSpritePtr1_return#0 + (byte) main::s#2 -- vbuaa=vbuc1_plus_vbuz1 + lda #toSpritePtr1_return + clc + adc.z s + // PLEX_PTR[s] = SPRITE_0+s + // [45] *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte~) main::$7 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z s + sta PLEX_PTR,y + // PLEX_XPOS[s] = { XMOVEMENT_HI[x], XMOVEMENT[x] } + // [46] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1 -- vbuyy=vbuz1_rol_1 + tya + asl + tay + // [47] (word~) main::$13 ← *((const nomodify byte*) XMOVEMENT_HI + (byte) main::x#2) w= *((const byte*) XMOVEMENT + (byte) main::x#2) -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx + lda XMOVEMENT_HI,x + sta.z __13+1 + lda XMOVEMENT,x + sta.z __13 + // [48] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word~) main::$13 -- pwuc1_derefidx_vbuyy=vwuz1 + sta PLEX_XPOS,y + lda.z __13+1 + sta PLEX_XPOS+1,y + // x+=8 + // [49] (byte) main::x#1 ← (byte) main::x#2 + (byte) 8 -- vbuxx=vbuxx_plus_vbuc1 + txa + axs #-[8] + // for(char s=0, x=0;smain::@1] + // [20] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@2->main::@1#0] -- register_copy + // [20] phi (byte) main::s#2 = (byte) main::s#1 [phi:main::@2->main::@1#1] -- register_copy + jmp __b1 } // plexSort // Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions in PLEX_YPOS @@ -6749,9 +7324,9 @@ main: { // 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 = 5 + .label nxt_idx = $17 + .label nxt_y = $16 + .label m = 9 // [52] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] // [52] phi (byte) plexSort::m#2 = (byte) 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 lda #0 @@ -6858,70 +7433,138 @@ plexSort: { // [75] return rts } - // plexSine -// Move the plex sprites in an Y-sine -plexSine: { + // plex_move +// Move the plex sprites in an Y-sine and scroll them to the left. +plex_move: { + .label s = 9 // y_idx = sin_idx - // [77] (byte) plexSine::y_idx#0 ← (byte) sin_idx#10 -- vbuxx=vbuz1 - // Assign sinus positions + // [77] (byte) plex_move::y_idx#0 ← (byte) sin_idx#10 -- vbuxx=vbuz1 ldx.z sin_idx - // [78] phi from plexSine to plexSine::@1 [phi:plexSine->plexSine::@1] - // [78] phi (byte) plexSine::sy#2 = (byte) 0 [phi:plexSine->plexSine::@1#0] -- vbuyy=vbuc1 - ldy #0 - // [78] phi (byte) plexSine::y_idx#2 = (byte) plexSine::y_idx#0 [phi:plexSine->plexSine::@1#1] -- register_copy - // [78] phi from plexSine::@1 to plexSine::@1 [phi:plexSine::@1->plexSine::@1] - // [78] phi (byte) plexSine::sy#2 = (byte) plexSine::sy#1 [phi:plexSine::@1->plexSine::@1#0] -- register_copy - // [78] phi (byte) plexSine::y_idx#2 = (byte) plexSine::y_idx#1 [phi:plexSine::@1->plexSine::@1#1] -- register_copy - // plexSine::@1 + // [78] phi from plex_move to plex_move::@1 [phi:plex_move->plex_move::@1] + // [78] phi (byte*) scroll_text_next#11 = (byte*) scroll_text_next#25 [phi:plex_move->plex_move::@1#0] -- register_copy + // [78] phi (byte) plex_move::s#2 = (byte) 0 [phi:plex_move->plex_move::@1#1] -- vbuz1=vbuc1 + lda #0 + sta.z s + // [78] phi (byte) plex_move::y_idx#2 = (byte) plex_move::y_idx#0 [phi:plex_move->plex_move::@1#2] -- register_copy + // [78] phi from plex_move::@2 to plex_move::@1 [phi:plex_move::@2->plex_move::@1] + // [78] phi (byte*) scroll_text_next#11 = (byte*) scroll_text_next#13 [phi:plex_move::@2->plex_move::@1#0] -- register_copy + // [78] phi (byte) plex_move::s#2 = (byte) plex_move::s#1 [phi:plex_move::@2->plex_move::@1#1] -- register_copy + // [78] phi (byte) plex_move::y_idx#2 = (byte) plex_move::y_idx#1 [phi:plex_move::@2->plex_move::@1#2] -- register_copy + // plex_move::@1 __b1: - // PLEX_YPOS[sy] = YSIN[y_idx] - // [79] *((const byte*) PLEX_YPOS + (byte) plexSine::sy#2) ← *((const byte*) YSIN + (byte) plexSine::y_idx#2) -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx + // PLEX_YPOS[s] = YSIN[y_idx] + // [79] *((const byte*) PLEX_YPOS + (byte) plex_move::s#2) ← *((const byte*) YSIN + (byte) plex_move::y_idx#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuxx + // Assign sine value lda YSIN,x + ldy.z s sta PLEX_YPOS,y // y_idx += 8 - // [80] (byte) plexSine::y_idx#1 ← (byte) plexSine::y_idx#2 + (byte) 8 -- vbuxx=vbuxx_plus_vbuc1 + // [80] (byte) plex_move::y_idx#1 ← (byte) plex_move::y_idx#2 + (byte) 8 -- vbuxx=vbuxx_plus_vbuc1 txa axs #-[8] - // for(char sy: 0..PLEX_COUNT-1) - // [81] (byte) plexSine::sy#1 ← ++ (byte) plexSine::sy#2 -- vbuyy=_inc_vbuyy - iny - // [82] if((byte) plexSine::sy#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexSine::@1 -- vbuyy_neq_vbuc1_then_la1 - cpy #PLEX_COUNT-1+1 + // PLEX_XPOS[s]==0 + // [81] (byte~) plex_move::$6 ← (byte) plex_move::s#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + tya + asl + // if(PLEX_XPOS[s]==0) + // [82] if(*((const word*) PLEX_XPOS + (byte~) plex_move::$6)!=(byte) 0) goto plex_move::@2 -- pwuc1_derefidx_vbuaa_neq_0_then_la1 + tay + lda PLEX_XPOS+1,y + bne __b2 + lda PLEX_XPOS,y + bne __b2 + // plex_move::@4 + // PLEX_XPOS[s] = 11*32 + // [83] (byte~) plex_move::$7 ← (byte) plex_move::s#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z s + asl + // [84] *((const word*) PLEX_XPOS + (byte~) plex_move::$7) ← (word)(number) $b*(number) $20 -- pwuc1_derefidx_vbuaa=vwuc2 + // Move sprite to far right + tay + lda #<$b*$20 + sta PLEX_XPOS,y + lda #>$b*$20 + sta PLEX_XPOS+1,y + // if(*scroll_text_next==0) + // [85] if(*((byte*) scroll_text_next#11)!=(byte) 0) goto plex_move::@6 -- _deref_pbuz1_neq_0_then_la1 + ldy #0 + lda (scroll_text_next),y + cmp #0 + bne __b3 + // [87] phi from plex_move::@4 to plex_move::@3 [phi:plex_move::@4->plex_move::@3] + // [87] phi (byte*) scroll_text_next#12 = (const byte*) SCROLL_TEXT [phi:plex_move::@4->plex_move::@3#0] -- pbuz1=pbuc1 + lda #SCROLL_TEXT + sta.z scroll_text_next+1 + // [86] phi from plex_move::@4 to plex_move::@6 [phi:plex_move::@4->plex_move::@6] + // plex_move::@6 + // [87] phi from plex_move::@6 to plex_move::@3 [phi:plex_move::@6->plex_move::@3] + // [87] phi (byte*) scroll_text_next#12 = (byte*) scroll_text_next#11 [phi:plex_move::@6->plex_move::@3#0] -- register_copy + // plex_move::@3 + __b3: + // SPRITE_0+*scroll_text_next++ + // [88] (byte~) plex_move::$4 ← (const byte) toSpritePtr1_return#0 + *((byte*) scroll_text_next#12) -- vbuaa=vbuc1_plus__deref_pbuz1 + lda #toSpritePtr1_return + clc + ldy #0 + adc (scroll_text_next),y + // PLEX_PTR[s] = SPRITE_0+*scroll_text_next++ + // [89] *((const byte*) PLEX_PTR + (byte) plex_move::s#2) ← (byte~) plex_move::$4 -- pbuc1_derefidx_vbuz1=vbuaa + // Read next char from the scroll text + ldy.z s + sta PLEX_PTR,y + // PLEX_PTR[s] = SPRITE_0+*scroll_text_next++; + // [90] (byte*) scroll_text_next#4 ← ++ (byte*) scroll_text_next#12 -- pbuz1=_inc_pbuz1 + inc.z scroll_text_next + bne !+ + inc.z scroll_text_next+1 + !: + // [91] phi from plex_move::@1 plex_move::@3 to plex_move::@2 [phi:plex_move::@1/plex_move::@3->plex_move::@2] + // [91] phi (byte*) scroll_text_next#13 = (byte*) scroll_text_next#11 [phi:plex_move::@1/plex_move::@3->plex_move::@2#0] -- register_copy + // plex_move::@2 + __b2: + // for(char s: 0..PLEX_COUNT-1) + // [92] (byte) plex_move::s#1 ← ++ (byte) plex_move::s#2 -- vbuz1=_inc_vbuz1 + inc.z s + // [93] if((byte) plex_move::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plex_move::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #PLEX_COUNT-1+1 + cmp.z s bne __b1 - // plexSine::@2 + // plex_move::@5 // sin_idx +=1 - // [83] (byte) sin_idx#12 ← (byte) sin_idx#10 + (byte) 1 -- vbuz1=vbuz1_plus_1 + // [94] (byte) sin_idx#12 ← (byte) sin_idx#10 + (byte) 1 -- vbuz1=vbuz1_plus_1 inc.z sin_idx - // plexSine::@return + // plex_move::@return // } - // [84] return + // [95] return rts } // plexInit // Initialize the multiplexer data structures plexInit: { - // [86] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] + // [97] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] // plexInit::plexSetScreen1 - // [87] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] - // [87] phi (byte) plexInit::i#2 = (byte) 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 + // [98] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] + // [98] phi (byte) plexInit::i#2 = (byte) 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 ldx #0 - // [87] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] - // [87] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy + // [98] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] + // [98] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy // plexInit::@1 __b1: // PLEX_SORTED_IDX[i] = i - // [88] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx + // [99] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx txa sta PLEX_SORTED_IDX,x // for(char i: 0..PLEX_COUNT-1) - // [89] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 -- vbuxx=_inc_vbuxx + // [100] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 -- vbuxx=_inc_vbuxx inx - // [90] if((byte) plexInit::i#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1 + // [101] if((byte) plexInit::i#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #PLEX_COUNT-1+1 bne __b1 // plexInit::@return // } - // [91] return + // [102] return rts } // font_2x2_to_sprites @@ -6931,42 +7574,42 @@ plexInit: { // - num_chars The number of chars to convert font_2x2_to_sprites: { .const num_chars = $40 - .label __3 = $18 + .label __3 = $17 .label char_right = $d .label sprite_idx = $a .label char_left = $b - .label char_current = 6 - .label sprite = 8 - .label c = 5 - // [93] phi from font_2x2_to_sprites to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1] - // [93] phi (byte*) font_2x2_to_sprites::sprite#4 = (const nomodify byte*) SPRITES [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#0] -- pbuz1=pbuc1 + .label char_current = 5 + .label sprite = 7 + .label c = 9 + // [104] phi from font_2x2_to_sprites to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1] + // [104] phi (byte*) font_2x2_to_sprites::sprite#4 = (const nomodify byte*) SPRITES [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#0] -- pbuz1=pbuc1 lda #SPRITES sta.z sprite+1 - // [93] phi (byte*) font_2x2_to_sprites::char_current#2 = (const nomodify byte*) FONT [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#1] -- pbuz1=pbuc1 + // [104] phi (byte*) font_2x2_to_sprites::char_current#2 = (const byte*) FONT [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#1] -- pbuz1=pbuc1 lda #FONT sta.z char_current+1 - // [93] phi (byte) font_2x2_to_sprites::c#2 = (byte) 0 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#2] -- vbuz1=vbuc1 + // [104] phi (byte) font_2x2_to_sprites::c#2 = (byte) 0 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#2] -- vbuz1=vbuc1 lda #0 sta.z c // font_2x2_to_sprites::@1 __b1: // for(char c=0;c$40*8 sta.z char_right+1 - // [97] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) font_2x2_to_sprites::char_current#2 -- pbuz1=pbuz2 + // [108] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) font_2x2_to_sprites::char_current#2 -- pbuz1=pbuz2 lda.z char_current sta.z char_left lda.z char_current+1 sta.z char_left+1 - // [98] phi from font_2x2_to_sprites::@2 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3] - // [98] phi (byte*) font_2x2_to_sprites::char_right#3 = (byte*) font_2x2_to_sprites::char_right#0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#0] -- register_copy - // [98] phi (byte) font_2x2_to_sprites::sprite_idx#4 = (byte) 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#1] -- vbuz1=vbuc1 + // [109] phi from font_2x2_to_sprites::@2 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3] + // [109] phi (byte*) font_2x2_to_sprites::char_right#3 = (byte*) font_2x2_to_sprites::char_right#0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#0] -- register_copy + // [109] phi (byte) font_2x2_to_sprites::sprite_idx#4 = (byte) 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#1] -- vbuz1=vbuc1 lda #0 sta.z sprite_idx - // [98] phi (byte*) font_2x2_to_sprites::char_left#3 = (byte*) font_2x2_to_sprites::char_left#6 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#2] -- register_copy - // [98] phi (byte) font_2x2_to_sprites::i#2 = (byte) 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#3] -- vbuxx=vbuc1 + // [109] phi (byte*) font_2x2_to_sprites::char_left#3 = (byte*) font_2x2_to_sprites::char_left#6 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#2] -- register_copy + // [109] phi (byte) font_2x2_to_sprites::i#2 = (byte) 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#3] -- vbuxx=vbuc1 tax - // [98] phi from font_2x2_to_sprites::@5 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3] - // [98] phi (byte*) font_2x2_to_sprites::char_right#3 = (byte*) font_2x2_to_sprites::char_right#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#0] -- register_copy - // [98] phi (byte) font_2x2_to_sprites::sprite_idx#4 = (byte) font_2x2_to_sprites::sprite_idx#3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#1] -- register_copy - // [98] phi (byte*) font_2x2_to_sprites::char_left#3 = (byte*) font_2x2_to_sprites::char_left#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#2] -- register_copy - // [98] phi (byte) font_2x2_to_sprites::i#2 = (byte) font_2x2_to_sprites::i#1 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#3] -- register_copy + // [109] phi from font_2x2_to_sprites::@5 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3] + // [109] phi (byte*) font_2x2_to_sprites::char_right#3 = (byte*) font_2x2_to_sprites::char_right#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#0] -- register_copy + // [109] phi (byte) font_2x2_to_sprites::sprite_idx#4 = (byte) font_2x2_to_sprites::sprite_idx#3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#1] -- register_copy + // [109] phi (byte*) font_2x2_to_sprites::char_left#3 = (byte*) font_2x2_to_sprites::char_left#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#2] -- register_copy + // [109] phi (byte) font_2x2_to_sprites::i#2 = (byte) font_2x2_to_sprites::i#1 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#3] -- register_copy // font_2x2_to_sprites::@3 __b3: // i&7 - // [99] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 + // [110] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 lda #7 sax.z __3 // sprite[sprite_idx++] = char_left[i&7] - // [100] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) font_2x2_to_sprites::$3) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 + // [111] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) font_2x2_to_sprites::$3) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 ldy.z __3 lda (char_left),y ldy.z sprite_idx sta (sprite),y // sprite[sprite_idx++] = char_left[i&7]; - // [101] (byte) font_2x2_to_sprites::sprite_idx#1 ← ++ (byte) font_2x2_to_sprites::sprite_idx#4 -- vbuz1=_inc_vbuz1 + // [112] (byte) font_2x2_to_sprites::sprite_idx#1 ← ++ (byte) font_2x2_to_sprites::sprite_idx#4 -- vbuz1=_inc_vbuz1 inc.z sprite_idx // sprite[sprite_idx++] = char_right[i&7] - // [102] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) font_2x2_to_sprites::$3) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 + // [113] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) font_2x2_to_sprites::$3) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 ldy.z __3 lda (char_right),y ldy.z sprite_idx sta (sprite),y // sprite[sprite_idx++] = char_right[i&7]; - // [103] (byte) font_2x2_to_sprites::sprite_idx#2 ← ++ (byte) font_2x2_to_sprites::sprite_idx#1 -- vbuyy=_inc_vbuz1 + // [114] (byte) font_2x2_to_sprites::sprite_idx#2 ← ++ (byte) font_2x2_to_sprites::sprite_idx#1 -- vbuyy=_inc_vbuz1 iny // sprite[sprite_idx++] = 0x00 - // [104] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + // [115] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 lda #0 sta (sprite),y // sprite[sprite_idx++] = 0x00; - // [105] (byte) font_2x2_to_sprites::sprite_idx#3 ← ++ (byte) font_2x2_to_sprites::sprite_idx#2 -- vbuz1=_inc_vbuyy + // [116] (byte) font_2x2_to_sprites::sprite_idx#3 ← ++ (byte) font_2x2_to_sprites::sprite_idx#2 -- vbuz1=_inc_vbuyy iny sty.z sprite_idx // if(i==7) - // [106] if((byte) font_2x2_to_sprites::i#2==(byte) 7) goto font_2x2_to_sprites::@4 -- vbuxx_eq_vbuc1_then_la1 + // [117] if((byte) font_2x2_to_sprites::i#2==(byte) 7) goto font_2x2_to_sprites::@4 -- vbuxx_eq_vbuc1_then_la1 cpx #7 beq __b4 // font_2x2_to_sprites::@6 // if(i==15) - // [107] if((byte) font_2x2_to_sprites::i#2!=(byte) $f) goto font_2x2_to_sprites::@8 -- vbuxx_neq_vbuc1_then_la1 + // [118] if((byte) font_2x2_to_sprites::i#2!=(byte) $f) goto font_2x2_to_sprites::@8 -- vbuxx_neq_vbuc1_then_la1 cpx #$f bne __b5 - // [109] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5] - // [109] phi (byte*) font_2x2_to_sprites::char_right#4 = (const nomodify byte*) FONT+(byte) ' '*(byte) 8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#0] -- pbuz1=pbuc1 + // [120] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5] + // [120] phi (byte*) font_2x2_to_sprites::char_right#4 = (const byte*) FONT+(byte) ' '*(byte) 8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#0] -- pbuz1=pbuc1 lda #FONT+' '*8 sta.z char_right+1 - // [109] phi (byte*) font_2x2_to_sprites::char_left#4 = (const nomodify byte*) FONT+(byte) ' '*(byte) 8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#1] -- pbuz1=pbuc1 + // [120] phi (byte*) font_2x2_to_sprites::char_left#4 = (const byte*) FONT+(byte) ' '*(byte) 8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#1] -- pbuz1=pbuc1 lda #FONT+' '*8 sta.z char_left+1 - // [108] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@8] + // [119] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@8] // font_2x2_to_sprites::@8 - // [109] phi from font_2x2_to_sprites::@4 font_2x2_to_sprites::@8 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5] - // [109] phi (byte*) font_2x2_to_sprites::char_right#4 = (byte*) font_2x2_to_sprites::char_right#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#0] -- register_copy - // [109] phi (byte*) font_2x2_to_sprites::char_left#4 = (byte*) font_2x2_to_sprites::char_left#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#1] -- register_copy + // [120] phi from font_2x2_to_sprites::@4 font_2x2_to_sprites::@8 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5] + // [120] phi (byte*) font_2x2_to_sprites::char_right#4 = (byte*) font_2x2_to_sprites::char_right#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#0] -- register_copy + // [120] phi (byte*) font_2x2_to_sprites::char_left#4 = (byte*) font_2x2_to_sprites::char_left#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#1] -- register_copy // font_2x2_to_sprites::@5 __b5: // for(char i: 0..20) - // [110] (byte) font_2x2_to_sprites::i#1 ← ++ (byte) font_2x2_to_sprites::i#2 -- vbuxx=_inc_vbuxx + // [121] (byte) font_2x2_to_sprites::i#1 ← ++ (byte) font_2x2_to_sprites::i#2 -- vbuxx=_inc_vbuxx inx - // [111] if((byte) font_2x2_to_sprites::i#1!=(byte) $15) goto font_2x2_to_sprites::@3 -- vbuxx_neq_vbuc1_then_la1 + // [122] if((byte) font_2x2_to_sprites::i#1!=(byte) $15) goto font_2x2_to_sprites::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #$15 bne __b3 // font_2x2_to_sprites::@7 // char_current += 8 - // [112] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [123] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z char_current @@ -7068,7 +7711,7 @@ font_2x2_to_sprites: { inc.z char_current+1 !: // sprite += 0x40 - // [113] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40 -- pbuz1=pbuz1_plus_vbuc1 + // [124] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40 -- pbuz1=pbuz1_plus_vbuc1 lda #$40 clc adc.z sprite @@ -7077,17 +7720,17 @@ font_2x2_to_sprites: { inc.z sprite+1 !: // for(char c=0;cfont_2x2_to_sprites::@1] - // [93] phi (byte*) font_2x2_to_sprites::sprite#4 = (byte*) font_2x2_to_sprites::sprite#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#0] -- register_copy - // [93] phi (byte*) font_2x2_to_sprites::char_current#2 = (byte*) font_2x2_to_sprites::char_current#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#1] -- register_copy - // [93] phi (byte) font_2x2_to_sprites::c#2 = (byte) font_2x2_to_sprites::c#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#2] -- register_copy + // [104] phi from font_2x2_to_sprites::@7 to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1] + // [104] phi (byte*) font_2x2_to_sprites::sprite#4 = (byte*) font_2x2_to_sprites::sprite#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#0] -- register_copy + // [104] phi (byte*) font_2x2_to_sprites::char_current#2 = (byte*) font_2x2_to_sprites::char_current#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#1] -- register_copy + // [104] phi (byte) font_2x2_to_sprites::c#2 = (byte) font_2x2_to_sprites::c#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#2] -- register_copy jmp __b1 // font_2x2_to_sprites::@4 __b4: // char_left = char_current + 0x80*8 - // [115] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [126] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z char_current clc adc #<$80*8 @@ -7096,7 +7739,7 @@ font_2x2_to_sprites: { adc #>$80*8 sta.z char_left+1 // char_right = char_current + 0xc0*8 - // [116] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [127] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z char_current clc adc #<$c0*8 @@ -7114,40 +7757,40 @@ font_2x2_to_sprites: { // - 0x80 - 0xbf Lower left glyphs // - 0xc0 - 0xff Lower right glyphs font_2x2: { - .label __5 = $f - .label __7 = $f - .label next_2x2_left = 6 + .label __5 = $14 + .label __7 = $14 + .label next_2x2_left = 5 .label next_2x2_right = $d - .label glyph_bits = $18 - .label glyph_bits_2x2 = $f + .label glyph_bits = $16 + .label glyph_bits_2x2 = $14 .label l2 = $17 - .label l = $16 + .label l = $a .label next_2x2_left_1 = $b - .label next_2x2 = 6 - .label next_original = 8 - .label c = $a - // [118] phi from font_2x2 to font_2x2::@1 [phi:font_2x2->font_2x2::@1] - // [118] phi (byte) font_2x2::c#11 = (byte) 0 [phi:font_2x2->font_2x2::@1#0] -- vbuz1=vbuc1 + .label next_2x2 = 5 + .label next_original = 7 + .label c = 9 + // [129] phi from font_2x2 to font_2x2::@1 [phi:font_2x2->font_2x2::@1] + // [129] phi (byte) font_2x2::c#11 = (byte) 0 [phi:font_2x2->font_2x2::@1#0] -- vbuz1=vbuc1 lda #0 sta.z c - // [118] phi (byte*) font_2x2::next_original#4 = (const nomodify byte*) CHARGEN [phi:font_2x2->font_2x2::@1#1] -- pbuz1=pbuc1 + // [129] phi (byte*) font_2x2::next_original#4 = (const nomodify byte*) CHARGEN [phi:font_2x2->font_2x2::@1#1] -- pbuz1=pbuc1 lda #CHARGEN sta.z next_original+1 - // [118] phi (byte*) font_2x2::next_2x2_left#0 = (const nomodify byte*) FONT [phi:font_2x2->font_2x2::@1#2] -- pbuz1=pbuc1 + // [129] phi (byte*) font_2x2::next_2x2_left#0 = (const byte*) FONT [phi:font_2x2->font_2x2::@1#2] -- pbuz1=pbuc1 lda #FONT sta.z next_2x2_left+1 - // [118] phi from font_2x2::@9 to font_2x2::@1 [phi:font_2x2::@9->font_2x2::@1] - // [118] phi (byte) font_2x2::c#11 = (byte) font_2x2::c#1 [phi:font_2x2::@9->font_2x2::@1#0] -- register_copy - // [118] phi (byte*) font_2x2::next_original#4 = (byte*) font_2x2::next_original#1 [phi:font_2x2::@9->font_2x2::@1#1] -- register_copy - // [118] phi (byte*) font_2x2::next_2x2_left#0 = (byte*) font_2x2::next_2x2#1 [phi:font_2x2::@9->font_2x2::@1#2] -- register_copy + // [129] phi from font_2x2::@9 to font_2x2::@1 [phi:font_2x2::@9->font_2x2::@1] + // [129] phi (byte) font_2x2::c#11 = (byte) font_2x2::c#1 [phi:font_2x2::@9->font_2x2::@1#0] -- register_copy + // [129] phi (byte*) font_2x2::next_original#4 = (byte*) font_2x2::next_original#1 [phi:font_2x2::@9->font_2x2::@1#1] -- register_copy + // [129] phi (byte*) font_2x2::next_2x2_left#0 = (byte*) font_2x2::next_2x2#1 [phi:font_2x2::@9->font_2x2::@1#2] -- register_copy // font_2x2::@1 __b1: // next_2x2_right = next_2x2 + 0x40*8 - // [119] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [130] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z next_2x2_left clc adc #<$40*8 @@ -7155,136 +7798,136 @@ font_2x2: { lda.z next_2x2_left+1 adc #>$40*8 sta.z next_2x2_right+1 - // [120] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0 -- pbuz1=pbuz2 + // [131] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0 -- pbuz1=pbuz2 lda.z next_2x2_left sta.z next_2x2_left_1 lda.z next_2x2_left+1 sta.z next_2x2_left_1+1 - // [121] phi from font_2x2::@1 to font_2x2::@2 [phi:font_2x2::@1->font_2x2::@2] - // [121] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#0 [phi:font_2x2::@1->font_2x2::@2#0] -- register_copy - // [121] phi (byte) font_2x2::l2#8 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#1] -- vbuz1=vbuc1 + // [132] phi from font_2x2::@1 to font_2x2::@2 [phi:font_2x2::@1->font_2x2::@2] + // [132] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#0 [phi:font_2x2::@1->font_2x2::@2#0] -- register_copy + // [132] phi (byte) font_2x2::l2#8 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#1] -- vbuz1=vbuc1 lda #0 sta.z l2 - // [121] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#10 [phi:font_2x2::@1->font_2x2::@2#2] -- register_copy - // [121] phi (byte) font_2x2::l#2 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#3] -- vbuz1=vbuc1 + // [132] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#10 [phi:font_2x2::@1->font_2x2::@2#2] -- register_copy + // [132] phi (byte) font_2x2::l#2 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#3] -- vbuz1=vbuc1 sta.z l - // [121] phi from font_2x2::@8 to font_2x2::@2 [phi:font_2x2::@8->font_2x2::@2] - // [121] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#8 [phi:font_2x2::@8->font_2x2::@2#0] -- register_copy - // [121] phi (byte) font_2x2::l2#8 = (byte) font_2x2::l2#9 [phi:font_2x2::@8->font_2x2::@2#1] -- register_copy - // [121] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#8 [phi:font_2x2::@8->font_2x2::@2#2] -- register_copy - // [121] phi (byte) font_2x2::l#2 = (byte) font_2x2::l#1 [phi:font_2x2::@8->font_2x2::@2#3] -- register_copy + // [132] phi from font_2x2::@8 to font_2x2::@2 [phi:font_2x2::@8->font_2x2::@2] + // [132] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#8 [phi:font_2x2::@8->font_2x2::@2#0] -- register_copy + // [132] phi (byte) font_2x2::l2#8 = (byte) font_2x2::l2#9 [phi:font_2x2::@8->font_2x2::@2#1] -- register_copy + // [132] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#8 [phi:font_2x2::@8->font_2x2::@2#2] -- register_copy + // [132] phi (byte) font_2x2::l#2 = (byte) font_2x2::l#1 [phi:font_2x2::@8->font_2x2::@2#3] -- register_copy // font_2x2::@2 __b2: // glyph_bits = next_original[l] - // [122] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2) -- vbuz1=pbuz2_derefidx_vbuz3 + // [133] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2) -- vbuz1=pbuz2_derefidx_vbuz3 ldy.z l lda (next_original),y sta.z glyph_bits - // [123] phi from font_2x2::@2 to font_2x2::@3 [phi:font_2x2::@2->font_2x2::@3] - // [123] phi (byte) font_2x2::b#2 = (byte) 0 [phi:font_2x2::@2->font_2x2::@3#0] -- vbuyy=vbuc1 + // [134] phi from font_2x2::@2 to font_2x2::@3 [phi:font_2x2::@2->font_2x2::@3] + // [134] phi (byte) font_2x2::b#2 = (byte) 0 [phi:font_2x2::@2->font_2x2::@3#0] -- vbuyy=vbuc1 ldy #0 - // [123] phi (word) font_2x2::glyph_bits_2x2#3 = (word) 0 [phi:font_2x2::@2->font_2x2::@3#1] -- vwuz1=vwuc1 + // [134] phi (word) font_2x2::glyph_bits_2x2#3 = (word) 0 [phi:font_2x2::@2->font_2x2::@3#1] -- vwuz1=vwuc1 tya sta.z glyph_bits_2x2 sta.z glyph_bits_2x2+1 - // [123] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#0 [phi:font_2x2::@2->font_2x2::@3#2] -- register_copy - // [123] phi from font_2x2::@5 to font_2x2::@3 [phi:font_2x2::@5->font_2x2::@3] - // [123] phi (byte) font_2x2::b#2 = (byte) font_2x2::b#1 [phi:font_2x2::@5->font_2x2::@3#0] -- register_copy - // [123] phi (word) font_2x2::glyph_bits_2x2#3 = (word) font_2x2::glyph_bits_2x2#2 [phi:font_2x2::@5->font_2x2::@3#1] -- register_copy - // [123] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#1 [phi:font_2x2::@5->font_2x2::@3#2] -- register_copy + // [134] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#0 [phi:font_2x2::@2->font_2x2::@3#2] -- register_copy + // [134] phi from font_2x2::@5 to font_2x2::@3 [phi:font_2x2::@5->font_2x2::@3] + // [134] phi (byte) font_2x2::b#2 = (byte) font_2x2::b#1 [phi:font_2x2::@5->font_2x2::@3#0] -- register_copy + // [134] phi (word) font_2x2::glyph_bits_2x2#3 = (word) font_2x2::glyph_bits_2x2#2 [phi:font_2x2::@5->font_2x2::@3#1] -- register_copy + // [134] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#1 [phi:font_2x2::@5->font_2x2::@3#2] -- register_copy // font_2x2::@3 __b3: // glyph_bits&0x80 - // [124] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80 -- vbuaa=vbuz1_band_vbuc1 + // [135] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80 -- vbuaa=vbuz1_band_vbuc1 lda #$80 and.z glyph_bits // (glyph_bits&0x80)?1uc:0uc - // [125] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4 -- vbuc1_neq_vbuaa_then_la1 + // [136] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4 -- vbuc1_neq_vbuaa_then_la1 cmp #0 bne __b4 - // [127] phi from font_2x2::@3 to font_2x2::@5 [phi:font_2x2::@3->font_2x2::@5] - // [127] phi (byte) font_2x2::glyph_bit#0 = (byte) 0 [phi:font_2x2::@3->font_2x2::@5#0] -- vbuxx=vbuc1 + // [138] phi from font_2x2::@3 to font_2x2::@5 [phi:font_2x2::@3->font_2x2::@5] + // [138] phi (byte) font_2x2::glyph_bit#0 = (byte) 0 [phi:font_2x2::@3->font_2x2::@5#0] -- vbuxx=vbuc1 ldx #0 jmp __b5 - // [126] phi from font_2x2::@3 to font_2x2::@4 [phi:font_2x2::@3->font_2x2::@4] + // [137] phi from font_2x2::@3 to font_2x2::@4 [phi:font_2x2::@3->font_2x2::@4] // font_2x2::@4 __b4: // (glyph_bits&0x80)?1uc:0uc - // [127] phi from font_2x2::@4 to font_2x2::@5 [phi:font_2x2::@4->font_2x2::@5] - // [127] phi (byte) font_2x2::glyph_bit#0 = (byte) 1 [phi:font_2x2::@4->font_2x2::@5#0] -- vbuxx=vbuc1 + // [138] phi from font_2x2::@4 to font_2x2::@5 [phi:font_2x2::@4->font_2x2::@5] + // [138] phi (byte) font_2x2::glyph_bit#0 = (byte) 1 [phi:font_2x2::@4->font_2x2::@5#0] -- vbuxx=vbuc1 ldx #1 // font_2x2::@5 __b5: // glyph_bits_2x2<<1 - // [128] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [139] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z __5 rol.z __5+1 // glyph_bits_2x2 = glyph_bits_2x2<<1|glyph_bit - // [129] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx + // [140] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx txa ora.z glyph_bits_2x2 sta.z glyph_bits_2x2 // glyph_bits_2x2<<1 - // [130] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [141] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z __7 rol.z __7+1 // glyph_bits_2x2 = glyph_bits_2x2<<1|glyph_bit - // [131] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx + // [142] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx txa ora.z glyph_bits_2x2 sta.z glyph_bits_2x2 // glyph_bits <<= 1 - // [132] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 + // [143] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 // Move to next bit asl.z glyph_bits // for(char b: 0..7) - // [133] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2 -- vbuyy=_inc_vbuyy + // [144] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2 -- vbuyy=_inc_vbuyy iny - // [134] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3 -- vbuyy_neq_vbuc1_then_la1 + // [145] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3 -- vbuyy_neq_vbuc1_then_la1 cpy #8 bne __b3 // font_2x2::@6 // >glyph_bits_2x2 - // [135] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 -- vbuaa=_hi_vwuz1 + // [146] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 -- vbuaa=_hi_vwuz1 lda.z glyph_bits_2x2+1 // next_2x2_left[l2] = >glyph_bits_2x2 - // [136] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuz2=vbuaa + // [147] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuz2=vbuaa // Put the generated 2x2-line into the 2x2-font twice ldy.z l2 sta (next_2x2_left_1),y // l2+1 - // [137] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuyy=vbuz1_plus_1 + // [148] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuyy=vbuz1_plus_1 iny // next_2x2_left[l2+1] = >glyph_bits_2x2 - // [138] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuyy=vbuaa + // [149] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuyy=vbuaa sta (next_2x2_left_1),y // $80*8 sta.z next_2x2_left_1+1 // next_2x2_right = next_2x2 + 0xc0*8 - // [146] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 + // [157] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 lda.z next_2x2_left clc adc #<$c0*8 @@ -7301,28 +7944,28 @@ font_2x2: { lda.z next_2x2_left+1 adc #>$c0*8 sta.z next_2x2_right+1 - // [147] phi from font_2x2::@7 to font_2x2::@8 [phi:font_2x2::@7->font_2x2::@8] - // [147] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#1 [phi:font_2x2::@7->font_2x2::@8#0] -- register_copy - // [147] phi (byte) font_2x2::l2#9 = (byte) 0 [phi:font_2x2::@7->font_2x2::@8#1] -- vbuz1=vbuc1 + // [158] phi from font_2x2::@7 to font_2x2::@8 [phi:font_2x2::@7->font_2x2::@8] + // [158] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#1 [phi:font_2x2::@7->font_2x2::@8#0] -- register_copy + // [158] phi (byte) font_2x2::l2#9 = (byte) 0 [phi:font_2x2::@7->font_2x2::@8#1] -- vbuz1=vbuc1 lda #0 sta.z l2 - // [147] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#1 [phi:font_2x2::@7->font_2x2::@8#2] -- register_copy - // [147] phi from font_2x2::@6 to font_2x2::@8 [phi:font_2x2::@6->font_2x2::@8] - // [147] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#7 [phi:font_2x2::@6->font_2x2::@8#0] -- register_copy - // [147] phi (byte) font_2x2::l2#9 = (byte) font_2x2::l2#1 [phi:font_2x2::@6->font_2x2::@8#1] -- register_copy - // [147] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#7 [phi:font_2x2::@6->font_2x2::@8#2] -- register_copy + // [158] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#1 [phi:font_2x2::@7->font_2x2::@8#2] -- register_copy + // [158] phi from font_2x2::@6 to font_2x2::@8 [phi:font_2x2::@6->font_2x2::@8] + // [158] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#7 [phi:font_2x2::@6->font_2x2::@8#0] -- register_copy + // [158] phi (byte) font_2x2::l2#9 = (byte) font_2x2::l2#1 [phi:font_2x2::@6->font_2x2::@8#1] -- register_copy + // [158] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#7 [phi:font_2x2::@6->font_2x2::@8#2] -- register_copy // font_2x2::@8 __b8: // for(char l: 0..7) - // [148] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2 -- vbuz1=_inc_vbuz1 + // [159] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2 -- vbuz1=_inc_vbuz1 inc.z l - // [149] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2 -- vbuz1_neq_vbuc1_then_la1 + // [160] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z l bne __b2 // font_2x2::@9 // next_2x2 += 8 - // [150] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [161] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 clc adc.z next_2x2 sta.z next_2x2 @@ -7330,7 +7973,7 @@ font_2x2: { inc.z next_2x2+1 !: // next_original += 8 - // [151] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + // [162] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z next_original @@ -7339,9 +7982,9 @@ font_2x2: { inc.z next_original+1 !: // for(char c: 0..0x3f) - // [152] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11 -- vbuz1=_inc_vbuz1 + // [163] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11 -- vbuz1=_inc_vbuz1 inc.z c - // [153] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1 -- vbuz1_neq_vbuc1_then_la1 + // [164] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$40 cmp.z c beq !__b1+ @@ -7349,65 +7992,66 @@ font_2x2: { !__b1: // font_2x2::@return // } - // [154] return + // [165] return rts } // plex_irq // Show sprites from the multiplexer, rescheduling the IRQ as many times as needed plex_irq: { - .label __4 = $19 + .label __4 = $18 // entry interrupt(KERNEL_MIN) // asm // asm { sei } sei - // [156] phi from plex_irq plex_irq::@7 to plex_irq::@3 [phi:plex_irq/plex_irq::@7->plex_irq::@3] + // [167] phi from plex_irq plex_irq::@7 to plex_irq::@3 [phi:plex_irq/plex_irq::@7->plex_irq::@3] // plex_irq::@3 __b3: // plexShowSprite() - // [157] call plexShowSprite + // [168] call plexShowSprite jsr plexShowSprite // plex_irq::plexFreeNextYpos1 // return PLEX_FREE_YPOS[plex_free_next]; - // [158] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) -- vbuxx=pbuc1_derefidx_vbuz1 + // [169] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) -- vbuxx=pbuc1_derefidx_vbuz1 ldy.z plex_free_next ldx PLEX_FREE_YPOS,y // plex_irq::@6 // *RASTER+3 - // [159] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 -- vbuz1=_deref_pbuc1_plus_vbuc2 + // [170] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 -- vbuz1=_deref_pbuc1_plus_vbuc2 lda #3 clc adc RASTER sta.z __4 // while (plex_show_idx < PLEX_COUNT && rasterY < *RASTER+3) - // [160] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 -- vbuz1_ge_vbuc1_then_la1 + // [171] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 -- vbuz1_ge_vbuc1_then_la1 lda.z plex_show_idx cmp #PLEX_COUNT bcs __b4 // plex_irq::@7 - // [161] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3 -- vbuxx_lt_vbuz1_then_la1 + // [172] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3 -- vbuxx_lt_vbuz1_then_la1 cpx.z __4 bcc __b3 // plex_irq::@4 __b4: // if (plex_show_idxPLEX_XPOS[xpos_idx] - // [182] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuaa=_hi_pwuc1_derefidx_vbuxx + // [193] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) -- vbuaa=_hi_pwuc1_derefidx_vbuxx lda PLEX_XPOS+1,x // if(>PLEX_XPOS[xpos_idx]!=0) - // [183] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1 + // [194] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1 cmp #0 bne __b1 // plexShowSprite::@3 // 0xff^plex_sprite_msb - // [184] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb -- vbuaa=vbuc1_bxor_vbuz1 + // [195] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb -- vbuaa=vbuc1_bxor_vbuz1 lda #$ff eor.z plex_sprite_msb // *SPRITES_XMSB &= (0xff^plex_sprite_msb) - // [185] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa + // [196] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa and SPRITES_XMSB sta SPRITES_XMSB // plexShowSprite::@2 __b2: // plex_sprite_idx+1 - // [186] (byte~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1 -- vbuxx=vbuz1_plus_1 + // [197] (byte~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1 -- vbuxx=vbuz1_plus_1 ldx.z plex_sprite_idx inx // (plex_sprite_idx+1)&7 - // [187] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7 -- vbuaa=vbuxx_band_vbuc1 + // [198] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7 -- vbuaa=vbuxx_band_vbuc1 txa and #7 // plex_sprite_idx = (plex_sprite_idx+1)&7 - // [188] (volatile byte) plex_sprite_idx ← (byte~) plexShowSprite::$6 -- vbuz1=vbuaa + // [199] (volatile byte) plex_sprite_idx ← (byte~) plexShowSprite::$6 -- vbuz1=vbuaa sta.z plex_sprite_idx // plex_show_idx++; - // [189] (volatile byte) plex_show_idx ← ++ (volatile byte) plex_show_idx -- vbuz1=_inc_vbuz1 + // [200] (volatile byte) plex_show_idx ← ++ (volatile byte) plex_show_idx -- vbuz1=_inc_vbuz1 inc.z plex_show_idx // plex_sprite_msb <<=1 - // [190] (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (byte) 1 -- vbuz1=vbuz1_rol_1 + // [201] (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (byte) 1 -- vbuz1=vbuz1_rol_1 asl.z plex_sprite_msb // if(plex_sprite_msb==0) - // [191] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1 + // [202] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1 lda.z plex_sprite_msb cmp #0 bne __breturn // plexShowSprite::@4 // plex_sprite_msb = 1 - // [192] (volatile byte) plex_sprite_msb ← (byte) 1 -- vbuz1=vbuc1 + // [203] (volatile byte) plex_sprite_msb ← (byte) 1 -- vbuz1=vbuc1 lda #1 sta.z plex_sprite_msb // plexShowSprite::@return __breturn: // } - // [193] return + // [204] return rts // plexShowSprite::@1 __b1: // *SPRITES_XMSB |= plex_sprite_msb - // [194] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + // [205] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 lda SPRITES_XMSB ora.z plex_sprite_msb sta SPRITES_XMSB @@ -7557,11 +8201,19 @@ plexShowSprite: { PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 // Contains the Y-position where each sprite is free again. PLEX_FREE_YPOS[s] holds the Y-position where sprite s is free to use again. PLEX_FREE_YPOS: .fill 8, 0 - //kickasm(pc FONT, resource "elefont.bin") {{ + //char FONT[0x0800] = kickasm(resource "elefont.bin") {{ // .import binary "elefont.bin" - //}} + //}}; + FONT: .fill $800, 0 .align $100 YSIN: .fill $100, round(142+89.5*sin(toRadians(360*i/256))) + .align $100 +XMOVEMENT: +.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100))) + + // The scroll text + SCROLL_TEXT: .text "camelot presents a spanking new contribution to the always hungry c64 scene. in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. " + .byte 0 diff --git a/src/test/ref/complex/spritescroller/spritescroller.sym b/src/test/ref/complex/spritescroller/spritescroller.sym index 12838b78c..4ebae792a 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.sym +++ b/src/test/ref/complex/spritescroller/spritescroller.sym @@ -9,7 +9,7 @@ (const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D018 = (byte*) 53272 -(const nomodify byte*) FONT = (byte*) 8192 +(const byte*) FONT[(number) $800] = { fill( $800, 0) } (const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 @@ -27,14 +27,19 @@ (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) SCREEN = (byte*) 1024 +(const byte*) SCROLL_TEXT[] = (byte*) "camelot presents a spanking new contribution to the always hungry c64 scene. in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. " (const nomodify byte*) SPRITES = (byte*) 12288 (const nomodify byte*) SPRITES_COLS = (byte*) 53287 (const nomodify byte*) SPRITES_ENABLE = (byte*) 53269 (const nomodify byte*) SPRITES_XMSB = (byte*) 53264 (const nomodify byte*) SPRITES_XPOS = (byte*) 53248 (const nomodify byte*) SPRITES_YPOS = (byte*) 53249 +(byte) SPRITE_0 (const nomodify byte*) VIC_CONTROL = (byte*) 53265 (const nomodify byte) WHITE = (byte) 1 +(const byte*) XMOVEMENT[(number) $200] = kickasm {{ .lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100))) + }} +(const nomodify byte*) XMOVEMENT_HI = (const byte*) XMOVEMENT+(word) $100 (const byte*) YSIN[(number) $100] = kickasm {{ .fill $100, round(142+89.5*sin(toRadians(360*i/256))) }} (void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2) @@ -43,8 +48,8 @@ (byte~) font_2x2::$12 reg byte a 10001.0 (byte~) font_2x2::$14 reg byte y 20002.0 (byte~) font_2x2::$15 reg byte a 10001.0 -(word~) font_2x2::$5 zp[2]:15 200002.0 -(word~) font_2x2::$7 zp[2]:15 200002.0 +(word~) font_2x2::$5 zp[2]:20 200002.0 +(word~) font_2x2::$7 zp[2]:20 200002.0 (label) font_2x2::@1 (label) font_2x2::@2 (label) font_2x2::@3 @@ -59,31 +64,31 @@ (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]:10 1501.5 -(byte) font_2x2::c#11 c zp[1]:10 58.88235294117647 +(byte) font_2x2::c#1 c zp[1]:9 1501.5 +(byte) font_2x2::c#11 c zp[1]:9 58.88235294117647 (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]:24 20002.0 -(byte) font_2x2::glyph_bits#1 glyph_bits zp[1]:24 66667.33333333333 -(byte) font_2x2::glyph_bits#2 glyph_bits zp[1]:24 34444.88888888889 +(byte) font_2x2::glyph_bits#0 glyph_bits zp[1]:22 20002.0 +(byte) font_2x2::glyph_bits#1 glyph_bits zp[1]:22 66667.33333333333 +(byte) font_2x2::glyph_bits#2 glyph_bits zp[1]:22 34444.88888888889 (word) font_2x2::glyph_bits_2x2 -(word) font_2x2::glyph_bits_2x2#1 glyph_bits_2x2 zp[2]:15 200002.0 -(word) font_2x2::glyph_bits_2x2#2 glyph_bits_2x2 zp[2]:15 27500.5 -(word) font_2x2::glyph_bits_2x2#3 glyph_bits_2x2 zp[2]:15 40000.4 +(word) font_2x2::glyph_bits_2x2#1 glyph_bits_2x2 zp[2]:20 200002.0 +(word) font_2x2::glyph_bits_2x2#2 glyph_bits_2x2 zp[2]:20 27500.5 +(word) font_2x2::glyph_bits_2x2#3 glyph_bits_2x2 zp[2]:20 40000.4 (byte) font_2x2::l -(byte) font_2x2::l#1 l zp[1]:22 15001.5 -(byte) font_2x2::l#2 l zp[1]:22 1111.2222222222222 +(byte) font_2x2::l#1 l zp[1]:10 15001.5 +(byte) font_2x2::l#2 l zp[1]:10 1111.2222222222222 (byte) font_2x2::l2 (byte) font_2x2::l2#1 l2 zp[1]:23 15001.5 (byte) font_2x2::l2#8 l2 zp[1]:23 2727.5454545454545 (byte) font_2x2::l2#9 l2 zp[1]:23 6667.333333333333 (byte*) font_2x2::next_2x2 -(byte*) font_2x2::next_2x2#1 next_2x2 zp[2]:6 500.5 +(byte*) font_2x2::next_2x2#1 next_2x2 zp[2]:5 500.5 (byte*) font_2x2::next_2x2_left -(byte*) font_2x2::next_2x2_left#0 next_2x2_left zp[2]:6 750.1875 +(byte*) font_2x2::next_2x2_left#0 next_2x2_left zp[2]:5 750.1875 (byte*) font_2x2::next_2x2_left#1 next_2x2_left_1 zp[2]:11 10001.0 (byte*) font_2x2::next_2x2_left#10 next_2x2_left_1 zp[2]:11 2002.0 (byte*) font_2x2::next_2x2_left#7 next_2x2_left_1 zp[2]:11 1708.5416666666665 @@ -94,10 +99,10 @@ (byte*) font_2x2::next_2x2_right#7 next_2x2_right zp[2]:13 1708.5416666666665 (byte*) font_2x2::next_2x2_right#8 next_2x2_right zp[2]:13 10001.0 (byte*) font_2x2::next_original -(byte*) font_2x2::next_original#1 next_original zp[2]:8 667.3333333333334 -(byte*) font_2x2::next_original#4 next_original zp[2]:8 363.7272727272727 +(byte*) font_2x2::next_original#1 next_original zp[2]:7 667.3333333333334 +(byte*) font_2x2::next_original#4 next_original zp[2]:7 363.7272727272727 (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]:24 10001.0 +(byte~) font_2x2_to_sprites::$3 zp[1]:23 10001.0 (label) font_2x2_to_sprites::@1 (label) font_2x2_to_sprites::@2 (label) font_2x2_to_sprites::@3 @@ -108,11 +113,11 @@ (label) font_2x2_to_sprites::@8 (label) font_2x2_to_sprites::@return (byte) font_2x2_to_sprites::c -(byte) font_2x2_to_sprites::c#1 c zp[1]:5 2002.0 -(byte) font_2x2_to_sprites::c#2 c zp[1]:5 136.5 +(byte) font_2x2_to_sprites::c#1 c zp[1]:9 2002.0 +(byte) font_2x2_to_sprites::c#2 c zp[1]:9 136.5 (byte*) font_2x2_to_sprites::char_current -(byte*) font_2x2_to_sprites::char_current#1 char_current zp[2]:6 667.3333333333334 -(byte*) font_2x2_to_sprites::char_current#2 char_current zp[2]:6 1200.3 +(byte*) font_2x2_to_sprites::char_current#1 char_current zp[2]:5 667.3333333333334 +(byte*) font_2x2_to_sprites::char_current#2 char_current zp[2]:5 1200.3 (byte*) font_2x2_to_sprites::char_left (byte*) font_2x2_to_sprites::char_left#1 char_left zp[2]:11 10001.0 (byte*) font_2x2_to_sprites::char_left#3 char_left zp[2]:11 2818.5454545454545 @@ -130,17 +135,19 @@ (byte) font_2x2_to_sprites::num_chars (const byte) font_2x2_to_sprites::num_chars#0 num_chars = (byte) $40 (byte*) font_2x2_to_sprites::sprite -(byte*) font_2x2_to_sprites::sprite#1 sprite zp[2]:8 1001.0 -(byte*) font_2x2_to_sprites::sprite#4 sprite zp[2]:8 1524.047619047619 +(byte*) font_2x2_to_sprites::sprite#1 sprite zp[2]:7 1001.0 +(byte*) font_2x2_to_sprites::sprite#4 sprite zp[2]:7 1524.047619047619 (byte) font_2x2_to_sprites::sprite_idx (byte) font_2x2_to_sprites::sprite_idx#1 sprite_idx zp[1]:10 15001.5 (byte) font_2x2_to_sprites::sprite_idx#2 reg byte y 15001.5 (byte) font_2x2_to_sprites::sprite_idx#3 sprite_idx zp[1]:10 2222.4444444444443 (byte) font_2x2_to_sprites::sprite_idx#4 sprite_idx zp[1]:10 10001.0 (byte*) font_2x2_to_sprites::sprites -(volatile bool) framedone loadstore zp[1]:21 27.65 +(volatile bool) frame_done loadstore zp[1]:19 25.72093023255814 (void()) main() -(byte~) main::$12 reg byte a 202.0 +(byte~) main::$12 reg byte y 101.0 +(word~) main::$13 zp[2]:20 202.0 +(byte~) main::$7 reg byte a 202.0 (label) main::@1 (label) main::@10 (label) main::@11 @@ -155,26 +162,19 @@ (label) main::@8 (label) main::@9 (byte) main::s -(byte) main::s#1 reg byte x 151.5 -(byte) main::s#2 reg byte x 67.33333333333333 +(byte) main::s#1 s zp[1]:2 202.0 +(byte) main::s#2 s zp[1]:2 75.75 (byte) main::s1 (byte) main::s1#1 reg byte x 151.5 (byte) main::s1#2 reg byte x 151.5 -(byte) main::sprite -(byte) main::sprite#1 sprite zp[1]:4 33.666666666666664 -(byte) main::sprite#2 sprite zp[1]:4 151.5 (label) main::toD0181 (byte*) main::toD0181_gfx (byte) main::toD0181_return (const byte) main::toD0181_return#0 toD0181_return = >(word)(const nomodify byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const nomodify byte*) CHARSET_DEFAULT/(byte) 4&(byte) $f (byte*) main::toD0181_screen -(label) main::toSpritePtr1 -(byte) main::toSpritePtr1_return -(const byte) main::toSpritePtr1_return#0 toSpritePtr1_return = (byte)(word)(const nomodify byte*) SPRITES/(byte) $40 -(byte*) main::toSpritePtr1_sprite -(word) main::xp -(word) main::xp#1 xp zp[2]:2 67.33333333333333 -(word) main::xp#2 xp zp[2]:2 60.599999999999994 +(byte) main::x +(byte) main::x#1 reg byte x 101.0 +(byte) main::x#2 reg byte x 57.714285714285715 (void()) plexInit((byte*) plexInit::screen) (label) plexInit::@1 (label) plexInit::@return @@ -204,21 +204,10 @@ (byte) plexShowSprite::plexFreeAdd1_ypos (byte) plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 151.5 (byte) plexShowSprite::plex_sprite_idx2 -(byte) plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:26 25.25 +(byte) plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:25 25.25 (byte) plexShowSprite::xpos_idx (byte) plexShowSprite::xpos_idx#0 reg byte a 202.0 (byte) plexShowSprite::ypos -(void()) plexSine() -(label) plexSine::@1 -(label) plexSine::@2 -(label) plexSine::@return -(byte) plexSine::sy -(byte) plexSine::sy#1 reg byte y 150001.5 -(byte) plexSine::sy#2 reg byte y 100001.0 -(byte) plexSine::y_idx -(byte) plexSine::y_idx#0 reg byte x 2002.0 -(byte) plexSine::y_idx#1 reg byte x 66667.33333333333 -(byte) plexSine::y_idx#2 reg byte x 150502.0 (void()) plexSort() (label) plexSort::@1 (label) plexSort::@2 @@ -229,12 +218,12 @@ (label) plexSort::@7 (label) plexSort::@return (byte) plexSort::m -(byte) plexSort::m#1 m zp[1]:5 150001.5 -(byte) plexSort::m#2 m zp[1]:5 41667.08333333333 +(byte) plexSort::m#1 m zp[1]:9 150001.5 +(byte) plexSort::m#2 m zp[1]:9 41667.08333333333 (byte) plexSort::nxt_idx -(byte) plexSort::nxt_idx#0 nxt_idx zp[1]:22 30000.300000000003 +(byte) plexSort::nxt_idx#0 nxt_idx zp[1]:23 30000.300000000003 (byte) plexSort::nxt_y -(byte) plexSort::nxt_y#0 nxt_y zp[1]:23 150000.375 +(byte) plexSort::nxt_y#0 nxt_y zp[1]:22 150000.375 (label) plexSort::plexFreePrepare1 (label) plexSort::plexFreePrepare1_@1 (label) plexSort::plexFreePrepare1_@2 @@ -246,9 +235,9 @@ (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 42.48387096774193 +(volatile byte) plex_free_next loadstore zp[1]:18 42.48387096774193 interrupt(KERNEL_MIN)(void()) plex_irq() -(byte~) plex_irq::$4 zp[1]:25 11.0 +(byte~) plex_irq::$4 zp[1]:24 11.0 (label) plex_irq::@1 (label) plex_irq::@2 (label) plex_irq::@3 @@ -261,42 +250,72 @@ interrupt(KERNEL_MIN)(void()) plex_irq() (byte) plex_irq::plexFreeNextYpos1_return (byte) plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.800000000000001 (byte) plex_irq::rasterY -(volatile byte) plex_show_idx loadstore zp[1]:17 46.0909090909091 -(volatile byte) plex_sprite_idx loadstore zp[1]:18 45.387096774193544 -(volatile byte) plex_sprite_msb loadstore zp[1]:19 48.757575757575765 +(void()) plex_move() +(byte~) plex_move::$4 reg byte a 200002.0 +(byte~) plex_move::$6 reg byte a 200002.0 +(byte~) plex_move::$7 reg byte a 200002.0 +(label) plex_move::@1 +(label) plex_move::@2 +(label) plex_move::@3 +(label) plex_move::@4 +(label) plex_move::@5 +(label) plex_move::@6 +(label) plex_move::@return +(byte) plex_move::s +(byte) plex_move::s#1 s zp[1]:9 150001.5 +(byte) plex_move::s#2 s zp[1]:9 42857.57142857143 +(byte) plex_move::y_idx +(byte) plex_move::y_idx#0 reg byte x 2002.0 +(byte) plex_move::y_idx#1 reg byte x 14285.857142857143 +(byte) plex_move::y_idx#2 reg byte x 150502.0 +(volatile byte) plex_show_idx loadstore zp[1]:15 46.0909090909091 +(volatile byte) plex_sprite_idx loadstore zp[1]:16 45.387096774193544 +(volatile byte) plex_sprite_msb loadstore zp[1]:17 48.757575757575765 +(byte*) scroll_text_next +(byte*) scroll_text_next#11 scroll_text_next zp[2]:3 44556.11111111111 +(byte*) scroll_text_next#12 scroll_text_next zp[2]:3 100001.0 +(byte*) scroll_text_next#13 scroll_text_next zp[2]:3 14290.666666666668 +(byte*) scroll_text_next#25 scroll_text_next zp[2]:3 551.0 +(byte*) scroll_text_next#4 scroll_text_next zp[2]:3 200002.0 (byte) sin_idx -(byte) sin_idx#10 sin_idx zp[1]:4 300.42857142857144 -(byte) sin_idx#12 sin_idx zp[1]:4 58.0 +(byte) sin_idx#10 sin_idx zp[1]:2 116.83333333333334 +(byte) sin_idx#12 sin_idx zp[1]:2 61.22222222222223 +(label) toSpritePtr1 +(byte) toSpritePtr1_return +(const byte) toSpritePtr1_return#0 toSpritePtr1_return = (byte)(word)(const nomodify byte*) SPRITES/(byte) $40 +(byte*) toSpritePtr1_sprite -reg byte x [ main::s#2 main::s#1 ] -zp[2]:2 [ main::xp#2 main::xp#1 ] +reg byte x [ main::x#2 main::x#1 ] reg byte x [ main::s1#2 main::s1#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]:4 [ sin_idx#10 sin_idx#12 main::sprite#2 main::sprite#1 ] -reg byte x [ plexSine::y_idx#2 plexSine::y_idx#0 plexSine::y_idx#1 ] -reg byte y [ plexSine::sy#2 plexSine::sy#1 ] +zp[1]:2 [ sin_idx#10 sin_idx#12 main::s#2 main::s#1 ] +reg byte x [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] +zp[2]:3 [ scroll_text_next#12 scroll_text_next#11 scroll_text_next#25 scroll_text_next#13 scroll_text_next#4 ] reg byte x [ plexInit::i#2 plexInit::i#1 ] -zp[1]:5 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 plexSort::m#2 plexSort::m#1 ] reg byte x [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] -zp[2]:6 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] -zp[2]:8 [ font_2x2::next_original#4 font_2x2::next_original#1 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] -zp[1]:10 [ font_2x2::c#11 font_2x2::c#1 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 ] +zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] +zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] +zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 plex_move::s#2 plex_move::s#1 plexSort::m#2 plexSort::m#1 ] +zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 ] 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 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 ] zp[2]:13 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 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 ] -zp[2]:15 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ] reg byte y [ font_2x2::b#2 font_2x2::b#1 ] reg byte x [ font_2x2::glyph_bit#0 ] -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[1]:21 [ framedone ] -reg byte a [ main::$12 ] -zp[1]:22 [ plexSort::nxt_idx#0 font_2x2::l#2 font_2x2::l#1 ] -zp[1]:23 [ plexSort::nxt_y#0 font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] +zp[1]:15 [ plex_show_idx ] +zp[1]:16 [ plex_sprite_idx ] +zp[1]:17 [ plex_sprite_msb ] +zp[1]:18 [ plex_free_next ] +zp[1]:19 [ frame_done ] +reg byte a [ main::$7 ] +reg byte y [ main::$12 ] +zp[2]:20 [ main::$13 font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ] +zp[1]:22 [ plexSort::nxt_y#0 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] reg byte x [ plexSort::s#2 ] -zp[1]:24 [ font_2x2_to_sprites::$3 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] +reg byte a [ plex_move::$6 ] +reg byte a [ plex_move::$7 ] +reg byte a [ plex_move::$4 ] +zp[1]:23 [ font_2x2_to_sprites::$3 plexSort::nxt_idx#0 font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] reg byte y [ font_2x2_to_sprites::sprite_idx#2 ] reg byte a [ font_2x2::$1 ] reg byte a [ font_2x2::$12 ] @@ -304,8 +323,8 @@ reg byte y [ font_2x2::$11 ] reg byte a [ font_2x2::$15 ] reg byte y [ font_2x2::$14 ] reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ] -zp[1]:25 [ plex_irq::$4 ] -zp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ] +zp[1]:24 [ plex_irq::$4 ] +zp[1]:25 [ plexShowSprite::plex_sprite_idx2#0 ] reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$1 ]