1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-12-28 16:31:36 +00:00

Added a lot of optimizing fragments using illegal opcodes (Thanks Travis Fisher!)

Added synth rule for vubc's.Updated tests.
This commit is contained in:
jespergravgaard 2019-03-26 23:49:44 +01:00
parent 0993be3f01
commit 667cbde56f
282 changed files with 16680 additions and 8649 deletions

View File

@ -0,0 +1 @@
sax {c1}

View File

@ -0,0 +1,4 @@
lda {c2},y
sta {c1},x
lda {c2}+1,y
sta {c1}+1,x

View File

@ -0,0 +1,4 @@
lda {c2},x
sta {c1},y
lda {c2}+1,x
sta {c1}+1,y

View File

View File

@ -0,0 +1,3 @@
dex
txa
eor #$ff

View File

@ -0,0 +1,3 @@
dey
tya
eor #$ff

View File

@ -0,0 +1,2 @@
inx
txa

View File

@ -0,0 +1,2 @@
iny
tya

View File

@ -0,0 +1,2 @@
cmp {c1}
bcc {la1}

View File

@ -0,0 +1,2 @@
cmp {c1}
bne {la1}

View File

@ -0,0 +1,3 @@
eor #$ff
tax
inx

View File

@ -0,0 +1,2 @@
tax
axs #{c1}

View File

@ -0,0 +1,2 @@
tax
axs #-{c1}

View File

@ -0,0 +1,3 @@
eor #$ff
tax
axs #{c1}+1

View File

@ -0,0 +1 @@
axs #0

View File

@ -0,0 +1,2 @@
txa
axs #{c1}

View File

@ -0,0 +1,2 @@
txa
axs #-{c1}

View File

@ -0,0 +1,2 @@
lax {z1}
axs #{c1}

View File

@ -0,0 +1,2 @@
lax {z1}
axs #-{c1}

View File

@ -0,0 +1,2 @@
cpx {c1}
bcc {la1}

View File

@ -0,0 +1,3 @@
sta $ff
cpx $ff
bcc {la1}

View File

@ -0,0 +1,2 @@
cpx {c1}
bne {la1}

View File

@ -0,0 +1,3 @@
eor #$ff
tay
iny

View File

@ -0,0 +1,2 @@
cpy {c1}
bcc {la1}

View File

@ -0,0 +1,3 @@
sta $ff
cpy $ff
bcc {la1}

View File

@ -0,0 +1,2 @@
cpy {c1}
bne {la1}

View File

@ -0,0 +1 @@
sax {z1}

View File

@ -248,6 +248,8 @@ class AsmFragmentTemplateSynthesisRule {
String rvalYy = ".*=.*yy.*|.*_.*yy.*|...yy_(lt|gt|le|ge|eq|neq)_.*";
String rvalZ1 = ".*=.*z1.*|.*_.*z1.*|...z1_(lt|gt|le|ge|eq|neq)_.*";
String rvalZ2 = ".*=.*z2.*|.*_.*z2.*|...z2_(lt|gt|le|ge|eq|neq)_.*";
String lvalC1 = ".*c1.*=.*";
String lvalC2 = ".*c2.*=.*";
String lvalDerefZ1 = ".*_deref_...z1=.*";
String lvalDerefC1 = ".*_deref_...c1=.*";
String lvalDerefIdxAa = ".*_derefidx_...aa=.*";
@ -434,6 +436,25 @@ class AsmFragmentTemplateSynthesisRule {
// Rewrite _deref_pb.z1_ to _vb.aa_ (if other Z1)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)z1(.*z1.*)", rvalAa+"|"+rvalYy+"|"+ lvalDerefZ1, "ldy #0\n"+"lda ({z1}),y", "$1vb$2aa$3", null, null));
// Replace VB*C1 with AA (only one)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c1(.*)", lvalC1+"|"+rvalAa+"|"+twoC1, "lda #{c1}", "$1vb$2aa$3", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c1(.*)_then_(.*)", rvalAa+"|"+twoC1, "lda #{c1}", "$1vb$2aa$3_then_$4", null, mapC));
// Replace VB*C1 with XX (only one)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c1(.*)", lvalC1+"|"+rvalXx+"|"+twoC1, "ldx #{c1}", "$1vb$2xx$3", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c1(.*)_then_(.*)", rvalXx+"|"+twoC1, "ldx #{c1}", "$1vb$2xx$3_then_$4", null, mapC));
// Replace VB*C1 with XX (only one)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c1(.*)", lvalC1+"|"+rvalYy+"|"+twoC1, "ldy #{c1}", "$1vb$2yy$3", null, mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c1(.*)_then_(.*)", rvalYy+"|"+twoC1, "ldy #{c1}", "$1vb$2yy$3_then_$4", null, mapC));
// Replace VB*C2 with AA (only one)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c2(.*)", lvalC2+"|"+rvalAa+"|"+twoC2, "lda #{c2}", "$1vb$2aa$3", null, mapC3));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c2(.*)_then_(.*)", rvalAa+"|"+twoC2, "lda #{c2}", "$1vb$2aa$3_then_$4", null, mapC3));
// Replace VB*C2 with XX (only one)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c2(.*)", lvalC2+"|"+rvalXx+"|"+twoC2, "ldx #{c2}", "$1vb$2xx$3", null, mapC3));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c2(.*)_then_(.*)", rvalXx+"|"+twoC2, "ldx #{c2}", "$1vb$2xx$3_then_$4", null, mapC3));
// Replace VB*C2 with YY (only one)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c2(.*)", lvalC2+"|"+rvalYy+"|"+twoC2, "ldy #{c2}", "$1vb$2yy$3", null, mapC3));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)vb(.)c2(.*)_then_(.*)", rvalYy+"|"+twoC2, "ldy #{c2}", "$1vb$2yy$3_then_$4", null, mapC3));
// Rewrite *C1 to AA (if no other C1s)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)c1(.*)", rvalAa+"|"+twoC1+"|"+lvalDerefC1, "lda {c1}", "$1vb$2aa$3", null, mapC));
// Rewrite *C1 to AA (if other C1s)
@ -452,7 +473,6 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_deref_pb(.)c1(.*c1.*)", rvalYy+"|"+lvalDerefC1, "ldy {c1}", "$1vb$2yy$3", null, null));
// Rewrite *C1 to YY (if other C1s)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*c1.*)_deref_pb(.)c1(.*)", rvalYy+"|"+lvalDerefC1, "ldy {c1}", "$1vb$2yy$3", null, null));
// Rewrite (Z1),y to AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)pb(.)z1_derefidx_vbuyy(.*)_then_(.*)", twoZ1+"|"+rvalAa, "lda ({z1}),y\n" , "$1vb$2aa$3_then_$4", null, mapZ));

View File

@ -173,8 +173,8 @@ main: {
//SEG17 [7] (byte) main::sub#1 ← ++ (byte) main::sub#2 -- vbuz1=_inc_vbuz1
inc sub
//SEG18 [8] if((byte) main::sub#1!=(const byte) SZ#0+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda sub
cmp #SZ+1
lda #SZ+1
cmp sub
bne b1_from_b1
jmp breturn
//SEG19 main::@return

View File

@ -300,8 +300,8 @@ main: {
//SEG26 [10] (byte) main::sub#1 ← ++ (byte) main::sub#2 -- vbuz1=_inc_vbuz1
inc sub
//SEG27 [11] if((byte) main::sub#1!=(const byte) ITEM_SIZE#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
lda sub
cmp #ITEM_SIZE-1+1
lda #ITEM_SIZE-1+1
cmp sub
bne b2_from_b2
jmp b3
//SEG28 main::@3
@ -317,8 +317,8 @@ main: {
//SEG30 [13] (byte) main::item#1 ← ++ (byte) main::item#4 -- vbuz1=_inc_vbuz1
inc item
//SEG31 [14] if((byte) main::item#1!=(const byte) ITEM_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda item
cmp #ITEM_COUNT-1+1
lda #ITEM_COUNT-1+1
cmp item
bne b1_from_b3
jmp breturn
//SEG32 main::@return

View File

@ -843,8 +843,8 @@ test: {
//SEG81 test::@3
b3:
//SEG82 [31] *((const byte*) cols#0 + (byte) test::i#11) ← (const byte) RED#0 -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #RED
ldy i
sta cols,y
jmp breturn
//SEG83 test::@return
@ -854,8 +854,8 @@ test: {
//SEG85 test::@1
b1:
//SEG86 [33] *((const byte*) cols#0 + (byte) test::i#11) ← (const byte) GREEN#0 -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #GREEN
ldy i
sta cols,y
jmp breturn
}

View File

@ -23,8 +23,8 @@ main: {
jsr init_screen
jsr init_plot_tables
b2:
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b2
inc BGCOL
jsr plots
@ -108,9 +108,8 @@ init_plot_tables: {
sta yoffs+1
tax
b3:
txa
and #7
sta _6
lda #7
sax _6
lda yoffs
ora _6
sta plot_ylo,x

View File

@ -916,8 +916,8 @@ main: {
//SEG20 main::@2
b2:
//SEG21 [11] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b2
jmp b3
//SEG22 main::@3
@ -1087,8 +1087,8 @@ init_plot_tables: {
ldy x
sta plot_xlo,y
//SEG66 [39] *((const byte[$100]) plot_xhi#0 + (byte) init_plot_tables::x#2) ← >(const byte*) BITMAP#0 -- pbuc1_derefidx_vbuz1=vbuc2
ldy x
lda #>BITMAP
ldy x
sta plot_xhi,y
//SEG67 [40] *((const byte[$100]) plot_bit#0 + (byte) init_plot_tables::x#2) ← (byte) init_plot_tables::bits#3 -- pbuc1_derefidx_vbuz1=vbuz2
lda bits
@ -1159,8 +1159,8 @@ init_plot_tables: {
and y
sta _10
//SEG89 [54] if((byte~) init_plot_tables::$10!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto init_plot_tables::@4 -- vbuz1_neq_vbuc1_then_la1
lda _10
cmp #7
lda #7
cmp _10
bne b4_from_b3
jmp b7
//SEG90 init_plot_tables::@7
@ -1295,15 +1295,12 @@ Statement [31] (byte*) plot::plotter#0 ← (byte*) plot::plotter_x#2 + (word) pl
Statement [32] (byte~) plot::$5 ← *((byte*) plot::plotter#0) | *((const byte[$100]) plot_bit#0 + (byte) plot::x#0) [ plot::plotter#0 plot::$5 ] ( main:2::plots:13::plot:19 [ plots::i#2 plot::plotter#0 plot::$5 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ plots::i#2 plots::i#1 ]
Statement [33] *((byte*) plot::plotter#0) ← (byte~) plot::$5 [ ] ( main:2::plots:13::plot:19 [ plots::i#2 ] ) always clobbers reg byte y
Statement [37] (byte~) init_plot_tables::$0 ← (byte) init_plot_tables::x#2 & (byte/word/signed word/dword/signed dword) $f8 [ init_plot_tables::x#2 init_plot_tables::bits#3 init_plot_tables::$0 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 init_plot_tables::$0 ] ) always clobbers reg byte a
Statement [39] *((const byte[$100]) plot_xhi#0 + (byte) init_plot_tables::x#2) ← >(const byte*) BITMAP#0 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ init_plot_tables::x#2 init_plot_tables::x#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ]
Statement [39] *((const byte[$100]) plot_xhi#0 + (byte) init_plot_tables::x#2) ← >(const byte*) BITMAP#0 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ) always clobbers reg byte a
Statement [40] *((const byte[$100]) plot_bit#0 + (byte) init_plot_tables::x#2) ← (byte) init_plot_tables::bits#3 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ) always clobbers reg byte a
Statement [47] (byte~) init_plot_tables::$6 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ init_plot_tables::y#2 init_plot_tables::y#1 ]
Statement [53] (byte~) init_plot_tables::$10 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$10 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$10 ] ) always clobbers reg byte a
Statement [55] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) 8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ init_plot_tables::y#2 init_plot_tables::y#1 ]
Statement [63] *((byte*) init_screen::b#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ init_screen::b#2 ] ( main:2::init_screen:8 [ init_screen::b#2 ] ) always clobbers reg byte a reg byte y
Statement [65] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word/signed word/dword/signed dword) $2000) goto init_screen::@1 [ init_screen::b#1 ] ( main:2::init_screen:8 [ init_screen::b#1 ] ) always clobbers reg byte a
Statement [67] *((byte*) init_screen::c#2) ← (byte/signed byte/word/signed word/dword/signed dword) $14 [ init_screen::c#2 ] ( main:2::init_screen:8 [ init_screen::c#2 ] ) always clobbers reg byte a reg byte y
@ -1363,33 +1360,33 @@ Uplift Scope [main]
Uplift Scope []
Uplifting [plots] best 8995 combination reg byte x [ plots::i#2 plots::i#1 ]
Uplifting [init_plot_tables] best 8485 combination zp ZP_WORD:6 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ] reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ] reg byte a [ init_plot_tables::$0 ] zp ZP_BYTE:31 [ init_plot_tables::$7 ] zp ZP_BYTE:32 [ init_plot_tables::$8 ] zp ZP_BYTE:33 [ init_plot_tables::$9 ] zp ZP_BYTE:34 [ init_plot_tables::$10 ] zp ZP_BYTE:30 [ init_plot_tables::$6 ]
Uplifting [init_plot_tables] best 8445 combination zp ZP_WORD:6 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ] reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ] reg byte a [ init_plot_tables::$0 ] zp ZP_BYTE:31 [ init_plot_tables::$7 ] zp ZP_BYTE:32 [ init_plot_tables::$8 ] zp ZP_BYTE:33 [ init_plot_tables::$9 ] zp ZP_BYTE:34 [ init_plot_tables::$10 ] zp ZP_BYTE:30 [ init_plot_tables::$6 ]
Limited combination testing to 100 combinations of 138240 possible.
Uplifting [init_screen] best 8485 combination zp ZP_WORD:8 [ init_screen::b#2 init_screen::b#1 ] zp ZP_WORD:10 [ init_screen::c#2 init_screen::c#1 ]
Uplifting [plot] best 8473 combination zp ZP_BYTE:13 [ plot::y#0 ] zp ZP_BYTE:12 [ plot::x#0 ] reg byte a [ plot::$6 ] reg byte a [ plot::$7 ] zp ZP_BYTE:20 [ plot::$8 ] zp ZP_BYTE:23 [ plot::$9 ] zp ZP_WORD:24 [ plot::plotter_y#2 ] zp ZP_BYTE:28 [ plot::$5 ] zp ZP_WORD:26 [ plot::plotter#0 ] zp ZP_WORD:15 [ plot::plotter_x#1 ] zp ZP_WORD:21 [ plot::plotter_y#1 ] zp ZP_WORD:18 [ plot::plotter_x#2 ]
Uplifting [init_screen] best 8445 combination zp ZP_WORD:8 [ init_screen::b#2 init_screen::b#1 ] zp ZP_WORD:10 [ init_screen::c#2 init_screen::c#1 ]
Uplifting [plot] best 8433 combination zp ZP_BYTE:13 [ plot::y#0 ] zp ZP_BYTE:12 [ plot::x#0 ] reg byte a [ plot::$6 ] reg byte a [ plot::$7 ] zp ZP_BYTE:20 [ plot::$8 ] zp ZP_BYTE:23 [ plot::$9 ] zp ZP_WORD:24 [ plot::plotter_y#2 ] zp ZP_BYTE:28 [ plot::$5 ] zp ZP_WORD:26 [ plot::plotter#0 ] zp ZP_WORD:15 [ plot::plotter_x#1 ] zp ZP_WORD:21 [ plot::plotter_y#1 ] zp ZP_WORD:18 [ plot::plotter_x#2 ]
Limited combination testing to 100 combinations of 9216 possible.
Uplifting [main] best 8473 combination
Uplifting [] best 8473 combination
Uplifting [main] best 8433 combination
Uplifting [] best 8433 combination
Attempting to uplift remaining variables inzp ZP_BYTE:31 [ init_plot_tables::$7 ]
Uplifting [init_plot_tables] best 8413 combination reg byte a [ init_plot_tables::$7 ]
Uplifting [init_plot_tables] best 8373 combination reg byte a [ init_plot_tables::$7 ]
Attempting to uplift remaining variables inzp ZP_BYTE:32 [ init_plot_tables::$8 ]
Uplifting [init_plot_tables] best 8353 combination reg byte a [ init_plot_tables::$8 ]
Uplifting [init_plot_tables] best 8313 combination reg byte a [ init_plot_tables::$8 ]
Attempting to uplift remaining variables inzp ZP_BYTE:33 [ init_plot_tables::$9 ]
Uplifting [init_plot_tables] best 8293 combination reg byte a [ init_plot_tables::$9 ]
Uplifting [init_plot_tables] best 8253 combination reg byte a [ init_plot_tables::$9 ]
Attempting to uplift remaining variables inzp ZP_BYTE:34 [ init_plot_tables::$10 ]
Uplifting [init_plot_tables] best 8233 combination reg byte a [ init_plot_tables::$10 ]
Uplifting [init_plot_tables] best 8213 combination reg byte a [ init_plot_tables::$10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ plot::y#0 ]
Uplifting [plot] best 8233 combination zp ZP_BYTE:13 [ plot::y#0 ]
Uplifting [plot] best 8213 combination zp ZP_BYTE:13 [ plot::y#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:30 [ init_plot_tables::$6 ]
Uplifting [init_plot_tables] best 8233 combination zp ZP_BYTE:30 [ init_plot_tables::$6 ]
Uplifting [init_plot_tables] best 8213 combination zp ZP_BYTE:30 [ init_plot_tables::$6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:12 [ plot::x#0 ]
Uplifting [plot] best 8233 combination zp ZP_BYTE:12 [ plot::x#0 ]
Uplifting [plot] best 8213 combination zp ZP_BYTE:12 [ plot::x#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:20 [ plot::$8 ]
Uplifting [plot] best 8227 combination reg byte a [ plot::$8 ]
Uplifting [plot] best 8207 combination reg byte a [ plot::$8 ]
Attempting to uplift remaining variables inzp ZP_BYTE:23 [ plot::$9 ]
Uplifting [plot] best 8221 combination reg byte a [ plot::$9 ]
Uplifting [plot] best 8201 combination reg byte a [ plot::$9 ]
Attempting to uplift remaining variables inzp ZP_BYTE:28 [ plot::$5 ]
Uplifting [plot] best 8215 combination reg byte a [ plot::$5 ]
Uplifting [plot] best 8195 combination reg byte a [ plot::$5 ]
Coalescing zero page register with common assignment [ zp ZP_WORD:15 [ plot::plotter_x#1 ] ] with [ zp ZP_WORD:18 [ plot::plotter_x#2 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:21 [ plot::plotter_y#1 ] ] with [ zp ZP_WORD:24 [ plot::plotter_y#2 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:15 [ plot::plotter_x#1 plot::plotter_x#2 ] ] with [ zp ZP_WORD:26 [ plot::plotter#0 ] ] - score: 1
@ -1465,8 +1462,8 @@ main: {
//SEG20 main::@2
b2:
//SEG21 [11] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b2
jmp b3
//SEG22 main::@3
@ -1639,9 +1636,8 @@ init_plot_tables: {
//SEG81 init_plot_tables::@3
b3:
//SEG82 [47] (byte~) init_plot_tables::$6 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuxx_band_vbuc1
txa
and #7
sta _6
lda #7
sax _6
//SEG83 [48] (byte~) init_plot_tables::$7 ← < (byte*) init_plot_tables::yoffs#2 -- vbuaa=_lo_pbuz1
lda yoffs
//SEG84 [49] (byte~) init_plot_tables::$8 ← (byte~) init_plot_tables::$6 | (byte~) init_plot_tables::$7 -- vbuaa=vbuz1_bor_vbuaa
@ -2000,7 +1996,7 @@ reg byte a [ init_plot_tables::$10 ]
FINAL ASSEMBLER
Score: 6201
Score: 6181
//SEG0 File Comments
//SEG1 Basic Upstart
@ -2049,8 +2045,8 @@ main: {
//SEG20 main::@2
b2:
//SEG21 [11] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b2
//SEG22 main::@3
//SEG23 [12] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
@ -2195,9 +2191,8 @@ init_plot_tables: {
//SEG81 init_plot_tables::@3
b3:
//SEG82 [47] (byte~) init_plot_tables::$6 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuxx_band_vbuc1
txa
and #7
sta _6
lda #7
sax _6
//SEG83 [48] (byte~) init_plot_tables::$7 ← < (byte*) init_plot_tables::yoffs#2 -- vbuaa=_lo_pbuz1
lda yoffs
//SEG84 [49] (byte~) init_plot_tables::$8 ← (byte~) init_plot_tables::$6 | (byte~) init_plot_tables::$7 -- vbuaa=vbuz1_bor_vbuaa

View File

@ -168,8 +168,8 @@ main: {
//SEG18 [8] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuz1=_inc_vbuz1
inc c
//SEG19 [9] if((byte) main::c#1!=(byte/signed byte/word/signed word/dword/signed dword) $1b) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda c
cmp #$1b
lda #$1b
cmp c
bne b1_from_b1
jmp breturn
//SEG20 main::@return

View File

@ -316,8 +316,8 @@ main: {
//SEG24 main::@4
b4:
//SEG25 [13] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #' '
ldy i
sta screen,y
jmp b3
//SEG26 main::@3
@ -325,8 +325,8 @@ main: {
//SEG27 [14] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG28 [15] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $65) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #$65
lda #$65
cmp i
bne b1_from_b3
jmp breturn
//SEG29 main::@return
@ -336,8 +336,8 @@ main: {
//SEG31 main::@2
b2:
//SEG32 [17] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #'*'
ldy i
sta screen,y
jmp b3
}
@ -375,20 +375,17 @@ isSet: {
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [6] (byte~) main::$0 ← (byte) main::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Statement [7] (bool) isSet::b#0 ← (byte~) main::$0 == (byte/signed byte/word/signed word/dword/signed dword) 0 [ main::i#2 isSet::b#0 ] ( main:2 [ main::i#2 isSet::b#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Statement [13] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) ' ' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Statement [17] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Statement [18] (byte~) isSet::$0 ← (byte) isSet::i#0 & (byte/signed byte/word/signed word/dword/signed dword) 8 [ isSet::b#0 isSet::$0 ] ( main:2::isSet:9 [ main::i#2 isSet::b#0 isSet::$0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BOOL:4 [ isSet::b#0 ]
Statement [19] (bool~) isSet::$1 ← (byte~) isSet::$0 != (byte/signed byte/word/signed word/dword/signed dword) 0 [ isSet::b#0 isSet::$1 ] ( main:2::isSet:9 [ main::i#2 isSet::b#0 isSet::$1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BOOL:4 [ isSet::b#0 ]
Statement [20] (bool) isSet::return#1 ← (bool) isSet::b#0 || (bool~) isSet::$1 [ isSet::return#1 ] ( main:2::isSet:9 [ main::i#2 isSet::return#1 ] ) always clobbers reg byte a
Statement [6] (byte~) main::$0 ← (byte) main::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] ) always clobbers reg byte a
Statement [7] (bool) isSet::b#0 ← (byte~) main::$0 == (byte/signed byte/word/signed word/dword/signed dword) 0 [ main::i#2 isSet::b#0 ] ( main:2 [ main::i#2 isSet::b#0 ] ) always clobbers reg byte a
Statement [13] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) ' ' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Statement [17] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Statement [18] (byte~) isSet::$0 ← (byte) isSet::i#0 & (byte/signed byte/word/signed word/dword/signed dword) 8 [ isSet::b#0 isSet::$0 ] ( main:2::isSet:9 [ main::i#2 isSet::b#0 isSet::$0 ] ) always clobbers reg byte a
Statement [19] (bool~) isSet::$1 ← (byte~) isSet::$0 != (byte/signed byte/word/signed word/dword/signed dword) 0 [ isSet::b#0 isSet::$1 ] ( main:2::isSet:9 [ main::i#2 isSet::b#0 isSet::$1 ] ) always clobbers reg byte a
Statement [20] (bool) isSet::return#1 ← (bool) isSet::b#0 || (bool~) isSet::$1 [ isSet::return#1 ] ( main:2::isSet:9 [ main::i#2 isSet::return#1 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,

View File

@ -13,9 +13,9 @@ bool_complex: {
.label screen = $478
ldy #0
b1:
ldx #1
tya
and #1
tax
axs #0
tya
and #1
cpy #$a

View File

@ -663,8 +663,8 @@ bool_complex: {
//SEG40 bool_complex::@2
b2:
//SEG41 [20] *((const byte*) bool_complex::screen#0 + (byte) bool_complex::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #'*'
ldy i
sta screen,y
jmp b3
//SEG42 bool_complex::@3
@ -672,8 +672,8 @@ bool_complex: {
//SEG43 [21] (byte) bool_complex::i#1 ← ++ (byte) bool_complex::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG44 [22] if((byte) bool_complex::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $15) goto bool_complex::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #$15
lda #$15
cmp i
bne b1_from_b3
jmp breturn
//SEG45 bool_complex::@return
@ -683,8 +683,8 @@ bool_complex: {
//SEG47 bool_complex::@4
b4:
//SEG48 [24] *((const byte*) bool_complex::screen#0 + (byte) bool_complex::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #' '
ldy i
sta screen,y
jmp b3
//SEG49 bool_complex::@8
@ -731,8 +731,8 @@ bool_not: {
//SEG61 bool_not::@2
b2:
//SEG62 [31] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #'*'
ldy i
sta screen,y
jmp b3
//SEG63 bool_not::@3
@ -740,8 +740,8 @@ bool_not: {
//SEG64 [32] (byte) bool_not::i#1 ← ++ (byte) bool_not::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG65 [33] if((byte) bool_not::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $15) goto bool_not::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #$15
lda #$15
cmp i
bne b1_from_b3
jmp breturn
//SEG66 bool_not::@return
@ -751,8 +751,8 @@ bool_not: {
//SEG68 bool_not::@4
b4:
//SEG69 [35] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #' '
ldy i
sta screen,y
jmp b3
}
@ -792,8 +792,8 @@ bool_or: {
//SEG80 bool_or::@4
b4:
//SEG81 [41] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #' '
ldy i
sta screen,y
jmp b3
//SEG82 bool_or::@3
@ -801,8 +801,8 @@ bool_or: {
//SEG83 [42] (byte) bool_or::i#1 ← ++ (byte) bool_or::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG84 [43] if((byte) bool_or::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $15) goto bool_or::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #$15
lda #$15
cmp i
bne b1_from_b3
jmp breturn
//SEG85 bool_or::@return
@ -812,8 +812,8 @@ bool_or: {
//SEG87 bool_or::@2
b2:
//SEG88 [45] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #'*'
ldy i
sta screen,y
jmp b3
}
@ -846,8 +846,8 @@ bool_and: {
//SEG97 bool_and::@4
b4:
//SEG98 [50] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #' '
ldy i
sta screen,y
jmp b3
//SEG99 bool_and::@3
@ -855,8 +855,8 @@ bool_and: {
//SEG100 [51] (byte) bool_and::i#1 ← ++ (byte) bool_and::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG101 [52] if((byte) bool_and::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $15) goto bool_and::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #$15
lda #$15
cmp i
bne b1_from_b3
jmp breturn
//SEG102 bool_and::@return
@ -873,29 +873,37 @@ bool_and: {
//SEG106 bool_and::@2
b2:
//SEG107 [55] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #'*'
ldy i
sta screen,y
jmp b3
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [15] (byte~) bool_complex::$1 ← (byte) bool_complex::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ bool_complex::i#2 bool_complex::$1 ] ( main:2::bool_complex:11 [ bool_complex::i#2 bool_complex::$1 ] ) always clobbers reg byte a
Statement [20] *((const byte*) bool_complex::screen#0 + (byte) bool_complex::i#2) ← (byte) '*' [ bool_complex::i#2 ] ( main:2::bool_complex:11 [ bool_complex::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ bool_complex::i#2 bool_complex::i#1 ]
Statement [24] *((const byte*) bool_complex::screen#0 + (byte) bool_complex::i#2) ← (byte) ' ' [ bool_complex::i#2 ] ( main:2::bool_complex:11 [ bool_complex::i#2 ] ) always clobbers reg byte a
Statement [31] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) '*' [ bool_not::i#2 ] ( main:2::bool_not:9 [ bool_not::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ bool_not::i#2 bool_not::i#1 ]
Statement [35] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) ' ' [ bool_not::i#2 ] ( main:2::bool_not:9 [ bool_not::i#2 ] ) always clobbers reg byte a
Statement [41] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) ' ' [ bool_or::i#2 ] ( main:2::bool_or:7 [ bool_or::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ bool_or::i#2 bool_or::i#1 ]
Statement [45] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) '*' [ bool_or::i#2 ] ( main:2::bool_or:7 [ bool_or::i#2 ] ) always clobbers reg byte a
Statement [50] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) ' ' [ bool_and::i#2 ] ( main:2::bool_and:5 [ bool_and::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ bool_and::i#2 bool_and::i#1 ]
Statement [55] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) '*' [ bool_and::i#2 ] ( main:2::bool_and:5 [ bool_and::i#2 ] ) always clobbers reg byte a
Statement [15] (byte~) bool_complex::$1 ← (byte) bool_complex::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ bool_complex::i#2 bool_complex::$1 ] ( main:2::bool_complex:11 [ bool_complex::i#2 bool_complex::$1 ] ) always clobbers reg byte a
Statement [16] (byte~) bool_complex::$5 ← (byte) bool_complex::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ bool_complex::i#2 bool_complex::$1 bool_complex::$5 ] ( main:2::bool_complex:11 [ bool_complex::i#2 bool_complex::$1 bool_complex::$5 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ bool_complex::$1 ]
Statement [20] *((const byte*) bool_complex::screen#0 + (byte) bool_complex::i#2) ← (byte) '*' [ bool_complex::i#2 ] ( main:2::bool_complex:11 [ bool_complex::i#2 ] ) always clobbers reg byte a
Statement [24] *((const byte*) bool_complex::screen#0 + (byte) bool_complex::i#2) ← (byte) ' ' [ bool_complex::i#2 ] ( main:2::bool_complex:11 [ bool_complex::i#2 ] ) always clobbers reg byte a
Statement [28] (byte~) bool_not::$1 ← (byte) bool_not::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ bool_not::i#2 bool_not::$1 ] ( main:2::bool_not:9 [ bool_not::i#2 bool_not::$1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ bool_not::i#2 bool_not::i#1 ]
Statement [31] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) '*' [ bool_not::i#2 ] ( main:2::bool_not:9 [ bool_not::i#2 ] ) always clobbers reg byte a
Statement [35] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) ' ' [ bool_not::i#2 ] ( main:2::bool_not:9 [ bool_not::i#2 ] ) always clobbers reg byte a
Statement [38] (byte~) bool_or::$1 ← (byte) bool_or::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ bool_or::i#2 bool_or::$1 ] ( main:2::bool_or:7 [ bool_or::i#2 bool_or::$1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ bool_or::i#2 bool_or::i#1 ]
Statement [41] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) ' ' [ bool_or::i#2 ] ( main:2::bool_or:7 [ bool_or::i#2 ] ) always clobbers reg byte a
Statement [45] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) '*' [ bool_or::i#2 ] ( main:2::bool_or:7 [ bool_or::i#2 ] ) always clobbers reg byte a
Statement [48] (byte~) bool_and::$1 ← (byte) bool_and::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ bool_and::i#2 bool_and::$1 ] ( main:2::bool_and:5 [ bool_and::i#2 bool_and::$1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ bool_and::i#2 bool_and::i#1 ]
Statement [50] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) ' ' [ bool_and::i#2 ] ( main:2::bool_and:5 [ bool_and::i#2 ] ) always clobbers reg byte a
Statement [55] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) '*' [ bool_and::i#2 ] ( main:2::bool_and:5 [ bool_and::i#2 ] ) always clobbers reg byte a
Statement [15] (byte~) bool_complex::$1 ← (byte) bool_complex::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ bool_complex::i#2 bool_complex::$1 ] ( main:2::bool_complex:11 [ bool_complex::i#2 bool_complex::$1 ] ) always clobbers reg byte a
@ -1014,9 +1022,9 @@ bool_complex: {
//SEG32 bool_complex::@1
b1:
//SEG33 [15] (byte~) bool_complex::$1 ← (byte) bool_complex::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuyy_band_vbuc1
ldx #1
tya
and #1
tax
axs #0
//SEG34 [16] (byte~) bool_complex::$5 ← (byte) bool_complex::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuyy_band_vbuc1
tya
and #1
@ -1430,9 +1438,9 @@ bool_complex: {
//SEG32 bool_complex::@1
b1:
//SEG33 [15] (byte~) bool_complex::$1 ← (byte) bool_complex::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuyy_band_vbuc1
ldx #1
tya
and #1
tax
axs #0
//SEG34 [16] (byte~) bool_complex::$5 ← (byte) bool_complex::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuyy_band_vbuc1
tya
and #1

View File

@ -740,8 +740,8 @@ bool_complex: {
//SEG41 bool_complex::@2
b2:
//SEG42 [21] *((const byte*) bool_complex::screen#0 + (byte) bool_complex::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #'*'
ldy i
sta screen,y
jmp b3
//SEG43 bool_complex::@3
@ -749,8 +749,8 @@ bool_complex: {
//SEG44 [22] (byte) bool_complex::i#1 ← ++ (byte) bool_complex::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG45 [23] if((byte) bool_complex::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $15) goto bool_complex::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #$15
lda #$15
cmp i
bne b1_from_b3
jmp breturn
//SEG46 bool_complex::@return
@ -760,8 +760,8 @@ bool_complex: {
//SEG48 bool_complex::@4
b4:
//SEG49 [25] *((const byte*) bool_complex::screen#0 + (byte) bool_complex::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #' '
ldy i
sta screen,y
jmp b3
//SEG50 bool_complex::@8
@ -808,8 +808,8 @@ bool_not: {
//SEG62 bool_not::@2
b2:
//SEG63 [32] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #'*'
ldy i
sta screen,y
jmp b3
//SEG64 bool_not::@3
@ -817,8 +817,8 @@ bool_not: {
//SEG65 [33] (byte) bool_not::i#1 ← ++ (byte) bool_not::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG66 [34] if((byte) bool_not::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $15) goto bool_not::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #$15
lda #$15
cmp i
bne b1_from_b3
jmp breturn
//SEG67 bool_not::@return
@ -828,8 +828,8 @@ bool_not: {
//SEG69 bool_not::@4
b4:
//SEG70 [36] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #' '
ldy i
sta screen,y
jmp b3
}
@ -869,8 +869,8 @@ bool_or: {
//SEG81 bool_or::@4
b4:
//SEG82 [42] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #' '
ldy i
sta screen,y
jmp b3
//SEG83 bool_or::@3
@ -878,8 +878,8 @@ bool_or: {
//SEG84 [43] (byte) bool_or::i#1 ← ++ (byte) bool_or::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG85 [44] if((byte) bool_or::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $15) goto bool_or::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #$15
lda #$15
cmp i
bne b1_from_b3
jmp breturn
//SEG86 bool_or::@return
@ -889,8 +889,8 @@ bool_or: {
//SEG88 bool_or::@2
b2:
//SEG89 [46] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #'*'
ldy i
sta screen,y
jmp b3
}
@ -923,8 +923,8 @@ bool_and: {
//SEG98 bool_and::@4
b4:
//SEG99 [51] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #' '
ldy i
sta screen,y
jmp b3
//SEG100 bool_and::@3
@ -932,8 +932,8 @@ bool_and: {
//SEG101 [52] (byte) bool_and::i#1 ← ++ (byte) bool_and::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG102 [53] if((byte) bool_and::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $15) goto bool_and::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #$15
lda #$15
cmp i
bne b1_from_b3
jmp breturn
//SEG103 bool_and::@return
@ -950,8 +950,8 @@ bool_and: {
//SEG107 bool_and::@2
b2:
//SEG108 [56] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) '*' -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #'*'
ldy i
sta screen,y
jmp b3
}
@ -969,17 +969,14 @@ Statement [20] if((bool) bool_complex::o2#0) goto bool_complex::@4 [ bool_comple
Statement [21] *((const byte*) bool_complex::screen#0 + (byte) bool_complex::i#2) ← (byte) '*' [ bool_complex::i#2 ] ( main:2::bool_complex:11 [ bool_complex::i#2 ] ) always clobbers reg byte a
Statement [25] *((const byte*) bool_complex::screen#0 + (byte) bool_complex::i#2) ← (byte) ' ' [ bool_complex::i#2 ] ( main:2::bool_complex:11 [ bool_complex::i#2 ] ) always clobbers reg byte a
Statement [26] if((bool) bool_complex::o2#0) goto bool_complex::@2 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::o2#0 ] ( main:2::bool_complex:11 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::o2#0 ] ) always clobbers reg byte a
Statement [29] (byte~) bool_not::$1 ← (byte) bool_not::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ bool_not::i#2 bool_not::$1 ] ( main:2::bool_not:9 [ bool_not::i#2 bool_not::$1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ bool_not::i#2 bool_not::i#1 ]
Statement [32] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) '*' [ bool_not::i#2 ] ( main:2::bool_not:9 [ bool_not::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ bool_not::i#2 bool_not::i#1 ]
Statement [36] *((const byte*) bool_not::screen#0 + (byte) bool_not::i#2) ← (byte) ' ' [ bool_not::i#2 ] ( main:2::bool_not:9 [ bool_not::i#2 ] ) always clobbers reg byte a
Statement [39] (byte~) bool_or::$1 ← (byte) bool_or::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ bool_or::i#2 bool_or::$1 ] ( main:2::bool_or:7 [ bool_or::i#2 bool_or::$1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ bool_or::i#2 bool_or::i#1 ]
Statement [42] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) ' ' [ bool_or::i#2 ] ( main:2::bool_or:7 [ bool_or::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ bool_or::i#2 bool_or::i#1 ]
Statement [46] *((const byte*) bool_or::screen#0 + (byte) bool_or::i#2) ← (byte) '*' [ bool_or::i#2 ] ( main:2::bool_or:7 [ bool_or::i#2 ] ) always clobbers reg byte a
Statement [49] (byte~) bool_and::$1 ← (byte) bool_and::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ bool_and::i#2 bool_and::$1 ] ( main:2::bool_and:5 [ bool_and::i#2 bool_and::$1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ bool_and::i#2 bool_and::i#1 ]
Statement [51] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) ' ' [ bool_and::i#2 ] ( main:2::bool_and:5 [ bool_and::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ bool_and::i#2 bool_and::i#1 ]
Statement [56] *((const byte*) bool_and::screen#0 + (byte) bool_and::i#2) ← (byte) '*' [ bool_and::i#2 ] ( main:2::bool_and:5 [ bool_and::i#2 ] ) always clobbers reg byte a
Statement [15] (bool) bool_complex::o1#0 ← (byte) bool_complex::i#2 < (byte/signed byte/word/signed word/dword/signed dword) $a [ bool_complex::i#2 bool_complex::o1#0 ] ( main:2::bool_complex:11 [ bool_complex::i#2 bool_complex::o1#0 ] ) always clobbers reg byte a
Statement [16] (byte~) bool_complex::$1 ← (byte) bool_complex::i#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::$1 ] ( main:2::bool_complex:11 [ bool_complex::i#2 bool_complex::o1#0 bool_complex::$1 ] ) always clobbers reg byte a

View File

@ -32,9 +32,7 @@ main: {
inc cursor+1
!:
txa
clc
adc #yd
tax
axs #-yd
cpx #xd
bcc b2
inc y
@ -46,9 +44,7 @@ main: {
inc cursor+1
!:
txa
sec
sbc #xd
tax
axs #xd
b2:
lda x
cmp #x1+1

View File

@ -403,10 +403,9 @@ main: {
inc cursor+1
!:
//SEG25 [9] (byte) main::e#1 ← (byte) main::e#3 + (const byte) main::yd#0 -- vbuz1=vbuz1_plus_vbuc1
lda #yd
clc
adc e
sta e
lax e
axs #-yd
stx e
//SEG26 [10] if((const byte) main::xd#0>(byte) main::e#1) goto main::@2 -- vbuc1_gt_vbuz1_then_la1
lda e
cmp #xd
@ -425,10 +424,9 @@ main: {
inc cursor+1
!:
//SEG30 [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 -- vbuz1=vbuz1_minus_vbuc1
lda e
sec
sbc #xd
sta e
lax e
axs #xd
stx e
//SEG31 [14] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2]
b2_from_b1:
b2_from_b3:
@ -457,28 +455,32 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ ma
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ]
Statement [9] (byte) main::e#1 ← (byte) main::e#3 + (const byte) main::yd#0 [ main::y#2 main::x#1 main::cursor#1 main::e#1 ] ( main:2 [ main::y#2 main::x#1 main::cursor#1 main::e#1 ] ) always clobbers reg byte a
Statement [9] (byte) main::e#1 ← (byte) main::e#3 + (const byte) main::yd#0 [ main::y#2 main::x#1 main::cursor#1 main::e#1 ] ( main:2 [ main::y#2 main::x#1 main::cursor#1 main::e#1 ] ) always clobbers reg byte a reg byte x
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:4 [ main::x#2 main::x#1 ]
Statement [12] (byte*) main::cursor#2 ← (byte*) main::cursor#1 + (byte/signed byte/word/signed word/dword/signed dword) $28 [ main::x#1 main::e#1 main::y#1 main::cursor#2 ] ( main:2 [ main::x#1 main::e#1 main::y#1 main::cursor#2 ] ) always clobbers reg byte a
Statement [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 [ main::x#1 main::y#1 main::cursor#2 main::e#2 ] ( main:2 [ main::x#1 main::y#1 main::cursor#2 main::e#2 ] ) always clobbers reg byte a
Statement [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 [ main::x#1 main::y#1 main::cursor#2 main::e#2 ] ( main:2 [ main::x#1 main::y#1 main::cursor#2 main::e#2 ] ) always clobbers reg byte a reg byte x
Statement [15] if((byte) main::x#1<(const byte) main::x1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 [ main::cursor#5 main::x#1 main::e#5 main::y#4 ] ( main:2 [ main::cursor#5 main::x#1 main::e#5 main::y#4 ] ) always clobbers reg byte a
Statement [6] *((byte*) main::cursor#3) ← (const byte) STAR#0 [ main::cursor#3 main::x#2 main::e#3 main::y#2 ] ( main:2 [ main::cursor#3 main::x#2 main::e#3 main::y#2 ] ) always clobbers reg byte a reg byte y
Statement [9] (byte) main::e#1 ← (byte) main::e#3 + (const byte) main::yd#0 [ main::y#2 main::x#1 main::cursor#1 main::e#1 ] ( main:2 [ main::y#2 main::x#1 main::cursor#1 main::e#1 ] ) always clobbers reg byte a
Statement [9] (byte) main::e#1 ← (byte) main::e#3 + (const byte) main::yd#0 [ main::y#2 main::x#1 main::cursor#1 main::e#1 ] ( main:2 [ main::y#2 main::x#1 main::cursor#1 main::e#1 ] ) always clobbers reg byte a reg byte x
Statement [12] (byte*) main::cursor#2 ← (byte*) main::cursor#1 + (byte/signed byte/word/signed word/dword/signed dword) $28 [ main::x#1 main::e#1 main::y#1 main::cursor#2 ] ( main:2 [ main::x#1 main::e#1 main::y#1 main::cursor#2 ] ) always clobbers reg byte a
Statement [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 [ main::x#1 main::y#1 main::cursor#2 main::e#2 ] ( main:2 [ main::x#1 main::y#1 main::cursor#2 main::e#2 ] ) always clobbers reg byte a
Statement [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 [ main::x#1 main::y#1 main::cursor#2 main::e#2 ] ( main:2 [ main::x#1 main::y#1 main::cursor#2 main::e#2 ] ) always clobbers reg byte a reg byte x
Statement [15] if((byte) main::x#1<(const byte) main::x1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 [ main::cursor#5 main::x#1 main::e#5 main::y#4 ] ( main:2 [ main::cursor#5 main::x#1 main::e#5 main::y#4 ] ) always clobbers reg byte a
Potential registers zp ZP_WORD:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] : zp ZP_WORD:2 ,
Potential registers zp ZP_BYTE:4 [ main::x#2 main::x#1 ] : zp ZP_BYTE:4 , reg byte x ,
Potential registers zp ZP_BYTE:4 [ main::x#2 main::x#1 ] : zp ZP_BYTE:4 ,
Potential registers zp ZP_BYTE:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ] : zp ZP_BYTE:5 , reg byte x ,
Potential registers zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] : zp ZP_BYTE:6 , reg byte x ,
Potential registers zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] : zp ZP_BYTE:6 ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 55: zp ZP_BYTE:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ] 46.75: zp ZP_WORD:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] 29.33: zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] 14.67: zp ZP_BYTE:4 [ main::x#2 main::x#1 ]
Uplift Scope []
Uplifting [main] best 1168 combination reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ] zp ZP_WORD:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] zp ZP_BYTE:4 [ main::x#2 main::x#1 ]
Uplifting [] best 1168 combination
Uplifting [main] best 1088 combination reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ] zp ZP_WORD:2 [ main::cursor#3 main::cursor#5 main::cursor#1 main::cursor#2 ] zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] zp ZP_BYTE:4 [ main::x#2 main::x#1 ]
Uplifting [] best 1088 combination
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ]
Uplifting [main] best 1168 combination zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ]
Uplifting [main] best 1088 combination zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ main::x#2 main::x#1 ]
Uplifting [main] best 1168 combination zp ZP_BYTE:4 [ main::x#2 main::x#1 ]
Uplifting [main] best 1088 combination zp ZP_BYTE:4 [ main::x#2 main::x#1 ]
Allocated (was zp ZP_BYTE:6) zp ZP_BYTE:5 [ main::y#2 main::y#4 main::y#1 ]
ASSEMBLER BEFORE OPTIMIZATION
@ -555,9 +557,7 @@ main: {
!:
//SEG25 [9] (byte) main::e#1 ← (byte) main::e#3 + (const byte) main::yd#0 -- vbuxx=vbuxx_plus_vbuc1
txa
clc
adc #yd
tax
axs #-yd
//SEG26 [10] if((const byte) main::xd#0>(byte) main::e#1) goto main::@2 -- vbuc1_gt_vbuxx_then_la1
cpx #xd
bcc b2_from_b1
@ -576,9 +576,7 @@ main: {
!:
//SEG30 [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 -- vbuxx=vbuxx_minus_vbuc1
txa
sec
sbc #xd
tax
axs #xd
//SEG31 [14] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2]
b2_from_b1:
b2_from_b3:
@ -680,7 +678,7 @@ zp ZP_BYTE:5 [ main::y#2 main::y#4 main::y#1 ]
FINAL ASSEMBLER
Score: 1006
Score: 926
//SEG0 File Comments
//SEG1 Basic Upstart
@ -742,9 +740,7 @@ main: {
!:
//SEG25 [9] (byte) main::e#1 ← (byte) main::e#3 + (const byte) main::yd#0 -- vbuxx=vbuxx_plus_vbuc1
txa
clc
adc #yd
tax
axs #-yd
//SEG26 [10] if((const byte) main::xd#0>(byte) main::e#1) goto main::@2 -- vbuc1_gt_vbuxx_then_la1
cpx #xd
bcc b2
@ -761,9 +757,7 @@ main: {
!:
//SEG30 [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 -- vbuxx=vbuxx_minus_vbuc1
txa
sec
sbc #xd
tax
axs #xd
//SEG31 [14] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2]
//SEG32 [14] phi (byte) main::y#4 = (byte) main::y#2 [phi:main::@1/main::@3->main::@2#0] -- register_copy
//SEG33 [14] phi (byte) main::e#5 = (byte) main::e#1 [phi:main::@1/main::@3->main::@2#1] -- register_copy

View File

@ -14,8 +14,8 @@ main: {
.label y = 4
lda #y0
sta y
ldy #yd/2
ldx #x0
ldx #yd/2
ldy #x0
lda #x0+y0*$28
sta idx
lda #0
@ -31,16 +31,14 @@ main: {
lda #STAR
!:
sta screen
inx
iny
inc idx
bne !+
inc idx+1
!:
tya
clc
adc #yd
tay
cpy #xd
txa
axs #-yd
cpx #xd
bcc b2
beq b2
inc y
@ -51,12 +49,10 @@ main: {
bcc !+
inc idx+1
!:
tya
sec
sbc #xd
tay
txa
axs #xd
b2:
cpx #x1+1
cpy #x1+1
bcc b1
rts
}

View File

@ -405,10 +405,9 @@ main: {
inc idx+1
!:
//SEG25 [9] (byte) main::e#1 ← (byte) main::e#3 + (const byte) main::yd#0 -- vbuz1=vbuz1_plus_vbuc1
lda #yd
clc
adc e
sta e
lax e
axs #-yd
stx e
//SEG26 [10] if((const byte) main::xd#0>=(byte) main::e#1) goto main::@2 -- vbuc1_ge_vbuz1_then_la1
lda #xd
cmp e
@ -427,10 +426,9 @@ main: {
inc idx+1
!:
//SEG30 [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 -- vbuz1=vbuz1_minus_vbuc1
lda e
sec
sbc #xd
sta e
lax e
axs #xd
stx e
//SEG31 [14] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2]
b2_from_b1:
b2_from_b3:
@ -472,10 +470,10 @@ REGISTER UPLIFT SCOPES
Uplift Scope [main] 55: zp ZP_BYTE:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ] 46.75: zp ZP_WORD:2 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ] 29.33: zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] 14.67: zp ZP_BYTE:4 [ main::x#2 main::x#1 ]
Uplift Scope []
Uplifting [main] best 1263 combination reg byte y [ main::e#3 main::e#5 main::e#1 main::e#2 ] zp ZP_WORD:2 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ] zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] reg byte x [ main::x#2 main::x#1 ]
Uplifting [] best 1263 combination
Uplifting [main] best 1183 combination reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ] zp ZP_WORD:2 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ] zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] reg byte y [ main::x#2 main::x#1 ]
Uplifting [] best 1183 combination
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ]
Uplifting [main] best 1263 combination zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ]
Uplifting [main] best 1183 combination zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ]
Allocated (was zp ZP_BYTE:6) zp ZP_BYTE:4 [ main::y#2 main::y#4 main::y#1 ]
ASSEMBLER BEFORE OPTIMIZATION
@ -518,10 +516,10 @@ main: {
//SEG12 [5] phi (byte) main::y#2 = (const byte) main::y0#0 [phi:main->main::@1#0] -- vbuz1=vbuc1
lda #y0
sta y
//SEG13 [5] phi (byte) main::e#3 = (const byte) main::yd#0/(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:main->main::@1#1] -- vbuyy=vbuc1
ldy #yd/2
//SEG14 [5] phi (byte) main::x#2 = (const byte) main::x0#0 [phi:main->main::@1#2] -- vbuxx=vbuc1
ldx #x0
//SEG13 [5] phi (byte) main::e#3 = (const byte) main::yd#0/(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:main->main::@1#1] -- vbuxx=vbuc1
ldx #yd/2
//SEG14 [5] phi (byte) main::x#2 = (const byte) main::x0#0 [phi:main->main::@1#2] -- vbuyy=vbuc1
ldy #x0
//SEG15 [5] phi (word) main::idx#3 = (const byte) main::x0#0+(const byte) main::y0#0*(byte/signed byte/word/signed word/dword/signed dword) $28 [phi:main->main::@1#3] -- vwuz1=vbuc1
lda #x0+y0*$28
sta idx
@ -548,20 +546,18 @@ main: {
lda #STAR
!:
sta screen
//SEG23 [7] (byte) main::x#1 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuxx_plus_1
inx
//SEG23 [7] (byte) main::x#1 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuyy=vbuyy_plus_1
iny
//SEG24 [8] (word) main::idx#1 ← (word) main::idx#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_plus_1
inc idx
bne !+
inc idx+1
!:
//SEG25 [9] (byte) main::e#1 ← (byte) main::e#3 + (const byte) main::yd#0 -- vbuyy=vbuyy_plus_vbuc1
tya
clc
adc #yd
tay
//SEG26 [10] if((const byte) main::xd#0>=(byte) main::e#1) goto main::@2 -- vbuc1_ge_vbuyy_then_la1
cpy #xd
//SEG25 [9] (byte) main::e#1 ← (byte) main::e#3 + (const byte) main::yd#0 -- vbuxx=vbuxx_plus_vbuc1
txa
axs #-yd
//SEG26 [10] if((const byte) main::xd#0>=(byte) main::e#1) goto main::@2 -- vbuc1_ge_vbuxx_then_la1
cpx #xd
bcc b2_from_b1
beq b2_from_b1
jmp b3
@ -577,11 +573,9 @@ main: {
bcc !+
inc idx+1
!:
//SEG30 [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 -- vbuyy=vbuyy_minus_vbuc1
tya
sec
sbc #xd
tay
//SEG30 [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 -- vbuxx=vbuxx_minus_vbuc1
txa
axs #xd
//SEG31 [14] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2]
b2_from_b1:
b2_from_b3:
@ -591,8 +585,8 @@ main: {
jmp b2
//SEG35 main::@2
b2:
//SEG36 [15] if((byte) main::x#1<(const byte) main::x1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 -- vbuxx_lt_vbuc1_then_la1
cpx #x1+1
//SEG36 [15] if((byte) main::x#1<(const byte) main::x1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 -- vbuyy_lt_vbuc1_then_la1
cpy #x1+1
bcc b1_from_b2
jmp breturn
//SEG37 main::@return
@ -645,10 +639,10 @@ FINAL SYMBOL TABLE
(byte) main::STAR
(const byte) main::STAR#0 STAR = (byte/signed byte/word/signed word/dword/signed dword) $51
(byte) main::e
(byte) main::e#1 reg byte y 11.0
(byte) main::e#2 reg byte y 22.0
(byte) main::e#3 reg byte y 5.5
(byte) main::e#5 reg byte y 16.5
(byte) main::e#1 reg byte x 11.0
(byte) main::e#2 reg byte x 22.0
(byte) main::e#3 reg byte x 5.5
(byte) main::e#5 reg byte x 16.5
(word) main::idx
(word) main::idx#1 idx zp ZP_WORD:2 8.25
(word) main::idx#2 idx zp ZP_WORD:2 11.0
@ -657,8 +651,8 @@ FINAL SYMBOL TABLE
(byte[$28*$19]) main::screen
(const byte[$28*$19]) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) $400
(byte) main::x
(byte) main::x#1 reg byte x 3.666666666666667
(byte) main::x#2 reg byte x 11.0
(byte) main::x#1 reg byte y 3.666666666666667
(byte) main::x#2 reg byte y 11.0
(byte) main::x0
(const byte) main::x0#0 x0 = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) main::x1
@ -677,13 +671,13 @@ FINAL SYMBOL TABLE
(const byte) main::yd#0 yd = (const byte) main::y1#0-(const byte) main::y0#0
zp ZP_WORD:2 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ]
reg byte x [ main::x#2 main::x#1 ]
reg byte y [ main::e#3 main::e#5 main::e#1 main::e#2 ]
reg byte y [ main::x#2 main::x#1 ]
reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ]
zp ZP_BYTE:4 [ main::y#2 main::y#4 main::y#1 ]
FINAL ASSEMBLER
Score: 1101
Score: 1021
//SEG0 File Comments
//SEG1 Basic Upstart
@ -714,10 +708,10 @@ main: {
//SEG12 [5] phi (byte) main::y#2 = (const byte) main::y0#0 [phi:main->main::@1#0] -- vbuz1=vbuc1
lda #y0
sta y
//SEG13 [5] phi (byte) main::e#3 = (const byte) main::yd#0/(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:main->main::@1#1] -- vbuyy=vbuc1
ldy #yd/2
//SEG14 [5] phi (byte) main::x#2 = (const byte) main::x0#0 [phi:main->main::@1#2] -- vbuxx=vbuc1
ldx #x0
//SEG13 [5] phi (byte) main::e#3 = (const byte) main::yd#0/(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:main->main::@1#1] -- vbuxx=vbuc1
ldx #yd/2
//SEG14 [5] phi (byte) main::x#2 = (const byte) main::x0#0 [phi:main->main::@1#2] -- vbuyy=vbuc1
ldy #x0
//SEG15 [5] phi (word) main::idx#3 = (const byte) main::x0#0+(const byte) main::y0#0*(byte/signed byte/word/signed word/dword/signed dword) $28 [phi:main->main::@1#3] -- vwuz1=vbuc1
lda #x0+y0*$28
sta idx
@ -741,20 +735,18 @@ main: {
lda #STAR
!:
sta screen
//SEG23 [7] (byte) main::x#1 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuxx_plus_1
inx
//SEG23 [7] (byte) main::x#1 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuyy=vbuyy_plus_1
iny
//SEG24 [8] (word) main::idx#1 ← (word) main::idx#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_plus_1
inc idx
bne !+
inc idx+1
!:
//SEG25 [9] (byte) main::e#1 ← (byte) main::e#3 + (const byte) main::yd#0 -- vbuyy=vbuyy_plus_vbuc1
tya
clc
adc #yd
tay
//SEG26 [10] if((const byte) main::xd#0>=(byte) main::e#1) goto main::@2 -- vbuc1_ge_vbuyy_then_la1
cpy #xd
//SEG25 [9] (byte) main::e#1 ← (byte) main::e#3 + (const byte) main::yd#0 -- vbuxx=vbuxx_plus_vbuc1
txa
axs #-yd
//SEG26 [10] if((const byte) main::xd#0>=(byte) main::e#1) goto main::@2 -- vbuc1_ge_vbuxx_then_la1
cpx #xd
bcc b2
beq b2
//SEG27 main::@3
@ -768,19 +760,17 @@ main: {
bcc !+
inc idx+1
!:
//SEG30 [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 -- vbuyy=vbuyy_minus_vbuc1
tya
sec
sbc #xd
tay
//SEG30 [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 -- vbuxx=vbuxx_minus_vbuc1
txa
axs #xd
//SEG31 [14] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2]
//SEG32 [14] phi (byte) main::y#4 = (byte) main::y#2 [phi:main::@1/main::@3->main::@2#0] -- register_copy
//SEG33 [14] phi (byte) main::e#5 = (byte) main::e#1 [phi:main::@1/main::@3->main::@2#1] -- register_copy
//SEG34 [14] phi (word) main::idx#5 = (word) main::idx#1 [phi:main::@1/main::@3->main::@2#2] -- register_copy
//SEG35 main::@2
b2:
//SEG36 [15] if((byte) main::x#1<(const byte) main::x1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 -- vbuxx_lt_vbuc1_then_la1
cpx #x1+1
//SEG36 [15] if((byte) main::x#1<(const byte) main::x1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 -- vbuyy_lt_vbuc1_then_la1
cpy #x1+1
bcc b1
//SEG37 main::@return
//SEG38 [16] return

View File

@ -9,10 +9,10 @@
(byte) main::STAR
(const byte) main::STAR#0 STAR = (byte/signed byte/word/signed word/dword/signed dword) $51
(byte) main::e
(byte) main::e#1 reg byte y 11.0
(byte) main::e#2 reg byte y 22.0
(byte) main::e#3 reg byte y 5.5
(byte) main::e#5 reg byte y 16.5
(byte) main::e#1 reg byte x 11.0
(byte) main::e#2 reg byte x 22.0
(byte) main::e#3 reg byte x 5.5
(byte) main::e#5 reg byte x 16.5
(word) main::idx
(word) main::idx#1 idx zp ZP_WORD:2 8.25
(word) main::idx#2 idx zp ZP_WORD:2 11.0
@ -21,8 +21,8 @@
(byte[$28*$19]) main::screen
(const byte[$28*$19]) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) $400
(byte) main::x
(byte) main::x#1 reg byte x 3.666666666666667
(byte) main::x#2 reg byte x 11.0
(byte) main::x#1 reg byte y 3.666666666666667
(byte) main::x#2 reg byte y 11.0
(byte) main::x0
(const byte) main::x0#0 x0 = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) main::x1
@ -41,6 +41,6 @@
(const byte) main::yd#0 yd = (const byte) main::y1#0-(const byte) main::y0#0
zp ZP_WORD:2 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ]
reg byte x [ main::x#2 main::x#1 ]
reg byte y [ main::e#3 main::e#5 main::e#1 main::e#2 ]
reg byte y [ main::x#2 main::x#1 ]
reg byte x [ main::e#3 main::e#5 main::e#1 main::e#2 ]
zp ZP_BYTE:4 [ main::y#2 main::y#4 main::y#1 ]

View File

@ -159,8 +159,8 @@ main: {
lda #0
sta BORDERCOL
b5:
lda RASTER
cmp #$42
lda #$42
cmp RASTER
bne b5
nop
nop
@ -275,8 +275,8 @@ gfx_init_plane_charset8: {
cpx #8
bne b3
inc cr
lda cr
cmp #8
lda #8
cmp cr
bne b2
inc ch
lda ch
@ -335,8 +335,8 @@ gfx_init_screen0: {
cpx #$28
bne b2
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b1
rts
}

View File

@ -2101,8 +2101,8 @@ main: {
//SEG41 [29] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuz1=_inc_vbuz1
inc j
//SEG42 [30] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) $10) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda j
cmp #$10
lda #$10
cmp j
bne b1_from_b1
jmp b3
//SEG43 main::@3
@ -2155,8 +2155,8 @@ main: {
//SEG47 main::@5
b5:
//SEG48 [34] if(*((const byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) $42) goto main::@5 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$42
lda #$42
cmp RASTER
bne b5
jmp b7
//SEG49 main::@7
@ -2224,8 +2224,8 @@ main: {
nop
nop
//SEG59 [43] if((byte) main::rst#1!=(byte/word/signed word/dword/signed dword) $f2) goto main::@8 -- vbuz1_neq_vbuc1_then_la1
lda rst
cmp #$f2
lda #$f2
cmp rst
bne b8
jmp b3
}
@ -2392,8 +2392,8 @@ gfx_init_plane_charset8: {
//SEG123 [65] (byte) gfx_init_plane_charset8::cp#1 ← ++ (byte) gfx_init_plane_charset8::cp#2 -- vbuz1=_inc_vbuz1
inc cp
//SEG124 [66] if((byte) gfx_init_plane_charset8::cp#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto gfx_init_plane_charset8::@3 -- vbuz1_neq_vbuc1_then_la1
lda cp
cmp #8
lda #8
cmp cp
bne b3_from_b4
jmp b6
//SEG125 gfx_init_plane_charset8::@6
@ -2401,8 +2401,8 @@ gfx_init_plane_charset8: {
//SEG126 [67] (byte) gfx_init_plane_charset8::cr#1 ← ++ (byte) gfx_init_plane_charset8::cr#6 -- vbuz1=_inc_vbuz1
inc cr
//SEG127 [68] if((byte) gfx_init_plane_charset8::cr#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto gfx_init_plane_charset8::@2 -- vbuz1_neq_vbuc1_then_la1
lda cr
cmp #8
lda #8
cmp cr
bne b2_from_b6
jmp b7
//SEG128 gfx_init_plane_charset8::@7
@ -2527,8 +2527,8 @@ gfx_init_screen0: {
//SEG164 [87] (byte) gfx_init_screen0::cx#1 ← ++ (byte) gfx_init_screen0::cx#2 -- vbuz1=_inc_vbuz1
inc cx
//SEG165 [88] if((byte) gfx_init_screen0::cx#1!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto gfx_init_screen0::@2 -- vbuz1_neq_vbuc1_then_la1
lda cx
cmp #$28
lda #$28
cmp cx
bne b2_from_b2
jmp b3
//SEG166 gfx_init_screen0::@3
@ -2536,8 +2536,8 @@ gfx_init_screen0: {
//SEG167 [89] (byte) gfx_init_screen0::cy#1 ← ++ (byte) gfx_init_screen0::cy#4 -- vbuz1=_inc_vbuz1
inc cy
//SEG168 [90] if((byte) gfx_init_screen0::cy#1!=(byte/signed byte/word/signed word/dword/signed dword) $19) goto gfx_init_screen0::@1 -- vbuz1_neq_vbuc1_then_la1
lda cy
cmp #$19
lda #$19
cmp cy
bne b1_from_b3
jmp breturn
//SEG169 gfx_init_screen0::@return
@ -2572,9 +2572,8 @@ Statement asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop
Statement [32] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_ECM#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [33] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [34] if(*((const byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) $42) goto main::@5 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [37] (byte~) main::$32 ← (byte) main::rst#1 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ main::rst#1 main::$32 ] ( main:2 [ main::rst#1 main::$32 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ main::rst#1 ]
Statement [38] (byte~) main::$33 ← (const byte) VIC_DEN#0|(const byte) VIC_ECM#0|(const byte) VIC_RSEL#0 | (byte~) main::$32 [ main::rst#1 main::$33 ] ( main:2 [ main::rst#1 main::$33 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ main::rst#1 ]
Statement [40] (byte~) main::$34 ← (byte) main::rst#1 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::rst#1 main::$34 ] ( main:2 [ main::rst#1 main::$34 ] ) always clobbers reg byte a
Statement [51] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [ ] ( main:2::gfx_init:7::gfx_init_plane_charset8:47 [ ] ) always clobbers reg byte a
Statement [54] (byte) gfx_init_plane_charset8::bits#0 ← *((byte*) gfx_init_plane_charset8::chargen#2) [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#0 ] ( main:2::gfx_init:7::gfx_init_plane_charset8:47 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#0 ] ) always clobbers reg byte a reg byte y
@ -2584,18 +2583,14 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ g
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:10 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Statement [57] (byte~) gfx_init_plane_charset8::$7 ← (byte) gfx_init_plane_charset8::bits#2 & (byte/word/signed word/dword/signed dword) $80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::$7 ] ( main:2::gfx_init:7::gfx_init_plane_charset8:47 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::$7 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ]
Statement [61] *((byte*) gfx_init_plane_charset8::gfxa#2) ← (byte) gfx_init_plane_charset8::c#2 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::cp#2 ] ( main:2::gfx_init:7::gfx_init_plane_charset8:47 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::cp#2 ] ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:11 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ]
Statement [71] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:2::gfx_init:7::gfx_init_plane_charset8:47 [ ] ) always clobbers reg byte a
Statement asm { .byte$32,$dd lda$ff .byte$32,$00 } always clobbers reg byte a
Statement [81] (byte~) gfx_init_screen0::$0 ← (byte) gfx_init_screen0::cy#4 & (byte/signed byte/word/signed word/dword/signed dword) $f [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$0 ] ( main:2::gfx_init:7::gfx_init_screen0:45 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$0 ] ) always clobbers reg byte a
Statement [82] (byte~) gfx_init_screen0::$1 ← (byte~) gfx_init_screen0::$0 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$1 ] ( main:2::gfx_init:7::gfx_init_screen0:45 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ]
Statement [82] (byte~) gfx_init_screen0::$1 ← (byte~) gfx_init_screen0::$0 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$1 ] ( main:2::gfx_init:7::gfx_init_screen0:45 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$1 ] ) always clobbers reg byte a
Statement [83] (byte~) gfx_init_screen0::$2 ← (byte) gfx_init_screen0::cx#2 & (byte/signed byte/word/signed word/dword/signed dword) $f [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$1 gfx_init_screen0::$2 ] ( main:2::gfx_init:7::gfx_init_screen0:45 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$1 gfx_init_screen0::$2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ gfx_init_screen0::$1 ]
Statement [85] *((byte*) gfx_init_screen0::ch#2) ← (byte~) gfx_init_screen0::$3 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 ] ( main:2::gfx_init:7::gfx_init_screen0:45 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 ] ) always clobbers reg byte y
@ -2631,7 +2626,6 @@ Statement [38] (byte~) main::$33 ← (const byte) VIC_DEN#0|(const byte) VIC_ECM
Statement [40] (byte~) main::$34 ← (byte) main::rst#1 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::rst#1 main::$34 ] ( main:2 [ main::rst#1 main::$34 ] ) always clobbers reg byte a
Statement [51] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [ ] ( main:2::gfx_init:7::gfx_init_plane_charset8:47 [ ] ) always clobbers reg byte a
Statement [54] (byte) gfx_init_plane_charset8::bits#0 ← *((byte*) gfx_init_plane_charset8::chargen#2) [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#0 ] ( main:2::gfx_init:7::gfx_init_plane_charset8:47 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#0 ] ) always clobbers reg byte a reg byte y
Statement [57] (byte~) gfx_init_plane_charset8::$7 ← (byte) gfx_init_plane_charset8::bits#2 & (byte/word/signed word/dword/signed dword) $80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::$7 ] ( main:2::gfx_init:7::gfx_init_plane_charset8:47 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::$7 ] ) always clobbers reg byte a
Statement [61] *((byte*) gfx_init_plane_charset8::gfxa#2) ← (byte) gfx_init_plane_charset8::c#2 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::cp#2 ] ( main:2::gfx_init:7::gfx_init_plane_charset8:47 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::chargen#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::cp#2 ] ) always clobbers reg byte y
Statement [71] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:2::gfx_init:7::gfx_init_plane_charset8:47 [ ] ) always clobbers reg byte a
Statement asm { .byte$32,$dd lda$ff .byte$32,$00 } always clobbers reg byte a
@ -2643,10 +2637,10 @@ Potential registers zp ZP_BYTE:2 [ main::j#2 main::j#1 ] : zp ZP_BYTE:2 , reg by
Potential registers zp ZP_BYTE:3 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] : zp ZP_BYTE:3 , reg byte x ,
Potential registers zp ZP_WORD:4 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] : zp ZP_WORD:4 ,
Potential registers zp ZP_BYTE:6 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] : zp ZP_BYTE:6 , reg byte x ,
Potential registers zp ZP_BYTE:7 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] : zp ZP_BYTE:7 , reg byte x ,
Potential registers zp ZP_BYTE:7 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] : zp ZP_BYTE:7 , reg byte a , reg byte x ,
Potential registers zp ZP_WORD:8 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] : zp ZP_WORD:8 ,
Potential registers zp ZP_BYTE:10 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] : zp ZP_BYTE:10 , reg byte x ,
Potential registers zp ZP_BYTE:11 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] : zp ZP_BYTE:11 , reg byte x ,
Potential registers zp ZP_BYTE:11 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] : zp ZP_BYTE:11 , reg byte a , reg byte x ,
Potential registers zp ZP_BYTE:12 [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:13 [ dtvSetCpuBankSegment1::cpuBankIdx#2 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:14 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] : zp ZP_BYTE:14 , reg byte x ,
@ -2671,7 +2665,7 @@ Uplift Scope [gfx_init]
Uplift Scope []
Uplifting [gfx_init_plane_charset8] best 98394 combination reg byte a [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] reg byte a [ gfx_init_plane_charset8::$7 ] reg byte x [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] zp ZP_BYTE:7 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] zp ZP_WORD:8 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] zp ZP_BYTE:10 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] zp ZP_WORD:4 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] zp ZP_BYTE:6 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] zp ZP_BYTE:3 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Limited combination testing to 100 combinations of 512 possible.
Limited combination testing to 100 combinations of 1152 possible.
Uplifting [gfx_init_screen0] best 95594 combination reg byte a [ gfx_init_screen0::$0 ] reg byte a [ gfx_init_screen0::$2 ] reg byte a [ gfx_init_screen0::$3 ] reg byte x [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] zp ZP_WORD:16 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] zp ZP_BYTE:24 [ gfx_init_screen0::$1 ] zp ZP_BYTE:14 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Limited combination testing to 100 combinations of 768 possible.
Uplifting [main] best 92994 combination reg byte a [ main::$32 ] reg byte a [ main::$33 ] reg byte a [ main::$34 ] reg byte x [ main::rst#1 ] zp ZP_BYTE:2 [ main::j#2 main::j#1 ]
@ -2935,8 +2929,8 @@ main: {
//SEG47 main::@5
b5:
//SEG48 [34] if(*((const byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) $42) goto main::@5 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$42
lda #$42
cmp RASTER
bne b5
jmp b7
//SEG49 main::@7
@ -3162,8 +3156,8 @@ gfx_init_plane_charset8: {
//SEG126 [67] (byte) gfx_init_plane_charset8::cr#1 ← ++ (byte) gfx_init_plane_charset8::cr#6 -- vbuz1=_inc_vbuz1
inc cr
//SEG127 [68] if((byte) gfx_init_plane_charset8::cr#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto gfx_init_plane_charset8::@2 -- vbuz1_neq_vbuc1_then_la1
lda cr
cmp #8
lda #8
cmp cr
bne b2_from_b6
jmp b7
//SEG128 gfx_init_plane_charset8::@7
@ -3282,8 +3276,8 @@ gfx_init_screen0: {
//SEG167 [89] (byte) gfx_init_screen0::cy#1 ← ++ (byte) gfx_init_screen0::cy#4 -- vbuz1=_inc_vbuz1
inc cy
//SEG168 [90] if((byte) gfx_init_screen0::cy#1!=(byte/signed byte/word/signed word/dword/signed dword) $19) goto gfx_init_screen0::@1 -- vbuz1_neq_vbuc1_then_la1
lda cy
cmp #$19
lda #$19
cmp cy
bne b1_from_b3
jmp breturn
//SEG169 gfx_init_screen0::@return
@ -3926,8 +3920,8 @@ main: {
//SEG47 main::@5
b5:
//SEG48 [34] if(*((const byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) $42) goto main::@5 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$42
lda #$42
cmp RASTER
bne b5
//SEG49 main::@7
//SEG50 asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
@ -4121,8 +4115,8 @@ gfx_init_plane_charset8: {
//SEG126 [67] (byte) gfx_init_plane_charset8::cr#1 ← ++ (byte) gfx_init_plane_charset8::cr#6 -- vbuz1=_inc_vbuz1
inc cr
//SEG127 [68] if((byte) gfx_init_plane_charset8::cr#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto gfx_init_plane_charset8::@2 -- vbuz1_neq_vbuc1_then_la1
lda cr
cmp #8
lda #8
cmp cr
bne b2
//SEG128 gfx_init_plane_charset8::@7
//SEG129 [69] (byte) gfx_init_plane_charset8::ch#1 ← ++ (byte) gfx_init_plane_charset8::ch#8 -- vbuz1=_inc_vbuz1
@ -4222,8 +4216,8 @@ gfx_init_screen0: {
//SEG167 [89] (byte) gfx_init_screen0::cy#1 ← ++ (byte) gfx_init_screen0::cy#4 -- vbuz1=_inc_vbuz1
inc cy
//SEG168 [90] if((byte) gfx_init_screen0::cy#1!=(byte/signed byte/word/signed word/dword/signed dword) $19) goto gfx_init_screen0::@1 -- vbuz1_neq_vbuc1_then_la1
lda cy
cmp #$19
lda #$19
cmp cy
bne b1
//SEG169 gfx_init_screen0::@return
//SEG170 [91] return

View File

@ -137,8 +137,8 @@ main: {
lda #0
sta BORDERCOL
b5:
lda RASTER
cmp #$42
lda #$42
cmp RASTER
bne b5
nop
nop
@ -248,8 +248,8 @@ gfx_init_chunky: {
cmp #<$140
bne b2
inc y
lda y
cmp #$33
lda #$33
cmp y
bne b1
lda #$4000/$4000
jsr dtvSetCpuBankSegment1

View File

@ -1721,8 +1721,8 @@ main: {
//SEG35 [23] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuz1=_inc_vbuz1
inc j
//SEG36 [24] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) $10) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda j
cmp #$10
lda #$10
cmp j
bne b1_from_b1
jmp b3
//SEG37 main::@3
@ -1775,8 +1775,8 @@ main: {
//SEG41 main::@5
b5:
//SEG42 [28] if(*((const byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) $42) goto main::@5 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$42
lda #$42
cmp RASTER
bne b5
jmp b7
//SEG43 main::@7
@ -1844,8 +1844,8 @@ main: {
nop
nop
//SEG53 [37] if((byte) main::rst#1!=(byte/word/signed word/dword/signed dword) $f2) goto main::@8 -- vbuz1_neq_vbuc1_then_la1
lda rst
cmp #$f2
lda #$f2
cmp rst
bne b8
jmp b3
}
@ -1982,8 +1982,8 @@ gfx_init_chunky: {
//SEG98 [53] (byte) gfx_init_chunky::y#1 ← ++ (byte) gfx_init_chunky::y#6 -- vbuz1=_inc_vbuz1
inc y
//SEG99 [54] if((byte) gfx_init_chunky::y#1!=(byte/signed byte/word/signed word/dword/signed dword) $33) goto gfx_init_chunky::@1 -- vbuz1_neq_vbuc1_then_la1
lda y
cmp #$33
lda #$33
cmp y
bne b1_from_b5
//SEG100 [55] phi from gfx_init_chunky::@5 to gfx_init_chunky::@6 [phi:gfx_init_chunky::@5->gfx_init_chunky::@6]
b6_from_b5:
@ -2046,9 +2046,8 @@ Statement asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop
Statement [26] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_ECM#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [27] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [28] if(*((const byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) $42) goto main::@5 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [31] (byte~) main::$31 ← (byte) main::rst#1 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ main::rst#1 main::$31 ] ( main:2 [ main::rst#1 main::$31 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ main::rst#1 ]
Statement [32] (byte~) main::$32 ← (const byte) VIC_DEN#0|(const byte) VIC_ECM#0|(const byte) VIC_RSEL#0 | (byte~) main::$31 [ main::rst#1 main::$32 ] ( main:2 [ main::rst#1 main::$32 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ main::rst#1 ]
Statement [34] (byte~) main::$33 ← (byte) main::rst#1 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::rst#1 main::$33 ] ( main:2 [ main::rst#1 main::$33 ] ) always clobbers reg byte a
Statement [42] if((byte*) gfx_init_chunky::gfxb#3!=(word/dword/signed dword) $8000) goto gfx_init_chunky::@3 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#3 gfx_init_chunky::x#2 gfx_init_chunky::gfxbCpuBank#4 ] ( main:2::gfx_init_chunky:7 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#3 gfx_init_chunky::x#2 gfx_init_chunky::gfxbCpuBank#4 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
@ -2322,8 +2321,8 @@ main: {
//SEG41 main::@5
b5:
//SEG42 [28] if(*((const byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) $42) goto main::@5 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$42
lda #$42
cmp RASTER
bne b5
jmp b7
//SEG43 main::@7
@ -2514,8 +2513,8 @@ gfx_init_chunky: {
//SEG98 [53] (byte) gfx_init_chunky::y#1 ← ++ (byte) gfx_init_chunky::y#6 -- vbuz1=_inc_vbuz1
inc y
//SEG99 [54] if((byte) gfx_init_chunky::y#1!=(byte/signed byte/word/signed word/dword/signed dword) $33) goto gfx_init_chunky::@1 -- vbuz1_neq_vbuc1_then_la1
lda y
cmp #$33
lda #$33
cmp y
bne b1_from_b5
//SEG100 [55] phi from gfx_init_chunky::@5 to gfx_init_chunky::@6 [phi:gfx_init_chunky::@5->gfx_init_chunky::@6]
b6_from_b5:
@ -3082,8 +3081,8 @@ main: {
//SEG41 main::@5
b5:
//SEG42 [28] if(*((const byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) $42) goto main::@5 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$42
lda #$42
cmp RASTER
bne b5
//SEG43 main::@7
//SEG44 asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
@ -3250,8 +3249,8 @@ gfx_init_chunky: {
//SEG98 [53] (byte) gfx_init_chunky::y#1 ← ++ (byte) gfx_init_chunky::y#6 -- vbuz1=_inc_vbuz1
inc y
//SEG99 [54] if((byte) gfx_init_chunky::y#1!=(byte/signed byte/word/signed word/dword/signed dword) $33) goto gfx_init_chunky::@1 -- vbuz1_neq_vbuc1_then_la1
lda y
cmp #$33
lda #$33
cmp y
bne b1
//SEG100 [55] phi from gfx_init_chunky::@5 to gfx_init_chunky::@6 [phi:gfx_init_chunky::@5->gfx_init_chunky::@6]
//SEG101 gfx_init_chunky::@6

View File

@ -139,8 +139,8 @@ main: {
ldx #0
// wait til blitter is ready
b2:
lda DTV_BLITTER_CONTROL2
and #DTV_BLIT_STATUS_BUSY
lda #DTV_BLIT_STATUS_BUSY
and DTV_BLITTER_CONTROL2
cmp #0
bne b2
// restart

View File

@ -1383,8 +1383,8 @@ main: {
//SEG47 main::@2
b2:
//SEG48 [37] (byte~) main::$15 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 -- vbuz1=_deref_pbuc1_band_vbuc2
lda DTV_BLITTER_CONTROL2
and #DTV_BLIT_STATUS_BUSY
lda #DTV_BLIT_STATUS_BUSY
and DTV_BLITTER_CONTROL2
sta _15
//SEG49 [38] if((byte~) main::$15!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 -- vbuz1_neq_0_then_la1
lda _15
@ -1400,8 +1400,8 @@ main: {
//SEG52 [40] (byte) main::r#1 ← ++ (byte) main::r#2 -- vbuz1=_inc_vbuz1
inc r
//SEG53 [41] if((byte) main::r#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
lda r
cmp #8
lda #8
cmp r
bne b2_from_b3
jmp breturn
//SEG54 main::@return
@ -1703,8 +1703,8 @@ main: {
//SEG47 main::@2
b2:
//SEG48 [37] (byte~) main::$15 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 -- vbuaa=_deref_pbuc1_band_vbuc2
lda DTV_BLITTER_CONTROL2
and #DTV_BLIT_STATUS_BUSY
lda #DTV_BLIT_STATUS_BUSY
and DTV_BLITTER_CONTROL2
//SEG49 [38] if((byte~) main::$15!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 -- vbuaa_neq_0_then_la1
cmp #0
bne b2_from_b2
@ -2203,8 +2203,8 @@ main: {
//SEG47 main::@2
b2:
//SEG48 [37] (byte~) main::$15 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 -- vbuaa=_deref_pbuc1_band_vbuc2
lda DTV_BLITTER_CONTROL2
and #DTV_BLIT_STATUS_BUSY
lda #DTV_BLIT_STATUS_BUSY
and DTV_BLITTER_CONTROL2
//SEG49 [38] if((byte~) main::$15!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 -- vbuaa_neq_0_then_la1
cmp #0
bne b2

View File

@ -21,8 +21,8 @@ main: {
lda #DTV_HIGHCOLOR|DTV_BORDER_OFF|DTV_BADLINE_OFF
sta DTV_CONTROL
b4:
lda RASTER
cmp #$40
lda #$40
cmp RASTER
bne b4
// Create rasterbars
lda #0

View File

@ -1125,8 +1125,8 @@ main: {
//SEG13 main::@4
b4:
//SEG14 [7] if(*((const byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) $40) goto main::@4 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$40
lda #$40
cmp RASTER
bne b4
jmp b6
//SEG15 main::@6
@ -1204,8 +1204,8 @@ main: {
//SEG33 [17] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuz1=_inc_vbuz1
inc c
//SEG34 [18] if((byte) main::c#1!=(byte/signed byte/word/signed word/dword/signed dword) $10) goto main::@8 -- vbuz1_neq_vbuc1_then_la1
lda c
cmp #$10
lda #$10
cmp c
bne b8_from_b8
jmp b4
palette: .byte 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, $a, $b, $c, $d, $e, $f
@ -1281,8 +1281,8 @@ main: {
//SEG13 main::@4
b4:
//SEG14 [7] if(*((const byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) $40) goto main::@4 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$40
lda #$40
cmp RASTER
bne b4
jmp b6
//SEG15 main::@6
@ -1637,8 +1637,8 @@ main: {
//SEG13 main::@4
b4:
//SEG14 [7] if(*((const byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) $40) goto main::@4 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$40
lda #$40
cmp RASTER
bne b4
//SEG15 main::@6
//SEG16 [8] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2

View File

@ -455,8 +455,8 @@ gfx_mode: {
cpx #$28
bne b11
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b10
// Background colors
lda #0
@ -502,8 +502,8 @@ gfx_mode: {
cpx #$10
bne b13
b19:
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b19
jsr keyboard_event_scan
jsr keyboard_event_get
@ -555,14 +555,13 @@ keyboard_event_scan: {
ldy row
cmp keyboard_scan_values,y
bne b6
lda #8
clc
adc keycode
sta keycode
lax keycode
axs #-8
stx keycode
b3:
inc row
lda row
cmp #8
lda #8
cmp row
bne b1
lda #KEY_LSHIFT
sta keyboard_event_pressed.keycode
@ -612,8 +611,8 @@ keyboard_event_scan: {
and keyboard_matrix_col_bitmask,x
cmp #0
beq b5
lda keyboard_events_size
cmp #8
lda #8
cmp keyboard_events_size
beq b5
lda keyboard_matrix_col_bitmask,x
and row_scan
@ -1015,8 +1014,8 @@ form_mode: {
sta preset_current
// Let the user change values in the form
b5:
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b5
jsr form_control
txa
@ -1355,8 +1354,8 @@ form_control: {
cmp #0
beq b5
dec form_field_idx
lda form_field_idx
cmp #$ff
lda #$ff
cmp form_field_idx
bne b7
lda #form_fields_cnt-1
sta form_field_idx
@ -1368,8 +1367,8 @@ form_control: {
rts
b5:
inc form_field_idx
lda form_field_idx
cmp #form_fields_cnt
lda #form_fields_cnt
cmp form_field_idx
bne b7
lda #0
sta form_field_idx
@ -1383,9 +1382,9 @@ form_control: {
beq b10
ldx form_field_idx
dec form_fields_val,x
lda #$ff
ldy form_field_idx
lda form_fields_val,y
cmp #$ff
cmp form_fields_val,y
bne b12
lda form_fields_max,y
sta form_fields_val,y
@ -1649,8 +1648,8 @@ gfx_init_plane_fill: {
cpx #$28
bne b2
inc by
lda by
cmp #$c8
lda #$c8
cmp by
bne b1
lda #$4000/$4000
jsr dtvSetCpuBankSegment1
@ -1730,8 +1729,8 @@ gfx_init_plane_horisontal2: {
cpx #$28
bne b2
inc ay
lda ay
cmp #$c8
lda #$c8
cmp ay
bne b1
lda #$4000/$4000
jsr dtvSetCpuBankSegment1
@ -1765,8 +1764,8 @@ gfx_init_plane_vertical: {
cpx #$28
bne b2
inc by
lda by
cmp #$c8
lda #$c8
cmp by
bne b1
lda #$4000/$4000
jsr dtvSetCpuBankSegment1
@ -1804,8 +1803,8 @@ gfx_init_plane_horisontal: {
cpx #$28
bne b2
inc ay
lda ay
cmp #$c8
lda #$c8
cmp ay
bne b1
lda #$4000/$4000
jsr dtvSetCpuBankSegment1
@ -1878,8 +1877,8 @@ gfx_init_plane_charset8: {
cpx #8
bne b3
inc cr
lda cr
cmp #8
lda #8
cmp cr
bne b2
inc ch
lda ch
@ -1950,8 +1949,8 @@ gfx_init_plane_8bppchunky: {
cmp #<$140
bne b2
inc y
lda y
cmp #$c8
lda #$c8
cmp y
bne b1
lda #$4000/$4000
jsr dtvSetCpuBankSegment1
@ -2280,8 +2279,8 @@ bitmap_clear: {
cpx #$c8
bne b2
inc y
lda y
cmp #$28
lda #$28
cmp y
bne b1
rts
}
@ -2314,9 +2313,8 @@ bitmap_init: {
sta yoffs+1
tax
b3:
txa
and #7
sta _6
lda #7
sax _6
lda yoffs
ora _6
sta bitmap_plot_ylo,x
@ -2404,8 +2402,8 @@ gfx_init_screen4: {
cpx #$28
bne b2
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b1
rts
}
@ -2443,8 +2441,8 @@ gfx_init_screen3: {
cpx #$28
bne b2
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b1
rts
}
@ -2488,8 +2486,8 @@ gfx_init_screen2: {
cpx #$28
bne b2
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b1
rts
}
@ -2520,8 +2518,8 @@ gfx_init_screen1: {
cpx #$28
bne b2
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b1
rts
}
@ -2559,8 +2557,8 @@ gfx_init_screen0: {
cpx #$28
bne b2
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b1
rts
}

File diff suppressed because it is too large Load Diff

View File

@ -361,8 +361,8 @@ mode_8bppchunkybmm: {
cmp #<$140
bne b3
inc y
lda y
cmp #$c8
lda #$c8
cmp y
bne b2
lda #$4000/$4000
jsr dtvSetCpuBankSegment1
@ -376,8 +376,8 @@ mode_ctrl: {
b1:
// Wait for the raster
b4:
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b4
ldy #KEY_SPACE
jsr keyboard_key_pressed
@ -586,8 +586,8 @@ mode_8bpppixelcell: {
cpx #$28
bne b3
inc ay
lda ay
cmp #$19
lda #$19
cmp ay
bne b2
// 8bpp cells for Plane B (charset) - ROM charset with 256 colors
lda #PROCPORT_RAM_CHARROM
@ -637,8 +637,8 @@ mode_8bpppixelcell: {
cpx #8
bne b6
inc cr
lda cr
cmp #8
lda #8
cmp cr
bne b5
inc ch
lda ch
@ -737,8 +737,8 @@ mode_sixsfred: {
cpx #$28
bne b3
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b2
lda #<PLANEA
sta gfxa
@ -764,8 +764,8 @@ mode_sixsfred: {
cpx #$28
bne b5
inc ay
lda ay
cmp #$c8
lda #$c8
cmp ay
bne b4
lda #0
sta by
@ -787,8 +787,8 @@ mode_sixsfred: {
cpx #$28
bne b7
inc by
lda by
cmp #$c8
lda #$c8
cmp by
bne b6
lda #DTV_HIGHCOLOR|DTV_LINEAR
sta dtv_control
@ -897,8 +897,8 @@ mode_twoplanebitmap: {
cpx #$28
bne b3
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b2
lda #<PLANEA
sta gfxa
@ -925,8 +925,8 @@ mode_twoplanebitmap: {
cpx #$28
bne b5
inc ay
lda ay
cmp #$c8
lda #$c8
cmp ay
bne b4
lda #0
sta by
@ -948,8 +948,8 @@ mode_twoplanebitmap: {
cpx #$28
bne b9
inc by
lda by
cmp #$c8
lda #$c8
cmp by
bne b8
lda #DTV_HIGHCOLOR|DTV_LINEAR
sta dtv_control
@ -1058,8 +1058,8 @@ mode_sixsfred2: {
cpx #$28
bne b3
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b2
lda #<PLANEA
sta gfxa
@ -1085,8 +1085,8 @@ mode_sixsfred2: {
cpx #$28
bne b5
inc ay
lda ay
cmp #$c8
lda #$c8
cmp ay
bne b4
lda #0
sta by
@ -1108,8 +1108,8 @@ mode_sixsfred2: {
cpx #$28
bne b7
inc by
lda by
cmp #$c8
lda #$c8
cmp by
bne b6
lda #DTV_LINEAR
sta dtv_control
@ -1219,8 +1219,8 @@ mode_hicolmcchar: {
cpx #$28
bne b3
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b2
lda #DTV_HIGHCOLOR
sta dtv_control
@ -1330,8 +1330,8 @@ mode_hicolecmchar: {
cpx #$28
bne b3
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b2
lda #DTV_HIGHCOLOR
sta dtv_control
@ -1430,8 +1430,8 @@ mode_hicolstdchar: {
cpx #$28
bne b3
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b2
lda #DTV_HIGHCOLOR
sta dtv_control
@ -1520,8 +1520,8 @@ mode_stdbitmap: {
cpx #$28
bne b3
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b2
jsr bitmap_init
jsr bitmap_clear
@ -1845,8 +1845,8 @@ bitmap_clear: {
cpx #$c8
bne b2
inc y
lda y
cmp #$28
lda #$28
cmp y
bne b1
rts
}
@ -1879,9 +1879,8 @@ bitmap_init: {
sta yoffs+1
tax
b3:
txa
and #7
sta _6
lda #7
sax _6
lda yoffs
ora _6
sta bitmap_plot_ylo,x
@ -2009,8 +2008,8 @@ mode_mcchar: {
cpx #$28
bne b3
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b2
lda #0
sta dtv_control
@ -2122,8 +2121,8 @@ mode_ecmchar: {
cpx #$28
bne b3
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b2
lda #0
sta dtv_control
@ -2225,8 +2224,8 @@ mode_stdchar: {
cpx #$28
bne b3
inc cy
lda cy
cmp #$19
lda #$19
cmp cy
bne b2
lda #0
sta dtv_control

File diff suppressed because one or more lines are too long

View File

@ -179,8 +179,8 @@ main: {
//SEG17 [7] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG18 [8] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #4
lda #4
cmp i
bne b1_from_b1
jmp breturn
//SEG19 main::@return

View File

@ -31,9 +31,8 @@ w: {
ldy #0
b1:
tya
clc
adc #$578-$546
tax
axs #-$578-$546
lda #b
sta SCREEN3,y
txa

View File

@ -401,8 +401,8 @@ main: {
//SEG20 [10] (byte) main::b#1 ← ++ (byte) main::b#2 -- vbuz1=_inc_vbuz1
inc b
//SEG21 [11] if((byte) main::b#1!=(byte/signed byte/word/signed word/dword/signed dword) $65) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda b
cmp #$65
lda #$65
cmp b
bne b1_from_b1
//SEG22 [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
@ -439,13 +439,12 @@ w: {
//SEG33 w::@1
b1:
//SEG34 [17] (byte) w::b2#0 ← (word/signed word/dword/signed dword) $578-(word/signed word/dword/signed dword) $546 + (byte) w::i#2 -- vbuz1=vbuc1_plus_vbuz2
lda #$578-$546
clc
adc i
sta b2
lax i
axs #-$578-$546
stx b2
//SEG35 [18] *((const byte*) SCREEN3#0 + (byte) w::i#2) ← (const byte) w::b#0 -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #b
ldy i
sta SCREEN3,y
//SEG36 [19] *((const byte*) SCREEN4#0 + (byte) w::i#2) ← (byte) w::b2#0 -- pbuc1_derefidx_vbuz1=vbuz2
lda b2
@ -454,8 +453,8 @@ w: {
//SEG37 [20] (byte) w::i#1 ← ++ (byte) w::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG38 [21] if((byte) w::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $b) goto w::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #$b
lda #$b
cmp i
bne b1_from_b1
jmp breturn
//SEG39 w::@return
@ -468,9 +467,8 @@ REGISTER UPLIFT POTENTIAL REGISTERS
Statement [6] (byte) main::b2#0 ← (byte/word/signed word/dword/signed dword) $c8 - (byte) main::b#2 [ main::b#2 main::b2#0 ] ( main:2 [ main::b#2 main::b2#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::b#2 main::b#1 ]
Statement [8] (signed byte) main::sb#0 ← - (signed byte)(byte) main::b#2 [ main::b#2 main::sb#0 ] ( main:2 [ main::b#2 main::sb#0 ] ) always clobbers reg byte a
Statement [17] (byte) w::b2#0 ← (word/signed word/dword/signed dword) $578-(word/signed word/dword/signed dword) $546 + (byte) w::i#2 [ w::i#2 w::b2#0 ] ( main:2::w:13 [ w::i#2 w::b2#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ w::i#2 w::i#1 ]
Statement [18] *((const byte*) SCREEN3#0 + (byte) w::i#2) ← (const byte) w::b#0 [ w::i#2 w::b2#0 ] ( main:2::w:13 [ w::i#2 w::b2#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ w::i#2 w::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ w::b2#0 ]
Statement [19] *((const byte*) SCREEN4#0 + (byte) w::i#2) ← (byte) w::b2#0 [ w::i#2 ] ( main:2::w:13 [ w::i#2 ] ) always clobbers reg byte a
Statement [6] (byte) main::b2#0 ← (byte/word/signed word/dword/signed dword) $c8 - (byte) main::b#2 [ main::b#2 main::b2#0 ] ( main:2 [ main::b#2 main::b2#0 ] ) always clobbers reg byte a
@ -489,9 +487,9 @@ Uplift Scope [main] 27.5: zp ZP_BYTE:2 [ main::b#2 main::b#1 ] 22: zp ZP_BYTE:4
Uplift Scope [w] 30.25: zp ZP_BYTE:3 [ w::i#2 w::i#1 ] 11: zp ZP_BYTE:6 [ w::b2#0 ]
Uplift Scope []
Uplifting [main] best 1016 combination reg byte x [ main::b#2 main::b#1 ] reg byte a [ main::b2#0 ] reg byte a [ main::sb#0 ]
Uplifting [w] best 836 combination reg byte y [ w::i#2 w::i#1 ] reg byte x [ w::b2#0 ]
Uplifting [] best 836 combination
Uplifting [main] best 996 combination reg byte x [ main::b#2 main::b#1 ] reg byte a [ main::b2#0 ] reg byte a [ main::sb#0 ]
Uplifting [w] best 816 combination reg byte y [ w::i#2 w::i#1 ] reg byte x [ w::b2#0 ]
Uplifting [] best 816 combination
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 File Comments
@ -585,9 +583,8 @@ w: {
b1:
//SEG34 [17] (byte) w::b2#0 ← (word/signed word/dword/signed dword) $578-(word/signed word/dword/signed dword) $546 + (byte) w::i#2 -- vbuxx=vbuc1_plus_vbuyy
tya
clc
adc #$578-$546
tax
axs #-$578-$546
//SEG35 [18] *((const byte*) SCREEN3#0 + (byte) w::i#2) ← (const byte) w::b#0 -- pbuc1_derefidx_vbuyy=vbuc2
lda #b
sta SCREEN3,y
@ -688,7 +685,7 @@ reg byte x [ w::b2#0 ]
FINAL ASSEMBLER
Score: 668
Score: 648
//SEG0 File Comments
//SEG1 Basic Upstart
@ -758,9 +755,8 @@ w: {
b1:
//SEG34 [17] (byte) w::b2#0 ← (word/signed word/dword/signed dword) $578-(word/signed word/dword/signed dword) $546 + (byte) w::i#2 -- vbuxx=vbuc1_plus_vbuyy
tya
clc
adc #$578-$546
tax
axs #-$578-$546
//SEG35 [18] *((const byte*) SCREEN3#0 + (byte) w::i#2) ← (const byte) w::b#0 -- pbuc1_derefidx_vbuyy=vbuc2
lda #b
sta SCREEN3,y

View File

@ -51,8 +51,8 @@ main: {
inc sc+1
!:
inc y
lda y
cmp #8
lda #8
cmp y
bne b1
lda #$37
sta PROCPORT

View File

@ -451,8 +451,8 @@ main: {
//SEG41 [16] (byte) main::x#1 ← ++ (byte) main::x#2 -- vbuz1=_inc_vbuz1
inc x
//SEG42 [17] if((byte) main::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
lda x
cmp #8
lda #8
cmp x
bne b2_from_b3
jmp b5
//SEG43 main::@5
@ -468,8 +468,8 @@ main: {
//SEG45 [19] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuz1=_inc_vbuz1
inc y
//SEG46 [20] if((byte) main::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda y
cmp #8
lda #8
cmp y
bne b1_from_b5
jmp b6
//SEG47 main::@6
@ -488,25 +488,21 @@ main: {
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) $32 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [9] (byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word/dword/signed dword) $80 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::x#2 main::x#1 ]
Statement [13] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ main::x#2 main::x#1 ]
Statement [18] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte/signed byte/word/signed word/dword/signed dword) $20 [ main::y#2 main::sc#2 ] ( main:2 [ main::y#2 main::sc#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
Statement [21] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) $37 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) $32 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [9] (byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word/dword/signed dword) $80 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ) always clobbers reg byte a
Statement [13] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ) always clobbers reg byte y
Statement [18] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte/signed byte/word/signed word/dword/signed dword) $20 [ main::y#2 main::sc#2 ] ( main:2 [ main::y#2 main::sc#2 ] ) always clobbers reg byte a
Statement [21] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) $37 [ ] ( main:2 [ ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::y#2 main::y#1 ] : zp ZP_BYTE:2 , reg byte x ,
Potential registers zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ] : zp ZP_BYTE:3 , reg byte x ,
Potential registers zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x ,
Potential registers zp ZP_WORD:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] : zp ZP_WORD:4 ,
Potential registers zp ZP_BYTE:6 [ main::x#2 main::x#1 ] : zp ZP_BYTE:6 , reg byte x ,
Potential registers zp ZP_BYTE:6 [ main::x#2 main::x#1 ] : zp ZP_BYTE:6 , reg byte a , reg byte x ,
Potential registers zp ZP_BYTE:7 [ main::c#2 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:8 [ main::$1 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y ,
@ -515,7 +511,7 @@ Uplift Scope [main] 202: zp ZP_BYTE:8 [ main::$1 ] 176.75: zp ZP_BYTE:6 [ main::
Uplift Scope []
Uplifting [main] best 7232 combination reg byte a [ main::$1 ] reg byte x [ main::x#2 main::x#1 ] zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ] zp ZP_WORD:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] reg byte a [ main::c#2 ] zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
Limited combination testing to 100 combinations of 128 possible.
Limited combination testing to 100 combinations of 288 possible.
Uplifting [] best 7232 combination
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
Uplifting [main] best 7232 combination zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
@ -646,8 +642,8 @@ main: {
//SEG45 [19] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuz1=_inc_vbuz1
inc y
//SEG46 [20] if((byte) main::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda y
cmp #8
lda #8
cmp y
bne b1_from_b5
jmp b6
//SEG47 main::@6
@ -854,8 +850,8 @@ main: {
//SEG45 [19] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuz1=_inc_vbuz1
inc y
//SEG46 [20] if((byte) main::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda y
cmp #8
lda #8
cmp y
bne b1
//SEG47 main::@6
//SEG48 [21] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) $37 -- _deref_pbuc1=vbuc2

View File

@ -48,8 +48,8 @@ main: {
inc colors+1
!:
inc row
lda row
cmp #8
lda #8
cmp row
bne b1
rts
}

View File

@ -333,8 +333,8 @@ main: {
//SEG32 [10] (byte) main::column#1 ← ++ (byte) main::column#2 -- vbuz1=_inc_vbuz1
inc column
//SEG33 [11] if((byte) main::column#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
lda column
cmp #8
lda #8
cmp column
bne b2_from_b2
jmp b3
//SEG34 main::@3
@ -362,8 +362,8 @@ main: {
//SEG38 [15] (byte) main::row#1 ← ++ (byte) main::row#4 -- vbuz1=_inc_vbuz1
inc row
//SEG39 [16] if((byte) main::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda row
cmp #8
lda #8
cmp row
bne b1_from_b3
jmp breturn
//SEG40 main::@return
@ -513,8 +513,8 @@ main: {
//SEG38 [15] (byte) main::row#1 ← ++ (byte) main::row#4 -- vbuz1=_inc_vbuz1
inc row
//SEG39 [16] if((byte) main::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda row
cmp #8
lda #8
cmp row
bne b1_from_b3
jmp breturn
//SEG40 main::@return
@ -682,8 +682,8 @@ main: {
//SEG38 [15] (byte) main::row#1 ← ++ (byte) main::row#4 -- vbuz1=_inc_vbuz1
inc row
//SEG39 [16] if((byte) main::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda row
cmp #8
lda #8
cmp row
bne b1
//SEG40 main::@return
//SEG41 [17] return

View File

@ -23,12 +23,10 @@ irq: {
stx regx+1
lda #DARK_GREY
sta BORDERCOL
lda #$15
clc
adc irq_raster_next
sta irq_raster_next
// Setup next interrupt
tax
lax irq_raster_next
axs #-$15
stx irq_raster_next
// Setup next interrupt
txa
and #7
cmp #0

View File

@ -267,10 +267,9 @@ irq: {
lda #DARK_GREY
sta BORDERCOL
//SEG18 [8] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz2_plus_vbuc1
lda #$15
clc
adc irq_raster_next
sta irq_raster_next_1
lax irq_raster_next
axs #-$15
stx irq_raster_next_1
//SEG19 [9] (byte) irq::raster_next#0 ← (byte) irq_raster_next#1 -- vbuz1=vbuz2
// Setup next interrupt
lda irq_raster_next_1
@ -318,19 +317,10 @@ REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] (byte) irq_raster_next#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( ) always clobbers reg byte a
Statement [5] *((const void()**) KERNEL_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() [ ] ( main:3 [ ] ) always clobbers reg byte a
Statement [7] *((const byte*) BORDERCOL#0) ← (const byte) DARK_GREY#0 [ irq_raster_next#0 ] ( [ irq_raster_next#0 ] ) always clobbers reg byte a
Statement [8] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
Statement [10] (byte~) irq::$0 ← (byte) irq::raster_next#0 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ irq::raster_next#0 irq::$0 ] ( [ irq::raster_next#0 irq::$0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ irq::raster_next#2 irq::raster_next#0 irq::raster_next#1 ]
Statement [8] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a reg byte x
Statement [15] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [16] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
Statement [1] (byte) irq_raster_next#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( ) always clobbers reg byte a
Statement [5] *((const void()**) KERNEL_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() [ ] ( main:3 [ ] ) always clobbers reg byte a
Statement [7] *((const byte*) BORDERCOL#0) ← (const byte) DARK_GREY#0 [ irq_raster_next#0 ] ( [ irq_raster_next#0 ] ) always clobbers reg byte a
Statement [8] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
Statement [10] (byte~) irq::$0 ← (byte) irq::raster_next#0 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ irq::raster_next#0 irq::$0 ] ( [ irq::raster_next#0 irq::$0 ] ) always clobbers reg byte a
Statement [15] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [16] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
Potential registers zp ZP_BYTE:2 [ irq::raster_next#2 irq::raster_next#0 irq::raster_next#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:2 [ irq::raster_next#2 irq::raster_next#0 irq::raster_next#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:3 [ irq_raster_next#0 ] : zp ZP_BYTE:3 ,
Potential registers zp ZP_BYTE:4 [ irq_raster_next#1 ] : zp ZP_BYTE:4 ,
Potential registers zp ZP_BYTE:5 [ irq::$0 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y ,
@ -340,16 +330,16 @@ Uplift Scope [irq] 12.67: zp ZP_BYTE:2 [ irq::raster_next#2 irq::raster_next#0 i
Uplift Scope [] 4: zp ZP_BYTE:3 [ irq_raster_next#0 ] 4: zp ZP_BYTE:4 [ irq_raster_next#1 ]
Uplift Scope [main]
Uplifting [irq] best 248 combination reg byte x [ irq::raster_next#2 irq::raster_next#0 irq::raster_next#1 ] reg byte a [ irq::$0 ]
Uplifting [] best 248 combination zp ZP_BYTE:3 [ irq_raster_next#0 ] zp ZP_BYTE:4 [ irq_raster_next#1 ]
Uplifting [main] best 248 combination
Uplifting [irq] best 246 combination reg byte x [ irq::raster_next#2 irq::raster_next#0 irq::raster_next#1 ] reg byte a [ irq::$0 ]
Uplifting [] best 246 combination zp ZP_BYTE:3 [ irq_raster_next#0 ] zp ZP_BYTE:4 [ irq_raster_next#1 ]
Uplifting [main] best 246 combination
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ irq_raster_next#0 ]
Uplifting [] best 248 combination zp ZP_BYTE:3 [ irq_raster_next#0 ]
Uplifting [] best 246 combination zp ZP_BYTE:3 [ irq_raster_next#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ irq_raster_next#1 ]
Uplifting [] best 248 combination zp ZP_BYTE:4 [ irq_raster_next#1 ]
Uplifting [] best 246 combination zp ZP_BYTE:4 [ irq_raster_next#1 ]
Coalescing zero page register with common assignment [ zp ZP_BYTE:3 [ irq_raster_next#0 ] ] with [ zp ZP_BYTE:4 [ irq_raster_next#1 ] ] - score: 1
Allocated (was zp ZP_BYTE:3) zp ZP_BYTE:2 [ irq_raster_next#0 irq_raster_next#1 ]
Interrupt procedure irq clobbers AXCNZV
Interrupt procedure irq clobbers AXCNZ
Removing interrupt register storage sty regy+1 in SEG16 entry interrupt(HARDWARE_CLOBBER)
Removing interrupt register storage regy: in SEG30 [16] return - exit interrupt(HARDWARE_CLOBBER)
Removing interrupt register storage ldy #00 in SEG30 [16] return - exit interrupt(HARDWARE_CLOBBER)
@ -409,10 +399,9 @@ irq: {
lda #DARK_GREY
sta BORDERCOL
//SEG18 [8] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lda #$15
clc
adc irq_raster_next
sta irq_raster_next
lax irq_raster_next
axs #-$15
stx irq_raster_next
//SEG19 [9] (byte) irq::raster_next#0 ← (byte) irq_raster_next#1 -- vbuxx=vbuz1
// Setup next interrupt
ldx irq_raster_next
@ -459,7 +448,8 @@ Removing instruction jmp b2
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Replacing instruction ldx irq_raster_next with TAX
Removing instruction ldx irq_raster_next
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b1_from_irq with b1
Removing instruction b1:
Removing instruction b2_from_b1:
@ -510,7 +500,7 @@ reg byte a [ irq::$0 ]
FINAL ASSEMBLER
Score: 157
Score: 153
//SEG0 File Comments
//SEG1 Basic Upstart
@ -556,13 +546,11 @@ irq: {
lda #DARK_GREY
sta BORDERCOL
//SEG18 [8] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lda #$15
clc
adc irq_raster_next
sta irq_raster_next
lax irq_raster_next
axs #-$15
stx irq_raster_next
//SEG19 [9] (byte) irq::raster_next#0 ← (byte) irq_raster_next#1 -- vbuxx=vbuz1
// Setup next interrupt
tax
// Setup next interrupt
//SEG20 [10] (byte~) irq::$0 ← (byte) irq::raster_next#0 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuaa=vbuxx_band_vbuc1
txa
and #7

View File

@ -178,11 +178,9 @@ main: {
lda RASTER
sta key
//SEG13 [6] if((byte) main::key#0>(byte/signed byte/word/signed word/dword/signed dword) $20) goto main::@7 -- vbuz1_gt_vbuc1_then_la1
lda key
cmp #$20
beq !+
bcs b7_from_b2
!:
lda #$20
cmp key
bcc b7_from_b2
jmp b9
//SEG14 main::@9
b9:

View File

@ -118,14 +118,12 @@ main: {
sta SPRITES_COLS,y
lda #toSpritePtr2_return
sta PLAYFIELD_SPRITE_PTRS_1,y
lda #$18
clc
adc xpos
sta xpos
lda #$18
clc
adc ypos
sta ypos
lax xpos
axs #-$18
stx xpos
lax ypos
axs #-$18
stx ypos
iny
cpy #8
bne b1
@ -134,31 +132,27 @@ main: {
rts
}
loop: {
.label _1 = 9
.label idx = 3
.label s = 3
lda #0
sta sin_idx
b4:
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b4
lda sin_idx
sta idx
ldx #4
ldx sin_idx
lda #4
sta s
b5:
txa
lda s
asl
sta _1
ldy idx
lda SIN,y
ldy _1
tay
lda SIN,x
sta SPRITES_YPOS,y
lda #$a
clc
adc idx
sta idx
inx
cpx #8
txa
axs #-$a
inc s
lda #8
cmp s
bne b5
inc sin_idx
jmp b4
@ -179,8 +173,8 @@ sprites_irq_init: {
lda #CIA_INTERRUPT_CLEAR
sta CIA1_INTERRUPT
// Set raster line
lda VIC_CONTROL
and #$7f
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
lda #IRQ_RASTER_FIRST
sta RASTER
@ -206,21 +200,20 @@ sprites_init: {
sta SPRITES_EXPAND_X
lda #$18+$f*8
sta xpos
ldx #0
ldy #0
b1:
txa
tya
asl
tay
tax
lda xpos
sta SPRITES_XPOS,y
sta SPRITES_XPOS,x
lda #BLACK
sta SPRITES_COLS,x
lda #$18
clc
adc xpos
sta xpos
inx
cpx #4
sta SPRITES_COLS,y
lax xpos
axs #-$18
stx xpos
iny
cpy #4
bne b1
rts
}
@ -229,7 +222,7 @@ sprites_init: {
// Utilizes duplicated gfx in the sprites to allow for some leeway in updating the sprite pointers
sprites_irq: {
.const toSpritePtr2_return = PLAYFIELD_SPRITES>>6
.label raster_sprite_gfx_modify = $a
.label raster_sprite_gfx_modify = 9
sta rega+1
stx regx+1
//(*BGCOL)++;
@ -254,9 +247,8 @@ sprites_irq: {
cmp #0
beq b2
stx PLAYFIELD_SPRITE_PTRS_2
inx
txa
clc
adc #1
sta PLAYFIELD_SPRITE_PTRS_2+1
sta PLAYFIELD_SPRITE_PTRS_2+2
clc
@ -264,23 +256,21 @@ sprites_irq: {
sta PLAYFIELD_SPRITE_PTRS_2+3
b3:
inc irq_cnt
lda irq_cnt
cmp #9
lda #9
cmp irq_cnt
beq b4
cmp #$a
lda #$a
cmp irq_cnt
beq b5
lda #$14
clc
adc irq_raster_next
sta irq_raster_next
lda #$15
clc
adc irq_sprite_ypos
sta irq_sprite_ypos
lda #3
clc
adc irq_sprite_ptr
sta irq_sprite_ptr
lax irq_raster_next
axs #-$14
stx irq_raster_next
lax irq_sprite_ypos
axs #-$15
stx irq_sprite_ypos
lax irq_sprite_ptr
axs #-3
stx irq_sprite_ptr
b7:
// Setup next interrupt
lda irq_raster_next
@ -298,20 +288,17 @@ sprites_irq: {
sta irq_cnt
lda #IRQ_RASTER_FIRST
sta irq_raster_next
lda #$15
clc
adc irq_sprite_ypos
sta irq_sprite_ypos
lda #3
clc
adc irq_sprite_ptr
sta irq_sprite_ptr
lax irq_sprite_ypos
axs #-$15
stx irq_sprite_ypos
lax irq_sprite_ptr
axs #-3
stx irq_sprite_ptr
jmp b7
b4:
lda #$15
clc
adc irq_raster_next
sta irq_raster_next
lax irq_raster_next
axs #-$15
stx irq_raster_next
lda #SPRITES_FIRST_YPOS
sta irq_sprite_ypos
lda #toSpritePtr2_return
@ -319,13 +306,11 @@ sprites_irq: {
jmp b7
b2:
stx PLAYFIELD_SPRITE_PTRS_1
inx
stx PLAYFIELD_SPRITE_PTRS_1+1
stx PLAYFIELD_SPRITE_PTRS_1+2
inx
txa
clc
adc #1
sta PLAYFIELD_SPRITE_PTRS_1+1
sta PLAYFIELD_SPRITE_PTRS_1+2
clc
adc #1
sta PLAYFIELD_SPRITE_PTRS_1+3
jmp b3
}

View File

@ -2327,10 +2327,9 @@ main: {
ldy s2
sta SPRITES_YPOS,y
//SEG50 [25] (byte/signed word/word/dword/signed dword~) main::$4 ← (byte) main::s#2 - (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz2_minus_vbuc1
lda s
sec
sbc #3
sta _4
lax s
axs #3
stx _4
//SEG51 [26] *((const byte*) SPRITES_COLS#0 + (byte) main::s#2) ← (byte/signed word/word/dword/signed dword~) main::$4 -- pbuc1_derefidx_vbuz1=vbuz2
lda _4
ldy s
@ -2344,24 +2343,22 @@ main: {
//SEG54 main::@5
b5:
//SEG55 [28] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0 + (byte) main::s#2) ← (const byte) main::toSpritePtr2_return#0 -- pbuc1_derefidx_vbuz1=vbuc2
ldy s
lda #toSpritePtr2_return
ldy s
sta PLAYFIELD_SPRITE_PTRS_1,y
//SEG56 [29] (byte) main::xpos#1 ← (byte) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 -- vbuz1=vbuz1_plus_vbuc1
lda #$18
clc
adc xpos
sta xpos
lax xpos
axs #-$18
stx xpos
//SEG57 [30] (byte) main::ypos#1 ← (byte) main::ypos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 -- vbuz1=vbuz1_plus_vbuc1
lda #$18
clc
adc ypos
sta ypos
lax ypos
axs #-$18
stx ypos
//SEG58 [31] (byte) main::s#1 ← ++ (byte) main::s#2 -- vbuz1=_inc_vbuz1
inc s
//SEG59 [32] if((byte) main::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda s
cmp #8
lda #8
cmp s
bne b1_from_b5
//SEG60 [33] phi from main::@5 to main::@2 [phi:main::@5->main::@2]
b2_from_b5:
@ -2402,8 +2399,8 @@ loop: {
//SEG73 loop::@4
b4:
//SEG74 [40] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto loop::@4 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b4
jmp b8
//SEG75 loop::@8
@ -2435,15 +2432,14 @@ loop: {
ldy _1
sta SPRITES_YPOS,y
//SEG86 [45] (byte) loop::idx#1 ← (byte) loop::idx#2 + (byte/signed byte/word/signed word/dword/signed dword) $a -- vbuz1=vbuz1_plus_vbuc1
lda #$a
clc
adc idx
sta idx
lax idx
axs #-$a
stx idx
//SEG87 [46] (byte) loop::s#1 ← ++ (byte) loop::s#2 -- vbuz1=_inc_vbuz1
inc s
//SEG88 [47] if((byte) loop::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto loop::@5 -- vbuz1_neq_vbuc1_then_la1
lda s
cmp #8
lda #8
cmp s
bne b5_from_b5
jmp b9
//SEG89 loop::@9
@ -2479,8 +2475,8 @@ sprites_irq_init: {
sta CIA1_INTERRUPT
//SEG100 [55] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
// Set raster line
lda VIC_CONTROL
and #$7f
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
//SEG101 [56] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 -- _deref_pbuc1=vbuc2
lda #IRQ_RASTER_FIRST
@ -2546,19 +2542,18 @@ sprites_init: {
ldy s2
sta SPRITES_XPOS,y
//SEG121 [68] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 -- pbuc1_derefidx_vbuz1=vbuc2
ldy s
lda #BLACK
ldy s
sta SPRITES_COLS,y
//SEG122 [69] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 -- vbuz1=vbuz1_plus_vbuc1
lda #$18
clc
adc xpos
sta xpos
lax xpos
axs #-$18
stx xpos
//SEG123 [70] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuz1=_inc_vbuz1
inc s
//SEG124 [71] if((byte) sprites_init::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto sprites_init::@1 -- vbuz1_neq_vbuc1_then_la1
lda s
cmp #4
lda #4
cmp s
bne b1_from_b1
jmp breturn
//SEG125 sprites_init::@return
@ -2660,34 +2655,31 @@ sprites_irq: {
iny
sty irq_cnt_1
//SEG151 [91] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@4 -- vbuz1_eq_vbuc1_then_la1
lda irq_cnt_1
cmp #9
lda #9
cmp irq_cnt_1
beq b4
jmp b11
//SEG152 sprites_irq::@11
b11:
//SEG153 [92] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) $a) goto sprites_irq::@5 -- vbuz1_eq_vbuc1_then_la1
lda irq_cnt_1
cmp #$a
lda #$a
cmp irq_cnt_1
beq b5
jmp b12
//SEG154 sprites_irq::@12
b12:
//SEG155 [93] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $14 -- vbuz1=vbuz2_plus_vbuc1
lda #$14
clc
adc irq_raster_next
sta irq_raster_next_3
lax irq_raster_next
axs #-$14
stx irq_raster_next_3
//SEG156 [94] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz2_plus_vbuc1
lda #$15
clc
adc irq_sprite_ypos
sta irq_sprite_ypos_3
lax irq_sprite_ypos
axs #-$15
stx irq_sprite_ypos_3
//SEG157 [95] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz2_plus_vbuc1
lda #3
clc
adc irq_sprite_ptr
sta irq_sprite_ptr_3
lax irq_sprite_ptr
axs #-3
stx irq_sprite_ptr_3
//SEG158 [96] phi from sprites_irq::@12 sprites_irq::@15 sprites_irq::@5 to sprites_irq::@7 [phi:sprites_irq::@12/sprites_irq::@15/sprites_irq::@5->sprites_irq::@7]
b7_from_b12:
b7_from_b15:
@ -2724,23 +2716,20 @@ sprites_irq: {
lda #IRQ_RASTER_FIRST
sta irq_raster_next_2
//SEG168 [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz2_plus_vbuc1
lda #$15
clc
adc irq_sprite_ypos
sta irq_sprite_ypos_2
lax irq_sprite_ypos
axs #-$15
stx irq_sprite_ypos_2
//SEG169 [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz2_plus_vbuc1
lda #3
clc
adc irq_sprite_ptr
sta irq_sprite_ptr_2
lax irq_sprite_ptr
axs #-3
stx irq_sprite_ptr_2
jmp b7_from_b5
//SEG170 sprites_irq::@4
b4:
//SEG171 [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz2_plus_vbuc1
lda #$15
clc
adc irq_raster_next
sta irq_raster_next_1
lax irq_raster_next
axs #-$15
stx irq_raster_next_1
//SEG172 [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1
lda #SPRITES_FIRST_YPOS
sta irq_sprite_ypos_1
@ -2859,17 +2848,17 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ s
Statement [90] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte y
Statement [91] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a
Statement [92] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) $a) goto sprites_irq::@5 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 ] ) always clobbers reg byte a
Statement [93] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a
Statement [94] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a
Statement [95] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ irq_raster_next#3 ] ( [ irq_raster_next#3 ] ) always clobbers reg byte a
Statement [93] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [94] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [95] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ irq_raster_next#3 ] ( [ irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [97] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 [ ] ( [ ] ) always clobbers reg byte a
Statement [98] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [99] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
Statement [100] (byte) irq_cnt#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 ] ) always clobbers reg byte a
Statement [101] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a
Statement [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a
Statement [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ irq_raster_next#2 ] ( [ irq_raster_next#2 ] ) always clobbers reg byte a
Statement [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
Statement [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a reg byte x
Statement [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ irq_raster_next#2 ] ( [ irq_raster_next#2 ] ) always clobbers reg byte a reg byte x
Statement [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a reg byte x
Statement [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
Statement [107] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
Statement [1] (byte) render_screen_showing#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( ) always clobbers reg byte a
@ -2914,17 +2903,17 @@ Statement [83] if((byte) render_screen_showing#0==(byte/signed byte/word/signed
Statement [90] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte y
Statement [91] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a
Statement [92] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) $a) goto sprites_irq::@5 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 ] ) always clobbers reg byte a
Statement [93] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a
Statement [94] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a
Statement [95] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ irq_raster_next#3 ] ( [ irq_raster_next#3 ] ) always clobbers reg byte a
Statement [93] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [94] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [95] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ irq_raster_next#3 ] ( [ irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [97] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 [ ] ( [ ] ) always clobbers reg byte a
Statement [98] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [99] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
Statement [100] (byte) irq_cnt#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 ] ) always clobbers reg byte a
Statement [101] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a
Statement [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a
Statement [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ irq_raster_next#2 ] ( [ irq_raster_next#2 ] ) always clobbers reg byte a
Statement [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
Statement [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a reg byte x
Statement [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ irq_raster_next#2 ] ( [ irq_raster_next#2 ] ) always clobbers reg byte a reg byte x
Statement [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a reg byte x
Statement [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
Statement [107] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::s#2 main::s#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
@ -2970,62 +2959,60 @@ Uplift Scope [sprites_init] 25.3: zp ZP_BYTE:8 [ sprites_init::s#2 sprites_init:
Uplift Scope [sprites_irq] 6.5: zp ZP_BYTE:22 [ sprites_irq::raster_sprite_gfx_modify#0 ] 4: zp ZP_BYTE:21 [ sprites_irq::$0 ] 4: zp ZP_BYTE:25 [ sprites_irq::ptr#4 ] 4: zp ZP_BYTE:35 [ sprites_irq::ptr#2 ] 2.67: zp ZP_BYTE:24 [ sprites_irq::ptr#3 ] 2.67: zp ZP_BYTE:34 [ sprites_irq::ptr#1 ] 2.5: zp ZP_BYTE:20 [ sprites_irq::ypos#0 ] 2.5: zp ZP_BYTE:23 [ sprites_irq::ptr#0 ]
Uplift Scope [sprites_irq_init]
Uplifting [loop] best 10035 combination reg byte x [ loop::s#2 loop::s#1 ] zp ZP_BYTE:18 [ loop::$1 ] zp ZP_BYTE:7 [ loop::idx#2 loop::idx#1 loop::idx#0 ]
Uplifting [] best 10035 combination zp ZP_BYTE:5 [ sin_idx#10 sin_idx#3 ] zp ZP_BYTE:27 [ irq_sprite_ypos#3 ] zp ZP_BYTE:28 [ irq_sprite_ptr#3 ] zp ZP_BYTE:29 [ irq_cnt#2 ] zp ZP_BYTE:30 [ irq_sprite_ypos#2 ] zp ZP_BYTE:31 [ irq_sprite_ptr#2 ] zp ZP_BYTE:32 [ irq_sprite_ypos#1 ] zp ZP_BYTE:33 [ irq_sprite_ptr#1 ] zp ZP_BYTE:10 [ irq_raster_next#4 irq_raster_next#3 irq_raster_next#1 irq_raster_next#2 ] zp ZP_BYTE:26 [ irq_cnt#1 ] zp ZP_BYTE:11 [ render_screen_showing#0 ] zp ZP_BYTE:12 [ irq_raster_next#0 ] zp ZP_BYTE:13 [ irq_sprite_ypos#0 ] zp ZP_BYTE:14 [ irq_sprite_ptr#0 ] zp ZP_BYTE:15 [ irq_cnt#0 ]
Uplifting [main] best 9735 combination reg byte y [ main::s#2 main::s#1 ] reg byte a [ main::$4 ] reg byte x [ main::s2#0 ] zp ZP_BYTE:4 [ main::ypos#2 main::ypos#1 ] zp ZP_BYTE:3 [ main::xpos#2 main::xpos#1 ]
Uplifting [loop] best 9613 combination zp ZP_BYTE:6 [ loop::s#2 loop::s#1 ] reg byte a [ loop::$1 ] reg byte x [ loop::idx#2 loop::idx#1 loop::idx#0 ]
Uplifting [] best 9613 combination zp ZP_BYTE:5 [ sin_idx#10 sin_idx#3 ] zp ZP_BYTE:27 [ irq_sprite_ypos#3 ] zp ZP_BYTE:28 [ irq_sprite_ptr#3 ] zp ZP_BYTE:29 [ irq_cnt#2 ] zp ZP_BYTE:30 [ irq_sprite_ypos#2 ] zp ZP_BYTE:31 [ irq_sprite_ptr#2 ] zp ZP_BYTE:32 [ irq_sprite_ypos#1 ] zp ZP_BYTE:33 [ irq_sprite_ptr#1 ] zp ZP_BYTE:10 [ irq_raster_next#4 irq_raster_next#3 irq_raster_next#1 irq_raster_next#2 ] zp ZP_BYTE:26 [ irq_cnt#1 ] zp ZP_BYTE:11 [ render_screen_showing#0 ] zp ZP_BYTE:12 [ irq_raster_next#0 ] zp ZP_BYTE:13 [ irq_sprite_ypos#0 ] zp ZP_BYTE:14 [ irq_sprite_ptr#0 ] zp ZP_BYTE:15 [ irq_cnt#0 ]
Uplifting [main] best 9333 combination reg byte y [ main::s#2 main::s#1 ] reg byte a [ main::$4 ] reg byte x [ main::s2#0 ] zp ZP_BYTE:4 [ main::ypos#2 main::ypos#1 ] zp ZP_BYTE:3 [ main::xpos#2 main::xpos#1 ]
Limited combination testing to 100 combinations of 324 possible.
Uplifting [sprites_init] best 9565 combination reg byte x [ sprites_init::s#2 sprites_init::s#1 ] reg byte a [ sprites_init::s2#0 ] zp ZP_BYTE:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
Uplifting [sprites_irq] best 9541 combination zp ZP_BYTE:22 [ sprites_irq::raster_sprite_gfx_modify#0 ] reg byte x [ sprites_irq::$0 ] reg byte a [ sprites_irq::ptr#4 ] reg byte a [ sprites_irq::ptr#2 ] reg byte a [ sprites_irq::ptr#3 ] zp ZP_BYTE:34 [ sprites_irq::ptr#1 ] zp ZP_BYTE:20 [ sprites_irq::ypos#0 ] zp ZP_BYTE:23 [ sprites_irq::ptr#0 ]
Uplifting [sprites_init] best 9163 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp ZP_BYTE:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
Uplifting [sprites_irq] best 9139 combination zp ZP_BYTE:22 [ sprites_irq::raster_sprite_gfx_modify#0 ] reg byte x [ sprites_irq::$0 ] reg byte a [ sprites_irq::ptr#4 ] reg byte a [ sprites_irq::ptr#2 ] reg byte a [ sprites_irq::ptr#3 ] zp ZP_BYTE:34 [ sprites_irq::ptr#1 ] zp ZP_BYTE:20 [ sprites_irq::ypos#0 ] zp ZP_BYTE:23 [ sprites_irq::ptr#0 ]
Limited combination testing to 100 combinations of 12288 possible.
Uplifting [sprites_irq_init] best 9541 combination
Attempting to uplift remaining variables inzp ZP_BYTE:18 [ loop::$1 ]
Uplifting [loop] best 9541 combination zp ZP_BYTE:18 [ loop::$1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ loop::idx#2 loop::idx#1 loop::idx#0 ]
Uplifting [loop] best 9541 combination zp ZP_BYTE:7 [ loop::idx#2 loop::idx#1 loop::idx#0 ]
Uplifting [sprites_irq_init] best 9139 combination
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ loop::s#2 loop::s#1 ]
Uplifting [loop] best 9139 combination zp ZP_BYTE:6 [ loop::s#2 loop::s#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ sin_idx#10 sin_idx#3 ]
Uplifting [] best 9541 combination zp ZP_BYTE:5 [ sin_idx#10 sin_idx#3 ]
Uplifting [] best 9139 combination zp ZP_BYTE:5 [ sin_idx#10 sin_idx#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:27 [ irq_sprite_ypos#3 ]
Uplifting [] best 9541 combination zp ZP_BYTE:27 [ irq_sprite_ypos#3 ]
Uplifting [] best 9139 combination zp ZP_BYTE:27 [ irq_sprite_ypos#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:28 [ irq_sprite_ptr#3 ]
Uplifting [] best 9541 combination zp ZP_BYTE:28 [ irq_sprite_ptr#3 ]
Uplifting [] best 9139 combination zp ZP_BYTE:28 [ irq_sprite_ptr#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:29 [ irq_cnt#2 ]
Uplifting [] best 9541 combination zp ZP_BYTE:29 [ irq_cnt#2 ]
Uplifting [] best 9139 combination zp ZP_BYTE:29 [ irq_cnt#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:30 [ irq_sprite_ypos#2 ]
Uplifting [] best 9541 combination zp ZP_BYTE:30 [ irq_sprite_ypos#2 ]
Uplifting [] best 9139 combination zp ZP_BYTE:30 [ irq_sprite_ypos#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:31 [ irq_sprite_ptr#2 ]
Uplifting [] best 9541 combination zp ZP_BYTE:31 [ irq_sprite_ptr#2 ]
Uplifting [] best 9139 combination zp ZP_BYTE:31 [ irq_sprite_ptr#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:32 [ irq_sprite_ypos#1 ]
Uplifting [] best 9541 combination zp ZP_BYTE:32 [ irq_sprite_ypos#1 ]
Uplifting [] best 9139 combination zp ZP_BYTE:32 [ irq_sprite_ypos#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:33 [ irq_sprite_ptr#1 ]
Uplifting [] best 9541 combination zp ZP_BYTE:33 [ irq_sprite_ptr#1 ]
Uplifting [] best 9139 combination zp ZP_BYTE:33 [ irq_sprite_ptr#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
Uplifting [sprites_init] best 9541 combination zp ZP_BYTE:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
Uplifting [sprites_init] best 9139 combination zp ZP_BYTE:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:10 [ irq_raster_next#4 irq_raster_next#3 irq_raster_next#1 irq_raster_next#2 ]
Uplifting [] best 9541 combination zp ZP_BYTE:10 [ irq_raster_next#4 irq_raster_next#3 irq_raster_next#1 irq_raster_next#2 ]
Uplifting [] best 9139 combination zp ZP_BYTE:10 [ irq_raster_next#4 irq_raster_next#3 irq_raster_next#1 irq_raster_next#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ main::ypos#2 main::ypos#1 ]
Uplifting [main] best 9541 combination zp ZP_BYTE:4 [ main::ypos#2 main::ypos#1 ]
Uplifting [main] best 9139 combination zp ZP_BYTE:4 [ main::ypos#2 main::ypos#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::xpos#2 main::xpos#1 ]
Uplifting [main] best 9541 combination zp ZP_BYTE:3 [ main::xpos#2 main::xpos#1 ]
Uplifting [main] best 9139 combination zp ZP_BYTE:3 [ main::xpos#2 main::xpos#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:22 [ sprites_irq::raster_sprite_gfx_modify#0 ]
Uplifting [sprites_irq] best 9541 combination zp ZP_BYTE:22 [ sprites_irq::raster_sprite_gfx_modify#0 ]
Uplifting [sprites_irq] best 9139 combination zp ZP_BYTE:22 [ sprites_irq::raster_sprite_gfx_modify#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:26 [ irq_cnt#1 ]
Uplifting [] best 9541 combination zp ZP_BYTE:26 [ irq_cnt#1 ]
Uplifting [] best 9139 combination zp ZP_BYTE:26 [ irq_cnt#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:34 [ sprites_irq::ptr#1 ]
Uplifting [sprites_irq] best 9531 combination reg byte a [ sprites_irq::ptr#1 ]
Uplifting [sprites_irq] best 9127 combination reg byte x [ sprites_irq::ptr#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:20 [ sprites_irq::ypos#0 ]
Uplifting [sprites_irq] best 9516 combination reg byte a [ sprites_irq::ypos#0 ]
Uplifting [sprites_irq] best 9112 combination reg byte a [ sprites_irq::ypos#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:23 [ sprites_irq::ptr#0 ]
Uplifting [sprites_irq] best 9505 combination reg byte x [ sprites_irq::ptr#0 ]
Uplifting [sprites_irq] best 9097 combination reg byte x [ sprites_irq::ptr#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:11 [ render_screen_showing#0 ]
Uplifting [] best 9505 combination zp ZP_BYTE:11 [ render_screen_showing#0 ]
Uplifting [] best 9097 combination zp ZP_BYTE:11 [ render_screen_showing#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:12 [ irq_raster_next#0 ]
Uplifting [] best 9505 combination zp ZP_BYTE:12 [ irq_raster_next#0 ]
Uplifting [] best 9097 combination zp ZP_BYTE:12 [ irq_raster_next#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ irq_sprite_ypos#0 ]
Uplifting [] best 9505 combination zp ZP_BYTE:13 [ irq_sprite_ypos#0 ]
Uplifting [] best 9097 combination zp ZP_BYTE:13 [ irq_sprite_ypos#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:14 [ irq_sprite_ptr#0 ]
Uplifting [] best 9505 combination zp ZP_BYTE:14 [ irq_sprite_ptr#0 ]
Uplifting [] best 9097 combination zp ZP_BYTE:14 [ irq_sprite_ptr#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:15 [ irq_cnt#0 ]
Uplifting [] best 9505 combination zp ZP_BYTE:15 [ irq_cnt#0 ]
Uplifting [] best 9097 combination zp ZP_BYTE:15 [ irq_cnt#0 ]
Coalescing zero page register with common assignment [ zp ZP_BYTE:10 [ irq_raster_next#4 irq_raster_next#3 irq_raster_next#1 irq_raster_next#2 ] ] with [ zp ZP_BYTE:12 [ irq_raster_next#0 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_BYTE:13 [ irq_sprite_ypos#0 ] ] with [ zp ZP_BYTE:27 [ irq_sprite_ypos#3 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_BYTE:13 [ irq_sprite_ypos#0 irq_sprite_ypos#3 ] ] with [ zp ZP_BYTE:30 [ irq_sprite_ypos#2 ] ] - score: 1
@ -3034,19 +3021,18 @@ Coalescing zero page register with common assignment [ zp ZP_BYTE:14 [ irq_sprit
Coalescing zero page register with common assignment [ zp ZP_BYTE:15 [ irq_cnt#0 ] ] with [ zp ZP_BYTE:26 [ irq_cnt#1 ] ] - score: 1
Coalescing zero page register [ zp ZP_BYTE:3 [ main::xpos#2 main::xpos#1 ] ] with [ zp ZP_BYTE:5 [ sin_idx#10 sin_idx#3 ] ]
Coalescing zero page register [ zp ZP_BYTE:3 [ main::xpos#2 main::xpos#1 sin_idx#10 sin_idx#3 ] ] with [ zp ZP_BYTE:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:4 [ main::ypos#2 main::ypos#1 ] ] with [ zp ZP_BYTE:7 [ loop::idx#2 loop::idx#1 loop::idx#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:4 [ main::ypos#2 main::ypos#1 ] ] with [ zp ZP_BYTE:6 [ loop::s#2 loop::s#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:13 [ irq_sprite_ypos#0 irq_sprite_ypos#3 irq_sprite_ypos#2 ] ] with [ zp ZP_BYTE:32 [ irq_sprite_ypos#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:14 [ irq_sprite_ptr#0 irq_sprite_ptr#3 irq_sprite_ptr#2 ] ] with [ zp ZP_BYTE:33 [ irq_sprite_ptr#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:15 [ irq_cnt#0 irq_cnt#1 ] ] with [ zp ZP_BYTE:29 [ irq_cnt#2 ] ]
Allocated (was zp ZP_BYTE:3) zp ZP_BYTE:2 [ main::xpos#2 main::xpos#1 sin_idx#10 sin_idx#3 sprites_init::xpos#2 sprites_init::xpos#1 ]
Allocated (was zp ZP_BYTE:4) zp ZP_BYTE:3 [ main::ypos#2 main::ypos#1 loop::idx#2 loop::idx#1 loop::idx#0 ]
Allocated (was zp ZP_BYTE:4) zp ZP_BYTE:3 [ main::ypos#2 main::ypos#1 loop::s#2 loop::s#1 ]
Allocated (was zp ZP_BYTE:10) zp ZP_BYTE:4 [ irq_raster_next#4 irq_raster_next#3 irq_raster_next#1 irq_raster_next#2 irq_raster_next#0 ]
Allocated (was zp ZP_BYTE:11) zp ZP_BYTE:5 [ render_screen_showing#0 ]
Allocated (was zp ZP_BYTE:13) zp ZP_BYTE:6 [ irq_sprite_ypos#0 irq_sprite_ypos#3 irq_sprite_ypos#2 irq_sprite_ypos#1 ]
Allocated (was zp ZP_BYTE:14) zp ZP_BYTE:7 [ irq_sprite_ptr#0 irq_sprite_ptr#3 irq_sprite_ptr#2 irq_sprite_ptr#1 ]
Allocated (was zp ZP_BYTE:15) zp ZP_BYTE:8 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
Allocated (was zp ZP_BYTE:18) zp ZP_BYTE:9 [ loop::$1 ]
Allocated (was zp ZP_BYTE:22) zp ZP_BYTE:10 [ sprites_irq::raster_sprite_gfx_modify#0 ]
Allocated (was zp ZP_BYTE:22) zp ZP_BYTE:9 [ sprites_irq::raster_sprite_gfx_modify#0 ]
Interrupt procedure sprites_irq clobbers AXCNZV
Removing interrupt register storage sty regy+1 in SEG128 entry interrupt(HARDWARE_CLOBBER)
Removing interrupt register storage regy: in SEG164 [99] return - exit interrupt(HARDWARE_CLOBBER)
@ -3271,15 +3257,13 @@ main: {
lda #toSpritePtr2_return
sta PLAYFIELD_SPRITE_PTRS_1,y
//SEG56 [29] (byte) main::xpos#1 ← (byte) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 -- vbuz1=vbuz1_plus_vbuc1
lda #$18
clc
adc xpos
sta xpos
lax xpos
axs #-$18
stx xpos
//SEG57 [30] (byte) main::ypos#1 ← (byte) main::ypos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 -- vbuz1=vbuz1_plus_vbuc1
lda #$18
clc
adc ypos
sta ypos
lax ypos
axs #-$18
stx ypos
//SEG58 [31] (byte) main::s#1 ← ++ (byte) main::s#2 -- vbuyy=_inc_vbuyy
iny
//SEG59 [32] if((byte) main::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 -- vbuyy_neq_vbuc1_then_la1
@ -3309,8 +3293,7 @@ main: {
}
//SEG69 loop
loop: {
.label _1 = 9
.label idx = 3
.label s = 3
//SEG70 [39] phi from loop to loop::@1 [phi:loop->loop::@1]
b1_from_loop:
//SEG71 [39] phi (byte) sin_idx#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1
@ -3323,20 +3306,20 @@ loop: {
//SEG73 loop::@4
b4:
//SEG74 [40] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto loop::@4 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b4
jmp b8
//SEG75 loop::@8
b8:
//SEG76 [41] (byte) loop::idx#0 ← (byte) sin_idx#10 -- vbuz1=vbuz2
lda sin_idx
sta idx
//SEG76 [41] (byte) loop::idx#0 ← (byte) sin_idx#10 -- vbuxx=vbuz1
ldx sin_idx
//SEG77 [42] phi from loop::@8 to loop::@5 [phi:loop::@8->loop::@5]
b5_from_b8:
//SEG78 [42] phi (byte) loop::idx#2 = (byte) loop::idx#0 [phi:loop::@8->loop::@5#0] -- register_copy
//SEG79 [42] phi (byte) loop::s#2 = (byte/signed byte/word/signed word/dword/signed dword) 4 [phi:loop::@8->loop::@5#1] -- vbuxx=vbuc1
ldx #4
//SEG79 [42] phi (byte) loop::s#2 = (byte/signed byte/word/signed word/dword/signed dword) 4 [phi:loop::@8->loop::@5#1] -- vbuz1=vbuc1
lda #4
sta s
jmp b5
//SEG80 [42] phi from loop::@5 to loop::@5 [phi:loop::@5->loop::@5]
b5_from_b5:
@ -3345,24 +3328,21 @@ loop: {
jmp b5
//SEG83 loop::@5
b5:
//SEG84 [43] (byte~) loop::$1 ← (byte) loop::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuxx_rol_1
txa
//SEG84 [43] (byte~) loop::$1 ← (byte) loop::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuz1_rol_1
lda s
asl
sta _1
//SEG85 [44] *((const byte*) SPRITES_YPOS#0 + (byte~) loop::$1) ← *((const byte*) SIN#0 + (byte) loop::idx#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
ldy idx
lda SIN,y
ldy _1
//SEG85 [44] *((const byte*) SPRITES_YPOS#0 + (byte~) loop::$1) ← *((const byte*) SIN#0 + (byte) loop::idx#2) -- pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuxx
tay
lda SIN,x
sta SPRITES_YPOS,y
//SEG86 [45] (byte) loop::idx#1 ← (byte) loop::idx#2 + (byte/signed byte/word/signed word/dword/signed dword) $a -- vbuz1=vbuz1_plus_vbuc1
lda #$a
clc
adc idx
sta idx
//SEG87 [46] (byte) loop::s#1 ← ++ (byte) loop::s#2 -- vbuxx=_inc_vbuxx
inx
//SEG88 [47] if((byte) loop::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto loop::@5 -- vbuxx_neq_vbuc1_then_la1
cpx #8
//SEG86 [45] (byte) loop::idx#1 ← (byte) loop::idx#2 + (byte/signed byte/word/signed word/dword/signed dword) $a -- vbuxx=vbuxx_plus_vbuc1
txa
axs #-$a
//SEG87 [46] (byte) loop::s#1 ← ++ (byte) loop::s#2 -- vbuz1=_inc_vbuz1
inc s
//SEG88 [47] if((byte) loop::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto loop::@5 -- vbuz1_neq_vbuc1_then_la1
lda #8
cmp s
bne b5_from_b5
jmp b9
//SEG89 loop::@9
@ -3398,8 +3378,8 @@ sprites_irq_init: {
sta CIA1_INTERRUPT
//SEG100 [55] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
// Set raster line
lda VIC_CONTROL
and #$7f
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
//SEG101 [56] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 -- _deref_pbuc1=vbuc2
lda #IRQ_RASTER_FIRST
@ -3443,8 +3423,8 @@ sprites_init: {
//SEG113 [65] phi (byte) sprites_init::xpos#2 = (byte/signed byte/word/signed word/dword/signed dword) $18+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1
lda #$18+$f*8
sta xpos
//SEG114 [65] phi (byte) sprites_init::s#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuxx=vbuc1
ldx #0
//SEG114 [65] phi (byte) sprites_init::s#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuyy=vbuc1
ldy #0
jmp b1
//SEG115 [65] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1]
b1_from_b1:
@ -3453,25 +3433,24 @@ sprites_init: {
jmp b1
//SEG118 sprites_init::@1
b1:
//SEG119 [66] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuxx_rol_1
txa
//SEG119 [66] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuyy_rol_1
tya
asl
//SEG120 [67] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuaa=vbuz1
tay
tax
//SEG120 [67] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuxx=vbuz1
lda xpos
sta SPRITES_XPOS,y
//SEG121 [68] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 -- pbuc1_derefidx_vbuxx=vbuc2
sta SPRITES_XPOS,x
//SEG121 [68] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 -- pbuc1_derefidx_vbuyy=vbuc2
lda #BLACK
sta SPRITES_COLS,x
sta SPRITES_COLS,y
//SEG122 [69] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 -- vbuz1=vbuz1_plus_vbuc1
lda #$18
clc
adc xpos
sta xpos
//SEG123 [70] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuxx=_inc_vbuxx
inx
//SEG124 [71] if((byte) sprites_init::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto sprites_init::@1 -- vbuxx_neq_vbuc1_then_la1
cpx #4
lax xpos
axs #-$18
stx xpos
//SEG123 [70] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuyy=_inc_vbuyy
iny
//SEG124 [71] if((byte) sprites_init::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto sprites_init::@1 -- vbuyy_neq_vbuc1_then_la1
cpy #4
bne b1_from_b1
jmp breturn
//SEG125 sprites_init::@return
@ -3485,7 +3464,7 @@ sprites_init: {
// Utilizes duplicated gfx in the sprites to allow for some leeway in updating the sprite pointers
sprites_irq: {
.const toSpritePtr2_return = PLAYFIELD_SPRITES>>6
.label raster_sprite_gfx_modify = $a
.label raster_sprite_gfx_modify = 9
//SEG128 entry interrupt(HARDWARE_CLOBBER)
sta rega+1
stx regx+1
@ -3532,9 +3511,8 @@ sprites_irq: {
//SEG143 [84] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_2
//SEG144 [85] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 -- vbuaa=_inc_vbuxx
inx
txa
clc
adc #1
//SEG145 [86] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_2+1
//SEG146 [87] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa
@ -3550,34 +3528,31 @@ sprites_irq: {
//SEG150 [90] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 -- vbuz1=_inc_vbuz1
inc irq_cnt
//SEG151 [91] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@4 -- vbuz1_eq_vbuc1_then_la1
lda irq_cnt
cmp #9
lda #9
cmp irq_cnt
beq b4
jmp b11
//SEG152 sprites_irq::@11
b11:
//SEG153 [92] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) $a) goto sprites_irq::@5 -- vbuz1_eq_vbuc1_then_la1
lda irq_cnt
cmp #$a
lda #$a
cmp irq_cnt
beq b5
jmp b12
//SEG154 sprites_irq::@12
b12:
//SEG155 [93] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $14 -- vbuz1=vbuz1_plus_vbuc1
lda #$14
clc
adc irq_raster_next
sta irq_raster_next
lax irq_raster_next
axs #-$14
stx irq_raster_next
//SEG156 [94] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lda #$15
clc
adc irq_sprite_ypos
sta irq_sprite_ypos
lax irq_sprite_ypos
axs #-$15
stx irq_sprite_ypos
//SEG157 [95] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1
lda #3
clc
adc irq_sprite_ptr
sta irq_sprite_ptr
lax irq_sprite_ptr
axs #-3
stx irq_sprite_ptr
//SEG158 [96] phi from sprites_irq::@12 sprites_irq::@15 sprites_irq::@5 to sprites_irq::@7 [phi:sprites_irq::@12/sprites_irq::@15/sprites_irq::@5->sprites_irq::@7]
b7_from_b12:
b7_from_b15:
@ -3612,23 +3587,20 @@ sprites_irq: {
lda #IRQ_RASTER_FIRST
sta irq_raster_next
//SEG168 [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lda #$15
clc
adc irq_sprite_ypos
sta irq_sprite_ypos
lax irq_sprite_ypos
axs #-$15
stx irq_sprite_ypos
//SEG169 [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1
lda #3
clc
adc irq_sprite_ptr
sta irq_sprite_ptr
lax irq_sprite_ptr
axs #-3
stx irq_sprite_ptr
jmp b7_from_b5
//SEG170 sprites_irq::@4
b4:
//SEG171 [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lda #$15
clc
adc irq_raster_next
sta irq_raster_next
lax irq_raster_next
axs #-$15
stx irq_raster_next
//SEG172 [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1
lda #SPRITES_FIRST_YPOS
sta irq_sprite_ypos
@ -3648,17 +3620,15 @@ sprites_irq: {
b2:
//SEG178 [108] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_1
//SEG179 [109] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuaa=_inc_vbuxx
//SEG179 [109] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx
inx
//SEG180 [110] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_1+1
//SEG181 [111] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_1+2
//SEG182 [112] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx
inx
txa
clc
adc #1
//SEG180 [110] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_1+1
//SEG181 [111] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_1+2
//SEG182 [112] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuaa
clc
adc #1
//SEG183 [113] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_1+3
jmp b3
@ -3795,8 +3765,6 @@ Removing instruction jmp b1
Removing instruction jmp b5
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda irq_cnt
Succesful ASM optimization Pass5UnnecesaryLoadElimination
FINAL SYMBOL TABLE
(label) @10
@ -3964,19 +3932,19 @@ FINAL SYMBOL TABLE
(byte) level_bcd
(word) lines_bcd
(void()) loop()
(byte~) loop::$1 $1 zp ZP_BYTE:9 202.0
(byte~) loop::$1 reg byte a 202.0
(label) loop::@1
(label) loop::@4
(label) loop::@5
(label) loop::@8
(label) loop::@9
(byte) loop::idx
(byte) loop::idx#0 idx zp ZP_BYTE:3 22.0
(byte) loop::idx#1 idx zp ZP_BYTE:3 67.33333333333333
(byte) loop::idx#2 idx zp ZP_BYTE:3 104.66666666666666
(byte) loop::idx#0 reg byte x 22.0
(byte) loop::idx#1 reg byte x 67.33333333333333
(byte) loop::idx#2 reg byte x 104.66666666666666
(byte) loop::s
(byte) loop::s#1 reg byte x 151.5
(byte) loop::s#2 reg byte x 75.75
(byte) loop::s#1 s zp ZP_BYTE:3 151.5
(byte) loop::s#2 s zp ZP_BYTE:3 75.75
(void()) main()
(byte/signed word/word/dword/signed dword~) main::$4 reg byte a 22.0
(label) main::@1
@ -4043,10 +4011,10 @@ FINAL SYMBOL TABLE
(label) sprites_init::@1
(label) sprites_init::@return
(byte) sprites_init::s
(byte) sprites_init::s#1 reg byte x 16.5
(byte) sprites_init::s#2 reg byte x 8.8
(byte) sprites_init::s#1 reg byte y 16.5
(byte) sprites_init::s#2 reg byte y 8.8
(byte) sprites_init::s2
(byte) sprites_init::s2#0 reg byte a 22.0
(byte) sprites_init::s2#0 reg byte x 22.0
(byte) sprites_init::xpos
(byte) sprites_init::xpos#1 xpos zp ZP_BYTE:2 7.333333333333333
(byte) sprites_init::xpos#2 xpos zp ZP_BYTE:2 8.25
@ -4066,12 +4034,12 @@ interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
(label) sprites_irq::@return
(byte) sprites_irq::ptr
(byte) sprites_irq::ptr#0 reg byte x 2.5
(byte) sprites_irq::ptr#1 reg byte a 2.6666666666666665
(byte) sprites_irq::ptr#1 reg byte x 2.6666666666666665
(byte) sprites_irq::ptr#2 reg byte a 4.0
(byte) sprites_irq::ptr#3 reg byte a 2.6666666666666665
(byte) sprites_irq::ptr#4 reg byte a 4.0
(byte) sprites_irq::raster_sprite_gfx_modify
(byte) sprites_irq::raster_sprite_gfx_modify#0 raster_sprite_gfx_modify zp ZP_BYTE:10 6.5
(byte) sprites_irq::raster_sprite_gfx_modify#0 raster_sprite_gfx_modify zp ZP_BYTE:9 6.5
(label) sprites_irq::toSpritePtr2
(word~) sprites_irq::toSpritePtr2_$0
(word~) sprites_irq::toSpritePtr2_$1
@ -4093,9 +4061,9 @@ interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
reg byte y [ main::s#2 main::s#1 ]
zp ZP_BYTE:2 [ main::xpos#2 main::xpos#1 sin_idx#10 sin_idx#3 sprites_init::xpos#2 sprites_init::xpos#1 ]
zp ZP_BYTE:3 [ main::ypos#2 main::ypos#1 loop::idx#2 loop::idx#1 loop::idx#0 ]
reg byte x [ loop::s#2 loop::s#1 ]
reg byte x [ sprites_init::s#2 sprites_init::s#1 ]
zp ZP_BYTE:3 [ main::ypos#2 main::ypos#1 loop::s#2 loop::s#1 ]
reg byte x [ loop::idx#2 loop::idx#1 loop::idx#0 ]
reg byte y [ sprites_init::s#2 sprites_init::s#1 ]
zp ZP_BYTE:4 [ irq_raster_next#4 irq_raster_next#3 irq_raster_next#1 irq_raster_next#2 irq_raster_next#0 ]
zp ZP_BYTE:5 [ render_screen_showing#0 ]
zp ZP_BYTE:6 [ irq_sprite_ypos#0 irq_sprite_ypos#3 irq_sprite_ypos#2 irq_sprite_ypos#1 ]
@ -4103,20 +4071,20 @@ zp ZP_BYTE:7 [ irq_sprite_ptr#0 irq_sprite_ptr#3 irq_sprite_ptr#2 irq_sprite_ptr
zp ZP_BYTE:8 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
reg byte x [ main::s2#0 ]
reg byte a [ main::$4 ]
zp ZP_BYTE:9 [ loop::$1 ]
reg byte a [ sprites_init::s2#0 ]
reg byte a [ loop::$1 ]
reg byte x [ sprites_init::s2#0 ]
reg byte a [ sprites_irq::ypos#0 ]
reg byte x [ sprites_irq::$0 ]
zp ZP_BYTE:10 [ sprites_irq::raster_sprite_gfx_modify#0 ]
zp ZP_BYTE:9 [ sprites_irq::raster_sprite_gfx_modify#0 ]
reg byte x [ sprites_irq::ptr#0 ]
reg byte a [ sprites_irq::ptr#3 ]
reg byte a [ sprites_irq::ptr#4 ]
reg byte a [ sprites_irq::ptr#1 ]
reg byte x [ sprites_irq::ptr#1 ]
reg byte a [ sprites_irq::ptr#2 ]
FINAL ASSEMBLER
Score: 7709
Score: 7304
//SEG0 File Comments
//SEG1 Basic Upstart
@ -4295,15 +4263,13 @@ main: {
lda #toSpritePtr2_return
sta PLAYFIELD_SPRITE_PTRS_1,y
//SEG56 [29] (byte) main::xpos#1 ← (byte) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 -- vbuz1=vbuz1_plus_vbuc1
lda #$18
clc
adc xpos
sta xpos
lax xpos
axs #-$18
stx xpos
//SEG57 [30] (byte) main::ypos#1 ← (byte) main::ypos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 -- vbuz1=vbuz1_plus_vbuc1
lda #$18
clc
adc ypos
sta ypos
lax ypos
axs #-$18
stx ypos
//SEG58 [31] (byte) main::s#1 ← ++ (byte) main::s#2 -- vbuyy=_inc_vbuyy
iny
//SEG59 [32] if((byte) main::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 -- vbuyy_neq_vbuc1_then_la1
@ -4324,8 +4290,7 @@ main: {
}
//SEG69 loop
loop: {
.label _1 = 9
.label idx = 3
.label s = 3
//SEG70 [39] phi from loop to loop::@1 [phi:loop->loop::@1]
//SEG71 [39] phi (byte) sin_idx#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1
lda #0
@ -4334,40 +4299,37 @@ loop: {
//SEG73 loop::@4
b4:
//SEG74 [40] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto loop::@4 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b4
//SEG75 loop::@8
//SEG76 [41] (byte) loop::idx#0 ← (byte) sin_idx#10 -- vbuz1=vbuz2
lda sin_idx
sta idx
//SEG76 [41] (byte) loop::idx#0 ← (byte) sin_idx#10 -- vbuxx=vbuz1
ldx sin_idx
//SEG77 [42] phi from loop::@8 to loop::@5 [phi:loop::@8->loop::@5]
//SEG78 [42] phi (byte) loop::idx#2 = (byte) loop::idx#0 [phi:loop::@8->loop::@5#0] -- register_copy
//SEG79 [42] phi (byte) loop::s#2 = (byte/signed byte/word/signed word/dword/signed dword) 4 [phi:loop::@8->loop::@5#1] -- vbuxx=vbuc1
ldx #4
//SEG79 [42] phi (byte) loop::s#2 = (byte/signed byte/word/signed word/dword/signed dword) 4 [phi:loop::@8->loop::@5#1] -- vbuz1=vbuc1
lda #4
sta s
//SEG80 [42] phi from loop::@5 to loop::@5 [phi:loop::@5->loop::@5]
//SEG81 [42] phi (byte) loop::idx#2 = (byte) loop::idx#1 [phi:loop::@5->loop::@5#0] -- register_copy
//SEG82 [42] phi (byte) loop::s#2 = (byte) loop::s#1 [phi:loop::@5->loop::@5#1] -- register_copy
//SEG83 loop::@5
b5:
//SEG84 [43] (byte~) loop::$1 ← (byte) loop::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuxx_rol_1
txa
//SEG84 [43] (byte~) loop::$1 ← (byte) loop::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuz1_rol_1
lda s
asl
sta _1
//SEG85 [44] *((const byte*) SPRITES_YPOS#0 + (byte~) loop::$1) ← *((const byte*) SIN#0 + (byte) loop::idx#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
ldy idx
lda SIN,y
ldy _1
//SEG85 [44] *((const byte*) SPRITES_YPOS#0 + (byte~) loop::$1) ← *((const byte*) SIN#0 + (byte) loop::idx#2) -- pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuxx
tay
lda SIN,x
sta SPRITES_YPOS,y
//SEG86 [45] (byte) loop::idx#1 ← (byte) loop::idx#2 + (byte/signed byte/word/signed word/dword/signed dword) $a -- vbuz1=vbuz1_plus_vbuc1
lda #$a
clc
adc idx
sta idx
//SEG87 [46] (byte) loop::s#1 ← ++ (byte) loop::s#2 -- vbuxx=_inc_vbuxx
inx
//SEG88 [47] if((byte) loop::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto loop::@5 -- vbuxx_neq_vbuc1_then_la1
cpx #8
//SEG86 [45] (byte) loop::idx#1 ← (byte) loop::idx#2 + (byte/signed byte/word/signed word/dword/signed dword) $a -- vbuxx=vbuxx_plus_vbuc1
txa
axs #-$a
//SEG87 [46] (byte) loop::s#1 ← ++ (byte) loop::s#2 -- vbuz1=_inc_vbuz1
inc s
//SEG88 [47] if((byte) loop::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto loop::@5 -- vbuz1_neq_vbuc1_then_la1
lda #8
cmp s
bne b5
//SEG89 loop::@9
//SEG90 [48] (byte) sin_idx#3 ← ++ (byte) sin_idx#10 -- vbuz1=_inc_vbuz1
@ -4400,8 +4362,8 @@ sprites_irq_init: {
sta CIA1_INTERRUPT
//SEG100 [55] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
// Set raster line
lda VIC_CONTROL
and #$7f
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
//SEG101 [56] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 -- _deref_pbuc1=vbuc2
lda #IRQ_RASTER_FIRST
@ -4440,32 +4402,31 @@ sprites_init: {
//SEG113 [65] phi (byte) sprites_init::xpos#2 = (byte/signed byte/word/signed word/dword/signed dword) $18+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1
lda #$18+$f*8
sta xpos
//SEG114 [65] phi (byte) sprites_init::s#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuxx=vbuc1
ldx #0
//SEG114 [65] phi (byte) sprites_init::s#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuyy=vbuc1
ldy #0
//SEG115 [65] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1]
//SEG116 [65] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy
//SEG117 [65] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy
//SEG118 sprites_init::@1
b1:
//SEG119 [66] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuxx_rol_1
txa
//SEG119 [66] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuyy_rol_1
tya
asl
//SEG120 [67] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuaa=vbuz1
tay
tax
//SEG120 [67] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuxx=vbuz1
lda xpos
sta SPRITES_XPOS,y
//SEG121 [68] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 -- pbuc1_derefidx_vbuxx=vbuc2
sta SPRITES_XPOS,x
//SEG121 [68] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 -- pbuc1_derefidx_vbuyy=vbuc2
lda #BLACK
sta SPRITES_COLS,x
sta SPRITES_COLS,y
//SEG122 [69] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 -- vbuz1=vbuz1_plus_vbuc1
lda #$18
clc
adc xpos
sta xpos
//SEG123 [70] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuxx=_inc_vbuxx
inx
//SEG124 [71] if((byte) sprites_init::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto sprites_init::@1 -- vbuxx_neq_vbuc1_then_la1
cpx #4
lax xpos
axs #-$18
stx xpos
//SEG123 [70] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuyy=_inc_vbuyy
iny
//SEG124 [71] if((byte) sprites_init::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto sprites_init::@1 -- vbuyy_neq_vbuc1_then_la1
cpy #4
bne b1
//SEG125 sprites_init::@return
//SEG126 [72] return
@ -4477,7 +4438,7 @@ sprites_init: {
// Utilizes duplicated gfx in the sprites to allow for some leeway in updating the sprite pointers
sprites_irq: {
.const toSpritePtr2_return = PLAYFIELD_SPRITES>>6
.label raster_sprite_gfx_modify = $a
.label raster_sprite_gfx_modify = 9
//SEG128 entry interrupt(HARDWARE_CLOBBER)
sta rega+1
stx regx+1
@ -4519,9 +4480,8 @@ sprites_irq: {
//SEG143 [84] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_2
//SEG144 [85] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 -- vbuaa=_inc_vbuxx
inx
txa
clc
adc #1
//SEG145 [86] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_2+1
//SEG146 [87] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa
@ -4536,29 +4496,27 @@ sprites_irq: {
//SEG150 [90] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 -- vbuz1=_inc_vbuz1
inc irq_cnt
//SEG151 [91] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@4 -- vbuz1_eq_vbuc1_then_la1
lda irq_cnt
cmp #9
lda #9
cmp irq_cnt
beq b4
//SEG152 sprites_irq::@11
//SEG153 [92] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) $a) goto sprites_irq::@5 -- vbuz1_eq_vbuc1_then_la1
cmp #$a
lda #$a
cmp irq_cnt
beq b5
//SEG154 sprites_irq::@12
//SEG155 [93] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $14 -- vbuz1=vbuz1_plus_vbuc1
lda #$14
clc
adc irq_raster_next
sta irq_raster_next
lax irq_raster_next
axs #-$14
stx irq_raster_next
//SEG156 [94] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lda #$15
clc
adc irq_sprite_ypos
sta irq_sprite_ypos
lax irq_sprite_ypos
axs #-$15
stx irq_sprite_ypos
//SEG157 [95] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1
lda #3
clc
adc irq_sprite_ptr
sta irq_sprite_ptr
lax irq_sprite_ptr
axs #-3
stx irq_sprite_ptr
//SEG158 [96] phi from sprites_irq::@12 sprites_irq::@15 sprites_irq::@5 to sprites_irq::@7 [phi:sprites_irq::@12/sprites_irq::@15/sprites_irq::@5->sprites_irq::@7]
//SEG159 [96] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#3 [phi:sprites_irq::@12/sprites_irq::@15/sprites_irq::@5->sprites_irq::@7#0] -- register_copy
//SEG160 sprites_irq::@7
@ -4587,23 +4545,20 @@ sprites_irq: {
lda #IRQ_RASTER_FIRST
sta irq_raster_next
//SEG168 [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lda #$15
clc
adc irq_sprite_ypos
sta irq_sprite_ypos
lax irq_sprite_ypos
axs #-$15
stx irq_sprite_ypos
//SEG169 [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1
lda #3
clc
adc irq_sprite_ptr
sta irq_sprite_ptr
lax irq_sprite_ptr
axs #-3
stx irq_sprite_ptr
jmp b7
//SEG170 sprites_irq::@4
b4:
//SEG171 [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lda #$15
clc
adc irq_raster_next
sta irq_raster_next
lax irq_raster_next
axs #-$15
stx irq_raster_next
//SEG172 [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1
lda #SPRITES_FIRST_YPOS
sta irq_sprite_ypos
@ -4618,17 +4573,15 @@ sprites_irq: {
b2:
//SEG178 [108] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_1
//SEG179 [109] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuaa=_inc_vbuxx
//SEG179 [109] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx
inx
//SEG180 [110] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_1+1
//SEG181 [111] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_1+2
//SEG182 [112] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx
inx
txa
clc
adc #1
//SEG180 [110] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_1+1
//SEG181 [111] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_1+2
//SEG182 [112] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuaa
clc
adc #1
//SEG183 [113] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_1+3
jmp b3

View File

@ -163,19 +163,19 @@
(byte) level_bcd
(word) lines_bcd
(void()) loop()
(byte~) loop::$1 $1 zp ZP_BYTE:9 202.0
(byte~) loop::$1 reg byte a 202.0
(label) loop::@1
(label) loop::@4
(label) loop::@5
(label) loop::@8
(label) loop::@9
(byte) loop::idx
(byte) loop::idx#0 idx zp ZP_BYTE:3 22.0
(byte) loop::idx#1 idx zp ZP_BYTE:3 67.33333333333333
(byte) loop::idx#2 idx zp ZP_BYTE:3 104.66666666666666
(byte) loop::idx#0 reg byte x 22.0
(byte) loop::idx#1 reg byte x 67.33333333333333
(byte) loop::idx#2 reg byte x 104.66666666666666
(byte) loop::s
(byte) loop::s#1 reg byte x 151.5
(byte) loop::s#2 reg byte x 75.75
(byte) loop::s#1 s zp ZP_BYTE:3 151.5
(byte) loop::s#2 s zp ZP_BYTE:3 75.75
(void()) main()
(byte/signed word/word/dword/signed dword~) main::$4 reg byte a 22.0
(label) main::@1
@ -242,10 +242,10 @@
(label) sprites_init::@1
(label) sprites_init::@return
(byte) sprites_init::s
(byte) sprites_init::s#1 reg byte x 16.5
(byte) sprites_init::s#2 reg byte x 8.8
(byte) sprites_init::s#1 reg byte y 16.5
(byte) sprites_init::s#2 reg byte y 8.8
(byte) sprites_init::s2
(byte) sprites_init::s2#0 reg byte a 22.0
(byte) sprites_init::s2#0 reg byte x 22.0
(byte) sprites_init::xpos
(byte) sprites_init::xpos#1 xpos zp ZP_BYTE:2 7.333333333333333
(byte) sprites_init::xpos#2 xpos zp ZP_BYTE:2 8.25
@ -265,12 +265,12 @@ interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
(label) sprites_irq::@return
(byte) sprites_irq::ptr
(byte) sprites_irq::ptr#0 reg byte x 2.5
(byte) sprites_irq::ptr#1 reg byte a 2.6666666666666665
(byte) sprites_irq::ptr#1 reg byte x 2.6666666666666665
(byte) sprites_irq::ptr#2 reg byte a 4.0
(byte) sprites_irq::ptr#3 reg byte a 2.6666666666666665
(byte) sprites_irq::ptr#4 reg byte a 4.0
(byte) sprites_irq::raster_sprite_gfx_modify
(byte) sprites_irq::raster_sprite_gfx_modify#0 raster_sprite_gfx_modify zp ZP_BYTE:10 6.5
(byte) sprites_irq::raster_sprite_gfx_modify#0 raster_sprite_gfx_modify zp ZP_BYTE:9 6.5
(label) sprites_irq::toSpritePtr2
(word~) sprites_irq::toSpritePtr2_$0
(word~) sprites_irq::toSpritePtr2_$1
@ -292,9 +292,9 @@ interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
reg byte y [ main::s#2 main::s#1 ]
zp ZP_BYTE:2 [ main::xpos#2 main::xpos#1 sin_idx#10 sin_idx#3 sprites_init::xpos#2 sprites_init::xpos#1 ]
zp ZP_BYTE:3 [ main::ypos#2 main::ypos#1 loop::idx#2 loop::idx#1 loop::idx#0 ]
reg byte x [ loop::s#2 loop::s#1 ]
reg byte x [ sprites_init::s#2 sprites_init::s#1 ]
zp ZP_BYTE:3 [ main::ypos#2 main::ypos#1 loop::s#2 loop::s#1 ]
reg byte x [ loop::idx#2 loop::idx#1 loop::idx#0 ]
reg byte y [ sprites_init::s#2 sprites_init::s#1 ]
zp ZP_BYTE:4 [ irq_raster_next#4 irq_raster_next#3 irq_raster_next#1 irq_raster_next#2 irq_raster_next#0 ]
zp ZP_BYTE:5 [ render_screen_showing#0 ]
zp ZP_BYTE:6 [ irq_sprite_ypos#0 irq_sprite_ypos#3 irq_sprite_ypos#2 irq_sprite_ypos#1 ]
@ -302,13 +302,13 @@ zp ZP_BYTE:7 [ irq_sprite_ptr#0 irq_sprite_ptr#3 irq_sprite_ptr#2 irq_sprite_ptr
zp ZP_BYTE:8 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
reg byte x [ main::s2#0 ]
reg byte a [ main::$4 ]
zp ZP_BYTE:9 [ loop::$1 ]
reg byte a [ sprites_init::s2#0 ]
reg byte a [ loop::$1 ]
reg byte x [ sprites_init::s2#0 ]
reg byte a [ sprites_irq::ypos#0 ]
reg byte x [ sprites_irq::$0 ]
zp ZP_BYTE:10 [ sprites_irq::raster_sprite_gfx_modify#0 ]
zp ZP_BYTE:9 [ sprites_irq::raster_sprite_gfx_modify#0 ]
reg byte x [ sprites_irq::ptr#0 ]
reg byte a [ sprites_irq::ptr#3 ]
reg byte a [ sprites_irq::ptr#4 ]
reg byte a [ sprites_irq::ptr#1 ]
reg byte x [ sprites_irq::ptr#1 ]
reg byte a [ sprites_irq::ptr#2 ]

View File

@ -152,11 +152,14 @@
.label render_screen_render_33 = 9
.label current_xpos_59 = $a
.label current_piece_gfx_64 = 5
.label current_piece_char_68 = $b
.label render_screen_render_69 = 9
.label current_xpos_128 = $a
.label current_xpos_129 = $a
.label current_piece_gfx_118 = 5
.label current_piece_gfx_119 = 5
.label current_piece_char_106 = $b
.label current_piece_char_107 = $b
.label current_piece_98 = 5
.label current_piece_99 = 5
.label current_piece_100 = 5
@ -194,18 +197,19 @@ main: {
jsr play_spawn_current
ldx #$40
jsr render_playfield
ldy current_ypos
ldx current_ypos
lda current_xpos
sta current_xpos_128
lda current_piece_gfx
sta current_piece_gfx_118
lda current_piece_gfx+1
sta current_piece_gfx_118+1
ldx current_piece_char
lda current_piece_char
sta current_piece_char_106
lda #$40
sta render_screen_render_33
jsr render_moving
ldy play_spawn_current.piece_idx
ldx play_spawn_current.piece_idx
lda #$40
jsr render_next
ldy play_spawn_current._0
@ -232,8 +236,8 @@ main: {
b1:
// Wait for a frame to pass
b4:
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b4
jsr render_show
jsr keyboard_event_scan
@ -252,7 +256,7 @@ main: {
beq b1
ldx render_screen_render
jsr render_playfield
ldy current_ypos
ldx current_ypos
lda render_screen_render
sta render_screen_render_69
lda current_xpos
@ -261,10 +265,11 @@ main: {
sta current_piece_gfx_119
lda current_piece_gfx+1
sta current_piece_gfx_119+1
ldx current_piece_char
lda current_piece_char
sta current_piece_char_107
jsr render_moving
lda render_screen_render
ldy next_piece_idx
ldx next_piece_idx
jsr render_next
jsr render_score
jsr render_screen_swap
@ -413,14 +418,14 @@ render_next: {
lda #>PLAYFIELD_SCREEN_1+next_area_offset
sta screen_next_area+1
b2:
tya
txa
asl
tax
lda PIECES_NEXT_CHARS,y
tay
lda PIECES_NEXT_CHARS,x
sta next_piece_char
lda PIECES,x
lda PIECES,y
sta next_piece_gfx
lda PIECES+1,x
lda PIECES+1,y
sta next_piece_gfx+1
lda #0
sta l
@ -454,8 +459,8 @@ render_next: {
inc screen_next_area+1
!:
inc l
lda l
cmp #4
lda #4
cmp l
bne b3
rts
b5:
@ -467,36 +472,32 @@ render_next: {
// Render the current moving piece at position (current_xpos, current_ypos)
// Ignores cases where parts of the tetromino is outside the playfield (sides/bottom) since the movement collision routine prevents this.
render_moving: {
.label ypos2 = $b
.label ypos2 = $c
.label screen_line = 7
.label xpos = $e
.label i = $d
.label l = $c
.label c = $f
tya
.label xpos = $f
.label i = $e
.label l = $d
txa
asl
sta ypos2
lda #0
sta l
sta i
b1:
lda ypos2
cmp #2
beq !+
bcs b2
!:
lda #4
clc
adc i
sta i
lda #2
cmp ypos2
bcc b2
lax i
axs #-4
stx i
b3:
lda ypos2
clc
adc #2
sta ypos2
inc l
lda l
cmp #4
lda #4
cmp l
bne b1
rts
b2:
@ -510,22 +511,20 @@ render_moving: {
sta screen_line+1
lda current_xpos_59
sta xpos
lda #0
sta c
ldx #0
b4:
ldy i
lda (current_piece_gfx_64),y
inc i
cmp #0
beq b5
lda current_piece_char_68
ldy xpos
txa
sta (screen_line),y
b5:
inc xpos
inc c
lda c
cmp #4
inx
cpx #4
bne b4
jmp b3
}
@ -563,12 +562,12 @@ render_playfield: {
!:
inc i
inc c
lda c
cmp #PLAYFIELD_COLS-1+1
lda #PLAYFIELD_COLS-1+1
cmp c
bne b2
inc l
lda l
cmp #PLAYFIELD_LINES-1+1
lda #PLAYFIELD_LINES-1+1
cmp l
bne b1
rts
}
@ -618,11 +617,10 @@ play_move_rotate: {
breturn:
rts
b2:
lda #$10
clc
adc current_orientation
and #$3f
sta orientation
lax current_orientation
axs #-$10
lda #$3f
sax orientation
b4:
lda current_xpos
sta play_collision.xpos
@ -647,11 +645,10 @@ play_move_rotate: {
lda #1
jmp breturn
b1:
lda current_orientation
sec
sbc #$10
and #$3f
sta orientation
lax current_orientation
axs #$10
lda #$3f
sax orientation
jmp b4
}
// Test if there is a collision between the current piece moved to (x, y) and anything on the playfield or the playfield boundaries
@ -734,8 +731,8 @@ play_collision: {
adc #2
sta ypos2
inc l
lda l
cmp #4
lda #4
cmp l
bne b20
lda #COLLISION_NONE
jmp breturn
@ -902,8 +899,8 @@ play_spawn_current: {
lda #7
sta piece_idx
b2:
lda piece_idx
cmp #7
lda #7
cmp piece_idx
beq b3
rts
b3:
@ -974,11 +971,9 @@ play_update_score: {
play_increase_level: {
inc level
// Update speed of moving tetrominos down
lda level
cmp #$1d
beq !+
bcs b1
!:
lda #$1d
cmp level
bcc b1
ldy level
lda MOVEDOWN_SLOW_SPEEDS,y
sta current_movedown_slow
@ -993,10 +988,9 @@ play_increase_level: {
cmp #$a
bne b3
// If level low nybble hits $a change to $10
lda #6
clc
adc level_bcd
sta level_bcd
lax level_bcd
axs #-6
stx level_bcd
b3:
// Increase the score values gained
sed
@ -1059,21 +1053,19 @@ play_remove_lines: {
sta playfield,x
dex
inc x
lda x
cmp #PLAYFIELD_COLS-1+1
lda #PLAYFIELD_COLS-1+1
cmp x
bne b2
lda full
cmp #1
lda #1
cmp full
bne b4
txa
clc
adc #PLAYFIELD_COLS
tax
axs #-PLAYFIELD_COLS
inc removed
b4:
inc y
lda y
cmp #PLAYFIELD_LINES-1+1
lda #PLAYFIELD_LINES-1+1
cmp y
bne b1
b5:
// Write zeros in the rest of the lines
@ -1131,8 +1123,8 @@ play_lock_current: {
adc #2
sta ypos2
inc l
lda l
cmp #4
lda #4
cmp l
bne b7
rts
b7:
@ -1198,14 +1190,13 @@ keyboard_event_scan: {
ldy row
cmp keyboard_scan_values,y
bne b6
lda #8
clc
adc keycode
sta keycode
lax keycode
axs #-8
stx keycode
b3:
inc row
lda row
cmp #8
lda #8
cmp row
bne b1
lda #KEY_LSHIFT
sta keyboard_event_pressed.keycode
@ -1254,8 +1245,8 @@ keyboard_event_scan: {
and keyboard_matrix_col_bitmask,x
cmp #0
beq b5
lda keyboard_events_size
cmp #8
lda #8
cmp keyboard_events_size
beq b5
lda keyboard_matrix_col_bitmask,x
and row_scan
@ -1330,17 +1321,17 @@ play_init: {
sta pli
lda #>playfield
sta pli+1
ldx #0
ldy #0
b1:
txa
tya
asl
tay
tax
lda pli
sta playfield_lines,y
sta playfield_lines,x
lda pli+1
sta playfield_lines+1,y
sta playfield_lines+1,x
lda idx
sta playfield_lines_idx,x
sta playfield_lines_idx,y
lda #PLAYFIELD_COLS
clc
adc pli
@ -1348,12 +1339,11 @@ play_init: {
bcc !+
inc pli+1
!:
lda #PLAYFIELD_COLS
clc
adc idx
sta idx
inx
cpx #PLAYFIELD_LINES-1+1
lax idx
axs #-PLAYFIELD_COLS
stx idx
iny
cpy #PLAYFIELD_LINES-1+1
bne b1
lda #PLAYFIELD_COLS*PLAYFIELD_LINES
sta playfield_lines_idx+PLAYFIELD_LINES
@ -1396,8 +1386,8 @@ sprites_irq_init: {
lda #CIA_INTERRUPT_CLEAR
sta CIA1_INTERRUPT
// Set raster line
lda VIC_CONTROL
and #$7f
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
lda #IRQ_RASTER_FIRST
sta RASTER
@ -1423,21 +1413,20 @@ sprites_init: {
sta SPRITES_EXPAND_X
lda #$18+$f*8
sta xpos
ldx #0
ldy #0
b1:
txa
tya
asl
tay
tax
lda xpos
sta SPRITES_XPOS,y
sta SPRITES_XPOS,x
lda #BLACK
sta SPRITES_COLS,x
lda #$18
clc
adc xpos
sta xpos
inx
cpx #4
sta SPRITES_COLS,y
lax xpos
axs #-$18
stx xpos
iny
cpy #4
bne b1
rts
}
@ -1604,8 +1593,8 @@ render_screen_original: {
cpx #$28
bne b4
inc y
lda y
cmp #$19
lda #$19
cmp y
bne b1
rts
}
@ -1649,9 +1638,8 @@ sprites_irq: {
cmp #0
beq b2
stx PLAYFIELD_SPRITE_PTRS_2
inx
txa
clc
adc #1
sta PLAYFIELD_SPRITE_PTRS_2+1
sta PLAYFIELD_SPRITE_PTRS_2+2
clc
@ -1659,23 +1647,21 @@ sprites_irq: {
sta PLAYFIELD_SPRITE_PTRS_2+3
b3:
inc irq_cnt
lda irq_cnt
cmp #9
lda #9
cmp irq_cnt
beq b4
cmp #$a
lda #$a
cmp irq_cnt
beq b5
lda #$14
clc
adc irq_raster_next
sta irq_raster_next
lda #$15
clc
adc irq_sprite_ypos
sta irq_sprite_ypos
lda #3
clc
adc irq_sprite_ptr
sta irq_sprite_ptr
lax irq_raster_next
axs #-$14
stx irq_raster_next
lax irq_sprite_ypos
axs #-$15
stx irq_sprite_ypos
lax irq_sprite_ptr
axs #-3
stx irq_sprite_ptr
b7:
// Setup next interrupt
lda irq_raster_next
@ -1693,20 +1679,17 @@ sprites_irq: {
sta irq_cnt
lda #IRQ_RASTER_FIRST
sta irq_raster_next
lda #$15
clc
adc irq_sprite_ypos
sta irq_sprite_ypos
lda #3
clc
adc irq_sprite_ptr
sta irq_sprite_ptr
lax irq_sprite_ypos
axs #-$15
stx irq_sprite_ypos
lax irq_sprite_ptr
axs #-3
stx irq_sprite_ptr
jmp b7
b4:
lda #$15
clc
adc irq_raster_next
sta irq_raster_next
lax irq_raster_next
axs #-$15
stx irq_raster_next
lda #SPRITES_FIRST_YPOS
sta irq_sprite_ypos
lda #toSpritePtr2_return
@ -1714,13 +1697,11 @@ sprites_irq: {
jmp b7
b2:
stx PLAYFIELD_SPRITE_PTRS_1
inx
stx PLAYFIELD_SPRITE_PTRS_1+1
stx PLAYFIELD_SPRITE_PTRS_1+2
inx
txa
clc
adc #1
sta PLAYFIELD_SPRITE_PTRS_1+1
sta PLAYFIELD_SPRITE_PTRS_1+2
clc
adc #1
sta PLAYFIELD_SPRITE_PTRS_1+3
jmp b3
}

File diff suppressed because it is too large Load Diff

View File

@ -332,12 +332,12 @@
(byte*~) current_piece#99 current_piece#99 zp ZP_WORD:5 4.0
(byte) current_piece_char
(byte) current_piece_char#10 current_piece_char zp ZP_BYTE:28 187.38888888888889
(byte~) current_piece_char#106 reg byte x 4.0
(byte~) current_piece_char#107 reg byte x 22.0
(byte~) current_piece_char#106 current_piece_char#106 zp ZP_BYTE:11 4.0
(byte~) current_piece_char#107 current_piece_char#107 zp ZP_BYTE:11 22.0
(byte) current_piece_char#16 current_piece_char zp ZP_BYTE:28 3.3421052631578956
(byte) current_piece_char#30 current_piece_char zp ZP_BYTE:28 6.0
(byte) current_piece_char#5 current_piece_char zp ZP_BYTE:28 0.23529411764705882
(byte) current_piece_char#68 reg byte x 50.699999999999996
(byte) current_piece_char#68 current_piece_char#68 zp ZP_BYTE:11 50.699999999999996
(byte*) current_piece_gfx
(byte*) current_piece_gfx#112 current_piece_gfx zp ZP_WORD:30 187.38888888888889
(byte*~) current_piece_gfx#118 current_piece_gfx#118 zp ZP_WORD:5 2.0
@ -362,10 +362,10 @@
(byte) current_xpos#6 current_xpos zp ZP_BYTE:32 4.0
(byte) current_xpos#8 current_xpos zp ZP_BYTE:32 4.0
(byte) current_ypos
(byte~) current_ypos#104 reg byte y 1.0
(byte~) current_ypos#105 reg byte y 4.4
(byte~) current_ypos#104 reg byte x 1.0
(byte~) current_ypos#105 reg byte x 4.4
(byte) current_ypos#11 current_ypos zp ZP_BYTE:16 3.297297297297297
(byte) current_ypos#13 reg byte y 15.0
(byte) current_ypos#13 reg byte x 15.0
(byte) current_ypos#19 current_ypos zp ZP_BYTE:16 1.683544303797468
(byte) current_ypos#3 current_ypos zp ZP_BYTE:16 4.0
(byte) current_ypos#39 current_ypos zp ZP_BYTE:16 6.0
@ -551,12 +551,12 @@
(byte) main::render#1 reg byte a 202.0
(byte) next_piece_idx
(byte) next_piece_idx#10 next_piece_idx zp ZP_BYTE:33 2.608695652173914
(byte) next_piece_idx#12 reg byte y 3.4
(byte) next_piece_idx#12 reg byte x 3.4
(byte) next_piece_idx#16 next_piece_idx zp ZP_BYTE:33 3.3421052631578956
(byte) next_piece_idx#17 next_piece_idx zp ZP_BYTE:33 6.0
(byte) next_piece_idx#31 next_piece_idx zp ZP_BYTE:33 6.0
(byte~) next_piece_idx#84 reg byte y 4.0
(byte~) next_piece_idx#85 reg byte y 22.0
(byte~) next_piece_idx#84 reg byte x 4.0
(byte~) next_piece_idx#85 reg byte x 22.0
(byte()) play_collision((byte) play_collision::xpos , (byte) play_collision::ypos , (byte) play_collision::orientation)
(byte~) play_collision::$7 reg byte a 20002.0
(label) play_collision::@1
@ -636,7 +636,7 @@
(byte) play_increase_level::b4
(byte) play_increase_level::b4#0 reg byte a 4004.0
(void()) play_init()
(byte~) play_init::$1 reg byte a 22.0
(byte~) play_init::$1 reg byte x 22.0
(label) play_init::@1
(label) play_init::@2
(label) play_init::@3
@ -650,8 +650,8 @@
(byte) play_init::idx#1 idx zp ZP_BYTE:2 7.333333333333333
(byte) play_init::idx#2 idx zp ZP_BYTE:2 6.6000000000000005
(byte) play_init::j
(byte) play_init::j#1 reg byte x 16.5
(byte) play_init::j#2 reg byte x 7.333333333333333
(byte) play_init::j#1 reg byte y 16.5
(byte) play_init::j#2 reg byte y 7.333333333333333
(byte*) play_init::pli
(byte*) play_init::pli#1 pli zp ZP_WORD:5 5.5
(byte*) play_init::pli#2 pli zp ZP_WORD:5 8.25
@ -736,8 +736,8 @@
(byte) play_move_leftright::return#0 reg byte a 4.0
(byte) play_move_leftright::return#2 reg byte a 0.6666666666666666
(byte()) play_move_rotate((byte) play_move_rotate::key_event)
(byte/signed word/word/dword/signed dword~) play_move_rotate::$2 reg byte a 4.0
(byte/signed word/word/dword/signed dword~) play_move_rotate::$4 reg byte a 4.0
(byte/signed word/word/dword/signed dword~) play_move_rotate::$2 reg byte x 4.0
(byte/signed word/word/dword/signed dword~) play_move_rotate::$4 reg byte x 4.0
(byte~) play_move_rotate::$6 reg byte a 4.0
(label) play_move_rotate::@1
(label) play_move_rotate::@11
@ -924,31 +924,31 @@
(label) render_moving::@8
(label) render_moving::@return
(byte) render_moving::c
(byte) render_moving::c#1 c zp ZP_BYTE:15 1501.5
(byte) render_moving::c#2 c zp ZP_BYTE:15 333.6666666666667
(byte) render_moving::c#1 reg byte x 1501.5
(byte) render_moving::c#2 reg byte x 333.6666666666667
(byte) render_moving::current_cell
(byte) render_moving::current_cell#0 reg byte a 1001.0
(byte) render_moving::i
(byte) render_moving::i#1 i zp ZP_BYTE:13 202.0
(byte) render_moving::i#2 i zp ZP_BYTE:13 500.5
(byte) render_moving::i#3 i zp ZP_BYTE:13 60.599999999999994
(byte) render_moving::i#4 i zp ZP_BYTE:13 1552.0
(byte) render_moving::i#8 i zp ZP_BYTE:13 300.75
(byte) render_moving::i#1 i zp ZP_BYTE:14 202.0
(byte) render_moving::i#2 i zp ZP_BYTE:14 500.5
(byte) render_moving::i#3 i zp ZP_BYTE:14 60.599999999999994
(byte) render_moving::i#4 i zp ZP_BYTE:14 1552.0
(byte) render_moving::i#8 i zp ZP_BYTE:14 300.75
(byte) render_moving::l
(byte) render_moving::l#1 l zp ZP_BYTE:12 151.5
(byte) render_moving::l#4 l zp ZP_BYTE:12 12.625
(byte) render_moving::l#1 l zp ZP_BYTE:13 151.5
(byte) render_moving::l#4 l zp ZP_BYTE:13 12.625
(byte*) render_moving::screen_line
(byte*) render_moving::screen_line#0 screen_line zp ZP_WORD:7 110.19999999999999
(byte) render_moving::xpos
(byte) render_moving::xpos#0 xpos zp ZP_BYTE:14 202.0
(byte) render_moving::xpos#1 xpos zp ZP_BYTE:14 667.3333333333334
(byte) render_moving::xpos#2 xpos zp ZP_BYTE:14 620.8
(byte) render_moving::xpos#0 xpos zp ZP_BYTE:15 202.0
(byte) render_moving::xpos#1 xpos zp ZP_BYTE:15 667.3333333333334
(byte) render_moving::xpos#2 xpos zp ZP_BYTE:15 620.8
(byte) render_moving::ypos2
(byte) render_moving::ypos2#0 ypos2 zp ZP_BYTE:11 4.0
(byte) render_moving::ypos2#1 ypos2 zp ZP_BYTE:11 67.33333333333333
(byte) render_moving::ypos2#2 ypos2 zp ZP_BYTE:11 27.06666666666667
(byte) render_moving::ypos2#0 ypos2 zp ZP_BYTE:12 4.0
(byte) render_moving::ypos2#1 ypos2 zp ZP_BYTE:12 67.33333333333333
(byte) render_moving::ypos2#2 ypos2 zp ZP_BYTE:12 27.06666666666667
(void()) render_next()
(byte~) render_next::$6 reg byte x 1.0
(byte~) render_next::$6 reg byte y 1.0
(label) render_next::@11
(label) render_next::@2
(label) render_next::@3
@ -1138,10 +1138,10 @@
(label) sprites_init::@1
(label) sprites_init::@return
(byte) sprites_init::s
(byte) sprites_init::s#1 reg byte x 16.5
(byte) sprites_init::s#2 reg byte x 8.8
(byte) sprites_init::s#1 reg byte y 16.5
(byte) sprites_init::s#2 reg byte y 8.8
(byte) sprites_init::s2
(byte) sprites_init::s2#0 reg byte a 22.0
(byte) sprites_init::s2#0 reg byte x 22.0
(byte) sprites_init::xpos
(byte) sprites_init::xpos#1 xpos zp ZP_BYTE:2 7.333333333333333
(byte) sprites_init::xpos#2 xpos zp ZP_BYTE:2 8.25
@ -1161,7 +1161,7 @@ interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
(label) sprites_irq::@return
(byte) sprites_irq::ptr
(byte) sprites_irq::ptr#0 reg byte x 2.5
(byte) sprites_irq::ptr#1 reg byte a 2.6666666666666665
(byte) sprites_irq::ptr#1 reg byte x 2.6666666666666665
(byte) sprites_irq::ptr#2 reg byte a 4.0
(byte) sprites_irq::ptr#3 reg byte a 2.6666666666666665
(byte) sprites_irq::ptr#4 reg byte a 4.0
@ -1194,17 +1194,17 @@ zp ZP_WORD:7 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_
reg byte y [ render_bcd::only_low#6 ]
reg byte x [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ]
reg byte a [ render_screen_render#15 render_screen_render#68 ]
reg byte y [ next_piece_idx#12 next_piece_idx#84 next_piece_idx#85 ]
reg byte x [ next_piece_idx#12 next_piece_idx#84 next_piece_idx#85 ]
zp ZP_BYTE:9 [ render_next::l#7 render_next::l#1 render_screen_render#33 render_screen_render#69 render_playfield::l#2 render_playfield::l#1 play_movement::return#2 play_movement::render#1 play_movement::return#0 play_movement::render#2 play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 keyboard_event_pressed::keycode#5 keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
reg byte x [ render_next::c#2 render_next::c#1 ]
reg byte y [ current_ypos#13 current_ypos#104 current_ypos#105 ]
reg byte x [ current_ypos#13 current_ypos#104 current_ypos#105 ]
zp ZP_BYTE:10 [ current_xpos#59 current_xpos#128 current_xpos#129 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 play_remove_lines::x#2 play_remove_lines::x#1 play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 keyboard_event_scan::keycode#15 render_next::next_piece_char#0 keyboard_event_pressed::row_bits#0 ]
reg byte x [ current_piece_char#68 current_piece_char#106 current_piece_char#107 ]
zp ZP_BYTE:11 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 render_playfield::c#2 render_playfield::c#1 play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 play_remove_lines::full#4 play_remove_lines::full#2 play_lock_current::i#1 keyboard_event_scan::row_scan#0 ]
zp ZP_BYTE:12 [ render_moving::l#4 render_moving::l#1 play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 play_remove_lines::c#0 ]
zp ZP_BYTE:13 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 play_collision::l#6 play_collision::l#1 ]
zp ZP_BYTE:14 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ]
zp ZP_BYTE:15 [ render_moving::c#2 render_moving::c#1 play_collision::col#2 play_collision::col#9 play_collision::col#1 ]
zp ZP_BYTE:11 [ current_piece_char#68 current_piece_char#106 current_piece_char#107 render_playfield::c#2 render_playfield::c#1 play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 play_remove_lines::full#4 play_remove_lines::full#2 play_lock_current::i#1 keyboard_event_scan::row_scan#0 ]
zp ZP_BYTE:12 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 play_remove_lines::c#0 ]
zp ZP_BYTE:13 [ render_moving::l#4 render_moving::l#1 play_collision::l#6 play_collision::l#1 ]
zp ZP_BYTE:14 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ]
zp ZP_BYTE:15 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 play_collision::col#2 play_collision::col#9 play_collision::col#1 ]
reg byte x [ render_moving::c#2 render_moving::c#1 ]
reg byte x [ render_screen_render#22 render_screen_render#70 ]
reg byte a [ play_move_rotate::return#2 ]
reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ]
@ -1235,9 +1235,9 @@ reg byte x [ keyboard_modifiers#13 keyboard_modifiers#4 keyboard_modifiers#12 ke
reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
zp ZP_BYTE:35 [ keyboard_events_size#10 keyboard_events_size#29 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#30 keyboard_events_size#2 keyboard_events_size#1 ]
reg byte a [ render_show::d018val#3 ]
reg byte x [ play_init::j#2 play_init::j#1 ]
reg byte y [ play_init::j#2 play_init::j#1 ]
reg byte x [ play_init::b#2 play_init::b#1 ]
reg byte x [ sprites_init::s#2 sprites_init::s#1 ]
reg byte y [ sprites_init::s#2 sprites_init::s#1 ]
reg byte x [ render_init::i#2 render_init::i#1 ]
reg byte x [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ]
zp ZP_BYTE:36 [ irq_raster_next#4 irq_raster_next#3 irq_raster_next#1 irq_raster_next#2 irq_raster_next#0 ]
@ -1254,7 +1254,7 @@ reg byte a [ render_bcd::$3 ]
reg byte a [ render_bcd::$4 ]
reg byte a [ render_bcd::$5 ]
reg byte a [ render_bcd::$6 ]
reg byte x [ render_next::$6 ]
reg byte y [ render_next::$6 ]
reg byte a [ render_next::cell#0 ]
reg byte a [ render_moving::$2 ]
reg byte a [ render_moving::current_cell#0 ]
@ -1269,10 +1269,10 @@ reg byte a [ play_movement::$3 ]
reg byte a [ play_move_rotate::key_event#0 ]
reg byte a [ play_move_rotate::return#0 ]
reg byte a [ play_movement::$4 ]
reg byte a [ play_move_rotate::$2 ]
reg byte x [ play_move_rotate::$2 ]
reg byte a [ play_collision::return#14 ]
reg byte a [ play_move_rotate::$6 ]
reg byte a [ play_move_rotate::$4 ]
reg byte x [ play_move_rotate::$4 ]
zp ZP_BYTE:42 [ play_collision::i#1 ]
reg byte a [ play_collision::$7 ]
reg byte a [ play_collision::return#13 ]
@ -1318,9 +1318,9 @@ reg byte a [ keyboard_event_scan::$4 ]
reg byte a [ keyboard_event_scan::event_type#0 ]
reg byte a [ keyboard_event_scan::$11 ]
reg byte a [ keyboard_matrix_read::return#0 ]
reg byte a [ play_init::$1 ]
reg byte x [ play_init::$1 ]
reg byte a [ play_init::b4#0 ]
reg byte a [ sprites_init::s2#0 ]
reg byte x [ sprites_init::s2#0 ]
reg byte a [ render_init::$13 ]
reg byte a [ render_init::$14 ]
reg byte a [ sprites_irq::ypos#0 ]
@ -1329,5 +1329,5 @@ zp ZP_BYTE:47 [ sprites_irq::raster_sprite_gfx_modify#0 ]
reg byte x [ sprites_irq::ptr#0 ]
reg byte a [ sprites_irq::ptr#3 ]
reg byte a [ sprites_irq::ptr#4 ]
reg byte a [ sprites_irq::ptr#1 ]
reg byte x [ sprites_irq::ptr#1 ]
reg byte a [ sprites_irq::ptr#2 ]

View File

@ -171,8 +171,8 @@ main: {
//SEG17 [7] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG18 [8] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #3
lda #3
cmp i
bne b1_from_b1
jmp breturn
//SEG19 main::@return

View File

@ -8,9 +8,8 @@ main: {
ldy #0
b1:
tya
clc
adc #$c
tax
axs #-$c
lda #'a'
sta screen,x
lda #BLACK

View File

@ -176,23 +176,22 @@ main: {
//SEG15 main::@1
b1:
//SEG16 [6] (byte) main::y#0 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) $c -- vbuz1=vbuz2_plus_vbuc1
lda #$c
clc
adc x
sta y
lax x
axs #-$c
stx y
//SEG17 [7] *((const byte*) main::screen#0 + (byte) main::y#0) ← (byte) 'a' -- pbuc1_derefidx_vbuz1=vbuc2
ldy y
lda #'a'
ldy y
sta screen,y
//SEG18 [8] *((const byte*) main::cols#0 + (byte) main::y#0) ← (const byte) main::BLACK#0 -- pbuc1_derefidx_vbuz1=vbuc2
ldy y
lda #BLACK
ldy y
sta cols,y
//SEG19 [9] (byte) main::x#1 ← ++ (byte) main::x#2 -- vbuz1=_inc_vbuz1
inc x
//SEG20 [10] if((byte) main::x#1!=(byte/signed byte/word/signed word/dword/signed dword) $b) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda x
cmp #$b
lda #$b
cmp x
bne b1_from_b1
jmp breturn
//SEG21 main::@return
@ -202,9 +201,8 @@ main: {
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [6] (byte) main::y#0 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) $c [ main::x#2 main::y#0 ] ( main:2 [ main::x#2 main::y#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::x#2 main::x#1 ]
Statement [7] *((const byte*) main::screen#0 + (byte) main::y#0) ← (byte) 'a' [ main::x#2 main::y#0 ] ( main:2 [ main::x#2 main::y#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::x#2 main::x#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::y#0 ]
Statement [8] *((const byte*) main::cols#0 + (byte) main::y#0) ← (const byte) main::BLACK#0 [ main::x#2 ] ( main:2 [ main::x#2 ] ) always clobbers reg byte a
Statement [6] (byte) main::y#0 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) $c [ main::x#2 main::y#0 ] ( main:2 [ main::x#2 main::y#0 ] ) always clobbers reg byte a
@ -217,8 +215,8 @@ REGISTER UPLIFT SCOPES
Uplift Scope [main] 24.75: zp ZP_BYTE:2 [ main::x#2 main::x#1 ] 16.5: zp ZP_BYTE:3 [ main::y#0 ]
Uplift Scope []
Uplifting [main] best 413 combination reg byte y [ main::x#2 main::x#1 ] reg byte x [ main::y#0 ]
Uplifting [] best 413 combination
Uplifting [main] best 393 combination reg byte y [ main::x#2 main::x#1 ] reg byte x [ main::y#0 ]
Uplifting [] best 393 combination
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 File Comments
@ -261,9 +259,8 @@ main: {
b1:
//SEG16 [6] (byte) main::y#0 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) $c -- vbuxx=vbuyy_plus_vbuc1
tya
clc
adc #$c
tax
axs #-$c
//SEG17 [7] *((const byte*) main::screen#0 + (byte) main::y#0) ← (byte) 'a' -- pbuc1_derefidx_vbuxx=vbuc2
lda #'a'
sta screen,x
@ -331,7 +328,7 @@ reg byte x [ main::y#0 ]
FINAL ASSEMBLER
Score: 311
Score: 291
//SEG0 File Comments
//SEG1 Basic Upstart
@ -360,9 +357,8 @@ main: {
b1:
//SEG16 [6] (byte) main::y#0 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) $c -- vbuxx=vbuyy_plus_vbuc1
tya
clc
adc #$c
tax
axs #-$c
//SEG17 [7] *((const byte*) main::screen#0 + (byte) main::y#0) ← (byte) 'a' -- pbuc1_derefidx_vbuxx=vbuc2
lda #'a'
sta screen,x

View File

@ -332,14 +332,14 @@ main: {
tya
sta plots,y
//SEG17 [7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #0
ldy i
sta SCREEN,y
//SEG18 [8] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG19 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #$28
lda #$28
cmp i
bne b1_from_b1
//SEG20 [10] phi from main::@1 main::@2 to main::@2 [phi:main::@1/main::@2->main::@2]
b2_from_b1:

View File

@ -338,10 +338,9 @@ sum: {
.label return_3 = 9
.label b = 2
//SEG35 [19] (byte) sum::return#3 ← (const byte) main::reverse#0 + (byte) sum::b#3 -- vbuz1=vbuc1_plus_vbuz2
lda #main.reverse
clc
adc b
sta return_3
lax b
axs #-main.reverse
stx return_3
jmp breturn
//SEG36 sum::@return
breturn:
@ -350,7 +349,6 @@ sum: {
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [19] (byte) sum::return#3 ← (const byte) main::reverse#0 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:9 [ sum::return#3 ] main:2::sum:13 [ sum::return#3 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ sum::b#3 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:3 [ sum::return#0 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:4 [ main::$0 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y ,

View File

@ -182,8 +182,8 @@ main: {
//SEG18 [8] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG19 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #3
lda #3
cmp i
bne b1_from_b1
jmp b2
//SEG20 main::@2

View File

@ -211,8 +211,8 @@ main: {
//SEG17 [7] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG18 [8] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #8
lda #8
cmp i
bne b1_from_b1
jmp breturn
//SEG19 main::@return

View File

@ -200,14 +200,14 @@ main: {
//SEG16 main::@1
b1:
//SEG17 [7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (const byte) STAR#0+(byte/signed byte/word/signed word/dword/signed dword) 1 -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #STAR+1
ldy i
sta SCREEN,y
//SEG18 [8] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG19 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $50) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #$50
lda #$50
cmp i
bne b1_from_b1
jmp breturn
//SEG20 main::@return

View File

@ -250,26 +250,22 @@ main: {
//SEG21 main::@5
b5:
//SEG22 [10] if((byte~) main::$1==(byte/signed byte/word/signed word/dword/signed dword) $1f) goto main::@2 -- vbuz1_eq_vbuc1_then_la1
lda _1
cmp #$1f
lda #$1f
cmp _1
beq b2
jmp b1_from_b5
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [8] (byte~) main::$1 ← (byte) key#1 & (byte/signed byte/word/signed word/dword/signed dword) $1f [ rpc#1 key#1 main::$1 ] ( main:2 [ rpc#1 key#1 main::$1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ rpc#4 rpc#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ key#1 ]
Statement [8] (byte~) main::$1 ← (byte) key#1 & (byte/signed byte/word/signed word/dword/signed dword) $1f [ rpc#1 key#1 main::$1 ] ( main:2 [ rpc#1 key#1 main::$1 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ rpc#4 rpc#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:3 [ key#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:2 [ rpc#4 rpc#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:3 [ key#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:4 [ main::$1 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [] 255.6: zp ZP_BYTE:2 [ rpc#4 rpc#1 ] 151.5: zp ZP_BYTE:3 [ key#1 ]
Uplift Scope [main] 101: zp ZP_BYTE:4 [ main::$1 ]
Uplifting [] best 2742 combination reg byte y [ rpc#4 rpc#1 ] reg byte x [ key#1 ]
Uplifting [] best 2542 combination reg byte y [ rpc#4 rpc#1 ] reg byte x [ key#1 ]
Uplifting [main] best 2142 combination reg byte a [ main::$1 ]
ASSEMBLER BEFORE OPTIMIZATION

View File

@ -202,8 +202,8 @@ main: {
//SEG19 [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG20 [10] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $65) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #$65
lda #$65
cmp i
bne b1_from_b1
jmp breturn
//SEG21 main::@return

View File

@ -85,19 +85,19 @@ anim: {
//signed byte xmin = 0;
//signed byte xmax = 0;
b4:
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b4
b7:
lda RASTER
cmp #$fe
lda #$fe
cmp RASTER
bne b7
b10:
lda RASTER
cmp #$fd
lda #$fd
cmp RASTER
bne b10
inc BORDERCOL
ldx sx
ldy sx
jsr calculate_matrix
jsr store_matrix
lda #0
@ -138,8 +138,8 @@ anim: {
adc yp
sta SPRITES_YPOS,x
inc i
lda i
cmp #8
lda #8
cmp i
bne b13
lda #LIGHT_GREY
sta BORDERCOL
@ -189,8 +189,7 @@ debug_print: {
lda #>print_line_cursor+print_sbyte_pos1_row*$28+print_sbyte_pos1_col
sta print_sbyte_at.at+1
jsr print_sbyte_at
lda sy
tax
ldx sy
lda #<print_line_cursor+print_sbyte_pos2_row*$28+print_sbyte_pos2_col
sta print_sbyte_at.at
lda #>print_line_cursor+print_sbyte_pos2_row*$28+print_sbyte_pos2_col
@ -202,8 +201,7 @@ debug_print: {
sta print_sbyte_at.at+1
ldx #sz
jsr print_sbyte_at
lda rotation_matrix
tax
ldx rotation_matrix
lda #<print_line_cursor+print_sbyte_pos4_row*$28+print_sbyte_pos4_col
sta print_sbyte_at.at
lda #>print_line_cursor+print_sbyte_pos4_row*$28+print_sbyte_pos4_col
@ -322,13 +320,12 @@ debug_print: {
ldy i
ldx yps,y
jsr print_sbyte_at
lda #4
clc
adc c
sta c
lax c
axs #-4
stx c
inc i
lda i
cmp #8
lda #8
cmp i
beq !b1+
jmp b1
!b1:
@ -384,9 +381,8 @@ print_byte_at: {
lda print_hextab,y
sta print_char_at.ch
jsr print_char_at
txa
and #$f
tax
lda #$f
axs #0
inc print_char_at.at
bne !+
inc print_char_at.at+1
@ -543,7 +539,7 @@ store_matrix: {
// Prepare the 3x3 rotation matrix into rotation_matrix[]
// Angles sx, sy, sz are based on 2*PI=$100
// Method described in C= Hacking Magazine Issue 8. http://www.ffd2.com/fridge/chacking/c=hacking8.txt
// calculate_matrix(signed byte register(X) sx, signed byte zeropage(3) sy)
// calculate_matrix(signed byte register(Y) sx, signed byte zeropage(3) sy)
calculate_matrix: {
.label sy = 3
.label t1 = 4
@ -555,19 +551,16 @@ calculate_matrix: {
.label t8 = $e
.label t9 = $f
.label t10 = $10
lda sy
sec
sbc #sz
sta t1
lda #sz
clc
adc sy
tay
txa
lax sy
axs #sz
stx t1
lax sy
axs #-sz
tya
clc
adc #sz
sta t3
txa
tya
sec
sbc #sz
sta t4
@ -576,36 +569,36 @@ calculate_matrix: {
clc
adc $ff
sta t5
txa
tya
sec
sbc t1
sta t6
txa
tya
clc
adc t1
sta t7
tya
stx $ff
txa
sty $ff
sec
sbc $ff
sta t8
txa
tya
eor #$ff
sec
adc sy
sta t9
txa
tya
clc
adc sy
sta t10
ldx t1
ldy t1
clc
lda COSH,x
adc COSH,y
sta rotation_matrix
sec
lda SINH,x
sbc SINH,y
lda SINH,y
sbc SINH,x
sta rotation_matrix+1
ldy sy
clc
@ -719,7 +712,7 @@ debug_print_init: {
.label _88 = 6
.label _91 = 6
.label _92 = 6
.label col = 4
.label j = 4
.label c = 2
.label i = 3
jsr print_cls
@ -866,12 +859,11 @@ debug_print_init: {
ldy i
ldx zs,y
jsr print_sbyte_at
ldx #0
lda #0
sta j
b2:
lda #8
clc
adc i
sta col
lax i
axs #-8
lda c
clc
adc #<at_cols
@ -879,14 +871,14 @@ debug_print_init: {
lda #>at_cols
adc #0
sta _59+1
txa
lda j
clc
adc _60
sta _60
bcc !+
inc _60+1
!:
lda col
txa
ldy #0
sta (_60),y
lda c
@ -896,14 +888,14 @@ debug_print_init: {
lda #>at_cols+$28*1
adc #0
sta _63+1
txa
lda j
clc
adc _64
sta _64
bcc !+
inc _64+1
!:
lda col
txa
ldy #0
sta (_64),y
lda c
@ -913,14 +905,14 @@ debug_print_init: {
lda #>at_cols+$28*2
adc #0
sta _67+1
txa
lda j
clc
adc _68
sta _68
bcc !+
inc _68+1
!:
lda col
txa
ldy #0
sta (_68),y
lda c
@ -930,14 +922,14 @@ debug_print_init: {
lda #>at_cols+$28*3
adc #0
sta _71+1
txa
lda j
clc
adc _72
sta _72
bcc !+
inc _72+1
!:
lda col
txa
ldy #0
sta (_72),y
lda c
@ -947,14 +939,14 @@ debug_print_init: {
lda #>at_cols+$28*4
adc #0
sta _75+1
txa
lda j
clc
adc _76
sta _76
bcc !+
inc _76+1
!:
lda col
txa
ldy #0
sta (_76),y
lda c
@ -964,14 +956,14 @@ debug_print_init: {
lda #>at_cols+$28*5
adc #0
sta _79+1
txa
lda j
clc
adc _80
sta _80
bcc !+
inc _80+1
!:
lda col
txa
ldy #0
sta (_80),y
lda c
@ -981,14 +973,14 @@ debug_print_init: {
lda #>at_cols+$28*6
adc #0
sta _83+1
txa
lda j
clc
adc _84
sta _84
bcc !+
inc _84+1
!:
lda col
txa
ldy #0
sta (_84),y
lda c
@ -998,14 +990,14 @@ debug_print_init: {
lda #>at_cols+$28*7
adc #0
sta _87+1
txa
lda j
clc
adc _88
sta _88
bcc !+
inc _88+1
!:
lda col
txa
ldy #0
sta (_88),y
lda c
@ -1015,28 +1007,28 @@ debug_print_init: {
lda #>at_cols+$28*8
adc #0
sta _91+1
txa
lda j
clc
adc _92
sta _92
bcc !+
inc _92+1
!:
lda col
txa
ldy #0
sta (_92),y
inx
cpx #4
inc j
lda #4
cmp j
beq !b2+
jmp b2
!b2:
lda #4
clc
adc c
sta c
lax c
axs #-4
stx c
inc i
lda i
cmp #8
lda #8
cmp i
beq !b1+
jmp b1
!b1:

File diff suppressed because it is too large Load Diff

View File

@ -161,7 +161,7 @@
(signed byte~) calculate_matrix::$34 reg byte a 4.0
(label) calculate_matrix::@return
(signed byte) calculate_matrix::sx
(signed byte) calculate_matrix::sx#0 reg byte x 2.4545454545454546
(signed byte) calculate_matrix::sx#0 reg byte y 2.4545454545454546
(signed byte) calculate_matrix::sy
(signed byte) calculate_matrix::sy#0 sy zp ZP_BYTE:3 1.5333333333333332
(signed byte) calculate_matrix::sz
@ -170,7 +170,7 @@
(signed byte) calculate_matrix::t10
(signed byte) calculate_matrix::t10#0 t10 zp ZP_BYTE:16 0.18181818181818182
(signed byte) calculate_matrix::t2
(signed byte) calculate_matrix::t2#0 reg byte y 0.9090909090909092
(signed byte) calculate_matrix::t2#0 reg byte x 0.9090909090909092
(signed byte) calculate_matrix::t3
(signed byte) calculate_matrix::t3#0 t3 zp ZP_BYTE:5 0.29411764705882354
(signed byte) calculate_matrix::t4
@ -261,7 +261,7 @@
(byte) debug_print::print_sbyte_pos2_row
(const byte) debug_print::print_sbyte_pos2_row#0 print_sbyte_pos2_row = (byte/signed byte/word/signed word/dword/signed dword) 1
(signed byte) debug_print::print_sbyte_pos2_sb
(signed byte) debug_print::print_sbyte_pos2_sb#0 reg byte a 4.0
(signed byte) debug_print::print_sbyte_pos2_sb#0 reg byte x 4.0
(label) debug_print::print_sbyte_pos3
(byte/signed word/word/dword/signed dword~) debug_print::print_sbyte_pos3_$0
(byte*~) debug_print::print_sbyte_pos3_$1
@ -280,7 +280,7 @@
(byte) debug_print::print_sbyte_pos4_row
(const byte) debug_print::print_sbyte_pos4_row#0 print_sbyte_pos4_row = (byte/signed byte/word/signed word/dword/signed dword) 4
(signed byte) debug_print::print_sbyte_pos4_sb
(signed byte) debug_print::print_sbyte_pos4_sb#0 reg byte a 4.0
(signed byte) debug_print::print_sbyte_pos4_sb#0 reg byte x 4.0
(label) debug_print::print_sbyte_pos5
(byte/signed word/word/dword/signed dword~) debug_print::print_sbyte_pos5_$0
(byte*~) debug_print::print_sbyte_pos5_$1
@ -378,13 +378,13 @@
(byte) debug_print_init::c#1 c zp ZP_BYTE:2 7.333333333333333
(byte) debug_print_init::c#2 c zp ZP_BYTE:2 23.512195121951223
(byte) debug_print_init::col
(byte) debug_print_init::col#0 col zp ZP_BYTE:4 37.40740740740741
(byte) debug_print_init::col#0 reg byte x 37.40740740740741
(byte) debug_print_init::i
(byte) debug_print_init::i#1 i zp ZP_BYTE:3 16.5
(byte) debug_print_init::i#2 i zp ZP_BYTE:3 3.7142857142857144
(byte) debug_print_init::j
(byte) debug_print_init::j#1 reg byte x 151.5
(byte) debug_print_init::j#2 reg byte x 38.31034482758621
(byte) debug_print_init::j#1 j zp ZP_BYTE:4 151.5
(byte) debug_print_init::j#2 j zp ZP_BYTE:4 38.31034482758621
(const string) debug_print_init::str str = (string) "sx@"
(const string) debug_print_init::str1 str1 = (string) "sy@"
(const string) debug_print_init::str10 str10 = (string) "xp@"
@ -557,22 +557,21 @@
zp ZP_BYTE:2 [ sx#10 sx#3 debug_print_init::c#2 debug_print_init::c#1 ]
zp ZP_BYTE:3 [ sy#10 sy#3 calculate_matrix::sy#0 debug_print_init::i#2 debug_print_init::i#1 ]
zp ZP_BYTE:4 [ anim::i#2 anim::i#1 debug_print::c#2 debug_print::c#1 calculate_matrix::t1#0 debug_print_init::col#0 ]
zp ZP_BYTE:4 [ anim::i#2 anim::i#1 debug_print::c#2 debug_print::c#1 debug_print_init::j#2 debug_print_init::j#1 calculate_matrix::t1#0 ]
zp ZP_BYTE:5 [ debug_print::i#2 debug_print::i#1 rotate_matrix::y#0 calculate_matrix::t3#0 ]
zp ZP_WORD:6 [ print_sbyte_at::at#21 print_sbyte_at::at#15 print_sbyte_at::at#16 print_sbyte_at::at#17 print_sbyte_at::at#18 print_sbyte_at::at#19 print_sbyte_at::at#20 print_sbyte_at::at#0 print_sbyte_at::at#1 print_sbyte_at::at#2 print_char_at::at#4 print_char_at::at#2 print_char_at::at#3 print_char_at::at#0 print_char_at::at#1 print_byte_at::at#0 print_str_at::str#13 print_str_at::str#15 print_str_at::str#0 print_cls::sc#2 print_cls::sc#1 debug_print_init::$59 debug_print_init::$60 debug_print_init::$63 debug_print_init::$64 debug_print_init::$67 debug_print_init::$68 debug_print_init::$71 debug_print_init::$72 debug_print_init::$75 debug_print_init::$76 debug_print_init::$79 debug_print_init::$80 debug_print_init::$83 debug_print_init::$84 debug_print_init::$87 debug_print_init::$88 debug_print_init::$91 debug_print_init::$92 ]
reg byte x [ print_sbyte_at::b#24 print_sbyte_at::b#0 print_sbyte_at::b#22 print_sbyte_at::b#16 print_sbyte_at::b#17 print_sbyte_at::b#18 print_sbyte_at::b#19 print_sbyte_at::b#20 print_sbyte_at::b#21 print_sbyte_at::b#4 print_sbyte_at::b#13 print_sbyte_at::b#14 print_sbyte_at::b#15 print_sbyte_at::b#5 print_sbyte_at::b#7 print_sbyte_at::b#8 print_sbyte_at::b#9 print_sbyte_at::b#10 print_sbyte_at::b#11 print_sbyte_at::b#12 print_sbyte_at::b#1 print_sbyte_at::b#2 print_sbyte_at::b#3 ]
zp ZP_BYTE:8 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 rotate_matrix::z#0 calculate_matrix::t4#0 ]
reg byte x [ debug_print_init::j#2 debug_print_init::j#1 ]
zp ZP_WORD:9 [ print_str_at::at#13 print_str_at::at#15 print_str_at::at#0 ]
reg byte x [ sprites_init::i#2 sprites_init::i#1 ]
reg byte x [ calculate_matrix::sx#0 ]
reg byte y [ calculate_matrix::sx#0 ]
reg byte x [ rotate_matrix::x#0 ]
reg byte x [ anim::i2#0 ]
reg byte a [ anim::$8 ]
reg byte a [ anim::$10 ]
reg byte x [ debug_print::print_sbyte_pos1_sb#0 ]
reg byte a [ debug_print::print_sbyte_pos2_sb#0 ]
reg byte a [ debug_print::print_sbyte_pos4_sb#0 ]
reg byte x [ debug_print::print_sbyte_pos2_sb#0 ]
reg byte x [ debug_print::print_sbyte_pos4_sb#0 ]
reg byte x [ debug_print::print_sbyte_pos5_sb#0 ]
reg byte x [ debug_print::print_sbyte_pos6_sb#0 ]
reg byte x [ debug_print::print_sbyte_pos7_sb#0 ]
@ -583,7 +582,7 @@ reg byte x [ debug_print::print_sbyte_pos11_sb#0 ]
reg byte x [ debug_print::print_sbyte_pos12_sb#0 ]
reg byte a [ print_byte_at::$0 ]
reg byte x [ print_byte_at::$2 ]
reg byte y [ calculate_matrix::t2#0 ]
reg byte x [ calculate_matrix::t2#0 ]
zp ZP_BYTE:11 [ calculate_matrix::t5#0 ]
zp ZP_BYTE:12 [ calculate_matrix::t6#0 ]
zp ZP_BYTE:13 [ calculate_matrix::t7#0 ]
@ -615,3 +614,4 @@ reg byte a [ calculate_matrix::$31 ]
reg byte a [ calculate_matrix::$32 ]
reg byte a [ calculate_matrix::$33 ]
reg byte a [ calculate_matrix::$34 ]
reg byte x [ debug_print_init::col#0 ]

View File

@ -146,10 +146,9 @@ print_byte: {
tay
lda print_hextab,y
jsr print_char
txa
and #$f
tay
lda print_hextab,y
lda #$f
axs #0
lda print_hextab,x
jsr print_char
rts
}
@ -255,16 +254,14 @@ mulf_init: {
sta mulf_sqr1+$100,x
txa
eor #$ff
clc
adc #1
tay
iny
lda val
sta mulf_sqr1,y
txa
eor #$ff
clc
adc #1
tay
iny
lda val
sta mulf_sqr1+$100,y
sta mulf_sqr2+1,x

View File

@ -2464,8 +2464,8 @@ mulf_init: {
//SEG207 [102] (byte) mulf_init::i#1 ← ++ (byte) mulf_init::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG208 [103] if((byte) mulf_init::i#1!=(byte/word/signed word/dword/signed dword) $81) goto mulf_init::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #$81
lda #$81
cmp i
bne b1_from_b1
jmp breturn
//SEG209 mulf_init::@return
@ -2600,22 +2600,22 @@ Uplift Scope [main]
Uplift Scope [do_perspective]
Uplift Scope [perspective]
Uplifting [mulf_init] best 4498 combination reg byte x [ mulf_init::i#2 mulf_init::i#1 ] reg byte a [ mulf_init::$2 ] reg byte a [ mulf_init::$4 ] reg byte a [ mulf_init::$8 ] zp ZP_BYTE:24 [ mulf_init::$10 ] zp ZP_WORD:16 [ mulf_init::add#2 mulf_init::add#1 ] zp ZP_BYTE:20 [ mulf_init::val#0 ] zp ZP_WORD:13 [ mulf_init::sqr#2 mulf_init::sqr#1 ]
Uplifting [mulf_init] best 4458 combination reg byte x [ mulf_init::i#2 mulf_init::i#1 ] reg byte y [ mulf_init::$2 ] reg byte y [ mulf_init::$4 ] reg byte a [ mulf_init::$8 ] zp ZP_BYTE:24 [ mulf_init::$10 ] zp ZP_WORD:16 [ mulf_init::add#2 mulf_init::add#1 ] zp ZP_BYTE:20 [ mulf_init::val#0 ] zp ZP_WORD:13 [ mulf_init::sqr#2 mulf_init::sqr#1 ]
Limited combination testing to 100 combinations of 2304 possible.
Uplifting [] best 4498 combination zp ZP_WORD:2 [ print_line_cursor#11 print_line_cursor#1 ] zp ZP_WORD:8 [ print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ]
Uplifting [print_str] best 4498 combination zp ZP_WORD:4 [ print_str::str#7 print_str::str#9 print_str::str#0 ]
Uplifting [print_cls] best 4498 combination zp ZP_WORD:11 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [print_byte] best 4479 combination reg byte x [ print_byte::b#3 print_byte::b#5 print_byte::b#6 print_byte::b#7 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ]
Uplifting [print_char] best 4464 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
Uplifting [print_sbyte] best 4449 combination reg byte x [ print_sbyte::b#6 print_sbyte::b#0 print_sbyte::b#4 ]
Uplifting [print_ln] best 4449 combination
Uplifting [main] best 4449 combination
Uplifting [do_perspective] best 4449 combination
Uplifting [perspective] best 4449 combination
Uplifting [] best 4458 combination zp ZP_WORD:2 [ print_line_cursor#11 print_line_cursor#1 ] zp ZP_WORD:8 [ print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ]
Uplifting [print_str] best 4458 combination zp ZP_WORD:4 [ print_str::str#7 print_str::str#9 print_str::str#0 ]
Uplifting [print_cls] best 4458 combination zp ZP_WORD:11 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [print_byte] best 4437 combination reg byte x [ print_byte::b#3 print_byte::b#5 print_byte::b#6 print_byte::b#7 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ]
Uplifting [print_char] best 4422 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
Uplifting [print_sbyte] best 4407 combination reg byte x [ print_sbyte::b#6 print_sbyte::b#0 print_sbyte::b#4 ]
Uplifting [print_ln] best 4407 combination
Uplifting [main] best 4407 combination
Uplifting [do_perspective] best 4407 combination
Uplifting [perspective] best 4407 combination
Attempting to uplift remaining variables inzp ZP_BYTE:24 [ mulf_init::$10 ]
Uplifting [mulf_init] best 4409 combination reg byte a [ mulf_init::$10 ]
Uplifting [mulf_init] best 4367 combination reg byte a [ mulf_init::$10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:20 [ mulf_init::val#0 ]
Uplifting [mulf_init] best 4409 combination zp ZP_BYTE:20 [ mulf_init::val#0 ]
Uplifting [mulf_init] best 4367 combination zp ZP_BYTE:20 [ mulf_init::val#0 ]
Coalescing zero page register [ zp ZP_WORD:2 [ print_line_cursor#11 print_line_cursor#1 ] ] with [ zp ZP_WORD:4 [ print_str::str#7 print_str::str#9 print_str::str#0 ] ]
Coalescing zero page register [ zp ZP_WORD:2 [ print_line_cursor#11 print_line_cursor#1 print_str::str#7 print_str::str#9 print_str::str#0 ] ] with [ zp ZP_WORD:11 [ print_cls::sc#2 print_cls::sc#1 ] ]
Coalescing zero page register [ zp ZP_WORD:2 [ print_line_cursor#11 print_line_cursor#1 print_str::str#7 print_str::str#9 print_str::str#0 print_cls::sc#2 print_cls::sc#1 ] ] with [ zp ZP_WORD:13 [ mulf_init::sqr#2 mulf_init::sqr#1 ] ]
@ -2977,12 +2977,11 @@ print_byte: {
jmp b1
//SEG124 print_byte::@1
b1:
//SEG125 [55] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word/dword/signed dword) $f -- vbuaa=vbuxx_band_vbuc1
txa
and #$f
//SEG126 [56] (byte) print_char::ch#3 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuaa
tay
lda print_hextab,y
//SEG125 [55] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word/dword/signed dword) $f -- vbuxx=vbuxx_band_vbuc1
lda #$f
axs #0
//SEG126 [56] (byte) print_char::ch#3 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx
lda print_hextab,x
//SEG127 [57] call print_char
//SEG128 [59] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
print_char_from_b1:
@ -3191,22 +3190,20 @@ mulf_init: {
//SEG194 [89] *((const byte[$200]) mulf_sqr1#0+(word/signed word/dword/signed dword) $100 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0 -- pbuc1_derefidx_vbuxx=vbuz1
lda val
sta mulf_sqr1+$100,x
//SEG195 [90] (byte~) mulf_init::$2 ← - (byte) mulf_init::i#2 -- vbuaa=_neg_vbuxx
//SEG195 [90] (byte~) mulf_init::$2 ← - (byte) mulf_init::i#2 -- vbuyy=_neg_vbuxx
txa
eor #$ff
clc
adc #1
//SEG196 [91] *((const byte[$200]) mulf_sqr1#0 + (byte~) mulf_init::$2) ← (byte) mulf_init::val#0 -- pbuc1_derefidx_vbuaa=vbuz1
tay
iny
//SEG196 [91] *((const byte[$200]) mulf_sqr1#0 + (byte~) mulf_init::$2) ← (byte) mulf_init::val#0 -- pbuc1_derefidx_vbuyy=vbuz1
lda val
sta mulf_sqr1,y
//SEG197 [92] (byte~) mulf_init::$4 ← - (byte) mulf_init::i#2 -- vbuaa=_neg_vbuxx
//SEG197 [92] (byte~) mulf_init::$4 ← - (byte) mulf_init::i#2 -- vbuyy=_neg_vbuxx
txa
eor #$ff
clc
adc #1
//SEG198 [93] *((const byte[$200]) mulf_sqr1#0+(word/signed word/dword/signed dword) $100 + (byte~) mulf_init::$4) ← (byte) mulf_init::val#0 -- pbuc1_derefidx_vbuaa=vbuz1
tay
iny
//SEG198 [93] *((const byte[$200]) mulf_sqr1#0+(word/signed word/dword/signed dword) $100 + (byte~) mulf_init::$4) ← (byte) mulf_init::val#0 -- pbuc1_derefidx_vbuyy=vbuz1
lda val
sta mulf_sqr1+$100,y
//SEG199 [94] *((const byte[$200]) mulf_sqr2#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0 -- pbuc1_derefidx_vbuxx=vbuz1
@ -3545,8 +3542,8 @@ FINAL SYMBOL TABLE
(label) main::@return
(void()) mulf_init()
(byte/signed word/word/dword/signed dword~) mulf_init::$10 reg byte a 22.0
(byte~) mulf_init::$2 reg byte a 22.0
(byte~) mulf_init::$4 reg byte a 22.0
(byte~) mulf_init::$2 reg byte y 22.0
(byte~) mulf_init::$4 reg byte y 22.0
(byte/signed word/word/dword/signed dword~) mulf_init::$8 reg byte a 22.0
(label) mulf_init::@1
(label) mulf_init::@return
@ -3572,7 +3569,7 @@ FINAL SYMBOL TABLE
(signed byte) perspective::z
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0
(byte~) print_byte::$2 reg byte x 4.0
(label) print_byte::@1
(label) print_byte::@return
(byte) print_byte::b
@ -3644,16 +3641,16 @@ zp ZP_WORD:4 [ print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 pri
reg byte x [ print_sbyte::b#6 print_sbyte::b#0 print_sbyte::b#4 ]
reg byte x [ mulf_init::i#2 mulf_init::i#1 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]
reg byte x [ print_byte::$2 ]
zp ZP_BYTE:6 [ mulf_init::val#0 ]
reg byte a [ mulf_init::$2 ]
reg byte a [ mulf_init::$4 ]
reg byte y [ mulf_init::$2 ]
reg byte y [ mulf_init::$4 ]
reg byte a [ mulf_init::$8 ]
reg byte a [ mulf_init::$10 ]
FINAL ASSEMBLER
Score: 3781
Score: 3739
//SEG0 File Comments
// 3D Rotation using a Rotation Matrix
@ -3928,12 +3925,11 @@ print_byte: {
//SEG123 [59] phi (byte) print_char::ch#4 = (byte) print_char::ch#2 [phi:print_byte->print_char#1] -- register_copy
jsr print_char
//SEG124 print_byte::@1
//SEG125 [55] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word/dword/signed dword) $f -- vbuaa=vbuxx_band_vbuc1
txa
and #$f
//SEG126 [56] (byte) print_char::ch#3 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuaa
tay
lda print_hextab,y
//SEG125 [55] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word/dword/signed dword) $f -- vbuxx=vbuxx_band_vbuc1
lda #$f
axs #0
//SEG126 [56] (byte) print_char::ch#3 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx
lda print_hextab,x
//SEG127 [57] call print_char
//SEG128 [59] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
//SEG129 [59] phi (byte*) print_char_cursor#44 = (byte*) print_char_cursor#12 [phi:print_byte::@1->print_char#0] -- register_copy
@ -4105,22 +4101,20 @@ mulf_init: {
sta mulf_sqr1,x
//SEG194 [89] *((const byte[$200]) mulf_sqr1#0+(word/signed word/dword/signed dword) $100 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0 -- pbuc1_derefidx_vbuxx=vbuz1
sta mulf_sqr1+$100,x
//SEG195 [90] (byte~) mulf_init::$2 ← - (byte) mulf_init::i#2 -- vbuaa=_neg_vbuxx
//SEG195 [90] (byte~) mulf_init::$2 ← - (byte) mulf_init::i#2 -- vbuyy=_neg_vbuxx
txa
eor #$ff
clc
adc #1
//SEG196 [91] *((const byte[$200]) mulf_sqr1#0 + (byte~) mulf_init::$2) ← (byte) mulf_init::val#0 -- pbuc1_derefidx_vbuaa=vbuz1
tay
iny
//SEG196 [91] *((const byte[$200]) mulf_sqr1#0 + (byte~) mulf_init::$2) ← (byte) mulf_init::val#0 -- pbuc1_derefidx_vbuyy=vbuz1
lda val
sta mulf_sqr1,y
//SEG197 [92] (byte~) mulf_init::$4 ← - (byte) mulf_init::i#2 -- vbuaa=_neg_vbuxx
//SEG197 [92] (byte~) mulf_init::$4 ← - (byte) mulf_init::i#2 -- vbuyy=_neg_vbuxx
txa
eor #$ff
clc
adc #1
//SEG198 [93] *((const byte[$200]) mulf_sqr1#0+(word/signed word/dword/signed dword) $100 + (byte~) mulf_init::$4) ← (byte) mulf_init::val#0 -- pbuc1_derefidx_vbuaa=vbuz1
tay
iny
//SEG198 [93] *((const byte[$200]) mulf_sqr1#0+(word/signed word/dword/signed dword) $100 + (byte~) mulf_init::$4) ← (byte) mulf_init::val#0 -- pbuc1_derefidx_vbuyy=vbuz1
lda val
sta mulf_sqr1+$100,y
//SEG199 [94] *((const byte[$200]) mulf_sqr2#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0 -- pbuc1_derefidx_vbuxx=vbuz1

View File

@ -112,8 +112,8 @@
(label) main::@return
(void()) mulf_init()
(byte/signed word/word/dword/signed dword~) mulf_init::$10 reg byte a 22.0
(byte~) mulf_init::$2 reg byte a 22.0
(byte~) mulf_init::$4 reg byte a 22.0
(byte~) mulf_init::$2 reg byte y 22.0
(byte~) mulf_init::$4 reg byte y 22.0
(byte/signed word/word/dword/signed dword~) mulf_init::$8 reg byte a 22.0
(label) mulf_init::@1
(label) mulf_init::@return
@ -139,7 +139,7 @@
(signed byte) perspective::z
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0
(byte~) print_byte::$2 reg byte x 4.0
(label) print_byte::@1
(label) print_byte::@return
(byte) print_byte::b
@ -211,9 +211,9 @@ zp ZP_WORD:4 [ print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 pri
reg byte x [ print_sbyte::b#6 print_sbyte::b#0 print_sbyte::b#4 ]
reg byte x [ mulf_init::i#2 mulf_init::i#1 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]
reg byte x [ print_byte::$2 ]
zp ZP_BYTE:6 [ mulf_init::val#0 ]
reg byte a [ mulf_init::$2 ]
reg byte a [ mulf_init::$4 ]
reg byte y [ mulf_init::$2 ]
reg byte y [ mulf_init::$4 ]
reg byte a [ mulf_init::$8 ]
reg byte a [ mulf_init::$10 ]

View File

@ -357,8 +357,8 @@ bitmap_clear: {
cpx #$c8
bne b2
inc y
lda y
cmp #$28
lda #$28
cmp y
bne b1
rts
}
@ -391,9 +391,8 @@ bitmap_init: {
sta yoffs+1
tax
b3:
txa
and #7
sta _6
lda #7
sax _6
lda yoffs
ora _6
sta bitmap_plot_ylo,x

View File

@ -3704,8 +3704,8 @@ bitmap_clear: {
//SEG319 [166] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2 -- vbuz1=_inc_vbuz1
inc x
//SEG320 [167] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) $c8) goto bitmap_clear::@2 -- vbuz1_neq_vbuc1_then_la1
lda x
cmp #$c8
lda #$c8
cmp x
bne b2_from_b2
jmp b3
//SEG321 bitmap_clear::@3
@ -3713,8 +3713,8 @@ bitmap_clear: {
//SEG322 [168] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4 -- vbuz1=_inc_vbuz1
inc y
//SEG323 [169] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto bitmap_clear::@1 -- vbuz1_neq_vbuc1_then_la1
lda y
cmp #$28
lda #$28
cmp y
bne b1_from_b3
jmp breturn
//SEG324 bitmap_clear::@return
@ -3760,8 +3760,8 @@ bitmap_init: {
ldy x
sta bitmap_plot_xlo,y
//SEG336 [175] *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_init::x#2) ← >(const byte*) BITMAP#0 -- pbuc1_derefidx_vbuz1=vbuc2
ldy x
lda #>BITMAP
ldy x
sta bitmap_plot_xhi,y
//SEG337 [176] *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuz1=vbuz2
lda bits
@ -3832,8 +3832,8 @@ bitmap_init: {
and y
sta _10
//SEG359 [190] if((byte~) bitmap_init::$10!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1
lda _10
cmp #7
lda #7
cmp _10
bne b4_from_b3
jmp b7
//SEG360 bitmap_init::@7
@ -3979,15 +3979,12 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ b
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ bitmap_clear::x#2 bitmap_clear::x#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:34 [ bitmap_clear::x#2 bitmap_clear::x#1 ]
Statement [173] (byte~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (byte/word/signed word/dword/signed dword) $f8 [ bitmap_init::x#2 bitmap_init::bits#3 bitmap_init::$0 ] ( main:2::bitmap_init:8 [ bitmap_init::x#2 bitmap_init::bits#3 bitmap_init::$0 ] ) always clobbers reg byte a
Statement [175] *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_init::x#2) ← >(const byte*) BITMAP#0 [ bitmap_init::x#2 bitmap_init::bits#3 ] ( main:2::bitmap_init:8 [ bitmap_init::x#2 bitmap_init::bits#3 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:35 [ bitmap_init::x#2 bitmap_init::x#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:36 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
Statement [175] *((const byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_init::x#2) ← >(const byte*) BITMAP#0 [ bitmap_init::x#2 bitmap_init::bits#3 ] ( main:2::bitmap_init:8 [ bitmap_init::x#2 bitmap_init::bits#3 ] ) always clobbers reg byte a
Statement [176] *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::x#2 bitmap_init::bits#3 ] ( main:2::bitmap_init:8 [ bitmap_init::x#2 bitmap_init::bits#3 ] ) always clobbers reg byte a
Statement [183] (byte~) bitmap_init::$6 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ( main:2::bitmap_init:8 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:37 [ bitmap_init::y#2 bitmap_init::y#1 ]
Statement [189] (byte~) bitmap_init::$10 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$10 ] ( main:2::bitmap_init:8 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$10 ] ) always clobbers reg byte a
Statement [191] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:37 [ bitmap_init::y#2 bitmap_init::y#1 ]
Statement [4] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [5] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [6] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
@ -4112,89 +4109,89 @@ Uplifting [bitmap_line_ydxd] best 274457 combination zp ZP_BYTE:28 [ bitmap_line
Limited combination testing to 100 combinations of 256 possible.
Uplifting [bitmap_clear] best 273557 combination zp ZP_WORD:32 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:61 [ bitmap_clear::$3 ]
Uplifting [lines] best 273557 combination zp ZP_BYTE:2 [ lines::l#2 lines::l#1 ]
Uplifting [bitmap_init] best 273047 combination zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$0 ] zp ZP_BYTE:65 [ bitmap_init::$7 ] zp ZP_BYTE:66 [ bitmap_init::$8 ] zp ZP_BYTE:67 [ bitmap_init::$9 ] zp ZP_BYTE:68 [ bitmap_init::$10 ] zp ZP_BYTE:64 [ bitmap_init::$6 ]
Uplifting [bitmap_init] best 273007 combination zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$0 ] zp ZP_BYTE:65 [ bitmap_init::$7 ] zp ZP_BYTE:66 [ bitmap_init::$8 ] zp ZP_BYTE:67 [ bitmap_init::$9 ] zp ZP_BYTE:68 [ bitmap_init::$10 ] zp ZP_BYTE:64 [ bitmap_init::$6 ]
Limited combination testing to 100 combinations of 138240 possible.
Uplifting [init_screen] best 273047 combination zp ZP_WORD:29 [ init_screen::c#2 init_screen::c#1 ]
Uplifting [bitmap_line] best 272733 combination reg byte y [ bitmap_line::y1#0 ] zp ZP_BYTE:42 [ bitmap_line::y0#0 ] zp ZP_BYTE:41 [ bitmap_line::x1#0 ] zp ZP_BYTE:40 [ bitmap_line::x0#0 ] zp ZP_BYTE:45 [ bitmap_line::yd#2 ] zp ZP_BYTE:46 [ bitmap_line::yd#1 ] zp ZP_BYTE:48 [ bitmap_line::yd#10 ] zp ZP_BYTE:49 [ bitmap_line::yd#11 ] zp ZP_BYTE:44 [ bitmap_line::xd#2 ] zp ZP_BYTE:47 [ bitmap_line::xd#1 ]
Uplifting [init_screen] best 273007 combination zp ZP_WORD:29 [ init_screen::c#2 init_screen::c#1 ]
Uplifting [bitmap_line] best 272693 combination reg byte y [ bitmap_line::y1#0 ] zp ZP_BYTE:42 [ bitmap_line::y0#0 ] zp ZP_BYTE:41 [ bitmap_line::x1#0 ] zp ZP_BYTE:40 [ bitmap_line::x0#0 ] zp ZP_BYTE:45 [ bitmap_line::yd#2 ] zp ZP_BYTE:46 [ bitmap_line::yd#1 ] zp ZP_BYTE:48 [ bitmap_line::yd#10 ] zp ZP_BYTE:49 [ bitmap_line::yd#11 ] zp ZP_BYTE:44 [ bitmap_line::xd#2 ] zp ZP_BYTE:47 [ bitmap_line::xd#1 ]
Limited combination testing to 100 combinations of 186624 possible.
Uplifting [main] best 272733 combination
Uplifting [] best 272733 combination
Uplifting [main] best 272693 combination
Uplifting [] best 272693 combination
Attempting to uplift remaining variables inzp ZP_BYTE:8 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ]
Uplifting [bitmap_line_xdyi] best 272733 combination zp ZP_BYTE:8 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ]
Uplifting [bitmap_line_xdyi] best 272693 combination zp ZP_BYTE:8 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:16 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ]
Uplifting [bitmap_line_ydxi] best 272733 combination zp ZP_BYTE:16 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ]
Uplifting [bitmap_line_ydxi] best 272693 combination zp ZP_BYTE:16 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:22 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ]
Uplifting [bitmap_line_xdyd] best 272733 combination zp ZP_BYTE:22 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ]
Uplifting [bitmap_line_xdyd] best 272693 combination zp ZP_BYTE:22 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:28 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ]
Uplifting [bitmap_line_ydxd] best 272733 combination zp ZP_BYTE:28 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ]
Uplifting [bitmap_line_ydxd] best 272693 combination zp ZP_BYTE:28 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ]
Uplifting [bitmap_line_xdyi] best 272733 combination zp ZP_BYTE:7 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ]
Uplifting [bitmap_line_xdyi] best 272693 combination zp ZP_BYTE:7 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:21 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ]
Uplifting [bitmap_line_xdyd] best 272733 combination zp ZP_BYTE:21 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ]
Uplifting [bitmap_line_xdyd] best 272693 combination zp ZP_BYTE:21 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:50 [ bitmap_line_xdyi::$6 ]
Uplifting [bitmap_line_xdyi] best 272733 combination zp ZP_BYTE:50 [ bitmap_line_xdyi::$6 ]
Uplifting [bitmap_line_xdyi] best 272693 combination zp ZP_BYTE:50 [ bitmap_line_xdyi::$6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:59 [ bitmap_line_xdyd::$6 ]
Uplifting [bitmap_line_xdyd] best 272733 combination zp ZP_BYTE:59 [ bitmap_line_xdyd::$6 ]
Uplifting [bitmap_line_xdyd] best 272693 combination zp ZP_BYTE:59 [ bitmap_line_xdyd::$6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:15 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#2 ]
Uplifting [bitmap_line_ydxi] best 272733 combination zp ZP_BYTE:15 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#2 ]
Uplifting [bitmap_line_ydxi] best 272693 combination zp ZP_BYTE:15 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:27 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ]
Uplifting [bitmap_line_ydxd] best 272733 combination zp ZP_BYTE:27 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ]
Uplifting [bitmap_line_ydxd] best 272693 combination zp ZP_BYTE:27 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ lines::l#2 lines::l#1 ]
Uplifting [lines] best 272733 combination zp ZP_BYTE:2 [ lines::l#2 lines::l#1 ]
Uplifting [lines] best 272693 combination zp ZP_BYTE:2 [ lines::l#2 lines::l#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#1 bitmap_line_xdyi::xd#0 ]
Uplifting [bitmap_line_xdyi] best 272733 combination zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#1 bitmap_line_xdyi::xd#0 ]
Uplifting [bitmap_line_xdyi] best 272693 combination zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#1 bitmap_line_xdyi::xd#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:12 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#0 bitmap_line_ydxi::yd#1 ]
Uplifting [bitmap_line_ydxi] best 272733 combination zp ZP_BYTE:12 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#0 bitmap_line_ydxi::yd#1 ]
Uplifting [bitmap_line_ydxi] best 272693 combination zp ZP_BYTE:12 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#0 bitmap_line_ydxi::yd#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:18 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#1 bitmap_line_xdyd::xd#0 ]
Uplifting [bitmap_line_xdyd] best 272733 combination zp ZP_BYTE:18 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#1 bitmap_line_xdyd::xd#0 ]
Uplifting [bitmap_line_xdyd] best 272693 combination zp ZP_BYTE:18 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#1 bitmap_line_xdyd::xd#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:24 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ]
Uplifting [bitmap_line_ydxd] best 272733 combination zp ZP_BYTE:24 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ]
Uplifting [bitmap_line_ydxd] best 272693 combination zp ZP_BYTE:24 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 ]
Uplifting [bitmap_line_xdyi] best 272733 combination zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 ]
Uplifting [bitmap_line_xdyi] best 272693 combination zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:11 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#0 bitmap_line_ydxi::xd#1 ]
Uplifting [bitmap_line_ydxi] best 272733 combination zp ZP_BYTE:11 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#0 bitmap_line_ydxi::xd#1 ]
Uplifting [bitmap_line_ydxi] best 272693 combination zp ZP_BYTE:11 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#0 bitmap_line_ydxi::xd#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:17 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#1 bitmap_line_xdyd::yd#0 ]
Uplifting [bitmap_line_xdyd] best 272733 combination zp ZP_BYTE:17 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#1 bitmap_line_xdyd::yd#0 ]
Uplifting [bitmap_line_xdyd] best 272693 combination zp ZP_BYTE:17 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#1 bitmap_line_xdyd::yd#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:23 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ]
Uplifting [bitmap_line_ydxd] best 272733 combination zp ZP_BYTE:23 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ]
Uplifting [bitmap_line_ydxd] best 272693 combination zp ZP_BYTE:23 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#1 bitmap_line_xdyi::x1#0 ]
Uplifting [bitmap_line_xdyi] best 272733 combination zp ZP_BYTE:5 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#1 bitmap_line_xdyi::x1#0 ]
Uplifting [bitmap_line_xdyi] best 272693 combination zp ZP_BYTE:5 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#1 bitmap_line_xdyi::x1#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#0 bitmap_line_ydxi::y1#1 ]
Uplifting [bitmap_line_ydxi] best 272733 combination zp ZP_BYTE:13 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#0 bitmap_line_ydxi::y1#1 ]
Uplifting [bitmap_line_ydxi] best 272693 combination zp ZP_BYTE:13 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#0 bitmap_line_ydxi::y1#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:19 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#1 bitmap_line_xdyd::x1#0 ]
Uplifting [bitmap_line_xdyd] best 272733 combination zp ZP_BYTE:19 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#1 bitmap_line_xdyd::x1#0 ]
Uplifting [bitmap_line_xdyd] best 272693 combination zp ZP_BYTE:19 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#1 bitmap_line_xdyd::x1#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:25 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ]
Uplifting [bitmap_line_ydxd] best 272733 combination zp ZP_BYTE:25 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ]
Uplifting [bitmap_line_ydxd] best 272693 combination zp ZP_BYTE:25 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:65 [ bitmap_init::$7 ]
Uplifting [bitmap_init] best 272673 combination reg byte a [ bitmap_init::$7 ]
Uplifting [bitmap_init] best 272633 combination reg byte a [ bitmap_init::$7 ]
Attempting to uplift remaining variables inzp ZP_BYTE:66 [ bitmap_init::$8 ]
Uplifting [bitmap_init] best 272613 combination reg byte a [ bitmap_init::$8 ]
Uplifting [bitmap_init] best 272573 combination reg byte a [ bitmap_init::$8 ]
Attempting to uplift remaining variables inzp ZP_BYTE:67 [ bitmap_init::$9 ]
Uplifting [bitmap_init] best 272553 combination reg byte a [ bitmap_init::$9 ]
Uplifting [bitmap_init] best 272513 combination reg byte a [ bitmap_init::$9 ]
Attempting to uplift remaining variables inzp ZP_BYTE:68 [ bitmap_init::$10 ]
Uplifting [bitmap_init] best 272493 combination reg byte a [ bitmap_init::$10 ]
Uplifting [bitmap_init] best 272473 combination reg byte a [ bitmap_init::$10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ]
Uplifting [bitmap_clear] best 272493 combination zp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ]
Uplifting [bitmap_clear] best 272473 combination zp ZP_BYTE:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:64 [ bitmap_init::$6 ]
Uplifting [bitmap_init] best 272493 combination zp ZP_BYTE:64 [ bitmap_init::$6 ]
Uplifting [bitmap_init] best 272473 combination zp ZP_BYTE:64 [ bitmap_init::$6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:42 [ bitmap_line::y0#0 ]
Uplifting [bitmap_line] best 272493 combination zp ZP_BYTE:42 [ bitmap_line::y0#0 ]
Uplifting [bitmap_line] best 272473 combination zp ZP_BYTE:42 [ bitmap_line::y0#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:41 [ bitmap_line::x1#0 ]
Uplifting [bitmap_line] best 272493 combination zp ZP_BYTE:41 [ bitmap_line::x1#0 ]
Uplifting [bitmap_line] best 272473 combination zp ZP_BYTE:41 [ bitmap_line::x1#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:40 [ bitmap_line::x0#0 ]
Uplifting [bitmap_line] best 272493 combination zp ZP_BYTE:40 [ bitmap_line::x0#0 ]
Uplifting [bitmap_line] best 272473 combination zp ZP_BYTE:40 [ bitmap_line::x0#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:45 [ bitmap_line::yd#2 ]
Uplifting [bitmap_line] best 272493 combination zp ZP_BYTE:45 [ bitmap_line::yd#2 ]
Uplifting [bitmap_line] best 272473 combination zp ZP_BYTE:45 [ bitmap_line::yd#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:46 [ bitmap_line::yd#1 ]
Uplifting [bitmap_line] best 272493 combination zp ZP_BYTE:46 [ bitmap_line::yd#1 ]
Uplifting [bitmap_line] best 272473 combination zp ZP_BYTE:46 [ bitmap_line::yd#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:48 [ bitmap_line::yd#10 ]
Uplifting [bitmap_line] best 272493 combination zp ZP_BYTE:48 [ bitmap_line::yd#10 ]
Uplifting [bitmap_line] best 272473 combination zp ZP_BYTE:48 [ bitmap_line::yd#10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:49 [ bitmap_line::yd#11 ]
Uplifting [bitmap_line] best 272493 combination zp ZP_BYTE:49 [ bitmap_line::yd#11 ]
Uplifting [bitmap_line] best 272473 combination zp ZP_BYTE:49 [ bitmap_line::yd#11 ]
Attempting to uplift remaining variables inzp ZP_BYTE:44 [ bitmap_line::xd#2 ]
Uplifting [bitmap_line] best 272493 combination zp ZP_BYTE:44 [ bitmap_line::xd#2 ]
Uplifting [bitmap_line] best 272473 combination zp ZP_BYTE:44 [ bitmap_line::xd#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:47 [ bitmap_line::xd#1 ]
Uplifting [bitmap_line] best 272493 combination zp ZP_BYTE:47 [ bitmap_line::xd#1 ]
Uplifting [bitmap_line] best 272473 combination zp ZP_BYTE:47 [ bitmap_line::xd#1 ]
Coalescing zero page register with common assignment [ zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 ] ] with [ zp ZP_BYTE:45 [ bitmap_line::yd#2 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 bitmap_line::yd#2 ] ] with [ zp ZP_BYTE:49 [ bitmap_line::yd#11 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#1 bitmap_line_xdyi::xd#0 ] ] with [ zp ZP_BYTE:44 [ bitmap_line::xd#2 ] ] - score: 1
@ -5047,8 +5044,8 @@ bitmap_clear: {
//SEG322 [168] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4 -- vbuz1=_inc_vbuz1
inc y
//SEG323 [169] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto bitmap_clear::@1 -- vbuz1_neq_vbuc1_then_la1
lda y
cmp #$28
lda #$28
cmp y
bne b1_from_b3
jmp breturn
//SEG324 bitmap_clear::@return
@ -5123,9 +5120,8 @@ bitmap_init: {
//SEG351 bitmap_init::@3
b3:
//SEG352 [183] (byte~) bitmap_init::$6 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuxx_band_vbuc1
txa
and #7
sta _6
lda #7
sax _6
//SEG353 [184] (byte~) bitmap_init::$7 ← < (byte*) bitmap_init::yoffs#2 -- vbuaa=_lo_pbuz1
lda yoffs
//SEG354 [185] (byte~) bitmap_init::$8 ← (byte~) bitmap_init::$6 | (byte~) bitmap_init::$7 -- vbuaa=vbuz1_bor_vbuaa
@ -5788,7 +5784,7 @@ reg byte a [ bitmap_init::$10 ]
FINAL ASSEMBLER
Score: 221043
Score: 221023
//SEG0 File Comments
//SEG1 Basic Upstart
@ -6473,8 +6469,8 @@ bitmap_clear: {
//SEG322 [168] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4 -- vbuz1=_inc_vbuz1
inc y
//SEG323 [169] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto bitmap_clear::@1 -- vbuz1_neq_vbuc1_then_la1
lda y
cmp #$28
lda #$28
cmp y
bne b1
//SEG324 bitmap_clear::@return
//SEG325 [170] return
@ -6536,9 +6532,8 @@ bitmap_init: {
//SEG351 bitmap_init::@3
b3:
//SEG352 [183] (byte~) bitmap_init::$6 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuxx_band_vbuc1
txa
and #7
sta _6
lda #7
sax _6
//SEG353 [184] (byte~) bitmap_init::$7 ← < (byte*) bitmap_init::yoffs#2 -- vbuaa=_lo_pbuz1
lda yoffs
//SEG354 [185] (byte~) bitmap_init::$8 ← (byte~) bitmap_init::$6 | (byte~) bitmap_init::$7 -- vbuaa=vbuz1_bor_vbuaa

View File

@ -137,8 +137,8 @@ main: {
lda #$20
jsr plot_chargen
inc i
lda i
cmp #4
lda #4
cmp i
bne b2
lda #0
sta cur_pos
@ -204,8 +204,8 @@ main: {
jsr plot_chargen
b12:
inc ch
lda ch
cmp #$40
lda #$40
cmp ch
bne b10
jmp b3
str: .text "f1@"
@ -297,8 +297,8 @@ plot_chargen: {
inc sc+1
!:
inc y
lda y
cmp #8
lda #8
cmp y
bne b2
lda #$37
sta PROCPORT

View File

@ -2738,8 +2738,8 @@ main: {
//SEG55 [20] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG56 [21] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #4
lda #4
cmp i
bne b2_from_b29
//SEG57 [22] phi from main::@29 to main::@3 [phi:main::@29->main::@3]
b3_from_b29:
@ -2928,8 +2928,8 @@ main: {
lda keyboard_get_keycode.return_2
sta key
//SEG124 [54] if((byte) main::key#0==(byte/signed byte/word/signed word/dword/signed dword) $3f) goto main::@11 -- vbuz1_eq_vbuc1_then_la1
lda key
cmp #$3f
lda #$3f
cmp key
beq b11_from_b35
jmp b21
//SEG125 main::@21
@ -2992,8 +2992,8 @@ main: {
//SEG149 [65] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1
inc ch
//SEG150 [66] if((byte) main::ch#1!=(byte/signed byte/word/signed word/dword/signed dword) $40) goto main::@10 -- vbuz1_neq_vbuc1_then_la1
lda ch
cmp #$40
lda #$40
cmp ch
bne b10_from_b12
//SEG151 [22] phi from main::@12 to main::@3 [phi:main::@12->main::@3]
b3_from_b12:
@ -3211,8 +3211,8 @@ plot_chargen: {
//SEG217 [95] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2 -- vbuz1=_inc_vbuz1
inc x
//SEG218 [96] if((byte) plot_chargen::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@3 -- vbuz1_neq_vbuc1_then_la1
lda x
cmp #8
lda #8
cmp x
bne b3_from_b4
jmp b7
//SEG219 plot_chargen::@7
@ -3228,8 +3228,8 @@ plot_chargen: {
//SEG221 [98] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2 -- vbuz1=_inc_vbuz1
inc y
//SEG222 [99] if((byte) plot_chargen::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@2 -- vbuz1_neq_vbuc1_then_la1
lda y
cmp #8
lda #8
cmp y
bne b2_from_b7
jmp b8
//SEG223 plot_chargen::@8
@ -3488,9 +3488,6 @@ Statement [83] (word~) plot_chargen::$8 ← (word) mul8u::return#2 [ plot_charge
Statement [84] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) $28+(byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) plot_chargen::$8 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] ) always clobbers reg byte a
Statement [86] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ]
Statement [88] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte/word/signed word/dword/signed dword) $80 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ plot_chargen::x#2 plot_chargen::x#1 ]
Statement [92] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ]
@ -3501,14 +3498,10 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ ma
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ]
Statement [97] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte/signed byte/word/signed word/dword/signed dword) $20 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ) always clobbers reg byte a
Statement [100] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) $37 [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) always clobbers reg byte a
Statement [107] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::plot_chargen:19::mul8u:81 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::plot_chargen:64::mul8u:81 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
Statement [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:19::mul8u:81 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::plot_chargen:64::mul8u:81 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a
Statement [114] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ keyboard_key_pressed::key#6 keyboard_key_pressed::colidx#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
Statement [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte/signed byte/word/signed word/dword/signed dword) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:54 [ keyboard_key_pressed::colidx#0 ]
Statement [120] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_key_pressed::colidx#0) [ keyboard_key_pressed::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#0 ] ) always clobbers reg byte a
Statement [122] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a
Statement [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a
Statement [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y
@ -3524,15 +3517,12 @@ Statement [82] (word) mul8u::return#2 ← (word) mul8u::res#2 [ plot_chargen::ch
Statement [83] (word~) plot_chargen::$8 ← (word) mul8u::return#2 [ plot_chargen::chargen#5 plot_chargen::$8 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::$8 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::$8 ] ) always clobbers reg byte a
Statement [84] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) $28+(byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) plot_chargen::$8 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] ) always clobbers reg byte a
Statement [86] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ) always clobbers reg byte a reg byte y
Statement [88] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte/word/signed word/dword/signed dword) $80 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ) always clobbers reg byte a
Statement [92] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) always clobbers reg byte y
Statement [97] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte/signed byte/word/signed word/dword/signed dword) $20 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ) always clobbers reg byte a
Statement [100] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) $37 [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) always clobbers reg byte a
Statement [107] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::plot_chargen:19::mul8u:81 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::plot_chargen:64::mul8u:81 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a
Statement [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:19::mul8u:81 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::plot_chargen:64::mul8u:81 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a
Statement [114] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ keyboard_key_pressed::key#6 keyboard_key_pressed::colidx#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a
Statement [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte/signed byte/word/signed word/dword/signed dword) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a
Statement [120] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_key_pressed::colidx#0) [ keyboard_key_pressed::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#0 ] ) always clobbers reg byte a
Statement [122] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a
Statement [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a
Statement [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y
@ -3548,14 +3538,14 @@ Potential registers zp ZP_BYTE:10 [ plot_chargen::shift#2 plot_chargen::shift#1
Potential registers zp ZP_BYTE:11 [ plot_chargen::pos#2 plot_chargen::pos#0 plot_chargen::pos#1 ] : zp ZP_BYTE:11 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] : zp ZP_WORD:12 ,
Potential registers zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] : zp ZP_BYTE:14 , reg byte x ,
Potential registers zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] : zp ZP_BYTE:15 , reg byte x ,
Potential registers zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] : zp ZP_BYTE:15 , reg byte a , reg byte x ,
Potential registers zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] : zp ZP_WORD:16 ,
Potential registers zp ZP_BYTE:18 [ plot_chargen::x#2 plot_chargen::x#1 ] : zp ZP_BYTE:18 , reg byte x ,
Potential registers zp ZP_BYTE:18 [ plot_chargen::x#2 plot_chargen::x#1 ] : zp ZP_BYTE:18 , reg byte a , reg byte x ,
Potential registers zp ZP_BYTE:19 [ plot_chargen::c#2 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:20 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] : zp ZP_BYTE:20 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp ZP_WORD:21 ,
Potential registers zp ZP_WORD:23 [ mul8u::mb#2 mul8u::mb#1 ] : zp ZP_WORD:23 ,
Potential registers zp ZP_BYTE:25 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] : zp ZP_BYTE:25 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:25 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] : zp ZP_WORD:26 ,
Potential registers zp ZP_WORD:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] : zp ZP_WORD:28 ,
Potential registers zp ZP_BYTE:30 [ keyboard_key_pressed::return#2 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y ,
@ -3598,56 +3588,56 @@ Uplift Scope [keyboard_matrix_read] 4: zp ZP_BYTE:56 [ keyboard_matrix_read::row
Uplift Scope []
Uplifting [plot_chargen] best 819629 combination reg byte a [ plot_chargen::$10 ] reg byte x [ plot_chargen::x#2 plot_chargen::x#1 ] zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] reg byte a [ plot_chargen::c#2 ] zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] zp ZP_BYTE:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] zp ZP_BYTE:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] zp ZP_BYTE:11 [ plot_chargen::pos#2 plot_chargen::pos#0 plot_chargen::pos#1 ] zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] zp ZP_WORD:44 [ plot_chargen::$0 ] zp ZP_WORD:46 [ plot_chargen::$1 ] zp ZP_WORD:50 [ plot_chargen::$8 ]
Limited combination testing to 100 combinations of 4608 possible.
Limited combination testing to 100 combinations of 10368 possible.
Uplifting [mul8u] best 810626 combination zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:23 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp ZP_WORD:48 [ mul8u::return#2 ]
Uplifting [main] best 808826 combination reg byte a [ main::pressed#2 main::pressed#1 ] zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] reg byte a [ main::key#0 ] zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ] zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] zp ZP_BYTE:4 [ main::i#2 main::i#1 ] zp ZP_BYTE:31 [ main::$15 ] zp ZP_BYTE:33 [ main::$18 ] zp ZP_BYTE:35 [ main::$21 ] zp ZP_BYTE:37 [ main::$24 ] zp ZP_BYTE:39 [ main::$27 ] zp ZP_BYTE:6 [ main::shift#10 ]
Limited combination testing to 100 combinations of 262144 possible.
Uplifting [keyboard_key_pressed] best 807989 combination reg byte x [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] reg byte a [ keyboard_key_pressed::return#14 ] reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#10 ] zp ZP_BYTE:34 [ keyboard_key_pressed::return#11 ] zp ZP_BYTE:36 [ keyboard_key_pressed::return#12 ] zp ZP_BYTE:38 [ keyboard_key_pressed::return#13 ] zp ZP_BYTE:59 [ keyboard_key_pressed::return#0 ] zp ZP_BYTE:55 [ keyboard_key_pressed::rowidx#0 ] zp ZP_BYTE:58 [ keyboard_key_pressed::$2 ] zp ZP_BYTE:54 [ keyboard_key_pressed::colidx#0 ]
Limited combination testing to 100 combinations of 2359296 possible.
Uplifting [keyboard_get_keycode] best 806783 combination reg byte a [ keyboard_get_keycode::return#2 ] reg byte x [ keyboard_get_keycode::ch#0 ] reg byte a [ keyboard_get_keycode::return#0 ]
Uplifting [print_str_at] best 806783 combination zp ZP_WORD:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] zp ZP_WORD:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ]
Uplifting [keyboard_matrix_read] best 806765 combination reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#2 ] reg byte a [ keyboard_matrix_read::return#0 ]
Uplifting [] best 806765 combination
Uplifting [keyboard_key_pressed] best 807987 combination reg byte x [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] reg byte a [ keyboard_key_pressed::return#14 ] reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#10 ] zp ZP_BYTE:34 [ keyboard_key_pressed::return#11 ] zp ZP_BYTE:36 [ keyboard_key_pressed::return#12 ] zp ZP_BYTE:38 [ keyboard_key_pressed::return#13 ] zp ZP_BYTE:59 [ keyboard_key_pressed::return#0 ] zp ZP_BYTE:55 [ keyboard_key_pressed::rowidx#0 ] zp ZP_BYTE:58 [ keyboard_key_pressed::$2 ] zp ZP_BYTE:54 [ keyboard_key_pressed::colidx#0 ]
Limited combination testing to 100 combinations of 3145728 possible.
Uplifting [keyboard_get_keycode] best 806781 combination reg byte a [ keyboard_get_keycode::return#2 ] reg byte x [ keyboard_get_keycode::ch#0 ] reg byte a [ keyboard_get_keycode::return#0 ]
Uplifting [print_str_at] best 806781 combination zp ZP_WORD:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] zp ZP_WORD:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ]
Uplifting [keyboard_matrix_read] best 806763 combination reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#2 ] reg byte a [ keyboard_matrix_read::return#0 ]
Uplifting [] best 806763 combination
Attempting to uplift remaining variables inzp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ]
Uplifting [plot_chargen] best 806765 combination zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ]
Uplifting [plot_chargen] best 806763 combination zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ]
Uplifting [plot_chargen] best 806765 combination zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ]
Uplifting [plot_chargen] best 806763 combination zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ]
Uplifting [plot_chargen] best 806459 combination reg byte x [ plot_chargen::shift#2 plot_chargen::shift#1 ]
Uplifting [plot_chargen] best 806457 combination reg byte x [ plot_chargen::shift#2 plot_chargen::shift#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ main::ch#2 main::ch#1 ]
Uplifting [main] best 806459 combination zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ]
Uplifting [main] best 806457 combination zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ]
Uplifting [plot_chargen] best 806153 combination reg byte a [ plot_chargen::ch#2 plot_chargen::ch#1 ]
Uplifting [plot_chargen] best 806151 combination reg byte a [ plot_chargen::ch#2 plot_chargen::ch#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:11 [ plot_chargen::pos#2 plot_chargen::pos#0 plot_chargen::pos#1 ]
Uplifting [plot_chargen] best 805824 combination reg byte y [ plot_chargen::pos#2 plot_chargen::pos#0 plot_chargen::pos#1 ]
Uplifting [plot_chargen] best 805822 combination reg byte y [ plot_chargen::pos#2 plot_chargen::pos#0 plot_chargen::pos#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ]
Uplifting [main] best 805824 combination zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ]
Uplifting [main] best 805822 combination zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ]
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ main::i#2 main::i#1 ]
Uplifting [main] best 805824 combination zp ZP_BYTE:4 [ main::i#2 main::i#1 ]
Uplifting [main] best 805822 combination zp ZP_BYTE:4 [ main::i#2 main::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:31 [ main::$15 ]
Uplifting [main] best 805764 combination reg byte a [ main::$15 ]
Uplifting [main] best 805762 combination reg byte a [ main::$15 ]
Attempting to uplift remaining variables inzp ZP_BYTE:33 [ main::$18 ]
Uplifting [main] best 805704 combination reg byte a [ main::$18 ]
Uplifting [main] best 805702 combination reg byte a [ main::$18 ]
Attempting to uplift remaining variables inzp ZP_BYTE:34 [ keyboard_key_pressed::return#11 ]
Uplifting [keyboard_key_pressed] best 805644 combination reg byte a [ keyboard_key_pressed::return#11 ]
Uplifting [keyboard_key_pressed] best 805642 combination reg byte a [ keyboard_key_pressed::return#11 ]
Attempting to uplift remaining variables inzp ZP_BYTE:35 [ main::$21 ]
Uplifting [main] best 805584 combination reg byte a [ main::$21 ]
Uplifting [main] best 805582 combination reg byte a [ main::$21 ]
Attempting to uplift remaining variables inzp ZP_BYTE:36 [ keyboard_key_pressed::return#12 ]
Uplifting [keyboard_key_pressed] best 805524 combination reg byte a [ keyboard_key_pressed::return#12 ]
Uplifting [keyboard_key_pressed] best 805522 combination reg byte a [ keyboard_key_pressed::return#12 ]
Attempting to uplift remaining variables inzp ZP_BYTE:37 [ main::$24 ]
Uplifting [main] best 805464 combination reg byte a [ main::$24 ]
Uplifting [main] best 805462 combination reg byte a [ main::$24 ]
Attempting to uplift remaining variables inzp ZP_BYTE:38 [ keyboard_key_pressed::return#13 ]
Uplifting [keyboard_key_pressed] best 805404 combination reg byte a [ keyboard_key_pressed::return#13 ]
Uplifting [keyboard_key_pressed] best 805402 combination reg byte a [ keyboard_key_pressed::return#13 ]
Attempting to uplift remaining variables inzp ZP_BYTE:39 [ main::$27 ]
Uplifting [main] best 805344 combination reg byte a [ main::$27 ]
Uplifting [main] best 805342 combination reg byte a [ main::$27 ]
Attempting to uplift remaining variables inzp ZP_BYTE:59 [ keyboard_key_pressed::return#0 ]
Uplifting [keyboard_key_pressed] best 804891 combination reg byte a [ keyboard_key_pressed::return#0 ]
Uplifting [keyboard_key_pressed] best 804889 combination reg byte a [ keyboard_key_pressed::return#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::shift#10 ]
Uplifting [main] best 804891 combination zp ZP_BYTE:6 [ main::shift#10 ]
Uplifting [main] best 804889 combination zp ZP_BYTE:6 [ main::shift#10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:55 [ keyboard_key_pressed::rowidx#0 ]
Uplifting [keyboard_key_pressed] best 804887 combination reg byte a [ keyboard_key_pressed::rowidx#0 ]
Uplifting [keyboard_key_pressed] best 804885 combination reg byte a [ keyboard_key_pressed::rowidx#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:58 [ keyboard_key_pressed::$2 ]
Uplifting [keyboard_key_pressed] best 804881 combination reg byte a [ keyboard_key_pressed::$2 ]
Uplifting [keyboard_key_pressed] best 804879 combination reg byte a [ keyboard_key_pressed::$2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:54 [ keyboard_key_pressed::colidx#0 ]
Uplifting [keyboard_key_pressed] best 804877 combination reg byte y [ keyboard_key_pressed::colidx#0 ]
Coalescing zero page register with common assignment [ zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] ] with [ zp ZP_WORD:46 [ plot_chargen::$1 ] ] - score: 1
@ -3899,8 +3889,8 @@ main: {
//SEG55 [20] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG56 [21] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #4
lda #4
cmp i
bne b2_from_b29
//SEG57 [22] phi from main::@29 to main::@3 [phi:main::@29->main::@3]
b3_from_b29:
@ -4107,8 +4097,8 @@ main: {
//SEG149 [65] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1
inc ch
//SEG150 [66] if((byte) main::ch#1!=(byte/signed byte/word/signed word/dword/signed dword) $40) goto main::@10 -- vbuz1_neq_vbuc1_then_la1
lda ch
cmp #$40
lda #$40
cmp ch
bne b10_from_b12
//SEG151 [22] phi from main::@12 to main::@3 [phi:main::@12->main::@3]
b3_from_b12:
@ -4316,8 +4306,8 @@ plot_chargen: {
//SEG221 [98] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2 -- vbuz1=_inc_vbuz1
inc y
//SEG222 [99] if((byte) plot_chargen::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@2 -- vbuz1_neq_vbuc1_then_la1
lda y
cmp #8
lda #8
cmp y
bne b2_from_b7
jmp b8
//SEG223 plot_chargen::@8
@ -5356,8 +5346,8 @@ main: {
//SEG55 [20] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG56 [21] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #4
lda #4
cmp i
bne b2
//SEG57 [22] phi from main::@29 to main::@3 [phi:main::@29->main::@3]
//SEG58 [22] phi (byte) main::cur_pos#24 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@29->main::@3#0] -- vbuz1=vbuc1
@ -5517,8 +5507,8 @@ main: {
//SEG149 [65] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1
inc ch
//SEG150 [66] if((byte) main::ch#1!=(byte/signed byte/word/signed word/dword/signed dword) $40) goto main::@10 -- vbuz1_neq_vbuc1_then_la1
lda ch
cmp #$40
lda #$40
cmp ch
bne b10
//SEG151 [22] phi from main::@12 to main::@3 [phi:main::@12->main::@3]
//SEG152 [22] phi (byte) main::cur_pos#24 = (byte) main::cur_pos#12 [phi:main::@12->main::@3#0] -- register_copy
@ -5682,8 +5672,8 @@ plot_chargen: {
//SEG221 [98] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2 -- vbuz1=_inc_vbuz1
inc y
//SEG222 [99] if((byte) plot_chargen::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@2 -- vbuz1_neq_vbuc1_then_la1
lda y
cmp #8
lda #8
cmp y
bne b2
//SEG223 plot_chargen::@8
//SEG224 [100] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) $37 -- _deref_pbuc1=vbuc2

View File

@ -98,12 +98,11 @@ main: {
sta print_sbyte_at.at+1
jsr print_sbyte_at
inc j
lda j
cmp #9
lda #9
cmp j
bne b3
inc i
lda i
cmp #9
cmp i
bne b2
rts
}

View File

@ -1283,8 +1283,8 @@ main: {
//SEG29 [12] (byte) main::k#1 ← ++ (byte) main::k#2 -- vbuz1=_inc_vbuz1
inc k
//SEG30 [13] if((byte) main::k#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda k
cmp #9
lda #9
cmp k
bne b1_from_b8
//SEG31 [14] phi from main::@8 to main::@2 [phi:main::@8->main::@2]
b2_from_b8:
@ -1393,8 +1393,8 @@ main: {
//SEG67 [30] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuz1=_inc_vbuz1
inc j
//SEG68 [31] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@3 -- vbuz1_neq_vbuc1_then_la1
lda j
cmp #9
lda #9
cmp j
bne b3_from_b11
jmp b5
//SEG69 main::@5
@ -1402,8 +1402,8 @@ main: {
//SEG70 [32] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG71 [33] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #9
lda #9
cmp i
bne b2_from_b5
jmp breturn
//SEG72 main::@return
@ -1617,14 +1617,14 @@ init_screen: {
//SEG133 init_screen::@1
b1:
//SEG134 [66] *(((byte*))(word/dword/signed dword) $d800 + (byte) init_screen::l#2) ← (const byte) init_screen::WHITE#0 -- pbuc1_derefidx_vbuz1=vbuc2
ldy l
lda #WHITE
ldy l
sta $d800,y
//SEG135 [67] (byte) init_screen::l#1 ← ++ (byte) init_screen::l#2 -- vbuz1=_inc_vbuz1
inc l
//SEG136 [68] if((byte) init_screen::l#1!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto init_screen::@1 -- vbuz1_neq_vbuc1_then_la1
lda l
cmp #$28
lda #$28
cmp l
bne b1_from_b1
//SEG137 [69] phi from init_screen::@1 to init_screen::@2 [phi:init_screen::@1->init_screen::@2]
b2_from_b1:
@ -1671,8 +1671,8 @@ init_screen: {
//SEG149 [75] (byte) init_screen::m#1 ← ++ (byte) init_screen::m#2 -- vbuz1=_inc_vbuz1
inc m
//SEG150 [76] if((byte) init_screen::m#1!=(byte/signed byte/word/signed word/dword/signed dword) $19) goto init_screen::@2 -- vbuz1_neq_vbuc1_then_la1
lda m
cmp #$19
lda #$19
cmp m
bne b2_from_b2
jmp breturn
//SEG151 init_screen::@return
@ -2102,8 +2102,8 @@ main: {
//SEG67 [30] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuz1=_inc_vbuz1
inc j
//SEG68 [31] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@3 -- vbuz1_neq_vbuc1_then_la1
lda j
cmp #9
lda #9
cmp j
bne b3_from_b11
jmp b5
//SEG69 main::@5
@ -2111,8 +2111,8 @@ main: {
//SEG70 [32] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG71 [33] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #9
lda #9
cmp i
bne b2_from_b5
jmp breturn
//SEG72 main::@return
@ -2502,6 +2502,8 @@ Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #9
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination
@ -2645,7 +2647,7 @@ reg byte a [ fmul8::return#1 ]
FINAL ASSEMBLER
Score: 10536
Score: 10516
//SEG0 File Comments
// Seriously fast multiply 8-bit version (8bit*8bit=8bit)
@ -2816,15 +2818,14 @@ main: {
//SEG67 [30] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuz1=_inc_vbuz1
inc j
//SEG68 [31] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@3 -- vbuz1_neq_vbuc1_then_la1
lda j
cmp #9
lda #9
cmp j
bne b3
//SEG69 main::@5
//SEG70 [32] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG71 [33] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #9
cmp i
bne b2
//SEG72 main::@return
//SEG73 [34] return

View File

@ -29,8 +29,8 @@ main: {
lda #CIA_INTERRUPT_CLEAR
sta CIA1_INTERRUPT
// Set raster line to $fa
lda VIC_CONTROL
and #$7f
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
lda #$fa
sta RASTER
@ -50,8 +50,8 @@ irq_bottom_2: {
lda #WHITE
sta BORDERCOL
// Set screen height back to 25 lines (preparing for the next screen)
lda VIC_CONTROL
ora #VIC_RSEL
lda #VIC_RSEL
ora VIC_CONTROL
sta VIC_CONTROL
// Acknowledge the IRQ
lda #IRQ_RASTER
@ -72,8 +72,8 @@ irq_bottom_1: {
lda #WHITE
sta BORDERCOL
// Set screen height to 24 lines - this is done after the border should have started drawing - so it wont start
lda VIC_CONTROL
and #$ff^VIC_RSEL
lda #$ff^VIC_RSEL
and VIC_CONTROL
sta VIC_CONTROL
// Acknowledge the IRQ
lda #IRQ_RASTER

View File

@ -607,8 +607,8 @@ main: {
sta CIA1_INTERRUPT
//SEG13 [7] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
// Set raster line to $fa
lda VIC_CONTROL
and #$7f
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
//SEG14 [8] *((const byte*) RASTER#0) ← (byte/word/signed word/dword/signed dword) $fa -- _deref_pbuc1=vbuc2
lda #$fa
@ -640,8 +640,8 @@ irq_bottom_2: {
sta BORDERCOL
//SEG23 [14] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) | (const byte) VIC_RSEL#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
// Set screen height back to 25 lines (preparing for the next screen)
lda VIC_CONTROL
ora #VIC_RSEL
lda #VIC_RSEL
ora VIC_CONTROL
sta VIC_CONTROL
//SEG24 [15] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
@ -674,8 +674,8 @@ irq_bottom_1: {
sta BORDERCOL
//SEG33 [21] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/word/signed word/dword/signed dword) $ff^(const byte) VIC_RSEL#0 -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
// Set screen height to 24 lines - this is done after the border should have started drawing - so it wont start
lda VIC_CONTROL
and #$ff^VIC_RSEL
lda #$ff^VIC_RSEL
and VIC_CONTROL
sta VIC_CONTROL
//SEG34 [22] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
@ -785,8 +785,8 @@ main: {
sta CIA1_INTERRUPT
//SEG13 [7] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
// Set raster line to $fa
lda VIC_CONTROL
and #$7f
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
//SEG14 [8] *((const byte*) RASTER#0) ← (byte/word/signed word/dword/signed dword) $fa -- _deref_pbuc1=vbuc2
lda #$fa
@ -818,8 +818,8 @@ irq_bottom_2: {
sta BORDERCOL
//SEG23 [14] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) | (const byte) VIC_RSEL#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
// Set screen height back to 25 lines (preparing for the next screen)
lda VIC_CONTROL
ora #VIC_RSEL
lda #VIC_RSEL
ora VIC_CONTROL
sta VIC_CONTROL
//SEG24 [15] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
@ -852,8 +852,8 @@ irq_bottom_1: {
sta BORDERCOL
//SEG33 [21] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/word/signed word/dword/signed dword) $ff^(const byte) VIC_RSEL#0 -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
// Set screen height to 24 lines - this is done after the border should have started drawing - so it wont start
lda VIC_CONTROL
and #$ff^VIC_RSEL
lda #$ff^VIC_RSEL
and VIC_CONTROL
sta VIC_CONTROL
//SEG34 [22] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
@ -1054,8 +1054,8 @@ main: {
sta CIA1_INTERRUPT
//SEG13 [7] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
// Set raster line to $fa
lda VIC_CONTROL
and #$7f
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
//SEG14 [8] *((const byte*) RASTER#0) ← (byte/word/signed word/dword/signed dword) $fa -- _deref_pbuc1=vbuc2
lda #$fa
@ -1085,8 +1085,8 @@ irq_bottom_2: {
sta BORDERCOL
//SEG23 [14] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) | (const byte) VIC_RSEL#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
// Set screen height back to 25 lines (preparing for the next screen)
lda VIC_CONTROL
ora #VIC_RSEL
lda #VIC_RSEL
ora VIC_CONTROL
sta VIC_CONTROL
//SEG24 [15] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
@ -1117,8 +1117,8 @@ irq_bottom_1: {
sta BORDERCOL
//SEG33 [21] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/word/signed word/dword/signed dword) $ff^(const byte) VIC_RSEL#0 -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
// Set screen height to 24 lines - this is done after the border should have started drawing - so it wont start
lda VIC_CONTROL
and #$ff^VIC_RSEL
lda #$ff^VIC_RSEL
and VIC_CONTROL
sta VIC_CONTROL
//SEG34 [22] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ

View File

@ -41,21 +41,19 @@ loop: {
lda #0
sta sin_idx
b4:
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b4
inc BORDERCOL
ldy sin_idx
ldx #0
ldx sin_idx
ldy #0
b7:
lda YSIN,y
sta PLEX_YPOS,x
tya
clc
adc #8
tay
inx
cpx #PLEX_COUNT-1+1
lda YSIN,x
sta PLEX_YPOS,y
txa
axs #-8
iny
cpy #PLEX_COUNT-1+1
bne b7
inc sin_idx
inc BORDERCOL
@ -63,8 +61,8 @@ loop: {
lda #BLACK
sta BORDERCOL
b8:
lda D011
and #VIC_RST8
lda #VIC_RST8
and D011
cmp #0
bne b8
lda #0
@ -89,8 +87,8 @@ loop: {
inc BORDERCOL
jsr plexShowSprite
inc ss
lda ss
cmp #PLEX_COUNT-1+1
lda #PLEX_COUNT-1+1
cmp ss
bne b11
lda #BLACK
sta BORDERCOL
@ -112,11 +110,11 @@ plexShowSprite: {
adc #$15
ldy plex_free_next
sta PLEX_FREE_YPOS,y
tya
clc
adc #1
and #7
sta plex_free_next
ldx plex_free_next
inx
lda #7
sax plex_free_next
ldx plex_show_idx
ldy PLEX_SORTED_IDX,x
lda PLEX_PTR,y
ldx plex_sprite_idx
@ -136,11 +134,10 @@ plexShowSprite: {
and SPRITES_XMSB
sta SPRITES_XMSB
b2:
lda plex_sprite_idx
clc
adc #1
and #7
sta plex_sprite_idx
ldx plex_sprite_idx
inx
lda #7
sax plex_sprite_idx
inc plex_show_idx
asl plex_sprite_msb
lda plex_sprite_msb
@ -194,8 +191,8 @@ plexSort: {
sta PLEX_SORTED_IDX,x
b2:
inc m
lda m
cmp #PLEX_COUNT-2+1
lda #PLEX_COUNT-2+1
cmp m
bne b1
ldx #0
plexFreePrepare1_b1:

View File

@ -2453,8 +2453,8 @@ loop: {
//SEG25 loop::@4
b4:
//SEG26 [13] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto loop::@4 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b4
jmp b6
//SEG27 loop::@6
@ -2484,15 +2484,14 @@ loop: {
ldy sy
sta PLEX_YPOS,y
//SEG38 [18] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte/signed byte/word/signed word/dword/signed dword) 8 -- vbuz1=vbuz1_plus_vbuc1
lda #8
clc
adc y_idx
sta y_idx
lax y_idx
axs #-8
stx y_idx
//SEG39 [19] (byte) loop::sy#1 ← ++ (byte) loop::sy#2 -- vbuz1=_inc_vbuz1
inc sy
//SEG40 [20] if((byte) loop::sy#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@7 -- vbuz1_neq_vbuc1_then_la1
lda sy
cmp #PLEX_COUNT-1+1
lda #PLEX_COUNT-1+1
cmp sy
bne b7_from_b7
jmp b20
//SEG41 loop::@20
@ -2515,8 +2514,8 @@ loop: {
//SEG48 loop::@8
b8:
//SEG49 [25] (byte~) loop::$4 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0 -- vbuz1=_deref_pbuc1_band_vbuc2
lda D011
and #VIC_RST8
lda #VIC_RST8
and D011
sta _4
//SEG50 [26] if((byte~) loop::$4!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto loop::@8 -- vbuz1_neq_0_then_la1
lda _4
@ -2581,8 +2580,8 @@ loop: {
//SEG73 [33] (byte) loop::ss#1 ← ++ (byte) loop::ss#6 -- vbuz1=_inc_vbuz1
inc ss
//SEG74 [34] if((byte) loop::ss#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@11 -- vbuz1_neq_vbuc1_then_la1
lda ss
cmp #PLEX_COUNT-1+1
lda #PLEX_COUNT-1+1
cmp ss
bne b11_from_b31
jmp b27
//SEG75 loop::@27
@ -2625,10 +2624,9 @@ plexShowSprite: {
//SEG83 plexShowSprite::plexFreeAdd1
plexFreeAdd1:
//SEG84 [39] (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$0#0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz2_plus_vbuc1
lda #$15
clc
adc plexFreeAdd1_ypos
sta plexFreeAdd1__0
lax plexFreeAdd1_ypos
axs #-$15
stx plexFreeAdd1__0
//SEG85 [40] *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plex_free_next#17) ← (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$0#0 -- pbuc1_derefidx_vbuz1=vbuz2
lda plexFreeAdd1__0
ldy plex_free_next
@ -2791,8 +2789,8 @@ plexSort: {
//SEG129 [68] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 -- vbuz1=_dec_vbuz1
dec s
//SEG130 [69] if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) $ff) goto plexSort::@8 -- vbuz1_neq_vbuc1_then_la1
lda s
cmp #$ff
lda #$ff
cmp s
bne b8
jmp b5
//SEG131 plexSort::@5
@ -2811,8 +2809,8 @@ plexSort: {
//SEG135 [72] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 -- vbuz1=_inc_vbuz1
inc m
//SEG136 [73] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexSort::@1 -- vbuz1_neq_vbuc1_then_la1
lda m
cmp #PLEX_COUNT-2+1
lda #PLEX_COUNT-2+1
cmp m
bne b1_from_b2
//SEG137 [74] phi from plexSort::@2 to plexSort::plexFreePrepare1 [phi:plexSort::@2->plexSort::plexFreePrepare1]
plexFreePrepare1_from_b2:
@ -2832,14 +2830,14 @@ plexSort: {
//SEG143 plexSort::plexFreePrepare1_@1
plexFreePrepare1_b1:
//SEG144 [76] *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plexSort::plexFreePrepare1_s#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2
ldy plexFreePrepare1_s
lda #0
ldy plexFreePrepare1_s
sta PLEX_FREE_YPOS,y
//SEG145 [77] (byte) plexSort::plexFreePrepare1_s#1 ← ++ (byte) plexSort::plexFreePrepare1_s#2 -- vbuz1=_inc_vbuz1
inc plexFreePrepare1_s
//SEG146 [78] if((byte) plexSort::plexFreePrepare1_s#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plexSort::plexFreePrepare1_@1 -- vbuz1_neq_vbuc1_then_la1
lda plexFreePrepare1_s
cmp #8
lda #8
cmp plexFreePrepare1_s
bne plexFreePrepare1_b1_from_plexFreePrepare1_b1
jmp breturn
//SEG147 plexSort::@return
@ -2889,8 +2887,8 @@ init: {
//SEG161 init::@1
b1:
//SEG162 [84] *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) $40 -- pbuc1_derefidx_vbuz1=vbuc2
ldy sx
lda #$ff&SPRITE/$40
ldy sx
sta PLEX_PTR,y
//SEG163 [85] (byte~) init::$6 ← (byte) init::sx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
lda sx
@ -2913,8 +2911,8 @@ init: {
//SEG166 [88] (byte) init::sx#1 ← ++ (byte) init::sx#2 -- vbuz1=_inc_vbuz1
inc sx
//SEG167 [89] if((byte) init::sx#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto init::@1 -- vbuz1_neq_vbuc1_then_la1
lda sx
cmp #PLEX_COUNT-1+1
lda #PLEX_COUNT-1+1
cmp sx
bne b1_from_b1
jmp b3
//SEG168 init::@3
@ -2936,14 +2934,14 @@ init: {
//SEG174 init::@2
b2:
//SEG175 [92] *((const byte*) SPRITES_COLS#0 + (byte) init::ss#2) ← (const byte) GREEN#0 -- pbuc1_derefidx_vbuz1=vbuc2
ldy ss
lda #GREEN
ldy ss
sta SPRITES_COLS,y
//SEG176 [93] (byte) init::ss#1 ← ++ (byte) init::ss#2 -- vbuz1=_inc_vbuz1
inc ss
//SEG177 [94] if((byte) init::ss#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto init::@2 -- vbuz1_neq_vbuc1_then_la1
lda ss
cmp #8
lda #8
cmp ss
bne b2_from_b2
jmp breturn
//SEG178 init::@return
@ -2979,8 +2977,8 @@ plexInit: {
//SEG189 [100] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG190 [101] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexInit::@1 -- vbuz1_neq_vbuc1_then_la1
lda i
cmp #PLEX_COUNT-1+1
lda #PLEX_COUNT-1+1
cmp i
bne b1_from_b1
jmp breturn
//SEG191 plexInit::@return
@ -3029,17 +3027,14 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ pl
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ loop::ss#6 loop::ss#1 ]
Statement [35] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) always clobbers reg byte a
Statement [36] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#44 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_free_next#17 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_free_next#17 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a
Statement [39] (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$0#0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ plex_free_next#17 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_$0#0 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_free_next#17 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_$0#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ plexShowSprite::plex_sprite_idx2#0 ]
Statement [42] (byte) plex_free_next#13 ← (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$1#0 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a
Statement [43] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#44) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#44)) [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ plexShowSprite::plex_sprite_idx2#0 ]
Statement [44] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#44) << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) always clobbers reg byte a
Statement [45] (byte~) plexShowSprite::$3 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$3 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$3 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ plexShowSprite::xpos_idx#0 ]
Statement [47] (byte~) plexShowSprite::$4 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::$4 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::$4 ] ) always clobbers reg byte a
Statement [49] (byte/word/dword~) plexShowSprite::$6 ← (byte/word/signed word/dword/signed dword) $ff ^ (byte) plex_sprite_msb#44 [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::$6 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::$6 ] ) always clobbers reg byte a
Statement [50] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) plexShowSprite::$6 [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 ] ) always clobbers reg byte a
Statement [52] (byte) plex_sprite_idx#15 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$7 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plex_sprite_idx#15 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plex_sprite_idx#15 ] ) always clobbers reg byte a
Statement [59] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#44 [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 ] ) always clobbers reg byte a
Statement [67] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ]
@ -3067,15 +3062,12 @@ Statement [25] (byte~) loop::$4 ← *((const byte*) D011#0) & (const byte) VIC_R
Statement [28] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 plex_free_next#17 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 loop::ss#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_free_next#17 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 loop::ss#6 ] ) always clobbers reg byte a
Statement [35] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) always clobbers reg byte a
Statement [36] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#44 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_free_next#17 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_free_next#17 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a
Statement [39] (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$0#0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ plex_free_next#17 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_$0#0 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_free_next#17 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_$0#0 ] ) always clobbers reg byte a
Statement [42] (byte) plex_free_next#13 ← (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$1#0 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a
Statement [43] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#44) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#44)) [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a
Statement [44] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#44) << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) always clobbers reg byte a
Statement [45] (byte~) plexShowSprite::$3 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$3 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$3 ] ) always clobbers reg byte a
Statement [47] (byte~) plexShowSprite::$4 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::$4 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::$4 ] ) always clobbers reg byte a
Statement [49] (byte/word/dword~) plexShowSprite::$6 ← (byte/word/signed word/dword/signed dword) $ff ^ (byte) plex_sprite_msb#44 [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::$6 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plexShowSprite::$6 ] ) always clobbers reg byte a
Statement [50] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) plexShowSprite::$6 [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 ] ) always clobbers reg byte a
Statement [52] (byte) plex_sprite_idx#15 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$7 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plex_sprite_idx#15 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 plex_sprite_idx#15 ] ) always clobbers reg byte a
Statement [59] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#44 [ plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 ] ( main:4::loop:9::plexShowSprite:32 [ loop::sin_idx#1 loop::ss#6 plex_sprite_idx#44 plex_show_idx#44 plex_sprite_msb#44 plex_free_next#13 ] ) always clobbers reg byte a
Statement [64] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2))) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) always clobbers reg byte a
Statement [67] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) always clobbers reg byte a
@ -3129,60 +3121,60 @@ Uplift Scope [plexInit] 38.5: zp ZP_BYTE:17 [ plexInit::i#2 plexInit::i#1 ]
Uplift Scope [plexShowSprite] 4: zp ZP_BYTE:22 [ plexShowSprite::plexFreeAdd1_$0#0 ] 4: zp ZP_BYTE:23 [ plexShowSprite::plexFreeAdd1_$1#0 ] 4: zp ZP_BYTE:25 [ plexShowSprite::$3 ] 4: zp ZP_BYTE:26 [ plexShowSprite::$4 ] 4: zp ZP_BYTE:27 [ plexShowSprite::$6 ] 4: zp ZP_BYTE:28 [ plexShowSprite::$7 ] 3: zp ZP_BYTE:21 [ plexShowSprite::plexFreeAdd1_ypos#0 ] 2: zp ZP_BYTE:24 [ plexShowSprite::xpos_idx#0 ] 0.6: zp ZP_BYTE:20 [ plexShowSprite::plex_sprite_idx2#0 ]
Uplift Scope [main]
Uplifting [plexSort] best 82580 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] zp ZP_BYTE:31 [ plexSort::s#2 ] zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ] zp ZP_BYTE:30 [ plexSort::nxt_y#0 ] zp ZP_BYTE:29 [ plexSort::nxt_idx#0 ]
Uplifting [plexSort] best 82378 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] zp ZP_BYTE:31 [ plexSort::s#2 ] zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ] zp ZP_BYTE:30 [ plexSort::nxt_y#0 ] zp ZP_BYTE:29 [ plexSort::nxt_idx#0 ]
Limited combination testing to 10 combinations of 972 possible.
Uplifting [loop] best 81380 combination zp ZP_BYTE:19 [ loop::plexFreeNextYpos1_return#0 ] reg byte x [ loop::sy#2 loop::sy#1 ] zp ZP_BYTE:3 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] zp ZP_BYTE:18 [ loop::$4 ] zp ZP_BYTE:9 [ loop::ss#6 loop::ss#1 ] zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ]
Uplifting [loop] best 81178 combination zp ZP_BYTE:19 [ loop::plexFreeNextYpos1_return#0 ] reg byte y [ loop::sy#2 loop::sy#1 ] zp ZP_BYTE:3 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] zp ZP_BYTE:18 [ loop::$4 ] zp ZP_BYTE:9 [ loop::ss#6 loop::ss#1 ] zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ]
Limited combination testing to 10 combinations of 1296 possible.
Uplifting [init] best 81130 combination reg byte x [ init::ss#2 init::ss#1 ] reg byte x [ init::sx#2 init::sx#1 ] zp ZP_BYTE:32 [ init::$6 ] zp ZP_WORD:14 [ init::xp#2 init::xp#1 ]
Uplifting [init] best 80928 combination reg byte x [ init::ss#2 init::ss#1 ] reg byte x [ init::sx#2 init::sx#1 ] zp ZP_BYTE:32 [ init::$6 ] zp ZP_WORD:14 [ init::xp#2 init::xp#1 ]
Limited combination testing to 10 combinations of 36 possible.
Uplifting [] best 81130 combination zp ZP_BYTE:8 [ plex_sprite_msb#44 plex_sprite_msb#16 plex_sprite_msb#25 ] zp ZP_BYTE:5 [ plex_free_next#17 plex_free_next#13 ] zp ZP_BYTE:7 [ plex_show_idx#44 plex_show_idx#15 ] zp ZP_BYTE:6 [ plex_sprite_idx#44 plex_sprite_idx#15 ]
Uplifting [] best 80928 combination zp ZP_BYTE:8 [ plex_sprite_msb#44 plex_sprite_msb#16 plex_sprite_msb#25 ] zp ZP_BYTE:5 [ plex_free_next#17 plex_free_next#13 ] zp ZP_BYTE:7 [ plex_show_idx#44 plex_show_idx#15 ] zp ZP_BYTE:6 [ plex_sprite_idx#44 plex_sprite_idx#15 ]
Limited combination testing to 10 combinations of 81 possible.
Uplifting [plexInit] best 81010 combination reg byte x [ plexInit::i#2 plexInit::i#1 ]
Uplifting [plexShowSprite] best 81000 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0#0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$1#0 ] zp ZP_BYTE:25 [ plexShowSprite::$3 ] zp ZP_BYTE:26 [ plexShowSprite::$4 ] zp ZP_BYTE:27 [ plexShowSprite::$6 ] zp ZP_BYTE:28 [ plexShowSprite::$7 ] zp ZP_BYTE:21 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp ZP_BYTE:24 [ plexShowSprite::xpos_idx#0 ] zp ZP_BYTE:20 [ plexShowSprite::plex_sprite_idx2#0 ]
Uplifting [plexInit] best 80808 combination reg byte x [ plexInit::i#2 plexInit::i#1 ]
Uplifting [plexShowSprite] best 80798 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0#0 ] reg byte x [ plexShowSprite::plexFreeAdd1_$1#0 ] zp ZP_BYTE:25 [ plexShowSprite::$3 ] zp ZP_BYTE:26 [ plexShowSprite::$4 ] zp ZP_BYTE:27 [ plexShowSprite::$6 ] zp ZP_BYTE:28 [ plexShowSprite::$7 ] zp ZP_BYTE:21 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp ZP_BYTE:24 [ plexShowSprite::xpos_idx#0 ] zp ZP_BYTE:20 [ plexShowSprite::plex_sprite_idx2#0 ]
Limited combination testing to 10 combinations of 147456 possible.
Uplifting [main] best 81000 combination
Uplifting [main] best 80798 combination
Attempting to uplift remaining variables inzp ZP_BYTE:19 [ loop::plexFreeNextYpos1_return#0 ]
Uplifting [loop] best 81000 combination zp ZP_BYTE:19 [ loop::plexFreeNextYpos1_return#0 ]
Uplifting [loop] best 80798 combination zp ZP_BYTE:19 [ loop::plexFreeNextYpos1_return#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ]
Uplifting [loop] best 80470 combination reg byte y [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ]
Uplifting [loop] best 80068 combination reg byte x [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:18 [ loop::$4 ]
Uplifting [loop] best 79870 combination reg byte a [ loop::$4 ]
Uplifting [loop] best 79468 combination reg byte a [ loop::$4 ]
Attempting to uplift remaining variables inzp ZP_BYTE:31 [ plexSort::s#2 ]
Uplifting [plexSort] best 79270 combination reg byte x [ plexSort::s#2 ]
Uplifting [plexSort] best 78868 combination reg byte x [ plexSort::s#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ]
Uplifting [plexSort] best 79270 combination zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ]
Uplifting [plexSort] best 78868 combination zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:9 [ loop::ss#6 loop::ss#1 ]
Uplifting [loop] best 79270 combination zp ZP_BYTE:9 [ loop::ss#6 loop::ss#1 ]
Uplifting [loop] best 78868 combination zp ZP_BYTE:9 [ loop::ss#6 loop::ss#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:30 [ plexSort::nxt_y#0 ]
Uplifting [plexSort] best 79270 combination zp ZP_BYTE:30 [ plexSort::nxt_y#0 ]
Uplifting [plexSort] best 78868 combination zp ZP_BYTE:30 [ plexSort::nxt_y#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:29 [ plexSort::nxt_idx#0 ]
Uplifting [plexSort] best 79270 combination zp ZP_BYTE:29 [ plexSort::nxt_idx#0 ]
Uplifting [plexSort] best 78868 combination zp ZP_BYTE:29 [ plexSort::nxt_idx#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:8 [ plex_sprite_msb#44 plex_sprite_msb#16 plex_sprite_msb#25 ]
Uplifting [] best 79270 combination zp ZP_BYTE:8 [ plex_sprite_msb#44 plex_sprite_msb#16 plex_sprite_msb#25 ]
Uplifting [] best 78868 combination zp ZP_BYTE:8 [ plex_sprite_msb#44 plex_sprite_msb#16 plex_sprite_msb#25 ]
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ plex_free_next#17 plex_free_next#13 ]
Uplifting [] best 79270 combination zp ZP_BYTE:5 [ plex_free_next#17 plex_free_next#13 ]
Uplifting [] best 78868 combination zp ZP_BYTE:5 [ plex_free_next#17 plex_free_next#13 ]
Attempting to uplift remaining variables inzp ZP_BYTE:32 [ init::$6 ]
Uplifting [init] best 79230 combination reg byte a [ init::$6 ]
Uplifting [init] best 78828 combination reg byte a [ init::$6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ plex_show_idx#44 plex_show_idx#15 ]
Uplifting [] best 79230 combination zp ZP_BYTE:7 [ plex_show_idx#44 plex_show_idx#15 ]
Uplifting [] best 78828 combination zp ZP_BYTE:7 [ plex_show_idx#44 plex_show_idx#15 ]
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ plex_sprite_idx#44 plex_sprite_idx#15 ]
Uplifting [] best 79230 combination zp ZP_BYTE:6 [ plex_sprite_idx#44 plex_sprite_idx#15 ]
Uplifting [] best 78828 combination zp ZP_BYTE:6 [ plex_sprite_idx#44 plex_sprite_idx#15 ]
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ]
Uplifting [loop] best 79230 combination zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ]
Uplifting [loop] best 78828 combination zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:25 [ plexShowSprite::$3 ]
Uplifting [plexShowSprite] best 79224 combination reg byte a [ plexShowSprite::$3 ]
Uplifting [plexShowSprite] best 78822 combination reg byte a [ plexShowSprite::$3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:26 [ plexShowSprite::$4 ]
Uplifting [plexShowSprite] best 79218 combination reg byte a [ plexShowSprite::$4 ]
Uplifting [plexShowSprite] best 78816 combination reg byte a [ plexShowSprite::$4 ]
Attempting to uplift remaining variables inzp ZP_BYTE:27 [ plexShowSprite::$6 ]
Uplifting [plexShowSprite] best 79212 combination reg byte a [ plexShowSprite::$6 ]
Uplifting [plexShowSprite] best 78810 combination reg byte a [ plexShowSprite::$6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:28 [ plexShowSprite::$7 ]
Uplifting [plexShowSprite] best 79208 combination reg byte a [ plexShowSprite::$7 ]
Uplifting [plexShowSprite] best 78804 combination reg byte x [ plexShowSprite::$7 ]
Attempting to uplift remaining variables inzp ZP_BYTE:21 [ plexShowSprite::plexFreeAdd1_ypos#0 ]
Uplifting [plexShowSprite] best 79199 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ]
Uplifting [plexShowSprite] best 78795 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:24 [ plexShowSprite::xpos_idx#0 ]
Uplifting [plexShowSprite] best 79192 combination reg byte x [ plexShowSprite::xpos_idx#0 ]
Uplifting [plexShowSprite] best 78788 combination reg byte x [ plexShowSprite::xpos_idx#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:20 [ plexShowSprite::plex_sprite_idx2#0 ]
Uplifting [plexShowSprite] best 79192 combination zp ZP_BYTE:20 [ plexShowSprite::plex_sprite_idx2#0 ]
Uplifting [plexShowSprite] best 78788 combination zp ZP_BYTE:20 [ plexShowSprite::plex_sprite_idx2#0 ]
Coalescing zero page register [ zp ZP_BYTE:5 [ plex_free_next#17 plex_free_next#13 ] ] with [ zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:6 [ plex_sprite_idx#44 plex_sprite_idx#15 ] ] with [ zp ZP_BYTE:29 [ plexSort::nxt_idx#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:7 [ plex_show_idx#44 plex_show_idx#15 ] ] with [ zp ZP_BYTE:30 [ plexSort::nxt_y#0 ] ]
@ -3286,20 +3278,20 @@ loop: {
//SEG25 loop::@4
b4:
//SEG26 [13] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto loop::@4 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b4
jmp b6
//SEG27 loop::@6
b6:
//SEG28 [14] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
inc BORDERCOL
//SEG29 [15] (byte~) loop::y_idx#3 ← (byte) loop::sin_idx#6 -- vbuyy=vbuz1
ldy sin_idx
//SEG29 [15] (byte~) loop::y_idx#3 ← (byte) loop::sin_idx#6 -- vbuxx=vbuz1
ldx sin_idx
//SEG30 [16] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7]
b7_from_b6:
//SEG31 [16] phi (byte) loop::sy#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@6->loop::@7#0] -- vbuxx=vbuc1
ldx #0
//SEG31 [16] phi (byte) loop::sy#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@6->loop::@7#0] -- vbuyy=vbuc1
ldy #0
//SEG32 [16] phi (byte) loop::y_idx#2 = (byte~) loop::y_idx#3 [phi:loop::@6->loop::@7#1] -- register_copy
jmp b7
//SEG33 [16] phi from loop::@7 to loop::@7 [phi:loop::@7->loop::@7]
@ -3309,18 +3301,16 @@ loop: {
jmp b7
//SEG36 loop::@7
b7:
//SEG37 [17] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte*) YSIN#0 + (byte) loop::y_idx#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
lda YSIN,y
sta PLEX_YPOS,x
//SEG38 [18] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte/signed byte/word/signed word/dword/signed dword) 8 -- vbuyy=vbuyy_plus_vbuc1
tya
clc
adc #8
tay
//SEG39 [19] (byte) loop::sy#1 ← ++ (byte) loop::sy#2 -- vbuxx=_inc_vbuxx
inx
//SEG40 [20] if((byte) loop::sy#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@7 -- vbuxx_neq_vbuc1_then_la1
cpx #PLEX_COUNT-1+1
//SEG37 [17] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte*) YSIN#0 + (byte) loop::y_idx#2) -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx
lda YSIN,x
sta PLEX_YPOS,y
//SEG38 [18] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte/signed byte/word/signed word/dword/signed dword) 8 -- vbuxx=vbuxx_plus_vbuc1
txa
axs #-8
//SEG39 [19] (byte) loop::sy#1 ← ++ (byte) loop::sy#2 -- vbuyy=_inc_vbuyy
iny
//SEG40 [20] if((byte) loop::sy#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@7 -- vbuyy_neq_vbuc1_then_la1
cpy #PLEX_COUNT-1+1
bne b7_from_b7
jmp b20
//SEG41 loop::@20
@ -3343,8 +3333,8 @@ loop: {
//SEG48 loop::@8
b8:
//SEG49 [25] (byte~) loop::$4 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0 -- vbuaa=_deref_pbuc1_band_vbuc2
lda D011
and #VIC_RST8
lda #VIC_RST8
and D011
//SEG50 [26] if((byte~) loop::$4!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto loop::@8 -- vbuaa_neq_0_then_la1
cmp #0
bne b8
@ -3407,8 +3397,8 @@ loop: {
//SEG73 [33] (byte) loop::ss#1 ← ++ (byte) loop::ss#6 -- vbuz1=_inc_vbuz1
inc ss
//SEG74 [34] if((byte) loop::ss#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@11 -- vbuz1_neq_vbuc1_then_la1
lda ss
cmp #PLEX_COUNT-1+1
lda #PLEX_COUNT-1+1
cmp ss
bne b11_from_b31
jmp b27
//SEG75 loop::@27
@ -3446,13 +3436,12 @@ plexShowSprite: {
//SEG85 [40] *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plex_free_next#17) ← (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$0#0 -- pbuc1_derefidx_vbuz1=vbuaa
ldy plex_free_next
sta PLEX_FREE_YPOS,y
//SEG86 [41] (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$1#0 ← (byte) plex_free_next#17 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuz1_plus_1
lda plex_free_next
clc
adc #1
//SEG87 [42] (byte) plex_free_next#13 ← (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$1#0 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuaa_band_vbuc1
and #7
sta plex_free_next
//SEG86 [41] (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$1#0 ← (byte) plex_free_next#17 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuz1_plus_1
ldx plex_free_next
inx
//SEG87 [42] (byte) plex_free_next#13 ← (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$1#0 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuxx_band_vbuc1
lda #7
sax plex_free_next
jmp b7
//SEG88 plexShowSprite::@7
b7:
@ -3489,13 +3478,12 @@ plexShowSprite: {
jmp b2
//SEG98 plexShowSprite::@2
b2:
//SEG99 [51] (byte/signed word/word/dword/signed dword~) plexShowSprite::$7 ← (byte) plex_sprite_idx#44 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuz1_plus_1
lda plex_sprite_idx
clc
adc #1
//SEG100 [52] (byte) plex_sprite_idx#15 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$7 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuaa_band_vbuc1
and #7
sta plex_sprite_idx
//SEG99 [51] (byte/signed word/word/dword/signed dword~) plexShowSprite::$7 ← (byte) plex_sprite_idx#44 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuz1_plus_1
ldx plex_sprite_idx
inx
//SEG100 [52] (byte) plex_sprite_idx#15 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$7 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuxx_band_vbuc1
lda #7
sax plex_sprite_idx
//SEG101 [53] (byte) plex_show_idx#15 ← ++ (byte) plex_show_idx#44 -- vbuz1=_inc_vbuz1
inc plex_show_idx
//SEG102 [54] (byte) plex_sprite_msb#25 ← (byte) plex_sprite_msb#44 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz1_rol_1
@ -3605,8 +3593,8 @@ plexSort: {
//SEG135 [72] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 -- vbuz1=_inc_vbuz1
inc m
//SEG136 [73] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexSort::@1 -- vbuz1_neq_vbuc1_then_la1
lda m
cmp #PLEX_COUNT-2+1
lda #PLEX_COUNT-2+1
cmp m
bne b1_from_b2
//SEG137 [74] phi from plexSort::@2 to plexSort::plexFreePrepare1 [phi:plexSort::@2->plexSort::plexFreePrepare1]
plexFreePrepare1_from_b2:
@ -3831,7 +3819,6 @@ Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Removing instruction lda #0
Replacing instruction lda plex_free_next with TYA
Replacing instruction ldy nxt_idx with TAY
Removing instruction lda nxt_y
Replacing instruction ldx #0 with TAX
@ -3913,7 +3900,6 @@ Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldx plex_show_idx
Removing instruction ldx m
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Removing instruction bbegin:
@ -4079,12 +4065,12 @@ FINAL SYMBOL TABLE
(byte) loop::ss#1 ss zp ZP_BYTE:7 151.5
(byte) loop::ss#6 ss zp ZP_BYTE:7 33.666666666666664
(byte) loop::sy
(byte) loop::sy#1 reg byte x 151.5
(byte) loop::sy#2 reg byte x 101.0
(byte) loop::sy#1 reg byte y 151.5
(byte) loop::sy#2 reg byte y 101.0
(byte) loop::y_idx
(byte) loop::y_idx#1 reg byte y 67.33333333333333
(byte) loop::y_idx#2 reg byte y 157.0
(byte~) loop::y_idx#3 reg byte y 22.0
(byte) loop::y_idx#1 reg byte x 67.33333333333333
(byte) loop::y_idx#2 reg byte x 157.0
(byte~) loop::y_idx#3 reg byte x 22.0
(void()) main()
(label) main::@1
(label) main::@return
@ -4102,7 +4088,7 @@ FINAL SYMBOL TABLE
(byte~) plexShowSprite::$3 reg byte a 4.0
(byte~) plexShowSprite::$4 reg byte a 4.0
(byte/word/dword~) plexShowSprite::$6 reg byte a 4.0
(byte/signed word/word/dword/signed dword~) plexShowSprite::$7 reg byte a 4.0
(byte/signed word/word/dword/signed dword~) plexShowSprite::$7 reg byte x 4.0
(label) plexShowSprite::@1
(label) plexShowSprite::@2
(label) plexShowSprite::@4
@ -4113,7 +4099,7 @@ FINAL SYMBOL TABLE
(byte/signed word/word/dword/signed dword~) plexShowSprite::plexFreeAdd1_$0
(byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$0#0 reg byte a 4.0
(byte/signed word/word/dword/signed dword~) plexShowSprite::plexFreeAdd1_$1
(byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$1#0 reg byte a 4.0
(byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$1#0 reg byte x 4.0
(byte/word/dword~) plexShowSprite::plexFreeAdd1_$2
(byte) plexShowSprite::plexFreeAdd1_ypos
(byte) plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 3.0
@ -4163,8 +4149,8 @@ FINAL SYMBOL TABLE
(byte) plex_sprite_msb#44 plex_sprite_msb zp ZP_BYTE:6 4.458333333333332
zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ]
reg byte y [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ]
reg byte x [ loop::sy#2 loop::sy#1 ]
reg byte x [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ]
reg byte y [ loop::sy#2 loop::sy#1 ]
zp ZP_BYTE:3 [ plex_free_next#17 plex_free_next#13 plexSort::m#2 plexSort::m#1 ]
zp ZP_BYTE:4 [ plex_sprite_idx#44 plex_sprite_idx#15 plexSort::nxt_idx#0 ]
zp ZP_BYTE:5 [ plex_show_idx#44 plex_show_idx#15 plexSort::nxt_y#0 ]
@ -4180,18 +4166,18 @@ reg byte a [ loop::$4 ]
zp ZP_BYTE:10 [ loop::plexFreeNextYpos1_return#0 plexShowSprite::plex_sprite_idx2#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_$0#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_$1#0 ]
reg byte x [ plexShowSprite::plexFreeAdd1_$1#0 ]
reg byte x [ plexShowSprite::xpos_idx#0 ]
reg byte a [ plexShowSprite::$3 ]
reg byte a [ plexShowSprite::$4 ]
reg byte a [ plexShowSprite::$6 ]
reg byte a [ plexShowSprite::$7 ]
reg byte x [ plexShowSprite::$7 ]
reg byte x [ plexSort::s#2 ]
reg byte a [ init::$6 ]
FINAL ASSEMBLER
Score: 63550
Score: 63150
//SEG0 File Comments
// A simple usage of the flexible sprite multiplexer routine
@ -4263,35 +4249,33 @@ loop: {
//SEG25 loop::@4
b4:
//SEG26 [13] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto loop::@4 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$ff
lda #$ff
cmp RASTER
bne b4
//SEG27 loop::@6
//SEG28 [14] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
inc BORDERCOL
//SEG29 [15] (byte~) loop::y_idx#3 ← (byte) loop::sin_idx#6 -- vbuyy=vbuz1
ldy sin_idx
//SEG29 [15] (byte~) loop::y_idx#3 ← (byte) loop::sin_idx#6 -- vbuxx=vbuz1
ldx sin_idx
//SEG30 [16] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7]
//SEG31 [16] phi (byte) loop::sy#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@6->loop::@7#0] -- vbuxx=vbuc1
ldx #0
//SEG31 [16] phi (byte) loop::sy#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@6->loop::@7#0] -- vbuyy=vbuc1
ldy #0
//SEG32 [16] phi (byte) loop::y_idx#2 = (byte~) loop::y_idx#3 [phi:loop::@6->loop::@7#1] -- register_copy
//SEG33 [16] phi from loop::@7 to loop::@7 [phi:loop::@7->loop::@7]
//SEG34 [16] phi (byte) loop::sy#2 = (byte) loop::sy#1 [phi:loop::@7->loop::@7#0] -- register_copy
//SEG35 [16] phi (byte) loop::y_idx#2 = (byte) loop::y_idx#1 [phi:loop::@7->loop::@7#1] -- register_copy
//SEG36 loop::@7
b7:
//SEG37 [17] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte*) YSIN#0 + (byte) loop::y_idx#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
lda YSIN,y
sta PLEX_YPOS,x
//SEG38 [18] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte/signed byte/word/signed word/dword/signed dword) 8 -- vbuyy=vbuyy_plus_vbuc1
tya
clc
adc #8
tay
//SEG39 [19] (byte) loop::sy#1 ← ++ (byte) loop::sy#2 -- vbuxx=_inc_vbuxx
inx
//SEG40 [20] if((byte) loop::sy#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@7 -- vbuxx_neq_vbuc1_then_la1
cpx #PLEX_COUNT-1+1
//SEG37 [17] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte*) YSIN#0 + (byte) loop::y_idx#2) -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx
lda YSIN,x
sta PLEX_YPOS,y
//SEG38 [18] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte/signed byte/word/signed word/dword/signed dword) 8 -- vbuxx=vbuxx_plus_vbuc1
txa
axs #-8
//SEG39 [19] (byte) loop::sy#1 ← ++ (byte) loop::sy#2 -- vbuyy=_inc_vbuyy
iny
//SEG40 [20] if((byte) loop::sy#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@7 -- vbuyy_neq_vbuc1_then_la1
cpy #PLEX_COUNT-1+1
bne b7
//SEG41 loop::@20
//SEG42 [21] (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz1_plus_1
@ -4308,8 +4292,8 @@ loop: {
//SEG48 loop::@8
b8:
//SEG49 [25] (byte~) loop::$4 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0 -- vbuaa=_deref_pbuc1_band_vbuc2
lda D011
and #VIC_RST8
lda #VIC_RST8
and D011
//SEG50 [26] if((byte~) loop::$4!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto loop::@8 -- vbuaa_neq_0_then_la1
cmp #0
bne b8
@ -4359,8 +4343,8 @@ loop: {
//SEG73 [33] (byte) loop::ss#1 ← ++ (byte) loop::ss#6 -- vbuz1=_inc_vbuz1
inc ss
//SEG74 [34] if((byte) loop::ss#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@11 -- vbuz1_neq_vbuc1_then_la1
lda ss
cmp #PLEX_COUNT-1+1
lda #PLEX_COUNT-1+1
cmp ss
bne b11
//SEG75 loop::@27
//SEG76 [35] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2
@ -4393,15 +4377,15 @@ plexShowSprite: {
//SEG85 [40] *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plex_free_next#17) ← (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$0#0 -- pbuc1_derefidx_vbuz1=vbuaa
ldy plex_free_next
sta PLEX_FREE_YPOS,y
//SEG86 [41] (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$1#0 ← (byte) plex_free_next#17 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuz1_plus_1
tya
clc
adc #1
//SEG87 [42] (byte) plex_free_next#13 ← (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$1#0 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuaa_band_vbuc1
and #7
sta plex_free_next
//SEG86 [41] (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$1#0 ← (byte) plex_free_next#17 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuz1_plus_1
ldx plex_free_next
inx
//SEG87 [42] (byte) plex_free_next#13 ← (byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$1#0 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuxx_band_vbuc1
lda #7
sax plex_free_next
//SEG88 plexShowSprite::@7
//SEG89 [43] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#44) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#44)) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_pbuc3_derefidx_vbuz2
ldx plex_show_idx
ldy PLEX_SORTED_IDX,x
lda PLEX_PTR,y
ldx plex_sprite_idx
@ -4430,13 +4414,12 @@ plexShowSprite: {
sta SPRITES_XMSB
//SEG98 plexShowSprite::@2
b2:
//SEG99 [51] (byte/signed word/word/dword/signed dword~) plexShowSprite::$7 ← (byte) plex_sprite_idx#44 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuz1_plus_1
lda plex_sprite_idx
clc
adc #1
//SEG100 [52] (byte) plex_sprite_idx#15 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$7 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuaa_band_vbuc1
and #7
sta plex_sprite_idx
//SEG99 [51] (byte/signed word/word/dword/signed dword~) plexShowSprite::$7 ← (byte) plex_sprite_idx#44 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuz1_plus_1
ldx plex_sprite_idx
inx
//SEG100 [52] (byte) plex_sprite_idx#15 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$7 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuxx_band_vbuc1
lda #7
sax plex_sprite_idx
//SEG101 [53] (byte) plex_show_idx#15 ← ++ (byte) plex_show_idx#44 -- vbuz1=_inc_vbuz1
inc plex_show_idx
//SEG102 [54] (byte) plex_sprite_msb#25 ← (byte) plex_sprite_msb#44 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz1_rol_1
@ -4526,8 +4509,8 @@ plexSort: {
//SEG135 [72] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 -- vbuz1=_inc_vbuz1
inc m
//SEG136 [73] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexSort::@1 -- vbuz1_neq_vbuc1_then_la1
lda m
cmp #PLEX_COUNT-2+1
lda #PLEX_COUNT-2+1
cmp m
bne b1
//SEG137 [74] phi from plexSort::@2 to plexSort::plexFreePrepare1 [phi:plexSort::@2->plexSort::plexFreePrepare1]
//SEG138 plexSort::plexFreePrepare1

View File

@ -154,12 +154,12 @@
(byte) loop::ss#1 ss zp ZP_BYTE:7 151.5
(byte) loop::ss#6 ss zp ZP_BYTE:7 33.666666666666664
(byte) loop::sy
(byte) loop::sy#1 reg byte x 151.5
(byte) loop::sy#2 reg byte x 101.0
(byte) loop::sy#1 reg byte y 151.5
(byte) loop::sy#2 reg byte y 101.0
(byte) loop::y_idx
(byte) loop::y_idx#1 reg byte y 67.33333333333333
(byte) loop::y_idx#2 reg byte y 157.0
(byte~) loop::y_idx#3 reg byte y 22.0
(byte) loop::y_idx#1 reg byte x 67.33333333333333
(byte) loop::y_idx#2 reg byte x 157.0
(byte~) loop::y_idx#3 reg byte x 22.0
(void()) main()
(label) main::@1
(label) main::@return
@ -177,7 +177,7 @@
(byte~) plexShowSprite::$3 reg byte a 4.0
(byte~) plexShowSprite::$4 reg byte a 4.0
(byte/word/dword~) plexShowSprite::$6 reg byte a 4.0
(byte/signed word/word/dword/signed dword~) plexShowSprite::$7 reg byte a 4.0
(byte/signed word/word/dword/signed dword~) plexShowSprite::$7 reg byte x 4.0
(label) plexShowSprite::@1
(label) plexShowSprite::@2
(label) plexShowSprite::@4
@ -188,7 +188,7 @@
(byte/signed word/word/dword/signed dword~) plexShowSprite::plexFreeAdd1_$0
(byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$0#0 reg byte a 4.0
(byte/signed word/word/dword/signed dword~) plexShowSprite::plexFreeAdd1_$1
(byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$1#0 reg byte a 4.0
(byte/signed word/word/dword/signed dword) plexShowSprite::plexFreeAdd1_$1#0 reg byte x 4.0
(byte/word/dword~) plexShowSprite::plexFreeAdd1_$2
(byte) plexShowSprite::plexFreeAdd1_ypos
(byte) plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 3.0
@ -238,8 +238,8 @@
(byte) plex_sprite_msb#44 plex_sprite_msb zp ZP_BYTE:6 4.458333333333332
zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ]
reg byte y [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ]
reg byte x [ loop::sy#2 loop::sy#1 ]
reg byte x [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ]
reg byte y [ loop::sy#2 loop::sy#1 ]
zp ZP_BYTE:3 [ plex_free_next#17 plex_free_next#13 plexSort::m#2 plexSort::m#1 ]
zp ZP_BYTE:4 [ plex_sprite_idx#44 plex_sprite_idx#15 plexSort::nxt_idx#0 ]
zp ZP_BYTE:5 [ plex_show_idx#44 plex_show_idx#15 plexSort::nxt_y#0 ]
@ -255,11 +255,11 @@ reg byte a [ loop::$4 ]
zp ZP_BYTE:10 [ loop::plexFreeNextYpos1_return#0 plexShowSprite::plex_sprite_idx2#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_$0#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_$1#0 ]
reg byte x [ plexShowSprite::plexFreeAdd1_$1#0 ]
reg byte x [ plexShowSprite::xpos_idx#0 ]
reg byte a [ plexShowSprite::$3 ]
reg byte a [ plexShowSprite::$4 ]
reg byte a [ plexShowSprite::$6 ]
reg byte a [ plexShowSprite::$7 ]
reg byte x [ plexShowSprite::$7 ]
reg byte x [ plexSort::s#2 ]
reg byte a [ init::$6 ]

View File

@ -15,8 +15,8 @@ main: {
jsr music.init
// Wait for the RASTER
b2:
lda RASTER
cmp #$fd
lda #$fd
cmp RASTER
bne b2
inc BORDERCOL
// Play the music

View File

@ -550,8 +550,8 @@ main: {
//SEG14 main::@2
b2:
//SEG15 [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $fd) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$fd
lda #$fd
cmp RASTER
bne b2
jmp b3
//SEG16 main::@3
@ -626,8 +626,8 @@ main: {
//SEG14 main::@2
b2:
//SEG15 [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $fd) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$fd
lda #$fd
cmp RASTER
bne b2
jmp b3
//SEG16 main::@3
@ -796,8 +796,8 @@ main: {
//SEG14 main::@2
b2:
//SEG15 [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $fd) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1
lda RASTER
cmp #$fd
lda #$fd
cmp RASTER
bne b2
//SEG16 main::@3
//SEG17 [8] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1

Some files were not shown because too many files have changed in this diff Show More