1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-04-17 00:39:07 +00:00

Added missing fragments and synthesis for NES kickballs.c. See https://forums.nesdev.com/viewtopic.php?f=2&t=20187&start=15

This commit is contained in:
jespergravgaard 2020-09-26 21:59:10 +02:00
parent 4e301e0258
commit 202fd67943
20 changed files with 238 additions and 5 deletions

View File

@ -1,4 +1,4 @@
//KICKC FRAGMENT CACHE 17f3bfb106 17f3bfc988
//KICKC FRAGMENT CACHE 148111253e 1481113e09
//FRAGMENT vbuz1=vbuc1
lda #{c1}
sta {z1}

View File

@ -1,4 +1,4 @@
//KICKC FRAGMENT CACHE 17f3bfb106 17f3bfc988
//KICKC FRAGMENT CACHE 148111253e 1481113e09
//FRAGMENT _deref_pbuc1=vbuc2
lda #{c2}
sta {c1}

View File

@ -1,4 +1,4 @@
//KICKC FRAGMENT CACHE 17f3bfb106 17f3bfc988
//KICKC FRAGMENT CACHE 148111253e 1481113e09
//FRAGMENT vbuz1=vbuc1
lda #{c1}
sta {z1}

View File

@ -1,4 +1,4 @@
//KICKC FRAGMENT CACHE 17f3bfb106 17f3bfc988
//KICKC FRAGMENT CACHE 148111253e 1481113e09
//FRAGMENT vbuz1=vbuc1
lda #{c1}
sta {z1}
@ -17491,6 +17491,123 @@ lda {z1}
cmp #<{c1}
bcc {la1}
!:
//FRAGMENT vwsz1=pwsc1_derefidx_vbuz2_minus_pwsc2_derefidx_vbuz2
ldy {z2}
sec
lda {c1},y
sbc {c2},y
sta {z1}
lda {c1}+1,y
sbc {c2}+1,y
sta {z1}+1
//FRAGMENT vwsz1=_sword_pbuc1_derefidx_vbuz2
ldy {z2}
lda {c1},y
sta {z1}
lda #0
sta {z1}+1
//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_rol_4
ldy {z2}
lda {c1},y
asl
sta {z1}
lda {c1}+1,y
rol
sta {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
//FRAGMENT pbsc1_derefidx_vbuz1=vbsc2
lda #{c2}
ldy {z1}
sta {c1},y
//FRAGMENT vwsz1=pwsc1_derefidx_vbuaa_minus_pwsc2_derefidx_vbuaa
tay
sec
lda {c1},y
sbc {c2},y
sta {z1}
lda {c1}+1,y
sbc {c2}+1,y
sta {z1}+1
//FRAGMENT vwsz1=pwsc1_derefidx_vbuxx_minus_pwsc2_derefidx_vbuxx
sec
lda {c1},x
sbc {c2},x
sta {z1}
lda {c1}+1,x
sbc {c2}+1,x
sta {z1}+1
//FRAGMENT vwsz1=pwsc1_derefidx_vbuyy_minus_pwsc2_derefidx_vbuyy
sec
lda {c1},y
sbc {c2},y
sta {z1}
lda {c1}+1,y
sbc {c2}+1,y
sta {z1}+1
//FRAGMENT vwsz1=_sword_pbuc1_derefidx_vbuxx
lda {c1},x
sta {z1}
lda #0
sta {z1}+1
//FRAGMENT vwsz1=_sword_pbuc1_derefidx_vbuyy
lda {c1},y
sta {z1}
lda #0
sta {z1}+1
//FRAGMENT vwuz1=pwuc1_derefidx_vbuaa_rol_4
tay
lda {c1},y
asl
sta {z1}
lda {c1}+1,y
rol
sta {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_rol_4
lda {c1},x
asl
sta {z1}
lda {c1}+1,x
rol
sta {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_rol_4
lda {c1},y
asl
sta {z1}
lda {c1}+1,y
rol
sta {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
//FRAGMENT pbsc1_derefidx_vbuxx=vbsc2
lda #{c2}
sta {c1},x
//FRAGMENT pbsc1_derefidx_vbuyy=vbsc2
lda #{c2}
sta {c1},y
//FRAGMENT pbsc1_derefidx_vbuz1=vbsaa
ldy {z1}
sta {c1},y
//FRAGMENT _deref_pwuc1=_deref_pwuc1_plus_vwuc2
lda #<{c2}
clc

View File

@ -1,4 +1,4 @@
//KICKC FRAGMENT CACHE 17f3bfb106 17f3bfc988
//KICKC FRAGMENT CACHE 148111253e 1481113e09
//FRAGMENT vbuz1=_deref_pbuc1
lda {c1}
sta {z1}

View File

@ -0,0 +1,7 @@
clc
lda {c1},y
adc #{c2}
sta {c1},x
lda {c1}+1,y
lda #0
sta {c1}+1,x

View File

@ -0,0 +1,7 @@
clc
lda {c1},x
adc #{c2}
sta {c1},y
lda {c1}+1,x
lda #0
sta {c1}+1,y

View File

@ -0,0 +1,6 @@
lda {c1},y
eor #<{c2}
sta {c1},y
lda {c1}+1,y
eor #>{c2}
sta {c1}+1,y

View File

@ -0,0 +1,7 @@
clc
lda {c1},y
adc {c2},x
sta {c1},y
lda {c1}+1,y
lda {c2}+1,x
sta {c1}+1,y

View File

@ -0,0 +1,7 @@
clc
lda {c1},y
adc {c2},y
sta {c1},y
lda {c1}+1,y
lda {c2}+1,y
sta {c1}+1,y

View File

@ -0,0 +1,4 @@
lda #0
sta {m1}+1
lda {c1}+1
sta {m1}

View File

@ -0,0 +1,4 @@
lda #0
sta {m1}+1
lda {c1}+1,y
sta {m1}

View File

@ -0,0 +1,6 @@
lda {m1}+1
bne {la1}
lda {m1}
cmp {m2}
bcs {la1}
!:

View File

@ -0,0 +1,7 @@
lda {m1}+1
bne {la1}
stx $ff
lda {m1}
cmp $ff
bcs {la1}
!:

View File

@ -0,0 +1,7 @@
lda {m1}+1
bne {la1}
sty $ff
lda {m1}
cmp $ff
bcs {la1}
!:

View File

@ -0,0 +1,6 @@
lda {m1}+1
bne !+
lda {m1}
cmp {m2}
bcc {la1}
!:

View File

@ -0,0 +1,7 @@
lda {m1}+1
bne !+
stx $ff
lda {m1}
cmp $ff
bcc {la1}
!:

View File

@ -0,0 +1,7 @@
lda {m1}+1
bne !+
sty $ff
lda {m1}
cmp $ff
bcc {la1}
!:

View File

@ -514,6 +514,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*)", lvalZM1+"|"+rvalAa+"|"+ twoZM1, "lda {m1}", "$1aa$2", null, mapZM1));
// Replace two M1s with AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*vb.)m1(.*)", lvalZM1+"|"+rvalAa+"|"+ threeZM1, "lda {m1}", "$1aa$2aa$3", null, mapZM1));
// Replace three M1s with AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*vb.)m1(.*vb.)m1(.*)", lvalZM1+"|"+rvalAa+"|"+ fourZM1, "lda {m1}", "$1aa$2aa$3aa$4", null, mapZM1));
// Replace first (not second) M1 with AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*)m1(.*)", lvalZM1+"|"+rvalAa, "lda {m1}", "$1aa$2m1$3", null, null));
// Replace second (not first) M1 with AA
@ -529,6 +531,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m2(.*)", lvalZM2+"|"+rvalAa+"|"+twoZM2, "lda {m2}", "$1aa$2", null, mapZM2));
// Replace two M2s with AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m2(.*vb.)m2(.*)", lvalZM2+"|"+rvalAa+"|"+threeZM2, "lda {m2}", "$1aa$2aa$3", null, mapZM2));
// Replace three M2s with AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m2(.*vb.)m2(.*vb.)m2(.*)", lvalZM2+"|"+rvalAa+"|"+fourZM2, "lda {m2}", "$1aa$2aa$3aa$4", null, mapZM2));
// Replace first (of 2) M2 with AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m2(.*)m2(.*)", lvalZM2+"|"+rvalAa, "lda {m2}", "$1aa$2m2$3", null, null));
// Replace second (of 2) M2 with AA
@ -538,6 +542,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m3(.*)", lvalZM3+"|"+rvalAa+"|"+twoZM3, "lda {m3}", "$1aa$2", null, mapZM3));
// Replace two M3s with AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m3(.*vb.)m3(.*)", lvalZM3+"|"+rvalAa+"|"+threeZM3, "lda {m3}", "$1aa$2aa$3", null, mapZM3));
// Replace three M3s with AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m3(.*vb.)m3(.*vb.)m3(.*)", lvalZM3+"|"+rvalAa+"|"+fourZM3, "lda {m3}", "$1aa$2aa$3aa$4", null, mapZM3));
// Replace first (of 2) M3 with AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m3(.*)m3(.*)", lvalZM3+"|"+rvalAa, "lda {m3}", "$1aa$2m3$3", null, null));
// Replace second (of 2) M3 with AA
@ -547,6 +553,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*)", lvalZM4+"|"+rvalAa+"|"+twoZM4, "lda {m4}", "$1aa$2", null, mapZM4));
// Replace two M4s with AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*vb.)m4(.*)", lvalZM4+"|"+rvalAa+"|"+threeZM4, "lda {m4}", "$1aa$2aa$3", null, mapZM4));
// Replace three M4s with AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*vb.)m4(.*vb.)m4(.*)", lvalZM4+"|"+rvalAa+"|"+fourZM4, "lda {m4}", "$1aa$2aa$3aa$4", null, mapZM4));
// Replace first (of 2) M4 with AA
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*)m4(.*)", lvalZM4+"|"+rvalAa, "lda {m4}", "$1aa$2m4$3", null, null));
// Replace second (of 2) M4 with AA
@ -556,6 +564,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*)", lvalZM1+"|"+rvalYy+"|"+ twoZM1, "ldy {m1}", "$1yy$2", null, mapZM1));
// Replace two M1s with YY
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*vb.)m1(.*)", lvalZM1+"|"+rvalYy+"|"+ threeZM1, "ldy {m1}", "$1yy$2yy$3", null, mapZM1));
// Replace three M1s with YY
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*vb.)m1(.*vb.)m1(.*)", lvalZM1+"|"+rvalYy+"|"+ fourZM1, "ldy {m1}", "$1yy$2yy$3yy$4", null, mapZM1));
// Replace first (not second) M1 with YY
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*)m1(.*)", lvalZM1+"|"+rvalYy, "ldy {m1}", "$1yy$2m1$3", null, null));
// Replace second (not first) M1 with YY
@ -571,6 +581,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m2(.*)", lvalZM2+"|"+rvalYy+"|"+twoZM2, "ldy {m2}", "$1yy$2", null, mapZM2));
// Replace two M2s with YY
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m2(.*vb.)m2(.*)", lvalZM2+"|"+rvalYy+"|"+threeZM2, "ldy {m2}", "$1yy$2yy$3", null, mapZM2));
// Replace three M2s with YY
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m2(.*vb.)m2(.*vb.)m2(.*)", lvalZM2+"|"+rvalYy+"|"+fourZM2, "ldy {m2}", "$1yy$2yy$3yy$4", null, mapZM2));
// Replace first (of 2) M2 with YY
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m2(.*)m2(.*)", lvalZM2+"|"+rvalYy, "ldy {m2}", "$1yy$2m2$3", null, null));
// Replace second (of 2) M2 with YY
@ -580,6 +592,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m3(.*)", lvalZM3+"|"+rvalYy+"|"+twoZM3, "ldy {m3}", "$1yy$2", null, mapZM3));
// Replace two M3s with YY
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m3(.*vb.)m3(.*)", lvalZM3+"|"+rvalYy+"|"+threeZM3, "ldy {m3}", "$1yy$2yy$3", null, mapZM3));
// Replace three M3s with YY
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m3(.*vb.)m3(.*vb.)m3(.*)", lvalZM3+"|"+rvalYy+"|"+fourZM3, "ldy {m3}", "$1yy$2yy$3yy$4", null, mapZM3));
// Replace first (of 2) M3 with YY
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m3(.*)m3(.*)", lvalZM3+"|"+rvalYy, "ldy {m3}", "$1yy$2m3$3", null, null));
// Replace second (of 2) M3 with YY
@ -589,6 +603,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*)", lvalZM4+"|"+rvalYy+"|"+twoZM4, "ldy {m4}", "$1yy$2", null, mapZM4));
// Replace two M4s with YY
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*vb.)m4(.*)", lvalZM4+"|"+rvalYy+"|"+threeZM4, "ldy {m4}", "$1yy$2yy$3", null, mapZM4));
// Replace three M4s with YY
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*vb.)m4(.*vb.)m4(.*)", lvalZM4+"|"+rvalYy+"|"+fourZM4, "ldy {m4}", "$1yy$2yy$3yy$4", null, mapZM4));
// Replace first (of 2) M4 with YY
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*)m4(.*)", lvalZM4+"|"+rvalYy, "ldy {m4}", "$1yy$2m4$3", null, null));
// Replace second (of 2) M4 with YY
@ -598,6 +614,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*)", lvalZM1+"|"+rvalXx+"|"+ twoZM1, "ldx {m1}", "$1xx$2", null, mapZM1));
// Replace two M1s with XX
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*vb.)m1(.*)", lvalZM1+"|"+rvalXx+"|"+ threeZM1, "ldx {m1}", "$1xx$2xx$3", null, mapZM1));
// Replace three M1s with XX
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*vb.)m1(.*vb.)m1(.*)", lvalZM1+"|"+rvalXx+"|"+ fourZM1, "ldx {m1}", "$1xx$2xx$3xx$4", null, mapZM1));
// Replace first (not second) M1 with XX
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*)m1(.*)", lvalZM1+"|"+rvalXx, "ldx {m1}", "$1xx$2m1$3", null, null));
// Replace second (not first) M1 with XX
@ -613,6 +631,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m2(.*)", lvalZM2+"|"+rvalXx+"|"+twoZM2, "ldx {m2}", "$1xx$2", null, mapZM2));
// Replace two M2s with XX
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m2(.*vb.)m2(.*)", lvalZM2+"|"+rvalXx+"|"+threeZM2, "ldx {m2}", "$1xx$2xx$3", null, mapZM2));
// Replace three M2s with XX
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m2(.*vb.)m2(.*vb.)m2(.*)", lvalZM2+"|"+rvalXx+"|"+fourZM2, "ldx {m2}", "$1xx$2xx$3xx$4", null, mapZM2));
// Replace first (of 2) M2 with XX
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m2(.*)m2(.*)", lvalZM2+"|"+rvalXx, "ldx {m2}", "$1xx$2m2$3", null, null));
// Replace second (of 2) M2 with XX
@ -622,6 +642,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m3(.*)", lvalZM3+"|"+rvalXx+"|"+twoZM3, "ldx {m3}", "$1xx$2", null, mapZM3));
// Replace two M3s with XX
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m3(.*vb.)m3(.*)", lvalZM3+"|"+rvalXx+"|"+threeZM3, "ldx {m3}", "$1xx$2xx$3", null, mapZM3));
// Replace three M3s with XX
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m3(.*vb.)m3(.*vb.)m3(.*)", lvalZM3+"|"+rvalXx+"|"+fourZM3, "ldx {m3}", "$1xx$2xx$3xx$4", null, mapZM3));
// Replace first (of 2) M3 with XX
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m3(.*)m3(.*)", lvalZM3+"|"+rvalXx, "ldx {m3}", "$1xx$2m3$3", null, null));
// Replace second (of 2) M3 with XX
@ -631,6 +653,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*)", lvalZM4+"|"+rvalXx+"|"+twoZM4, "ldx {m4}", "$1xx$2", null, mapZM4));
// Replace two M4s with XX
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*vb.)m4(.*)", lvalZM4+"|"+rvalXx+"|"+threeZM4, "ldx {m4}", "$1xx$2xx$3", null, mapZM4));
// Replace three M4s with XX
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*vb.)m4(.*vb.)m4(.*)", lvalZM4+"|"+rvalXx+"|"+fourZM4, "ldx {m4}", "$1xx$2xx$3xx$4", null, mapZM4));
// Replace first (of 2) M4 with XX
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*)m4(.*)", lvalZM4+"|"+rvalXx, "ldx {m4}", "$1xx$2m4$3", null, null));
// Replace second (of 2) M4 with XX

View File

@ -222,6 +222,11 @@ public class TestPrograms {
compileAndCompare("minus-precedence-problem.c");
}
//@Test
//public void testNesBalls() throws IOException, URISyntaxException {
// compileAndCompare("complex/nes-balls/kickballs.c");
//}
@Test
public void testNesDxycp() throws IOException, URISyntaxException {
compileAndCompare("examples/nes-dxycp/nes-dxycp.c");
@ -237,6 +242,11 @@ public class TestPrograms {
compileAndCompare("examples/nes-demo/nes-demo.c");
}
//@Test
//public void testMega65Wator() throws IOException, URISyntaxException {
// compileAndCompare("complex/m65wator/main.c");
//}
@Test
public void testMega65BankedMusic() throws IOException, URISyntaxException {
compileAndCompare("examples/mega65/banked-music.c");