diff --git a/src/main/fragment/cache/fragment-cache-csg65ce02.asm b/src/main/fragment/cache/fragment-cache-csg65ce02.asm index 6fde89ef6..bd3cc9030 100644 --- a/src/main/fragment/cache/fragment-cache-csg65ce02.asm +++ b/src/main/fragment/cache/fragment-cache-csg65ce02.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 17a3d463b0 17a3d47bef +//KICKC FRAGMENT CACHE 17a386c46b 17a386dcb0 //FRAGMENT vbuz1=vbuc1 lda #{c1} sta {z1} diff --git a/src/main/fragment/cache/fragment-cache-mega45gs02.asm b/src/main/fragment/cache/fragment-cache-mega45gs02.asm index 01f2adf7f..f757b82ca 100644 --- a/src/main/fragment/cache/fragment-cache-mega45gs02.asm +++ b/src/main/fragment/cache/fragment-cache-mega45gs02.asm @@ -1,116 +1,4 @@ -//KICKC FRAGMENT CACHE 17a3d463b0 17a3d47bef -//FRAGMENT vduz1=vduc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -lda #<{c1}>>$10 -sta {z1}+2 -lda #>{c1}>>$10 -sta {z1}+3 -//FRAGMENT vbuz1=vbuc1 -lda #{c1} -sta {z1} -//FRAGMENT vbuz1_lt_vbuc1_then_la1 -lda {z1} -cmp #{c1} -bcc {la1} -//FRAGMENT _deref_pduc1=vduz1 -ldq {z1} -stq {c1} -//FRAGMENT vduz1=vduz1_plus_vduz2 -clc -ldq {z1} -adcq {z2} -stq {z1} -//FRAGMENT vduz1=vduz1_plus_vbuz2 -lda {z2} -clc -adc {z1} -sta {z1} -lda {z1}+1 -adc #0 -sta {z1}+1 -lda {z1}+2 -adc #0 -sta {z1}+2 -lda {z1}+3 -adc #0 -sta {z1}+3 -//FRAGMENT vbuz1=_inc_vbuz1 -inc {z1} -//FRAGMENT vbuaa_lt_vbuc1_then_la1 -cmp #{c1} -bcc {la1} -//FRAGMENT vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1 -lda #{c1} -ldy {z1} -cmp {c2},y -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=vbuz1 -ldy {z1} -tya -sta {c1},y -//FRAGMENT vbuc1_neq_pbuc2_derefidx_vbuaa_then_la1 -tay -lda #{c1} -cmp {c2},y -bne {la1} -//FRAGMENT vbuc1_neq_pbuc2_derefidx_vbuxx_then_la1 -lda {c2},x -cmp #{c1} -bne {la1} -//FRAGMENT vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1 -lda #{c1} -cmp {c2},y -bne {la1} -//FRAGMENT vbuc1_neq_pbuc2_derefidx_vbuzz_then_la1 -tza -tay -lda #{c1} -cmp {c2},y -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx -lda {c2},x -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy -lda {c2},y -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuzz=pbuc2_derefidx_vbuzz -tza -tay -lda {c2},y -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=vbuxx -txa -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=vbuyy -tya -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuzz=vbuzz -tza -tax -sta {c1},x -//FRAGMENT vbuxx=vbuc1 -ldx #{c1} -//FRAGMENT vbuxx=_inc_vbuxx -inx -//FRAGMENT vbuyy=vbuc1 -ldy #{c1} -//FRAGMENT vbuyy=_inc_vbuyy -iny -//FRAGMENT vbuzz=vbuc1 -ldz #{c1} -//FRAGMENT vbuzz=_inc_vbuzz -inz -//FRAGMENT vduz1=vwuc1 -NO_SYNTHESIS -//FRAGMENT vduz1=vwsc1 -NO_SYNTHESIS +//KICKC FRAGMENT CACHE 17a386c46b 17a386dcb0 //FRAGMENT _deref_pbuc1=vbuc2 lda #{c2} sta {c1} @@ -168,6 +56,332 @@ sta ({z1}),y ldy {z1} //FRAGMENT vbuzz=_lo_pbuz1 ldz {z1} +//FRAGMENT vbuz1=vbuc1 +lda #{c1} +sta {z1} +//FRAGMENT vbuz1=_inc_vbuz1 +inc {z1} +//FRAGMENT vbuz1=vbuz2 +lda {z2} +sta {z1} +//FRAGMENT vbuz1_neq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuz1=vbuc2 +lda #{c2} +ldy {z1} +sta {c1},y +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +//FRAGMENT _deref_pbuc1=vbuz1 +lda {z1} +sta {c1} +//FRAGMENT vbuz1_lt_vbuc1_then_la1 +lda {z1} +cmp #{c1} +bcc {la1} +//FRAGMENT vbuz1_eq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +beq {la1} +//FRAGMENT vbuz1=vbuz2_plus_1 +lda {z2} +inc +sta {z1} +//FRAGMENT vbuz1_neq_0_then_la1 +lda {z1} +cmp #0 +bne {la1} +//FRAGMENT vbuz1=_deref_pbuc1 +lda {c1} +sta {z1} +//FRAGMENT vbuz1_eq__deref_pbuc1_then_la1 +lda {c1} +cmp {z1} +beq {la1} +//FRAGMENT vbuz1=vbuc1_plus_pbuc2_derefidx_vbuz2 +lda #{c1} +ldy {z2} +clc +adc {c2},y +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1},y +//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +sta {c1} +//FRAGMENT _deref_qprc1=pprc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT pbuz1_neq_pbuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT vbuaa=vbuz1 +lda {z1} +//FRAGMENT vbuxx=vbuz1 +ldx {z1} +//FRAGMENT vbuaa_neq_vbuc1_then_la1 +cmp #{c1} +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuaa=vbuc2 +tay +lda #{c2} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=vbuc2 +lda #{c2} +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbuc2 +lda #{c2} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuzz=vbuc2 +tza +tay +lda #{c2} +sta {c1},y +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1 +ldy {z1} +lda {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1 +ldy {z1} +ldx {c1},y +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1 +ldx {z1} +ldy {c1},x +//FRAGMENT vbuzz=pbuc1_derefidx_vbuz1 +ldx {z1} +ldz {c1},x +//FRAGMENT _deref_pbuc1=vbuaa +sta {c1} +//FRAGMENT vbuaa_lt_vbuc1_then_la1 +cmp #{c1} +bcc {la1} +//FRAGMENT vbuaa_eq_vbuc1_then_la1 +cmp #{c1} +beq {la1} +//FRAGMENT vbuz1=vbuaa_plus_1 +inc +sta {z1} +//FRAGMENT vbuz1=vbuxx_plus_1 +inx +stx {z1} +//FRAGMENT vbuaa=_deref_pbuc1 +lda {c1} +//FRAGMENT vbuxx=_deref_pbuc1 +ldx {c1} +//FRAGMENT vbuaa_eq__deref_pbuc1_then_la1 +cmp {c1} +beq {la1} +//FRAGMENT vbuz1=vbuc1_plus_pbuc2_derefidx_vbuxx +lda #{c1} +clc +adc {c2},x +sta {z1} +//FRAGMENT vbuz1=vbuc1_plus_pbuc2_derefidx_vbuyy +lda #{c1} +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuz1=vbuc1_plus_pbuc2_derefidx_vbuzz +tza +tay +lda #{c1} +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuaa=vbuc1_plus_pbuc2_derefidx_vbuz1 +lda #{c1} +ldy {z1} +clc +adc {c2},y +//FRAGMENT vbuaa=vbuc1_plus_pbuc2_derefidx_vbuxx +lda #{c1} +clc +adc {c2},x +//FRAGMENT vbuaa=vbuc1_plus_pbuc2_derefidx_vbuyy +lda #{c1} +clc +adc {c2},y +//FRAGMENT vbuaa=vbuc1_plus_pbuc2_derefidx_vbuzz +tza +tay +lda #{c1} +clc +adc {c2},y +//FRAGMENT vbuxx=vbuc1_plus_pbuc2_derefidx_vbuz1 +lda #{c1} +ldx {z1} +clc +adc {c2},x +tax +//FRAGMENT vbuxx=vbuc1_plus_pbuc2_derefidx_vbuxx +lda #{c1} +clc +adc {c2},x +tax +//FRAGMENT vbuxx=vbuc1_plus_pbuc2_derefidx_vbuyy +lda #{c1} +clc +adc {c2},y +tax +//FRAGMENT vbuxx=vbuc1_plus_pbuc2_derefidx_vbuzz +tza +tax +lda #{c1} +clc +adc {c2},x +tax +//FRAGMENT vbuyy=vbuc1_plus_pbuc2_derefidx_vbuz1 +lda #{c1} +ldy {z1} +clc +adc {c2},y +tay +//FRAGMENT vbuyy=vbuc1_plus_pbuc2_derefidx_vbuxx +lda #{c1} +clc +adc {c2},x +tay +//FRAGMENT vbuyy=vbuc1_plus_pbuc2_derefidx_vbuyy +lda #{c1} +clc +adc {c2},y +tay +//FRAGMENT vbuyy=vbuc1_plus_pbuc2_derefidx_vbuzz +tza +tay +lda #{c1} +clc +adc {c2},y +tay +//FRAGMENT vbuzz=vbuc1_plus_pbuc2_derefidx_vbuz1 +lda #{c1} +ldy {z1} +clc +adc {c2},y +taz +//FRAGMENT vbuzz=vbuc1_plus_pbuc2_derefidx_vbuxx +lda #{c1} +clc +adc {c2},x +taz +//FRAGMENT vbuzz=vbuc1_plus_pbuc2_derefidx_vbuyy +lda #{c1} +clc +adc {c2},y +taz +//FRAGMENT vbuzz=vbuc1_plus_pbuc2_derefidx_vbuzz +tza +tay +lda #{c1} +clc +adc {c2},y +taz +//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuaa +tay +lda {c2},y +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx +lda {c2},x +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy +lda {c2},y +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuzz=pbuc2_derefidx_vbuzz +tza +tay +lda {c2},y +sta {c1},y +//FRAGMENT vbuxx_neq_0_then_la1 +cpx #0 +bne {la1} +//FRAGMENT vbuxx_neq_vbuc1_then_la1 +cpx #{c1} +bne {la1} +//FRAGMENT vbuxx_lt_vbuc1_then_la1 +cpx #{c1} +bcc {la1} +//FRAGMENT vbuxx_eq_vbuc1_then_la1 +cpx #{c1} +beq {la1} +//FRAGMENT vbuxx=vbuc1 +ldx #{c1} +//FRAGMENT vbuxx=_inc_vbuxx +inx +//FRAGMENT vbuyy=vbuc1 +ldy #{c1} +//FRAGMENT vbuyy_lt_vbuc1_then_la1 +cpy #{c1} +bcc {la1} +//FRAGMENT vbuyy=_inc_vbuyy +iny +//FRAGMENT vbuzz=vbuc1 +ldz #{c1} +//FRAGMENT vbuzz_lt_vbuc1_then_la1 +cpz #{c1} +bcc {la1} +//FRAGMENT vbuzz=_inc_vbuzz +inz +//FRAGMENT vbuyy_neq_0_then_la1 +cpy #0 +bne {la1} +//FRAGMENT vbuzz_neq_0_then_la1 +cpz #0 +bne {la1} +//FRAGMENT vbuxx_eq__deref_pbuc1_then_la1 +cpx {c1} +beq {la1} +//FRAGMENT vbuyy=_deref_pbuc1 +ldy {c1} +//FRAGMENT vbuyy_eq__deref_pbuc1_then_la1 +cpy {c1} +beq {la1} +//FRAGMENT vbuzz=_deref_pbuc1 +ldz {c1} +//FRAGMENT vbuzz_eq__deref_pbuc1_then_la1 +cpz {c1} +beq {la1} +//FRAGMENT vbuyy=vbuz1 +ldy {z1} +//FRAGMENT vbuzz=vbuz1 +ldz {z1} +//FRAGMENT vbuyy_neq_vbuc1_then_la1 +cpy #{c1} +bne {la1} +//FRAGMENT vbuzz_neq_vbuc1_then_la1 +cpz #{c1} +bne {la1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx +lda {c1},x +sta {z1} +//FRAGMENT vbuaa=vbuz1_plus_1 +lda {z1} +inc +//FRAGMENT vbuyy=vbuz1_plus_1 +ldy {z1} +iny +//FRAGMENT _deref_pbuc1=vbuyy +sty {c1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx +lda {c1},x +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx +ldy {c1},x +//FRAGMENT vbuaa=vbuaa_plus_1 +inc +//FRAGMENT vbuaa=vbuyy_plus_1 +tya +inc //FRAGMENT vbuz1=_deref_pbuz2 ldy #0 lda ({z2}),y @@ -176,13 +390,6 @@ sta {z1} lda #{c1} cmp {z1} bne {la1} -//FRAGMENT vbuz1=vbuz2 -lda {z2} -sta {z1} -//FRAGMENT vbuz1_eq_vbuc1_then_la1 -lda #{c1} -cmp {z1} -beq {la1} //FRAGMENT pbuz1_derefidx_vbuz2=vbuz3 lda {z3} ldy {z2} @@ -191,10 +398,6 @@ sta ({z1}),y lda #{c1} ldy {z2} sta ({z1}),y -//FRAGMENT vbuz1_neq_vbuc1_then_la1 -lda #{c1} -cmp {z1} -bne {la1} //FRAGMENT pbuz1=pbuz1_plus_vbuc1 lda #{c1} clc @@ -271,9 +474,6 @@ cmp #{c1} bne {la1} //FRAGMENT vbuz1=vbuaa sta {z1} -//FRAGMENT vbuaa_eq_vbuc1_then_la1 -cmp #{c1} -beq {la1} //FRAGMENT pbuz1_derefidx_vbuz2=vbuaa ldy {z2} sta ({z1}),y @@ -281,15 +481,6 @@ sta ({z1}),y txa ldz {z2} sta ({z1}),z -//FRAGMENT vbuaa=vbuz1 -lda {z1} -//FRAGMENT vbuxx=vbuz1 -ldx {z1} -//FRAGMENT vbuxx_eq_vbuc1_then_la1 -cpx #{c1} -beq {la1} -//FRAGMENT vbuyy=vbuz1 -ldy {z1} //FRAGMENT vbuyy_eq_vbuc1_then_la1 cpy #{c1} beq {la1} @@ -297,8 +488,6 @@ beq {la1} tya ldy {z2} sta ({z1}),y -//FRAGMENT vbuzz=vbuz1 -ldz {z1} //FRAGMENT vbuzz_eq_vbuc1_then_la1 cpz #{c1} beq {la1} @@ -321,3 +510,76 @@ cpz #{c1} bne {la1} //FRAGMENT vbuaa=vbuzz tza +//FRAGMENT vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1 +lda #{c1} +ldy {z1} +cmp {c2},y +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuz1=vbuz1 +ldy {z1} +tya +sta {c1},y +//FRAGMENT vbuc1_neq_pbuc2_derefidx_vbuaa_then_la1 +tay +lda #{c1} +cmp {c2},y +bne {la1} +//FRAGMENT vbuc1_neq_pbuc2_derefidx_vbuxx_then_la1 +lda {c2},x +cmp #{c1} +bne {la1} +//FRAGMENT vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1 +lda #{c1} +cmp {c2},y +bne {la1} +//FRAGMENT vbuc1_neq_pbuc2_derefidx_vbuzz_then_la1 +tza +tay +lda #{c1} +cmp {c2},y +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuxx=vbuxx +txa +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbuyy +tya +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuzz=vbuzz +tza +tax +sta {c1},x +//FRAGMENT vduz1=vduc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +lda #<{c1}>>$10 +sta {z1}+2 +lda #>{c1}>>$10 +sta {z1}+3 +//FRAGMENT _deref_pduc1=vduz1 +ldq {z1} +stq {c1} +//FRAGMENT vduz1=vduz1_plus_vduz2 +clc +ldq {z1} +adcq {z2} +stq {z1} +//FRAGMENT vduz1=vduz1_plus_vbuz2 +lda {z2} +clc +adc {z1} +sta {z1} +lda {z1}+1 +adc #0 +sta {z1}+1 +lda {z1}+2 +adc #0 +sta {z1}+2 +lda {z1}+3 +adc #0 +sta {z1}+3 +//FRAGMENT vduz1=vwuc1 +NO_SYNTHESIS +//FRAGMENT vduz1=vwsc1 +NO_SYNTHESIS diff --git a/src/main/fragment/cache/fragment-cache-mos6502.asm b/src/main/fragment/cache/fragment-cache-mos6502.asm index 57187f2a7..e2872981d 100644 --- a/src/main/fragment/cache/fragment-cache-mos6502.asm +++ b/src/main/fragment/cache/fragment-cache-mos6502.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 17a3d463b0 17a3d47bef +//KICKC FRAGMENT CACHE 17a386c46b 17a386dcb0 //FRAGMENT vbuz1=vbuc1 lda #{c1} sta {z1} diff --git a/src/main/fragment/cache/fragment-cache-mos6502x.asm b/src/main/fragment/cache/fragment-cache-mos6502x.asm index 274e60249..325985c0f 100644 --- a/src/main/fragment/cache/fragment-cache-mos6502x.asm +++ b/src/main/fragment/cache/fragment-cache-mos6502x.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 17a3d463b0 17a3d47bef +//KICKC FRAGMENT CACHE 17a386c46b 17a386dcb0 //FRAGMENT vbuz1=vbuc1 lda #{c1} sta {z1} @@ -8551,6 +8551,11 @@ sty {z1} txa sta {z1}+1 sty {z1} +//FRAGMENT _deref_qbuc1=pbuc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 //FRAGMENT _deref_pbsc1=vbsc2 lda #{c2} sta {c1} @@ -8941,11 +8946,6 @@ tax stx $ff cpy $ff bne {la1} -//FRAGMENT _deref_qbuc1=pbuc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 //FRAGMENT pwuz1_derefidx_vbuc1=vwuz2 ldy #{c1} lda {z2} diff --git a/src/main/fragment/cache/fragment-cache-wdc65c02.asm b/src/main/fragment/cache/fragment-cache-wdc65c02.asm index 67a6c4f20..dc301b95d 100644 --- a/src/main/fragment/cache/fragment-cache-wdc65c02.asm +++ b/src/main/fragment/cache/fragment-cache-wdc65c02.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 17a3d463b0 17a3d47bef +//KICKC FRAGMENT CACHE 17a386c46b 17a386dcb0 //FRAGMENT vbuz1=_deref_pbuc1 lda {c1} sta {z1} diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy_eq_0_then_la1.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy_eq_0_then_la1.asm new file mode 100644 index 000000000..8cef7e26e --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy_eq_0_then_la1.asm @@ -0,0 +1,7 @@ +lda {c1},y +cmp #0 +bne !+ +lda {c1}+1,y +cmp #0 +beq {la1} +!: \ No newline at end of file