From c4622fae008b0858b308240c92122fb239150cd3 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Mon, 14 Sep 2020 21:41:26 +0200 Subject: [PATCH] Added moving raster bars to raster65. --- src/test/kc/examples/mega65/raster65.c | 24 +- src/test/ref/examples/mega65/raster65.asm | 169 +- src/test/ref/examples/mega65/raster65.cfg | 226 +- src/test/ref/examples/mega65/raster65.log | 2455 ++++++++++++++------- src/test/ref/examples/mega65/raster65.sym | 85 +- 5 files changed, 1949 insertions(+), 1010 deletions(-) diff --git a/src/test/kc/examples/mega65/raster65.c b/src/test/kc/examples/mega65/raster65.c index 225d6dcb0..55256f360 100644 --- a/src/test/kc/examples/mega65/raster65.c +++ b/src/test/kc/examples/mega65/raster65.c @@ -135,25 +135,31 @@ interrupt(hardware_stack) void irq1() { while(raster == VICII->RASTER) ; } - VICIII->BORDER_COLOR = 1; - VICIII->BG_COLOR = 1; - // Set all raster bars to black for(char l=0;l!=NUMBERL;l++) rasters[l] = 0; - VICIII->BORDER_COLOR = 1; - VICIII->BG_COLOR = 1; - // play music (*songPlay)(); - VICIII->BORDER_COLOR = 2; - VICIII->BG_COLOR = 2; + // Big block of bars (16) + char barsin = sinpos; + for(char barcnt=0; barcnt<16; barcnt++) { + char idx = SINUS[barsin]; + char barcol = barcnt*16; + for(char i=0;i<16;i++) + rasters[idx++] = barcol++; + for(char i=0;i<15;i++) + 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; } - // A MEGA logo char MEGA_LOGO[] = { 0x20,0x20,0x20,0x20,0x20,0xcf,0xcf,0xcf,0x20,0xcf,0xcf,0x20,0x20,0xcf,0xcf,0xcf,0x20,0x20,0xcf,0xcf, diff --git a/src/test/ref/examples/mega65/raster65.asm b/src/test/ref/examples/mega65/raster65.asm index fd4eae927..18bc8128b 100644 --- a/src/test/ref/examples/mega65/raster65.asm +++ b/src/test/ref/examples/mega65/raster65.asm @@ -68,13 +68,13 @@ // Pointer to the song play routine .label songPlay = SONG+3 // Sinus Position - .label sinpos = 4 + .label sinpos = 6 // Zoom Position - .label zoomx = 5 + .label zoomx = 7 // soft scroll position of text scrolly (0-7) - .label xpos = 6 + .label xpos = 8 // The greeting currently being shown - .label greetnm = 7 + .label greetnm = 9 .segment Code __start: { // sinpos @@ -97,6 +97,8 @@ irq1: { .const scrollypos = $66 // size of raster behind scrolly .const blackbar = $13 + .label barsin = 3 + .label barcnt = 2 pha txa pha @@ -118,36 +120,38 @@ irq1: { // wobblepos = ++sinpos inc.z sinpos // Generate Raster Bars and more - ldz sinpos - tax + ldx.z sinpos + ldz #0 __b1: // for(char line=0;line!=NUMBERL;line++) - cpx #NUMBERL + cpz #NUMBERL bne __b2 - // VICIII->BORDER_COLOR = 1 - lda #1 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // VICIII->BG_COLOR = 1 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR ldx #0 // Set all raster bars to black - __b16: + __b15: // for(char l=0;l!=NUMBERL;l++) cpx #NUMBERL - bne __b17 - // VICIII->BORDER_COLOR = 1 - lda #1 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // VICIII->BG_COLOR = 1 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR + bne __b16 // (*songPlay)() // play music jsr songPlay - // VICIII->BORDER_COLOR = 2 - lda #2 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // VICIII->BG_COLOR = 2 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR + // barsin = sinpos + // Big block of bars (16) + lda.z sinpos + sta.z barsin + lda #0 + sta.z barcnt + __b18: + // for(char barcnt=0; barcnt<16; barcnt++) + lda.z barcnt + cmp #$10 + bcc __b19 + ldx #0 + // Produce dark area behind text + __b25: + // for(char i=0;i<19;i++) + cpx #$13 + bcc __b26 // } pla tay @@ -155,32 +159,95 @@ irq1: { tax pla rti - __b17: + __b26: + // rasters[scrollypos+i] /2 + lda rasters+scrollypos,x + lsr + // rasters[scrollypos+i] /2 & 7 + and #7 + // rasters[scrollypos+i] = rasters[scrollypos+i] /2 & 7 + sta rasters+scrollypos,x + // for(char i=0;i<19;i++) + inx + jmp __b25 + __b19: + // idx = SINUS[barsin] + ldx.z barsin + ldy SINUS,x + // barcol = barcnt*16 + lda.z barcnt + asl + asl + asl + asl + taz + ldx #0 + __b20: + // for(char i=0;i<16;i++) + cpx #$10 + bcc __b21 + ldx #0 + __b22: + // for(char i=0;i<15;i++) + cpx #$f + bcc __b23 + // barsin += 10 + lda #$a + clc + adc.z barsin + sta.z barsin + // for(char barcnt=0; barcnt<16; barcnt++) + inc.z barcnt + jmp __b18 + __b23: + // rasters[idx++] = --barcol; + dez + // rasters[idx++] = --barcol + tza + sta rasters,y + // rasters[idx++] = --barcol; + iny + // for(char i=0;i<15;i++) + inx + jmp __b22 + __b21: + // rasters[idx++] = barcol++ + tza + sta rasters,y + // rasters[idx++] = barcol++; + iny + inz + // for(char i=0;i<16;i++) + inx + jmp __b20 + __b16: // rasters[l] = 0 lda #0 sta rasters,x // for(char l=0;l!=NUMBERL;l++) inx - jmp __b16 + jmp __b15 __b2: // col = rasters[line] - lda rasters,x + tza + tay + lda rasters,y // VICIII->BORDER_COLOR = col sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR // VICIII->BG_COLOR = col sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR // if(line < scrollypos) - cpx #scrollypos - bcc __b4 + cpz #scrollypos + bcc __b3 // if(line == scrollypos) - cpx #scrollypos - beq __b5 + cpz #scrollypos + beq __b4 // if(line == scrollypos+blackbar) - cpx #scrollypos+blackbar - beq __b6 + cpz #scrollypos+blackbar + beq __b5 // if(line == scrollypos+blackbar+1) - cpx #scrollypos+blackbar+1 - bne __b7 + cpz #scrollypos+blackbar+1 + bne __b6 // zoomval = SINUS[zoomx++] // if raster position > scrolly pos do zoom ldy.z zoomx @@ -195,34 +262,34 @@ irq1: { // if(zoomx==0) lda.z zoomx cmp #0 - bne __b7 + bne __b6 // if(++greetnm==GREETCOUNT) inc.z greetnm lda #GREETCOUNT cmp.z greetnm - bne __b7 + bne __b6 // greetnm =0 lda #0 sta.z greetnm - __b7: + __b6: // raster = VICII->RASTER // Wait for the next raster line lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER - __b8: + __b7: // while(raster == VICII->RASTER) cmp VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER - beq __b8 + beq __b7 // for(char line=0;line!=NUMBERL;line++) - inx + inz jmp __b1 - __b6: + __b5: // VICIV->TEXTXPOS_LO = 0x50 // if raster position > scrolly pos do nozoom // default value lda #$50 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - jmp __b7 - __b5: + jmp __b6 + __b4: // if raster position = scrolly pos do scrolly // no wobbling from this point lda #$50 @@ -231,24 +298,22 @@ irq1: { // set softscroll lda.z xpos sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2 - jmp __b7 - __b4: + jmp __b6 + __b3: // 0x28 + SINUS[wobblepos++] - tza - tay lda #$28 clc - adc SINUS,y + adc SINUS,x // VICIV->TEXTXPOS_LO = 0x28 + SINUS[wobblepos++] // if raster position < scrolly pos do wobble Logo! sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO // VICIV->TEXTXPOS_LO = 0x28 + SINUS[wobblepos++]; - inz + inx // VICIV->CHRXSCL = 0x66 // No zooming lda #$66 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL - jmp __b7 + jmp __b6 } main: { // VICIII->KEY = 0x47 @@ -351,7 +416,7 @@ memset: { .const num = $28*$19 .label str = SCREEN .label end = str+num - .label dst = 2 + .label dst = 4 lda #str diff --git a/src/test/ref/examples/mega65/raster65.cfg b/src/test/ref/examples/mega65/raster65.cfg index 0456fc38a..0caa378c5 100644 --- a/src/test/ref/examples/mega65/raster65.cfg +++ b/src/test/ref/examples/mega65/raster65.cfg @@ -25,143 +25,183 @@ 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::@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 ) +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 ) [14] if((byte) irq1::line#10!=(const nomodify byte) NUMBERL) goto irq1::@2 - to:irq1::@3 -irq1::@3: scope:[irq1] from irq1::@1 - [15] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 1 - [16] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 1 - to:irq1::@16 -irq1::@16: scope:[irq1] from irq1::@17 irq1::@3 - [17] (byte) irq1::l#2 ← phi( irq1::@17/(byte) irq1::l#1 irq1::@3/(byte) 0 ) - [18] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@17 + 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 + [17] call *((const void()*) songPlay) + [18] (byte) irq1::barsin#0 ← (volatile byte) sinpos to:irq1::@18 -irq1::@18: scope:[irq1] from irq1::@16 - [19] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 1 - [20] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 1 - [21] call *((const void()*) songPlay) - [22] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 2 - [23] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 2 +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 to:irq1::@return -irq1::@return: scope:[irq1] from irq1::@18 - [24] return +irq1::@return: scope:[irq1] from irq1::@25 + [23] return to:@return -irq1::@17: scope:[irq1] from irq1::@16 - [25] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 - [26] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 - to:irq1::@16 +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 + to:irq1::@25 +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 + 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::@2: scope:[irq1] from irq1::@1 - [27] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) - [28] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 - [29] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 - [30] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@4 + [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 to:irq1::@10 -irq1::@10: scope:[irq1] from irq1::@2 - [31] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@5 +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 to:irq1::@11 irq1::@11: scope:[irq1] from irq1::@10 - [32] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@6 + [52] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@6 to:irq1::@12 irq1::@12: scope:[irq1] from irq1::@11 - [33] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@7 + [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 to:irq1::@13 irq1::@13: scope:[irq1] from irq1::@12 - [34] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) - [35] (volatile byte) zoomx ← ++ (volatile byte) zoomx - [36] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 - [37] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 - [38] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 - [39] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 + [59] (volatile byte) greetnm ← ++ (volatile byte) greetnm + [60] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@6 to:irq1::@14 irq1::@14: scope:[irq1] from irq1::@13 - [40] (volatile byte) greetnm ← ++ (volatile byte) greetnm - [41] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 - to:irq1::@15 -irq1::@15: scope:[irq1] from irq1::@14 - [42] (volatile byte) greetnm ← (byte) 0 + [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) to:irq1::@7 -irq1::@7: scope:[irq1] from irq1::@12 irq1::@13 irq1::@14 irq1::@15 irq1::@4 irq1::@5 irq1::@6 - [43] (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 ) - [44] (byte) irq1::raster#0 ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) +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 to:irq1::@8 -irq1::@8: scope:[irq1] from irq1::@7 irq1::@8 - [45] 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 - [46] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 +irq1::@8: scope:[irq1] from irq1::@7 + [65] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 to:irq1::@1 -irq1::@6: scope:[irq1] from irq1::@11 - [47] *((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 - [48] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 - [49] *((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 - [50] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) - [51] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$12 - [52] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 - [53] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 - to:irq1::@7 + [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 (void()) main() main: scope:[main] from __start::@1 - [54] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 - [55] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 - [56] *((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 - [57] *((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 - [58] call memset + [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 asm { lda#0 } - [60] call *((const void()*) songInit) + [79] call *((const void()*) songInit) to:main::@1 main::@1: scope:[main] from main::@2 main::@6 - [61] (byte) main::i1#2 ← phi( main::@2/(byte) main::i1#1 main::@6/(byte) 0 ) - [62] if((byte) main::i1#2<(byte) $bc*(const byte) SIZEOF_BYTE) goto main::@2 + [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 to:main::@3 main::@3: scope:[main] from main::@1 main::@3 - [63] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 ) - [64] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) - [65] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) - [66] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) - [67] (byte) main::i#1 ← ++ (byte) main::i#2 - [68] if((byte) main::i#1!=(byte) 0) goto 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 asm { sei } - [70] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR - [71] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 - [72] *((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 - [73] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER - [74] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() - [75] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK - [76] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [77] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 + [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 asm { cli } to:main::@5 main::@5: scope:[main] from main::@4 main::@5 - [79] phi() + [98] phi() to:main::@5 main::@2: scope:[main] from main::@1 - [80] *((const nomodify byte*) SCREEN+(byte)(number) 3*(number) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) - [81] (byte) main::i1#1 ← ++ (byte) main::i1#2 + [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 to:main::@1 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from main - [82] phi() + [101] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [83] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto 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 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [85] return + [104] return to:@return memset::@2: scope:[memset] from memset::@1 - [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [87] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [105] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [106] (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 84a15ab99..3e49e53a3 100644 --- a/src/test/ref/examples/mega65/raster65.log +++ b/src/test/ref/examples/mega65/raster65.log @@ -136,8 +136,6 @@ 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*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (number) 1 - *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (number) 1 (byte) irq1::l#0 ← (byte) 0 to:irq1::@16 irq1::@4: scope:[irq1] from irq1::@2 @@ -231,13 +229,95 @@ irq1::@17: scope:[irq1] from irq1::@16 (byte) irq1::l#1 ← ++ (byte) irq1::l#3 to:irq1::@16 irq1::@18: scope:[irq1] from irq1::@16 - *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (number) 1 - *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (number) 1 call *((const void()*) songPlay) - *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (number) 2 - *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (number) 2 + (byte) irq1::barsin#0 ← (volatile byte) sinpos + (byte) irq1::barcnt#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 + 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 +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 + 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::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 + 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::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::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 + if((bool~) irq1::$19) goto irq1::@29 to:irq1::@return -irq1::@return: scope:[irq1] from irq1::@18 +irq1::@29: scope:[irq1] from irq1::@28 + (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::i2#1 ← ++ (byte) irq1::i2#3 + to:irq1::@28 +irq1::@return: scope:[irq1] from irq1::@28 return to:@return @@ -597,7 +677,16 @@ interrupt(HARDWARE_STACK)(void()) irq1() (number~) irq1::$12 (bool~) irq1::$13 (bool~) irq1::$14 +(bool~) irq1::$15 +(number~) irq1::$16 +(bool~) irq1::$17 +(bool~) irq1::$18 +(bool~) irq1::$19 (bool~) irq1::$2 +(byte~) irq1::$20 +(byte~) irq1::$21 +(number~) irq1::$22 +(number~) irq1::$23 (bool~) irq1::$3 (bool~) irq1::$4 (bool~) irq1::$5 @@ -615,7 +704,18 @@ interrupt(HARDWARE_STACK)(void()) irq1() (label) irq1::@16 (label) irq1::@17 (label) irq1::@18 +(label) irq1::@19 (label) irq1::@2 +(label) irq1::@20 +(label) irq1::@21 +(label) irq1::@22 +(label) irq1::@23 +(label) irq1::@24 +(label) irq1::@25 +(label) irq1::@26 +(label) irq1::@27 +(label) irq1::@28 +(label) irq1::@29 (label) irq1::@3 (label) irq1::@4 (label) irq1::@5 @@ -624,9 +724,64 @@ interrupt(HARDWARE_STACK)(void()) irq1() (label) irq1::@8 (label) irq1::@9 (label) irq1::@return +(byte) irq1::barcnt +(byte) irq1::barcnt#0 +(byte) irq1::barcnt#1 +(byte) irq1::barcnt#2 +(byte) irq1::barcnt#3 +(byte) irq1::barcnt#4 +(byte) irq1::barcnt#5 +(byte) irq1::barcnt#6 +(byte) irq1::barcnt#7 +(byte) irq1::barcnt#8 +(byte) irq1::barcnt#9 +(byte) irq1::barcol +(byte) irq1::barcol#0 +(byte) irq1::barcol#1 +(byte) irq1::barcol#2 +(byte) irq1::barcol#3 +(byte) irq1::barcol#4 +(byte) irq1::barcol#5 +(byte) irq1::barcol#6 +(byte) irq1::barcol#7 +(byte) irq1::barsin +(byte) irq1::barsin#0 +(byte) irq1::barsin#1 +(byte) irq1::barsin#2 +(byte) irq1::barsin#3 +(byte) irq1::barsin#4 +(byte) irq1::barsin#5 +(byte) irq1::barsin#6 +(byte) irq1::barsin#7 +(byte) irq1::barsin#8 +(byte) irq1::barsin#9 (const nomodify byte) irq1::blackbar = (byte) $13 (byte) irq1::col (byte) irq1::col#0 +(byte) irq1::i +(byte) irq1::i#0 +(byte) irq1::i#1 +(byte) irq1::i#2 +(byte) irq1::i#3 +(byte) irq1::i1 +(byte) irq1::i1#0 +(byte) irq1::i1#1 +(byte) irq1::i1#2 +(byte) irq1::i1#3 +(byte) irq1::i2 +(byte) irq1::i2#0 +(byte) irq1::i2#1 +(byte) irq1::i2#2 +(byte) irq1::i2#3 +(byte) irq1::idx +(byte) irq1::idx#0 +(byte) irq1::idx#1 +(byte) irq1::idx#2 +(byte) irq1::idx#3 +(byte) irq1::idx#4 +(byte) irq1::idx#5 +(byte) irq1::idx#6 +(byte) irq1::idx#7 (byte) irq1::l (byte) irq1::l#0 (byte) irq1::l#1 @@ -756,8 +911,6 @@ Adding number conversion cast (unumber) $7f in *((byte*)(const nomodify struct M 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) 1 in *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (number) 1 -Adding number conversion cast (unumber) 1 in *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (number) 1 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) $66 in *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (number) $66 @@ -770,10 +923,17 @@ Adding number conversion cast (unumber) irq1::$7 in (number~) irq1::$7 ← (byte 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) 0 in *((const byte*) rasters + (byte) irq1::l#3) ← (number) 0 -Adding number conversion cast (unumber) 1 in *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (number) 1 -Adding number conversion cast (unumber) 1 in *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (number) 1 -Adding number conversion cast (unumber) 2 in *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (number) 2 -Adding number conversion cast (unumber) 2 in *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (number) 2 +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) $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 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 @@ -782,17 +942,11 @@ 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 MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (unumber)(number) 1 -Inlining cast *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (unumber)(number) 1 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 MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (unumber)(number) 1 -Inlining cast *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (unumber)(number) 1 -Inlining cast *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (unumber)(number) 2 -Inlining cast *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (unumber)(number) 2 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 0 Simplifying constant pointer cast (byte*) 1 @@ -817,8 +971,6 @@ Simplifying constant integer cast $7f Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 Simplifying constant integer cast $28 Simplifying constant integer cast $66 Simplifying constant integer cast $50 @@ -829,10 +981,14 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 +Simplifying constant integer cast $10 +Simplifying constant integer cast $10 +Simplifying constant integer cast $10 +Simplifying constant integer cast $f +Simplifying constant integer cast $a +Simplifying constant integer cast $13 Simplifying constant integer cast 2 +Simplifying constant integer cast 7 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -846,8 +1002,6 @@ 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) 1 -Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $66 Finalized unsigned number type (byte) $50 @@ -857,17 +1011,24 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) $10 +Finalized unsigned number type (byte) $10 +Finalized unsigned number type (byte) $10 +Finalized unsigned number type (byte) $f +Finalized unsigned number type (byte) $a +Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) 7 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 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 [94] (bool~) irq1::$6 ← (byte) irq1::line#6 != (const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1 from [93] (bool~) irq1::$5 ← (byte) irq1::line#6 == (const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1 -Inversing boolean not [103] (bool~) irq1::$9 ← (volatile byte) zoomx != (byte) 0 from [102] (bool~) irq1::$8 ← (volatile byte) zoomx == (byte) 0 -Inversing boolean not [108] (bool~) irq1::$11 ← (volatile byte) greetnm != (const nomodify byte) GREETCOUNT from [107] (bool~) irq1::$10 ← (volatile byte) greetnm == (const nomodify byte) GREETCOUNT +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 Successful SSA optimization Pass2UnaryNotSimplification Alias memset::return#0 = memset::str#1 memset::return#3 memset::return#1 Alias memset::str#2 = memset::str#3 @@ -884,6 +1045,20 @@ Alias irq1::wobblepos#10 = irq1::wobblepos#3 irq1::wobblepos#4 irq1::wobblepos#2 Alias irq1::line#7 = irq1::line#8 Alias irq1::wobblepos#5 = irq1::wobblepos#6 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#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::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::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 Successful SSA optimization Pass2AliasElimination Alias irq1::line#10 = irq1::line#9 Successful SSA optimization Pass2AliasElimination @@ -896,6 +1071,10 @@ Identical Phi Values (byte) memset::c#1 (byte) memset::c#3 Identical Phi Values (byte) irq1::raster#1 (byte) irq1::raster#0 Identical Phi Values (byte) irq1::line#7 (byte) irq1::line#10 Identical Phi Values (byte) irq1::wobblepos#5 (byte) irq1::wobblepos#7 +Identical Phi Values (byte) irq1::barsin#6 (byte) irq1::barsin#2 +Identical Phi Values (byte) irq1::barcnt#6 (byte) irq1::barcnt#2 +Identical Phi Values (byte) irq1::barsin#3 (byte) irq1::barsin#6 +Identical Phi Values (byte) irq1::barcnt#4 (byte) irq1::barcnt#6 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (void*) memset::return#0 (void*) memset::str#0 Successful SSA optimization Pass2IdenticalPhiElimination @@ -905,13 +1084,17 @@ Simple Condition (bool~) main::$3 [28] if((byte) main::i1#2<(byte~) main::$2) go 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 [72] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@5 -Simple Condition (bool~) irq1::$4 [76] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@6 -Simple Condition (bool~) irq1::$6 [79] 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 [86] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 -Simple Condition (bool~) irq1::$11 [89] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 -Simple Condition (bool~) irq1::$13 [95] 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 [99] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@17 +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 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [19] (word) memset::num#0 ← (unumber)(number) $28*(number) $19 Constant right-side identified [26] (byte~) main::$2 ← sizeof (const byte*) MEGA_LOGO @@ -924,6 +1107,10 @@ Constant (const byte) main::$2 = sizeof MEGA_LOGO Constant (const byte) main::i#0 = 0 Constant (const byte) irq1::line#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 Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) memset::$4 = (byte*)memset::str#0 Constant (const byte*) memset::dst#0 = (byte*)memset::str#0 @@ -947,26 +1134,44 @@ 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 +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::i#0 Inlining constant with var siblings (const byte) irq1::line#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 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 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::$21) +Consolidated array index constant in assignment *(rasters+irq1::scrollypos + irq1::$20) +Successful SSA optimization Pass2ConstantAdditionElimination +Alias irq1::i2#2 = irq1::$20 irq1::$21 +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::@19(between irq1::@12 and irq1::@7) -Added new block during phi lifting irq1::@20(between irq1::@13 and irq1::@7) -Added new block during phi lifting irq1::@21(between irq1::@14 and irq1::@7) +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) 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 main::@3 Adding NOP phi() at start of main::@6 Adding NOP phi() at start of memset @@ -974,28 +1179,45 @@ 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:70 +Calls in [main] to memset:105 -Created 7 initial phi equivalence classes +Created 16 initial phi equivalence classes Coalesced [14] irq1::wobblepos#16 ← irq1::wobblepos#0 -Coalesced [29] irq1::l#4 ← irq1::l#1 -Coalesced [46] irq1::wobblepos#21 ← irq1::wobblepos#10 -Coalesced [51] irq1::line#16 ← irq1::line#1 -Coalesced (already) [52] irq1::wobblepos#17 ← irq1::wobblepos#7 -Coalesced (already) [53] irq1::wobblepos#20 ← irq1::wobblepos#10 -Coalesced (already) [54] irq1::wobblepos#19 ← irq1::wobblepos#10 -Coalesced (already) [55] irq1::wobblepos#18 ← irq1::wobblepos#10 -Coalesced (already) [57] irq1::wobblepos#24 ← irq1::wobblepos#10 -Coalesced (already) [60] irq1::wobblepos#23 ← irq1::wobblepos#10 -Coalesced [65] irq1::wobblepos#22 ← irq1::wobblepos#1 -Coalesced [93] main::i#3 ← main::i#1 -Coalesced [96] main::i1#4 ← main::i1#1 -Coalesced [105] memset::dst#4 ← memset::dst#1 -Coalesced down to 6 phi equivalence classes +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 Culled Empty Block (label) __start::@2 +Culled Empty Block (label) irq1::@3 Culled Empty Block (label) irq1::@21 -Culled Empty Block (label) irq1::@20 -Culled Empty Block (label) irq1::@19 +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) main::@3 Culled Empty Block (label) main::@8 Culled Empty Block (label) memset::@2 @@ -1006,6 +1228,30 @@ 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 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::@28 to irq1::@25 +Renumbering block irq1::@29 to irq1::@26 Adding NOP phi() at start of __start Adding NOP phi() at start of __start::@1 Adding NOP phi() at start of main::@5 @@ -1039,145 +1285,185 @@ 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::@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 ) +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 ) [14] if((byte) irq1::line#10!=(const nomodify byte) NUMBERL) goto irq1::@2 - to:irq1::@3 -irq1::@3: scope:[irq1] from irq1::@1 - [15] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 1 - [16] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 1 - to:irq1::@16 -irq1::@16: scope:[irq1] from irq1::@17 irq1::@3 - [17] (byte) irq1::l#2 ← phi( irq1::@17/(byte) irq1::l#1 irq1::@3/(byte) 0 ) - [18] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@17 + 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 + [17] call *((const void()*) songPlay) + [18] (byte) irq1::barsin#0 ← (volatile byte) sinpos to:irq1::@18 -irq1::@18: scope:[irq1] from irq1::@16 - [19] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 1 - [20] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 1 - [21] call *((const void()*) songPlay) - [22] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 2 - [23] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 2 +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 to:irq1::@return -irq1::@return: scope:[irq1] from irq1::@18 - [24] return +irq1::@return: scope:[irq1] from irq1::@25 + [23] return to:@return -irq1::@17: scope:[irq1] from irq1::@16 - [25] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 - [26] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 - to:irq1::@16 +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 + to:irq1::@25 +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 + 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::@2: scope:[irq1] from irq1::@1 - [27] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) - [28] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 - [29] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 - [30] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@4 + [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 to:irq1::@10 -irq1::@10: scope:[irq1] from irq1::@2 - [31] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@5 +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 to:irq1::@11 irq1::@11: scope:[irq1] from irq1::@10 - [32] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@6 + [52] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@6 to:irq1::@12 irq1::@12: scope:[irq1] from irq1::@11 - [33] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@7 + [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 to:irq1::@13 irq1::@13: scope:[irq1] from irq1::@12 - [34] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) - [35] (volatile byte) zoomx ← ++ (volatile byte) zoomx - [36] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 - [37] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 - [38] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 - [39] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 + [59] (volatile byte) greetnm ← ++ (volatile byte) greetnm + [60] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@6 to:irq1::@14 irq1::@14: scope:[irq1] from irq1::@13 - [40] (volatile byte) greetnm ← ++ (volatile byte) greetnm - [41] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 - to:irq1::@15 -irq1::@15: scope:[irq1] from irq1::@14 - [42] (volatile byte) greetnm ← (byte) 0 + [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) to:irq1::@7 -irq1::@7: scope:[irq1] from irq1::@12 irq1::@13 irq1::@14 irq1::@15 irq1::@4 irq1::@5 irq1::@6 - [43] (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 ) - [44] (byte) irq1::raster#0 ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) +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 to:irq1::@8 -irq1::@8: scope:[irq1] from irq1::@7 irq1::@8 - [45] 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 - [46] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 +irq1::@8: scope:[irq1] from irq1::@7 + [65] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 to:irq1::@1 -irq1::@6: scope:[irq1] from irq1::@11 - [47] *((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 - [48] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 - [49] *((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 - [50] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) - [51] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$12 - [52] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 - [53] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 - to:irq1::@7 + [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 (void()) main() main: scope:[main] from __start::@1 - [54] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 - [55] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 - [56] *((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 - [57] *((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 - [58] call memset + [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 asm { lda#0 } - [60] call *((const void()*) songInit) + [79] call *((const void()*) songInit) to:main::@1 main::@1: scope:[main] from main::@2 main::@6 - [61] (byte) main::i1#2 ← phi( main::@2/(byte) main::i1#1 main::@6/(byte) 0 ) - [62] if((byte) main::i1#2<(byte) $bc*(const byte) SIZEOF_BYTE) goto main::@2 + [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 to:main::@3 main::@3: scope:[main] from main::@1 main::@3 - [63] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 ) - [64] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) - [65] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) - [66] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) - [67] (byte) main::i#1 ← ++ (byte) main::i#2 - [68] if((byte) main::i#1!=(byte) 0) goto 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 asm { sei } - [70] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR - [71] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 - [72] *((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 - [73] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER - [74] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() - [75] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK - [76] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [77] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 + [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 asm { cli } to:main::@5 main::@5: scope:[main] from main::@4 main::@5 - [79] phi() + [98] phi() to:main::@5 main::@2: scope:[main] from main::@1 - [80] *((const nomodify byte*) SCREEN+(byte)(number) 3*(number) $28 + (byte) main::i1#2) ← *((const byte*) MEGA_LOGO + (byte) main::i1#2) - [81] (byte) main::i1#1 ← ++ (byte) main::i1#2 + [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 to:main::@1 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from main - [82] phi() + [101] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [83] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto 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 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [85] return + [104] return to:@return memset::@2: scope:[memset] from memset::@1 - [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [87] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [105] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@1 @@ -1470,9 +1756,39 @@ VARIABLE REGISTER WEIGHTS (volatile byte) greetnm loadstore 1.3529411764705883 interrupt(HARDWARE_STACK)(void()) irq1() (byte~) irq1::$12 22.0 +(byte~) irq1::$22 22.0 +(byte~) irq1::$23 22.0 (byte~) irq1::$7 22.0 +(byte) irq1::barcnt +(byte) irq1::barcnt#1 22.0 +(byte) irq1::barcnt#2 2.588235294117647 +(byte) irq1::barcol +(byte) irq1::barcol#0 22.0 +(byte) irq1::barcol#1 101.0 +(byte) irq1::barcol#2 75.75 +(byte) irq1::barcol#3 103.75 +(byte) irq1::barcol#4 151.5 +(byte) irq1::barsin +(byte) irq1::barsin#0 4.0 +(byte) irq1::barsin#1 11.0 +(byte) irq1::barsin#2 2.1875 (byte) irq1::col (byte) irq1::col#0 16.5 +(byte) irq1::i +(byte) irq1::i#1 202.0 +(byte) irq1::i#2 60.599999999999994 +(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::idx +(byte) irq1::idx#0 11.0 +(byte) irq1::idx#1 67.33333333333333 +(byte) irq1::idx#2 101.0 +(byte) irq1::idx#3 138.33333333333331 +(byte) irq1::idx#4 101.0 (byte) irq1::l (byte) irq1::l#1 22.0 (byte) irq1::l#2 14.666666666666666 @@ -1504,7 +1820,7 @@ interrupt(HARDWARE_STACK)(void()) irq1() (word) memset::num (void*) memset::return (void*) memset::str -(volatile byte) sinpos loadstore 2.0 +(volatile byte) sinpos loadstore 0.2564102564102564 (volatile byte) xpos loadstore 0.3823529411764706 (volatile byte) zoomx loadstore 1.3529411764705883 @@ -1512,6 +1828,13 @@ Initial phi equivalence classes [ irq1::line#10 irq1::line#1 ] [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] [ 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::i1#2 irq1::i1#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::i#2 main::i#1 ] [ memset::dst#2 memset::dst#1 ] @@ -1519,6 +1842,8 @@ 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::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 ] @@ -1528,6 +1853,13 @@ Complete equivalence classes [ irq1::line#10 irq1::line#1 ] [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] [ 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::i1#2 irq1::i1#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::i#2 main::i#1 ] [ memset::dst#2 memset::dst#1 ] @@ -1535,6 +1867,8 @@ Complete equivalence classes [ zoomx ] [ xpos ] [ greetnm ] +[ irq1::$22 ] +[ irq1::$23 ] [ irq1::col#0 ] [ irq1::zoomval#0 ] [ irq1::$7 ] @@ -1543,18 +1877,27 @@ Complete equivalence classes 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 [ main::i1#2 main::i1#1 ] -Allocated zp[1]:6 [ main::i#2 main::i#1 ] -Allocated zp[2]:7 [ memset::dst#2 memset::dst#1 ] -Allocated zp[1]:9 [ sinpos ] -Allocated zp[1]:10 [ zoomx ] -Allocated zp[1]:11 [ xpos ] -Allocated zp[1]:12 [ greetnm ] -Allocated zp[1]:13 [ irq1::col#0 ] -Allocated zp[1]:14 [ irq1::zoomval#0 ] -Allocated zp[1]:15 [ irq1::$7 ] -Allocated zp[1]:16 [ irq1::raster#0 ] -Allocated zp[1]:17 [ irq1::$12 ] +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 ] INITIAL ASM Target platform is mega65_c64 / MEGA45GS02 @@ -1631,13 +1974,13 @@ Target platform is mega65_c64 / MEGA45GS02 // Pointer to the song play routine .label songPlay = SONG+3 // Sinus Position - .label sinpos = 9 + .label sinpos = $10 // Zoom Position - .label zoomx = $a + .label zoomx = $11 // soft scroll position of text scrolly (0-7) - .label xpos = $b + .label xpos = $12 // The greeting currently being shown - .label greetnm = $c + .label greetnm = $13 .segment Code // __start __start: { @@ -1676,14 +2019,23 @@ irq1: { .const scrollypos = $66 // size of raster behind scrolly .const blackbar = $13 - .label __7 = $f - .label __12 = $11 + .label __7 = $18 + .label __12 = $1a + .label __22 = $14 + .label __23 = $15 .label wobblepos = 3 - .label col = $d - .label zoomval = $e - .label raster = $10 + .label col = $16 + .label zoomval = $17 + .label raster = $19 .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 // entry interrupt(HARDWARE_STACK) pha txa @@ -1722,241 +2074,363 @@ irq1: { lda #NUMBERL cmp.z line bne __b2 - jmp __b3 - // irq1::@3 - __b3: - // [15] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 1 -- _deref_pbuc1=vbuc2 - lda #1 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // [16] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 1 -- _deref_pbuc1=vbuc2 - lda #1 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR - // [17] phi from irq1::@3 to irq1::@16 [phi:irq1::@3->irq1::@16] - __b16_from___b3: - // [17] phi (byte) irq1::l#2 = (byte) 0 [phi:irq1::@3->irq1::@16#0] -- vbuz1=vbuc1 + // [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 __b16 + jmp __b15 // Set all raster bars to black - // irq1::@16 - __b16: - // [18] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@17 -- vbuz1_neq_vbuc1_then_la1 + // 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 __b17 + bne __b16 + jmp __b17 + // irq1::@17 + __b17: + // [17] call *((const void()*) songPlay) + // play music + jsr songPlay + // [18] (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 + lda #0 + sta.z barcnt jmp __b18 // irq1::@18 __b18: - // [19] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 1 -- _deref_pbuc1=vbuc2 - lda #1 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // [20] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 1 -- _deref_pbuc1=vbuc2 - lda #1 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR - // [21] call *((const void()*) songPlay) - // play music - jsr songPlay - // [22] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // [23] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR + // [20] if((byte) irq1::barcnt#2<(byte) $10) goto irq1::@19 -- 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 + lda #0 + sta.z i2 + jmp __b25 + // 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 + cmp #$13 + bcc __b26 jmp __breturn // irq1::@return __breturn: - // [24] return - exit interrupt(HARDWARE_STACK) + // [23] return - exit interrupt(HARDWARE_STACK) pla tay pla tax pla rti - // irq1::@17 - __b17: - // [25] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // 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 + 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 + 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 + ldy.z barsin + lda SINUS,y + sta.z idx + // [29] (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 + 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 + lda.z i1 + cmp #$f + bcc __b23 + jmp __b24 + // irq1::@24 + __b24: + // [34] (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 + 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 + dec.z barcol + // [37] *((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 + 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 + lda.z barcol + ldy.z idx + sta rasters,y + // [41] (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 + 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 lda #0 ldy.z l sta rasters,y - // [26] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 -- vbuz1=_inc_vbuz1 + // [45] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 -- vbuz1=_inc_vbuz1 inc.z l - // [17] phi from irq1::@17 to irq1::@16 [phi:irq1::@17->irq1::@16] - __b16_from___b17: - // [17] phi (byte) irq1::l#2 = (byte) irq1::l#1 [phi:irq1::@17->irq1::@16#0] -- register_copy - jmp __b16 + // [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 // irq1::@2 __b2: - // [27] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) -- vbuz1=pbuc1_derefidx_vbuz2 + // [46] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z line lda rasters,y sta.z col - // [28] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuz1 + // [47] *((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 - // [29] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuz1 + // [48] *((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 - // [30] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@4 -- vbuz1_lt_vbuc1_then_la1 + // [49] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z line cmp #scrollypos - bcc __b4 + 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 jmp __b10 // irq1::@10 __b10: - // [31] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@5 -- vbuz1_eq_vbuc1_then_la1 - lda #scrollypos + // [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 cmp.z line beq __b5 jmp __b11 // irq1::@11 __b11: - // [32] 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 + // [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 cmp.z line - beq __b6 + bne __b6_from___b11 jmp __b12 // irq1::@12 __b12: - // [33] 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: - // [34] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) -- vbuz1=pbuc1_derefidx_vbuz2 + // [53] (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 - // [35] (volatile byte) zoomx ← ++ (volatile byte) zoomx -- vbuz1=_inc_vbuz1 + // [54] (volatile byte) zoomx ← ++ (volatile byte) zoomx -- vbuz1=_inc_vbuz1 inc.z zoomx - // [36] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 -- _deref_pbuc1=vbuz1 + // [55] *((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 - // [37] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [56] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 lda.z zoomval inc sta.z __7 - // [38] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 -- _deref_pbuc1=vbuz1 + // [57] *((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 - // [39] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 -- vbuz1_neq_0_then_la1 + // [58] if((volatile byte) zoomx!=(byte) 0) goto irq1::@6 -- vbuz1_neq_0_then_la1 lda.z zoomx cmp #0 - bne __b7_from___b13 + 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 jmp __b14 // irq1::@14 __b14: - // [40] (volatile byte) greetnm ← ++ (volatile byte) greetnm -- vbuz1=_inc_vbuz1 - inc.z greetnm - // [41] 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: - // [42] (volatile byte) greetnm ← (byte) 0 -- vbuz1=vbuc1 + // [61] (volatile byte) greetnm ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z greetnm - // [43] 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: - // [43] 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: - // [44] (byte) irq1::raster#0 ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) -- vbuz1=_deref_pbuc1 + // [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 + 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 + lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER + cmp.z raster + beq __b7 jmp __b8 // irq1::@8 __b8: - // [45] 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: - // [46] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 -- vbuz1=_inc_vbuz1 + // [65] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 -- vbuz1=_inc_vbuz1 inc.z line - // [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 + // [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 jmp __b1 - // irq1::@6 - __b6: - // [47] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 + // irq1::@5 + __b5: + // [66] *((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 __b7_from___b6 - // irq1::@5 - __b5: - // [48] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 + 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 // if raster position = scrolly pos do scrolly // no wobbling from this point lda #$50 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - // [49] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos -- _deref_pbuc1=vbuz1 + // [68] *((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 __b7_from___b5 - // irq1::@4 - __b4: - // [50] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) -- vbuz1=vbuc1_plus_pbuc2_derefidx_vbuz2 + 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 - // [51] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$12 -- _deref_pbuc1=vbuz1 + // [70] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$12 -- _deref_pbuc1=vbuz1 // if raster position < scrolly pos do wobble Logo! lda.z __12 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - // [52] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 -- vbuz1=_inc_vbuz1 + // [71] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 -- vbuz1=_inc_vbuz1 inc.z wobblepos - // [53] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 -- _deref_pbuc1=vbuc2 + // [72] *((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 __b7_from___b4 + jmp __b6_from___b3 } // main main: { - .label i1 = 5 + .label i1 = $c // Set up 256 color palette - .label i = 6 - // [54] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 -- _deref_pbuc1=vbuc2 + .label i = $d + // [73] *((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 - // [55] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 -- _deref_pbuc1=vbuc2 + // [74] *((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 - // [56] *((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 + // [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 // Enable 48MHz fast mode lda #$40 ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB - // [57] *((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 + // [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 lda #$40 ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC - // [58] call memset + // [77] call memset // Clear screen - // [82] phi from main to memset [phi:main->memset] + // [101] phi from main to memset [phi:main->memset] memset_from_main: jsr memset jmp __b6 @@ -1965,48 +2439,48 @@ main: { // asm { lda#0 } // Initialize music lda #0 - // [60] call *((const void()*) songInit) + // [79] call *((const void()*) songInit) jsr songInit - // [61] phi from main::@6 to main::@1 [phi:main::@6->main::@1] + // [80] phi from main::@6 to main::@1 [phi:main::@6->main::@1] __b1_from___b6: - // [61] phi (byte) main::i1#2 = (byte) 0 [phi:main::@6->main::@1#0] -- vbuz1=vbuc1 + // [80] phi (byte) main::i1#2 = (byte) 0 [phi:main::@6->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i1 jmp __b1 // Put MEGA logo on screen // main::@1 __b1: - // [62] if((byte) main::i1#2<(byte) $bc*(const byte) SIZEOF_BYTE) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + // [81] 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 - // [63] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [82] phi from main::@1 to main::@3 [phi:main::@1->main::@3] __b3_from___b1: - // [63] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 + // [82] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b3 - // [63] phi from main::@3 to main::@3 [phi:main::@3->main::@3] + // [82] phi from main::@3 to main::@3 [phi:main::@3->main::@3] __b3_from___b3: - // [63] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy + // [82] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy jmp __b3 // main::@3 __b3: - // [64] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + // [83] *((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 - // [65] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + // [84] *((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 - // [66] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + // [85] *((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 - // [67] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [86] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [68] if((byte) main::i#1!=(byte) 0) goto main::@3 -- vbuz1_neq_0_then_la1 + // [87] if((byte) main::i#1!=(byte) 0) goto main::@3 -- vbuz1_neq_0_then_la1 lda.z i cmp #0 bne __b3_from___b3 @@ -2016,43 +2490,43 @@ main: { // asm { sei } // Set up raster interrupts C64 style sei - // [70] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [89] *((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 - // [71] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 -- _deref_pbuc1=vbuc2 + // [90] *((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 - // [72] *((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 + // [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 lda #$7f and VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1 sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1 - // [73] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [92] *((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 - // [74] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() -- _deref_qprc1=pprc2 + // [93] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() -- _deref_qprc1=pprc2 // Set the IRQ routine lda #irq1 sta HARDWARE_IRQ+1 - // [75] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [94] *((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 - // [76] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [95] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [77] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 -- _deref_pbuc1=vbuc2 + // [96] *((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 - // [79] phi from main::@4 main::@5 to main::@5 [phi:main::@4/main::@5->main::@5] + // [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 @@ -2061,15 +2535,15 @@ main: { jmp __b5_from___b5 // main::@2 __b2: - // [80] *((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 + // [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 ldy.z i1 lda MEGA_LOGO,y sta SCREEN+3*$28,y - // [81] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1 + // [100] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1 inc.z i1 - // [61] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [80] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: - // [61] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@2->main::@1#0] -- register_copy + // [80] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@2->main::@1#0] -- register_copy jmp __b1 } // memset @@ -2079,10 +2553,10 @@ memset: { .const num = $28*$19 .label str = SCREEN .label end = str+num - .label dst = 7 - // [83] phi from memset to memset::@1 [phi:memset->memset::@1] + .label dst = $e + // [102] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [83] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [102] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -2090,7 +2564,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [103] 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 @@ -2100,19 +2574,19 @@ memset: { jmp __breturn // memset::@return __breturn: - // [85] return + // [104] return rts // memset::@2 __b2: - // [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [105] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [87] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inw.z dst - // [83] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [102] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [83] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [102] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data @@ -2142,48 +2616,50 @@ 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 MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [16] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [19] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [20] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [21] call *((const void()*) songPlay) [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z -Statement [22] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 2 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [23] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 2 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [24] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [25] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 [ irq1::l#2 ] ( [ irq1::l#2 ] { } ) 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 [39] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) 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 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 [41] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [42] (volatile byte) greetnm ← (byte) 0 [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [47] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [48] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [49] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [50] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 irq1::$12 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 irq1::$12 ] { } ) always clobbers reg byte a -Statement [53] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#1 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#1 ] { } ) always clobbers reg byte a -Statement [54] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [55] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [56] *((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 [57] *((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 [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 asm { lda#0 } always clobbers reg byte a -Statement [60] call *((const void()*) songInit) [ ] ( main:6 [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z -Statement [64] *((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]:6 [ main::i#2 main::i#1 ] -Statement [65] *((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 [66] *((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 [70] *((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 [71] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [72] *((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 [73] *((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 [74] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [75] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [76] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [77] *((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 [80] *((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]:5 [ main::i1#2 main::i1#1 ] -Statement [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:6::memset:58 [ memset::dst#2 ] { } ) always clobbers reg byte a -Statement [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:6::memset:58 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +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 [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 @@ -2191,64 +2667,71 @@ 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 MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [16] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [19] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [20] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [21] call *((const void()*) songPlay) [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z -Statement [22] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 2 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [23] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 2 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [24] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [25] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 [ irq1::l#2 ] ( [ irq1::l#2 ] { } ) always clobbers reg byte a -Statement [39] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [41] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [42] (volatile byte) greetnm ← (byte) 0 [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [47] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [48] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [49] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 ] { } ) always clobbers reg byte a -Statement [50] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 irq1::$12 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#10 irq1::$12 ] { } ) always clobbers reg byte a -Statement [53] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#1 ] ( [ zoomx xpos greetnm irq1::line#10 irq1::wobblepos#1 ] { } ) always clobbers reg byte a -Statement [54] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [55] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [56] *((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 [57] *((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 [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 asm { lda#0 } always clobbers reg byte a -Statement [60] call *((const void()*) songInit) [ ] ( main:6 [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z -Statement [64] *((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 [65] *((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 [66] *((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 [70] *((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 [71] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [72] *((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 [73] *((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 [74] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [75] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [76] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:6 [ ] { } ) always clobbers reg byte a -Statement [77] *((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 [80] *((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 [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:6::memset:58 [ memset::dst#2 ] { } ) always clobbers reg byte a -Statement [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:6::memset:58 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +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 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 [ main::i1#2 main::i1#1 ] : zp[1]:5 , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:6 [ main::i#2 main::i#1 ] : zp[1]:6 , reg byte x , reg byte y , reg byte z , -Potential registers zp[2]:7 [ memset::dst#2 memset::dst#1 ] : zp[2]:7 , -Potential registers zp[1]:9 [ sinpos ] : zp[1]:9 , -Potential registers zp[1]:10 [ zoomx ] : zp[1]:10 , -Potential registers zp[1]:11 [ xpos ] : zp[1]:11 , -Potential registers zp[1]:12 [ greetnm ] : zp[1]:12 , -Potential registers zp[1]:13 [ irq1::col#0 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:14 [ irq1::zoomval#0 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:15 [ irq1::$7 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:16 [ irq1::raster#0 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:17 [ irq1::$12 ] : zp[1]:17 , reg byte a , 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 , REGISTER UPLIFT SCOPES -Uplift Scope [memset] 3,336.67: zp[2]:7 [ memset::dst#2 memset::dst#1 ] -Uplift Scope [main] 370.33: zp[1]:5 [ main::i1#2 main::i1#1 ] 353.5: zp[1]:6 [ main::i#2 main::i#1 ] -Uplift Scope [irq1] 56: zp[1]:16 [ 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 ] 25.14: zp[1]:2 [ irq1::line#10 irq1::line#1 ] 22: zp[1]:15 [ irq1::$7 ] 22: zp[1]:17 [ irq1::$12 ] 16.5: zp[1]:13 [ irq1::col#0 ] 11: zp[1]:14 [ irq1::zoomval#0 ] -Uplift Scope [] 2: zp[1]:9 [ sinpos ] 1.35: zp[1]:10 [ zoomx ] 1.35: zp[1]:12 [ greetnm ] 0.38: zp[1]:11 [ xpos ] +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 [MOS6526_CIA] Uplift Scope [MOS6569_VICII] Uplift Scope [MOS6581_SID] @@ -2256,40 +2739,60 @@ Uplift Scope [MOS4569_VICIII] Uplift Scope [MEGA65_VICIV] Uplift Scope [__start] -Uplifting [memset] best 5930 combination zp[2]:7 [ memset::dst#2 memset::dst#1 ] -Uplifting [main] best 5630 combination reg byte x [ main::i1#2 main::i1#1 ] reg byte x [ main::i#2 main::i#1 ] -Uplifting [irq1] best 5018 combination reg byte a [ irq1::raster#0 ] reg byte z [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] zp[1]:4 [ irq1::l#2 irq1::l#1 ] reg byte x [ irq1::line#10 irq1::line#1 ] zp[1]:15 [ irq1::$7 ] zp[1]:17 [ irq1::$12 ] zp[1]:13 [ irq1::col#0 ] zp[1]:14 [ irq1::zoomval#0 ] -Limited combination testing to 100 combinations of 200000 possible. -Uplifting [] best 5018 combination zp[1]:9 [ sinpos ] zp[1]:10 [ zoomx ] zp[1]:12 [ greetnm ] zp[1]:11 [ xpos ] -Uplifting [MOS6526_CIA] best 5018 combination -Uplifting [MOS6569_VICII] best 5018 combination -Uplifting [MOS6581_SID] best 5018 combination -Uplifting [MOS4569_VICIII] best 5018 combination -Uplifting [MEGA65_VICIV] best 5018 combination -Uplifting [__start] best 5018 combination +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 ] +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 4898 combination reg byte x [ irq1::l#2 irq1::l#1 ] -Attempting to uplift remaining variables inzp[1]:15 [ irq1::$7 ] -Uplifting [irq1] best 4838 combination reg byte a [ irq1::$7 ] -Attempting to uplift remaining variables inzp[1]:17 [ irq1::$12 ] -Uplifting [irq1] best 4778 combination reg byte a [ irq1::$12 ] -Attempting to uplift remaining variables inzp[1]:13 [ irq1::col#0 ] -Uplifting [irq1] best 4688 combination reg byte a [ irq1::col#0 ] -Attempting to uplift remaining variables inzp[1]:14 [ irq1::zoomval#0 ] -Uplifting [irq1] best 4598 combination reg byte a [ irq1::zoomval#0 ] -Attempting to uplift remaining variables inzp[1]:9 [ sinpos ] -Uplifting [] best 4598 combination zp[1]:9 [ sinpos ] -Attempting to uplift remaining variables inzp[1]:10 [ zoomx ] -Uplifting [] best 4598 combination zp[1]:10 [ zoomx ] -Attempting to uplift remaining variables inzp[1]:12 [ greetnm ] -Uplifting [] best 4598 combination zp[1]:12 [ greetnm ] -Attempting to uplift remaining variables inzp[1]:11 [ xpos ] -Uplifting [] best 4598 combination zp[1]:11 [ xpos ] -Allocated (was zp[2]:7) zp[2]:2 [ memset::dst#2 memset::dst#1 ] -Allocated (was zp[1]:9) zp[1]:4 [ sinpos ] -Allocated (was zp[1]:10) zp[1]:5 [ zoomx ] -Allocated (was zp[1]:11) zp[1]:6 [ xpos ] -Allocated (was zp[1]:12) zp[1]:7 [ greetnm ] +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 ] +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 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -2365,13 +2868,13 @@ ASSEMBLER BEFORE OPTIMIZATION // Pointer to the song play routine .label songPlay = SONG+3 // Sinus Position - .label sinpos = 4 + .label sinpos = 6 // Zoom Position - .label zoomx = 5 + .label zoomx = 7 // soft scroll position of text scrolly (0-7) - .label xpos = 6 + .label xpos = 8 // The greeting currently being shown - .label greetnm = 7 + .label greetnm = 9 .segment Code // __start __start: { @@ -2410,6 +2913,8 @@ irq1: { .const scrollypos = $66 // size of raster behind scrolly .const blackbar = $13 + .label barsin = 3 + .label barcnt = 2 // entry interrupt(HARDWARE_STACK) pha txa @@ -2431,233 +2936,340 @@ irq1: { sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2 // [11] (volatile byte) sinpos ← ++ (volatile byte) sinpos -- vbuz1=_inc_vbuz1 inc.z sinpos - // [12] (byte) irq1::wobblepos#0 ← (volatile byte) sinpos -- vbuzz=vbuz1 + // [12] (byte) irq1::wobblepos#0 ← (volatile byte) sinpos -- vbuxx=vbuz1 // Generate Raster Bars and more - ldz sinpos + ldx.z sinpos // [13] phi from irq1 to irq1::@1 [phi:irq1->irq1::@1] __b1_from_irq1: // [13] phi (byte) irq1::wobblepos#10 = (byte) irq1::wobblepos#0 [phi:irq1->irq1::@1#0] -- register_copy - // [13] phi (byte) irq1::line#10 = (byte) 0 [phi:irq1->irq1::@1#1] -- vbuxx=vbuc1 - ldx #0 + // [13] phi (byte) irq1::line#10 = (byte) 0 [phi:irq1->irq1::@1#1] -- vbuzz=vbuc1 + ldz #0 jmp __b1 // irq1::@1 __b1: - // [14] if((byte) irq1::line#10!=(const nomodify byte) NUMBERL) goto irq1::@2 -- vbuxx_neq_vbuc1_then_la1 - cpx #NUMBERL + // [14] if((byte) irq1::line#10!=(const nomodify byte) NUMBERL) goto irq1::@2 -- vbuzz_neq_vbuc1_then_la1 + cpz #NUMBERL bne __b2 - jmp __b3 - // irq1::@3 - __b3: - // [15] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 1 -- _deref_pbuc1=vbuc2 - lda #1 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // [16] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 1 -- _deref_pbuc1=vbuc2 - lda #1 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR - // [17] phi from irq1::@3 to irq1::@16 [phi:irq1::@3->irq1::@16] - __b16_from___b3: - // [17] phi (byte) irq1::l#2 = (byte) 0 [phi:irq1::@3->irq1::@16#0] -- vbuxx=vbuc1 + // [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 __b16 + jmp __b15 // Set all raster bars to black - // irq1::@16 - __b16: - // [18] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@17 -- vbuxx_neq_vbuc1_then_la1 + // irq1::@15 + __b15: + // [16] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@16 -- vbuxx_neq_vbuc1_then_la1 cpx #NUMBERL - bne __b17 + bne __b16 + jmp __b17 + // irq1::@17 + __b17: + // [17] call *((const void()*) songPlay) + // play music + jsr songPlay + // [18] (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 + lda #0 + sta.z barcnt jmp __b18 // irq1::@18 __b18: - // [19] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 1 -- _deref_pbuc1=vbuc2 - lda #1 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // [20] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 1 -- _deref_pbuc1=vbuc2 - lda #1 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR - // [21] call *((const void()*) songPlay) - // play music - jsr songPlay - // [22] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // [23] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR + // [20] if((byte) irq1::barcnt#2<(byte) $10) goto irq1::@19 -- 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 + ldx #0 + jmp __b25 + // Produce dark area behind text + // irq1::@25 + __b25: + // [22] if((byte) irq1::i2#2<(byte) $13) goto irq1::@26 -- vbuxx_lt_vbuc1_then_la1 + cpx #$13 + bcc __b26 jmp __breturn // irq1::@return __breturn: - // [24] return - exit interrupt(HARDWARE_STACK) + // [23] return - exit interrupt(HARDWARE_STACK) pla tay pla tax pla rti - // irq1::@17 - __b17: - // [25] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // 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 + lda rasters+scrollypos,x + lsr + // [25] (byte~) irq1::$23 ← (byte~) irq1::$22 & (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 + sta rasters+scrollypos,x + // [27] (byte) irq1::i2#1 ← ++ (byte) irq1::i2#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 + ldx.z barsin + ldy SINUS,x + // [29] (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 + ldx #0 + jmp __b20 + // irq1::@20 + __b20: + // [31] if((byte) irq1::i#2<(byte) $10) goto irq1::@21 -- 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 + ldx #0 + jmp __b22 + // irq1::@22 + __b22: + // [33] if((byte) irq1::i1#2<(byte) $f) goto irq1::@23 -- 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 + lda #$a + clc + adc.z barsin + sta.z barsin + // [35] (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 + dez + // [37] *((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 + iny + // [39] (byte) irq1::i1#1 ← ++ (byte) irq1::i1#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 + tza + sta rasters,y + // [41] (byte) irq1::idx#1 ← ++ (byte) irq1::idx#3 -- vbuyy=_inc_vbuyy + iny + // [42] (byte) irq1::barcol#1 ← ++ (byte) irq1::barcol#3 -- vbuzz=_inc_vbuzz + inz + // [43] (byte) irq1::i#1 ← ++ (byte) irq1::i#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 lda #0 sta rasters,x - // [26] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 -- vbuxx=_inc_vbuxx + // [45] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 -- vbuxx=_inc_vbuxx inx - // [17] phi from irq1::@17 to irq1::@16 [phi:irq1::@17->irq1::@16] - __b16_from___b17: - // [17] phi (byte) irq1::l#2 = (byte) irq1::l#1 [phi:irq1::@17->irq1::@16#0] -- register_copy - jmp __b16 + // [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 // irq1::@2 __b2: - // [27] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) -- vbuaa=pbuc1_derefidx_vbuxx - lda rasters,x - // [28] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuaa + // [46] (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 sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // [29] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuaa + // [48] *((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 - // [30] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@4 -- vbuxx_lt_vbuc1_then_la1 - cpx #scrollypos - bcc __b4 + // [49] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@3 -- 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 jmp __b10 // irq1::@10 __b10: - // [31] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@5 -- vbuxx_eq_vbuc1_then_la1 - cpx #scrollypos + // [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 beq __b5 jmp __b11 // irq1::@11 __b11: - // [32] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@6 -- vbuxx_eq_vbuc1_then_la1 - cpx #scrollypos+blackbar - beq __b6 + // [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 jmp __b12 // irq1::@12 __b12: - // [33] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@7 -- vbuxx_neq_vbuc1_then_la1 - cpx #scrollypos+blackbar+1 - bne __b7_from___b12 - jmp __b13 - // irq1::@13 - __b13: - // [34] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) -- vbuaa=pbuc1_derefidx_vbuz1 + // [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 - // [35] (volatile byte) zoomx ← ++ (volatile byte) zoomx -- vbuz1=_inc_vbuz1 + // [54] (volatile byte) zoomx ← ++ (volatile byte) zoomx -- vbuz1=_inc_vbuz1 inc.z zoomx - // [36] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 -- _deref_pbuc1=vbuaa + // [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 - // [37] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [56] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 -- vbuaa=vbuaa_plus_1 inc - // [38] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 -- _deref_pbuc1=vbuaa + // [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 - // [39] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 -- vbuz1_neq_0_then_la1 + // [58] if((volatile byte) zoomx!=(byte) 0) goto irq1::@6 -- vbuz1_neq_0_then_la1 lda.z zoomx cmp #0 - bne __b7_from___b13 + 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 jmp __b14 // irq1::@14 __b14: - // [40] (volatile byte) greetnm ← ++ (volatile byte) greetnm -- vbuz1=_inc_vbuz1 - inc.z greetnm - // [41] 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: - // [42] (volatile byte) greetnm ← (byte) 0 -- vbuz1=vbuc1 + // [61] (volatile byte) greetnm ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z greetnm - // [43] 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: - // [43] 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 + // [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 jmp __b7 // irq1::@7 __b7: - // [44] (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 + // [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 jmp __b8 // irq1::@8 __b8: - // [45] 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: - // [46] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 -- vbuxx=_inc_vbuxx - inx - // [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 + // [65] (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 jmp __b1 - // irq1::@6 - __b6: - // [47] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 + // irq1::@5 + __b5: + // [66] *((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 __b7_from___b6 - // irq1::@5 - __b5: - // [48] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 + 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 // if raster position = scrolly pos do scrolly // no wobbling from this point lda #$50 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - // [49] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos -- _deref_pbuc1=vbuz1 + // [68] *((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 __b7_from___b5 - // irq1::@4 - __b4: - // [50] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) -- vbuaa=vbuc1_plus_pbuc2_derefidx_vbuzz - tza - tay + 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,y - // [51] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$12 -- _deref_pbuc1=vbuaa + 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 // if raster position < scrolly pos do wobble Logo! sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO - // [52] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 -- vbuzz=_inc_vbuzz - inz - // [53] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 -- _deref_pbuc1=vbuc2 + // [71] (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 // No zooming lda #$66 sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL - jmp __b7_from___b4 + jmp __b6_from___b3 } // main main: { - // [54] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 -- _deref_pbuc1=vbuc2 + // [73] *((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 - // [55] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 -- _deref_pbuc1=vbuc2 + // [74] *((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 - // [56] *((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 + // [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 // Enable 48MHz fast mode lda #$40 ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB - // [57] *((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 + // [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 lda #$40 ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC - // [58] call memset + // [77] call memset // Clear screen - // [82] phi from main to memset [phi:main->memset] + // [101] phi from main to memset [phi:main->memset] memset_from_main: jsr memset jmp __b6 @@ -2666,42 +3278,42 @@ main: { // asm { lda#0 } // Initialize music lda #0 - // [60] call *((const void()*) songInit) + // [79] call *((const void()*) songInit) jsr songInit - // [61] phi from main::@6 to main::@1 [phi:main::@6->main::@1] + // [80] phi from main::@6 to main::@1 [phi:main::@6->main::@1] __b1_from___b6: - // [61] phi (byte) main::i1#2 = (byte) 0 [phi:main::@6->main::@1#0] -- vbuxx=vbuc1 + // [80] phi (byte) main::i1#2 = (byte) 0 [phi:main::@6->main::@1#0] -- vbuxx=vbuc1 ldx #0 jmp __b1 // Put MEGA logo on screen // main::@1 __b1: - // [62] if((byte) main::i1#2<(byte) $bc*(const byte) SIZEOF_BYTE) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 + // [81] 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 - // [63] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [82] phi from main::@1 to main::@3 [phi:main::@1->main::@3] __b3_from___b1: - // [63] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuxx=vbuc1 + // [82] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuxx=vbuc1 ldx #0 jmp __b3 - // [63] phi from main::@3 to main::@3 [phi:main::@3->main::@3] + // [82] phi from main::@3 to main::@3 [phi:main::@3->main::@3] __b3_from___b3: - // [63] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy + // [82] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy jmp __b3 // main::@3 __b3: - // [64] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [83] *((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 - // [65] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [84] *((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 - // [66] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [85] *((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 - // [67] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [86] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx inx - // [68] if((byte) main::i#1!=(byte) 0) goto main::@3 -- vbuxx_neq_0_then_la1 + // [87] if((byte) main::i#1!=(byte) 0) goto main::@3 -- vbuxx_neq_0_then_la1 cpx #0 bne __b3_from___b3 jmp __b4 @@ -2710,43 +3322,43 @@ main: { // asm { sei } // Set up raster interrupts C64 style sei - // [70] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [89] *((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 - // [71] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 -- _deref_pbuc1=vbuc2 + // [90] *((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 - // [72] *((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 + // [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 lda #$7f and VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1 sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1 - // [73] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [92] *((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 - // [74] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() -- _deref_qprc1=pprc2 + // [93] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() -- _deref_qprc1=pprc2 // Set the IRQ routine lda #irq1 sta HARDWARE_IRQ+1 - // [75] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [94] *((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 - // [76] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [95] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [77] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 -- _deref_pbuc1=vbuc2 + // [96] *((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 - // [79] phi from main::@4 main::@5 to main::@5 [phi:main::@4/main::@5->main::@5] + // [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 @@ -2755,14 +3367,14 @@ main: { jmp __b5_from___b5 // main::@2 __b2: - // [80] *((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 + // [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 lda MEGA_LOGO,x sta SCREEN+3*$28,x - // [81] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuxx=_inc_vbuxx + // [100] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuxx=_inc_vbuxx inx - // [61] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [80] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: - // [61] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@2->main::@1#0] -- register_copy + // [80] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@2->main::@1#0] -- register_copy jmp __b1 } // memset @@ -2772,10 +3384,10 @@ memset: { .const num = $28*$19 .label str = SCREEN .label end = str+num - .label dst = 2 - // [83] phi from memset to memset::@1 [phi:memset->memset::@1] + .label dst = 4 + // [102] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [83] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [102] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -2783,7 +3395,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [103] 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 @@ -2793,19 +3405,19 @@ memset: { jmp __breturn // memset::@return __breturn: - // [85] return + // [104] return rts // memset::@2 __b2: - // [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [105] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [87] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inw.z dst - // [83] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [102] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [83] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [102] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data @@ -2832,19 +3444,23 @@ Removing instruction jmp __init1 Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __b16 +Removing instruction jmp __b15 +Removing instruction jmp __b17 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 __b10 Removing instruction jmp __b11 Removing instruction jmp __b12 Removing instruction jmp __b13 Removing instruction jmp __b14 -Removing instruction jmp __b15 +Removing instruction jmp __b6 Removing instruction jmp __b7 Removing instruction jmp __b8 -Removing instruction jmp __b9 Removing instruction jmp __b6 Removing instruction jmp __b1 Removing instruction jmp __b3 @@ -2854,26 +3470,23 @@ Removing instruction jmp __b1 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 -Removing instruction lda #1 -Removing instruction lda #1 -Removing instruction lda #2 Succesful ASM optimization Pass5UnnecesaryLoadElimination -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 __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 __b5_from___b5 with __b5 Removing instruction __b1_from___init1: -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 __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 __b5_from___b5: @@ -2882,19 +3495,27 @@ Removing instruction __init1: Removing instruction __b1: Removing instruction __breturn: Removing instruction __b1_from_irq1: -Removing instruction __b3: -Removing instruction __b16_from___b3: -Removing instruction __b18: +Removing instruction __b15_from___b1: +Removing instruction __b17: +Removing instruction __b18_from___b17: +Removing instruction __b25_from___b18: Removing instruction __breturn: -Removing instruction __b16_from___b17: +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 __b10: Removing instruction __b11: Removing instruction __b12: Removing instruction __b13: Removing instruction __b14: -Removing instruction __b15: -Removing instruction __b9: -Removing instruction __b1_from___b9: +Removing instruction __b8: +Removing instruction __b1_from___b8: Removing instruction memset_from_main: Removing instruction __b6: Removing instruction __b1_from___b6: @@ -2907,7 +3528,6 @@ Removing instruction __b1_from___b2: Succesful ASM optimization Pass5UnusedLabelElimination Removing instruction jmp __b3 Succesful ASM optimization Pass5NextJumpElimination -Replacing instruction ldx #0 with TAX FINAL SYMBOL TABLE (const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 @@ -3239,9 +3859,11 @@ FINAL SYMBOL TABLE (label) __start::@1 (label) __start::@return (label) __start::__init1 -(volatile byte) greetnm loadstore zp[1]:7 1.3529411764705883 +(volatile byte) greetnm loadstore zp[1]:9 1.3529411764705883 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::$7 reg byte a 22.0 (label) irq1::@1 (label) irq1::@10 @@ -3253,7 +3875,15 @@ interrupt(HARDWARE_STACK)(void()) irq1() (label) irq1::@16 (label) irq1::@17 (label) irq1::@18 +(label) irq1::@19 (label) irq1::@2 +(label) irq1::@20 +(label) irq1::@21 +(label) irq1::@22 +(label) irq1::@23 +(label) irq1::@24 +(label) irq1::@25 +(label) irq1::@26 (label) irq1::@3 (label) irq1::@4 (label) irq1::@5 @@ -3262,23 +3892,51 @@ interrupt(HARDWARE_STACK)(void()) irq1() (label) irq1::@8 (label) irq1::@9 (label) irq1::@return +(byte) irq1::barcnt +(byte) irq1::barcnt#1 barcnt zp[1]:2 22.0 +(byte) irq1::barcnt#2 barcnt zp[1]:2 2.588235294117647 +(byte) irq1::barcol +(byte) irq1::barcol#0 reg byte z 22.0 +(byte) irq1::barcol#1 reg byte z 101.0 +(byte) irq1::barcol#2 reg byte z 75.75 +(byte) irq1::barcol#3 reg byte z 103.75 +(byte) irq1::barcol#4 reg byte z 151.5 +(byte) irq1::barsin +(byte) irq1::barsin#0 barsin zp[1]:3 4.0 +(byte) irq1::barsin#1 barsin zp[1]:3 11.0 +(byte) irq1::barsin#2 barsin zp[1]:3 2.1875 (const nomodify byte) irq1::blackbar = (byte) $13 (byte) irq1::col (byte) irq1::col#0 reg byte a 16.5 +(byte) irq1::i +(byte) irq1::i#1 reg byte x 202.0 +(byte) irq1::i#2 reg byte x 60.599999999999994 +(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::idx +(byte) irq1::idx#0 reg byte y 11.0 +(byte) irq1::idx#1 reg byte y 67.33333333333333 +(byte) irq1::idx#2 reg byte y 101.0 +(byte) irq1::idx#3 reg byte y 138.33333333333331 +(byte) irq1::idx#4 reg byte y 101.0 (byte) irq1::l (byte) irq1::l#1 reg byte x 22.0 (byte) irq1::l#2 reg byte x 14.666666666666666 (byte) irq1::line -(byte) irq1::line#1 reg byte x 22.0 -(byte) irq1::line#10 reg byte x 3.142857142857143 +(byte) irq1::line#1 reg byte z 22.0 +(byte) irq1::line#10 reg byte z 3.142857142857143 (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 z 4.0 -(byte) irq1::wobblepos#1 reg byte z 11.0 -(byte) irq1::wobblepos#10 reg byte z 4.391304347826087 -(byte) irq1::wobblepos#7 reg byte z 22.0 +(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#7 reg byte x 22.0 (byte) irq1::zoomval (byte) irq1::zoomval#0 reg byte a 11.0 (void()) main() @@ -3301,8 +3959,8 @@ interrupt(HARDWARE_STACK)(void()) irq1() (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp[2]:2 2002.0 -(byte*) memset::dst#2 dst zp[2]:2 1334.6666666666667 +(byte*) memset::dst#1 dst zp[2]:4 2002.0 +(byte*) memset::dst#2 dst zp[2]:4 1334.6666666666667 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -3311,22 +3969,31 @@ interrupt(HARDWARE_STACK)(void()) irq1() (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]:4 2.0 +(volatile byte) sinpos loadstore zp[1]:6 0.2564102564102564 (const void()*) songInit = (void()*)(const byte*) SONG (const void()*) songPlay = (void()*)(const byte*) SONG+(byte) 3 -(volatile byte) xpos loadstore zp[1]:6 0.3823529411764706 -(volatile byte) zoomx loadstore zp[1]:5 1.3529411764705883 +(volatile byte) xpos loadstore zp[1]:8 0.3823529411764706 +(volatile byte) zoomx loadstore zp[1]:7 1.3529411764705883 -reg byte x [ irq1::line#10 irq1::line#1 ] -reg byte z [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] +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::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::i1#2 irq1::i1#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::i#2 main::i#1 ] -zp[2]:2 [ memset::dst#2 memset::dst#1 ] -zp[1]:4 [ sinpos ] -zp[1]:5 [ zoomx ] -zp[1]:6 [ xpos ] -zp[1]:7 [ greetnm ] +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::col#0 ] reg byte a [ irq1::zoomval#0 ] reg byte a [ irq1::$7 ] @@ -3335,7 +4002,7 @@ reg byte a [ irq1::$12 ] FINAL ASSEMBLER -Score: 3678 +Score: 8503 // File Comments // Raster65 Demo Implementation in C @@ -3410,13 +4077,13 @@ Score: 3678 // Pointer to the song play routine .label songPlay = SONG+3 // Sinus Position - .label sinpos = 4 + .label sinpos = 6 // Zoom Position - .label zoomx = 5 + .label zoomx = 7 // soft scroll position of text scrolly (0-7) - .label xpos = 6 + .label xpos = 8 // The greeting currently being shown - .label greetnm = 7 + .label greetnm = 9 .segment Code // __start __start: { @@ -3451,6 +4118,8 @@ irq1: { .const scrollypos = $66 // size of raster behind scrolly .const blackbar = $13 + .label barsin = 3 + .label barcnt = 2 // entry interrupt(HARDWARE_STACK) pha txa @@ -3476,235 +4145,347 @@ irq1: { // wobblepos = ++sinpos // [11] (volatile byte) sinpos ← ++ (volatile byte) sinpos -- vbuz1=_inc_vbuz1 inc.z sinpos - // [12] (byte) irq1::wobblepos#0 ← (volatile byte) sinpos -- vbuzz=vbuz1 + // [12] (byte) irq1::wobblepos#0 ← (volatile byte) sinpos -- vbuxx=vbuz1 // Generate Raster Bars and more - ldz sinpos + ldx.z sinpos // [13] phi from irq1 to irq1::@1 [phi:irq1->irq1::@1] // [13] phi (byte) irq1::wobblepos#10 = (byte) irq1::wobblepos#0 [phi:irq1->irq1::@1#0] -- register_copy - // [13] phi (byte) irq1::line#10 = (byte) 0 [phi:irq1->irq1::@1#1] -- vbuxx=vbuc1 - tax + // [13] phi (byte) irq1::line#10 = (byte) 0 [phi:irq1->irq1::@1#1] -- vbuzz=vbuc1 + ldz #0 // irq1::@1 __b1: // for(char line=0;line!=NUMBERL;line++) - // [14] if((byte) irq1::line#10!=(const nomodify byte) NUMBERL) goto irq1::@2 -- vbuxx_neq_vbuc1_then_la1 - cpx #NUMBERL + // [14] if((byte) irq1::line#10!=(const nomodify byte) NUMBERL) goto irq1::@2 -- vbuzz_neq_vbuc1_then_la1 + cpz #NUMBERL bne __b2 - // irq1::@3 - // VICIII->BORDER_COLOR = 1 - // [15] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 1 -- _deref_pbuc1=vbuc2 - lda #1 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // VICIII->BG_COLOR = 1 - // [16] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 1 -- _deref_pbuc1=vbuc2 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR - // [17] phi from irq1::@3 to irq1::@16 [phi:irq1::@3->irq1::@16] - // [17] phi (byte) irq1::l#2 = (byte) 0 [phi:irq1::@3->irq1::@16#0] -- vbuxx=vbuc1 + // [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::@16 - __b16: + // irq1::@15 + __b15: // for(char l=0;l!=NUMBERL;l++) - // [18] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@17 -- vbuxx_neq_vbuc1_then_la1 + // [16] if((byte) irq1::l#2!=(const nomodify byte) NUMBERL) goto irq1::@16 -- vbuxx_neq_vbuc1_then_la1 cpx #NUMBERL - bne __b17 - // irq1::@18 - // VICIII->BORDER_COLOR = 1 - // [19] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 1 -- _deref_pbuc1=vbuc2 - lda #1 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // VICIII->BG_COLOR = 1 - // [20] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 1 -- _deref_pbuc1=vbuc2 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR + bne __b16 + // irq1::@17 // (*songPlay)() - // [21] call *((const void()*) songPlay) + // [17] call *((const void()*) songPlay) // play music jsr songPlay - // VICIII->BORDER_COLOR = 2 - // [22] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR - // VICIII->BG_COLOR = 2 - // [23] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) 2 -- _deref_pbuc1=vbuc2 - sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR + // barsin = sinpos + // [18] (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 + lda #0 + sta.z barcnt + // irq1::@18 + __b18: + // for(char barcnt=0; barcnt<16; barcnt++) + // [20] if((byte) irq1::barcnt#2<(byte) $10) goto irq1::@19 -- 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 + ldx #0 + // Produce dark area behind text + // irq1::@25 + __b25: + // for(char i=0;i<19;i++) + // [22] if((byte) irq1::i2#2<(byte) $13) goto irq1::@26 -- vbuxx_lt_vbuc1_then_la1 + cpx #$13 + bcc __b26 // irq1::@return // } - // [24] return - exit interrupt(HARDWARE_STACK) + // [23] return - exit interrupt(HARDWARE_STACK) pla tay pla tax pla rti - // irq1::@17 - __b17: + // irq1::@26 + __b26: + // 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 + lda rasters+scrollypos,x + lsr + // rasters[scrollypos+i] /2 & 7 + // [25] (byte~) irq1::$23 ← (byte~) irq1::$22 & (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 + sta rasters+scrollypos,x + // for(char i=0;i<19;i++) + // [27] (byte) irq1::i2#1 ← ++ (byte) irq1::i2#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: + // idx = SINUS[barsin] + // [28] (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 + 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 + ldx #0 + // irq1::@20 + __b20: + // for(char i=0;i<16;i++) + // [31] if((byte) irq1::i#2<(byte) $10) goto irq1::@21 -- 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 + ldx #0 + // irq1::@22 + __b22: + // for(char i=0;i<15;i++) + // [33] if((byte) irq1::i1#2<(byte) $f) goto irq1::@23 -- vbuxx_lt_vbuc1_then_la1 + cpx #$f + bcc __b23 + // irq1::@24 + // barsin += 10 + // [34] (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 + 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: + // rasters[idx++] = --barcol; + // [36] (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 + tza + sta rasters,y + // rasters[idx++] = --barcol; + // [38] (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 + 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: + // rasters[idx++] = barcol++ + // [40] *((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 + iny + // [42] (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 + 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: // rasters[l] = 0 - // [25] *((const byte*) rasters + (byte) irq1::l#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [44] *((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++) - // [26] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 -- vbuxx=_inc_vbuxx + // [45] (byte) irq1::l#1 ← ++ (byte) irq1::l#2 -- vbuxx=_inc_vbuxx inx - // [17] phi from irq1::@17 to irq1::@16 [phi:irq1::@17->irq1::@16] - // [17] phi (byte) irq1::l#2 = (byte) irq1::l#1 [phi:irq1::@17->irq1::@16#0] -- register_copy - jmp __b16 + // [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 // irq1::@2 __b2: // col = rasters[line] - // [27] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) -- vbuaa=pbuc1_derefidx_vbuxx - lda rasters,x + // [46] (byte) irq1::col#0 ← *((const byte*) rasters + (byte) irq1::line#10) -- vbuaa=pbuc1_derefidx_vbuzz + tza + tay + lda rasters,y // VICIII->BORDER_COLOR = col - // [28] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuaa + // [47] *((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 - // [29] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) ← (byte) irq1::col#0 -- _deref_pbuc1=vbuaa + // [48] *((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) - // [30] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@4 -- vbuxx_lt_vbuc1_then_la1 - cpx #scrollypos - bcc __b4 - // irq1::@10 + // [49] if((byte) irq1::line#10<(const nomodify byte) irq1::scrollypos) goto irq1::@3 -- vbuzz_lt_vbuc1_then_la1 + cpz #scrollypos + bcc __b3 + // irq1::@9 // if(line == scrollypos) - // [31] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@5 -- vbuxx_eq_vbuc1_then_la1 - cpx #scrollypos + // [50] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos) goto irq1::@4 -- vbuzz_eq_vbuc1_then_la1 + cpz #scrollypos + beq __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 beq __b5 // irq1::@11 - // if(line == scrollypos+blackbar) - // [32] if((byte) irq1::line#10==(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar) goto irq1::@6 -- vbuxx_eq_vbuc1_then_la1 - cpx #scrollypos+blackbar - beq __b6 - // irq1::@12 // if(line == scrollypos+blackbar+1) - // [33] if((byte) irq1::line#10!=(const nomodify byte) irq1::scrollypos+(const nomodify byte) irq1::blackbar+(byte) 1) goto irq1::@7 -- vbuxx_neq_vbuc1_then_la1 - cpx #scrollypos+blackbar+1 - bne __b7 - // irq1::@13 + // [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 + // irq1::@12 // zoomval = SINUS[zoomx++] - // [34] (byte) irq1::zoomval#0 ← *((const byte*) SINUS + (volatile byte) zoomx) -- vbuaa=pbuc1_derefidx_vbuz1 + // [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 - // [35] (volatile byte) zoomx ← ++ (volatile byte) zoomx -- vbuz1=_inc_vbuz1 + // [54] (volatile byte) zoomx ← ++ (volatile byte) zoomx -- vbuz1=_inc_vbuz1 inc.z zoomx // VICIV->CHRXSCL = zoomval - // [36] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) irq1::zoomval#0 -- _deref_pbuc1=vbuaa + // [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 // zoomval+1 - // [37] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [56] (byte~) irq1::$7 ← (byte) irq1::zoomval#0 + (byte) 1 -- vbuaa=vbuaa_plus_1 inc // VICIV->TEXTXPOS_LO = zoomval+1 - // [38] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$7 -- _deref_pbuc1=vbuaa + // [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 // if(zoomx==0) - // [39] if((volatile byte) zoomx!=(byte) 0) goto irq1::@7 -- vbuz1_neq_0_then_la1 + // [58] if((volatile byte) zoomx!=(byte) 0) goto irq1::@6 -- vbuz1_neq_0_then_la1 lda.z zoomx cmp #0 - bne __b7 - // irq1::@14 + bne __b6 + // irq1::@13 // if(++greetnm==GREETCOUNT) - // [40] (volatile byte) greetnm ← ++ (volatile byte) greetnm -- vbuz1=_inc_vbuz1 + // [59] (volatile byte) greetnm ← ++ (volatile byte) greetnm -- vbuz1=_inc_vbuz1 inc.z greetnm - // [41] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@7 -- vbuz1_neq_vbuc1_then_la1 + // [60] if((volatile byte) greetnm!=(const nomodify byte) GREETCOUNT) goto irq1::@6 -- vbuz1_neq_vbuc1_then_la1 lda #GREETCOUNT cmp.z greetnm - bne __b7 - // irq1::@15 + bne __b6 + // irq1::@14 // greetnm =0 - // [42] (volatile byte) greetnm ← (byte) 0 -- vbuz1=vbuc1 + // [61] (volatile byte) greetnm ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z greetnm - // [43] 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] - // [43] 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: - // raster = VICII->RASTER - // [44] (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) - // [45] 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++) - // [46] (byte) irq1::line#1 ← ++ (byte) irq1::line#10 -- vbuxx=_inc_vbuxx - inx - // [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 + // [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 + // 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 + // irq1::@8 + // for(char line=0;line!=NUMBERL;line++) + // [65] (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 + jmp __b1 + // irq1::@5 + __b5: // VICIV->TEXTXPOS_LO = 0x50 - // [47] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 + // [66] *((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 __b7 - // irq1::@5 - __b5: - // [48] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte) $50 -- _deref_pbuc1=vbuc2 + 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 // 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 - // [49] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_CONTROL2) ← (volatile byte) xpos -- _deref_pbuc1=vbuz1 + // [68] *((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 __b7 - // irq1::@4 - __b4: + jmp __b6 + // irq1::@3 + __b3: // 0x28 + SINUS[wobblepos++] - // [50] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) -- vbuaa=vbuc1_plus_pbuc2_derefidx_vbuzz - tza - tay + // [69] (byte~) irq1::$12 ← (byte) $28 + *((const byte*) SINUS + (byte) irq1::wobblepos#10) -- vbuaa=vbuc1_plus_pbuc2_derefidx_vbuxx lda #$28 clc - adc SINUS,y + adc SINUS,x // VICIV->TEXTXPOS_LO = 0x28 + SINUS[wobblepos++] - // [51] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$12 -- _deref_pbuc1=vbuaa + // [70] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) ← (byte~) irq1::$12 -- _deref_pbuc1=vbuaa // if raster position < scrolly pos do wobble Logo! sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO // VICIV->TEXTXPOS_LO = 0x28 + SINUS[wobblepos++]; - // [52] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 -- vbuzz=_inc_vbuzz - inz + // [71] (byte) irq1::wobblepos#1 ← ++ (byte) irq1::wobblepos#10 -- vbuxx=_inc_vbuxx + inx // VICIV->CHRXSCL = 0x66 - // [53] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) ← (byte) $66 -- _deref_pbuc1=vbuc2 + // [72] *((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 __b7 + jmp __b6 } // main main: { // VICIII->KEY = 0x47 - // [54] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $47 -- _deref_pbuc1=vbuc2 + // [73] *((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 - // [55] *((byte*)(const nomodify struct MOS4569_VICIII*) VICIII+(const byte) OFFSET_STRUCT_MOS4569_VICIII_KEY) ← (byte) $53 -- _deref_pbuc1=vbuc2 + // [74] *((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 - // [56] *((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 + // [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 // Enable 48MHz fast mode lda #$40 ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB // VICIV->CONTROLC |= 0x40 - // [57] *((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 + // [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 lda #$40 ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC // memset(SCREEN, ' ', 40*25) - // [58] call memset + // [77] call memset // Clear screen - // [82] phi from main to memset [phi:main->memset] + // [101] phi from main to memset [phi:main->memset] jsr memset // main::@6 // asm @@ -3712,41 +4493,41 @@ main: { // Initialize music lda #0 // (*songInit)() - // [60] call *((const void()*) songInit) + // [79] call *((const void()*) songInit) jsr songInit - // [61] phi from main::@6 to main::@1 [phi:main::@6->main::@1] - // [61] phi (byte) main::i1#2 = (byte) 0 [phi:main::@6->main::@1#0] -- vbuxx=vbuc1 + // [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 ldx #0 // Put MEGA logo on screen // main::@1 __b1: // for( char i=0; imain::@3] - // [63] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuxx=vbuc1 + // [82] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [82] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuxx=vbuc1 ldx #0 - // [63] phi from main::@3 to main::@3 [phi:main::@3->main::@3] - // [63] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy + // [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 // main::@3 __b3: // PALETTE_RED[i] = PAL_RED[i] - // [64] *((const nomodify byte*) PALETTE_RED + (byte) main::i#2) ← *((const byte*) PAL_RED + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [83] *((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] - // [65] *((const nomodify byte*) PALETTE_GREEN + (byte) main::i#2) ← *((const byte*) PAL_GREEN + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [84] *((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] - // [66] *((const nomodify byte*) PALETTE_BLUE + (byte) main::i#2) ← *((const byte*) PAL_BLUE + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [85] *((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) - // [67] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [86] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx inx - // [68] if((byte) main::i#1!=(byte) 0) goto main::@3 -- vbuxx_neq_0_then_la1 + // [87] if((byte) main::i#1!=(byte) 0) goto main::@3 -- vbuxx_neq_0_then_la1 cpx #0 bne __b3 // main::@4 @@ -3755,43 +4536,43 @@ main: { // Set up raster interrupts C64 style sei // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR - // [70] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [89] *((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 - // [71] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) ← (byte) $16 -- _deref_pbuc1=vbuc2 + // [90] *((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 - // [72] *((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 + // [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 lda #$7f and VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1 sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1 // VICII->IRQ_ENABLE = IRQ_RASTER - // [73] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [92] *((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 - // [74] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_STACK)(void()) irq1() -- _deref_qprc1=pprc2 + // [93] *((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 - // [75] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [94] *((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 - // [76] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [95] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT // VICIV->SIDBDRWD_LO = 1 - // [77] *((byte*)(const nomodify struct MEGA65_VICIV*) VICIV+(const byte) OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) ← (byte) 1 -- _deref_pbuc1=vbuc2 + // [96] *((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 @@ -3799,21 +4580,21 @@ main: { // asm { cli } // Enable IRQ cli - // [79] phi from main::@4 main::@5 to main::@5 [phi:main::@4/main::@5->main::@5] + // [98] phi from main::@4 main::@5 to main::@5 [phi:main::@4/main::@5->main::@5] // main::@5 __b5: jmp __b5 // main::@2 __b2: // (SCREEN+3*40)[i] = MEGA_LOGO[i] - // [80] *((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 + // [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 lda MEGA_LOGO,x sta SCREEN+3*$28,x // for( char i=0; imain::@1] - // [61] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@2->main::@1#0] -- register_copy + // [80] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [80] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@2->main::@1#0] -- register_copy jmp __b1 } // memset @@ -3823,9 +4604,9 @@ memset: { .const num = $28*$19 .label str = SCREEN .label end = str+num - .label dst = 2 - // [83] phi from memset to memset::@1 [phi:memset->memset::@1] - // [83] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + .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 lda #str @@ -3833,7 +4614,7 @@ memset: { // memset::@1 __b1: // for(char* dst = str; dst!=end; dst++) - // [84] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [103] 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 @@ -3842,20 +4623,20 @@ memset: { bne __b2 // memset::@return // } - // [85] return + // [104] return rts // memset::@2 __b2: // *dst = c - // [86] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [105] *((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++) - // [87] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inw.z dst - // [83] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [83] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [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 jmp __b1 } // File Data diff --git a/src/test/ref/examples/mega65/raster65.sym b/src/test/ref/examples/mega65/raster65.sym index 5eeb2ac33..e5d8b716d 100644 --- a/src/test/ref/examples/mega65/raster65.sym +++ b/src/test/ref/examples/mega65/raster65.sym @@ -327,9 +327,11 @@ (label) __start::@1 (label) __start::@return (label) __start::__init1 -(volatile byte) greetnm loadstore zp[1]:7 1.3529411764705883 +(volatile byte) greetnm loadstore zp[1]:9 1.3529411764705883 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::$7 reg byte a 22.0 (label) irq1::@1 (label) irq1::@10 @@ -341,7 +343,15 @@ interrupt(HARDWARE_STACK)(void()) irq1() (label) irq1::@16 (label) irq1::@17 (label) irq1::@18 +(label) irq1::@19 (label) irq1::@2 +(label) irq1::@20 +(label) irq1::@21 +(label) irq1::@22 +(label) irq1::@23 +(label) irq1::@24 +(label) irq1::@25 +(label) irq1::@26 (label) irq1::@3 (label) irq1::@4 (label) irq1::@5 @@ -350,23 +360,51 @@ interrupt(HARDWARE_STACK)(void()) irq1() (label) irq1::@8 (label) irq1::@9 (label) irq1::@return +(byte) irq1::barcnt +(byte) irq1::barcnt#1 barcnt zp[1]:2 22.0 +(byte) irq1::barcnt#2 barcnt zp[1]:2 2.588235294117647 +(byte) irq1::barcol +(byte) irq1::barcol#0 reg byte z 22.0 +(byte) irq1::barcol#1 reg byte z 101.0 +(byte) irq1::barcol#2 reg byte z 75.75 +(byte) irq1::barcol#3 reg byte z 103.75 +(byte) irq1::barcol#4 reg byte z 151.5 +(byte) irq1::barsin +(byte) irq1::barsin#0 barsin zp[1]:3 4.0 +(byte) irq1::barsin#1 barsin zp[1]:3 11.0 +(byte) irq1::barsin#2 barsin zp[1]:3 2.1875 (const nomodify byte) irq1::blackbar = (byte) $13 (byte) irq1::col (byte) irq1::col#0 reg byte a 16.5 +(byte) irq1::i +(byte) irq1::i#1 reg byte x 202.0 +(byte) irq1::i#2 reg byte x 60.599999999999994 +(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::idx +(byte) irq1::idx#0 reg byte y 11.0 +(byte) irq1::idx#1 reg byte y 67.33333333333333 +(byte) irq1::idx#2 reg byte y 101.0 +(byte) irq1::idx#3 reg byte y 138.33333333333331 +(byte) irq1::idx#4 reg byte y 101.0 (byte) irq1::l (byte) irq1::l#1 reg byte x 22.0 (byte) irq1::l#2 reg byte x 14.666666666666666 (byte) irq1::line -(byte) irq1::line#1 reg byte x 22.0 -(byte) irq1::line#10 reg byte x 3.142857142857143 +(byte) irq1::line#1 reg byte z 22.0 +(byte) irq1::line#10 reg byte z 3.142857142857143 (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 z 4.0 -(byte) irq1::wobblepos#1 reg byte z 11.0 -(byte) irq1::wobblepos#10 reg byte z 4.391304347826087 -(byte) irq1::wobblepos#7 reg byte z 22.0 +(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#7 reg byte x 22.0 (byte) irq1::zoomval (byte) irq1::zoomval#0 reg byte a 11.0 (void()) main() @@ -389,8 +427,8 @@ interrupt(HARDWARE_STACK)(void()) irq1() (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp[2]:2 2002.0 -(byte*) memset::dst#2 dst zp[2]:2 1334.6666666666667 +(byte*) memset::dst#1 dst zp[2]:4 2002.0 +(byte*) memset::dst#2 dst zp[2]:4 1334.6666666666667 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -399,22 +437,31 @@ interrupt(HARDWARE_STACK)(void()) irq1() (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]:4 2.0 +(volatile byte) sinpos loadstore zp[1]:6 0.2564102564102564 (const void()*) songInit = (void()*)(const byte*) SONG (const void()*) songPlay = (void()*)(const byte*) SONG+(byte) 3 -(volatile byte) xpos loadstore zp[1]:6 0.3823529411764706 -(volatile byte) zoomx loadstore zp[1]:5 1.3529411764705883 +(volatile byte) xpos loadstore zp[1]:8 0.3823529411764706 +(volatile byte) zoomx loadstore zp[1]:7 1.3529411764705883 -reg byte x [ irq1::line#10 irq1::line#1 ] -reg byte z [ irq1::wobblepos#10 irq1::wobblepos#0 irq1::wobblepos#7 irq1::wobblepos#1 ] +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::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::i1#2 irq1::i1#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::i#2 main::i#1 ] -zp[2]:2 [ memset::dst#2 memset::dst#1 ] -zp[1]:4 [ sinpos ] -zp[1]:5 [ zoomx ] -zp[1]:6 [ xpos ] -zp[1]:7 [ greetnm ] +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::col#0 ] reg byte a [ irq1::zoomval#0 ] reg byte a [ irq1::$7 ]