diff --git a/src/test/kc/examples/mega65/raster65.c b/src/test/kc/examples/mega65/raster65.c index 55256f360..dbfa6bb5a 100644 --- a/src/test/kc/examples/mega65/raster65.c +++ b/src/test/kc/examples/mega65/raster65.c @@ -10,6 +10,13 @@ char * const SCREEN = 0x0400; +// Logo y-position (char row on screen) +char const LOGO_Y = 3; +// Scroll y-position (char row on screen) +char const SCROLL_Y = 13; +// Greeting y-position (char row on screen) +char const GREET_Y = 20; + // Sinus Values 0-183 char SINUS[256] = kickasm {{ .fill 256, 91.5 + 91.5*sin(i*2*PI/256) @@ -32,14 +39,20 @@ void main() { // Enable 48MHz fast mode VICIV->CONTROLB |= 0x40; VICIV->CONTROLC |= 0x40; - // Clear screen - memset(SCREEN, ' ', 40*25); // Initialize music asm { lda #0 } (*songInit)(); + // Clear screen + memset(SCREEN, ' ', 40*25); // Put MEGA logo on screen - for( char i=0; iBG_COLOR = col; if(line < scrollypos) { // if raster position < scrolly pos do wobble Logo! - VICIV->TEXTXPOS_LO = 0x28 + SINUS[wobblepos++]; + VICIV->TEXTXPOS_LO = SINUS[wobblepos++]; // No zooming VICIV->CHRXSCL = 0x66; } else if(line == scrollypos) { @@ -135,13 +148,35 @@ interrupt(hardware_stack) void irq1() { while(raster == VICII->RASTER) ; } - // Set all raster bars to black - for(char l=0;l!=NUMBERL;l++) - rasters[l] = 0; + // Show start of calculation + VICII->BORDER_COLOR = 0x88; + VICII->BG_COLOR = 0x88; // play music (*songPlay)(); + // Set up colors behind logo, scroll and greets + char colsin = sinpos; + for(char i=0;i<40;i++) { + // Greeting colors + char col = SINUS[colsin]/4; + (COLORRAM + GREET_Y*40)[i] = col; + // Logo colors + col /= 2; + (COLORRAM + LOGO_Y*40 + 0*40 - 1)[i] = col; + (COLORRAM + LOGO_Y*40 + 1*40 - 2)[i] = col; + (COLORRAM + LOGO_Y*40 + 2*40 - 3)[i] = col; + (COLORRAM + LOGO_Y*40 + 3*40 - 4)[i] = col; + (COLORRAM + LOGO_Y*40 + 4*40 - 5)[i] = col; + (COLORRAM + LOGO_Y*40 + 5*40 - 6)[i] = col; + // Scroll colors + (COLORRAM + SCROLL_Y*40)[i] = PAL_GREEN[colsin]; + colsin++; + } + + // Set all raster bars to black + for(char l=0;l!=NUMBERL;l++) + rasters[l] = 0; // Big block of bars (16) char barsin = sinpos; for(char barcnt=0; barcnt<16; barcnt++) { @@ -153,11 +188,14 @@ interrupt(hardware_stack) void irq1() { rasters[idx++] = --barcol; barsin += 10; } - // Produce dark area behind text for(char i=0;i<19;i++) rasters[scrollypos+i] = rasters[scrollypos+i] /2 & 7; + // Show end of calculation + VICII->BORDER_COLOR = 0; + VICII->BG_COLOR = 0; + } // A MEGA logo diff --git a/src/test/ref/examples/mega65/raster65.asm b/src/test/ref/examples/mega65/raster65.asm index 18bc8128b..9cb07d162 100644 --- a/src/test/ref/examples/mega65/raster65.asm +++ b/src/test/ref/examples/mega65/raster65.asm @@ -22,10 +22,16 @@ .const PROCPORT_DDR_MEMORY_MASK = 7 // RAM in 0xA000, 0xE000 I/O in 0xD000 .const PROCPORT_RAM_IO = 5 + // Logo y-position (char row on screen) + .const LOGO_Y = 3 + // Scroll y-position (char row on screen) + .const SCROLL_Y = $d + // Greeting y-position (char row on screen) + .const GREET_Y = $14 // The number of greetings .const GREETCOUNT = $10 // The number of raster lines - .const NUMBERL = $e0 + .const NUMBERL = $d8 .const OFFSET_STRUCT_MOS4569_VICIII_KEY = $2f .const OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = $31 .const OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = $54 @@ -39,6 +45,8 @@ .const OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = $16 .const OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = $20 .const OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR = $21 + .const OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = $20 + .const OFFSET_STRUCT_MOS6569_VICII_BG_COLOR = $21 .const OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO = $4c .const OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = $5a .const SIZEOF_BYTE = 1 @@ -52,6 +60,8 @@ .label VICIII = $d000 // The VIC IV .label VICIV = $d000 + // Color Ram + .label COLORRAM = $d800 // Palette RED .label PALETTE_RED = $d100 // Palette GREEN @@ -125,33 +135,55 @@ irq1: { __b1: // for(char line=0;line!=NUMBERL;line++) cpz #NUMBERL - bne __b2 - ldx #0 - // Set all raster bars to black - __b15: - // for(char l=0;l!=NUMBERL;l++) - cpx #NUMBERL - bne __b16 + beq !__b2+ + jmp __b2 + !__b2: + // VICII->BORDER_COLOR = 0x88 + // Show start of calculation + lda #$88 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR + // VICII->BG_COLOR = 0x88 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR // (*songPlay)() // play music jsr songPlay + // colsin = sinpos + // Set up colors behind logo, scroll and greets + ldy.z sinpos + ldx #0 + __b16: + // for(char i=0;i<40;i++) + cpx #$28 + bcc __b17 + ldx #0 + // Set all raster bars to black + __b18: + // for(char l=0;l!=NUMBERL;l++) + cpx #NUMBERL + bne __b19 // barsin = sinpos // Big block of bars (16) lda.z sinpos sta.z barsin lda #0 sta.z barcnt - __b18: + __b21: // for(char barcnt=0; barcnt<16; barcnt++) lda.z barcnt cmp #$10 - bcc __b19 + bcc __b22 ldx #0 // Produce dark area behind text - __b25: + __b28: // for(char i=0;i<19;i++) cpx #$13 - bcc __b26 + bcc __b29 + // VICII->BORDER_COLOR = 0 + // Show end of calculation + lda #0 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR + // VICII->BG_COLOR = 0 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR // } pla tay @@ -159,7 +191,7 @@ irq1: { tax pla rti - __b26: + __b29: // rasters[scrollypos+i] /2 lda rasters+scrollypos,x lsr @@ -169,8 +201,8 @@ irq1: { sta rasters+scrollypos,x // for(char i=0;i<19;i++) inx - jmp __b25 - __b19: + jmp __b28 + __b22: // idx = SINUS[barsin] ldx.z barsin ldy SINUS,x @@ -182,15 +214,15 @@ irq1: { asl taz ldx #0 - __b20: + __b23: // for(char i=0;i<16;i++) cpx #$10 - bcc __b21 + bcc __b24 ldx #0 - __b22: + __b25: // for(char i=0;i<15;i++) cpx #$f - bcc __b23 + bcc __b26 // barsin += 10 lda #$a clc @@ -198,8 +230,8 @@ irq1: { sta.z barsin // for(char barcnt=0; barcnt<16; barcnt++) inc.z barcnt - jmp __b18 - __b23: + jmp __b21 + __b26: // rasters[idx++] = --barcol; dez // rasters[idx++] = --barcol @@ -209,8 +241,8 @@ irq1: { iny // for(char i=0;i<15;i++) inx - jmp __b22 - __b21: + jmp __b25 + __b24: // rasters[idx++] = barcol++ tza sta rasters,y @@ -219,14 +251,45 @@ irq1: { inz // for(char i=0;i<16;i++) inx - jmp __b20 - __b16: + jmp __b23 + __b19: // rasters[l] = 0 lda #0 sta rasters,x // for(char l=0;l!=NUMBERL;l++) inx - jmp __b15 + jmp __b18 + __b17: + // col = SINUS[colsin]/4 + lda SINUS,y + lsr + lsr + // (COLORRAM + GREET_Y*40)[i] = col + sta COLORRAM+GREET_Y*$28,x + // col /= 2 + // Logo colors + lsr + // (COLORRAM + LOGO_Y*40 + 0*40 - 1)[i] = col + sta COLORRAM+LOGO_Y*$28-1,x + // (COLORRAM + LOGO_Y*40 + 1*40 - 2)[i] = col + sta COLORRAM+LOGO_Y*$28+1*$28-2,x + // (COLORRAM + LOGO_Y*40 + 2*40 - 3)[i] = col + sta COLORRAM+LOGO_Y*$28+2*$28-3,x + // (COLORRAM + LOGO_Y*40 + 3*40 - 4)[i] = col + sta COLORRAM+LOGO_Y*$28+3*$28-4,x + // (COLORRAM + LOGO_Y*40 + 4*40 - 5)[i] = col + sta COLORRAM+LOGO_Y*$28+4*$28-5,x + // (COLORRAM + LOGO_Y*40 + 5*40 - 6)[i] = col + sta COLORRAM+LOGO_Y*$28+5*$28-6,x + // (COLORRAM + SCROLL_Y*40)[i] = PAL_GREEN[colsin] + // Scroll colors + lda PAL_GREEN,y + sta COLORRAM+SCROLL_Y*$28,x + // colsin++; + iny + // for(char i=0;i<40;i++) + inx + jmp __b16 __b2: // col = rasters[line] tza @@ -238,16 +301,16 @@ irq1: { sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR // if(line < scrollypos) cpz #scrollypos - bcc __b3 + bcc __b4 // if(line == scrollypos) cpz #scrollypos - beq __b4 + beq __b5 // if(line == scrollypos+blackbar) cpz #scrollypos+blackbar - beq __b5 + beq __b6 // if(line == scrollypos+blackbar+1) cpz #scrollypos+blackbar+1 - bne __b6 + bne __b7 // zoomval = SINUS[zoomx++] // if raster position > scrolly pos do zoom ldy.z zoomx @@ -262,34 +325,34 @@ irq1: { // if(zoomx==0) lda.z zoomx cmp #0 - bne __b6 + bne __b7 // if(++greetnm==GREETCOUNT) inc.z greetnm lda #GREETCOUNT cmp.z greetnm - bne __b6 + bne __b7 // greetnm =0 lda #0 sta.z greetnm - __b6: + __b7: // raster = VICII->RASTER // Wait for the next raster line lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER - __b7: + __b8: // while(raster == VICII->RASTER) cmp VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER - beq __b7 + beq __b8 // for(char line=0;line!=NUMBERL;line++) inz jmp __b1 - __b5: + __b6: // VICIV->TEXTXPOS_LO = 0x50 // if raster position > scrolly pos do nozoom // default value lda #$50 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - jmp __b6 - __b4: + jmp __b7 + __b5: // if raster position = scrolly pos do scrolly // no wobbling from this point lda #$50 @@ -298,22 +361,19 @@ irq1: { // set softscroll lda.z xpos sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2 - jmp __b6 - __b3: - // 0x28 + SINUS[wobblepos++] - lda #$28 - clc - adc SINUS,x - // VICIV->TEXTXPOS_LO = 0x28 + SINUS[wobblepos++] + jmp __b7 + __b4: + // VICIV->TEXTXPOS_LO = SINUS[wobblepos++] // if raster position < scrolly pos do wobble Logo! + lda SINUS,x sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - // VICIV->TEXTXPOS_LO = 0x28 + SINUS[wobblepos++]; + // VICIV->TEXTXPOS_LO = SINUS[wobblepos++]; inx // VICIV->CHRXSCL = 0x66 // No zooming lda #$66 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL - jmp __b6 + jmp __b7 } main: { // VICIII->KEY = 0x47 @@ -332,14 +392,14 @@ main: { lda #$40 ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC - // memset(SCREEN, ' ', 40*25) - // Clear screen - jsr memset // asm // Initialize music lda #0 // (*songInit)() jsr songInit + // memset(SCREEN, ' ', 40*25) + // Clear screen + jsr memset ldx #0 // Put MEGA logo on screen __b1: @@ -347,7 +407,13 @@ main: { cpx #$bc*SIZEOF_BYTE bcc __b2 ldx #0 + // Put dummy text up for scroll and greet __b3: + // for( char i=0;i<40;i++) + cpx #$28 + bcc __b4 + ldx #0 + __b5: // PALETTE_RED[i] = PAL_RED[i] lda PAL_RED,x sta PALETTE_RED,x @@ -360,7 +426,7 @@ main: { // while(++i!=0) inx cpx #0 - bne __b3 + bne __b5 // asm // Set up raster interrupts C64 style sei @@ -400,12 +466,22 @@ main: { // asm // Enable IRQ cli - __b5: - jmp __b5 + __b7: + jmp __b7 + __b4: + // (SCREEN + SCROLL_Y*40)[i] = 'a' + lda #'a' + sta SCREEN+SCROLL_Y*$28,x + // (SCREEN + GREET_Y*40)[i] = 'b' + lda #'b' + sta SCREEN+GREET_Y*$28,x + // for( char i=0;i<40;i++) + inx + jmp __b3 __b2: - // (SCREEN+3*40)[i] = MEGA_LOGO[i] + // (SCREEN + LOGO_Y*40)[i] = MEGA_LOGO[i] lda MEGA_LOGO,x - sta SCREEN+3*$28,x + sta SCREEN+LOGO_Y*$28,x // for( char i=0; i> (byte) 1 - [25] (byte~) irq1::$23 ← (byte~) irq1::$22 & (byte) 7 - [26] *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i2#2) ← (byte~) irq1::$23 - [27] (byte) irq1::i2#1 ← ++ (byte) irq1::i2#2 +irq1::@29: scope:[irq1] from irq1::@28 + [31] (byte~) irq1::$23 ← *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i3#2) >> (byte) 1 + [32] (byte~) irq1::$24 ← (byte~) irq1::$23 & (byte) 7 + [33] *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i3#2) ← (byte~) irq1::$24 + [34] (byte) irq1::i3#1 ← ++ (byte) irq1::i3#2 + to:irq1::@28 +irq1::@22: scope:[irq1] from irq1::@21 + [35] (byte) irq1::idx#0 ← *((const byte*) SINUS + (byte) irq1::barsin#2) + [36] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 << (byte) 4 + to:irq1::@23 +irq1::@23: scope:[irq1] from irq1::@22 irq1::@24 + [37] (byte) irq1::idx#3 ← phi( irq1::@22/(byte) irq1::idx#0 irq1::@24/(byte) irq1::idx#1 ) + [37] (byte) irq1::barcol#3 ← phi( irq1::@22/(byte) irq1::barcol#0 irq1::@24/(byte) irq1::barcol#1 ) + [37] (byte) irq1::i1#2 ← phi( irq1::@22/(byte) 0 irq1::@24/(byte) irq1::i1#1 ) + [38] if((byte) irq1::i1#2<(byte) $10) goto irq1::@24 to:irq1::@25 +irq1::@25: scope:[irq1] from irq1::@23 irq1::@26 + [39] (byte) irq1::idx#4 ← phi( irq1::@23/(byte) irq1::idx#3 irq1::@26/(byte) irq1::idx#2 ) + [39] (byte) irq1::barcol#4 ← phi( irq1::@23/(byte) irq1::barcol#3 irq1::@26/(byte) irq1::barcol#2 ) + [39] (byte) irq1::i2#2 ← phi( irq1::@23/(byte) 0 irq1::@26/(byte) irq1::i2#1 ) + [40] if((byte) irq1::i2#2<(byte) $f) goto irq1::@26 + to:irq1::@27 +irq1::@27: scope:[irq1] from irq1::@25 + [41] (byte) irq1::barsin#1 ← (byte) irq1::barsin#2 + (byte) $a + [42] (byte) irq1::barcnt#1 ← ++ (byte) irq1::barcnt#2 + to:irq1::@21 +irq1::@26: scope:[irq1] from irq1::@25 + [43] (byte) irq1::barcol#2 ← -- (byte) irq1::barcol#4 + [44] *((const byte*) rasters + (byte) irq1::idx#4) ← (byte) irq1::barcol#2 + [45] (byte) irq1::idx#2 ← ++ (byte) irq1::idx#4 + [46] (byte) irq1::i2#1 ← ++ (byte) irq1::i2#2 + to:irq1::@25 +irq1::@24: scope:[irq1] from irq1::@23 + [47] *((const byte*) rasters + (byte) irq1::idx#3) ← (byte) irq1::barcol#3 + [48] (byte) irq1::idx#1 ← ++ (byte) irq1::idx#3 + [49] (byte) irq1::barcol#1 ← ++ (byte) irq1::barcol#3 + [50] (byte) irq1::i1#1 ← ++ (byte) irq1::i1#2 + to:irq1::@23 irq1::@19: scope:[irq1] from irq1::@18 - [28] (byte) irq1::idx#0 ← *((const byte*) SINUS + (byte) irq1::barsin#2) - [29] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 << (byte) 4 - to:irq1::@20 -irq1::@20: scope:[irq1] from irq1::@19 irq1::@21 - [30] (byte) irq1::idx#3 ← phi( irq1::@19/(byte) irq1::idx#0 irq1::@21/(byte) irq1::idx#1 ) - [30] (byte) irq1::barcol#3 ← phi( irq1::@19/(byte) irq1::barcol#0 irq1::@21/(byte) irq1::barcol#1 ) - [30] (byte) irq1::i#2 ← phi( irq1::@19/(byte) 0 irq1::@21/(byte) irq1::i#1 ) - [31] if((byte) irq1::i#2<(byte) $10) goto irq1::@21 - to:irq1::@22 -irq1::@22: scope:[irq1] from irq1::@20 irq1::@23 - [32] (byte) irq1::idx#4 ← phi( irq1::@20/(byte) irq1::idx#3 irq1::@23/(byte) irq1::idx#2 ) - [32] (byte) irq1::barcol#4 ← phi( irq1::@20/(byte) irq1::barcol#3 irq1::@23/(byte) irq1::barcol#2 ) - [32] (byte) irq1::i1#2 ← phi( irq1::@20/(byte) 0 irq1::@23/(byte) irq1::i1#1 ) - [33] if((byte) irq1::i1#2<(byte) $f) goto irq1::@23 - to:irq1::@24 -irq1::@24: scope:[irq1] from irq1::@22 - [34] (byte) irq1::barsin#1 ← (byte) irq1::barsin#2 + (byte) $a - [35] (byte) irq1::barcnt#1 ← ++ (byte) irq1::barcnt#2 + [51] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 + [52] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 to:irq1::@18 -irq1::@23: scope:[irq1] from irq1::@22 - [36] (byte) irq1::barcol#2 ← -- (byte) irq1::barcol#4 - [37] *((const byte*) rasters + (byte) irq1::idx#4) ← (byte) irq1::barcol#2 - [38] (byte) irq1::idx#2 ← ++ (byte) irq1::idx#4 - [39] (byte) irq1::i1#1 ← ++ (byte) irq1::i1#2 - to:irq1::@22 -irq1::@21: scope:[irq1] from irq1::@20 - [40] *((const byte*) rasters + (byte) irq1::idx#3) ← (byte) irq1::barcol#3 - [41] (byte) irq1::idx#1 ← ++ (byte) irq1::idx#3 - [42] (byte) irq1::barcol#1 ← ++ (byte) irq1::barcol#3 - [43] (byte) irq1::i#1 ← ++ (byte) irq1::i#2 - to:irq1::@20 -irq1::@16: scope:[irq1] from irq1::@15 - [44] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 - [45] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 - to:irq1::@15 +irq1::@17: scope:[irq1] from irq1::@16 + [53] (byte) irq1::col1#0 ← *((const byte*) SINUS + (byte) irq1::colsin#2) >> (byte) 2 + [54] *((const nomodify byte*) COLORRAM+(const nomodify byte) GREET_Y*(byte) $28 + (byte) irq1::i#2) ← (byte) irq1::col1#0 + [55] (byte) irq1::col1#1 ← (byte) irq1::col1#0 >> (byte) 1 + [56] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28-(byte) 1 + (byte) irq1::i#2) ← (byte) irq1::col1#1 + [57] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 1*(number) $28-(byte) 2 + (byte) irq1::i#2) ← (byte) irq1::col1#1 + [58] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 2*(number) $28-(byte) 3 + (byte) irq1::i#2) ← (byte) irq1::col1#1 + [59] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 3*(number) $28-(byte) 4 + (byte) irq1::i#2) ← (byte) irq1::col1#1 + [60] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 4*(number) $28-(byte) 5 + (byte) irq1::i#2) ← (byte) irq1::col1#1 + [61] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 5*(number) $28-(byte) 6 + (byte) irq1::i#2) ← (byte) irq1::col1#1 + [62] *((const nomodify byte*) COLORRAM+(const nomodify byte) SCROLL_Y*(byte) $28 + (byte) irq1::i#2) ← *((const byte*) PAL_GREEN + (byte) irq1::colsin#2) + [63] (byte) irq1::colsin#1 ← ++ (byte) irq1::colsin#2 + [64] (byte) irq1::i#1 ← ++ (byte) irq1::i#2 + to:irq1::@16 irq1::@2: scope:[irq1] from irq1::@1 - [46] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) - [47] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 - [48] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 - [49] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@3 - to:irq1::@9 -irq1::@9: scope:[irq1] from irq1::@2 - [50] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@4 + [65] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) + [66] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 + [67] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 + [68] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@4 to:irq1::@10 -irq1::@10: scope:[irq1] from irq1::@9 - [51] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@5 +irq1::@10: scope:[irq1] from irq1::@2 + [69] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@5 to:irq1::@11 irq1::@11: scope:[irq1] from irq1::@10 - [52] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@6 + [70] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@6 to:irq1::@12 irq1::@12: scope:[irq1] from irq1::@11 - [53] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) - [54] (volatile byte) zoomx ← ++ (volatile byte) zoomx - [55] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 - [56] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 - [57] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 - [58] if((volatile byte) zoomx!=(byte) 0) goto irq1::@6 + [71] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@7 to:irq1::@13 irq1::@13: scope:[irq1] from irq1::@12 - [59] (volatile byte) greetnm ← ++ (volatile byte) greetnm - [60] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@6 + [72] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) + [73] (volatile byte) zoomx ← ++ (volatile byte) zoomx + [74] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 + [75] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 + [76] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 + [77] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 to:irq1::@14 irq1::@14: scope:[irq1] from irq1::@13 - [61] (volatile byte) greetnm ← (byte) 0 - to:irq1::@6 -irq1::@6: scope:[irq1] from irq1::@11 irq1::@12 irq1::@13 irq1::@14 irq1::@3 irq1::@4 irq1::@5 - [62] (byte) irq1::wobblepos#7 ← phi( irq1::@11/(byte) irq1::wobblepos#10 irq1::@12/(byte) irq1::wobblepos#10 irq1::@13/(byte) irq1::wobblepos#10 irq1::@14/(byte) irq1::wobblepos#10 irq1::@3/(byte) irq1::wobblepos#1 irq1::@4/(byte) irq1::wobblepos#10 irq1::@5/(byte) irq1::wobblepos#10 ) - [63] (byte) irq1::raster#0 ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) + [78] (volatile byte) greetnm ← ++ (volatile byte) greetnm + [79] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 + to:irq1::@15 +irq1::@15: scope:[irq1] from irq1::@14 + [80] (volatile byte) greetnm ← (byte) 0 to:irq1::@7 -irq1::@7: scope:[irq1] from irq1::@6 irq1::@7 - [64] if((byte) irq1::raster#0==*((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq1::@7 +irq1::@7: scope:[irq1] from irq1::@12 irq1::@13 irq1::@14 irq1::@15 irq1::@4 irq1::@5 irq1::@6 + [81] (byte) irq1::wobblepos#7 ← phi( irq1::@12/(byte) irq1::wobblepos#10 irq1::@13/(byte) irq1::wobblepos#10 irq1::@14/(byte) irq1::wobblepos#10 irq1::@15/(byte) irq1::wobblepos#10 irq1::@4/(byte) irq1::wobblepos#1 irq1::@5/(byte) irq1::wobblepos#10 irq1::@6/(byte) irq1::wobblepos#10 ) + [82] (byte) irq1::raster#0 ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) to:irq1::@8 -irq1::@8: scope:[irq1] from irq1::@7 - [65] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 +irq1::@8: scope:[irq1] from irq1::@7 irq1::@8 + [83] if((byte) irq1::raster#0==*((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq1::@8 + to:irq1::@9 +irq1::@9: scope:[irq1] from irq1::@8 + [84] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 to:irq1::@1 +irq1::@6: scope:[irq1] from irq1::@11 + [85] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 + to:irq1::@7 irq1::@5: scope:[irq1] from irq1::@10 - [66] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 - to:irq1::@6 -irq1::@4: scope:[irq1] from irq1::@9 - [67] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 - [68] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos - to:irq1::@6 -irq1::@3: scope:[irq1] from irq1::@2 - [69] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) - [70] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$12 - [71] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 - [72] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 - to:irq1::@6 + [86] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 + [87] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos + to:irq1::@7 +irq1::@4: scope:[irq1] from irq1::@2 + [88] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← *((const byte*) SINUS + (byte) irq1::wobblepos#10) + [89] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 + [90] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 + to:irq1::@7 (void()) main() main: scope:[main] from __start::@1 - [73] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 - [74] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 - [75] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (byte) $40 - [76] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (byte) $40 - [77] call memset - to:main::@6 -main::@6: scope:[main] from main + [91] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 + [92] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 + [93] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (byte) $40 + [94] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (byte) $40 asm { lda#0 } - [79] call *((const void()*) songInit) + [96] call *((const void()*) songInit) + [97] call memset to:main::@1 -main::@1: scope:[main] from main::@2 main::@6 - [80] (byte) main::i1#2 ← phi( main::@2/(byte) main::i1#1 main::@6/(byte) 0 ) - [81] if((byte) main::i1#2<(byte) $bc*(const byte) SIZEOF_BYTE) goto main::@2 +main::@1: scope:[main] from main main::@2 + [98] (byte) main::i1#2 ← phi( main/(byte) 0 main::@2/(byte) main::i1#1 ) + [99] if((byte) main::i1#2<(byte) $bc*(const byte) SIZEOF_BYTE) goto main::@2 to:main::@3 -main::@3: scope:[main] from main::@1 main::@3 - [82] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 ) - [83] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) - [84] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) - [85] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) - [86] (byte) main::i#1 ← ++ (byte) main::i#2 - [87] if((byte) main::i#1!=(byte) 0) goto main::@3 - to:main::@4 -main::@4: scope:[main] from main::@3 +main::@3: scope:[main] from main::@1 main::@4 + [100] (byte) main::i2#2 ← phi( main::@1/(byte) 0 main::@4/(byte) main::i2#1 ) + [101] if((byte) main::i2#2<(byte) $28) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@3 main::@5 + [102] (byte) main::i#2 ← phi( main::@3/(byte) 0 main::@5/(byte) main::i#1 ) + [103] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) + [104] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) + [105] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) + [106] (byte) main::i#1 ← ++ (byte) main::i#2 + [107] if((byte) main::i#1!=(byte) 0) goto main::@5 + to:main::@6 +main::@6: scope:[main] from main::@5 asm { sei } - [89] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR - [90] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 - [91] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f - [92] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER - [93] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() - [94] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK - [95] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [96] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 + [109] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [110] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 + [111] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f + [112] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER + [113] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() + [114] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK + [115] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO + [116] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 asm { cli } - to:main::@5 -main::@5: scope:[main] from main::@4 main::@5 - [98] phi() - to:main::@5 + to:main::@7 +main::@7: scope:[main] from main::@6 main::@7 + [118] phi() + to:main::@7 +main::@4: scope:[main] from main::@3 + [119] *((const nomodify byte*) SCREEN+(const nomodify byte) SCROLL_Y*(byte) $28 + (byte) main::i2#2) ← (byte) 'a' + [120] *((const nomodify byte*) SCREEN+(const nomodify byte) GREET_Y*(byte) $28 + (byte) main::i2#2) ← (byte) 'b' + [121] (byte) main::i2#1 ← ++ (byte) main::i2#2 + to:main::@3 main::@2: scope:[main] from main::@1 - [99] *((const nomodify byte*) SCREEN+(byte)(number) 3*(number) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) - [100] (byte) main::i1#1 ← ++ (byte) main::i1#2 + [122] *((const nomodify byte*) SCREEN+(const nomodify byte) LOGO_Y*(byte) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) + [123] (byte) main::i1#1 ← ++ (byte) main::i1#2 to:main::@1 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from main - [101] phi() + [124] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [102] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [103] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 + [125] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) + [126] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [104] return + [127] return to:@return memset::@2: scope:[memset] from memset::@1 - [105] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [128] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [129] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@1 diff --git a/src/test/ref/examples/mega65/raster65.log b/src/test/ref/examples/mega65/raster65.log index 3e49e53a3..5af71f835 100644 --- a/src/test/ref/examples/mega65/raster65.log +++ b/src/test/ref/examples/mega65/raster65.log @@ -4,6 +4,7 @@ Resolved forward reference PAL_RED to (const byte*) PAL_RED Resolved forward reference PAL_GREEN to (const byte*) PAL_GREEN Resolved forward reference PAL_BLUE to (const byte*) PAL_BLUE Resolved forward reference irq1 to interrupt(HARDWARE_STACK)(void()) irq1() +Resolved forward reference PAL_GREEN to (const byte*) PAL_GREEN Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call __init @@ -59,41 +60,55 @@ main: scope:[main] from __start::@1 *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (number) $53 *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (number) $40 *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (number) $40 + asm { lda#0 } + call *((const void()*) songInit) (void*) memset::str#0 ← (void*)(const nomodify byte*) SCREEN (byte) memset::c#0 ← (byte) ' ' (word) memset::num#0 ← (number) $28*(number) $19 call memset (void*) memset::return#2 ← (void*) memset::return#1 - to:main::@7 -main::@7: scope:[main] from main - asm { lda#0 } - call *((const void()*) songInit) + to:main::@10 +main::@10: scope:[main] from main (byte) main::i1#0 ← (byte) 0 to:main::@1 -main::@1: scope:[main] from main::@2 main::@7 - (byte) main::i1#2 ← phi( main::@2/(byte) main::i1#1 main::@7/(byte) main::i1#0 ) +main::@1: scope:[main] from main::@10 main::@2 + (byte) main::i1#2 ← phi( main::@10/(byte) main::i1#0 main::@2/(byte) main::i1#1 ) (byte~) main::$2 ← sizeof (const byte*) MEGA_LOGO (bool~) main::$3 ← (byte) main::i1#2 < (byte~) main::$2 if((bool~) main::$3) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@1 (byte) main::i1#3 ← phi( main::@1/(byte) main::i1#2 ) - *((const nomodify byte*) SCREEN+(number) 3*(number) $28 + (byte) main::i1#3) ← *((const byte*) MEGA_LOGO + (byte) main::i1#3) + *((const nomodify byte*) SCREEN+(const nomodify byte) LOGO_Y*(number) $28 + (byte) main::i1#3) ← *((const byte*) MEGA_LOGO + (byte) main::i1#3) (byte) main::i1#1 ← ++ (byte) main::i1#3 to:main::@1 main::@3: scope:[main] from main::@1 - (byte) main::i#0 ← (byte) 0 + (byte) main::i2#0 ← (byte) 0 to:main::@4 -main::@4: scope:[main] from main::@3 main::@4 - (byte) main::i#2 ← phi( main::@3/(byte) main::i#0 main::@4/(byte) main::i#1 ) +main::@4: scope:[main] from main::@3 main::@5 + (byte) main::i2#2 ← phi( main::@3/(byte) main::i2#0 main::@5/(byte) main::i2#1 ) + (bool~) main::$4 ← (byte) main::i2#2 < (number) $28 + if((bool~) main::$4) goto main::@5 + to:main::@6 +main::@5: scope:[main] from main::@4 + (byte) main::i2#3 ← phi( main::@4/(byte) main::i2#2 ) + *((const nomodify byte*) SCREEN+(const nomodify byte) SCROLL_Y*(number) $28 + (byte) main::i2#3) ← (byte) 'a' + *((const nomodify byte*) SCREEN+(const nomodify byte) GREET_Y*(number) $28 + (byte) main::i2#3) ← (byte) 'b' + (byte) main::i2#1 ← ++ (byte) main::i2#3 + to:main::@4 +main::@6: scope:[main] from main::@4 + (byte) main::i#0 ← (byte) 0 + to:main::@7 +main::@7: scope:[main] from main::@6 main::@7 + (byte) main::i#2 ← phi( main::@6/(byte) main::i#0 main::@7/(byte) main::i#1 ) *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 - (bool~) main::$4 ← (byte) main::i#1 != (number) 0 - if((bool~) main::$4) goto main::@4 - to:main::@5 -main::@5: scope:[main] from main::@4 + (bool~) main::$5 ← (byte) main::i#1 != (number) 0 + if((bool~) main::$5) goto main::@7 + to:main::@8 +main::@8: scope:[main] from main::@7 asm { sei } *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (number) $16 @@ -104,9 +119,9 @@ main::@5: scope:[main] from main::@4 *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (number) 1 asm { cli } - to:main::@6 -main::@6: scope:[main] from main::@5 main::@6 - to:main::@6 + to:main::@9 +main::@9: scope:[main] from main::@8 main::@9 + to:main::@9 main::@return: scope:[main] from return to:@return @@ -136,13 +151,16 @@ irq1::@2: scope:[irq1] from irq1::@1 if((bool~) irq1::$2) goto irq1::@4 to:irq1::@10 irq1::@3: scope:[irq1] from irq1::@1 - (byte) irq1::l#0 ← (byte) 0 + *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (number) $88 + *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (number) $88 + call *((const void()*) songPlay) + (byte) irq1::colsin#0 ← (volatile byte) sinpos + (byte) irq1::i#0 ← (byte) 0 to:irq1::@16 irq1::@4: scope:[irq1] from irq1::@2 (byte) irq1::line#13 ← phi( irq1::@2/(byte) irq1::line#3 ) (byte) irq1::wobblepos#2 ← phi( irq1::@2/(byte) irq1::wobblepos#3 ) - (number~) irq1::$12 ← (number) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#2) - *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (number~) irq1::$12 + *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← *((const byte*) SINUS + (byte) irq1::wobblepos#2) (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#2 *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (number) $66 to:irq1::@7 @@ -210,8 +228,8 @@ irq1::@8: scope:[irq1] from irq1::@7 irq1::@8 (byte) irq1::wobblepos#6 ← phi( irq1::@7/(byte) irq1::wobblepos#7 irq1::@8/(byte) irq1::wobblepos#6 ) (byte) irq1::line#8 ← phi( irq1::@7/(byte) irq1::line#9 irq1::@8/(byte) irq1::line#8 ) (byte) irq1::raster#1 ← phi( irq1::@7/(byte) irq1::raster#0 irq1::@8/(byte) irq1::raster#1 ) - (bool~) irq1::$13 ← (byte) irq1::raster#1 == *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) - if((bool~) irq1::$13) goto irq1::@8 + (bool~) irq1::$12 ← (byte) irq1::raster#1 == *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) + if((bool~) irq1::$12) goto irq1::@8 to:irq1::@9 irq1::@9: scope:[irq1] from irq1::@8 (byte) irq1::wobblepos#5 ← phi( irq1::@8/(byte) irq1::wobblepos#6 ) @@ -219,105 +237,134 @@ irq1::@9: scope:[irq1] from irq1::@8 (byte) irq1::line#1 ← ++ (byte) irq1::line#7 to:irq1::@1 irq1::@16: scope:[irq1] from irq1::@17 irq1::@3 - (byte) irq1::l#2 ← phi( irq1::@17/(byte) irq1::l#1 irq1::@3/(byte) irq1::l#0 ) - (bool~) irq1::$14 ← (byte) irq1::l#2 != (const nomodify byte) NUMBERL - if((bool~) irq1::$14) goto irq1::@17 + (byte) irq1::colsin#3 ← phi( irq1::@17/(byte) irq1::colsin#1 irq1::@3/(byte) irq1::colsin#0 ) + (byte) irq1::i#2 ← phi( irq1::@17/(byte) irq1::i#1 irq1::@3/(byte) irq1::i#0 ) + (bool~) irq1::$13 ← (byte) irq1::i#2 < (number) $28 + if((bool~) irq1::$13) goto irq1::@17 to:irq1::@18 irq1::@17: scope:[irq1] from irq1::@16 - (byte) irq1::l#3 ← phi( irq1::@16/(byte) irq1::l#2 ) - *((const byte*) rasters + (byte) irq1::l#3) ← (number) 0 - (byte) irq1::l#1 ← ++ (byte) irq1::l#3 + (byte) irq1::i#3 ← phi( irq1::@16/(byte) irq1::i#2 ) + (byte) irq1::colsin#2 ← phi( irq1::@16/(byte) irq1::colsin#3 ) + (number~) irq1::$14 ← *((const byte*) SINUS + (byte) irq1::colsin#2) / (number) 4 + (byte) irq1::col1#0 ← (number~) irq1::$14 + *((const nomodify byte*) COLORRAM+(const nomodify byte) GREET_Y*(number) $28 + (byte) irq1::i#3) ← (byte) irq1::col1#0 + (byte) irq1::col1#1 ← (byte) irq1::col1#0 / (number) 2 + *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 0*(number) $28-(number) 1 + (byte) irq1::i#3) ← (byte) irq1::col1#1 + *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 1*(number) $28-(number) 2 + (byte) irq1::i#3) ← (byte) irq1::col1#1 + *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 2*(number) $28-(number) 3 + (byte) irq1::i#3) ← (byte) irq1::col1#1 + *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 3*(number) $28-(number) 4 + (byte) irq1::i#3) ← (byte) irq1::col1#1 + *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 4*(number) $28-(number) 5 + (byte) irq1::i#3) ← (byte) irq1::col1#1 + *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 5*(number) $28-(number) 6 + (byte) irq1::i#3) ← (byte) irq1::col1#1 + *((const nomodify byte*) COLORRAM+(const nomodify byte) SCROLL_Y*(number) $28 + (byte) irq1::i#3) ← *((const byte*) PAL_GREEN + (byte) irq1::colsin#2) + (byte) irq1::colsin#1 ← ++ (byte) irq1::colsin#2 + (byte) irq1::i#1 ← ++ (byte) irq1::i#3 to:irq1::@16 irq1::@18: scope:[irq1] from irq1::@16 - call *((const void()*) songPlay) - (byte) irq1::barsin#0 ← (volatile byte) sinpos - (byte) irq1::barcnt#0 ← (byte) 0 + (byte) irq1::l#0 ← (byte) 0 to:irq1::@19 -irq1::@19: scope:[irq1] from irq1::@18 irq1::@27 - (byte) irq1::barsin#4 ← phi( irq1::@18/(byte) irq1::barsin#0 irq1::@27/(byte) irq1::barsin#1 ) - (byte) irq1::barcnt#2 ← phi( irq1::@18/(byte) irq1::barcnt#0 irq1::@27/(byte) irq1::barcnt#1 ) - (bool~) irq1::$15 ← (byte) irq1::barcnt#2 < (number) $10 +irq1::@19: scope:[irq1] from irq1::@18 irq1::@20 + (byte) irq1::l#2 ← phi( irq1::@18/(byte) irq1::l#0 irq1::@20/(byte) irq1::l#1 ) + (bool~) irq1::$15 ← (byte) irq1::l#2 != (const nomodify byte) NUMBERL if((bool~) irq1::$15) goto irq1::@20 to:irq1::@21 irq1::@20: scope:[irq1] from irq1::@19 - (byte) irq1::barcnt#3 ← phi( irq1::@19/(byte) irq1::barcnt#2 ) - (byte) irq1::barsin#2 ← phi( irq1::@19/(byte) irq1::barsin#4 ) - (byte) irq1::idx#0 ← *((const byte*) SINUS + (byte) irq1::barsin#2) - (number~) irq1::$16 ← (byte) irq1::barcnt#3 * (number) $10 - (byte) irq1::barcol#0 ← (number~) irq1::$16 - (byte) irq1::i#0 ← (byte) 0 - to:irq1::@22 + (byte) irq1::l#3 ← phi( irq1::@19/(byte) irq1::l#2 ) + *((const byte*) rasters + (byte) irq1::l#3) ← (number) 0 + (byte) irq1::l#1 ← ++ (byte) irq1::l#3 + to:irq1::@19 irq1::@21: scope:[irq1] from irq1::@19 - (byte) irq1::i2#0 ← (byte) 0 - to:irq1::@28 -irq1::@22: scope:[irq1] from irq1::@20 irq1::@23 - (byte) irq1::barcnt#8 ← phi( irq1::@20/(byte) irq1::barcnt#3 irq1::@23/(byte) irq1::barcnt#9 ) - (byte) irq1::barsin#8 ← phi( irq1::@20/(byte) irq1::barsin#2 irq1::@23/(byte) irq1::barsin#9 ) - (byte) irq1::idx#5 ← phi( irq1::@20/(byte) irq1::idx#0 irq1::@23/(byte) irq1::idx#1 ) - (byte) irq1::barcol#5 ← phi( irq1::@20/(byte) irq1::barcol#0 irq1::@23/(byte) irq1::barcol#1 ) - (byte) irq1::i#2 ← phi( irq1::@20/(byte) irq1::i#0 irq1::@23/(byte) irq1::i#1 ) - (bool~) irq1::$17 ← (byte) irq1::i#2 < (number) $10 - if((bool~) irq1::$17) goto irq1::@23 + (byte) irq1::barsin#0 ← (volatile byte) sinpos + (byte) irq1::barcnt#0 ← (byte) 0 + to:irq1::@22 +irq1::@22: scope:[irq1] from irq1::@21 irq1::@30 + (byte) irq1::barsin#4 ← phi( irq1::@21/(byte) irq1::barsin#0 irq1::@30/(byte) irq1::barsin#1 ) + (byte) irq1::barcnt#2 ← phi( irq1::@21/(byte) irq1::barcnt#0 irq1::@30/(byte) irq1::barcnt#1 ) + (bool~) irq1::$16 ← (byte) irq1::barcnt#2 < (number) $10 + if((bool~) irq1::$16) goto irq1::@23 to:irq1::@24 irq1::@23: scope:[irq1] from irq1::@22 - (byte) irq1::barcnt#9 ← phi( irq1::@22/(byte) irq1::barcnt#8 ) - (byte) irq1::barsin#9 ← phi( irq1::@22/(byte) irq1::barsin#8 ) - (byte) irq1::i#3 ← phi( irq1::@22/(byte) irq1::i#2 ) - (byte) irq1::idx#3 ← phi( irq1::@22/(byte) irq1::idx#5 ) - (byte) irq1::barcol#3 ← phi( irq1::@22/(byte) irq1::barcol#5 ) - *((const byte*) rasters + (byte) irq1::idx#3) ← (byte) irq1::barcol#3 - (byte) irq1::idx#1 ← ++ (byte) irq1::idx#3 - (byte) irq1::barcol#1 ← ++ (byte) irq1::barcol#3 - (byte) irq1::i#1 ← ++ (byte) irq1::i#3 - to:irq1::@22 -irq1::@24: scope:[irq1] from irq1::@22 - (byte) irq1::barcnt#6 ← phi( irq1::@22/(byte) irq1::barcnt#8 ) - (byte) irq1::barsin#6 ← phi( irq1::@22/(byte) irq1::barsin#8 ) - (byte) irq1::idx#7 ← phi( irq1::@22/(byte) irq1::idx#5 ) - (byte) irq1::barcol#7 ← phi( irq1::@22/(byte) irq1::barcol#5 ) + (byte) irq1::barcnt#3 ← phi( irq1::@22/(byte) irq1::barcnt#2 ) + (byte) irq1::barsin#2 ← phi( irq1::@22/(byte) irq1::barsin#4 ) + (byte) irq1::idx#0 ← *((const byte*) SINUS + (byte) irq1::barsin#2) + (number~) irq1::$17 ← (byte) irq1::barcnt#3 * (number) $10 + (byte) irq1::barcol#0 ← (number~) irq1::$17 (byte) irq1::i1#0 ← (byte) 0 to:irq1::@25 -irq1::@25: scope:[irq1] from irq1::@24 irq1::@26 - (byte) irq1::barcnt#5 ← phi( irq1::@24/(byte) irq1::barcnt#6 irq1::@26/(byte) irq1::barcnt#7 ) - (byte) irq1::barsin#5 ← phi( irq1::@24/(byte) irq1::barsin#6 irq1::@26/(byte) irq1::barsin#7 ) - (byte) irq1::idx#6 ← phi( irq1::@24/(byte) irq1::idx#7 irq1::@26/(byte) irq1::idx#2 ) - (byte) irq1::barcol#6 ← phi( irq1::@24/(byte) irq1::barcol#7 irq1::@26/(byte) irq1::barcol#2 ) - (byte) irq1::i1#2 ← phi( irq1::@24/(byte) irq1::i1#0 irq1::@26/(byte) irq1::i1#1 ) - (bool~) irq1::$18 ← (byte) irq1::i1#2 < (number) $f +irq1::@24: scope:[irq1] from irq1::@22 + (byte) irq1::i3#0 ← (byte) 0 + to:irq1::@31 +irq1::@25: scope:[irq1] from irq1::@23 irq1::@26 + (byte) irq1::barcnt#8 ← phi( irq1::@23/(byte) irq1::barcnt#3 irq1::@26/(byte) irq1::barcnt#9 ) + (byte) irq1::barsin#8 ← phi( irq1::@23/(byte) irq1::barsin#2 irq1::@26/(byte) irq1::barsin#9 ) + (byte) irq1::idx#5 ← phi( irq1::@23/(byte) irq1::idx#0 irq1::@26/(byte) irq1::idx#1 ) + (byte) irq1::barcol#5 ← phi( irq1::@23/(byte) irq1::barcol#0 irq1::@26/(byte) irq1::barcol#1 ) + (byte) irq1::i1#2 ← phi( irq1::@23/(byte) irq1::i1#0 irq1::@26/(byte) irq1::i1#1 ) + (bool~) irq1::$18 ← (byte) irq1::i1#2 < (number) $10 if((bool~) irq1::$18) goto irq1::@26 to:irq1::@27 irq1::@26: scope:[irq1] from irq1::@25 - (byte) irq1::barcnt#7 ← phi( irq1::@25/(byte) irq1::barcnt#5 ) - (byte) irq1::barsin#7 ← phi( irq1::@25/(byte) irq1::barsin#5 ) + (byte) irq1::barcnt#9 ← phi( irq1::@25/(byte) irq1::barcnt#8 ) + (byte) irq1::barsin#9 ← phi( irq1::@25/(byte) irq1::barsin#8 ) (byte) irq1::i1#3 ← phi( irq1::@25/(byte) irq1::i1#2 ) - (byte) irq1::idx#4 ← phi( irq1::@25/(byte) irq1::idx#6 ) - (byte) irq1::barcol#4 ← phi( irq1::@25/(byte) irq1::barcol#6 ) - (byte) irq1::barcol#2 ← -- (byte) irq1::barcol#4 - *((const byte*) rasters + (byte) irq1::idx#4) ← (byte) irq1::barcol#2 - (byte) irq1::idx#2 ← ++ (byte) irq1::idx#4 + (byte) irq1::idx#3 ← phi( irq1::@25/(byte) irq1::idx#5 ) + (byte) irq1::barcol#3 ← phi( irq1::@25/(byte) irq1::barcol#5 ) + *((const byte*) rasters + (byte) irq1::idx#3) ← (byte) irq1::barcol#3 + (byte) irq1::idx#1 ← ++ (byte) irq1::idx#3 + (byte) irq1::barcol#1 ← ++ (byte) irq1::barcol#3 (byte) irq1::i1#1 ← ++ (byte) irq1::i1#3 to:irq1::@25 irq1::@27: scope:[irq1] from irq1::@25 - (byte) irq1::barcnt#4 ← phi( irq1::@25/(byte) irq1::barcnt#5 ) - (byte) irq1::barsin#3 ← phi( irq1::@25/(byte) irq1::barsin#5 ) - (byte) irq1::barsin#1 ← (byte) irq1::barsin#3 + (number) $a - (byte) irq1::barcnt#1 ← ++ (byte) irq1::barcnt#4 - to:irq1::@19 -irq1::@28: scope:[irq1] from irq1::@21 irq1::@29 - (byte) irq1::i2#2 ← phi( irq1::@21/(byte) irq1::i2#0 irq1::@29/(byte) irq1::i2#1 ) - (bool~) irq1::$19 ← (byte) irq1::i2#2 < (number) $13 + (byte) irq1::barcnt#6 ← phi( irq1::@25/(byte) irq1::barcnt#8 ) + (byte) irq1::barsin#6 ← phi( irq1::@25/(byte) irq1::barsin#8 ) + (byte) irq1::idx#7 ← phi( irq1::@25/(byte) irq1::idx#5 ) + (byte) irq1::barcol#7 ← phi( irq1::@25/(byte) irq1::barcol#5 ) + (byte) irq1::i2#0 ← (byte) 0 + to:irq1::@28 +irq1::@28: scope:[irq1] from irq1::@27 irq1::@29 + (byte) irq1::barcnt#5 ← phi( irq1::@27/(byte) irq1::barcnt#6 irq1::@29/(byte) irq1::barcnt#7 ) + (byte) irq1::barsin#5 ← phi( irq1::@27/(byte) irq1::barsin#6 irq1::@29/(byte) irq1::barsin#7 ) + (byte) irq1::idx#6 ← phi( irq1::@27/(byte) irq1::idx#7 irq1::@29/(byte) irq1::idx#2 ) + (byte) irq1::barcol#6 ← phi( irq1::@27/(byte) irq1::barcol#7 irq1::@29/(byte) irq1::barcol#2 ) + (byte) irq1::i2#2 ← phi( irq1::@27/(byte) irq1::i2#0 irq1::@29/(byte) irq1::i2#1 ) + (bool~) irq1::$19 ← (byte) irq1::i2#2 < (number) $f if((bool~) irq1::$19) goto irq1::@29 - to:irq1::@return + to:irq1::@30 irq1::@29: scope:[irq1] from irq1::@28 + (byte) irq1::barcnt#7 ← phi( irq1::@28/(byte) irq1::barcnt#5 ) + (byte) irq1::barsin#7 ← phi( irq1::@28/(byte) irq1::barsin#5 ) (byte) irq1::i2#3 ← phi( irq1::@28/(byte) irq1::i2#2 ) - (byte~) irq1::$20 ← (const nomodify byte) irq1::scrollypos + (byte) irq1::i2#3 - (byte~) irq1::$21 ← (const nomodify byte) irq1::scrollypos + (byte) irq1::i2#3 - (number~) irq1::$22 ← *((const byte*) rasters + (byte~) irq1::$21) / (number) 2 - (number~) irq1::$23 ← (number~) irq1::$22 & (number) 7 - *((const byte*) rasters + (byte~) irq1::$20) ← (number~) irq1::$23 + (byte) irq1::idx#4 ← phi( irq1::@28/(byte) irq1::idx#6 ) + (byte) irq1::barcol#4 ← phi( irq1::@28/(byte) irq1::barcol#6 ) + (byte) irq1::barcol#2 ← -- (byte) irq1::barcol#4 + *((const byte*) rasters + (byte) irq1::idx#4) ← (byte) irq1::barcol#2 + (byte) irq1::idx#2 ← ++ (byte) irq1::idx#4 (byte) irq1::i2#1 ← ++ (byte) irq1::i2#3 to:irq1::@28 -irq1::@return: scope:[irq1] from irq1::@28 +irq1::@30: scope:[irq1] from irq1::@28 + (byte) irq1::barcnt#4 ← phi( irq1::@28/(byte) irq1::barcnt#5 ) + (byte) irq1::barsin#3 ← phi( irq1::@28/(byte) irq1::barsin#5 ) + (byte) irq1::barsin#1 ← (byte) irq1::barsin#3 + (number) $a + (byte) irq1::barcnt#1 ← ++ (byte) irq1::barcnt#4 + to:irq1::@22 +irq1::@31: scope:[irq1] from irq1::@24 irq1::@32 + (byte) irq1::i3#2 ← phi( irq1::@24/(byte) irq1::i3#0 irq1::@32/(byte) irq1::i3#1 ) + (bool~) irq1::$20 ← (byte) irq1::i3#2 < (number) $13 + if((bool~) irq1::$20) goto irq1::@32 + to:irq1::@33 +irq1::@32: scope:[irq1] from irq1::@31 + (byte) irq1::i3#3 ← phi( irq1::@31/(byte) irq1::i3#2 ) + (byte~) irq1::$21 ← (const nomodify byte) irq1::scrollypos + (byte) irq1::i3#3 + (byte~) irq1::$22 ← (const nomodify byte) irq1::scrollypos + (byte) irq1::i3#3 + (number~) irq1::$23 ← *((const byte*) rasters + (byte~) irq1::$22) / (number) 2 + (number~) irq1::$24 ← (number~) irq1::$23 & (number) 7 + *((const byte*) rasters + (byte~) irq1::$21) ← (number~) irq1::$24 + (byte) irq1::i3#1 ← ++ (byte) irq1::i3#3 + to:irq1::@31 +irq1::@33: scope:[irq1] from irq1::@31 + *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (number) 0 + *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (number) 0 + to:irq1::@return +irq1::@return: scope:[irq1] from irq1::@33 return to:@return @@ -342,9 +389,12 @@ __start::@return: scope:[__start] from __start::@2 SYMBOL TABLE SSA (const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f +(const nomodify byte*) COLORRAM = (byte*)(number) $d800 (const nomodify byte) GREETCOUNT = (byte) $10 +(const nomodify byte) GREET_Y = (byte) $14 (const nomodify void()**) HARDWARE_IRQ = (void()**)(number) $fffe (const nomodify byte) IRQ_RASTER = (byte) 1 +(const nomodify byte) LOGO_Y = (byte) 3 (byte) MEGA65_VICIV::ALPHADELAY (byte) MEGA65_VICIV::B0PIX (byte) MEGA65_VICIV::B0_ADDR @@ -630,7 +680,7 @@ SYMBOL TABLE SSA (byte) MOS6581_SID::POT_X (byte) MOS6581_SID::POT_Y (byte) MOS6581_SID::VOLUME_FILTER_MODE -(const nomodify byte) NUMBERL = (byte) $e0 +(const nomodify byte) NUMBERL = (byte) $d8 (const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = (byte) $5a (const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = (byte) $31 (const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = (byte) $54 @@ -641,6 +691,8 @@ SYMBOL TABLE SSA (const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = (byte) $20 (const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY = (byte) $2f (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d +(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR = (byte) $21 +(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = (byte) $20 (const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1 = (byte) $11 (const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = (byte) $16 (const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE = (byte) $1a @@ -657,6 +709,7 @@ SYMBOL TABLE SSA (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 (const nomodify byte) PROCPORT_RAM_IO = (byte) 5 (const nomodify byte*) SCREEN = (byte*)(number) $400 +(const nomodify byte) SCROLL_Y = (byte) $d (const byte*) SINUS[(number) $100] = kickasm {{ .fill 256, 91.5 + 91.5*sin(i*2*PI/256) }} (const byte*) SONG[] = kickasm {{ .import c64 "DiscoZak_2SID_patched.prg" @@ -674,19 +727,20 @@ interrupt(HARDWARE_STACK)(void()) irq1() (bool~) irq1::$1 (bool~) irq1::$10 (bool~) irq1::$11 -(number~) irq1::$12 +(bool~) irq1::$12 (bool~) irq1::$13 -(bool~) irq1::$14 +(number~) irq1::$14 (bool~) irq1::$15 -(number~) irq1::$16 -(bool~) irq1::$17 +(bool~) irq1::$16 +(number~) irq1::$17 (bool~) irq1::$18 (bool~) irq1::$19 (bool~) irq1::$2 -(byte~) irq1::$20 +(bool~) irq1::$20 (byte~) irq1::$21 -(number~) irq1::$22 +(byte~) irq1::$22 (number~) irq1::$23 +(number~) irq1::$24 (bool~) irq1::$3 (bool~) irq1::$4 (bool~) irq1::$5 @@ -717,6 +771,10 @@ interrupt(HARDWARE_STACK)(void()) irq1() (label) irq1::@28 (label) irq1::@29 (label) irq1::@3 +(label) irq1::@30 +(label) irq1::@31 +(label) irq1::@32 +(label) irq1::@33 (label) irq1::@4 (label) irq1::@5 (label) irq1::@6 @@ -758,6 +816,14 @@ interrupt(HARDWARE_STACK)(void()) irq1() (const nomodify byte) irq1::blackbar = (byte) $13 (byte) irq1::col (byte) irq1::col#0 +(byte) irq1::col1 +(byte) irq1::col1#0 +(byte) irq1::col1#1 +(byte) irq1::colsin +(byte) irq1::colsin#0 +(byte) irq1::colsin#1 +(byte) irq1::colsin#2 +(byte) irq1::colsin#3 (byte) irq1::i (byte) irq1::i#0 (byte) irq1::i#1 @@ -773,6 +839,11 @@ interrupt(HARDWARE_STACK)(void()) irq1() (byte) irq1::i2#1 (byte) irq1::i2#2 (byte) irq1::i2#3 +(byte) irq1::i3 +(byte) irq1::i3#0 +(byte) irq1::i3#1 +(byte) irq1::i3#2 +(byte) irq1::i3#3 (byte) irq1::idx (byte) irq1::idx#0 (byte) irq1::idx#1 @@ -831,13 +902,17 @@ interrupt(HARDWARE_STACK)(void()) irq1() (byte~) main::$2 (bool~) main::$3 (bool~) main::$4 +(bool~) main::$5 (label) main::@1 +(label) main::@10 (label) main::@2 (label) main::@3 (label) main::@4 (label) main::@5 (label) main::@6 (label) main::@7 +(label) main::@8 +(label) main::@9 (label) main::@return (byte) main::i (byte) main::i#0 @@ -848,6 +923,11 @@ interrupt(HARDWARE_STACK)(void()) irq1() (byte) main::i1#1 (byte) main::i1#2 (byte) main::i1#3 +(byte) main::i2 +(byte) main::i2#0 +(byte) main::i2#1 +(byte) main::i2#2 +(byte) main::i2#3 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (bool~) memset::$0 (bool~) memset::$1 @@ -890,7 +970,7 @@ interrupt(HARDWARE_STACK)(void()) irq1() (void*) memset::str#3 (void*) memset::str#4 (void*) memset::str#5 -(const byte*) rasters[(number) $100] = { fill( $100, 0) } +(const byte*) rasters[(const nomodify byte) NUMBERL] = { fill( NUMBERL, 0) } (volatile byte) sinpos loadstore (const void()*) songInit = (void()*)(const byte*) SONG (const void()*) songPlay = (void()*)(const byte*) SONG+(number) 3 @@ -904,15 +984,21 @@ Adding number conversion cast (unumber) $53 in *((byte*)(const nomodify struct M Adding number conversion cast (unumber) $40 in *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (number) $40 Adding number conversion cast (unumber) $40 in *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (number) $40 Adding number conversion cast (unumber) $28*$19 in (word) memset::num#0 ← (number) $28*(number) $19 -Adding number conversion cast (unumber) 3*$28 in *((const nomodify byte*) SCREEN+(number) 3*(number) $28 + (byte) main::i1#3) ← *((const byte*) MEGA_LOGO + (byte) main::i1#3) -Adding number conversion cast (unumber) 0 in (bool~) main::$4 ← (byte) main::i#1 != (number) 0 +Adding number conversion cast (unumber) LOGO_Y*$28 in *((const nomodify byte*) SCREEN+(const nomodify byte) LOGO_Y*(number) $28 + (byte) main::i1#3) ← *((const byte*) MEGA_LOGO + (byte) main::i1#3) +Adding number conversion cast (unumber) $28 in *((const nomodify byte*) SCREEN+(unumber)(const nomodify byte) LOGO_Y*(number) $28 + (byte) main::i1#3) ← *((const byte*) MEGA_LOGO + (byte) main::i1#3) +Adding number conversion cast (unumber) $28 in (bool~) main::$4 ← (byte) main::i2#2 < (number) $28 +Adding number conversion cast (unumber) SCROLL_Y*$28 in *((const nomodify byte*) SCREEN+(const nomodify byte) SCROLL_Y*(number) $28 + (byte) main::i2#3) ← (byte) 'a' +Adding number conversion cast (unumber) $28 in *((const nomodify byte*) SCREEN+(unumber)(const nomodify byte) SCROLL_Y*(number) $28 + (byte) main::i2#3) ← (byte) 'a' +Adding number conversion cast (unumber) GREET_Y*$28 in *((const nomodify byte*) SCREEN+(const nomodify byte) GREET_Y*(number) $28 + (byte) main::i2#3) ← (byte) 'b' +Adding number conversion cast (unumber) $28 in *((const nomodify byte*) SCREEN+(unumber)(const nomodify byte) GREET_Y*(number) $28 + (byte) main::i2#3) ← (byte) 'b' +Adding number conversion cast (unumber) 0 in (bool~) main::$5 ← (byte) main::i#1 != (number) 0 Adding number conversion cast (unumber) $16 in *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (number) $16 Adding number conversion cast (unumber) $7f in *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (number) $7f Adding number conversion cast (unumber) 1 in *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (number) 1 Adding number conversion cast (unumber) $80 in *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | (number) $80 Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (number) 0 -Adding number conversion cast (unumber) $28 in (number~) irq1::$12 ← (number) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#2) -Adding number conversion cast (unumber) irq1::$12 in (number~) irq1::$12 ← (unumber)(number) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#2) +Adding number conversion cast (unumber) $88 in *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (number) $88 +Adding number conversion cast (unumber) $88 in *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (number) $88 Adding number conversion cast (unumber) $66 in *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (number) $66 Adding number conversion cast (unumber) $50 in *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (number) $50 Adding number conversion cast (unumber) $50 in *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (number) $50 @@ -922,18 +1008,52 @@ Adding number conversion cast (unumber) 1 in (number~) irq1::$7 ← (byte) irq1: Adding number conversion cast (unumber) irq1::$7 in (number~) irq1::$7 ← (byte) irq1::zoomval#0 + (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) irq1::$8 ← (volatile byte) zoomx == (number) 0 Adding number conversion cast (unumber) 0 in (volatile byte) greetnm ← (number) 0 +Adding number conversion cast (unumber) $28 in (bool~) irq1::$13 ← (byte) irq1::i#2 < (number) $28 +Adding number conversion cast (unumber) 4 in (number~) irq1::$14 ← *((const byte*) SINUS + (byte) irq1::colsin#2) / (number) 4 +Adding number conversion cast (unumber) irq1::$14 in (number~) irq1::$14 ← *((const byte*) SINUS + (byte) irq1::colsin#2) / (unumber)(number) 4 +Adding number conversion cast (unumber) GREET_Y*$28 in *((const nomodify byte*) COLORRAM+(const nomodify byte) GREET_Y*(number) $28 + (byte) irq1::i#3) ← (byte) irq1::col1#0 +Adding number conversion cast (unumber) $28 in *((const nomodify byte*) COLORRAM+(unumber)(const nomodify byte) GREET_Y*(number) $28 + (byte) irq1::i#3) ← (byte) irq1::col1#0 +Adding number conversion cast (unumber) 2 in (byte) irq1::col1#1 ← (byte) irq1::col1#0 / (number) 2 +Adding number conversion cast (unumber) 1 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 0*(number) $28-(number) 1 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) 0*$28 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 0*(number) $28-(unumber)(number) 1 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) LOGO_Y*$28 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(unumber)(number) 0*(number) $28-(unumber)(number) 1 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) $28 in *((const nomodify byte*) COLORRAM+(unumber)(const nomodify byte) LOGO_Y*(number) $28+(unumber)(number) 0*(number) $28-(unumber)(number) 1 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) 2 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 1*(number) $28-(number) 2 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) 1*$28 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 1*(number) $28-(unumber)(number) 2 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) LOGO_Y*$28 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(unumber)(number) 1*(number) $28-(unumber)(number) 2 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) $28 in *((const nomodify byte*) COLORRAM+(unumber)(const nomodify byte) LOGO_Y*(number) $28+(unumber)(number) 1*(number) $28-(unumber)(number) 2 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) 3 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 2*(number) $28-(number) 3 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) 2*$28 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 2*(number) $28-(unumber)(number) 3 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) LOGO_Y*$28 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(unumber)(number) 2*(number) $28-(unumber)(number) 3 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) $28 in *((const nomodify byte*) COLORRAM+(unumber)(const nomodify byte) LOGO_Y*(number) $28+(unumber)(number) 2*(number) $28-(unumber)(number) 3 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) 4 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 3*(number) $28-(number) 4 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) 3*$28 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 3*(number) $28-(unumber)(number) 4 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) LOGO_Y*$28 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(unumber)(number) 3*(number) $28-(unumber)(number) 4 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) $28 in *((const nomodify byte*) COLORRAM+(unumber)(const nomodify byte) LOGO_Y*(number) $28+(unumber)(number) 3*(number) $28-(unumber)(number) 4 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) 5 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 4*(number) $28-(number) 5 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) 4*$28 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 4*(number) $28-(unumber)(number) 5 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) LOGO_Y*$28 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(unumber)(number) 4*(number) $28-(unumber)(number) 5 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) $28 in *((const nomodify byte*) COLORRAM+(unumber)(const nomodify byte) LOGO_Y*(number) $28+(unumber)(number) 4*(number) $28-(unumber)(number) 5 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) 6 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 5*(number) $28-(number) 6 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) 5*$28 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(number) 5*(number) $28-(unumber)(number) 6 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) LOGO_Y*$28 in *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(number) $28+(unumber)(number) 5*(number) $28-(unumber)(number) 6 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) $28 in *((const nomodify byte*) COLORRAM+(unumber)(const nomodify byte) LOGO_Y*(number) $28+(unumber)(number) 5*(number) $28-(unumber)(number) 6 + (byte) irq1::i#3) ← (byte) irq1::col1#1 +Adding number conversion cast (unumber) SCROLL_Y*$28 in *((const nomodify byte*) COLORRAM+(const nomodify byte) SCROLL_Y*(number) $28 + (byte) irq1::i#3) ← *((const byte*) PAL_GREEN + (byte) irq1::colsin#2) +Adding number conversion cast (unumber) $28 in *((const nomodify byte*) COLORRAM+(unumber)(const nomodify byte) SCROLL_Y*(number) $28 + (byte) irq1::i#3) ← *((const byte*) PAL_GREEN + (byte) irq1::colsin#2) Adding number conversion cast (unumber) 0 in *((const byte*) rasters + (byte) irq1::l#3) ← (number) 0 -Adding number conversion cast (unumber) $10 in (bool~) irq1::$15 ← (byte) irq1::barcnt#2 < (number) $10 -Adding number conversion cast (unumber) $10 in (number~) irq1::$16 ← (byte) irq1::barcnt#3 * (number) $10 -Adding number conversion cast (unumber) irq1::$16 in (number~) irq1::$16 ← (byte) irq1::barcnt#3 * (unumber)(number) $10 -Adding number conversion cast (unumber) $10 in (bool~) irq1::$17 ← (byte) irq1::i#2 < (number) $10 -Adding number conversion cast (unumber) $f in (bool~) irq1::$18 ← (byte) irq1::i1#2 < (number) $f +Adding number conversion cast (unumber) $10 in (bool~) irq1::$16 ← (byte) irq1::barcnt#2 < (number) $10 +Adding number conversion cast (unumber) $10 in (number~) irq1::$17 ← (byte) irq1::barcnt#3 * (number) $10 +Adding number conversion cast (unumber) irq1::$17 in (number~) irq1::$17 ← (byte) irq1::barcnt#3 * (unumber)(number) $10 +Adding number conversion cast (unumber) $10 in (bool~) irq1::$18 ← (byte) irq1::i1#2 < (number) $10 +Adding number conversion cast (unumber) $f in (bool~) irq1::$19 ← (byte) irq1::i2#2 < (number) $f Adding number conversion cast (unumber) $a in (byte) irq1::barsin#1 ← (byte) irq1::barsin#3 + (number) $a -Adding number conversion cast (unumber) $13 in (bool~) irq1::$19 ← (byte) irq1::i2#2 < (number) $13 -Adding number conversion cast (unumber) 2 in (number~) irq1::$22 ← *((const byte*) rasters + (byte~) irq1::$21) / (number) 2 -Adding number conversion cast (unumber) irq1::$22 in (number~) irq1::$22 ← *((const byte*) rasters + (byte~) irq1::$21) / (unumber)(number) 2 -Adding number conversion cast (unumber) 7 in (number~) irq1::$23 ← (unumber~) irq1::$22 & (number) 7 -Adding number conversion cast (unumber) irq1::$23 in (number~) irq1::$23 ← (unumber~) irq1::$22 & (unumber)(number) 7 +Adding number conversion cast (unumber) $13 in (bool~) irq1::$20 ← (byte) irq1::i3#2 < (number) $13 +Adding number conversion cast (unumber) 2 in (number~) irq1::$23 ← *((const byte*) rasters + (byte~) irq1::$22) / (number) 2 +Adding number conversion cast (unumber) irq1::$23 in (number~) irq1::$23 ← *((const byte*) rasters + (byte~) irq1::$22) / (unumber)(number) 2 +Adding number conversion cast (unumber) 7 in (number~) irq1::$24 ← (unumber~) irq1::$23 & (number) 7 +Adding number conversion cast (unumber) irq1::$24 in (number~) irq1::$24 ← (unumber~) irq1::$23 & (unumber)(number) 7 +Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (number) 0 +Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (unumber)(number) $47 @@ -942,17 +1062,22 @@ Inlining cast (word) memset::num#0 ← (unumber)(number) $28*(number) $19 Inlining cast *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (unumber)(number) $16 Inlining cast *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (unumber)(number) 1 Inlining cast *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (unumber)(number) 0 +Inlining cast *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (unumber)(number) $88 +Inlining cast *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (unumber)(number) $88 Inlining cast *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (unumber)(number) $66 Inlining cast *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (unumber)(number) $50 Inlining cast *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (unumber)(number) $50 Inlining cast (volatile byte) greetnm ← (unumber)(number) 0 Inlining cast *((const byte*) rasters + (byte) irq1::l#3) ← (unumber)(number) 0 +Inlining cast *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (unumber)(number) 0 +Inlining cast *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 0 Simplifying constant pointer cast (byte*) 1 Simplifying constant pointer cast (struct MOS6569_VICII*) 53248 Simplifying constant pointer cast (struct MOS4569_VICIII*) 53248 Simplifying constant pointer cast (struct MEGA65_VICIV*) 53248 +Simplifying constant pointer cast (byte*) 55296 Simplifying constant pointer cast (byte*) 53504 Simplifying constant pointer cast (byte*) 53760 Simplifying constant pointer cast (byte*) 54016 @@ -965,13 +1090,21 @@ Simplifying constant integer cast $47 Simplifying constant integer cast $53 Simplifying constant integer cast $40 Simplifying constant integer cast $40 +Simplifying constant integer cast (const nomodify byte) LOGO_Y*(unumber)(number) $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast (const nomodify byte) SCROLL_Y*(unumber)(number) $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast (const nomodify byte) GREET_Y*(unumber)(number) $28 +Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast $16 Simplifying constant integer cast $7f Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 -Simplifying constant integer cast $28 +Simplifying constant integer cast $88 +Simplifying constant integer cast $88 Simplifying constant integer cast $66 Simplifying constant integer cast $50 Simplifying constant integer cast $50 @@ -980,6 +1113,31 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 +Simplifying constant integer cast $28 +Simplifying constant integer cast 4 +Simplifying constant integer cast (const nomodify byte) GREET_Y*(unumber)(number) $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast 2 +Simplifying constant integer cast (const nomodify byte) LOGO_Y*(unumber)(number) $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast 1 +Simplifying constant integer cast (const nomodify byte) LOGO_Y*(unumber)(number) $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast 2 +Simplifying constant integer cast (const nomodify byte) LOGO_Y*(unumber)(number) $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast 3 +Simplifying constant integer cast (const nomodify byte) LOGO_Y*(unumber)(number) $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast 4 +Simplifying constant integer cast (const nomodify byte) LOGO_Y*(unumber)(number) $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast 5 +Simplifying constant integer cast (const nomodify byte) LOGO_Y*(unumber)(number) $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast 6 +Simplifying constant integer cast (const nomodify byte) SCROLL_Y*(unumber)(number) $28 +Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast $10 Simplifying constant integer cast $10 @@ -989,6 +1147,8 @@ Simplifying constant integer cast $a Simplifying constant integer cast $13 Simplifying constant integer cast 2 Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -996,13 +1156,18 @@ Finalized unsigned number type (byte) $47 Finalized unsigned number type (byte) $53 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) $40 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $16 Finalized unsigned number type (byte) $7f Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $88 +Finalized unsigned number type (byte) $88 Finalized unsigned number type (byte) $66 Finalized unsigned number type (byte) $50 Finalized unsigned number type (byte) $50 @@ -1010,6 +1175,23 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 3 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 5 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 6 +Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $10 @@ -1019,16 +1201,18 @@ Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 7 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to byte in (unumber~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#2) Inferred type updated to byte in (unumber~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 -Inferred type updated to byte in (unumber~) irq1::$16 ← (byte) irq1::barcnt#3 * (byte) $10 -Inferred type updated to byte in (unumber~) irq1::$22 ← *((const byte*) rasters + (byte~) irq1::$21) / (byte) 2 -Inferred type updated to byte in (unumber~) irq1::$23 ← (byte~) irq1::$22 & (byte) 7 +Inferred type updated to byte in (unumber~) irq1::$14 ← *((const byte*) SINUS + (byte) irq1::colsin#2) / (byte) 4 +Inferred type updated to byte in (unumber~) irq1::$17 ← (byte) irq1::barcnt#3 * (byte) $10 +Inferred type updated to byte in (unumber~) irq1::$23 ← *((const byte*) rasters + (byte~) irq1::$22) / (byte) 2 +Inferred type updated to byte in (unumber~) irq1::$24 ← (byte~) irq1::$23 & (byte) 7 Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0 -Inversing boolean not [92] (bool~) irq1::$6 ← (byte) irq1::line#6 != (const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1 from [91] (bool~) irq1::$5 ← (byte) irq1::line#6 == (const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1 -Inversing boolean not [101] (bool~) irq1::$9 ← (volatile byte) zoomx != (byte) 0 from [100] (bool~) irq1::$8 ← (volatile byte) zoomx == (byte) 0 -Inversing boolean not [106] (bool~) irq1::$11 ← (volatile byte) greetnm != (const nomodify byte) GREETCOUNT from [105] (bool~) irq1::$10 ← (volatile byte) greetnm == (const nomodify byte) GREETCOUNT +Inversing boolean not [103] (bool~) irq1::$6 ← (byte) irq1::line#6 != (const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1 from [102] (bool~) irq1::$5 ← (byte) irq1::line#6 == (const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1 +Inversing boolean not [112] (bool~) irq1::$9 ← (volatile byte) zoomx != (byte) 0 from [111] (bool~) irq1::$8 ← (volatile byte) zoomx == (byte) 0 +Inversing boolean not [117] (bool~) irq1::$11 ← (volatile byte) greetnm != (const nomodify byte) GREETCOUNT from [116] (bool~) irq1::$10 ← (volatile byte) greetnm == (const nomodify byte) GREETCOUNT Successful SSA optimization Pass2UnaryNotSimplification Alias memset::return#0 = memset::str#1 memset::return#3 memset::return#1 Alias memset::str#2 = memset::str#3 @@ -1040,25 +1224,29 @@ Alias memset::dst#2 = memset::dst#3 Alias memset::end#1 = memset::end#2 Alias memset::str#4 = memset::str#5 Alias main::i1#2 = main::i1#3 +Alias main::i2#2 = main::i2#3 Alias irq1::line#10 = irq1::line#3 irq1::line#2 irq1::line#13 irq1::line#4 irq1::line#14 irq1::line#5 irq1::line#15 irq1::line#6 irq1::line#11 irq1::line#12 Alias irq1::wobblepos#10 = irq1::wobblepos#3 irq1::wobblepos#4 irq1::wobblepos#2 irq1::wobblepos#14 irq1::wobblepos#12 irq1::wobblepos#15 irq1::wobblepos#13 irq1::wobblepos#8 irq1::wobblepos#9 irq1::wobblepos#11 Alias irq1::line#7 = irq1::line#8 Alias irq1::wobblepos#5 = irq1::wobblepos#6 +Alias irq1::colsin#2 = irq1::colsin#3 +Alias irq1::i#2 = irq1::i#3 +Alias irq1::col1#0 = irq1::$14 Alias irq1::l#2 = irq1::l#3 Alias irq1::barsin#2 = irq1::barsin#4 Alias irq1::barcnt#2 = irq1::barcnt#3 -Alias irq1::barcol#0 = irq1::$16 +Alias irq1::barcol#0 = irq1::$17 Alias irq1::barcol#3 = irq1::barcol#5 irq1::barcol#7 Alias irq1::idx#3 = irq1::idx#5 irq1::idx#7 -Alias irq1::i#2 = irq1::i#3 +Alias irq1::i1#2 = irq1::i1#3 Alias irq1::barsin#6 = irq1::barsin#9 irq1::barsin#8 Alias irq1::barcnt#6 = irq1::barcnt#9 irq1::barcnt#8 Alias irq1::barcol#4 = irq1::barcol#6 Alias irq1::idx#4 = irq1::idx#6 -Alias irq1::i1#2 = irq1::i1#3 +Alias irq1::i2#2 = irq1::i2#3 Alias irq1::barsin#3 = irq1::barsin#7 irq1::barsin#5 Alias irq1::barcnt#4 = irq1::barcnt#7 irq1::barcnt#5 -Alias irq1::i2#2 = irq1::i2#3 +Alias irq1::i3#2 = irq1::i3#3 Successful SSA optimization Pass2AliasElimination Alias irq1::line#10 = irq1::line#9 Successful SSA optimization Pass2AliasElimination @@ -1081,22 +1269,24 @@ Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [2] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$3 [9] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@4 Simple Condition (bool~) main::$3 [28] if((byte) main::i1#2<(byte~) main::$2) goto main::@2 -Simple Condition (bool~) main::$4 [38] if((byte) main::i#1!=(byte) 0) goto main::@4 -Simple Condition (bool~) irq1::$1 [58] if((byte) irq1::line#10!=(const nomodify byte) NUMBERL) goto irq1::@2 -Simple Condition (bool~) irq1::$2 [63] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@4 -Simple Condition (bool~) irq1::$3 [70] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@5 -Simple Condition (bool~) irq1::$4 [74] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@6 -Simple Condition (bool~) irq1::$6 [77] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@7 -Simple Condition (bool~) irq1::$9 [84] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 -Simple Condition (bool~) irq1::$11 [87] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 -Simple Condition (bool~) irq1::$13 [93] if((byte) irq1::raster#0==*((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq1::@8 -Simple Condition (bool~) irq1::$14 [97] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@17 -Simple Condition (bool~) irq1::$15 [105] if((byte) irq1::barcnt#2<(byte) $10) goto irq1::@20 -Simple Condition (bool~) irq1::$17 [112] if((byte) irq1::i#2<(byte) $10) goto irq1::@23 -Simple Condition (bool~) irq1::$18 [120] if((byte) irq1::i1#2<(byte) $f) goto irq1::@26 -Simple Condition (bool~) irq1::$19 [129] if((byte) irq1::i2#2<(byte) $13) goto irq1::@29 +Simple Condition (bool~) main::$4 [34] if((byte) main::i2#2<(byte) $28) goto main::@5 +Simple Condition (bool~) main::$5 [45] if((byte) main::i#1!=(byte) 0) goto main::@7 +Simple Condition (bool~) irq1::$1 [65] if((byte) irq1::line#10!=(const nomodify byte) NUMBERL) goto irq1::@2 +Simple Condition (bool~) irq1::$2 [70] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@4 +Simple Condition (bool~) irq1::$3 [80] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@5 +Simple Condition (bool~) irq1::$4 [84] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@6 +Simple Condition (bool~) irq1::$6 [87] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@7 +Simple Condition (bool~) irq1::$9 [94] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 +Simple Condition (bool~) irq1::$11 [97] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 +Simple Condition (bool~) irq1::$12 [103] if((byte) irq1::raster#0==*((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq1::@8 +Simple Condition (bool~) irq1::$13 [107] if((byte) irq1::i#2<(byte) $28) goto irq1::@17 +Simple Condition (bool~) irq1::$15 [123] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@20 +Simple Condition (bool~) irq1::$16 [130] if((byte) irq1::barcnt#2<(byte) $10) goto irq1::@23 +Simple Condition (bool~) irq1::$18 [137] if((byte) irq1::i1#2<(byte) $10) goto irq1::@26 +Simple Condition (bool~) irq1::$19 [145] if((byte) irq1::i2#2<(byte) $f) goto irq1::@29 +Simple Condition (bool~) irq1::$20 [154] if((byte) irq1::i3#2<(byte) $13) goto irq1::@32 Successful SSA optimization Pass2ConditionalJumpSimplification -Constant right-side identified [19] (word) memset::num#0 ← (unumber)(number) $28*(number) $19 +Constant right-side identified [21] (word) memset::num#0 ← (unumber)(number) $28*(number) $19 Constant right-side identified [26] (byte~) main::$2 ← sizeof (const byte*) MEGA_LOGO Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const void*) memset::str#0 = (void*)SCREEN @@ -1104,13 +1294,15 @@ Constant (const byte) memset::c#0 = ' ' Constant (const word) memset::num#0 = (unumber)$28*$19 Constant (const byte) main::i1#0 = 0 Constant (const byte) main::$2 = sizeof MEGA_LOGO +Constant (const byte) main::i2#0 = 0 Constant (const byte) main::i#0 = 0 Constant (const byte) irq1::line#0 = 0 +Constant (const byte) irq1::i#0 = 0 Constant (const byte) irq1::l#0 = 0 Constant (const byte) irq1::barcnt#0 = 0 -Constant (const byte) irq1::i#0 = 0 -Constant (const byte) irq1::i2#0 = 0 Constant (const byte) irq1::i1#0 = 0 +Constant (const byte) irq1::i3#0 = 0 +Constant (const byte) irq1::i2#0 = 0 Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) memset::$4 = (byte*)memset::str#0 Constant (const byte*) memset::dst#0 = (byte*)memset::str#0 @@ -1118,6 +1310,10 @@ Constant (const void*) memset::return#2 = memset::str#0 Successful SSA optimization Pass2ConstantIdentification if() condition always false - eliminating [2] if((const word) memset::num#0<=(byte) 0) goto memset::@1 Successful SSA optimization Pass2ConstantIfs +Simplifying constant evaluating to zero (byte)(number) 0*(number) $28 in [111] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 0*(number) $28-(byte) 1 + (byte) irq1::i#2) ← (byte) irq1::col1#1 +Successful SSA optimization PassNSimplifyConstantZero +Simplifying expression containing zero COLORRAM+LOGO_Y*$28 in [111] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte) 0-(byte) 1 + (byte) irq1::i#2) ← (byte) irq1::col1#1 +Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const void*) memset::return#2 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return @@ -1134,127 +1330,131 @@ Simplifying constant integer cast $bc Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $bc Successful SSA optimization PassNFinalizeNumberTypeConversions -Rewriting multiplication to use shift [75] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 * (byte) $10 -Rewriting division to use shift [94] (byte~) irq1::$22 ← *((const byte*) rasters + (byte~) irq1::$21) / (byte) 2 +Rewriting division to use shift [76] (byte) irq1::col1#0 ← *((const byte*) SINUS + (byte) irq1::colsin#2) / (byte) 4 +Rewriting division to use shift [78] (byte) irq1::col1#1 ← (byte) irq1::col1#0 / (byte) 2 +Rewriting multiplication to use shift [96] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 * (byte) $10 +Rewriting division to use shift [115] (byte~) irq1::$23 ← *((const byte*) rasters + (byte~) irq1::$22) / (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte*) memset::dst#0 Inlining constant with var siblings (const byte) main::i1#0 +Inlining constant with var siblings (const byte) main::i2#0 Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) irq1::line#0 +Inlining constant with var siblings (const byte) irq1::i#0 Inlining constant with var siblings (const byte) irq1::l#0 Inlining constant with var siblings (const byte) irq1::barcnt#0 -Inlining constant with var siblings (const byte) irq1::i#0 -Inlining constant with var siblings (const byte) irq1::i2#0 Inlining constant with var siblings (const byte) irq1::i1#0 +Inlining constant with var siblings (const byte) irq1::i3#0 +Inlining constant with var siblings (const byte) irq1::i2#0 +Constant inlined irq1::line#0 = (byte) 0 +Constant inlined irq1::barcnt#0 = (byte) 0 +Constant inlined irq1::i3#0 = (byte) 0 +Constant inlined irq1::i#0 = (byte) 0 Constant inlined irq1::l#0 = (byte) 0 Constant inlined memset::$4 = (byte*)(const void*) memset::str#0 Constant inlined main::$2 = (byte) $bc*(const byte) SIZEOF_BYTE -Constant inlined irq1::line#0 = (byte) 0 Constant inlined irq1::i2#0 = (byte) 0 Constant inlined irq1::i1#0 = (byte) 0 Constant inlined main::i1#0 = (byte) 0 Constant inlined main::i#0 = (byte) 0 -Constant inlined irq1::barcnt#0 = (byte) 0 +Constant inlined main::i2#0 = (byte) 0 Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 -Constant inlined irq1::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in assignment *(rasters+irq1::scrollypos + irq1::$22) Consolidated array index constant in assignment *(rasters+irq1::scrollypos + irq1::$21) -Consolidated array index constant in assignment *(rasters+irq1::scrollypos + irq1::$20) Successful SSA optimization Pass2ConstantAdditionElimination -Alias irq1::i2#2 = irq1::$20 irq1::$21 +Alias irq1::i3#2 = irq1::$21 irq1::$22 Successful SSA optimization Pass2AliasElimination -Added new block during phi lifting main::@8(between main::@4 and main::@4) -Added new block during phi lifting irq1::@30(between irq1::@12 and irq1::@7) -Added new block during phi lifting irq1::@31(between irq1::@13 and irq1::@7) -Added new block during phi lifting irq1::@32(between irq1::@14 and irq1::@7) +Added new block during phi lifting main::@11(between main::@7 and main::@7) +Added new block during phi lifting irq1::@34(between irq1::@12 and irq1::@7) +Added new block during phi lifting irq1::@35(between irq1::@13 and irq1::@7) +Added new block during phi lifting irq1::@36(between irq1::@14 and irq1::@7) Adding NOP phi() at start of __start Adding NOP phi() at start of __start::@1 Adding NOP phi() at start of __start::@2 -Adding NOP phi() at start of irq1::@3 -Adding NOP phi() at start of irq1::@21 +Adding NOP phi() at start of irq1::@18 +Adding NOP phi() at start of irq1::@24 +Adding NOP phi() at start of main::@10 Adding NOP phi() at start of main::@3 Adding NOP phi() at start of main::@6 +Adding NOP phi() at start of main::@9 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 Adding NOP phi() at start of memset::@1 CALL GRAPH Calls in [__start] to main:6 -Calls in [main] to memset:105 +Calls in [main] to memset:128 -Created 16 initial phi equivalence classes +Created 19 initial phi equivalence classes Coalesced [14] irq1::wobblepos#16 ← irq1::wobblepos#0 -Coalesced [22] irq1::barsin#10 ← irq1::barsin#0 -Coalesced [33] irq1::i2#4 ← irq1::i2#1 -Coalesced [36] irq1::barcol#8 ← irq1::barcol#0 -Coalesced [37] irq1::idx#8 ← irq1::idx#0 -Coalesced [40] irq1::barcol#10 ← irq1::barcol#3 -Coalesced [41] irq1::idx#10 ← irq1::idx#3 -Coalesced [46] irq1::barcnt#10 ← irq1::barcnt#1 -Coalesced [47] irq1::barsin#11 ← irq1::barsin#1 -Coalesced [52] irq1::i1#4 ← irq1::i1#1 -Coalesced [53] irq1::barcol#11 ← irq1::barcol#2 -Coalesced [54] irq1::idx#11 ← irq1::idx#2 -Coalesced [59] irq1::i#4 ← irq1::i#1 -Coalesced [60] irq1::barcol#9 ← irq1::barcol#1 -Coalesced [61] irq1::idx#9 ← irq1::idx#1 -Coalesced [64] irq1::l#4 ← irq1::l#1 -Coalesced [81] irq1::wobblepos#21 ← irq1::wobblepos#10 -Coalesced [86] irq1::line#16 ← irq1::line#1 -Coalesced (already) [87] irq1::wobblepos#17 ← irq1::wobblepos#7 -Coalesced (already) [88] irq1::wobblepos#20 ← irq1::wobblepos#10 -Coalesced (already) [89] irq1::wobblepos#19 ← irq1::wobblepos#10 -Coalesced (already) [90] irq1::wobblepos#18 ← irq1::wobblepos#10 -Coalesced (already) [92] irq1::wobblepos#24 ← irq1::wobblepos#10 -Coalesced (already) [95] irq1::wobblepos#23 ← irq1::wobblepos#10 -Coalesced [100] irq1::wobblepos#22 ← irq1::wobblepos#1 -Coalesced [128] main::i#3 ← main::i#1 -Coalesced [131] main::i1#4 ← main::i1#1 -Coalesced [140] memset::dst#4 ← memset::dst#1 -Coalesced down to 13 phi equivalence classes +Coalesced [21] irq1::colsin#5 ← irq1::colsin#0 +Coalesced [28] irq1::barsin#10 ← irq1::barsin#0 +Coalesced [41] irq1::i3#4 ← irq1::i3#1 +Coalesced [44] irq1::barcol#8 ← irq1::barcol#0 +Coalesced [45] irq1::idx#8 ← irq1::idx#0 +Coalesced [48] irq1::barcol#10 ← irq1::barcol#3 +Coalesced [49] irq1::idx#10 ← irq1::idx#3 +Coalesced [54] irq1::barcnt#10 ← irq1::barcnt#1 +Coalesced [55] irq1::barsin#11 ← irq1::barsin#1 +Coalesced [60] irq1::i2#4 ← irq1::i2#1 +Coalesced [61] irq1::barcol#11 ← irq1::barcol#2 +Coalesced [62] irq1::idx#11 ← irq1::idx#2 +Coalesced [67] irq1::i1#4 ← irq1::i1#1 +Coalesced [68] irq1::barcol#9 ← irq1::barcol#1 +Coalesced [69] irq1::idx#9 ← irq1::idx#1 +Coalesced [72] irq1::l#4 ← irq1::l#1 +Coalesced [85] irq1::i#4 ← irq1::i#1 +Coalesced [86] irq1::colsin#4 ← irq1::colsin#1 +Coalesced [103] irq1::wobblepos#21 ← irq1::wobblepos#10 +Coalesced [108] irq1::line#16 ← irq1::line#1 +Coalesced (already) [109] irq1::wobblepos#17 ← irq1::wobblepos#7 +Coalesced (already) [110] irq1::wobblepos#20 ← irq1::wobblepos#10 +Coalesced (already) [111] irq1::wobblepos#19 ← irq1::wobblepos#10 +Coalesced (already) [112] irq1::wobblepos#18 ← irq1::wobblepos#10 +Coalesced (already) [114] irq1::wobblepos#24 ← irq1::wobblepos#10 +Coalesced (already) [117] irq1::wobblepos#23 ← irq1::wobblepos#10 +Coalesced [121] irq1::wobblepos#22 ← irq1::wobblepos#1 +Coalesced [153] main::i#3 ← main::i#1 +Coalesced [157] main::i2#4 ← main::i2#1 +Coalesced [160] main::i1#4 ← main::i1#1 +Coalesced [169] memset::dst#4 ← memset::dst#1 +Coalesced down to 16 phi equivalence classes Culled Empty Block (label) __start::@2 -Culled Empty Block (label) irq1::@3 -Culled Empty Block (label) irq1::@21 +Culled Empty Block (label) irq1::@18 Culled Empty Block (label) irq1::@24 -Culled Empty Block (label) irq1::@32 -Culled Empty Block (label) irq1::@31 -Culled Empty Block (label) irq1::@30 +Culled Empty Block (label) irq1::@27 +Culled Empty Block (label) irq1::@36 +Culled Empty Block (label) irq1::@35 +Culled Empty Block (label) irq1::@34 +Culled Empty Block (label) main::@10 Culled Empty Block (label) main::@3 -Culled Empty Block (label) main::@8 +Culled Empty Block (label) main::@6 +Culled Empty Block (label) main::@11 Culled Empty Block (label) memset::@2 Culled Empty Block (label) memset::@1 Renumbering block memset::@3 to memset::@1 Renumbering block memset::@4 to memset::@2 Renumbering block main::@4 to main::@3 Renumbering block main::@5 to main::@4 -Renumbering block main::@6 to main::@5 -Renumbering block main::@7 to main::@6 -Renumbering block irq1::@4 to irq1::@3 -Renumbering block irq1::@5 to irq1::@4 -Renumbering block irq1::@6 to irq1::@5 -Renumbering block irq1::@7 to irq1::@6 -Renumbering block irq1::@8 to irq1::@7 -Renumbering block irq1::@9 to irq1::@8 -Renumbering block irq1::@10 to irq1::@9 -Renumbering block irq1::@11 to irq1::@10 -Renumbering block irq1::@12 to irq1::@11 -Renumbering block irq1::@13 to irq1::@12 -Renumbering block irq1::@14 to irq1::@13 -Renumbering block irq1::@15 to irq1::@14 -Renumbering block irq1::@16 to irq1::@15 -Renumbering block irq1::@17 to irq1::@16 -Renumbering block irq1::@18 to irq1::@17 +Renumbering block main::@7 to main::@5 +Renumbering block main::@8 to main::@6 +Renumbering block main::@9 to main::@7 Renumbering block irq1::@19 to irq1::@18 Renumbering block irq1::@20 to irq1::@19 -Renumbering block irq1::@22 to irq1::@20 -Renumbering block irq1::@23 to irq1::@21 -Renumbering block irq1::@25 to irq1::@22 -Renumbering block irq1::@26 to irq1::@23 -Renumbering block irq1::@27 to irq1::@24 +Renumbering block irq1::@21 to irq1::@20 +Renumbering block irq1::@22 to irq1::@21 +Renumbering block irq1::@23 to irq1::@22 +Renumbering block irq1::@25 to irq1::@23 +Renumbering block irq1::@26 to irq1::@24 Renumbering block irq1::@28 to irq1::@25 Renumbering block irq1::@29 to irq1::@26 +Renumbering block irq1::@30 to irq1::@27 +Renumbering block irq1::@31 to irq1::@28 +Renumbering block irq1::@32 to irq1::@29 +Renumbering block irq1::@33 to irq1::@30 Adding NOP phi() at start of __start Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@7 Adding NOP phi() at start of memset FINAL CONTROL FLOW GRAPH @@ -1285,185 +1485,219 @@ irq1: scope:[irq1] from [11] (volatile byte) sinpos ← ++ (volatile byte) sinpos [12] (byte) irq1::wobblepos#0 ← (volatile byte) sinpos to:irq1::@1 -irq1::@1: scope:[irq1] from irq1 irq1::@8 - [13] (byte) irq1::wobblepos#10 ← phi( irq1/(byte) irq1::wobblepos#0 irq1::@8/(byte) irq1::wobblepos#7 ) - [13] (byte) irq1::line#10 ← phi( irq1/(byte) 0 irq1::@8/(byte) irq1::line#1 ) +irq1::@1: scope:[irq1] from irq1 irq1::@9 + [13] (byte) irq1::wobblepos#10 ← phi( irq1/(byte) irq1::wobblepos#0 irq1::@9/(byte) irq1::wobblepos#7 ) + [13] (byte) irq1::line#10 ← phi( irq1/(byte) 0 irq1::@9/(byte) irq1::line#1 ) [14] if((byte) irq1::line#10!=(const nomodify byte) NUMBERL) goto irq1::@2 - to:irq1::@15 -irq1::@15: scope:[irq1] from irq1::@1 irq1::@16 - [15] (byte) irq1::l#2 ← phi( irq1::@16/(byte) irq1::l#1 irq1::@1/(byte) 0 ) - [16] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@16 - to:irq1::@17 -irq1::@17: scope:[irq1] from irq1::@15 + to:irq1::@3 +irq1::@3: scope:[irq1] from irq1::@1 + [15] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (byte) $88 + [16] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (byte) $88 [17] call *((const void()*) songPlay) - [18] (byte) irq1::barsin#0 ← (volatile byte) sinpos + [18] (byte) irq1::colsin#0 ← (volatile byte) sinpos + to:irq1::@16 +irq1::@16: scope:[irq1] from irq1::@17 irq1::@3 + [19] (byte) irq1::colsin#2 ← phi( irq1::@17/(byte) irq1::colsin#1 irq1::@3/(byte) irq1::colsin#0 ) + [19] (byte) irq1::i#2 ← phi( irq1::@17/(byte) irq1::i#1 irq1::@3/(byte) 0 ) + [20] if((byte) irq1::i#2<(byte) $28) goto irq1::@17 to:irq1::@18 -irq1::@18: scope:[irq1] from irq1::@17 irq1::@24 - [19] (byte) irq1::barsin#2 ← phi( irq1::@17/(byte) irq1::barsin#0 irq1::@24/(byte) irq1::barsin#1 ) - [19] (byte) irq1::barcnt#2 ← phi( irq1::@17/(byte) 0 irq1::@24/(byte) irq1::barcnt#1 ) - [20] if((byte) irq1::barcnt#2<(byte) $10) goto irq1::@19 - to:irq1::@25 -irq1::@25: scope:[irq1] from irq1::@18 irq1::@26 - [21] (byte) irq1::i2#2 ← phi( irq1::@18/(byte) 0 irq1::@26/(byte) irq1::i2#1 ) - [22] if((byte) irq1::i2#2<(byte) $13) goto irq1::@26 +irq1::@18: scope:[irq1] from irq1::@16 irq1::@19 + [21] (byte) irq1::l#2 ← phi( irq1::@16/(byte) 0 irq1::@19/(byte) irq1::l#1 ) + [22] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@19 + to:irq1::@20 +irq1::@20: scope:[irq1] from irq1::@18 + [23] (byte) irq1::barsin#0 ← (volatile byte) sinpos + to:irq1::@21 +irq1::@21: scope:[irq1] from irq1::@20 irq1::@27 + [24] (byte) irq1::barsin#2 ← phi( irq1::@20/(byte) irq1::barsin#0 irq1::@27/(byte) irq1::barsin#1 ) + [24] (byte) irq1::barcnt#2 ← phi( irq1::@20/(byte) 0 irq1::@27/(byte) irq1::barcnt#1 ) + [25] if((byte) irq1::barcnt#2<(byte) $10) goto irq1::@22 + to:irq1::@28 +irq1::@28: scope:[irq1] from irq1::@21 irq1::@29 + [26] (byte) irq1::i3#2 ← phi( irq1::@21/(byte) 0 irq1::@29/(byte) irq1::i3#1 ) + [27] if((byte) irq1::i3#2<(byte) $13) goto irq1::@29 + to:irq1::@30 +irq1::@30: scope:[irq1] from irq1::@28 + [28] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (byte) 0 + [29] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (byte) 0 to:irq1::@return -irq1::@return: scope:[irq1] from irq1::@25 - [23] return +irq1::@return: scope:[irq1] from irq1::@30 + [30] return to:@return -irq1::@26: scope:[irq1] from irq1::@25 - [24] (byte~) irq1::$22 ← *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i2#2) >> (byte) 1 - [25] (byte~) irq1::$23 ← (byte~) irq1::$22 & (byte) 7 - [26] *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i2#2) ← (byte~) irq1::$23 - [27] (byte) irq1::i2#1 ← ++ (byte) irq1::i2#2 +irq1::@29: scope:[irq1] from irq1::@28 + [31] (byte~) irq1::$23 ← *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i3#2) >> (byte) 1 + [32] (byte~) irq1::$24 ← (byte~) irq1::$23 & (byte) 7 + [33] *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i3#2) ← (byte~) irq1::$24 + [34] (byte) irq1::i3#1 ← ++ (byte) irq1::i3#2 + to:irq1::@28 +irq1::@22: scope:[irq1] from irq1::@21 + [35] (byte) irq1::idx#0 ← *((const byte*) SINUS + (byte) irq1::barsin#2) + [36] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 << (byte) 4 + to:irq1::@23 +irq1::@23: scope:[irq1] from irq1::@22 irq1::@24 + [37] (byte) irq1::idx#3 ← phi( irq1::@22/(byte) irq1::idx#0 irq1::@24/(byte) irq1::idx#1 ) + [37] (byte) irq1::barcol#3 ← phi( irq1::@22/(byte) irq1::barcol#0 irq1::@24/(byte) irq1::barcol#1 ) + [37] (byte) irq1::i1#2 ← phi( irq1::@22/(byte) 0 irq1::@24/(byte) irq1::i1#1 ) + [38] if((byte) irq1::i1#2<(byte) $10) goto irq1::@24 to:irq1::@25 +irq1::@25: scope:[irq1] from irq1::@23 irq1::@26 + [39] (byte) irq1::idx#4 ← phi( irq1::@23/(byte) irq1::idx#3 irq1::@26/(byte) irq1::idx#2 ) + [39] (byte) irq1::barcol#4 ← phi( irq1::@23/(byte) irq1::barcol#3 irq1::@26/(byte) irq1::barcol#2 ) + [39] (byte) irq1::i2#2 ← phi( irq1::@23/(byte) 0 irq1::@26/(byte) irq1::i2#1 ) + [40] if((byte) irq1::i2#2<(byte) $f) goto irq1::@26 + to:irq1::@27 +irq1::@27: scope:[irq1] from irq1::@25 + [41] (byte) irq1::barsin#1 ← (byte) irq1::barsin#2 + (byte) $a + [42] (byte) irq1::barcnt#1 ← ++ (byte) irq1::barcnt#2 + to:irq1::@21 +irq1::@26: scope:[irq1] from irq1::@25 + [43] (byte) irq1::barcol#2 ← -- (byte) irq1::barcol#4 + [44] *((const byte*) rasters + (byte) irq1::idx#4) ← (byte) irq1::barcol#2 + [45] (byte) irq1::idx#2 ← ++ (byte) irq1::idx#4 + [46] (byte) irq1::i2#1 ← ++ (byte) irq1::i2#2 + to:irq1::@25 +irq1::@24: scope:[irq1] from irq1::@23 + [47] *((const byte*) rasters + (byte) irq1::idx#3) ← (byte) irq1::barcol#3 + [48] (byte) irq1::idx#1 ← ++ (byte) irq1::idx#3 + [49] (byte) irq1::barcol#1 ← ++ (byte) irq1::barcol#3 + [50] (byte) irq1::i1#1 ← ++ (byte) irq1::i1#2 + to:irq1::@23 irq1::@19: scope:[irq1] from irq1::@18 - [28] (byte) irq1::idx#0 ← *((const byte*) SINUS + (byte) irq1::barsin#2) - [29] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 << (byte) 4 - to:irq1::@20 -irq1::@20: scope:[irq1] from irq1::@19 irq1::@21 - [30] (byte) irq1::idx#3 ← phi( irq1::@19/(byte) irq1::idx#0 irq1::@21/(byte) irq1::idx#1 ) - [30] (byte) irq1::barcol#3 ← phi( irq1::@19/(byte) irq1::barcol#0 irq1::@21/(byte) irq1::barcol#1 ) - [30] (byte) irq1::i#2 ← phi( irq1::@19/(byte) 0 irq1::@21/(byte) irq1::i#1 ) - [31] if((byte) irq1::i#2<(byte) $10) goto irq1::@21 - to:irq1::@22 -irq1::@22: scope:[irq1] from irq1::@20 irq1::@23 - [32] (byte) irq1::idx#4 ← phi( irq1::@20/(byte) irq1::idx#3 irq1::@23/(byte) irq1::idx#2 ) - [32] (byte) irq1::barcol#4 ← phi( irq1::@20/(byte) irq1::barcol#3 irq1::@23/(byte) irq1::barcol#2 ) - [32] (byte) irq1::i1#2 ← phi( irq1::@20/(byte) 0 irq1::@23/(byte) irq1::i1#1 ) - [33] if((byte) irq1::i1#2<(byte) $f) goto irq1::@23 - to:irq1::@24 -irq1::@24: scope:[irq1] from irq1::@22 - [34] (byte) irq1::barsin#1 ← (byte) irq1::barsin#2 + (byte) $a - [35] (byte) irq1::barcnt#1 ← ++ (byte) irq1::barcnt#2 + [51] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 + [52] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 to:irq1::@18 -irq1::@23: scope:[irq1] from irq1::@22 - [36] (byte) irq1::barcol#2 ← -- (byte) irq1::barcol#4 - [37] *((const byte*) rasters + (byte) irq1::idx#4) ← (byte) irq1::barcol#2 - [38] (byte) irq1::idx#2 ← ++ (byte) irq1::idx#4 - [39] (byte) irq1::i1#1 ← ++ (byte) irq1::i1#2 - to:irq1::@22 -irq1::@21: scope:[irq1] from irq1::@20 - [40] *((const byte*) rasters + (byte) irq1::idx#3) ← (byte) irq1::barcol#3 - [41] (byte) irq1::idx#1 ← ++ (byte) irq1::idx#3 - [42] (byte) irq1::barcol#1 ← ++ (byte) irq1::barcol#3 - [43] (byte) irq1::i#1 ← ++ (byte) irq1::i#2 - to:irq1::@20 -irq1::@16: scope:[irq1] from irq1::@15 - [44] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 - [45] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 - to:irq1::@15 +irq1::@17: scope:[irq1] from irq1::@16 + [53] (byte) irq1::col1#0 ← *((const byte*) SINUS + (byte) irq1::colsin#2) >> (byte) 2 + [54] *((const nomodify byte*) COLORRAM+(const nomodify byte) GREET_Y*(byte) $28 + (byte) irq1::i#2) ← (byte) irq1::col1#0 + [55] (byte) irq1::col1#1 ← (byte) irq1::col1#0 >> (byte) 1 + [56] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28-(byte) 1 + (byte) irq1::i#2) ← (byte) irq1::col1#1 + [57] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 1*(number) $28-(byte) 2 + (byte) irq1::i#2) ← (byte) irq1::col1#1 + [58] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 2*(number) $28-(byte) 3 + (byte) irq1::i#2) ← (byte) irq1::col1#1 + [59] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 3*(number) $28-(byte) 4 + (byte) irq1::i#2) ← (byte) irq1::col1#1 + [60] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 4*(number) $28-(byte) 5 + (byte) irq1::i#2) ← (byte) irq1::col1#1 + [61] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 5*(number) $28-(byte) 6 + (byte) irq1::i#2) ← (byte) irq1::col1#1 + [62] *((const nomodify byte*) COLORRAM+(const nomodify byte) SCROLL_Y*(byte) $28 + (byte) irq1::i#2) ← *((const byte*) PAL_GREEN + (byte) irq1::colsin#2) + [63] (byte) irq1::colsin#1 ← ++ (byte) irq1::colsin#2 + [64] (byte) irq1::i#1 ← ++ (byte) irq1::i#2 + to:irq1::@16 irq1::@2: scope:[irq1] from irq1::@1 - [46] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) - [47] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 - [48] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 - [49] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@3 - to:irq1::@9 -irq1::@9: scope:[irq1] from irq1::@2 - [50] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@4 + [65] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) + [66] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 + [67] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 + [68] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@4 to:irq1::@10 -irq1::@10: scope:[irq1] from irq1::@9 - [51] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@5 +irq1::@10: scope:[irq1] from irq1::@2 + [69] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@5 to:irq1::@11 irq1::@11: scope:[irq1] from irq1::@10 - [52] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@6 + [70] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@6 to:irq1::@12 irq1::@12: scope:[irq1] from irq1::@11 - [53] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) - [54] (volatile byte) zoomx ← ++ (volatile byte) zoomx - [55] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 - [56] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 - [57] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 - [58] if((volatile byte) zoomx!=(byte) 0) goto irq1::@6 + [71] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@7 to:irq1::@13 irq1::@13: scope:[irq1] from irq1::@12 - [59] (volatile byte) greetnm ← ++ (volatile byte) greetnm - [60] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@6 + [72] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) + [73] (volatile byte) zoomx ← ++ (volatile byte) zoomx + [74] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 + [75] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 + [76] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 + [77] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 to:irq1::@14 irq1::@14: scope:[irq1] from irq1::@13 - [61] (volatile byte) greetnm ← (byte) 0 - to:irq1::@6 -irq1::@6: scope:[irq1] from irq1::@11 irq1::@12 irq1::@13 irq1::@14 irq1::@3 irq1::@4 irq1::@5 - [62] (byte) irq1::wobblepos#7 ← phi( irq1::@11/(byte) irq1::wobblepos#10 irq1::@12/(byte) irq1::wobblepos#10 irq1::@13/(byte) irq1::wobblepos#10 irq1::@14/(byte) irq1::wobblepos#10 irq1::@3/(byte) irq1::wobblepos#1 irq1::@4/(byte) irq1::wobblepos#10 irq1::@5/(byte) irq1::wobblepos#10 ) - [63] (byte) irq1::raster#0 ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) + [78] (volatile byte) greetnm ← ++ (volatile byte) greetnm + [79] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 + to:irq1::@15 +irq1::@15: scope:[irq1] from irq1::@14 + [80] (volatile byte) greetnm ← (byte) 0 to:irq1::@7 -irq1::@7: scope:[irq1] from irq1::@6 irq1::@7 - [64] if((byte) irq1::raster#0==*((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq1::@7 +irq1::@7: scope:[irq1] from irq1::@12 irq1::@13 irq1::@14 irq1::@15 irq1::@4 irq1::@5 irq1::@6 + [81] (byte) irq1::wobblepos#7 ← phi( irq1::@12/(byte) irq1::wobblepos#10 irq1::@13/(byte) irq1::wobblepos#10 irq1::@14/(byte) irq1::wobblepos#10 irq1::@15/(byte) irq1::wobblepos#10 irq1::@4/(byte) irq1::wobblepos#1 irq1::@5/(byte) irq1::wobblepos#10 irq1::@6/(byte) irq1::wobblepos#10 ) + [82] (byte) irq1::raster#0 ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) to:irq1::@8 -irq1::@8: scope:[irq1] from irq1::@7 - [65] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 +irq1::@8: scope:[irq1] from irq1::@7 irq1::@8 + [83] if((byte) irq1::raster#0==*((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq1::@8 + to:irq1::@9 +irq1::@9: scope:[irq1] from irq1::@8 + [84] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 to:irq1::@1 +irq1::@6: scope:[irq1] from irq1::@11 + [85] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 + to:irq1::@7 irq1::@5: scope:[irq1] from irq1::@10 - [66] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 - to:irq1::@6 -irq1::@4: scope:[irq1] from irq1::@9 - [67] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 - [68] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos - to:irq1::@6 -irq1::@3: scope:[irq1] from irq1::@2 - [69] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) - [70] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$12 - [71] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 - [72] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 - to:irq1::@6 + [86] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 + [87] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos + to:irq1::@7 +irq1::@4: scope:[irq1] from irq1::@2 + [88] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← *((const byte*) SINUS + (byte) irq1::wobblepos#10) + [89] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 + [90] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 + to:irq1::@7 (void()) main() main: scope:[main] from __start::@1 - [73] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 - [74] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 - [75] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (byte) $40 - [76] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (byte) $40 - [77] call memset - to:main::@6 -main::@6: scope:[main] from main + [91] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 + [92] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 + [93] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (byte) $40 + [94] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (byte) $40 asm { lda#0 } - [79] call *((const void()*) songInit) + [96] call *((const void()*) songInit) + [97] call memset to:main::@1 -main::@1: scope:[main] from main::@2 main::@6 - [80] (byte) main::i1#2 ← phi( main::@2/(byte) main::i1#1 main::@6/(byte) 0 ) - [81] if((byte) main::i1#2<(byte) $bc*(const byte) SIZEOF_BYTE) goto main::@2 +main::@1: scope:[main] from main main::@2 + [98] (byte) main::i1#2 ← phi( main/(byte) 0 main::@2/(byte) main::i1#1 ) + [99] if((byte) main::i1#2<(byte) $bc*(const byte) SIZEOF_BYTE) goto main::@2 to:main::@3 -main::@3: scope:[main] from main::@1 main::@3 - [82] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 ) - [83] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) - [84] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) - [85] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) - [86] (byte) main::i#1 ← ++ (byte) main::i#2 - [87] if((byte) main::i#1!=(byte) 0) goto main::@3 - to:main::@4 -main::@4: scope:[main] from main::@3 +main::@3: scope:[main] from main::@1 main::@4 + [100] (byte) main::i2#2 ← phi( main::@1/(byte) 0 main::@4/(byte) main::i2#1 ) + [101] if((byte) main::i2#2<(byte) $28) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@3 main::@5 + [102] (byte) main::i#2 ← phi( main::@3/(byte) 0 main::@5/(byte) main::i#1 ) + [103] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) + [104] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) + [105] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) + [106] (byte) main::i#1 ← ++ (byte) main::i#2 + [107] if((byte) main::i#1!=(byte) 0) goto main::@5 + to:main::@6 +main::@6: scope:[main] from main::@5 asm { sei } - [89] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR - [90] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 - [91] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f - [92] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER - [93] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() - [94] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK - [95] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [96] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 + [109] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [110] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 + [111] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f + [112] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER + [113] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() + [114] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK + [115] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO + [116] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 asm { cli } - to:main::@5 -main::@5: scope:[main] from main::@4 main::@5 - [98] phi() - to:main::@5 + to:main::@7 +main::@7: scope:[main] from main::@6 main::@7 + [118] phi() + to:main::@7 +main::@4: scope:[main] from main::@3 + [119] *((const nomodify byte*) SCREEN+(const nomodify byte) SCROLL_Y*(byte) $28 + (byte) main::i2#2) ← (byte) 'a' + [120] *((const nomodify byte*) SCREEN+(const nomodify byte) GREET_Y*(byte) $28 + (byte) main::i2#2) ← (byte) 'b' + [121] (byte) main::i2#1 ← ++ (byte) main::i2#2 + to:main::@3 main::@2: scope:[main] from main::@1 - [99] *((const nomodify byte*) SCREEN+(byte)(number) 3*(number) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) - [100] (byte) main::i1#1 ← ++ (byte) main::i1#2 + [122] *((const nomodify byte*) SCREEN+(const nomodify byte) LOGO_Y*(byte) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) + [123] (byte) main::i1#1 ← ++ (byte) main::i1#2 to:main::@1 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from main - [101] phi() + [124] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [102] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [103] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 + [125] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) + [126] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [104] return + [127] return to:@return memset::@2: scope:[memset] from memset::@1 - [105] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [128] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [129] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@1 @@ -1753,11 +1987,10 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6581_SID::POT_Y (byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) __start() -(volatile byte) greetnm loadstore 1.3529411764705883 +(volatile byte) greetnm loadstore 1.3939393939393938 interrupt(HARDWARE_STACK)(void()) irq1() -(byte~) irq1::$12 22.0 -(byte~) irq1::$22 22.0 (byte~) irq1::$23 22.0 +(byte~) irq1::$24 22.0 (byte~) irq1::$7 22.0 (byte) irq1::barcnt (byte) irq1::barcnt#1 22.0 @@ -1774,15 +2007,25 @@ interrupt(HARDWARE_STACK)(void()) irq1() (byte) irq1::barsin#2 2.1875 (byte) irq1::col (byte) irq1::col#0 16.5 +(byte) irq1::col1 +(byte) irq1::col1#0 16.5 +(byte) irq1::col1#1 12.833333333333334 +(byte) irq1::colsin +(byte) irq1::colsin#0 4.0 +(byte) irq1::colsin#1 11.0 +(byte) irq1::colsin#2 3.833333333333333 (byte) irq1::i -(byte) irq1::i#1 202.0 -(byte) irq1::i#2 60.599999999999994 +(byte) irq1::i#1 22.0 +(byte) irq1::i#2 9.307692307692307 (byte) irq1::i1 (byte) irq1::i1#1 202.0 (byte) irq1::i1#2 60.599999999999994 (byte) irq1::i2 -(byte) irq1::i2#1 22.0 -(byte) irq1::i2#2 11.0 +(byte) irq1::i2#1 202.0 +(byte) irq1::i2#2 60.599999999999994 +(byte) irq1::i3 +(byte) irq1::i3#1 22.0 +(byte) irq1::i3#2 11.0 (byte) irq1::idx (byte) irq1::idx#0 11.0 (byte) irq1::idx#1 67.33333333333333 @@ -1794,13 +2037,13 @@ interrupt(HARDWARE_STACK)(void()) irq1() (byte) irq1::l#2 14.666666666666666 (byte) irq1::line (byte) irq1::line#1 22.0 -(byte) irq1::line#10 3.142857142857143 +(byte) irq1::line#10 3.259259259259259 (byte) irq1::raster (byte) irq1::raster#0 56.0 (byte) irq1::wobblepos (byte) irq1::wobblepos#0 4.0 (byte) irq1::wobblepos#1 11.0 -(byte) irq1::wobblepos#10 4.391304347826087 +(byte) irq1::wobblepos#10 4.590909090909091 (byte) irq1::wobblepos#7 22.0 (byte) irq1::zoomval (byte) irq1::zoomval#0 11.0 @@ -1811,6 +2054,9 @@ interrupt(HARDWARE_STACK)(void()) irq1() (byte) main::i1 (byte) main::i1#1 202.0 (byte) main::i1#2 168.33333333333331 +(byte) main::i2 +(byte) main::i2#1 202.0 +(byte) main::i2#2 126.25 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst @@ -1820,84 +2066,96 @@ interrupt(HARDWARE_STACK)(void()) irq1() (word) memset::num (void*) memset::return (void*) memset::str -(volatile byte) sinpos loadstore 0.2564102564102564 -(volatile byte) xpos loadstore 0.3823529411764706 -(volatile byte) zoomx loadstore 1.3529411764705883 +(volatile byte) sinpos loadstore 0.2181818181818182 +(volatile byte) xpos loadstore 0.3939393939393939 +(volatile byte) zoomx loadstore 1.3939393939393938 Initial phi equivalence classes [ irq1::line#10 irq1::line#1 ] [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] +[ irq1::i#2 irq1::i#1 ] +[ irq1::colsin#2 irq1::colsin#1 irq1::colsin#0 ] [ irq1::l#2 irq1::l#1 ] [ irq1::barcnt#2 irq1::barcnt#1 ] [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] -[ irq1::i2#2 irq1::i2#1 ] -[ irq1::i#2 irq1::i#1 ] +[ irq1::i3#2 irq1::i3#1 ] [ irq1::i1#2 irq1::i1#1 ] +[ irq1::i2#2 irq1::i2#1 ] [ irq1::barcol#4 irq1::barcol#3 irq1::barcol#0 irq1::barcol#1 irq1::barcol#2 ] [ irq1::idx#4 irq1::idx#3 irq1::idx#0 irq1::idx#1 irq1::idx#2 ] [ main::i1#2 main::i1#1 ] +[ main::i2#2 main::i2#1 ] [ main::i#2 main::i#1 ] [ memset::dst#2 memset::dst#1 ] Added variable sinpos to live range equivalence class [ sinpos ] Added variable zoomx to live range equivalence class [ zoomx ] Added variable xpos to live range equivalence class [ xpos ] Added variable greetnm to live range equivalence class [ greetnm ] -Added variable irq1::$22 to live range equivalence class [ irq1::$22 ] Added variable irq1::$23 to live range equivalence class [ irq1::$23 ] +Added variable irq1::$24 to live range equivalence class [ irq1::$24 ] +Added variable irq1::col1#0 to live range equivalence class [ irq1::col1#0 ] +Added variable irq1::col1#1 to live range equivalence class [ irq1::col1#1 ] Added variable irq1::col#0 to live range equivalence class [ irq1::col#0 ] Added variable irq1::zoomval#0 to live range equivalence class [ irq1::zoomval#0 ] Added variable irq1::$7 to live range equivalence class [ irq1::$7 ] Added variable irq1::raster#0 to live range equivalence class [ irq1::raster#0 ] -Added variable irq1::$12 to live range equivalence class [ irq1::$12 ] Complete equivalence classes [ irq1::line#10 irq1::line#1 ] [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] +[ irq1::i#2 irq1::i#1 ] +[ irq1::colsin#2 irq1::colsin#1 irq1::colsin#0 ] [ irq1::l#2 irq1::l#1 ] [ irq1::barcnt#2 irq1::barcnt#1 ] [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] -[ irq1::i2#2 irq1::i2#1 ] -[ irq1::i#2 irq1::i#1 ] +[ irq1::i3#2 irq1::i3#1 ] [ irq1::i1#2 irq1::i1#1 ] +[ irq1::i2#2 irq1::i2#1 ] [ irq1::barcol#4 irq1::barcol#3 irq1::barcol#0 irq1::barcol#1 irq1::barcol#2 ] [ irq1::idx#4 irq1::idx#3 irq1::idx#0 irq1::idx#1 irq1::idx#2 ] [ main::i1#2 main::i1#1 ] +[ main::i2#2 main::i2#1 ] [ main::i#2 main::i#1 ] [ memset::dst#2 memset::dst#1 ] [ sinpos ] [ zoomx ] [ xpos ] [ greetnm ] -[ irq1::$22 ] [ irq1::$23 ] +[ irq1::$24 ] +[ irq1::col1#0 ] +[ irq1::col1#1 ] [ irq1::col#0 ] [ irq1::zoomval#0 ] [ irq1::$7 ] [ irq1::raster#0 ] -[ irq1::$12 ] Allocated zp[1]:2 [ irq1::line#10 irq1::line#1 ] Allocated zp[1]:3 [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] -Allocated zp[1]:4 [ irq1::l#2 irq1::l#1 ] -Allocated zp[1]:5 [ irq1::barcnt#2 irq1::barcnt#1 ] -Allocated zp[1]:6 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] -Allocated zp[1]:7 [ irq1::i2#2 irq1::i2#1 ] -Allocated zp[1]:8 [ irq1::i#2 irq1::i#1 ] -Allocated zp[1]:9 [ irq1::i1#2 irq1::i1#1 ] -Allocated zp[1]:10 [ irq1::barcol#4 irq1::barcol#3 irq1::barcol#0 irq1::barcol#1 irq1::barcol#2 ] -Allocated zp[1]:11 [ irq1::idx#4 irq1::idx#3 irq1::idx#0 irq1::idx#1 irq1::idx#2 ] -Allocated zp[1]:12 [ main::i1#2 main::i1#1 ] -Allocated zp[1]:13 [ main::i#2 main::i#1 ] -Allocated zp[2]:14 [ memset::dst#2 memset::dst#1 ] -Allocated zp[1]:16 [ sinpos ] -Allocated zp[1]:17 [ zoomx ] -Allocated zp[1]:18 [ xpos ] -Allocated zp[1]:19 [ greetnm ] -Allocated zp[1]:20 [ irq1::$22 ] -Allocated zp[1]:21 [ irq1::$23 ] -Allocated zp[1]:22 [ irq1::col#0 ] -Allocated zp[1]:23 [ irq1::zoomval#0 ] -Allocated zp[1]:24 [ irq1::$7 ] -Allocated zp[1]:25 [ irq1::raster#0 ] -Allocated zp[1]:26 [ irq1::$12 ] +Allocated zp[1]:4 [ irq1::i#2 irq1::i#1 ] +Allocated zp[1]:5 [ irq1::colsin#2 irq1::colsin#1 irq1::colsin#0 ] +Allocated zp[1]:6 [ irq1::l#2 irq1::l#1 ] +Allocated zp[1]:7 [ irq1::barcnt#2 irq1::barcnt#1 ] +Allocated zp[1]:8 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] +Allocated zp[1]:9 [ irq1::i3#2 irq1::i3#1 ] +Allocated zp[1]:10 [ irq1::i1#2 irq1::i1#1 ] +Allocated zp[1]:11 [ irq1::i2#2 irq1::i2#1 ] +Allocated zp[1]:12 [ irq1::barcol#4 irq1::barcol#3 irq1::barcol#0 irq1::barcol#1 irq1::barcol#2 ] +Allocated zp[1]:13 [ irq1::idx#4 irq1::idx#3 irq1::idx#0 irq1::idx#1 irq1::idx#2 ] +Allocated zp[1]:14 [ main::i1#2 main::i1#1 ] +Allocated zp[1]:15 [ main::i2#2 main::i2#1 ] +Allocated zp[1]:16 [ main::i#2 main::i#1 ] +Allocated zp[2]:17 [ memset::dst#2 memset::dst#1 ] +Allocated zp[1]:19 [ sinpos ] +Allocated zp[1]:20 [ zoomx ] +Allocated zp[1]:21 [ xpos ] +Allocated zp[1]:22 [ greetnm ] +Allocated zp[1]:23 [ irq1::$23 ] +Allocated zp[1]:24 [ irq1::$24 ] +Allocated zp[1]:25 [ irq1::col1#0 ] +Allocated zp[1]:26 [ irq1::col1#1 ] +Allocated zp[1]:27 [ irq1::col#0 ] +Allocated zp[1]:28 [ irq1::zoomval#0 ] +Allocated zp[1]:29 [ irq1::$7 ] +Allocated zp[1]:30 [ irq1::raster#0 ] INITIAL ASM Target platform is mega65_c64 / MEGA45GS02 @@ -1928,10 +2186,16 @@ Target platform is mega65_c64 / MEGA45GS02 .const PROCPORT_DDR_MEMORY_MASK = 7 // RAM in 0xA000, 0xE000 I/O in 0xD000 .const PROCPORT_RAM_IO = 5 + // Logo y-position (char row on screen) + .const LOGO_Y = 3 + // Scroll y-position (char row on screen) + .const SCROLL_Y = $d + // Greeting y-position (char row on screen) + .const GREET_Y = $14 // The number of greetings .const GREETCOUNT = $10 // The number of raster lines - .const NUMBERL = $e0 + .const NUMBERL = $d8 .const OFFSET_STRUCT_MOS4569_VICIII_KEY = $2f .const OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = $31 .const OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = $54 @@ -1945,6 +2209,8 @@ Target platform is mega65_c64 / MEGA45GS02 .const OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = $16 .const OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = $20 .const OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR = $21 + .const OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = $20 + .const OFFSET_STRUCT_MOS6569_VICII_BG_COLOR = $21 .const OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO = $4c .const OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = $5a .const SIZEOF_BYTE = 1 @@ -1958,6 +2224,8 @@ Target platform is mega65_c64 / MEGA45GS02 .label VICIII = $d000 // The VIC IV .label VICIV = $d000 + // Color Ram + .label COLORRAM = $d800 // Palette RED .label PALETTE_RED = $d100 // Palette GREEN @@ -1974,13 +2242,13 @@ Target platform is mega65_c64 / MEGA45GS02 // Pointer to the song play routine .label songPlay = SONG+3 // Sinus Position - .label sinpos = $10 + .label sinpos = $13 // Zoom Position - .label zoomx = $11 + .label zoomx = $14 // soft scroll position of text scrolly (0-7) - .label xpos = $12 + .label xpos = $15 // The greeting currently being shown - .label greetnm = $13 + .label greetnm = $16 .segment Code // __start __start: { @@ -2019,23 +2287,26 @@ irq1: { .const scrollypos = $66 // size of raster behind scrolly .const blackbar = $13 - .label __7 = $18 - .label __12 = $1a - .label __22 = $14 - .label __23 = $15 + .label __7 = $1d + .label __23 = $17 + .label __24 = $18 .label wobblepos = 3 - .label col = $16 - .label zoomval = $17 - .label raster = $19 + .label col = $1b + .label colsin = 5 + .label zoomval = $1c + .label raster = $1e .label line = 2 - .label l = 4 - .label barsin = 6 - .label idx = $b - .label barcol = $a - .label i = 8 - .label i1 = 9 - .label barcnt = 5 - .label i2 = 7 + .label col1 = $19 + .label col1_1 = $1a + .label i = 4 + .label l = 6 + .label barsin = 8 + .label idx = $d + .label barcol = $c + .label i1 = $a + .label i2 = $b + .label barcnt = 7 + .label i3 = 9 // entry interrupt(HARDWARE_STACK) pha txa @@ -2074,476 +2345,591 @@ irq1: { lda #NUMBERL cmp.z line bne __b2 - // [15] phi from irq1::@1 to irq1::@15 [phi:irq1::@1->irq1::@15] - __b15_from___b1: - // [15] phi (byte) irq1::l#2 = (byte) 0 [phi:irq1::@1->irq1::@15#0] -- vbuz1=vbuc1 - lda #0 - sta.z l - jmp __b15 - // Set all raster bars to black - // irq1::@15 - __b15: - // [16] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@16 -- vbuz1_neq_vbuc1_then_la1 - lda #NUMBERL - cmp.z l - bne __b16 - jmp __b17 - // irq1::@17 - __b17: + jmp __b3 + // irq1::@3 + __b3: + // [15] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (byte) $88 -- _deref_pbuc1=vbuc2 + // Show start of calculation + lda #$88 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR + // [16] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (byte) $88 -- _deref_pbuc1=vbuc2 + lda #$88 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR // [17] call *((const void()*) songPlay) // play music jsr songPlay - // [18] (byte) irq1::barsin#0 ← (volatile byte) sinpos -- vbuz1=vbuz2 + // [18] (byte) irq1::colsin#0 ← (volatile byte) sinpos -- vbuz1=vbuz2 + // Set up colors behind logo, scroll and greets + lda.z sinpos + sta.z colsin + // [19] phi from irq1::@3 to irq1::@16 [phi:irq1::@3->irq1::@16] + __b16_from___b3: + // [19] phi (byte) irq1::colsin#2 = (byte) irq1::colsin#0 [phi:irq1::@3->irq1::@16#0] -- register_copy + // [19] phi (byte) irq1::i#2 = (byte) 0 [phi:irq1::@3->irq1::@16#1] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp __b16 + // irq1::@16 + __b16: + // [20] if((byte) irq1::i#2<(byte) $28) goto irq1::@17 -- vbuz1_lt_vbuc1_then_la1 + lda.z i + cmp #$28 + bcc __b17 + // [21] phi from irq1::@16 to irq1::@18 [phi:irq1::@16->irq1::@18] + __b18_from___b16: + // [21] phi (byte) irq1::l#2 = (byte) 0 [phi:irq1::@16->irq1::@18#0] -- vbuz1=vbuc1 + lda #0 + sta.z l + jmp __b18 + // Set all raster bars to black + // irq1::@18 + __b18: + // [22] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@19 -- vbuz1_neq_vbuc1_then_la1 + lda #NUMBERL + cmp.z l + bne __b19 + jmp __b20 + // irq1::@20 + __b20: + // [23] (byte) irq1::barsin#0 ← (volatile byte) sinpos -- vbuz1=vbuz2 // Big block of bars (16) lda.z sinpos sta.z barsin - // [19] phi from irq1::@17 to irq1::@18 [phi:irq1::@17->irq1::@18] - __b18_from___b17: - // [19] phi (byte) irq1::barsin#2 = (byte) irq1::barsin#0 [phi:irq1::@17->irq1::@18#0] -- register_copy - // [19] phi (byte) irq1::barcnt#2 = (byte) 0 [phi:irq1::@17->irq1::@18#1] -- vbuz1=vbuc1 + // [24] phi from irq1::@20 to irq1::@21 [phi:irq1::@20->irq1::@21] + __b21_from___b20: + // [24] phi (byte) irq1::barsin#2 = (byte) irq1::barsin#0 [phi:irq1::@20->irq1::@21#0] -- register_copy + // [24] phi (byte) irq1::barcnt#2 = (byte) 0 [phi:irq1::@20->irq1::@21#1] -- vbuz1=vbuc1 lda #0 sta.z barcnt - jmp __b18 - // irq1::@18 - __b18: - // [20] if((byte) irq1::barcnt#2<(byte) $10) goto irq1::@19 -- vbuz1_lt_vbuc1_then_la1 + jmp __b21 + // irq1::@21 + __b21: + // [25] if((byte) irq1::barcnt#2<(byte) $10) goto irq1::@22 -- vbuz1_lt_vbuc1_then_la1 lda.z barcnt cmp #$10 - bcc __b19 - // [21] phi from irq1::@18 to irq1::@25 [phi:irq1::@18->irq1::@25] - __b25_from___b18: - // [21] phi (byte) irq1::i2#2 = (byte) 0 [phi:irq1::@18->irq1::@25#0] -- vbuz1=vbuc1 + bcc __b22 + // [26] phi from irq1::@21 to irq1::@28 [phi:irq1::@21->irq1::@28] + __b28_from___b21: + // [26] phi (byte) irq1::i3#2 = (byte) 0 [phi:irq1::@21->irq1::@28#0] -- vbuz1=vbuc1 lda #0 - sta.z i2 - jmp __b25 + sta.z i3 + jmp __b28 // Produce dark area behind text - // irq1::@25 - __b25: - // [22] if((byte) irq1::i2#2<(byte) $13) goto irq1::@26 -- vbuz1_lt_vbuc1_then_la1 - lda.z i2 + // irq1::@28 + __b28: + // [27] if((byte) irq1::i3#2<(byte) $13) goto irq1::@29 -- vbuz1_lt_vbuc1_then_la1 + lda.z i3 cmp #$13 - bcc __b26 + bcc __b29 + jmp __b30 + // irq1::@30 + __b30: + // [28] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // Show end of calculation + lda #0 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR + // [29] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + lda #0 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR jmp __breturn // irq1::@return __breturn: - // [23] return - exit interrupt(HARDWARE_STACK) + // [30] return - exit interrupt(HARDWARE_STACK) pla tay pla tax pla rti - // irq1::@26 - __b26: - // [24] (byte~) irq1::$22 ← *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i2#2) >> (byte) 1 -- vbuz1=pbuc1_derefidx_vbuz2_ror_1 - ldy.z i2 + // irq1::@29 + __b29: + // [31] (byte~) irq1::$23 ← *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i3#2) >> (byte) 1 -- vbuz1=pbuc1_derefidx_vbuz2_ror_1 + ldy.z i3 lda rasters+scrollypos,y lsr - sta.z __22 - // [25] (byte~) irq1::$23 ← (byte~) irq1::$22 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 - lda #7 - and.z __22 sta.z __23 - // [26] *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i2#2) ← (byte~) irq1::$23 -- pbuc1_derefidx_vbuz1=vbuz2 - lda.z __23 - ldy.z i2 + // [32] (byte~) irq1::$24 ← (byte~) irq1::$23 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + lda #7 + and.z __23 + sta.z __24 + // [33] *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i3#2) ← (byte~) irq1::$24 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z __24 + ldy.z i3 sta rasters+scrollypos,y - // [27] (byte) irq1::i2#1 ← ++ (byte) irq1::i2#2 -- vbuz1=_inc_vbuz1 - inc.z i2 - // [21] phi from irq1::@26 to irq1::@25 [phi:irq1::@26->irq1::@25] - __b25_from___b26: - // [21] phi (byte) irq1::i2#2 = (byte) irq1::i2#1 [phi:irq1::@26->irq1::@25#0] -- register_copy - jmp __b25 - // irq1::@19 - __b19: - // [28] (byte) irq1::idx#0 ← *((const byte*) SINUS + (byte) irq1::barsin#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [34] (byte) irq1::i3#1 ← ++ (byte) irq1::i3#2 -- vbuz1=_inc_vbuz1 + inc.z i3 + // [26] phi from irq1::@29 to irq1::@28 [phi:irq1::@29->irq1::@28] + __b28_from___b29: + // [26] phi (byte) irq1::i3#2 = (byte) irq1::i3#1 [phi:irq1::@29->irq1::@28#0] -- register_copy + jmp __b28 + // irq1::@22 + __b22: + // [35] (byte) irq1::idx#0 ← *((const byte*) SINUS + (byte) irq1::barsin#2) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z barsin lda SINUS,y sta.z idx - // [29] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 << (byte) 4 -- vbuz1=vbuz2_rol_4 + // [36] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 << (byte) 4 -- vbuz1=vbuz2_rol_4 lda.z barcnt asl asl asl asl sta.z barcol - // [30] phi from irq1::@19 to irq1::@20 [phi:irq1::@19->irq1::@20] - __b20_from___b19: - // [30] phi (byte) irq1::idx#3 = (byte) irq1::idx#0 [phi:irq1::@19->irq1::@20#0] -- register_copy - // [30] phi (byte) irq1::barcol#3 = (byte) irq1::barcol#0 [phi:irq1::@19->irq1::@20#1] -- register_copy - // [30] phi (byte) irq1::i#2 = (byte) 0 [phi:irq1::@19->irq1::@20#2] -- vbuz1=vbuc1 - lda #0 - sta.z i - jmp __b20 - // irq1::@20 - __b20: - // [31] if((byte) irq1::i#2<(byte) $10) goto irq1::@21 -- vbuz1_lt_vbuc1_then_la1 - lda.z i - cmp #$10 - bcc __b21 - // [32] phi from irq1::@20 to irq1::@22 [phi:irq1::@20->irq1::@22] - __b22_from___b20: - // [32] phi (byte) irq1::idx#4 = (byte) irq1::idx#3 [phi:irq1::@20->irq1::@22#0] -- register_copy - // [32] phi (byte) irq1::barcol#4 = (byte) irq1::barcol#3 [phi:irq1::@20->irq1::@22#1] -- register_copy - // [32] phi (byte) irq1::i1#2 = (byte) 0 [phi:irq1::@20->irq1::@22#2] -- vbuz1=vbuc1 + // [37] phi from irq1::@22 to irq1::@23 [phi:irq1::@22->irq1::@23] + __b23_from___b22: + // [37] phi (byte) irq1::idx#3 = (byte) irq1::idx#0 [phi:irq1::@22->irq1::@23#0] -- register_copy + // [37] phi (byte) irq1::barcol#3 = (byte) irq1::barcol#0 [phi:irq1::@22->irq1::@23#1] -- register_copy + // [37] phi (byte) irq1::i1#2 = (byte) 0 [phi:irq1::@22->irq1::@23#2] -- vbuz1=vbuc1 lda #0 sta.z i1 - jmp __b22 - // irq1::@22 - __b22: - // [33] if((byte) irq1::i1#2<(byte) $f) goto irq1::@23 -- vbuz1_lt_vbuc1_then_la1 + jmp __b23 + // irq1::@23 + __b23: + // [38] if((byte) irq1::i1#2<(byte) $10) goto irq1::@24 -- vbuz1_lt_vbuc1_then_la1 lda.z i1 + cmp #$10 + bcc __b24 + // [39] phi from irq1::@23 to irq1::@25 [phi:irq1::@23->irq1::@25] + __b25_from___b23: + // [39] phi (byte) irq1::idx#4 = (byte) irq1::idx#3 [phi:irq1::@23->irq1::@25#0] -- register_copy + // [39] phi (byte) irq1::barcol#4 = (byte) irq1::barcol#3 [phi:irq1::@23->irq1::@25#1] -- register_copy + // [39] phi (byte) irq1::i2#2 = (byte) 0 [phi:irq1::@23->irq1::@25#2] -- vbuz1=vbuc1 + lda #0 + sta.z i2 + jmp __b25 + // irq1::@25 + __b25: + // [40] if((byte) irq1::i2#2<(byte) $f) goto irq1::@26 -- vbuz1_lt_vbuc1_then_la1 + lda.z i2 cmp #$f - bcc __b23 - jmp __b24 - // irq1::@24 - __b24: - // [34] (byte) irq1::barsin#1 ← (byte) irq1::barsin#2 + (byte) $a -- vbuz1=vbuz1_plus_vbuc1 + bcc __b26 + jmp __b27 + // irq1::@27 + __b27: + // [41] (byte) irq1::barsin#1 ← (byte) irq1::barsin#2 + (byte) $a -- vbuz1=vbuz1_plus_vbuc1 lda #$a clc adc.z barsin sta.z barsin - // [35] (byte) irq1::barcnt#1 ← ++ (byte) irq1::barcnt#2 -- vbuz1=_inc_vbuz1 + // [42] (byte) irq1::barcnt#1 ← ++ (byte) irq1::barcnt#2 -- vbuz1=_inc_vbuz1 inc.z barcnt - // [19] phi from irq1::@24 to irq1::@18 [phi:irq1::@24->irq1::@18] - __b18_from___b24: - // [19] phi (byte) irq1::barsin#2 = (byte) irq1::barsin#1 [phi:irq1::@24->irq1::@18#0] -- register_copy - // [19] phi (byte) irq1::barcnt#2 = (byte) irq1::barcnt#1 [phi:irq1::@24->irq1::@18#1] -- register_copy - jmp __b18 - // irq1::@23 - __b23: - // [36] (byte) irq1::barcol#2 ← -- (byte) irq1::barcol#4 -- vbuz1=_dec_vbuz1 + // [24] phi from irq1::@27 to irq1::@21 [phi:irq1::@27->irq1::@21] + __b21_from___b27: + // [24] phi (byte) irq1::barsin#2 = (byte) irq1::barsin#1 [phi:irq1::@27->irq1::@21#0] -- register_copy + // [24] phi (byte) irq1::barcnt#2 = (byte) irq1::barcnt#1 [phi:irq1::@27->irq1::@21#1] -- register_copy + jmp __b21 + // irq1::@26 + __b26: + // [43] (byte) irq1::barcol#2 ← -- (byte) irq1::barcol#4 -- vbuz1=_dec_vbuz1 dec.z barcol - // [37] *((const byte*) rasters + (byte) irq1::idx#4) ← (byte) irq1::barcol#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [44] *((const byte*) rasters + (byte) irq1::idx#4) ← (byte) irq1::barcol#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z barcol ldy.z idx sta rasters,y - // [38] (byte) irq1::idx#2 ← ++ (byte) irq1::idx#4 -- vbuz1=_inc_vbuz1 + // [45] (byte) irq1::idx#2 ← ++ (byte) irq1::idx#4 -- vbuz1=_inc_vbuz1 inc.z idx - // [39] (byte) irq1::i1#1 ← ++ (byte) irq1::i1#2 -- vbuz1=_inc_vbuz1 - inc.z i1 - // [32] phi from irq1::@23 to irq1::@22 [phi:irq1::@23->irq1::@22] - __b22_from___b23: - // [32] phi (byte) irq1::idx#4 = (byte) irq1::idx#2 [phi:irq1::@23->irq1::@22#0] -- register_copy - // [32] phi (byte) irq1::barcol#4 = (byte) irq1::barcol#2 [phi:irq1::@23->irq1::@22#1] -- register_copy - // [32] phi (byte) irq1::i1#2 = (byte) irq1::i1#1 [phi:irq1::@23->irq1::@22#2] -- register_copy - jmp __b22 - // irq1::@21 - __b21: - // [40] *((const byte*) rasters + (byte) irq1::idx#3) ← (byte) irq1::barcol#3 -- pbuc1_derefidx_vbuz1=vbuz2 + // [46] (byte) irq1::i2#1 ← ++ (byte) irq1::i2#2 -- vbuz1=_inc_vbuz1 + inc.z i2 + // [39] phi from irq1::@26 to irq1::@25 [phi:irq1::@26->irq1::@25] + __b25_from___b26: + // [39] phi (byte) irq1::idx#4 = (byte) irq1::idx#2 [phi:irq1::@26->irq1::@25#0] -- register_copy + // [39] phi (byte) irq1::barcol#4 = (byte) irq1::barcol#2 [phi:irq1::@26->irq1::@25#1] -- register_copy + // [39] phi (byte) irq1::i2#2 = (byte) irq1::i2#1 [phi:irq1::@26->irq1::@25#2] -- register_copy + jmp __b25 + // irq1::@24 + __b24: + // [47] *((const byte*) rasters + (byte) irq1::idx#3) ← (byte) irq1::barcol#3 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z barcol ldy.z idx sta rasters,y - // [41] (byte) irq1::idx#1 ← ++ (byte) irq1::idx#3 -- vbuz1=_inc_vbuz1 + // [48] (byte) irq1::idx#1 ← ++ (byte) irq1::idx#3 -- vbuz1=_inc_vbuz1 inc.z idx - // [42] (byte) irq1::barcol#1 ← ++ (byte) irq1::barcol#3 -- vbuz1=_inc_vbuz1 + // [49] (byte) irq1::barcol#1 ← ++ (byte) irq1::barcol#3 -- vbuz1=_inc_vbuz1 inc.z barcol - // [43] (byte) irq1::i#1 ← ++ (byte) irq1::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [30] phi from irq1::@21 to irq1::@20 [phi:irq1::@21->irq1::@20] - __b20_from___b21: - // [30] phi (byte) irq1::idx#3 = (byte) irq1::idx#1 [phi:irq1::@21->irq1::@20#0] -- register_copy - // [30] phi (byte) irq1::barcol#3 = (byte) irq1::barcol#1 [phi:irq1::@21->irq1::@20#1] -- register_copy - // [30] phi (byte) irq1::i#2 = (byte) irq1::i#1 [phi:irq1::@21->irq1::@20#2] -- register_copy - jmp __b20 - // irq1::@16 - __b16: - // [44] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // [50] (byte) irq1::i1#1 ← ++ (byte) irq1::i1#2 -- vbuz1=_inc_vbuz1 + inc.z i1 + // [37] phi from irq1::@24 to irq1::@23 [phi:irq1::@24->irq1::@23] + __b23_from___b24: + // [37] phi (byte) irq1::idx#3 = (byte) irq1::idx#1 [phi:irq1::@24->irq1::@23#0] -- register_copy + // [37] phi (byte) irq1::barcol#3 = (byte) irq1::barcol#1 [phi:irq1::@24->irq1::@23#1] -- register_copy + // [37] phi (byte) irq1::i1#2 = (byte) irq1::i1#1 [phi:irq1::@24->irq1::@23#2] -- register_copy + jmp __b23 + // irq1::@19 + __b19: + // [51] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 lda #0 ldy.z l sta rasters,y - // [45] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 -- vbuz1=_inc_vbuz1 + // [52] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 -- vbuz1=_inc_vbuz1 inc.z l - // [15] phi from irq1::@16 to irq1::@15 [phi:irq1::@16->irq1::@15] - __b15_from___b16: - // [15] phi (byte) irq1::l#2 = (byte) irq1::l#1 [phi:irq1::@16->irq1::@15#0] -- register_copy - jmp __b15 + // [21] phi from irq1::@19 to irq1::@18 [phi:irq1::@19->irq1::@18] + __b18_from___b19: + // [21] phi (byte) irq1::l#2 = (byte) irq1::l#1 [phi:irq1::@19->irq1::@18#0] -- register_copy + jmp __b18 + // irq1::@17 + __b17: + // [53] (byte) irq1::col1#0 ← *((const byte*) SINUS + (byte) irq1::colsin#2) >> (byte) 2 -- vbuz1=pbuc1_derefidx_vbuz2_ror_2 + ldy.z colsin + lda SINUS,y + lsr + lsr + sta.z col1 + // [54] *((const nomodify byte*) COLORRAM+(const nomodify byte) GREET_Y*(byte) $28 + (byte) irq1::i#2) ← (byte) irq1::col1#0 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z col1 + ldy.z i + sta COLORRAM+GREET_Y*$28,y + // [55] (byte) irq1::col1#1 ← (byte) irq1::col1#0 >> (byte) 1 -- vbuz1=vbuz2_ror_1 + // Logo colors + lda.z col1 + lsr + sta.z col1_1 + // [56] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28-(byte) 1 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z col1_1 + ldy.z i + sta COLORRAM+LOGO_Y*$28-1,y + // [57] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 1*(number) $28-(byte) 2 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z col1_1 + ldy.z i + sta COLORRAM+LOGO_Y*$28+1*$28-2,y + // [58] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 2*(number) $28-(byte) 3 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z col1_1 + ldy.z i + sta COLORRAM+LOGO_Y*$28+2*$28-3,y + // [59] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 3*(number) $28-(byte) 4 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z col1_1 + ldy.z i + sta COLORRAM+LOGO_Y*$28+3*$28-4,y + // [60] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 4*(number) $28-(byte) 5 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z col1_1 + ldy.z i + sta COLORRAM+LOGO_Y*$28+4*$28-5,y + // [61] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 5*(number) $28-(byte) 6 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuz1=vbuz2 + lda.z col1_1 + ldy.z i + sta COLORRAM+LOGO_Y*$28+5*$28-6,y + // [62] *((const nomodify byte*) COLORRAM+(const nomodify byte) SCROLL_Y*(byte) $28 + (byte) irq1::i#2) ← *((const byte*) PAL_GREEN + (byte) irq1::colsin#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2 + // Scroll colors + ldy.z colsin + lda PAL_GREEN,y + ldy.z i + sta COLORRAM+SCROLL_Y*$28,y + // [63] (byte) irq1::colsin#1 ← ++ (byte) irq1::colsin#2 -- vbuz1=_inc_vbuz1 + inc.z colsin + // [64] (byte) irq1::i#1 ← ++ (byte) irq1::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [19] phi from irq1::@17 to irq1::@16 [phi:irq1::@17->irq1::@16] + __b16_from___b17: + // [19] phi (byte) irq1::colsin#2 = (byte) irq1::colsin#1 [phi:irq1::@17->irq1::@16#0] -- register_copy + // [19] phi (byte) irq1::i#2 = (byte) irq1::i#1 [phi:irq1::@17->irq1::@16#1] -- register_copy + jmp __b16 // irq1::@2 __b2: - // [46] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) -- vbuz1=pbuc1_derefidx_vbuz2 + // [65] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z line lda rasters,y sta.z col - // [47] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuz1 + // [66] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuz1 lda.z col sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // [48] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuz1 + // [67] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuz1 lda.z col sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR - // [49] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@3 -- vbuz1_lt_vbuc1_then_la1 + // [68] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@4 -- vbuz1_lt_vbuc1_then_la1 lda.z line cmp #scrollypos - bcc __b3 - jmp __b9 - // irq1::@9 - __b9: - // [50] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@4 -- vbuz1_eq_vbuc1_then_la1 - lda #scrollypos - cmp.z line - beq __b4 + bcc __b4 jmp __b10 // irq1::@10 __b10: - // [51] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@5 -- vbuz1_eq_vbuc1_then_la1 - lda #scrollypos+blackbar + // [69] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@5 -- vbuz1_eq_vbuc1_then_la1 + lda #scrollypos cmp.z line beq __b5 jmp __b11 // irq1::@11 __b11: - // [52] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@6 -- vbuz1_neq_vbuc1_then_la1 - lda #scrollypos+blackbar+1 + // [70] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@6 -- vbuz1_eq_vbuc1_then_la1 + lda #scrollypos+blackbar cmp.z line - bne __b6_from___b11 + beq __b6 jmp __b12 // irq1::@12 __b12: - // [53] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) -- vbuz1=pbuc1_derefidx_vbuz2 + // [71] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@7 -- vbuz1_neq_vbuc1_then_la1 + lda #scrollypos+blackbar+1 + cmp.z line + bne __b7_from___b12 + jmp __b13 + // irq1::@13 + __b13: + // [72] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) -- vbuz1=pbuc1_derefidx_vbuz2 // if raster position > scrolly pos do zoom ldy.z zoomx lda SINUS,y sta.z zoomval - // [54] (volatile byte) zoomx ← ++ (volatile byte) zoomx -- vbuz1=_inc_vbuz1 + // [73] (volatile byte) zoomx ← ++ (volatile byte) zoomx -- vbuz1=_inc_vbuz1 inc.z zoomx - // [55] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 -- _deref_pbuc1=vbuz1 + // [74] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 -- _deref_pbuc1=vbuz1 lda.z zoomval sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL - // [56] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [75] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 lda.z zoomval inc sta.z __7 - // [57] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 -- _deref_pbuc1=vbuz1 + // [76] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 -- _deref_pbuc1=vbuz1 lda.z __7 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - // [58] if((volatile byte) zoomx!=(byte) 0) goto irq1::@6 -- vbuz1_neq_0_then_la1 + // [77] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 -- vbuz1_neq_0_then_la1 lda.z zoomx cmp #0 - bne __b6_from___b12 - jmp __b13 - // irq1::@13 - __b13: - // [59] (volatile byte) greetnm ← ++ (volatile byte) greetnm -- vbuz1=_inc_vbuz1 - inc.z greetnm - // [60] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@6 -- vbuz1_neq_vbuc1_then_la1 - lda #GREETCOUNT - cmp.z greetnm - bne __b6_from___b13 + bne __b7_from___b13 jmp __b14 // irq1::@14 __b14: - // [61] (volatile byte) greetnm ← (byte) 0 -- vbuz1=vbuc1 + // [78] (volatile byte) greetnm ← ++ (volatile byte) greetnm -- vbuz1=_inc_vbuz1 + inc.z greetnm + // [79] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 -- vbuz1_neq_vbuc1_then_la1 + lda #GREETCOUNT + cmp.z greetnm + bne __b7_from___b14 + jmp __b15 + // irq1::@15 + __b15: + // [80] (volatile byte) greetnm ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z greetnm - // [62] phi from irq1::@11 irq1::@12 irq1::@13 irq1::@14 irq1::@3 irq1::@4 irq1::@5 to irq1::@6 [phi:irq1::@11/irq1::@12/irq1::@13/irq1::@14/irq1::@3/irq1::@4/irq1::@5->irq1::@6] - __b6_from___b11: - __b6_from___b12: - __b6_from___b13: - __b6_from___b14: - __b6_from___b3: - __b6_from___b4: - __b6_from___b5: - // [62] phi (byte) irq1::wobblepos#7 = (byte) irq1::wobblepos#10 [phi:irq1::@11/irq1::@12/irq1::@13/irq1::@14/irq1::@3/irq1::@4/irq1::@5->irq1::@6#0] -- register_copy - jmp __b6 - // irq1::@6 - __b6: - // [63] (byte) irq1::raster#0 ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) -- vbuz1=_deref_pbuc1 - // Wait for the next raster line - lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER - sta.z raster + // [81] phi from irq1::@12 irq1::@13 irq1::@14 irq1::@15 irq1::@4 irq1::@5 irq1::@6 to irq1::@7 [phi:irq1::@12/irq1::@13/irq1::@14/irq1::@15/irq1::@4/irq1::@5/irq1::@6->irq1::@7] + __b7_from___b12: + __b7_from___b13: + __b7_from___b14: + __b7_from___b15: + __b7_from___b4: + __b7_from___b5: + __b7_from___b6: + // [81] phi (byte) irq1::wobblepos#7 = (byte) irq1::wobblepos#10 [phi:irq1::@12/irq1::@13/irq1::@14/irq1::@15/irq1::@4/irq1::@5/irq1::@6->irq1::@7#0] -- register_copy jmp __b7 // irq1::@7 __b7: - // [64] if((byte) irq1::raster#0==*((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq1::@7 -- vbuz1_eq__deref_pbuc1_then_la1 + // [82] (byte) irq1::raster#0 ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) -- vbuz1=_deref_pbuc1 + // Wait for the next raster line lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER - cmp.z raster - beq __b7 + sta.z raster jmp __b8 // irq1::@8 __b8: - // [65] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 -- vbuz1=_inc_vbuz1 + // [83] if((byte) irq1::raster#0==*((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq1::@8 -- vbuz1_eq__deref_pbuc1_then_la1 + lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER + cmp.z raster + beq __b8 + jmp __b9 + // irq1::@9 + __b9: + // [84] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 -- vbuz1=_inc_vbuz1 inc.z line - // [13] phi from irq1::@8 to irq1::@1 [phi:irq1::@8->irq1::@1] - __b1_from___b8: - // [13] phi (byte) irq1::wobblepos#10 = (byte) irq1::wobblepos#7 [phi:irq1::@8->irq1::@1#0] -- register_copy - // [13] phi (byte) irq1::line#10 = (byte) irq1::line#1 [phi:irq1::@8->irq1::@1#1] -- register_copy + // [13] phi from irq1::@9 to irq1::@1 [phi:irq1::@9->irq1::@1] + __b1_from___b9: + // [13] phi (byte) irq1::wobblepos#10 = (byte) irq1::wobblepos#7 [phi:irq1::@9->irq1::@1#0] -- register_copy + // [13] phi (byte) irq1::line#10 = (byte) irq1::line#1 [phi:irq1::@9->irq1::@1#1] -- register_copy jmp __b1 - // irq1::@5 - __b5: - // [66] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 + // irq1::@6 + __b6: + // [85] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 // if raster position > scrolly pos do nozoom // default value lda #$50 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - jmp __b6_from___b5 - // irq1::@4 - __b4: - // [67] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 + jmp __b7_from___b6 + // irq1::@5 + __b5: + // [86] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 // if raster position = scrolly pos do scrolly // no wobbling from this point lda #$50 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - // [68] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos -- _deref_pbuc1=vbuz1 + // [87] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos -- _deref_pbuc1=vbuz1 // set softscroll lda.z xpos sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2 - jmp __b6_from___b4 - // irq1::@3 - __b3: - // [69] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) -- vbuz1=vbuc1_plus_pbuc2_derefidx_vbuz2 - lda #$28 - ldy.z wobblepos - clc - adc SINUS,y - sta.z __12 - // [70] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$12 -- _deref_pbuc1=vbuz1 + jmp __b7_from___b5 + // irq1::@4 + __b4: + // [88] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← *((const byte*) SINUS + (byte) irq1::wobblepos#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 // if raster position < scrolly pos do wobble Logo! - lda.z __12 + ldy.z wobblepos + lda SINUS,y sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - // [71] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 -- vbuz1=_inc_vbuz1 + // [89] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 -- vbuz1=_inc_vbuz1 inc.z wobblepos - // [72] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 -- _deref_pbuc1=vbuc2 + // [90] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 -- _deref_pbuc1=vbuc2 // No zooming lda #$66 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL - jmp __b6_from___b3 + jmp __b7_from___b4 } // main main: { - .label i1 = $c + .label i1 = $e + .label i2 = $f // Set up 256 color palette - .label i = $d - // [73] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 -- _deref_pbuc1=vbuc2 + .label i = $10 + // [91] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 -- _deref_pbuc1=vbuc2 // Enable MEGA65 features lda #$47 sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY - // [74] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 -- _deref_pbuc1=vbuc2 + // [92] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 -- _deref_pbuc1=vbuc2 lda #$53 sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY - // [75] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (byte) $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 + // [93] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (byte) $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Enable 48MHz fast mode lda #$40 ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB - // [76] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (byte) $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 + // [94] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (byte) $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 lda #$40 ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC - // [77] call memset - // Clear screen - // [101] phi from main to memset [phi:main->memset] - memset_from_main: - jsr memset - jmp __b6 - // main::@6 - __b6: // asm { lda#0 } // Initialize music lda #0 - // [79] call *((const void()*) songInit) + // [96] call *((const void()*) songInit) jsr songInit - // [80] phi from main::@6 to main::@1 [phi:main::@6->main::@1] - __b1_from___b6: - // [80] phi (byte) main::i1#2 = (byte) 0 [phi:main::@6->main::@1#0] -- vbuz1=vbuc1 + // [97] call memset + // Clear screen + // [124] phi from main to memset [phi:main->memset] + memset_from_main: + jsr memset + // [98] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [98] phi (byte) main::i1#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i1 jmp __b1 // Put MEGA logo on screen // main::@1 __b1: - // [81] if((byte) main::i1#2<(byte) $bc*(const byte) SIZEOF_BYTE) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + // [99] if((byte) main::i1#2<(byte) $bc*(const byte) SIZEOF_BYTE) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z i1 cmp #$bc*SIZEOF_BYTE bcc __b2 - // [82] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [100] phi from main::@1 to main::@3 [phi:main::@1->main::@3] __b3_from___b1: - // [82] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 + // [100] phi (byte) main::i2#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 lda #0 - sta.z i - jmp __b3 - // [82] phi from main::@3 to main::@3 [phi:main::@3->main::@3] - __b3_from___b3: - // [82] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy + sta.z i2 jmp __b3 + // Put dummy text up for scroll and greet // main::@3 __b3: - // [83] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + // [101] if((byte) main::i2#2<(byte) $28) goto main::@4 -- vbuz1_lt_vbuc1_then_la1 + lda.z i2 + cmp #$28 + bcc __b4 + // [102] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + __b5_from___b3: + // [102] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp __b5 + // [102] phi from main::@5 to main::@5 [phi:main::@5->main::@5] + __b5_from___b5: + // [102] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@5->main::@5#0] -- register_copy + jmp __b5 + // main::@5 + __b5: + // [103] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 ldy.z i lda PAL_RED,y sta PALETTE_RED,y - // [84] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + // [104] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 ldy.z i lda PAL_GREEN,y sta PALETTE_GREEN,y - // [85] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + // [105] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 ldy.z i lda PAL_BLUE,y sta PALETTE_BLUE,y - // [86] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [106] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [87] if((byte) main::i#1!=(byte) 0) goto main::@3 -- vbuz1_neq_0_then_la1 + // [107] if((byte) main::i#1!=(byte) 0) goto main::@5 -- vbuz1_neq_0_then_la1 lda.z i cmp #0 - bne __b3_from___b3 - jmp __b4 - // main::@4 - __b4: + bne __b5_from___b5 + jmp __b6 + // main::@6 + __b6: // asm { sei } // Set up raster interrupts C64 style sei - // [89] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [109] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT - // [90] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 -- _deref_pbuc1=vbuc2 + // [110] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 -- _deref_pbuc1=vbuc2 // Set raster line to 0x16 lda #$16 sta VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER - // [91] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [111] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 lda #$7f and VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1 sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1 - // [92] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [112] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE - // [93] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() -- _deref_qprc1=pprc2 + // [113] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() -- _deref_qprc1=pprc2 // Set the IRQ routine lda #irq1 sta HARDWARE_IRQ+1 - // [94] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [114] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // no kernal or BASIC rom visible lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR - // [95] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [115] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [96] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 -- _deref_pbuc1=vbuc2 + // [116] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 -- _deref_pbuc1=vbuc2 // open sideborder lda #1 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO // asm { cli } // Enable IRQ cli - // [98] phi from main::@4 main::@5 to main::@5 [phi:main::@4/main::@5->main::@5] - __b5_from___b4: - __b5_from___b5: - jmp __b5 - // main::@5 - __b5: - jmp __b5_from___b5 + // [118] phi from main::@6 main::@7 to main::@7 [phi:main::@6/main::@7->main::@7] + __b7_from___b6: + __b7_from___b7: + jmp __b7 + // main::@7 + __b7: + jmp __b7_from___b7 + // main::@4 + __b4: + // [119] *((const nomodify byte*) SCREEN+(const nomodify byte) SCROLL_Y*(byte) $28 + (byte) main::i2#2) ← (byte) 'a' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'a' + ldy.z i2 + sta SCREEN+SCROLL_Y*$28,y + // [120] *((const nomodify byte*) SCREEN+(const nomodify byte) GREET_Y*(byte) $28 + (byte) main::i2#2) ← (byte) 'b' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'b' + ldy.z i2 + sta SCREEN+GREET_Y*$28,y + // [121] (byte) main::i2#1 ← ++ (byte) main::i2#2 -- vbuz1=_inc_vbuz1 + inc.z i2 + // [100] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + __b3_from___b4: + // [100] phi (byte) main::i2#2 = (byte) main::i2#1 [phi:main::@4->main::@3#0] -- register_copy + jmp __b3 // main::@2 __b2: - // [99] *((const nomodify byte*) SCREEN+(byte)(number) 3*(number) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + // [122] *((const nomodify byte*) SCREEN+(const nomodify byte) LOGO_Y*(byte) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 ldy.z i1 lda MEGA_LOGO,y - sta SCREEN+3*$28,y - // [100] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1 + sta SCREEN+LOGO_Y*$28,y + // [123] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1 inc.z i1 - // [80] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [98] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: - // [80] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@2->main::@1#0] -- register_copy + // [98] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@2->main::@1#0] -- register_copy jmp __b1 } // memset @@ -2553,10 +2939,10 @@ memset: { .const num = $28*$19 .label str = SCREEN .label end = str+num - .label dst = $e - // [102] phi from memset to memset::@1 [phi:memset->memset::@1] + .label dst = $11 + // [125] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [102] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [125] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -2564,7 +2950,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [103] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [126] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -2574,19 +2960,19 @@ memset: { jmp __breturn // memset::@return __breturn: - // [104] return + // [127] return rts // memset::@2 __b2: - // [105] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [128] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [129] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inw.z dst - // [102] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [125] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [102] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [125] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data @@ -2596,7 +2982,7 @@ SINUS: .fill 256, 91.5 + 91.5*sin(i*2*PI/256) // Moving Raster Bars - rasters: .fill $100, 0 + rasters: .fill NUMBERL, 0 // A MEGA logo MEGA_LOGO: .byte $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $20, $cf, $20, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $cf, $cf, $20, $20, $20, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $20, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $cf, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $20, $20, $20, $cf PAL_RED: .byte 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, $16, $c6, $a7, $88, $49, $5a, $2b, $1c, $ac, $ad, $8e, $8f, $ff, $ff, $ff, $ff, $c6, $77, $48, $29, $e9, $fa, $cb, $cc, $5d, $4e, $2f, $ff, $ff, $ff, $ff, $ff, $57, $18, $f8, $d9, $aa, $8b, $6c, $5d, $ed, $de, $cf, $ff, $ff, $ff, $ff, $ff, $26, $e6, $b7, $a8, $69, $5a, $3b, $3c, $dc, $cd, $ae, $9f, $ff, $ff, $ff, $ff, $65, $16, $17, $f7, $d8, $b9, $9a, $8b, $2c, $d, $fd, $ee, $cf, $ff, $ff, $ff, $64, $15, 6, $e6, $c7, $a8, $99, $8a, $1b, $c, $fc, $fd, $ee, $cf, $ff, $ff, $12, $d2, $d3, $b4, $95, $86, $77, $78, 9, $69, $ea, $fb, $dc, $ad, $ae, $af, $f0, $c1, $c2, $a3, $84, $85, $76, $67, 8, $f8, $e9, $da, $db, $bc, $bd, $ae, $40, $11, $12, $f2, $e3, $d4, $c5, $c6, $47, $38, $39, $2a, $1b, $c, $d, $ed, 0, 0, $f0, $d1, $c2, $b3, $a4, $95, $36, $27, $28, $29, $f9, $ea, $eb, $ec, $70, $41, $22, $23, $f3, $f4, $e5, $e6, $77, $78, $69, $7a, $3b, $3c, $3d, $3e, $a1, $82, $63, $54, $35, $26, 7, 8, $98, $99, $8a, $7b, $5c, $5d, $3e, $3f, $33, 4, $d4, $d5, $a6, $a7, $88, $89, $1a, $ab, $fb, $ec, $cd, $be, $af, $ff, $b4, $85, $56, $47, $18, 9, $f9, $ea, $7b, $7c, $5d, $5e, $2f, $ef, $ff, $ff, 6, $d6, $a7, $98, $59, $4a, $2b, $2c, $bc, $ad, $8e, $8f, $ff, $ff, $ff, $ff @@ -2616,50 +3002,62 @@ Statement [4] (volatile byte) greetnm ← (byte) 0 [ ] ( [ ] { } ) always clob Statement [8] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | (byte) $80 [ sinpos zoomx xpos greetnm ] ( [ sinpos zoomx xpos greetnm ] { } ) always clobbers reg byte a Statement [9] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ sinpos zoomx xpos greetnm ] ( [ sinpos zoomx xpos greetnm ] { } ) always clobbers reg byte a Statement [10] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (byte) 0 [ sinpos zoomx xpos greetnm ] ( [ sinpos zoomx xpos greetnm ] { } ) always clobbers reg byte a +Statement [15] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (byte) $88 [ sinpos ] ( [ sinpos ] { } ) always clobbers reg byte a +Statement [16] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (byte) $88 [ sinpos ] ( [ sinpos ] { } ) always clobbers reg byte a Statement [17] call *((const void()*) songPlay) [ sinpos ] ( [ sinpos ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z -Statement [23] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [24] (byte~) irq1::$22 ← *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i2#2) >> (byte) 1 [ irq1::i2#2 irq1::$22 ] ( [ irq1::i2#2 irq1::$22 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:7 [ irq1::i2#2 irq1::i2#1 ] -Statement [25] (byte~) irq1::$23 ← (byte~) irq1::$22 & (byte) 7 [ irq1::i2#2 irq1::$23 ] ( [ irq1::i2#2 irq1::$23 ] { } ) always clobbers reg byte a -Statement [29] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 << (byte) 4 [ irq1::barcnt#2 irq1::barsin#2 irq1::idx#0 irq1::barcol#0 ] ( [ irq1::barcnt#2 irq1::barsin#2 irq1::idx#0 irq1::barcol#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:5 [ irq1::barcnt#2 irq1::barcnt#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:6 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:11 [ irq1::idx#4 irq1::idx#3 irq1::idx#0 irq1::idx#1 irq1::idx#2 ] -Statement [34] (byte) irq1::barsin#1 ← (byte) irq1::barsin#2 + (byte) $a [ irq1::barcnt#2 irq1::barsin#1 ] ( [ irq1::barcnt#2 irq1::barsin#1 ] { } ) always clobbers reg byte a -Statement [44] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 [ sinpos irq1::l#2 ] ( [ sinpos irq1::l#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:4 [ irq1::l#2 irq1::l#1 ] -Statement [58] if((volatile byte) zoomx!=(byte) 0) goto irq1::@6 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a +Statement [28] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [29] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [30] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [31] (byte~) irq1::$23 ← *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i3#2) >> (byte) 1 [ irq1::i3#2 irq1::$23 ] ( [ irq1::i3#2 irq1::$23 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:9 [ irq1::i3#2 irq1::i3#1 ] +Statement [32] (byte~) irq1::$24 ← (byte~) irq1::$23 & (byte) 7 [ irq1::i3#2 irq1::$24 ] ( [ irq1::i3#2 irq1::$24 ] { } ) always clobbers reg byte a +Statement [36] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 << (byte) 4 [ irq1::barcnt#2 irq1::barsin#2 irq1::idx#0 irq1::barcol#0 ] ( [ irq1::barcnt#2 irq1::barsin#2 irq1::idx#0 irq1::barcol#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:7 [ irq1::barcnt#2 irq1::barcnt#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:8 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:13 [ irq1::idx#4 irq1::idx#3 irq1::idx#0 irq1::idx#1 irq1::idx#2 ] +Statement [41] (byte) irq1::barsin#1 ← (byte) irq1::barsin#2 + (byte) $a [ irq1::barcnt#2 irq1::barsin#1 ] ( [ irq1::barcnt#2 irq1::barsin#1 ] { } ) always clobbers reg byte a +Statement [51] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 [ sinpos irq1::l#2 ] ( [ sinpos irq1::l#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:6 [ irq1::l#2 irq1::l#1 ] +Statement [53] (byte) irq1::col1#0 ← *((const byte*) SINUS + (byte) irq1::colsin#2) >> (byte) 2 [ sinpos irq1::i#2 irq1::colsin#2 irq1::col1#0 ] ( [ sinpos irq1::i#2 irq1::colsin#2 irq1::col1#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:4 [ irq1::i#2 irq1::i#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:5 [ irq1::colsin#2 irq1::colsin#1 irq1::colsin#0 ] +Statement [55] (byte) irq1::col1#1 ← (byte) irq1::col1#0 >> (byte) 1 [ sinpos irq1::i#2 irq1::colsin#2 irq1::col1#1 ] ( [ sinpos irq1::i#2 irq1::colsin#2 irq1::col1#1 ] { } ) always clobbers reg byte a +Statement [62] *((const nomodify byte*) COLORRAM+(const nomodify byte) SCROLL_Y*(byte) $28 + (byte) irq1::i#2) ← *((const byte*) PAL_GREEN + (byte) irq1::colsin#2) [ sinpos irq1::i#2 irq1::colsin#2 ] ( [ sinpos irq1::i#2 irq1::colsin#2 ] { } ) always clobbers reg byte a +Statement [77] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ irq1::line#10 irq1::line#1 ] Removing always clobbered register reg byte a as potential for zp[1]:3 [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] -Statement [60] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@6 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [61] (volatile byte) greetnm ← (byte) 0 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [66] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [67] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [68] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [69] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 irq1::$12 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 irq1::$12 ] { } ) always clobbers reg byte a -Statement [72] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#1 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#1 ] { } ) always clobbers reg byte a -Statement [73] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [74] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [75] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (byte) $40 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [76] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (byte) $40 [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [79] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a +Statement [80] (volatile byte) greetnm ← (byte) 0 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a +Statement [85] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a +Statement [86] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a +Statement [87] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a +Statement [88] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← *((const byte*) SINUS + (byte) irq1::wobblepos#10) [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a +Statement [90] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#1 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#1 ] { } ) always clobbers reg byte a +Statement [91] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [92] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [93] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (byte) $40 [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [94] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (byte) $40 [ ] ( main:6 [ ] { } ) always clobbers reg byte a Statement asm { lda#0 } always clobbers reg byte a -Statement [79] call *((const void()*) songInit) [ ] ( main:6 [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z -Statement [83] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) [ main::i#2 ] ( main:6 [ main::i#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:13 [ main::i#2 main::i#1 ] -Statement [84] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) [ main::i#2 ] ( main:6 [ main::i#2 ] { } ) always clobbers reg byte a -Statement [85] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) [ main::i#2 ] ( main:6 [ main::i#2 ] { } ) always clobbers reg byte a -Statement [89] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [90] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [91] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [92] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [93] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [94] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [95] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [96] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [99] *((const nomodify byte*) SCREEN+(byte)(number) 3*(number) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) [ main::i1#2 ] ( main:6 [ main::i1#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:12 [ main::i1#2 main::i1#1 ] -Statement [103] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:6::memset:77 [ memset::dst#2 ] { } ) always clobbers reg byte a -Statement [105] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:6::memset:77 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Statement [96] call *((const void()*) songInit) [ ] ( main:6 [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z +Statement [103] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) [ main::i#2 ] ( main:6 [ main::i#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:16 [ main::i#2 main::i#1 ] +Statement [104] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) [ main::i#2 ] ( main:6 [ main::i#2 ] { } ) always clobbers reg byte a +Statement [105] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) [ main::i#2 ] ( main:6 [ main::i#2 ] { } ) always clobbers reg byte a +Statement [109] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [110] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [111] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [112] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [113] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [114] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [115] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [116] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [119] *((const nomodify byte*) SCREEN+(const nomodify byte) SCROLL_Y*(byte) $28 + (byte) main::i2#2) ← (byte) 'a' [ main::i2#2 ] ( main:6 [ main::i2#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:15 [ main::i2#2 main::i2#1 ] +Statement [120] *((const nomodify byte*) SCREEN+(const nomodify byte) GREET_Y*(byte) $28 + (byte) main::i2#2) ← (byte) 'b' [ main::i2#2 ] ( main:6 [ main::i2#2 ] { } ) always clobbers reg byte a +Statement [122] *((const nomodify byte*) SCREEN+(const nomodify byte) LOGO_Y*(byte) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) [ main::i1#2 ] ( main:6 [ main::i1#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:14 [ main::i1#2 main::i1#1 ] +Statement [126] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:6::memset:97 [ memset::dst#2 ] { } ) always clobbers reg byte a +Statement [128] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:6::memset:97 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y Statement [1] (volatile byte) sinpos ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] (volatile byte) zoomx ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [3] (volatile byte) xpos ← (byte) 7 [ ] ( [ ] { } ) always clobbers reg byte a @@ -2667,71 +3065,84 @@ Statement [4] (volatile byte) greetnm ← (byte) 0 [ ] ( [ ] { } ) always clob Statement [8] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | (byte) $80 [ sinpos zoomx xpos greetnm ] ( [ sinpos zoomx xpos greetnm ] { } ) always clobbers reg byte a Statement [9] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ sinpos zoomx xpos greetnm ] ( [ sinpos zoomx xpos greetnm ] { } ) always clobbers reg byte a Statement [10] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (byte) 0 [ sinpos zoomx xpos greetnm ] ( [ sinpos zoomx xpos greetnm ] { } ) always clobbers reg byte a +Statement [15] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (byte) $88 [ sinpos ] ( [ sinpos ] { } ) always clobbers reg byte a +Statement [16] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (byte) $88 [ sinpos ] ( [ sinpos ] { } ) always clobbers reg byte a Statement [17] call *((const void()*) songPlay) [ sinpos ] ( [ sinpos ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z -Statement [23] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [24] (byte~) irq1::$22 ← *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i2#2) >> (byte) 1 [ irq1::i2#2 irq1::$22 ] ( [ irq1::i2#2 irq1::$22 ] { } ) always clobbers reg byte a -Statement [25] (byte~) irq1::$23 ← (byte~) irq1::$22 & (byte) 7 [ irq1::i2#2 irq1::$23 ] ( [ irq1::i2#2 irq1::$23 ] { } ) always clobbers reg byte a -Statement [29] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 << (byte) 4 [ irq1::barcnt#2 irq1::barsin#2 irq1::idx#0 irq1::barcol#0 ] ( [ irq1::barcnt#2 irq1::barsin#2 irq1::idx#0 irq1::barcol#0 ] { } ) always clobbers reg byte a -Statement [34] (byte) irq1::barsin#1 ← (byte) irq1::barsin#2 + (byte) $a [ irq1::barcnt#2 irq1::barsin#1 ] ( [ irq1::barcnt#2 irq1::barsin#1 ] { } ) always clobbers reg byte a -Statement [44] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 [ sinpos irq1::l#2 ] ( [ sinpos irq1::l#2 ] { } ) always clobbers reg byte a -Statement [58] if((volatile byte) zoomx!=(byte) 0) goto irq1::@6 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [60] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@6 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [61] (volatile byte) greetnm ← (byte) 0 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [66] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [67] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [68] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [69] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 irq1::$12 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 irq1::$12 ] { } ) always clobbers reg byte a -Statement [72] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#1 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#1 ] { } ) always clobbers reg byte a -Statement [73] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [74] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [75] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (byte) $40 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [76] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (byte) $40 [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [28] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [29] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [30] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [31] (byte~) irq1::$23 ← *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i3#2) >> (byte) 1 [ irq1::i3#2 irq1::$23 ] ( [ irq1::i3#2 irq1::$23 ] { } ) always clobbers reg byte a +Statement [32] (byte~) irq1::$24 ← (byte~) irq1::$23 & (byte) 7 [ irq1::i3#2 irq1::$24 ] ( [ irq1::i3#2 irq1::$24 ] { } ) always clobbers reg byte a +Statement [36] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 << (byte) 4 [ irq1::barcnt#2 irq1::barsin#2 irq1::idx#0 irq1::barcol#0 ] ( [ irq1::barcnt#2 irq1::barsin#2 irq1::idx#0 irq1::barcol#0 ] { } ) always clobbers reg byte a +Statement [41] (byte) irq1::barsin#1 ← (byte) irq1::barsin#2 + (byte) $a [ irq1::barcnt#2 irq1::barsin#1 ] ( [ irq1::barcnt#2 irq1::barsin#1 ] { } ) always clobbers reg byte a +Statement [51] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 [ sinpos irq1::l#2 ] ( [ sinpos irq1::l#2 ] { } ) always clobbers reg byte a +Statement [53] (byte) irq1::col1#0 ← *((const byte*) SINUS + (byte) irq1::colsin#2) >> (byte) 2 [ sinpos irq1::i#2 irq1::colsin#2 irq1::col1#0 ] ( [ sinpos irq1::i#2 irq1::colsin#2 irq1::col1#0 ] { } ) always clobbers reg byte a +Statement [55] (byte) irq1::col1#1 ← (byte) irq1::col1#0 >> (byte) 1 [ sinpos irq1::i#2 irq1::colsin#2 irq1::col1#1 ] ( [ sinpos irq1::i#2 irq1::colsin#2 irq1::col1#1 ] { } ) always clobbers reg byte a +Statement [62] *((const nomodify byte*) COLORRAM+(const nomodify byte) SCROLL_Y*(byte) $28 + (byte) irq1::i#2) ← *((const byte*) PAL_GREEN + (byte) irq1::colsin#2) [ sinpos irq1::i#2 irq1::colsin#2 ] ( [ sinpos irq1::i#2 irq1::colsin#2 ] { } ) always clobbers reg byte a +Statement [77] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a +Statement [79] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a +Statement [80] (volatile byte) greetnm ← (byte) 0 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a +Statement [85] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a +Statement [86] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a +Statement [87] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a +Statement [88] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← *((const byte*) SINUS + (byte) irq1::wobblepos#10) [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a +Statement [90] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#1 ] ( [ sinpos zoomx xpos greetnm irq1::line#10 irq1::wobblepos#1 ] { } ) always clobbers reg byte a +Statement [91] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [92] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [93] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (byte) $40 [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [94] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (byte) $40 [ ] ( main:6 [ ] { } ) always clobbers reg byte a Statement asm { lda#0 } always clobbers reg byte a -Statement [79] call *((const void()*) songInit) [ ] ( main:6 [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z -Statement [83] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) [ main::i#2 ] ( main:6 [ main::i#2 ] { } ) always clobbers reg byte a -Statement [84] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) [ main::i#2 ] ( main:6 [ main::i#2 ] { } ) always clobbers reg byte a -Statement [85] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) [ main::i#2 ] ( main:6 [ main::i#2 ] { } ) always clobbers reg byte a -Statement [89] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [90] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [91] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [92] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [93] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [94] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [95] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [96] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [99] *((const nomodify byte*) SCREEN+(byte)(number) 3*(number) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) [ main::i1#2 ] ( main:6 [ main::i1#2 ] { } ) always clobbers reg byte a -Statement [103] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:6::memset:77 [ memset::dst#2 ] { } ) always clobbers reg byte a -Statement [105] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:6::memset:77 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Statement [96] call *((const void()*) songInit) [ ] ( main:6 [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z +Statement [103] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) [ main::i#2 ] ( main:6 [ main::i#2 ] { } ) always clobbers reg byte a +Statement [104] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) [ main::i#2 ] ( main:6 [ main::i#2 ] { } ) always clobbers reg byte a +Statement [105] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) [ main::i#2 ] ( main:6 [ main::i#2 ] { } ) always clobbers reg byte a +Statement [109] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [110] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [111] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [112] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [113] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [114] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [115] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [116] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 [ ] ( main:6 [ ] { } ) always clobbers reg byte a +Statement [119] *((const nomodify byte*) SCREEN+(const nomodify byte) SCROLL_Y*(byte) $28 + (byte) main::i2#2) ← (byte) 'a' [ main::i2#2 ] ( main:6 [ main::i2#2 ] { } ) always clobbers reg byte a +Statement [120] *((const nomodify byte*) SCREEN+(const nomodify byte) GREET_Y*(byte) $28 + (byte) main::i2#2) ← (byte) 'b' [ main::i2#2 ] ( main:6 [ main::i2#2 ] { } ) always clobbers reg byte a +Statement [122] *((const nomodify byte*) SCREEN+(const nomodify byte) LOGO_Y*(byte) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) [ main::i1#2 ] ( main:6 [ main::i1#2 ] { } ) always clobbers reg byte a +Statement [126] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:6::memset:97 [ memset::dst#2 ] { } ) always clobbers reg byte a +Statement [128] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:6::memset:97 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y Potential registers zp[1]:2 [ irq1::line#10 irq1::line#1 ] : zp[1]:2 , reg byte x , reg byte y , reg byte z , Potential registers zp[1]:3 [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] : zp[1]:3 , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:4 [ irq1::l#2 irq1::l#1 ] : zp[1]:4 , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:5 [ irq1::barcnt#2 irq1::barcnt#1 ] : zp[1]:5 , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:6 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] : zp[1]:6 , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:7 [ irq1::i2#2 irq1::i2#1 ] : zp[1]:7 , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:8 [ irq1::i#2 irq1::i#1 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:9 [ irq1::i1#2 irq1::i1#1 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:10 [ irq1::barcol#4 irq1::barcol#3 irq1::barcol#0 irq1::barcol#1 irq1::barcol#2 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:11 [ irq1::idx#4 irq1::idx#3 irq1::idx#0 irq1::idx#1 irq1::idx#2 ] : zp[1]:11 , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:12 [ main::i1#2 main::i1#1 ] : zp[1]:12 , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:13 [ main::i#2 main::i#1 ] : zp[1]:13 , reg byte x , reg byte y , reg byte z , -Potential registers zp[2]:14 [ memset::dst#2 memset::dst#1 ] : zp[2]:14 , -Potential registers zp[1]:16 [ sinpos ] : zp[1]:16 , -Potential registers zp[1]:17 [ zoomx ] : zp[1]:17 , -Potential registers zp[1]:18 [ xpos ] : zp[1]:18 , -Potential registers zp[1]:19 [ greetnm ] : zp[1]:19 , -Potential registers zp[1]:20 [ irq1::$22 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:21 [ irq1::$23 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:22 [ irq1::col#0 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:23 [ irq1::zoomval#0 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:24 [ irq1::$7 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:25 [ irq1::raster#0 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:26 [ irq1::$12 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:4 [ irq1::i#2 irq1::i#1 ] : zp[1]:4 , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:5 [ irq1::colsin#2 irq1::colsin#1 irq1::colsin#0 ] : zp[1]:5 , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:6 [ irq1::l#2 irq1::l#1 ] : zp[1]:6 , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:7 [ irq1::barcnt#2 irq1::barcnt#1 ] : zp[1]:7 , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:8 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] : zp[1]:8 , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:9 [ irq1::i3#2 irq1::i3#1 ] : zp[1]:9 , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:10 [ irq1::i1#2 irq1::i1#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:11 [ irq1::i2#2 irq1::i2#1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:12 [ irq1::barcol#4 irq1::barcol#3 irq1::barcol#0 irq1::barcol#1 irq1::barcol#2 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:13 [ irq1::idx#4 irq1::idx#3 irq1::idx#0 irq1::idx#1 irq1::idx#2 ] : zp[1]:13 , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:14 [ main::i1#2 main::i1#1 ] : zp[1]:14 , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:15 [ main::i2#2 main::i2#1 ] : zp[1]:15 , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:16 [ main::i#2 main::i#1 ] : zp[1]:16 , reg byte x , reg byte y , reg byte z , +Potential registers zp[2]:17 [ memset::dst#2 memset::dst#1 ] : zp[2]:17 , +Potential registers zp[1]:19 [ sinpos ] : zp[1]:19 , +Potential registers zp[1]:20 [ zoomx ] : zp[1]:20 , +Potential registers zp[1]:21 [ xpos ] : zp[1]:21 , +Potential registers zp[1]:22 [ greetnm ] : zp[1]:22 , +Potential registers zp[1]:23 [ irq1::$23 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:24 [ irq1::$24 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:25 [ irq1::col1#0 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:26 [ irq1::col1#1 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:27 [ irq1::col#0 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:28 [ irq1::zoomval#0 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:29 [ irq1::$7 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , reg byte z , +Potential registers zp[1]:30 [ irq1::raster#0 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , reg byte z , REGISTER UPLIFT SCOPES -Uplift Scope [memset] 3,336.67: zp[2]:14 [ memset::dst#2 memset::dst#1 ] -Uplift Scope [irq1] 454: zp[1]:10 [ irq1::barcol#4 irq1::barcol#3 irq1::barcol#0 irq1::barcol#1 irq1::barcol#2 ] 418.67: zp[1]:11 [ irq1::idx#4 irq1::idx#3 irq1::idx#0 irq1::idx#1 irq1::idx#2 ] 262.6: zp[1]:8 [ irq1::i#2 irq1::i#1 ] 262.6: zp[1]:9 [ irq1::i1#2 irq1::i1#1 ] 56: zp[1]:25 [ irq1::raster#0 ] 41.39: zp[1]:3 [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] 36.67: zp[1]:4 [ irq1::l#2 irq1::l#1 ] 33: zp[1]:7 [ irq1::i2#2 irq1::i2#1 ] 25.14: zp[1]:2 [ irq1::line#10 irq1::line#1 ] 24.59: zp[1]:5 [ irq1::barcnt#2 irq1::barcnt#1 ] 22: zp[1]:20 [ irq1::$22 ] 22: zp[1]:21 [ irq1::$23 ] 22: zp[1]:24 [ irq1::$7 ] 22: zp[1]:26 [ irq1::$12 ] 17.19: zp[1]:6 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] 16.5: zp[1]:22 [ irq1::col#0 ] 11: zp[1]:23 [ irq1::zoomval#0 ] -Uplift Scope [main] 370.33: zp[1]:12 [ main::i1#2 main::i1#1 ] 353.5: zp[1]:13 [ main::i#2 main::i#1 ] -Uplift Scope [] 1.35: zp[1]:17 [ zoomx ] 1.35: zp[1]:19 [ greetnm ] 0.38: zp[1]:18 [ xpos ] 0.26: zp[1]:16 [ sinpos ] +Uplift Scope [memset] 3,336.67: zp[2]:17 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [irq1] 454: zp[1]:12 [ irq1::barcol#4 irq1::barcol#3 irq1::barcol#0 irq1::barcol#1 irq1::barcol#2 ] 418.67: zp[1]:13 [ irq1::idx#4 irq1::idx#3 irq1::idx#0 irq1::idx#1 irq1::idx#2 ] 262.6: zp[1]:10 [ irq1::i1#2 irq1::i1#1 ] 262.6: zp[1]:11 [ irq1::i2#2 irq1::i2#1 ] 56: zp[1]:30 [ irq1::raster#0 ] 41.59: zp[1]:3 [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] 36.67: zp[1]:6 [ irq1::l#2 irq1::l#1 ] 33: zp[1]:9 [ irq1::i3#2 irq1::i3#1 ] 31.31: zp[1]:4 [ irq1::i#2 irq1::i#1 ] 25.26: zp[1]:2 [ irq1::line#10 irq1::line#1 ] 24.59: zp[1]:7 [ irq1::barcnt#2 irq1::barcnt#1 ] 22: zp[1]:23 [ irq1::$23 ] 22: zp[1]:24 [ irq1::$24 ] 22: zp[1]:29 [ irq1::$7 ] 18.83: zp[1]:5 [ irq1::colsin#2 irq1::colsin#1 irq1::colsin#0 ] 17.19: zp[1]:8 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] 16.5: zp[1]:25 [ irq1::col1#0 ] 16.5: zp[1]:27 [ irq1::col#0 ] 12.83: zp[1]:26 [ irq1::col1#1 ] 11: zp[1]:28 [ irq1::zoomval#0 ] +Uplift Scope [main] 370.33: zp[1]:14 [ main::i1#2 main::i1#1 ] 353.5: zp[1]:16 [ main::i#2 main::i#1 ] 328.25: zp[1]:15 [ main::i2#2 main::i2#1 ] +Uplift Scope [] 1.39: zp[1]:20 [ zoomx ] 1.39: zp[1]:22 [ greetnm ] 0.39: zp[1]:21 [ xpos ] 0.22: zp[1]:19 [ sinpos ] Uplift Scope [MOS6526_CIA] Uplift Scope [MOS6569_VICII] Uplift Scope [MOS6581_SID] @@ -2739,60 +3150,66 @@ Uplift Scope [MOS4569_VICIII] Uplift Scope [MEGA65_VICIV] Uplift Scope [__start] -Uplifting [memset] best 16227 combination zp[2]:14 [ memset::dst#2 memset::dst#1 ] -Uplifting [irq1] best 12877 combination reg byte z [ irq1::barcol#4 irq1::barcol#3 irq1::barcol#0 irq1::barcol#1 irq1::barcol#2 ] reg byte y [ irq1::idx#4 irq1::idx#3 irq1::idx#0 irq1::idx#1 irq1::idx#2 ] reg byte x [ irq1::i#2 irq1::i#1 ] zp[1]:9 [ irq1::i1#2 irq1::i1#1 ] zp[1]:25 [ irq1::raster#0 ] zp[1]:3 [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] zp[1]:4 [ irq1::l#2 irq1::l#1 ] zp[1]:7 [ irq1::i2#2 irq1::i2#1 ] zp[1]:2 [ irq1::line#10 irq1::line#1 ] zp[1]:5 [ irq1::barcnt#2 irq1::barcnt#1 ] zp[1]:20 [ irq1::$22 ] zp[1]:21 [ irq1::$23 ] zp[1]:24 [ irq1::$7 ] zp[1]:26 [ irq1::$12 ] zp[1]:6 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] zp[1]:22 [ irq1::col#0 ] zp[1]:23 [ irq1::zoomval#0 ] -Limited combination testing to 100 combinations of 1086210048 possible. -Uplifting [main] best 12577 combination reg byte x [ main::i1#2 main::i1#1 ] reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 12577 combination zp[1]:17 [ zoomx ] zp[1]:19 [ greetnm ] zp[1]:18 [ xpos ] zp[1]:16 [ sinpos ] -Uplifting [MOS6526_CIA] best 12577 combination -Uplifting [MOS6569_VICII] best 12577 combination -Uplifting [MOS6581_SID] best 12577 combination -Uplifting [MOS4569_VICIII] best 12577 combination -Uplifting [MEGA65_VICIV] best 12577 combination -Uplifting [__start] best 12577 combination -Attempting to uplift remaining variables inzp[1]:9 [ irq1::i1#2 irq1::i1#1 ] -Uplifting [irq1] best 11677 combination reg byte x [ irq1::i1#2 irq1::i1#1 ] -Attempting to uplift remaining variables inzp[1]:25 [ irq1::raster#0 ] -Uplifting [irq1] best 11347 combination reg byte a [ irq1::raster#0 ] +Uplifting [memset] best 18057 combination zp[2]:17 [ memset::dst#2 memset::dst#1 ] +Uplifting [irq1] best 14707 combination reg byte z [ irq1::barcol#4 irq1::barcol#3 irq1::barcol#0 irq1::barcol#1 irq1::barcol#2 ] reg byte y [ irq1::idx#4 irq1::idx#3 irq1::idx#0 irq1::idx#1 irq1::idx#2 ] reg byte x [ irq1::i1#2 irq1::i1#1 ] zp[1]:11 [ irq1::i2#2 irq1::i2#1 ] zp[1]:30 [ irq1::raster#0 ] zp[1]:3 [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] zp[1]:6 [ irq1::l#2 irq1::l#1 ] zp[1]:9 [ irq1::i3#2 irq1::i3#1 ] zp[1]:4 [ irq1::i#2 irq1::i#1 ] zp[1]:2 [ irq1::line#10 irq1::line#1 ] zp[1]:7 [ irq1::barcnt#2 irq1::barcnt#1 ] zp[1]:23 [ irq1::$23 ] zp[1]:24 [ irq1::$24 ] zp[1]:29 [ irq1::$7 ] zp[1]:5 [ irq1::colsin#2 irq1::colsin#1 irq1::colsin#0 ] zp[1]:8 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] zp[1]:25 [ irq1::col1#0 ] zp[1]:27 [ irq1::col#0 ] zp[1]:26 [ irq1::col1#1 ] zp[1]:28 [ irq1::zoomval#0 ] +Limited combination testing to 100 combinations of 997457920 possible. +Uplifting [main] best 14257 combination reg byte x [ main::i1#2 main::i1#1 ] reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i2#2 main::i2#1 ] +Uplifting [] best 14257 combination zp[1]:20 [ zoomx ] zp[1]:22 [ greetnm ] zp[1]:21 [ xpos ] zp[1]:19 [ sinpos ] +Uplifting [MOS6526_CIA] best 14257 combination +Uplifting [MOS6569_VICII] best 14257 combination +Uplifting [MOS6581_SID] best 14257 combination +Uplifting [MOS4569_VICIII] best 14257 combination +Uplifting [MEGA65_VICIV] best 14257 combination +Uplifting [__start] best 14257 combination +Attempting to uplift remaining variables inzp[1]:11 [ irq1::i2#2 irq1::i2#1 ] +Uplifting [irq1] best 13357 combination reg byte x [ irq1::i2#2 irq1::i2#1 ] +Attempting to uplift remaining variables inzp[1]:30 [ irq1::raster#0 ] +Uplifting [irq1] best 13027 combination reg byte a [ irq1::raster#0 ] Attempting to uplift remaining variables inzp[1]:3 [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] -Uplifting [irq1] best 11284 combination reg byte x [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] -Attempting to uplift remaining variables inzp[1]:4 [ irq1::l#2 irq1::l#1 ] -Uplifting [irq1] best 11164 combination reg byte x [ irq1::l#2 irq1::l#1 ] -Attempting to uplift remaining variables inzp[1]:7 [ irq1::i2#2 irq1::i2#1 ] -Uplifting [irq1] best 11014 combination reg byte x [ irq1::i2#2 irq1::i2#1 ] +Uplifting [irq1] best 12964 combination reg byte x [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] +Attempting to uplift remaining variables inzp[1]:6 [ irq1::l#2 irq1::l#1 ] +Uplifting [irq1] best 12844 combination reg byte x [ irq1::l#2 irq1::l#1 ] +Attempting to uplift remaining variables inzp[1]:9 [ irq1::i3#2 irq1::i3#1 ] +Uplifting [irq1] best 12694 combination reg byte x [ irq1::i3#2 irq1::i3#1 ] +Attempting to uplift remaining variables inzp[1]:4 [ irq1::i#2 irq1::i#1 ] +Uplifting [irq1] best 12364 combination reg byte x [ irq1::i#2 irq1::i#1 ] Attempting to uplift remaining variables inzp[1]:2 [ irq1::line#10 irq1::line#1 ] -Uplifting [irq1] best 10794 combination reg byte z [ irq1::line#10 irq1::line#1 ] -Attempting to uplift remaining variables inzp[1]:5 [ irq1::barcnt#2 irq1::barcnt#1 ] -Uplifting [irq1] best 10794 combination zp[1]:5 [ irq1::barcnt#2 irq1::barcnt#1 ] -Attempting to uplift remaining variables inzp[1]:20 [ irq1::$22 ] -Uplifting [irq1] best 10734 combination reg byte a [ irq1::$22 ] -Attempting to uplift remaining variables inzp[1]:21 [ irq1::$23 ] -Uplifting [irq1] best 10674 combination reg byte a [ irq1::$23 ] -Attempting to uplift remaining variables inzp[1]:24 [ irq1::$7 ] -Uplifting [irq1] best 10614 combination reg byte a [ irq1::$7 ] -Attempting to uplift remaining variables inzp[1]:26 [ irq1::$12 ] -Uplifting [irq1] best 10554 combination reg byte a [ irq1::$12 ] -Attempting to uplift remaining variables inzp[1]:6 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] -Uplifting [irq1] best 10554 combination zp[1]:6 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] -Attempting to uplift remaining variables inzp[1]:22 [ irq1::col#0 ] -Uplifting [irq1] best 10464 combination reg byte a [ irq1::col#0 ] -Attempting to uplift remaining variables inzp[1]:23 [ irq1::zoomval#0 ] -Uplifting [irq1] best 10374 combination reg byte a [ irq1::zoomval#0 ] -Attempting to uplift remaining variables inzp[1]:17 [ zoomx ] -Uplifting [] best 10374 combination zp[1]:17 [ zoomx ] -Attempting to uplift remaining variables inzp[1]:19 [ greetnm ] -Uplifting [] best 10374 combination zp[1]:19 [ greetnm ] -Attempting to uplift remaining variables inzp[1]:18 [ xpos ] -Uplifting [] best 10374 combination zp[1]:18 [ xpos ] -Attempting to uplift remaining variables inzp[1]:16 [ sinpos ] -Uplifting [] best 10374 combination zp[1]:16 [ sinpos ] -Allocated (was zp[1]:5) zp[1]:2 [ irq1::barcnt#2 irq1::barcnt#1 ] -Allocated (was zp[1]:6) zp[1]:3 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] -Allocated (was zp[2]:14) zp[2]:4 [ memset::dst#2 memset::dst#1 ] -Allocated (was zp[1]:16) zp[1]:6 [ sinpos ] -Allocated (was zp[1]:17) zp[1]:7 [ zoomx ] -Allocated (was zp[1]:18) zp[1]:8 [ xpos ] -Allocated (was zp[1]:19) zp[1]:9 [ greetnm ] +Uplifting [irq1] best 12144 combination reg byte z [ irq1::line#10 irq1::line#1 ] +Attempting to uplift remaining variables inzp[1]:7 [ irq1::barcnt#2 irq1::barcnt#1 ] +Uplifting [irq1] best 12144 combination zp[1]:7 [ irq1::barcnt#2 irq1::barcnt#1 ] +Attempting to uplift remaining variables inzp[1]:23 [ irq1::$23 ] +Uplifting [irq1] best 12084 combination reg byte a [ irq1::$23 ] +Attempting to uplift remaining variables inzp[1]:24 [ irq1::$24 ] +Uplifting [irq1] best 12024 combination reg byte a [ irq1::$24 ] +Attempting to uplift remaining variables inzp[1]:29 [ irq1::$7 ] +Uplifting [irq1] best 11964 combination reg byte a [ irq1::$7 ] +Attempting to uplift remaining variables inzp[1]:5 [ irq1::colsin#2 irq1::colsin#1 irq1::colsin#0 ] +Uplifting [irq1] best 11871 combination reg byte y [ irq1::colsin#2 irq1::colsin#1 irq1::colsin#0 ] +Attempting to uplift remaining variables inzp[1]:8 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] +Uplifting [irq1] best 11871 combination zp[1]:8 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] +Attempting to uplift remaining variables inzp[1]:25 [ irq1::col1#0 ] +Uplifting [irq1] best 11781 combination reg byte a [ irq1::col1#0 ] +Attempting to uplift remaining variables inzp[1]:27 [ irq1::col#0 ] +Uplifting [irq1] best 11691 combination reg byte a [ irq1::col#0 ] +Attempting to uplift remaining variables inzp[1]:26 [ irq1::col1#1 ] +Uplifting [irq1] best 11481 combination reg byte a [ irq1::col1#1 ] +Attempting to uplift remaining variables inzp[1]:28 [ irq1::zoomval#0 ] +Uplifting [irq1] best 11391 combination reg byte a [ irq1::zoomval#0 ] +Attempting to uplift remaining variables inzp[1]:20 [ zoomx ] +Uplifting [] best 11391 combination zp[1]:20 [ zoomx ] +Attempting to uplift remaining variables inzp[1]:22 [ greetnm ] +Uplifting [] best 11391 combination zp[1]:22 [ greetnm ] +Attempting to uplift remaining variables inzp[1]:21 [ xpos ] +Uplifting [] best 11391 combination zp[1]:21 [ xpos ] +Attempting to uplift remaining variables inzp[1]:19 [ sinpos ] +Uplifting [] best 11391 combination zp[1]:19 [ sinpos ] +Allocated (was zp[1]:7) zp[1]:2 [ irq1::barcnt#2 irq1::barcnt#1 ] +Allocated (was zp[1]:8) zp[1]:3 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] +Allocated (was zp[2]:17) zp[2]:4 [ memset::dst#2 memset::dst#1 ] +Allocated (was zp[1]:19) zp[1]:6 [ sinpos ] +Allocated (was zp[1]:20) zp[1]:7 [ zoomx ] +Allocated (was zp[1]:21) zp[1]:8 [ xpos ] +Allocated (was zp[1]:22) zp[1]:9 [ greetnm ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -2822,10 +3239,16 @@ ASSEMBLER BEFORE OPTIMIZATION .const PROCPORT_DDR_MEMORY_MASK = 7 // RAM in 0xA000, 0xE000 I/O in 0xD000 .const PROCPORT_RAM_IO = 5 + // Logo y-position (char row on screen) + .const LOGO_Y = 3 + // Scroll y-position (char row on screen) + .const SCROLL_Y = $d + // Greeting y-position (char row on screen) + .const GREET_Y = $14 // The number of greetings .const GREETCOUNT = $10 // The number of raster lines - .const NUMBERL = $e0 + .const NUMBERL = $d8 .const OFFSET_STRUCT_MOS4569_VICIII_KEY = $2f .const OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = $31 .const OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = $54 @@ -2839,6 +3262,8 @@ ASSEMBLER BEFORE OPTIMIZATION .const OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = $16 .const OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = $20 .const OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR = $21 + .const OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = $20 + .const OFFSET_STRUCT_MOS6569_VICII_BG_COLOR = $21 .const OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO = $4c .const OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = $5a .const SIZEOF_BYTE = 1 @@ -2852,6 +3277,8 @@ ASSEMBLER BEFORE OPTIMIZATION .label VICIII = $d000 // The VIC IV .label VICIV = $d000 + // Color Ram + .label COLORRAM = $d800 // Palette RED .label PALETTE_RED = $d100 // Palette GREEN @@ -2950,431 +3377,520 @@ irq1: { // [14] if((byte) irq1::line#10!=(const nomodify byte) NUMBERL) goto irq1::@2 -- vbuzz_neq_vbuc1_then_la1 cpz #NUMBERL bne __b2 - // [15] phi from irq1::@1 to irq1::@15 [phi:irq1::@1->irq1::@15] - __b15_from___b1: - // [15] phi (byte) irq1::l#2 = (byte) 0 [phi:irq1::@1->irq1::@15#0] -- vbuxx=vbuc1 - ldx #0 - jmp __b15 - // Set all raster bars to black - // irq1::@15 - __b15: - // [16] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@16 -- vbuxx_neq_vbuc1_then_la1 - cpx #NUMBERL - bne __b16 - jmp __b17 - // irq1::@17 - __b17: + jmp __b3 + // irq1::@3 + __b3: + // [15] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (byte) $88 -- _deref_pbuc1=vbuc2 + // Show start of calculation + lda #$88 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR + // [16] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (byte) $88 -- _deref_pbuc1=vbuc2 + lda #$88 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR // [17] call *((const void()*) songPlay) // play music jsr songPlay - // [18] (byte) irq1::barsin#0 ← (volatile byte) sinpos -- vbuz1=vbuz2 + // [18] (byte) irq1::colsin#0 ← (volatile byte) sinpos -- vbuyy=vbuz1 + // Set up colors behind logo, scroll and greets + ldy.z sinpos + // [19] phi from irq1::@3 to irq1::@16 [phi:irq1::@3->irq1::@16] + __b16_from___b3: + // [19] phi (byte) irq1::colsin#2 = (byte) irq1::colsin#0 [phi:irq1::@3->irq1::@16#0] -- register_copy + // [19] phi (byte) irq1::i#2 = (byte) 0 [phi:irq1::@3->irq1::@16#1] -- vbuxx=vbuc1 + ldx #0 + jmp __b16 + // irq1::@16 + __b16: + // [20] if((byte) irq1::i#2<(byte) $28) goto irq1::@17 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcc __b17 + // [21] phi from irq1::@16 to irq1::@18 [phi:irq1::@16->irq1::@18] + __b18_from___b16: + // [21] phi (byte) irq1::l#2 = (byte) 0 [phi:irq1::@16->irq1::@18#0] -- vbuxx=vbuc1 + ldx #0 + jmp __b18 + // Set all raster bars to black + // irq1::@18 + __b18: + // [22] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@19 -- vbuxx_neq_vbuc1_then_la1 + cpx #NUMBERL + bne __b19 + jmp __b20 + // irq1::@20 + __b20: + // [23] (byte) irq1::barsin#0 ← (volatile byte) sinpos -- vbuz1=vbuz2 // Big block of bars (16) lda.z sinpos sta.z barsin - // [19] phi from irq1::@17 to irq1::@18 [phi:irq1::@17->irq1::@18] - __b18_from___b17: - // [19] phi (byte) irq1::barsin#2 = (byte) irq1::barsin#0 [phi:irq1::@17->irq1::@18#0] -- register_copy - // [19] phi (byte) irq1::barcnt#2 = (byte) 0 [phi:irq1::@17->irq1::@18#1] -- vbuz1=vbuc1 + // [24] phi from irq1::@20 to irq1::@21 [phi:irq1::@20->irq1::@21] + __b21_from___b20: + // [24] phi (byte) irq1::barsin#2 = (byte) irq1::barsin#0 [phi:irq1::@20->irq1::@21#0] -- register_copy + // [24] phi (byte) irq1::barcnt#2 = (byte) 0 [phi:irq1::@20->irq1::@21#1] -- vbuz1=vbuc1 lda #0 sta.z barcnt - jmp __b18 - // irq1::@18 - __b18: - // [20] if((byte) irq1::barcnt#2<(byte) $10) goto irq1::@19 -- vbuz1_lt_vbuc1_then_la1 + jmp __b21 + // irq1::@21 + __b21: + // [25] if((byte) irq1::barcnt#2<(byte) $10) goto irq1::@22 -- vbuz1_lt_vbuc1_then_la1 lda.z barcnt cmp #$10 - bcc __b19 - // [21] phi from irq1::@18 to irq1::@25 [phi:irq1::@18->irq1::@25] - __b25_from___b18: - // [21] phi (byte) irq1::i2#2 = (byte) 0 [phi:irq1::@18->irq1::@25#0] -- vbuxx=vbuc1 + bcc __b22 + // [26] phi from irq1::@21 to irq1::@28 [phi:irq1::@21->irq1::@28] + __b28_from___b21: + // [26] phi (byte) irq1::i3#2 = (byte) 0 [phi:irq1::@21->irq1::@28#0] -- vbuxx=vbuc1 ldx #0 - jmp __b25 + jmp __b28 // Produce dark area behind text - // irq1::@25 - __b25: - // [22] if((byte) irq1::i2#2<(byte) $13) goto irq1::@26 -- vbuxx_lt_vbuc1_then_la1 + // irq1::@28 + __b28: + // [27] if((byte) irq1::i3#2<(byte) $13) goto irq1::@29 -- vbuxx_lt_vbuc1_then_la1 cpx #$13 - bcc __b26 + bcc __b29 + jmp __b30 + // irq1::@30 + __b30: + // [28] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // Show end of calculation + lda #0 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR + // [29] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + lda #0 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR jmp __breturn // irq1::@return __breturn: - // [23] return - exit interrupt(HARDWARE_STACK) + // [30] return - exit interrupt(HARDWARE_STACK) pla tay pla tax pla rti - // irq1::@26 - __b26: - // [24] (byte~) irq1::$22 ← *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i2#2) >> (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1 + // irq1::@29 + __b29: + // [31] (byte~) irq1::$23 ← *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i3#2) >> (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1 lda rasters+scrollypos,x lsr - // [25] (byte~) irq1::$23 ← (byte~) irq1::$22 & (byte) 7 -- vbuaa=vbuaa_band_vbuc1 + // [32] (byte~) irq1::$24 ← (byte~) irq1::$23 & (byte) 7 -- vbuaa=vbuaa_band_vbuc1 and #7 - // [26] *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i2#2) ← (byte~) irq1::$23 -- pbuc1_derefidx_vbuxx=vbuaa + // [33] *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i3#2) ← (byte~) irq1::$24 -- pbuc1_derefidx_vbuxx=vbuaa sta rasters+scrollypos,x - // [27] (byte) irq1::i2#1 ← ++ (byte) irq1::i2#2 -- vbuxx=_inc_vbuxx + // [34] (byte) irq1::i3#1 ← ++ (byte) irq1::i3#2 -- vbuxx=_inc_vbuxx inx - // [21] phi from irq1::@26 to irq1::@25 [phi:irq1::@26->irq1::@25] - __b25_from___b26: - // [21] phi (byte) irq1::i2#2 = (byte) irq1::i2#1 [phi:irq1::@26->irq1::@25#0] -- register_copy - jmp __b25 - // irq1::@19 - __b19: - // [28] (byte) irq1::idx#0 ← *((const byte*) SINUS + (byte) irq1::barsin#2) -- vbuyy=pbuc1_derefidx_vbuz1 + // [26] phi from irq1::@29 to irq1::@28 [phi:irq1::@29->irq1::@28] + __b28_from___b29: + // [26] phi (byte) irq1::i3#2 = (byte) irq1::i3#1 [phi:irq1::@29->irq1::@28#0] -- register_copy + jmp __b28 + // irq1::@22 + __b22: + // [35] (byte) irq1::idx#0 ← *((const byte*) SINUS + (byte) irq1::barsin#2) -- vbuyy=pbuc1_derefidx_vbuz1 ldx.z barsin ldy SINUS,x - // [29] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 << (byte) 4 -- vbuzz=vbuz1_rol_4 + // [36] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 << (byte) 4 -- vbuzz=vbuz1_rol_4 lda.z barcnt asl asl asl asl taz - // [30] phi from irq1::@19 to irq1::@20 [phi:irq1::@19->irq1::@20] - __b20_from___b19: - // [30] phi (byte) irq1::idx#3 = (byte) irq1::idx#0 [phi:irq1::@19->irq1::@20#0] -- register_copy - // [30] phi (byte) irq1::barcol#3 = (byte) irq1::barcol#0 [phi:irq1::@19->irq1::@20#1] -- register_copy - // [30] phi (byte) irq1::i#2 = (byte) 0 [phi:irq1::@19->irq1::@20#2] -- vbuxx=vbuc1 + // [37] phi from irq1::@22 to irq1::@23 [phi:irq1::@22->irq1::@23] + __b23_from___b22: + // [37] phi (byte) irq1::idx#3 = (byte) irq1::idx#0 [phi:irq1::@22->irq1::@23#0] -- register_copy + // [37] phi (byte) irq1::barcol#3 = (byte) irq1::barcol#0 [phi:irq1::@22->irq1::@23#1] -- register_copy + // [37] phi (byte) irq1::i1#2 = (byte) 0 [phi:irq1::@22->irq1::@23#2] -- vbuxx=vbuc1 ldx #0 - jmp __b20 - // irq1::@20 - __b20: - // [31] if((byte) irq1::i#2<(byte) $10) goto irq1::@21 -- vbuxx_lt_vbuc1_then_la1 + jmp __b23 + // irq1::@23 + __b23: + // [38] if((byte) irq1::i1#2<(byte) $10) goto irq1::@24 -- vbuxx_lt_vbuc1_then_la1 cpx #$10 - bcc __b21 - // [32] phi from irq1::@20 to irq1::@22 [phi:irq1::@20->irq1::@22] - __b22_from___b20: - // [32] phi (byte) irq1::idx#4 = (byte) irq1::idx#3 [phi:irq1::@20->irq1::@22#0] -- register_copy - // [32] phi (byte) irq1::barcol#4 = (byte) irq1::barcol#3 [phi:irq1::@20->irq1::@22#1] -- register_copy - // [32] phi (byte) irq1::i1#2 = (byte) 0 [phi:irq1::@20->irq1::@22#2] -- vbuxx=vbuc1 + bcc __b24 + // [39] phi from irq1::@23 to irq1::@25 [phi:irq1::@23->irq1::@25] + __b25_from___b23: + // [39] phi (byte) irq1::idx#4 = (byte) irq1::idx#3 [phi:irq1::@23->irq1::@25#0] -- register_copy + // [39] phi (byte) irq1::barcol#4 = (byte) irq1::barcol#3 [phi:irq1::@23->irq1::@25#1] -- register_copy + // [39] phi (byte) irq1::i2#2 = (byte) 0 [phi:irq1::@23->irq1::@25#2] -- vbuxx=vbuc1 ldx #0 - jmp __b22 - // irq1::@22 - __b22: - // [33] if((byte) irq1::i1#2<(byte) $f) goto irq1::@23 -- vbuxx_lt_vbuc1_then_la1 + jmp __b25 + // irq1::@25 + __b25: + // [40] if((byte) irq1::i2#2<(byte) $f) goto irq1::@26 -- vbuxx_lt_vbuc1_then_la1 cpx #$f - bcc __b23 - jmp __b24 - // irq1::@24 - __b24: - // [34] (byte) irq1::barsin#1 ← (byte) irq1::barsin#2 + (byte) $a -- vbuz1=vbuz1_plus_vbuc1 + bcc __b26 + jmp __b27 + // irq1::@27 + __b27: + // [41] (byte) irq1::barsin#1 ← (byte) irq1::barsin#2 + (byte) $a -- vbuz1=vbuz1_plus_vbuc1 lda #$a clc adc.z barsin sta.z barsin - // [35] (byte) irq1::barcnt#1 ← ++ (byte) irq1::barcnt#2 -- vbuz1=_inc_vbuz1 + // [42] (byte) irq1::barcnt#1 ← ++ (byte) irq1::barcnt#2 -- vbuz1=_inc_vbuz1 inc.z barcnt - // [19] phi from irq1::@24 to irq1::@18 [phi:irq1::@24->irq1::@18] - __b18_from___b24: - // [19] phi (byte) irq1::barsin#2 = (byte) irq1::barsin#1 [phi:irq1::@24->irq1::@18#0] -- register_copy - // [19] phi (byte) irq1::barcnt#2 = (byte) irq1::barcnt#1 [phi:irq1::@24->irq1::@18#1] -- register_copy - jmp __b18 - // irq1::@23 - __b23: - // [36] (byte) irq1::barcol#2 ← -- (byte) irq1::barcol#4 -- vbuzz=_dec_vbuzz + // [24] phi from irq1::@27 to irq1::@21 [phi:irq1::@27->irq1::@21] + __b21_from___b27: + // [24] phi (byte) irq1::barsin#2 = (byte) irq1::barsin#1 [phi:irq1::@27->irq1::@21#0] -- register_copy + // [24] phi (byte) irq1::barcnt#2 = (byte) irq1::barcnt#1 [phi:irq1::@27->irq1::@21#1] -- register_copy + jmp __b21 + // irq1::@26 + __b26: + // [43] (byte) irq1::barcol#2 ← -- (byte) irq1::barcol#4 -- vbuzz=_dec_vbuzz dez - // [37] *((const byte*) rasters + (byte) irq1::idx#4) ← (byte) irq1::barcol#2 -- pbuc1_derefidx_vbuyy=vbuzz + // [44] *((const byte*) rasters + (byte) irq1::idx#4) ← (byte) irq1::barcol#2 -- pbuc1_derefidx_vbuyy=vbuzz tza sta rasters,y - // [38] (byte) irq1::idx#2 ← ++ (byte) irq1::idx#4 -- vbuyy=_inc_vbuyy + // [45] (byte) irq1::idx#2 ← ++ (byte) irq1::idx#4 -- vbuyy=_inc_vbuyy iny - // [39] (byte) irq1::i1#1 ← ++ (byte) irq1::i1#2 -- vbuxx=_inc_vbuxx + // [46] (byte) irq1::i2#1 ← ++ (byte) irq1::i2#2 -- vbuxx=_inc_vbuxx inx - // [32] phi from irq1::@23 to irq1::@22 [phi:irq1::@23->irq1::@22] - __b22_from___b23: - // [32] phi (byte) irq1::idx#4 = (byte) irq1::idx#2 [phi:irq1::@23->irq1::@22#0] -- register_copy - // [32] phi (byte) irq1::barcol#4 = (byte) irq1::barcol#2 [phi:irq1::@23->irq1::@22#1] -- register_copy - // [32] phi (byte) irq1::i1#2 = (byte) irq1::i1#1 [phi:irq1::@23->irq1::@22#2] -- register_copy - jmp __b22 - // irq1::@21 - __b21: - // [40] *((const byte*) rasters + (byte) irq1::idx#3) ← (byte) irq1::barcol#3 -- pbuc1_derefidx_vbuyy=vbuzz + // [39] phi from irq1::@26 to irq1::@25 [phi:irq1::@26->irq1::@25] + __b25_from___b26: + // [39] phi (byte) irq1::idx#4 = (byte) irq1::idx#2 [phi:irq1::@26->irq1::@25#0] -- register_copy + // [39] phi (byte) irq1::barcol#4 = (byte) irq1::barcol#2 [phi:irq1::@26->irq1::@25#1] -- register_copy + // [39] phi (byte) irq1::i2#2 = (byte) irq1::i2#1 [phi:irq1::@26->irq1::@25#2] -- register_copy + jmp __b25 + // irq1::@24 + __b24: + // [47] *((const byte*) rasters + (byte) irq1::idx#3) ← (byte) irq1::barcol#3 -- pbuc1_derefidx_vbuyy=vbuzz tza sta rasters,y - // [41] (byte) irq1::idx#1 ← ++ (byte) irq1::idx#3 -- vbuyy=_inc_vbuyy + // [48] (byte) irq1::idx#1 ← ++ (byte) irq1::idx#3 -- vbuyy=_inc_vbuyy iny - // [42] (byte) irq1::barcol#1 ← ++ (byte) irq1::barcol#3 -- vbuzz=_inc_vbuzz + // [49] (byte) irq1::barcol#1 ← ++ (byte) irq1::barcol#3 -- vbuzz=_inc_vbuzz inz - // [43] (byte) irq1::i#1 ← ++ (byte) irq1::i#2 -- vbuxx=_inc_vbuxx + // [50] (byte) irq1::i1#1 ← ++ (byte) irq1::i1#2 -- vbuxx=_inc_vbuxx inx - // [30] phi from irq1::@21 to irq1::@20 [phi:irq1::@21->irq1::@20] - __b20_from___b21: - // [30] phi (byte) irq1::idx#3 = (byte) irq1::idx#1 [phi:irq1::@21->irq1::@20#0] -- register_copy - // [30] phi (byte) irq1::barcol#3 = (byte) irq1::barcol#1 [phi:irq1::@21->irq1::@20#1] -- register_copy - // [30] phi (byte) irq1::i#2 = (byte) irq1::i#1 [phi:irq1::@21->irq1::@20#2] -- register_copy - jmp __b20 - // irq1::@16 - __b16: - // [44] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [37] phi from irq1::@24 to irq1::@23 [phi:irq1::@24->irq1::@23] + __b23_from___b24: + // [37] phi (byte) irq1::idx#3 = (byte) irq1::idx#1 [phi:irq1::@24->irq1::@23#0] -- register_copy + // [37] phi (byte) irq1::barcol#3 = (byte) irq1::barcol#1 [phi:irq1::@24->irq1::@23#1] -- register_copy + // [37] phi (byte) irq1::i1#2 = (byte) irq1::i1#1 [phi:irq1::@24->irq1::@23#2] -- register_copy + jmp __b23 + // irq1::@19 + __b19: + // [51] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta rasters,x - // [45] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 -- vbuxx=_inc_vbuxx + // [52] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 -- vbuxx=_inc_vbuxx inx - // [15] phi from irq1::@16 to irq1::@15 [phi:irq1::@16->irq1::@15] - __b15_from___b16: - // [15] phi (byte) irq1::l#2 = (byte) irq1::l#1 [phi:irq1::@16->irq1::@15#0] -- register_copy - jmp __b15 + // [21] phi from irq1::@19 to irq1::@18 [phi:irq1::@19->irq1::@18] + __b18_from___b19: + // [21] phi (byte) irq1::l#2 = (byte) irq1::l#1 [phi:irq1::@19->irq1::@18#0] -- register_copy + jmp __b18 + // irq1::@17 + __b17: + // [53] (byte) irq1::col1#0 ← *((const byte*) SINUS + (byte) irq1::colsin#2) >> (byte) 2 -- vbuaa=pbuc1_derefidx_vbuyy_ror_2 + lda SINUS,y + lsr + lsr + // [54] *((const nomodify byte*) COLORRAM+(const nomodify byte) GREET_Y*(byte) $28 + (byte) irq1::i#2) ← (byte) irq1::col1#0 -- pbuc1_derefidx_vbuxx=vbuaa + sta COLORRAM+GREET_Y*$28,x + // [55] (byte) irq1::col1#1 ← (byte) irq1::col1#0 >> (byte) 1 -- vbuaa=vbuaa_ror_1 + // Logo colors + lsr + // [56] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28-(byte) 1 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa + sta COLORRAM+LOGO_Y*$28-1,x + // [57] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 1*(number) $28-(byte) 2 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa + sta COLORRAM+LOGO_Y*$28+1*$28-2,x + // [58] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 2*(number) $28-(byte) 3 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa + sta COLORRAM+LOGO_Y*$28+2*$28-3,x + // [59] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 3*(number) $28-(byte) 4 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa + sta COLORRAM+LOGO_Y*$28+3*$28-4,x + // [60] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 4*(number) $28-(byte) 5 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa + sta COLORRAM+LOGO_Y*$28+4*$28-5,x + // [61] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 5*(number) $28-(byte) 6 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa + sta COLORRAM+LOGO_Y*$28+5*$28-6,x + // [62] *((const nomodify byte*) COLORRAM+(const nomodify byte) SCROLL_Y*(byte) $28 + (byte) irq1::i#2) ← *((const byte*) PAL_GREEN + (byte) irq1::colsin#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy + // Scroll colors + lda PAL_GREEN,y + sta COLORRAM+SCROLL_Y*$28,x + // [63] (byte) irq1::colsin#1 ← ++ (byte) irq1::colsin#2 -- vbuyy=_inc_vbuyy + iny + // [64] (byte) irq1::i#1 ← ++ (byte) irq1::i#2 -- vbuxx=_inc_vbuxx + inx + // [19] phi from irq1::@17 to irq1::@16 [phi:irq1::@17->irq1::@16] + __b16_from___b17: + // [19] phi (byte) irq1::colsin#2 = (byte) irq1::colsin#1 [phi:irq1::@17->irq1::@16#0] -- register_copy + // [19] phi (byte) irq1::i#2 = (byte) irq1::i#1 [phi:irq1::@17->irq1::@16#1] -- register_copy + jmp __b16 // irq1::@2 __b2: - // [46] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) -- vbuaa=pbuc1_derefidx_vbuzz + // [65] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) -- vbuaa=pbuc1_derefidx_vbuzz tza tay lda rasters,y - // [47] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuaa + // [66] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuaa sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // [48] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuaa + // [67] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuaa sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR - // [49] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@3 -- vbuzz_lt_vbuc1_then_la1 + // [68] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@4 -- vbuzz_lt_vbuc1_then_la1 cpz #scrollypos - bcc __b3 - jmp __b9 - // irq1::@9 - __b9: - // [50] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@4 -- vbuzz_eq_vbuc1_then_la1 - cpz #scrollypos - beq __b4 + bcc __b4 jmp __b10 // irq1::@10 __b10: - // [51] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@5 -- vbuzz_eq_vbuc1_then_la1 - cpz #scrollypos+blackbar + // [69] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@5 -- vbuzz_eq_vbuc1_then_la1 + cpz #scrollypos beq __b5 jmp __b11 // irq1::@11 __b11: - // [52] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@6 -- vbuzz_neq_vbuc1_then_la1 - cpz #scrollypos+blackbar+1 - bne __b6_from___b11 + // [70] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@6 -- vbuzz_eq_vbuc1_then_la1 + cpz #scrollypos+blackbar + beq __b6 jmp __b12 // irq1::@12 __b12: - // [53] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) -- vbuaa=pbuc1_derefidx_vbuz1 - // if raster position > scrolly pos do zoom - ldy.z zoomx - lda SINUS,y - // [54] (volatile byte) zoomx ← ++ (volatile byte) zoomx -- vbuz1=_inc_vbuz1 - inc.z zoomx - // [55] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 -- _deref_pbuc1=vbuaa - sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL - // [56] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 -- vbuaa=vbuaa_plus_1 - inc - // [57] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 -- _deref_pbuc1=vbuaa - sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - // [58] if((volatile byte) zoomx!=(byte) 0) goto irq1::@6 -- vbuz1_neq_0_then_la1 - lda.z zoomx - cmp #0 - bne __b6_from___b12 + // [71] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@7 -- vbuzz_neq_vbuc1_then_la1 + cpz #scrollypos+blackbar+1 + bne __b7_from___b12 jmp __b13 // irq1::@13 __b13: - // [59] (volatile byte) greetnm ← ++ (volatile byte) greetnm -- vbuz1=_inc_vbuz1 - inc.z greetnm - // [60] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@6 -- vbuz1_neq_vbuc1_then_la1 - lda #GREETCOUNT - cmp.z greetnm - bne __b6_from___b13 + // [72] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) -- vbuaa=pbuc1_derefidx_vbuz1 + // if raster position > scrolly pos do zoom + ldy.z zoomx + lda SINUS,y + // [73] (volatile byte) zoomx ← ++ (volatile byte) zoomx -- vbuz1=_inc_vbuz1 + inc.z zoomx + // [74] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 -- _deref_pbuc1=vbuaa + sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL + // [75] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 -- vbuaa=vbuaa_plus_1 + inc + // [76] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 -- _deref_pbuc1=vbuaa + sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO + // [77] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 -- vbuz1_neq_0_then_la1 + lda.z zoomx + cmp #0 + bne __b7_from___b13 jmp __b14 // irq1::@14 __b14: - // [61] (volatile byte) greetnm ← (byte) 0 -- vbuz1=vbuc1 + // [78] (volatile byte) greetnm ← ++ (volatile byte) greetnm -- vbuz1=_inc_vbuz1 + inc.z greetnm + // [79] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 -- vbuz1_neq_vbuc1_then_la1 + lda #GREETCOUNT + cmp.z greetnm + bne __b7_from___b14 + jmp __b15 + // irq1::@15 + __b15: + // [80] (volatile byte) greetnm ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z greetnm - // [62] phi from irq1::@11 irq1::@12 irq1::@13 irq1::@14 irq1::@3 irq1::@4 irq1::@5 to irq1::@6 [phi:irq1::@11/irq1::@12/irq1::@13/irq1::@14/irq1::@3/irq1::@4/irq1::@5->irq1::@6] - __b6_from___b11: - __b6_from___b12: - __b6_from___b13: - __b6_from___b14: - __b6_from___b3: - __b6_from___b4: - __b6_from___b5: - // [62] phi (byte) irq1::wobblepos#7 = (byte) irq1::wobblepos#10 [phi:irq1::@11/irq1::@12/irq1::@13/irq1::@14/irq1::@3/irq1::@4/irq1::@5->irq1::@6#0] -- register_copy - jmp __b6 - // irq1::@6 - __b6: - // [63] (byte) irq1::raster#0 ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) -- vbuaa=_deref_pbuc1 - // Wait for the next raster line - lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER + // [81] phi from irq1::@12 irq1::@13 irq1::@14 irq1::@15 irq1::@4 irq1::@5 irq1::@6 to irq1::@7 [phi:irq1::@12/irq1::@13/irq1::@14/irq1::@15/irq1::@4/irq1::@5/irq1::@6->irq1::@7] + __b7_from___b12: + __b7_from___b13: + __b7_from___b14: + __b7_from___b15: + __b7_from___b4: + __b7_from___b5: + __b7_from___b6: + // [81] phi (byte) irq1::wobblepos#7 = (byte) irq1::wobblepos#10 [phi:irq1::@12/irq1::@13/irq1::@14/irq1::@15/irq1::@4/irq1::@5/irq1::@6->irq1::@7#0] -- register_copy jmp __b7 // irq1::@7 __b7: - // [64] if((byte) irq1::raster#0==*((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq1::@7 -- vbuaa_eq__deref_pbuc1_then_la1 - cmp VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER - beq __b7 + // [82] (byte) irq1::raster#0 ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) -- vbuaa=_deref_pbuc1 + // Wait for the next raster line + lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER jmp __b8 // irq1::@8 __b8: - // [65] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 -- vbuzz=_inc_vbuzz + // [83] if((byte) irq1::raster#0==*((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq1::@8 -- vbuaa_eq__deref_pbuc1_then_la1 + cmp VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER + beq __b8 + jmp __b9 + // irq1::@9 + __b9: + // [84] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 -- vbuzz=_inc_vbuzz inz - // [13] phi from irq1::@8 to irq1::@1 [phi:irq1::@8->irq1::@1] - __b1_from___b8: - // [13] phi (byte) irq1::wobblepos#10 = (byte) irq1::wobblepos#7 [phi:irq1::@8->irq1::@1#0] -- register_copy - // [13] phi (byte) irq1::line#10 = (byte) irq1::line#1 [phi:irq1::@8->irq1::@1#1] -- register_copy + // [13] phi from irq1::@9 to irq1::@1 [phi:irq1::@9->irq1::@1] + __b1_from___b9: + // [13] phi (byte) irq1::wobblepos#10 = (byte) irq1::wobblepos#7 [phi:irq1::@9->irq1::@1#0] -- register_copy + // [13] phi (byte) irq1::line#10 = (byte) irq1::line#1 [phi:irq1::@9->irq1::@1#1] -- register_copy jmp __b1 - // irq1::@5 - __b5: - // [66] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 + // irq1::@6 + __b6: + // [85] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 // if raster position > scrolly pos do nozoom // default value lda #$50 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - jmp __b6_from___b5 - // irq1::@4 - __b4: - // [67] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 + jmp __b7_from___b6 + // irq1::@5 + __b5: + // [86] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 // if raster position = scrolly pos do scrolly // no wobbling from this point lda #$50 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - // [68] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos -- _deref_pbuc1=vbuz1 + // [87] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos -- _deref_pbuc1=vbuz1 // set softscroll lda.z xpos sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2 - jmp __b6_from___b4 - // irq1::@3 - __b3: - // [69] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) -- vbuaa=vbuc1_plus_pbuc2_derefidx_vbuxx - lda #$28 - clc - adc SINUS,x - // [70] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$12 -- _deref_pbuc1=vbuaa + jmp __b7_from___b5 + // irq1::@4 + __b4: + // [88] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← *((const byte*) SINUS + (byte) irq1::wobblepos#10) -- _deref_pbuc1=pbuc2_derefidx_vbuxx // if raster position < scrolly pos do wobble Logo! + lda SINUS,x sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - // [71] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 -- vbuxx=_inc_vbuxx + // [89] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 -- vbuxx=_inc_vbuxx inx - // [72] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 -- _deref_pbuc1=vbuc2 + // [90] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 -- _deref_pbuc1=vbuc2 // No zooming lda #$66 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL - jmp __b6_from___b3 + jmp __b7_from___b4 } // main main: { - // [73] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 -- _deref_pbuc1=vbuc2 + // [91] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 -- _deref_pbuc1=vbuc2 // Enable MEGA65 features lda #$47 sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY - // [74] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 -- _deref_pbuc1=vbuc2 + // [92] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 -- _deref_pbuc1=vbuc2 lda #$53 sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY - // [75] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (byte) $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 + // [93] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (byte) $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Enable 48MHz fast mode lda #$40 ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB - // [76] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (byte) $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 + // [94] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (byte) $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 lda #$40 ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC - // [77] call memset - // Clear screen - // [101] phi from main to memset [phi:main->memset] - memset_from_main: - jsr memset - jmp __b6 - // main::@6 - __b6: // asm { lda#0 } // Initialize music lda #0 - // [79] call *((const void()*) songInit) + // [96] call *((const void()*) songInit) jsr songInit - // [80] phi from main::@6 to main::@1 [phi:main::@6->main::@1] - __b1_from___b6: - // [80] phi (byte) main::i1#2 = (byte) 0 [phi:main::@6->main::@1#0] -- vbuxx=vbuc1 + // [97] call memset + // Clear screen + // [124] phi from main to memset [phi:main->memset] + memset_from_main: + jsr memset + // [98] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [98] phi (byte) main::i1#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 ldx #0 jmp __b1 // Put MEGA logo on screen // main::@1 __b1: - // [81] if((byte) main::i1#2<(byte) $bc*(const byte) SIZEOF_BYTE) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [99] if((byte) main::i1#2<(byte) $bc*(const byte) SIZEOF_BYTE) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$bc*SIZEOF_BYTE bcc __b2 - // [82] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [100] phi from main::@1 to main::@3 [phi:main::@1->main::@3] __b3_from___b1: - // [82] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuxx=vbuc1 + // [100] phi (byte) main::i2#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuxx=vbuc1 ldx #0 jmp __b3 - // [82] phi from main::@3 to main::@3 [phi:main::@3->main::@3] - __b3_from___b3: - // [82] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy - jmp __b3 + // Put dummy text up for scroll and greet // main::@3 __b3: - // [83] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [101] if((byte) main::i2#2<(byte) $28) goto main::@4 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcc __b4 + // [102] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + __b5_from___b3: + // [102] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#0] -- vbuxx=vbuc1 + ldx #0 + jmp __b5 + // [102] phi from main::@5 to main::@5 [phi:main::@5->main::@5] + __b5_from___b5: + // [102] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@5->main::@5#0] -- register_copy + jmp __b5 + // main::@5 + __b5: + // [103] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda PAL_RED,x sta PALETTE_RED,x - // [84] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [104] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda PAL_GREEN,x sta PALETTE_GREEN,x - // [85] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [105] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda PAL_BLUE,x sta PALETTE_BLUE,x - // [86] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [106] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx inx - // [87] if((byte) main::i#1!=(byte) 0) goto main::@3 -- vbuxx_neq_0_then_la1 + // [107] if((byte) main::i#1!=(byte) 0) goto main::@5 -- vbuxx_neq_0_then_la1 cpx #0 - bne __b3_from___b3 - jmp __b4 - // main::@4 - __b4: + bne __b5_from___b5 + jmp __b6 + // main::@6 + __b6: // asm { sei } // Set up raster interrupts C64 style sei - // [89] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [109] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT - // [90] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 -- _deref_pbuc1=vbuc2 + // [110] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 -- _deref_pbuc1=vbuc2 // Set raster line to 0x16 lda #$16 sta VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER - // [91] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [111] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 lda #$7f and VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1 sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1 - // [92] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [112] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE - // [93] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() -- _deref_qprc1=pprc2 + // [113] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() -- _deref_qprc1=pprc2 // Set the IRQ routine lda #irq1 sta HARDWARE_IRQ+1 - // [94] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [114] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // no kernal or BASIC rom visible lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR - // [95] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [115] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [96] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 -- _deref_pbuc1=vbuc2 + // [116] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 -- _deref_pbuc1=vbuc2 // open sideborder lda #1 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO // asm { cli } // Enable IRQ cli - // [98] phi from main::@4 main::@5 to main::@5 [phi:main::@4/main::@5->main::@5] - __b5_from___b4: - __b5_from___b5: - jmp __b5 - // main::@5 - __b5: - jmp __b5_from___b5 + // [118] phi from main::@6 main::@7 to main::@7 [phi:main::@6/main::@7->main::@7] + __b7_from___b6: + __b7_from___b7: + jmp __b7 + // main::@7 + __b7: + jmp __b7_from___b7 + // main::@4 + __b4: + // [119] *((const nomodify byte*) SCREEN+(const nomodify byte) SCROLL_Y*(byte) $28 + (byte) main::i2#2) ← (byte) 'a' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'a' + sta SCREEN+SCROLL_Y*$28,x + // [120] *((const nomodify byte*) SCREEN+(const nomodify byte) GREET_Y*(byte) $28 + (byte) main::i2#2) ← (byte) 'b' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'b' + sta SCREEN+GREET_Y*$28,x + // [121] (byte) main::i2#1 ← ++ (byte) main::i2#2 -- vbuxx=_inc_vbuxx + inx + // [100] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + __b3_from___b4: + // [100] phi (byte) main::i2#2 = (byte) main::i2#1 [phi:main::@4->main::@3#0] -- register_copy + jmp __b3 // main::@2 __b2: - // [99] *((const nomodify byte*) SCREEN+(byte)(number) 3*(number) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [122] *((const nomodify byte*) SCREEN+(const nomodify byte) LOGO_Y*(byte) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda MEGA_LOGO,x - sta SCREEN+3*$28,x - // [100] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuxx=_inc_vbuxx + sta SCREEN+LOGO_Y*$28,x + // [123] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuxx=_inc_vbuxx inx - // [80] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [98] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: - // [80] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@2->main::@1#0] -- register_copy + // [98] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@2->main::@1#0] -- register_copy jmp __b1 } // memset @@ -3385,9 +3901,9 @@ memset: { .label str = SCREEN .label end = str+num .label dst = 4 - // [102] phi from memset to memset::@1 [phi:memset->memset::@1] + // [125] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [102] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [125] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -3395,7 +3911,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [103] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [126] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -3405,19 +3921,19 @@ memset: { jmp __breturn // memset::@return __breturn: - // [104] return + // [127] return rts // memset::@2 __b2: - // [105] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [128] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [129] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inw.z dst - // [102] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [125] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [102] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [125] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data @@ -3427,7 +3943,7 @@ SINUS: .fill 256, 91.5 + 91.5*sin(i*2*PI/256) // Moving Raster Bars - rasters: .fill $100, 0 + rasters: .fill NUMBERL, 0 // A MEGA logo MEGA_LOGO: .byte $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $20, $cf, $20, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $cf, $cf, $20, $20, $20, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $20, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $cf, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $20, $20, $20, $cf PAL_RED: .byte 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, $16, $c6, $a7, $88, $49, $5a, $2b, $1c, $ac, $ad, $8e, $8f, $ff, $ff, $ff, $ff, $c6, $77, $48, $29, $e9, $fa, $cb, $cc, $5d, $4e, $2f, $ff, $ff, $ff, $ff, $ff, $57, $18, $f8, $d9, $aa, $8b, $6c, $5d, $ed, $de, $cf, $ff, $ff, $ff, $ff, $ff, $26, $e6, $b7, $a8, $69, $5a, $3b, $3c, $dc, $cd, $ae, $9f, $ff, $ff, $ff, $ff, $65, $16, $17, $f7, $d8, $b9, $9a, $8b, $2c, $d, $fd, $ee, $cf, $ff, $ff, $ff, $64, $15, 6, $e6, $c7, $a8, $99, $8a, $1b, $c, $fc, $fd, $ee, $cf, $ff, $ff, $12, $d2, $d3, $b4, $95, $86, $77, $78, 9, $69, $ea, $fb, $dc, $ad, $ae, $af, $f0, $c1, $c2, $a3, $84, $85, $76, $67, 8, $f8, $e9, $da, $db, $bc, $bd, $ae, $40, $11, $12, $f2, $e3, $d4, $c5, $c6, $47, $38, $39, $2a, $1b, $c, $d, $ed, 0, 0, $f0, $d1, $c2, $b3, $a4, $95, $36, $27, $28, $29, $f9, $ea, $eb, $ec, $70, $41, $22, $23, $f3, $f4, $e5, $e6, $77, $78, $69, $7a, $3b, $3c, $3d, $3e, $a1, $82, $63, $54, $35, $26, 7, 8, $98, $99, $8a, $7b, $5c, $5d, $3e, $3f, $33, 4, $d4, $d5, $a6, $a7, $88, $89, $1a, $ab, $fb, $ec, $cd, $be, $af, $ff, $b4, $85, $56, $47, $18, 9, $f9, $ea, $7b, $7c, $5d, $5e, $2f, $ef, $ff, $ff, 6, $d6, $a7, $98, $59, $4a, $2b, $2c, $bc, $ad, $8e, $8f, $ff, $ff, $ff, $ff @@ -3444,97 +3960,111 @@ Removing instruction jmp __init1 Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b1 -Removing instruction jmp __b15 -Removing instruction jmp __b17 +Removing instruction jmp __b3 +Removing instruction jmp __b16 Removing instruction jmp __b18 -Removing instruction jmp __b25 -Removing instruction jmp __breturn Removing instruction jmp __b20 -Removing instruction jmp __b22 -Removing instruction jmp __b24 -Removing instruction jmp __b9 +Removing instruction jmp __b21 +Removing instruction jmp __b28 +Removing instruction jmp __b30 +Removing instruction jmp __breturn +Removing instruction jmp __b23 +Removing instruction jmp __b25 +Removing instruction jmp __b27 Removing instruction jmp __b10 Removing instruction jmp __b11 Removing instruction jmp __b12 Removing instruction jmp __b13 Removing instruction jmp __b14 -Removing instruction jmp __b6 +Removing instruction jmp __b15 Removing instruction jmp __b7 Removing instruction jmp __b8 -Removing instruction jmp __b6 +Removing instruction jmp __b9 Removing instruction jmp __b1 Removing instruction jmp __b3 -Removing instruction jmp __b4 Removing instruction jmp __b5 +Removing instruction jmp __b6 +Removing instruction jmp __b7 Removing instruction jmp __b1 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 +Removing instruction lda #$88 +Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Replacing label __b6_from___b11 with __b6 -Replacing label __b6_from___b12 with __b6 -Replacing label __b6_from___b13 with __b6 -Replacing label __b6_from___b5 with __b6 -Replacing label __b6_from___b4 with __b6 -Replacing label __b6_from___b3 with __b6 -Replacing label __b3_from___b3 with __b3 +Replacing label __b7_from___b12 with __b7 +Replacing label __b7_from___b13 with __b7 +Replacing label __b7_from___b14 with __b7 +Replacing label __b7_from___b6 with __b7 +Replacing label __b7_from___b5 with __b7 +Replacing label __b7_from___b4 with __b7 Replacing label __b5_from___b5 with __b5 +Replacing label __b7_from___b7 with __b7 Removing instruction __b1_from___init1: -Removing instruction __b6_from___b11: -Removing instruction __b6_from___b12: -Removing instruction __b6_from___b13: -Removing instruction __b6_from___b14: -Removing instruction __b6_from___b3: -Removing instruction __b6_from___b4: -Removing instruction __b6_from___b5: -Removing instruction __b3_from___b3: -Removing instruction __b5_from___b4: +Removing instruction __b7_from___b12: +Removing instruction __b7_from___b13: +Removing instruction __b7_from___b14: +Removing instruction __b7_from___b15: +Removing instruction __b7_from___b4: +Removing instruction __b7_from___b5: +Removing instruction __b7_from___b6: Removing instruction __b5_from___b5: +Removing instruction __b7_from___b6: +Removing instruction __b7_from___b7: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction __init1: Removing instruction __b1: Removing instruction __breturn: Removing instruction __b1_from_irq1: -Removing instruction __b15_from___b1: -Removing instruction __b17: -Removing instruction __b18_from___b17: -Removing instruction __b25_from___b18: +Removing instruction __b3: +Removing instruction __b16_from___b3: +Removing instruction __b18_from___b16: +Removing instruction __b20: +Removing instruction __b21_from___b20: +Removing instruction __b28_from___b21: +Removing instruction __b30: Removing instruction __breturn: +Removing instruction __b28_from___b29: +Removing instruction __b23_from___b22: +Removing instruction __b25_from___b23: +Removing instruction __b27: +Removing instruction __b21_from___b27: Removing instruction __b25_from___b26: -Removing instruction __b20_from___b19: -Removing instruction __b22_from___b20: -Removing instruction __b24: -Removing instruction __b18_from___b24: -Removing instruction __b22_from___b23: -Removing instruction __b20_from___b21: -Removing instruction __b15_from___b16: -Removing instruction __b9: +Removing instruction __b23_from___b24: +Removing instruction __b18_from___b19: +Removing instruction __b16_from___b17: Removing instruction __b10: Removing instruction __b11: Removing instruction __b12: Removing instruction __b13: Removing instruction __b14: -Removing instruction __b8: -Removing instruction __b1_from___b8: +Removing instruction __b15: +Removing instruction __b9: +Removing instruction __b1_from___b9: Removing instruction memset_from_main: -Removing instruction __b6: -Removing instruction __b1_from___b6: +Removing instruction __b1_from_main: Removing instruction __b3_from___b1: -Removing instruction __b4: +Removing instruction __b5_from___b3: +Removing instruction __b6: +Removing instruction __b3_from___b4: Removing instruction __b1_from___b2: Removing instruction __b1_from_memset: Removing instruction __breturn: Removing instruction __b1_from___b2: Succesful ASM optimization Pass5UnusedLabelElimination -Removing instruction jmp __b3 +Removing instruction jmp __b5 Succesful ASM optimization Pass5NextJumpElimination +Fixing long branch [128] bne __b2 to beq FINAL SYMBOL TABLE (const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f +(const nomodify byte*) COLORRAM = (byte*) 55296 (const nomodify byte) GREETCOUNT = (byte) $10 +(const nomodify byte) GREET_Y = (byte) $14 (const nomodify void()**) HARDWARE_IRQ = (void()**) 65534 (const nomodify byte) IRQ_RASTER = (byte) 1 +(const nomodify byte) LOGO_Y = (byte) 3 (byte) MEGA65_VICIV::ALPHADELAY (byte) MEGA65_VICIV::B0PIX (byte) MEGA65_VICIV::B0_ADDR @@ -3820,7 +4350,7 @@ FINAL SYMBOL TABLE (byte) MOS6581_SID::POT_X (byte) MOS6581_SID::POT_Y (byte) MOS6581_SID::VOLUME_FILTER_MODE -(const nomodify byte) NUMBERL = (byte) $e0 +(const nomodify byte) NUMBERL = (byte) $d8 (const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = (byte) $5a (const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = (byte) $31 (const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = (byte) $54 @@ -3831,6 +4361,8 @@ FINAL SYMBOL TABLE (const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = (byte) $20 (const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY = (byte) $2f (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d +(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR = (byte) $21 +(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = (byte) $20 (const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1 = (byte) $11 (const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = (byte) $16 (const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE = (byte) $1a @@ -3847,6 +4379,7 @@ FINAL SYMBOL TABLE (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 (const nomodify byte) PROCPORT_RAM_IO = (byte) 5 (const nomodify byte*) SCREEN = (byte*) 1024 +(const nomodify byte) SCROLL_Y = (byte) $d (const byte*) SINUS[(number) $100] = kickasm {{ .fill 256, 91.5 + 91.5*sin(i*2*PI/256) }} (const byte) SIZEOF_BYTE = (byte) 1 @@ -3859,11 +4392,10 @@ FINAL SYMBOL TABLE (label) __start::@1 (label) __start::@return (label) __start::__init1 -(volatile byte) greetnm loadstore zp[1]:9 1.3529411764705883 +(volatile byte) greetnm loadstore zp[1]:9 1.3939393939393938 interrupt(HARDWARE_STACK)(void()) irq1() -(byte~) irq1::$12 reg byte a 22.0 -(byte~) irq1::$22 reg byte a 22.0 (byte~) irq1::$23 reg byte a 22.0 +(byte~) irq1::$24 reg byte a 22.0 (byte~) irq1::$7 reg byte a 22.0 (label) irq1::@1 (label) irq1::@10 @@ -3884,7 +4416,11 @@ interrupt(HARDWARE_STACK)(void()) irq1() (label) irq1::@24 (label) irq1::@25 (label) irq1::@26 +(label) irq1::@27 +(label) irq1::@28 +(label) irq1::@29 (label) irq1::@3 +(label) irq1::@30 (label) irq1::@4 (label) irq1::@5 (label) irq1::@6 @@ -3908,15 +4444,25 @@ interrupt(HARDWARE_STACK)(void()) irq1() (const nomodify byte) irq1::blackbar = (byte) $13 (byte) irq1::col (byte) irq1::col#0 reg byte a 16.5 +(byte) irq1::col1 +(byte) irq1::col1#0 reg byte a 16.5 +(byte) irq1::col1#1 reg byte a 12.833333333333334 +(byte) irq1::colsin +(byte) irq1::colsin#0 reg byte y 4.0 +(byte) irq1::colsin#1 reg byte y 11.0 +(byte) irq1::colsin#2 reg byte y 3.833333333333333 (byte) irq1::i -(byte) irq1::i#1 reg byte x 202.0 -(byte) irq1::i#2 reg byte x 60.599999999999994 +(byte) irq1::i#1 reg byte x 22.0 +(byte) irq1::i#2 reg byte x 9.307692307692307 (byte) irq1::i1 (byte) irq1::i1#1 reg byte x 202.0 (byte) irq1::i1#2 reg byte x 60.599999999999994 (byte) irq1::i2 -(byte) irq1::i2#1 reg byte x 22.0 -(byte) irq1::i2#2 reg byte x 11.0 +(byte) irq1::i2#1 reg byte x 202.0 +(byte) irq1::i2#2 reg byte x 60.599999999999994 +(byte) irq1::i3 +(byte) irq1::i3#1 reg byte x 22.0 +(byte) irq1::i3#2 reg byte x 11.0 (byte) irq1::idx (byte) irq1::idx#0 reg byte y 11.0 (byte) irq1::idx#1 reg byte y 67.33333333333333 @@ -3928,14 +4474,14 @@ interrupt(HARDWARE_STACK)(void()) irq1() (byte) irq1::l#2 reg byte x 14.666666666666666 (byte) irq1::line (byte) irq1::line#1 reg byte z 22.0 -(byte) irq1::line#10 reg byte z 3.142857142857143 +(byte) irq1::line#10 reg byte z 3.259259259259259 (byte) irq1::raster (byte) irq1::raster#0 reg byte a 56.0 (const nomodify byte) irq1::scrollypos = (byte) $66 (byte) irq1::wobblepos (byte) irq1::wobblepos#0 reg byte x 4.0 (byte) irq1::wobblepos#1 reg byte x 11.0 -(byte) irq1::wobblepos#10 reg byte x 4.391304347826087 +(byte) irq1::wobblepos#10 reg byte x 4.590909090909091 (byte) irq1::wobblepos#7 reg byte x 22.0 (byte) irq1::zoomval (byte) irq1::zoomval#0 reg byte a 11.0 @@ -3946,12 +4492,16 @@ interrupt(HARDWARE_STACK)(void()) irq1() (label) main::@4 (label) main::@5 (label) main::@6 +(label) main::@7 (byte) main::i (byte) main::i#1 reg byte x 151.5 (byte) main::i#2 reg byte x 202.0 (byte) main::i1 (byte) main::i1#1 reg byte x 202.0 (byte) main::i1#2 reg byte x 168.33333333333331 +(byte) main::i2 +(byte) main::i2#1 reg byte x 202.0 +(byte) main::i2#2 reg byte x 126.25 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -3968,41 +4518,45 @@ interrupt(HARDWARE_STACK)(void()) irq1() (void*) memset::return (void*) memset::str (const void*) memset::str#0 str = (void*)(const nomodify byte*) SCREEN -(const byte*) rasters[(number) $100] = { fill( $100, 0) } -(volatile byte) sinpos loadstore zp[1]:6 0.2564102564102564 +(const byte*) rasters[(const nomodify byte) NUMBERL] = { fill( NUMBERL, 0) } +(volatile byte) sinpos loadstore zp[1]:6 0.2181818181818182 (const void()*) songInit = (void()*)(const byte*) SONG (const void()*) songPlay = (void()*)(const byte*) SONG+(byte) 3 -(volatile byte) xpos loadstore zp[1]:8 0.3823529411764706 -(volatile byte) zoomx loadstore zp[1]:7 1.3529411764705883 +(volatile byte) xpos loadstore zp[1]:8 0.3939393939393939 +(volatile byte) zoomx loadstore zp[1]:7 1.3939393939393938 reg byte z [ irq1::line#10 irq1::line#1 ] reg byte x [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] +reg byte x [ irq1::i#2 irq1::i#1 ] +reg byte y [ irq1::colsin#2 irq1::colsin#1 irq1::colsin#0 ] reg byte x [ irq1::l#2 irq1::l#1 ] zp[1]:2 [ irq1::barcnt#2 irq1::barcnt#1 ] zp[1]:3 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] -reg byte x [ irq1::i2#2 irq1::i2#1 ] -reg byte x [ irq1::i#2 irq1::i#1 ] +reg byte x [ irq1::i3#2 irq1::i3#1 ] reg byte x [ irq1::i1#2 irq1::i1#1 ] +reg byte x [ irq1::i2#2 irq1::i2#1 ] reg byte z [ irq1::barcol#4 irq1::barcol#3 irq1::barcol#0 irq1::barcol#1 irq1::barcol#2 ] reg byte y [ irq1::idx#4 irq1::idx#3 irq1::idx#0 irq1::idx#1 irq1::idx#2 ] reg byte x [ main::i1#2 main::i1#1 ] +reg byte x [ main::i2#2 main::i2#1 ] reg byte x [ main::i#2 main::i#1 ] zp[2]:4 [ memset::dst#2 memset::dst#1 ] zp[1]:6 [ sinpos ] zp[1]:7 [ zoomx ] zp[1]:8 [ xpos ] zp[1]:9 [ greetnm ] -reg byte a [ irq1::$22 ] reg byte a [ irq1::$23 ] +reg byte a [ irq1::$24 ] +reg byte a [ irq1::col1#0 ] +reg byte a [ irq1::col1#1 ] reg byte a [ irq1::col#0 ] reg byte a [ irq1::zoomval#0 ] reg byte a [ irq1::$7 ] reg byte a [ irq1::raster#0 ] -reg byte a [ irq1::$12 ] FINAL ASSEMBLER -Score: 8503 +Score: 9456 // File Comments // Raster65 Demo Implementation in C @@ -4031,10 +4585,16 @@ Score: 8503 .const PROCPORT_DDR_MEMORY_MASK = 7 // RAM in 0xA000, 0xE000 I/O in 0xD000 .const PROCPORT_RAM_IO = 5 + // Logo y-position (char row on screen) + .const LOGO_Y = 3 + // Scroll y-position (char row on screen) + .const SCROLL_Y = $d + // Greeting y-position (char row on screen) + .const GREET_Y = $14 // The number of greetings .const GREETCOUNT = $10 // The number of raster lines - .const NUMBERL = $e0 + .const NUMBERL = $d8 .const OFFSET_STRUCT_MOS4569_VICIII_KEY = $2f .const OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = $31 .const OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = $54 @@ -4048,6 +4608,8 @@ Score: 8503 .const OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = $16 .const OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = $20 .const OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR = $21 + .const OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = $20 + .const OFFSET_STRUCT_MOS6569_VICII_BG_COLOR = $21 .const OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO = $4c .const OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = $5a .const SIZEOF_BYTE = 1 @@ -4061,6 +4623,8 @@ Score: 8503 .label VICIII = $d000 // The VIC IV .label VICIV = $d000 + // Color Ram + .label COLORRAM = $d800 // Palette RED .label PALETTE_RED = $d100 // Palette GREEN @@ -4157,422 +4721,508 @@ irq1: { // for(char line=0;line!=NUMBERL;line++) // [14] if((byte) irq1::line#10!=(const nomodify byte) NUMBERL) goto irq1::@2 -- vbuzz_neq_vbuc1_then_la1 cpz #NUMBERL - bne __b2 - // [15] phi from irq1::@1 to irq1::@15 [phi:irq1::@1->irq1::@15] - // [15] phi (byte) irq1::l#2 = (byte) 0 [phi:irq1::@1->irq1::@15#0] -- vbuxx=vbuc1 - ldx #0 - // Set all raster bars to black - // irq1::@15 - __b15: - // for(char l=0;l!=NUMBERL;l++) - // [16] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@16 -- vbuxx_neq_vbuc1_then_la1 - cpx #NUMBERL - bne __b16 - // irq1::@17 + beq !__b2+ + jmp __b2 + !__b2: + // irq1::@3 + // VICII->BORDER_COLOR = 0x88 + // [15] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (byte) $88 -- _deref_pbuc1=vbuc2 + // Show start of calculation + lda #$88 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR + // VICII->BG_COLOR = 0x88 + // [16] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (byte) $88 -- _deref_pbuc1=vbuc2 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR // (*songPlay)() // [17] call *((const void()*) songPlay) // play music jsr songPlay + // colsin = sinpos + // [18] (byte) irq1::colsin#0 ← (volatile byte) sinpos -- vbuyy=vbuz1 + // Set up colors behind logo, scroll and greets + ldy.z sinpos + // [19] phi from irq1::@3 to irq1::@16 [phi:irq1::@3->irq1::@16] + // [19] phi (byte) irq1::colsin#2 = (byte) irq1::colsin#0 [phi:irq1::@3->irq1::@16#0] -- register_copy + // [19] phi (byte) irq1::i#2 = (byte) 0 [phi:irq1::@3->irq1::@16#1] -- vbuxx=vbuc1 + ldx #0 + // irq1::@16 + __b16: + // for(char i=0;i<40;i++) + // [20] if((byte) irq1::i#2<(byte) $28) goto irq1::@17 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcc __b17 + // [21] phi from irq1::@16 to irq1::@18 [phi:irq1::@16->irq1::@18] + // [21] phi (byte) irq1::l#2 = (byte) 0 [phi:irq1::@16->irq1::@18#0] -- vbuxx=vbuc1 + ldx #0 + // Set all raster bars to black + // irq1::@18 + __b18: + // for(char l=0;l!=NUMBERL;l++) + // [22] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@19 -- vbuxx_neq_vbuc1_then_la1 + cpx #NUMBERL + bne __b19 + // irq1::@20 // barsin = sinpos - // [18] (byte) irq1::barsin#0 ← (volatile byte) sinpos -- vbuz1=vbuz2 + // [23] (byte) irq1::barsin#0 ← (volatile byte) sinpos -- vbuz1=vbuz2 // Big block of bars (16) lda.z sinpos sta.z barsin - // [19] phi from irq1::@17 to irq1::@18 [phi:irq1::@17->irq1::@18] - // [19] phi (byte) irq1::barsin#2 = (byte) irq1::barsin#0 [phi:irq1::@17->irq1::@18#0] -- register_copy - // [19] phi (byte) irq1::barcnt#2 = (byte) 0 [phi:irq1::@17->irq1::@18#1] -- vbuz1=vbuc1 + // [24] phi from irq1::@20 to irq1::@21 [phi:irq1::@20->irq1::@21] + // [24] phi (byte) irq1::barsin#2 = (byte) irq1::barsin#0 [phi:irq1::@20->irq1::@21#0] -- register_copy + // [24] phi (byte) irq1::barcnt#2 = (byte) 0 [phi:irq1::@20->irq1::@21#1] -- vbuz1=vbuc1 lda #0 sta.z barcnt - // irq1::@18 - __b18: + // irq1::@21 + __b21: // for(char barcnt=0; barcnt<16; barcnt++) - // [20] if((byte) irq1::barcnt#2<(byte) $10) goto irq1::@19 -- vbuz1_lt_vbuc1_then_la1 + // [25] if((byte) irq1::barcnt#2<(byte) $10) goto irq1::@22 -- vbuz1_lt_vbuc1_then_la1 lda.z barcnt cmp #$10 - bcc __b19 - // [21] phi from irq1::@18 to irq1::@25 [phi:irq1::@18->irq1::@25] - // [21] phi (byte) irq1::i2#2 = (byte) 0 [phi:irq1::@18->irq1::@25#0] -- vbuxx=vbuc1 + bcc __b22 + // [26] phi from irq1::@21 to irq1::@28 [phi:irq1::@21->irq1::@28] + // [26] phi (byte) irq1::i3#2 = (byte) 0 [phi:irq1::@21->irq1::@28#0] -- vbuxx=vbuc1 ldx #0 // Produce dark area behind text - // irq1::@25 - __b25: + // irq1::@28 + __b28: // for(char i=0;i<19;i++) - // [22] if((byte) irq1::i2#2<(byte) $13) goto irq1::@26 -- vbuxx_lt_vbuc1_then_la1 + // [27] if((byte) irq1::i3#2<(byte) $13) goto irq1::@29 -- vbuxx_lt_vbuc1_then_la1 cpx #$13 - bcc __b26 + bcc __b29 + // irq1::@30 + // VICII->BORDER_COLOR = 0 + // [28] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // Show end of calculation + lda #0 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR + // VICII->BG_COLOR = 0 + // [29] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + sta VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR // irq1::@return // } - // [23] return - exit interrupt(HARDWARE_STACK) + // [30] return - exit interrupt(HARDWARE_STACK) pla tay pla tax pla rti - // irq1::@26 - __b26: + // irq1::@29 + __b29: // rasters[scrollypos+i] /2 - // [24] (byte~) irq1::$22 ← *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i2#2) >> (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1 + // [31] (byte~) irq1::$23 ← *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i3#2) >> (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1 lda rasters+scrollypos,x lsr // rasters[scrollypos+i] /2 & 7 - // [25] (byte~) irq1::$23 ← (byte~) irq1::$22 & (byte) 7 -- vbuaa=vbuaa_band_vbuc1 + // [32] (byte~) irq1::$24 ← (byte~) irq1::$23 & (byte) 7 -- vbuaa=vbuaa_band_vbuc1 and #7 // rasters[scrollypos+i] = rasters[scrollypos+i] /2 & 7 - // [26] *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i2#2) ← (byte~) irq1::$23 -- pbuc1_derefidx_vbuxx=vbuaa + // [33] *((const byte*) rasters+(const nomodify byte) irq1::scrollypos + (byte) irq1::i3#2) ← (byte~) irq1::$24 -- pbuc1_derefidx_vbuxx=vbuaa sta rasters+scrollypos,x // for(char i=0;i<19;i++) - // [27] (byte) irq1::i2#1 ← ++ (byte) irq1::i2#2 -- vbuxx=_inc_vbuxx + // [34] (byte) irq1::i3#1 ← ++ (byte) irq1::i3#2 -- vbuxx=_inc_vbuxx inx - // [21] phi from irq1::@26 to irq1::@25 [phi:irq1::@26->irq1::@25] - // [21] phi (byte) irq1::i2#2 = (byte) irq1::i2#1 [phi:irq1::@26->irq1::@25#0] -- register_copy - jmp __b25 - // irq1::@19 - __b19: + // [26] phi from irq1::@29 to irq1::@28 [phi:irq1::@29->irq1::@28] + // [26] phi (byte) irq1::i3#2 = (byte) irq1::i3#1 [phi:irq1::@29->irq1::@28#0] -- register_copy + jmp __b28 + // irq1::@22 + __b22: // idx = SINUS[barsin] - // [28] (byte) irq1::idx#0 ← *((const byte*) SINUS + (byte) irq1::barsin#2) -- vbuyy=pbuc1_derefidx_vbuz1 + // [35] (byte) irq1::idx#0 ← *((const byte*) SINUS + (byte) irq1::barsin#2) -- vbuyy=pbuc1_derefidx_vbuz1 ldx.z barsin ldy SINUS,x // barcol = barcnt*16 - // [29] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 << (byte) 4 -- vbuzz=vbuz1_rol_4 + // [36] (byte) irq1::barcol#0 ← (byte) irq1::barcnt#2 << (byte) 4 -- vbuzz=vbuz1_rol_4 lda.z barcnt asl asl asl asl taz - // [30] phi from irq1::@19 to irq1::@20 [phi:irq1::@19->irq1::@20] - // [30] phi (byte) irq1::idx#3 = (byte) irq1::idx#0 [phi:irq1::@19->irq1::@20#0] -- register_copy - // [30] phi (byte) irq1::barcol#3 = (byte) irq1::barcol#0 [phi:irq1::@19->irq1::@20#1] -- register_copy - // [30] phi (byte) irq1::i#2 = (byte) 0 [phi:irq1::@19->irq1::@20#2] -- vbuxx=vbuc1 + // [37] phi from irq1::@22 to irq1::@23 [phi:irq1::@22->irq1::@23] + // [37] phi (byte) irq1::idx#3 = (byte) irq1::idx#0 [phi:irq1::@22->irq1::@23#0] -- register_copy + // [37] phi (byte) irq1::barcol#3 = (byte) irq1::barcol#0 [phi:irq1::@22->irq1::@23#1] -- register_copy + // [37] phi (byte) irq1::i1#2 = (byte) 0 [phi:irq1::@22->irq1::@23#2] -- vbuxx=vbuc1 ldx #0 - // irq1::@20 - __b20: + // irq1::@23 + __b23: // for(char i=0;i<16;i++) - // [31] if((byte) irq1::i#2<(byte) $10) goto irq1::@21 -- vbuxx_lt_vbuc1_then_la1 + // [38] if((byte) irq1::i1#2<(byte) $10) goto irq1::@24 -- vbuxx_lt_vbuc1_then_la1 cpx #$10 - bcc __b21 - // [32] phi from irq1::@20 to irq1::@22 [phi:irq1::@20->irq1::@22] - // [32] phi (byte) irq1::idx#4 = (byte) irq1::idx#3 [phi:irq1::@20->irq1::@22#0] -- register_copy - // [32] phi (byte) irq1::barcol#4 = (byte) irq1::barcol#3 [phi:irq1::@20->irq1::@22#1] -- register_copy - // [32] phi (byte) irq1::i1#2 = (byte) 0 [phi:irq1::@20->irq1::@22#2] -- vbuxx=vbuc1 + bcc __b24 + // [39] phi from irq1::@23 to irq1::@25 [phi:irq1::@23->irq1::@25] + // [39] phi (byte) irq1::idx#4 = (byte) irq1::idx#3 [phi:irq1::@23->irq1::@25#0] -- register_copy + // [39] phi (byte) irq1::barcol#4 = (byte) irq1::barcol#3 [phi:irq1::@23->irq1::@25#1] -- register_copy + // [39] phi (byte) irq1::i2#2 = (byte) 0 [phi:irq1::@23->irq1::@25#2] -- vbuxx=vbuc1 ldx #0 - // irq1::@22 - __b22: + // irq1::@25 + __b25: // for(char i=0;i<15;i++) - // [33] if((byte) irq1::i1#2<(byte) $f) goto irq1::@23 -- vbuxx_lt_vbuc1_then_la1 + // [40] if((byte) irq1::i2#2<(byte) $f) goto irq1::@26 -- vbuxx_lt_vbuc1_then_la1 cpx #$f - bcc __b23 - // irq1::@24 + bcc __b26 + // irq1::@27 // barsin += 10 - // [34] (byte) irq1::barsin#1 ← (byte) irq1::barsin#2 + (byte) $a -- vbuz1=vbuz1_plus_vbuc1 + // [41] (byte) irq1::barsin#1 ← (byte) irq1::barsin#2 + (byte) $a -- vbuz1=vbuz1_plus_vbuc1 lda #$a clc adc.z barsin sta.z barsin // for(char barcnt=0; barcnt<16; barcnt++) - // [35] (byte) irq1::barcnt#1 ← ++ (byte) irq1::barcnt#2 -- vbuz1=_inc_vbuz1 + // [42] (byte) irq1::barcnt#1 ← ++ (byte) irq1::barcnt#2 -- vbuz1=_inc_vbuz1 inc.z barcnt - // [19] phi from irq1::@24 to irq1::@18 [phi:irq1::@24->irq1::@18] - // [19] phi (byte) irq1::barsin#2 = (byte) irq1::barsin#1 [phi:irq1::@24->irq1::@18#0] -- register_copy - // [19] phi (byte) irq1::barcnt#2 = (byte) irq1::barcnt#1 [phi:irq1::@24->irq1::@18#1] -- register_copy - jmp __b18 - // irq1::@23 - __b23: + // [24] phi from irq1::@27 to irq1::@21 [phi:irq1::@27->irq1::@21] + // [24] phi (byte) irq1::barsin#2 = (byte) irq1::barsin#1 [phi:irq1::@27->irq1::@21#0] -- register_copy + // [24] phi (byte) irq1::barcnt#2 = (byte) irq1::barcnt#1 [phi:irq1::@27->irq1::@21#1] -- register_copy + jmp __b21 + // irq1::@26 + __b26: // rasters[idx++] = --barcol; - // [36] (byte) irq1::barcol#2 ← -- (byte) irq1::barcol#4 -- vbuzz=_dec_vbuzz + // [43] (byte) irq1::barcol#2 ← -- (byte) irq1::barcol#4 -- vbuzz=_dec_vbuzz dez // rasters[idx++] = --barcol - // [37] *((const byte*) rasters + (byte) irq1::idx#4) ← (byte) irq1::barcol#2 -- pbuc1_derefidx_vbuyy=vbuzz + // [44] *((const byte*) rasters + (byte) irq1::idx#4) ← (byte) irq1::barcol#2 -- pbuc1_derefidx_vbuyy=vbuzz tza sta rasters,y // rasters[idx++] = --barcol; - // [38] (byte) irq1::idx#2 ← ++ (byte) irq1::idx#4 -- vbuyy=_inc_vbuyy + // [45] (byte) irq1::idx#2 ← ++ (byte) irq1::idx#4 -- vbuyy=_inc_vbuyy iny // for(char i=0;i<15;i++) - // [39] (byte) irq1::i1#1 ← ++ (byte) irq1::i1#2 -- vbuxx=_inc_vbuxx + // [46] (byte) irq1::i2#1 ← ++ (byte) irq1::i2#2 -- vbuxx=_inc_vbuxx inx - // [32] phi from irq1::@23 to irq1::@22 [phi:irq1::@23->irq1::@22] - // [32] phi (byte) irq1::idx#4 = (byte) irq1::idx#2 [phi:irq1::@23->irq1::@22#0] -- register_copy - // [32] phi (byte) irq1::barcol#4 = (byte) irq1::barcol#2 [phi:irq1::@23->irq1::@22#1] -- register_copy - // [32] phi (byte) irq1::i1#2 = (byte) irq1::i1#1 [phi:irq1::@23->irq1::@22#2] -- register_copy - jmp __b22 - // irq1::@21 - __b21: + // [39] phi from irq1::@26 to irq1::@25 [phi:irq1::@26->irq1::@25] + // [39] phi (byte) irq1::idx#4 = (byte) irq1::idx#2 [phi:irq1::@26->irq1::@25#0] -- register_copy + // [39] phi (byte) irq1::barcol#4 = (byte) irq1::barcol#2 [phi:irq1::@26->irq1::@25#1] -- register_copy + // [39] phi (byte) irq1::i2#2 = (byte) irq1::i2#1 [phi:irq1::@26->irq1::@25#2] -- register_copy + jmp __b25 + // irq1::@24 + __b24: // rasters[idx++] = barcol++ - // [40] *((const byte*) rasters + (byte) irq1::idx#3) ← (byte) irq1::barcol#3 -- pbuc1_derefidx_vbuyy=vbuzz + // [47] *((const byte*) rasters + (byte) irq1::idx#3) ← (byte) irq1::barcol#3 -- pbuc1_derefidx_vbuyy=vbuzz tza sta rasters,y // rasters[idx++] = barcol++; - // [41] (byte) irq1::idx#1 ← ++ (byte) irq1::idx#3 -- vbuyy=_inc_vbuyy + // [48] (byte) irq1::idx#1 ← ++ (byte) irq1::idx#3 -- vbuyy=_inc_vbuyy iny - // [42] (byte) irq1::barcol#1 ← ++ (byte) irq1::barcol#3 -- vbuzz=_inc_vbuzz + // [49] (byte) irq1::barcol#1 ← ++ (byte) irq1::barcol#3 -- vbuzz=_inc_vbuzz inz // for(char i=0;i<16;i++) - // [43] (byte) irq1::i#1 ← ++ (byte) irq1::i#2 -- vbuxx=_inc_vbuxx + // [50] (byte) irq1::i1#1 ← ++ (byte) irq1::i1#2 -- vbuxx=_inc_vbuxx inx - // [30] phi from irq1::@21 to irq1::@20 [phi:irq1::@21->irq1::@20] - // [30] phi (byte) irq1::idx#3 = (byte) irq1::idx#1 [phi:irq1::@21->irq1::@20#0] -- register_copy - // [30] phi (byte) irq1::barcol#3 = (byte) irq1::barcol#1 [phi:irq1::@21->irq1::@20#1] -- register_copy - // [30] phi (byte) irq1::i#2 = (byte) irq1::i#1 [phi:irq1::@21->irq1::@20#2] -- register_copy - jmp __b20 - // irq1::@16 - __b16: + // [37] phi from irq1::@24 to irq1::@23 [phi:irq1::@24->irq1::@23] + // [37] phi (byte) irq1::idx#3 = (byte) irq1::idx#1 [phi:irq1::@24->irq1::@23#0] -- register_copy + // [37] phi (byte) irq1::barcol#3 = (byte) irq1::barcol#1 [phi:irq1::@24->irq1::@23#1] -- register_copy + // [37] phi (byte) irq1::i1#2 = (byte) irq1::i1#1 [phi:irq1::@24->irq1::@23#2] -- register_copy + jmp __b23 + // irq1::@19 + __b19: // rasters[l] = 0 - // [44] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [51] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta rasters,x // for(char l=0;l!=NUMBERL;l++) - // [45] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 -- vbuxx=_inc_vbuxx + // [52] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 -- vbuxx=_inc_vbuxx inx - // [15] phi from irq1::@16 to irq1::@15 [phi:irq1::@16->irq1::@15] - // [15] phi (byte) irq1::l#2 = (byte) irq1::l#1 [phi:irq1::@16->irq1::@15#0] -- register_copy - jmp __b15 + // [21] phi from irq1::@19 to irq1::@18 [phi:irq1::@19->irq1::@18] + // [21] phi (byte) irq1::l#2 = (byte) irq1::l#1 [phi:irq1::@19->irq1::@18#0] -- register_copy + jmp __b18 + // irq1::@17 + __b17: + // col = SINUS[colsin]/4 + // [53] (byte) irq1::col1#0 ← *((const byte*) SINUS + (byte) irq1::colsin#2) >> (byte) 2 -- vbuaa=pbuc1_derefidx_vbuyy_ror_2 + lda SINUS,y + lsr + lsr + // (COLORRAM + GREET_Y*40)[i] = col + // [54] *((const nomodify byte*) COLORRAM+(const nomodify byte) GREET_Y*(byte) $28 + (byte) irq1::i#2) ← (byte) irq1::col1#0 -- pbuc1_derefidx_vbuxx=vbuaa + sta COLORRAM+GREET_Y*$28,x + // col /= 2 + // [55] (byte) irq1::col1#1 ← (byte) irq1::col1#0 >> (byte) 1 -- vbuaa=vbuaa_ror_1 + // Logo colors + lsr + // (COLORRAM + LOGO_Y*40 + 0*40 - 1)[i] = col + // [56] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28-(byte) 1 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa + sta COLORRAM+LOGO_Y*$28-1,x + // (COLORRAM + LOGO_Y*40 + 1*40 - 2)[i] = col + // [57] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 1*(number) $28-(byte) 2 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa + sta COLORRAM+LOGO_Y*$28+1*$28-2,x + // (COLORRAM + LOGO_Y*40 + 2*40 - 3)[i] = col + // [58] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 2*(number) $28-(byte) 3 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa + sta COLORRAM+LOGO_Y*$28+2*$28-3,x + // (COLORRAM + LOGO_Y*40 + 3*40 - 4)[i] = col + // [59] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 3*(number) $28-(byte) 4 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa + sta COLORRAM+LOGO_Y*$28+3*$28-4,x + // (COLORRAM + LOGO_Y*40 + 4*40 - 5)[i] = col + // [60] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 4*(number) $28-(byte) 5 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa + sta COLORRAM+LOGO_Y*$28+4*$28-5,x + // (COLORRAM + LOGO_Y*40 + 5*40 - 6)[i] = col + // [61] *((const nomodify byte*) COLORRAM+(const nomodify byte) LOGO_Y*(byte) $28+(byte)(number) 5*(number) $28-(byte) 6 + (byte) irq1::i#2) ← (byte) irq1::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa + sta COLORRAM+LOGO_Y*$28+5*$28-6,x + // (COLORRAM + SCROLL_Y*40)[i] = PAL_GREEN[colsin] + // [62] *((const nomodify byte*) COLORRAM+(const nomodify byte) SCROLL_Y*(byte) $28 + (byte) irq1::i#2) ← *((const byte*) PAL_GREEN + (byte) irq1::colsin#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy + // Scroll colors + lda PAL_GREEN,y + sta COLORRAM+SCROLL_Y*$28,x + // colsin++; + // [63] (byte) irq1::colsin#1 ← ++ (byte) irq1::colsin#2 -- vbuyy=_inc_vbuyy + iny + // for(char i=0;i<40;i++) + // [64] (byte) irq1::i#1 ← ++ (byte) irq1::i#2 -- vbuxx=_inc_vbuxx + inx + // [19] phi from irq1::@17 to irq1::@16 [phi:irq1::@17->irq1::@16] + // [19] phi (byte) irq1::colsin#2 = (byte) irq1::colsin#1 [phi:irq1::@17->irq1::@16#0] -- register_copy + // [19] phi (byte) irq1::i#2 = (byte) irq1::i#1 [phi:irq1::@17->irq1::@16#1] -- register_copy + jmp __b16 // irq1::@2 __b2: // col = rasters[line] - // [46] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) -- vbuaa=pbuc1_derefidx_vbuzz + // [65] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) -- vbuaa=pbuc1_derefidx_vbuzz tza tay lda rasters,y // VICIII->BORDER_COLOR = col - // [47] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuaa + // [66] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuaa sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR // VICIII->BG_COLOR = col - // [48] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuaa + // [67] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuaa sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR // if(line < scrollypos) - // [49] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@3 -- vbuzz_lt_vbuc1_then_la1 + // [68] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@4 -- vbuzz_lt_vbuc1_then_la1 cpz #scrollypos - bcc __b3 - // irq1::@9 - // if(line == scrollypos) - // [50] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@4 -- vbuzz_eq_vbuc1_then_la1 - cpz #scrollypos - beq __b4 + bcc __b4 // irq1::@10 - // if(line == scrollypos+blackbar) - // [51] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@5 -- vbuzz_eq_vbuc1_then_la1 - cpz #scrollypos+blackbar + // if(line == scrollypos) + // [69] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@5 -- vbuzz_eq_vbuc1_then_la1 + cpz #scrollypos beq __b5 // irq1::@11 - // if(line == scrollypos+blackbar+1) - // [52] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@6 -- vbuzz_neq_vbuc1_then_la1 - cpz #scrollypos+blackbar+1 - bne __b6 + // if(line == scrollypos+blackbar) + // [70] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@6 -- vbuzz_eq_vbuc1_then_la1 + cpz #scrollypos+blackbar + beq __b6 // irq1::@12 + // if(line == scrollypos+blackbar+1) + // [71] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@7 -- vbuzz_neq_vbuc1_then_la1 + cpz #scrollypos+blackbar+1 + bne __b7 + // irq1::@13 // zoomval = SINUS[zoomx++] - // [53] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) -- vbuaa=pbuc1_derefidx_vbuz1 + // [72] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) -- vbuaa=pbuc1_derefidx_vbuz1 // if raster position > scrolly pos do zoom ldy.z zoomx lda SINUS,y - // [54] (volatile byte) zoomx ← ++ (volatile byte) zoomx -- vbuz1=_inc_vbuz1 + // [73] (volatile byte) zoomx ← ++ (volatile byte) zoomx -- vbuz1=_inc_vbuz1 inc.z zoomx // VICIV->CHRXSCL = zoomval - // [55] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 -- _deref_pbuc1=vbuaa + // [74] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 -- _deref_pbuc1=vbuaa sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL // zoomval+1 - // [56] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [75] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 -- vbuaa=vbuaa_plus_1 inc // VICIV->TEXTXPOS_LO = zoomval+1 - // [57] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 -- _deref_pbuc1=vbuaa + // [76] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 -- _deref_pbuc1=vbuaa sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO // if(zoomx==0) - // [58] if((volatile byte) zoomx!=(byte) 0) goto irq1::@6 -- vbuz1_neq_0_then_la1 + // [77] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 -- vbuz1_neq_0_then_la1 lda.z zoomx cmp #0 - bne __b6 - // irq1::@13 + bne __b7 + // irq1::@14 // if(++greetnm==GREETCOUNT) - // [59] (volatile byte) greetnm ← ++ (volatile byte) greetnm -- vbuz1=_inc_vbuz1 + // [78] (volatile byte) greetnm ← ++ (volatile byte) greetnm -- vbuz1=_inc_vbuz1 inc.z greetnm - // [60] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@6 -- vbuz1_neq_vbuc1_then_la1 + // [79] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 -- vbuz1_neq_vbuc1_then_la1 lda #GREETCOUNT cmp.z greetnm - bne __b6 - // irq1::@14 + bne __b7 + // irq1::@15 // greetnm =0 - // [61] (volatile byte) greetnm ← (byte) 0 -- vbuz1=vbuc1 + // [80] (volatile byte) greetnm ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z greetnm - // [62] phi from irq1::@11 irq1::@12 irq1::@13 irq1::@14 irq1::@3 irq1::@4 irq1::@5 to irq1::@6 [phi:irq1::@11/irq1::@12/irq1::@13/irq1::@14/irq1::@3/irq1::@4/irq1::@5->irq1::@6] - // [62] phi (byte) irq1::wobblepos#7 = (byte) irq1::wobblepos#10 [phi:irq1::@11/irq1::@12/irq1::@13/irq1::@14/irq1::@3/irq1::@4/irq1::@5->irq1::@6#0] -- register_copy - // irq1::@6 - __b6: - // raster = VICII->RASTER - // [63] (byte) irq1::raster#0 ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) -- vbuaa=_deref_pbuc1 - // Wait for the next raster line - lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER + // [81] phi from irq1::@12 irq1::@13 irq1::@14 irq1::@15 irq1::@4 irq1::@5 irq1::@6 to irq1::@7 [phi:irq1::@12/irq1::@13/irq1::@14/irq1::@15/irq1::@4/irq1::@5/irq1::@6->irq1::@7] + // [81] phi (byte) irq1::wobblepos#7 = (byte) irq1::wobblepos#10 [phi:irq1::@12/irq1::@13/irq1::@14/irq1::@15/irq1::@4/irq1::@5/irq1::@6->irq1::@7#0] -- register_copy // irq1::@7 __b7: - // while(raster == VICII->RASTER) - // [64] if((byte) irq1::raster#0==*((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq1::@7 -- vbuaa_eq__deref_pbuc1_then_la1 - cmp VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER - beq __b7 + // raster = VICII->RASTER + // [82] (byte) irq1::raster#0 ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) -- vbuaa=_deref_pbuc1 + // Wait for the next raster line + lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER // irq1::@8 + __b8: + // while(raster == VICII->RASTER) + // [83] if((byte) irq1::raster#0==*((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq1::@8 -- vbuaa_eq__deref_pbuc1_then_la1 + cmp VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER + beq __b8 + // irq1::@9 // for(char line=0;line!=NUMBERL;line++) - // [65] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 -- vbuzz=_inc_vbuzz + // [84] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 -- vbuzz=_inc_vbuzz inz - // [13] phi from irq1::@8 to irq1::@1 [phi:irq1::@8->irq1::@1] - // [13] phi (byte) irq1::wobblepos#10 = (byte) irq1::wobblepos#7 [phi:irq1::@8->irq1::@1#0] -- register_copy - // [13] phi (byte) irq1::line#10 = (byte) irq1::line#1 [phi:irq1::@8->irq1::@1#1] -- register_copy + // [13] phi from irq1::@9 to irq1::@1 [phi:irq1::@9->irq1::@1] + // [13] phi (byte) irq1::wobblepos#10 = (byte) irq1::wobblepos#7 [phi:irq1::@9->irq1::@1#0] -- register_copy + // [13] phi (byte) irq1::line#10 = (byte) irq1::line#1 [phi:irq1::@9->irq1::@1#1] -- register_copy jmp __b1 - // irq1::@5 - __b5: + // irq1::@6 + __b6: // VICIV->TEXTXPOS_LO = 0x50 - // [66] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 + // [85] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 // if raster position > scrolly pos do nozoom // default value lda #$50 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - jmp __b6 - // irq1::@4 - __b4: - // [67] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 + jmp __b7 + // irq1::@5 + __b5: + // [86] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 // if raster position = scrolly pos do scrolly // no wobbling from this point lda #$50 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO // VICII->CONTROL2 = xpos - // [68] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos -- _deref_pbuc1=vbuz1 + // [87] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos -- _deref_pbuc1=vbuz1 // set softscroll lda.z xpos sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2 - jmp __b6 - // irq1::@3 - __b3: - // 0x28 + SINUS[wobblepos++] - // [69] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) -- vbuaa=vbuc1_plus_pbuc2_derefidx_vbuxx - lda #$28 - clc - adc SINUS,x - // VICIV->TEXTXPOS_LO = 0x28 + SINUS[wobblepos++] - // [70] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$12 -- _deref_pbuc1=vbuaa + jmp __b7 + // irq1::@4 + __b4: + // VICIV->TEXTXPOS_LO = SINUS[wobblepos++] + // [88] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← *((const byte*) SINUS + (byte) irq1::wobblepos#10) -- _deref_pbuc1=pbuc2_derefidx_vbuxx // if raster position < scrolly pos do wobble Logo! + lda SINUS,x sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - // VICIV->TEXTXPOS_LO = 0x28 + SINUS[wobblepos++]; - // [71] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 -- vbuxx=_inc_vbuxx + // VICIV->TEXTXPOS_LO = SINUS[wobblepos++]; + // [89] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 -- vbuxx=_inc_vbuxx inx // VICIV->CHRXSCL = 0x66 - // [72] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 -- _deref_pbuc1=vbuc2 + // [90] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 -- _deref_pbuc1=vbuc2 // No zooming lda #$66 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL - jmp __b6 + jmp __b7 } // main main: { // VICIII->KEY = 0x47 - // [73] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 -- _deref_pbuc1=vbuc2 + // [91] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 -- _deref_pbuc1=vbuc2 // Enable MEGA65 features lda #$47 sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY // VICIII->KEY = 0x53 - // [74] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 -- _deref_pbuc1=vbuc2 + // [92] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 -- _deref_pbuc1=vbuc2 lda #$53 sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY // VICIV->CONTROLB |= 0x40 - // [75] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (byte) $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 + // [93] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | (byte) $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Enable 48MHz fast mode lda #$40 ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB // VICIV->CONTROLC |= 0x40 - // [76] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (byte) $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 + // [94] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) ← *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | (byte) $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 lda #$40 ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC - // memset(SCREEN, ' ', 40*25) - // [77] call memset - // Clear screen - // [101] phi from main to memset [phi:main->memset] - jsr memset - // main::@6 // asm // asm { lda#0 } // Initialize music lda #0 // (*songInit)() - // [79] call *((const void()*) songInit) + // [96] call *((const void()*) songInit) jsr songInit - // [80] phi from main::@6 to main::@1 [phi:main::@6->main::@1] - // [80] phi (byte) main::i1#2 = (byte) 0 [phi:main::@6->main::@1#0] -- vbuxx=vbuc1 + // memset(SCREEN, ' ', 40*25) + // [97] call memset + // Clear screen + // [124] phi from main to memset [phi:main->memset] + jsr memset + // [98] phi from main to main::@1 [phi:main->main::@1] + // [98] phi (byte) main::i1#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 ldx #0 // Put MEGA logo on screen // main::@1 __b1: // for( char i=0; imain::@3] - // [82] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuxx=vbuc1 + // [100] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [100] phi (byte) main::i2#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuxx=vbuc1 ldx #0 - // [82] phi from main::@3 to main::@3 [phi:main::@3->main::@3] - // [82] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy + // Put dummy text up for scroll and greet // main::@3 __b3: + // for( char i=0;i<40;i++) + // [101] if((byte) main::i2#2<(byte) $28) goto main::@4 -- vbuxx_lt_vbuc1_then_la1 + cpx #$28 + bcc __b4 + // [102] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + // [102] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#0] -- vbuxx=vbuc1 + ldx #0 + // [102] phi from main::@5 to main::@5 [phi:main::@5->main::@5] + // [102] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@5->main::@5#0] -- register_copy + // main::@5 + __b5: // PALETTE_RED[i] = PAL_RED[i] - // [83] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [103] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda PAL_RED,x sta PALETTE_RED,x // PALETTE_GREEN[i] = PAL_GREEN[i] - // [84] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [104] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda PAL_GREEN,x sta PALETTE_GREEN,x // PALETTE_BLUE[i] = PAL_BLUE[i] - // [85] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [105] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda PAL_BLUE,x sta PALETTE_BLUE,x // while(++i!=0) - // [86] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [106] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx inx - // [87] if((byte) main::i#1!=(byte) 0) goto main::@3 -- vbuxx_neq_0_then_la1 + // [107] if((byte) main::i#1!=(byte) 0) goto main::@5 -- vbuxx_neq_0_then_la1 cpx #0 - bne __b3 - // main::@4 + bne __b5 + // main::@6 // asm // asm { sei } // Set up raster interrupts C64 style sei // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR - // [89] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [109] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // VICII->RASTER = 0x16 - // [90] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 -- _deref_pbuc1=vbuc2 + // [110] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 -- _deref_pbuc1=vbuc2 // Set raster line to 0x16 lda #$16 sta VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER // VICII->CONTROL1 &= 0x7f - // [91] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [111] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 lda #$7f and VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1 sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1 // VICII->IRQ_ENABLE = IRQ_RASTER - // [92] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [112] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE // *HARDWARE_IRQ = &irq1 - // [93] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() -- _deref_qprc1=pprc2 + // [113] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() -- _deref_qprc1=pprc2 // Set the IRQ routine lda #irq1 sta HARDWARE_IRQ+1 // *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK - // [94] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [114] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // no kernal or BASIC rom visible lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR // *PROCPORT = PROCPORT_RAM_IO - // [95] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [115] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT // VICIV->SIDBDRWD_LO = 1 - // [96] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 -- _deref_pbuc1=vbuc2 + // [116] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 -- _deref_pbuc1=vbuc2 // open sideborder lda #1 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO @@ -4580,21 +5230,37 @@ main: { // asm { cli } // Enable IRQ cli - // [98] phi from main::@4 main::@5 to main::@5 [phi:main::@4/main::@5->main::@5] - // main::@5 - __b5: - jmp __b5 + // [118] phi from main::@6 main::@7 to main::@7 [phi:main::@6/main::@7->main::@7] + // main::@7 + __b7: + jmp __b7 + // main::@4 + __b4: + // (SCREEN + SCROLL_Y*40)[i] = 'a' + // [119] *((const nomodify byte*) SCREEN+(const nomodify byte) SCROLL_Y*(byte) $28 + (byte) main::i2#2) ← (byte) 'a' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'a' + sta SCREEN+SCROLL_Y*$28,x + // (SCREEN + GREET_Y*40)[i] = 'b' + // [120] *((const nomodify byte*) SCREEN+(const nomodify byte) GREET_Y*(byte) $28 + (byte) main::i2#2) ← (byte) 'b' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'b' + sta SCREEN+GREET_Y*$28,x + // for( char i=0;i<40;i++) + // [121] (byte) main::i2#1 ← ++ (byte) main::i2#2 -- vbuxx=_inc_vbuxx + inx + // [100] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + // [100] phi (byte) main::i2#2 = (byte) main::i2#1 [phi:main::@4->main::@3#0] -- register_copy + jmp __b3 // main::@2 __b2: - // (SCREEN+3*40)[i] = MEGA_LOGO[i] - // [99] *((const nomodify byte*) SCREEN+(byte)(number) 3*(number) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // (SCREEN + LOGO_Y*40)[i] = MEGA_LOGO[i] + // [122] *((const nomodify byte*) SCREEN+(const nomodify byte) LOGO_Y*(byte) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda MEGA_LOGO,x - sta SCREEN+3*$28,x + sta SCREEN+LOGO_Y*$28,x // for( char i=0; imain::@1] - // [80] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@2->main::@1#0] -- register_copy + // [98] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [98] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@2->main::@1#0] -- register_copy jmp __b1 } // memset @@ -4605,8 +5271,8 @@ memset: { .label str = SCREEN .label end = str+num .label dst = 4 - // [102] phi from memset to memset::@1 [phi:memset->memset::@1] - // [102] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [125] phi from memset to memset::@1 [phi:memset->memset::@1] + // [125] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -4614,7 +5280,7 @@ memset: { // memset::@1 __b1: // for(char* dst = str; dst!=end; dst++) - // [103] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [126] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -4623,20 +5289,20 @@ memset: { bne __b2 // memset::@return // } - // [104] return + // [127] return rts // memset::@2 __b2: // *dst = c - // [105] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [128] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [129] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inw.z dst - // [102] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [102] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [125] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [125] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data @@ -4646,7 +5312,7 @@ SINUS: .fill 256, 91.5 + 91.5*sin(i*2*PI/256) // Moving Raster Bars - rasters: .fill $100, 0 + rasters: .fill NUMBERL, 0 // A MEGA logo MEGA_LOGO: .byte $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $20, $cf, $20, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $cf, $cf, $20, $20, $20, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $20, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $cf, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $20, $20, $20, $cf PAL_RED: .byte 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, $16, $c6, $a7, $88, $49, $5a, $2b, $1c, $ac, $ad, $8e, $8f, $ff, $ff, $ff, $ff, $c6, $77, $48, $29, $e9, $fa, $cb, $cc, $5d, $4e, $2f, $ff, $ff, $ff, $ff, $ff, $57, $18, $f8, $d9, $aa, $8b, $6c, $5d, $ed, $de, $cf, $ff, $ff, $ff, $ff, $ff, $26, $e6, $b7, $a8, $69, $5a, $3b, $3c, $dc, $cd, $ae, $9f, $ff, $ff, $ff, $ff, $65, $16, $17, $f7, $d8, $b9, $9a, $8b, $2c, $d, $fd, $ee, $cf, $ff, $ff, $ff, $64, $15, 6, $e6, $c7, $a8, $99, $8a, $1b, $c, $fc, $fd, $ee, $cf, $ff, $ff, $12, $d2, $d3, $b4, $95, $86, $77, $78, 9, $69, $ea, $fb, $dc, $ad, $ae, $af, $f0, $c1, $c2, $a3, $84, $85, $76, $67, 8, $f8, $e9, $da, $db, $bc, $bd, $ae, $40, $11, $12, $f2, $e3, $d4, $c5, $c6, $47, $38, $39, $2a, $1b, $c, $d, $ed, 0, 0, $f0, $d1, $c2, $b3, $a4, $95, $36, $27, $28, $29, $f9, $ea, $eb, $ec, $70, $41, $22, $23, $f3, $f4, $e5, $e6, $77, $78, $69, $7a, $3b, $3c, $3d, $3e, $a1, $82, $63, $54, $35, $26, 7, 8, $98, $99, $8a, $7b, $5c, $5d, $3e, $3f, $33, 4, $d4, $d5, $a6, $a7, $88, $89, $1a, $ab, $fb, $ec, $cd, $be, $af, $ff, $b4, $85, $56, $47, $18, 9, $f9, $ea, $7b, $7c, $5d, $5e, $2f, $ef, $ff, $ff, 6, $d6, $a7, $98, $59, $4a, $2b, $2c, $bc, $ad, $8e, $8f, $ff, $ff, $ff, $ff diff --git a/src/test/ref/examples/mega65/raster65.sym b/src/test/ref/examples/mega65/raster65.sym index e5d8b716d..92bbf1fe6 100644 --- a/src/test/ref/examples/mega65/raster65.sym +++ b/src/test/ref/examples/mega65/raster65.sym @@ -1,8 +1,11 @@ (const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f +(const nomodify byte*) COLORRAM = (byte*) 55296 (const nomodify byte) GREETCOUNT = (byte) $10 +(const nomodify byte) GREET_Y = (byte) $14 (const nomodify void()**) HARDWARE_IRQ = (void()**) 65534 (const nomodify byte) IRQ_RASTER = (byte) 1 +(const nomodify byte) LOGO_Y = (byte) 3 (byte) MEGA65_VICIV::ALPHADELAY (byte) MEGA65_VICIV::B0PIX (byte) MEGA65_VICIV::B0_ADDR @@ -288,7 +291,7 @@ (byte) MOS6581_SID::POT_X (byte) MOS6581_SID::POT_Y (byte) MOS6581_SID::VOLUME_FILTER_MODE -(const nomodify byte) NUMBERL = (byte) $e0 +(const nomodify byte) NUMBERL = (byte) $d8 (const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = (byte) $5a (const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = (byte) $31 (const byte) OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = (byte) $54 @@ -299,6 +302,8 @@ (const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = (byte) $20 (const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY = (byte) $2f (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d +(const byte) OFFSET_STRUCT_MOS6569_VICII_BG_COLOR = (byte) $21 +(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = (byte) $20 (const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL1 = (byte) $11 (const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = (byte) $16 (const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE = (byte) $1a @@ -315,6 +320,7 @@ (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 (const nomodify byte) PROCPORT_RAM_IO = (byte) 5 (const nomodify byte*) SCREEN = (byte*) 1024 +(const nomodify byte) SCROLL_Y = (byte) $d (const byte*) SINUS[(number) $100] = kickasm {{ .fill 256, 91.5 + 91.5*sin(i*2*PI/256) }} (const byte) SIZEOF_BYTE = (byte) 1 @@ -327,11 +333,10 @@ (label) __start::@1 (label) __start::@return (label) __start::__init1 -(volatile byte) greetnm loadstore zp[1]:9 1.3529411764705883 +(volatile byte) greetnm loadstore zp[1]:9 1.3939393939393938 interrupt(HARDWARE_STACK)(void()) irq1() -(byte~) irq1::$12 reg byte a 22.0 -(byte~) irq1::$22 reg byte a 22.0 (byte~) irq1::$23 reg byte a 22.0 +(byte~) irq1::$24 reg byte a 22.0 (byte~) irq1::$7 reg byte a 22.0 (label) irq1::@1 (label) irq1::@10 @@ -352,7 +357,11 @@ interrupt(HARDWARE_STACK)(void()) irq1() (label) irq1::@24 (label) irq1::@25 (label) irq1::@26 +(label) irq1::@27 +(label) irq1::@28 +(label) irq1::@29 (label) irq1::@3 +(label) irq1::@30 (label) irq1::@4 (label) irq1::@5 (label) irq1::@6 @@ -376,15 +385,25 @@ interrupt(HARDWARE_STACK)(void()) irq1() (const nomodify byte) irq1::blackbar = (byte) $13 (byte) irq1::col (byte) irq1::col#0 reg byte a 16.5 +(byte) irq1::col1 +(byte) irq1::col1#0 reg byte a 16.5 +(byte) irq1::col1#1 reg byte a 12.833333333333334 +(byte) irq1::colsin +(byte) irq1::colsin#0 reg byte y 4.0 +(byte) irq1::colsin#1 reg byte y 11.0 +(byte) irq1::colsin#2 reg byte y 3.833333333333333 (byte) irq1::i -(byte) irq1::i#1 reg byte x 202.0 -(byte) irq1::i#2 reg byte x 60.599999999999994 +(byte) irq1::i#1 reg byte x 22.0 +(byte) irq1::i#2 reg byte x 9.307692307692307 (byte) irq1::i1 (byte) irq1::i1#1 reg byte x 202.0 (byte) irq1::i1#2 reg byte x 60.599999999999994 (byte) irq1::i2 -(byte) irq1::i2#1 reg byte x 22.0 -(byte) irq1::i2#2 reg byte x 11.0 +(byte) irq1::i2#1 reg byte x 202.0 +(byte) irq1::i2#2 reg byte x 60.599999999999994 +(byte) irq1::i3 +(byte) irq1::i3#1 reg byte x 22.0 +(byte) irq1::i3#2 reg byte x 11.0 (byte) irq1::idx (byte) irq1::idx#0 reg byte y 11.0 (byte) irq1::idx#1 reg byte y 67.33333333333333 @@ -396,14 +415,14 @@ interrupt(HARDWARE_STACK)(void()) irq1() (byte) irq1::l#2 reg byte x 14.666666666666666 (byte) irq1::line (byte) irq1::line#1 reg byte z 22.0 -(byte) irq1::line#10 reg byte z 3.142857142857143 +(byte) irq1::line#10 reg byte z 3.259259259259259 (byte) irq1::raster (byte) irq1::raster#0 reg byte a 56.0 (const nomodify byte) irq1::scrollypos = (byte) $66 (byte) irq1::wobblepos (byte) irq1::wobblepos#0 reg byte x 4.0 (byte) irq1::wobblepos#1 reg byte x 11.0 -(byte) irq1::wobblepos#10 reg byte x 4.391304347826087 +(byte) irq1::wobblepos#10 reg byte x 4.590909090909091 (byte) irq1::wobblepos#7 reg byte x 22.0 (byte) irq1::zoomval (byte) irq1::zoomval#0 reg byte a 11.0 @@ -414,12 +433,16 @@ interrupt(HARDWARE_STACK)(void()) irq1() (label) main::@4 (label) main::@5 (label) main::@6 +(label) main::@7 (byte) main::i (byte) main::i#1 reg byte x 151.5 (byte) main::i#2 reg byte x 202.0 (byte) main::i1 (byte) main::i1#1 reg byte x 202.0 (byte) main::i1#2 reg byte x 168.33333333333331 +(byte) main::i2 +(byte) main::i2#1 reg byte x 202.0 +(byte) main::i2#2 reg byte x 126.25 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -436,34 +459,38 @@ interrupt(HARDWARE_STACK)(void()) irq1() (void*) memset::return (void*) memset::str (const void*) memset::str#0 str = (void*)(const nomodify byte*) SCREEN -(const byte*) rasters[(number) $100] = { fill( $100, 0) } -(volatile byte) sinpos loadstore zp[1]:6 0.2564102564102564 +(const byte*) rasters[(const nomodify byte) NUMBERL] = { fill( NUMBERL, 0) } +(volatile byte) sinpos loadstore zp[1]:6 0.2181818181818182 (const void()*) songInit = (void()*)(const byte*) SONG (const void()*) songPlay = (void()*)(const byte*) SONG+(byte) 3 -(volatile byte) xpos loadstore zp[1]:8 0.3823529411764706 -(volatile byte) zoomx loadstore zp[1]:7 1.3529411764705883 +(volatile byte) xpos loadstore zp[1]:8 0.3939393939393939 +(volatile byte) zoomx loadstore zp[1]:7 1.3939393939393938 reg byte z [ irq1::line#10 irq1::line#1 ] reg byte x [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] +reg byte x [ irq1::i#2 irq1::i#1 ] +reg byte y [ irq1::colsin#2 irq1::colsin#1 irq1::colsin#0 ] reg byte x [ irq1::l#2 irq1::l#1 ] zp[1]:2 [ irq1::barcnt#2 irq1::barcnt#1 ] zp[1]:3 [ irq1::barsin#2 irq1::barsin#0 irq1::barsin#1 ] -reg byte x [ irq1::i2#2 irq1::i2#1 ] -reg byte x [ irq1::i#2 irq1::i#1 ] +reg byte x [ irq1::i3#2 irq1::i3#1 ] reg byte x [ irq1::i1#2 irq1::i1#1 ] +reg byte x [ irq1::i2#2 irq1::i2#1 ] reg byte z [ irq1::barcol#4 irq1::barcol#3 irq1::barcol#0 irq1::barcol#1 irq1::barcol#2 ] reg byte y [ irq1::idx#4 irq1::idx#3 irq1::idx#0 irq1::idx#1 irq1::idx#2 ] reg byte x [ main::i1#2 main::i1#1 ] +reg byte x [ main::i2#2 main::i2#1 ] reg byte x [ main::i#2 main::i#1 ] zp[2]:4 [ memset::dst#2 memset::dst#1 ] zp[1]:6 [ sinpos ] zp[1]:7 [ zoomx ] zp[1]:8 [ xpos ] zp[1]:9 [ greetnm ] -reg byte a [ irq1::$22 ] reg byte a [ irq1::$23 ] +reg byte a [ irq1::$24 ] +reg byte a [ irq1::col1#0 ] +reg byte a [ irq1::col1#1 ] reg byte a [ irq1::col#0 ] reg byte a [ irq1::zoomval#0 ] reg byte a [ irq1::$7 ] reg byte a [ irq1::raster#0 ] -reg byte a [ irq1::$12 ]