diff --git a/src/main/fragment/cache/fragment-cache-wdc65c02.asm b/src/main/fragment/cache/fragment-cache-wdc65c02.asm index 5f631e95b..3d9eae77f 100644 --- a/src/main/fragment/cache/fragment-cache-wdc65c02.asm +++ b/src/main/fragment/cache/fragment-cache-wdc65c02.asm @@ -30,6 +30,16 @@ stx {z1} //FRAGMENT vbuz1=vbuz2 lda {z2} sta {z1} +//FRAGMENT pvoz1=pvoc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=vbuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 //FRAGMENT pbuz1=pbuc1 lda #<{c1} sta {z1} @@ -48,12 +58,30 @@ lda {z2} sta {z1} lda {z2}+1 sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_band_vbuc1 +//FRAGMENT vbuz1=_inc_vbuz1 +inc {z1} +//FRAGMENT vbuz1_lt_vbuc1_then_la1 +lda {z1} +cmp #{c1} +bcc {la1} +//FRAGMENT vwuz1=_inc_vwuz1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT vwuz1_le_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne !+ +lda {z1} +cmp #<{c1} +!: +bcc {la1} +beq {la1} +//FRAGMENT vbuz1=vwuz2_band_vbuc1 lda #{c1} and {z2} sta {z1} -lda #0 -sta {z1}+1 //FRAGMENT vbuz1=_deref_pbuc1_ror_7 lda {c1} rol @@ -127,14 +155,132 @@ lda {z2} sta {c1},y lda {z2}+1 sta {c1}+1,y +//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +sta {c1} +//FRAGMENT vbuz1=_lo_pvoz2 +lda {z2} +sta {z1} +//FRAGMENT vbuz1=_hi_pvoz2 +lda {z2}+1 +sta {z1} +//FRAGMENT _deref_pbuc1=vbuc2 +lda #{c2} +sta {c1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 +lda #{c2} +ora {c1} +sta {c1} +//FRAGMENT vbuz1=vbuc1_bor_vbuz2 +lda #{c1} +ora {z2} +sta {z1} +//FRAGMENT vwuz1_lt_vwuz2_then_la1 +lda {z1}+1 +cmp {z2}+1 +bcc {la1} +bne !+ +lda {z1} +cmp {z2} +bcc {la1} +!: +//FRAGMENT _deref_pbuc1=_deref_pbuc2 +lda {c2} +sta {c1} +//FRAGMENT vwuz1_eq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +bne !+ +lda {z1}+1 +bne !+ +jmp {la1} +!: +//FRAGMENT vwuz1_neq_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT pwuc1_derefidx_vbuz1=vwuc2 +ldy {z1} +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT vbuz1=vbuz1_bor_vbuc1 +lda #{c1} +ora {z1} +sta {z1} +//FRAGMENT vwuz1=_lo_vduz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=_hi_vduz2 +lda {z2}+2 +sta {z1} +lda {z2}+3 +sta {z1}+1 +//FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwuz2 +ldy {z1} +lda {z2} +sta {c1},y +//FRAGMENT vbuz1=vbuz2_rol_2 +lda {z2} +asl +asl +sta {z1} +//FRAGMENT pduc1_derefidx_vbuz1=vduz2 +ldy {z1} +lda {z2} +sta {c1},y +lda {z2}+1 +sta {c1}+1,y +lda {z2}+2 +sta {c1}+2,y +lda {z2}+3 +sta {c1}+3,y +//FRAGMENT vduz1=vduz2_ror_1 +lda {z2}+3 +lsr +sta {z1}+3 +lda {z2}+2 +ror +sta {z1}+2 +lda {z2}+1 +ror +sta {z1}+1 +lda {z2} +ror +sta {z1} +//FRAGMENT vbuz1=_hi_vwuz2 +lda {z2}+1 +sta {z1} +//FRAGMENT vbuz1=vbuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {z1} +//FRAGMENT vbuz1_eq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +beq {la1} +//FRAGMENT vbuz1_neq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +bne {la1} +//FRAGMENT pwuc1_derefidx_vbuz1=vbuc2 +lda #{c2} +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y //FRAGMENT _deref_pwuc1=vwuc2 lda #<{c2} sta {c1} lda #>{c2} sta {c1}+1 -//FRAGMENT _deref_pbuc1=vbuc2 -lda #{c2} -sta {c1} //FRAGMENT _deref_pduc1=vduc2 lda #<{c2} sta {c1} @@ -166,16 +312,6 @@ bne {la1} lda {z1} cmp {z2} bcc {la1} -//FRAGMENT pwuc1_derefidx_vbuz1=vbuc2 -lda #{c2} -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -sta {c1} //FRAGMENT vbuz1=_lo_pbuz2 lda {z2} sta {z1} @@ -194,8 +330,6 @@ sta {z1} lda {z1}+1 adc {z2}+1 sta {z1}+1 -//FRAGMENT vbuz1=_inc_vbuz1 -inc {z1} //FRAGMENT vbuz1=_deref_pbuz2 ldy #0 lda ({z2}),y @@ -209,6 +343,10 @@ inc {z1}+1 lda {z1} cmp #0 bne {la1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} //FRAGMENT vbsz1=pbsc1_derefidx_vbuz2 ldy {z2} lda {c1},y @@ -258,17 +396,10 @@ sta {z1} lda {z2}+1 adc #>{c1} sta {z1}+1 -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -ldy #0 -sta ({z1}),y //FRAGMENT vbsz1=vbsz1_minus_1 dec {z1} -//FRAGMENT vbuz1_neq_vbuc1_then_la1 -lda #{c1} -cmp {z1} -bne {la1} +//FRAGMENT vbuz1=vbuz1_ror_1 +lsr {z1} //FRAGMENT vwuz1=vwuz2_ror_2 lda {z2}+1 lsr @@ -281,6 +412,11 @@ ror {z1} //FRAGMENT vbsz1=vbsz1_minus_2 dec {z1} dec {z1} +//FRAGMENT vbuz1=vbuz1_ror_2 +lda {z1} +lsr +lsr +sta {z1} //FRAGMENT vwuz1=vwuz2_ror_1 lda {z2}+1 lsr @@ -293,27 +429,17 @@ lda {z1} sec sbc #{c1} sta {z1} -//FRAGMENT vbsz1_neq_vbsc1_then_la1 -lda #{c1} -cmp {z1} -bne {la1} -//FRAGMENT vwuz1=_inc_vwuz1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT vwuz1_neq_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} +//FRAGMENT vbuz1=vbuz1_ror_4 lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT vbuz1=vbuz2_rol_2 -lda {z2} -asl -asl +lsr +lsr +lsr +lsr sta {z1} +//FRAGMENT vbsz1_ge_0_then_la1 +lda {z1} +cmp #0 +bpl {la1} //FRAGMENT vbuz1=vbuz2_plus_vbuz3 lda {z2} clc @@ -378,6 +504,14 @@ sta {z1}+2 lda {z1}+3 adc #0 sta {z1}+3 +//FRAGMENT vwuz1=vwuz2_minus_vwuz3 +lda {z2} +sec +sbc {z3} +sta {z1} +lda {z2}+1 +sbc {z3}+1 +sta {z1}+1 //FRAGMENT vwuz1=vwuz2_rol_7 lda {z2}+1 lsr @@ -405,22 +539,24 @@ lda {z2} sta {z1}+1 lda #0 sta {z1} -//FRAGMENT vwuz1_lt_vwuz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bcc {la1} -bne !+ +//FRAGMENT vwuz1=vwuz1_rol_1 +asl {z1} +rol {z1}+1 +//FRAGMENT vbuz1_eq_0_then_la1 lda {z1} -cmp {z2} -bcc {la1} -!: -//FRAGMENT vwuz1=vwuz2_minus_vwuz3 -lda {z2} -sec -sbc {z3} +cmp #0 +beq {la1} +//FRAGMENT vwuz1=vwuz1_bor_vbuc1 +lda #{c1} +ora {z1} sta {z1} -lda {z2}+1 -sbc {z3}+1 +//FRAGMENT vwuz1=vwuz1_minus_vwuz2 +lda {z1} +sec +sbc {z2} +sta {z1} +lda {z1}+1 +sbc {z2}+1 sta {z1}+1 //FRAGMENT pbuz1=_deref_qbuc1 lda {c1} @@ -438,10 +574,6 @@ ldy #0 lda ({z1}),y ldy #0 sta ({z1}),y -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} //FRAGMENT vbuz1=_deref_pbuz2_band_vbuc1 lda #{c1} ldy #0 @@ -483,10 +615,6 @@ sta {z1} lda #0 adc {z2}+1 sta {z1}+1 -//FRAGMENT vbuz1_eq_vbuc1_then_la1 -lda #{c1} -cmp {z1} -beq {la1} //FRAGMENT pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 ldx {z1} inc {c1},x @@ -525,14 +653,6 @@ sta {z1}+3 lda {z1} ora {z1}+1 bne {la1} -//FRAGMENT vbuz1=vwuz2_band_vbuc1 -lda #{c1} -and {z2} -sta {z1} -//FRAGMENT vbuz1_eq_0_then_la1 -lda {z1} -cmp #0 -beq {la1} //FRAGMENT vduz1=vduz1_plus_vduz2 lda {z1} clc @@ -555,26 +675,9 @@ asl {z1} rol {z1}+1 rol {z1}+2 rol {z1}+3 -//FRAGMENT vwuz1=_lo_vduz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 //FRAGMENT vbuz1=_lo_vwuz2 lda {z2} sta {z1} -//FRAGMENT vbuz1=_hi_vwuz2 -lda {z2}+1 -sta {z1} -//FRAGMENT vwuz1=_hi_vduz2 -lda {z2}+2 -sta {z1} -lda {z2}+3 -sta {z1}+1 -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 -lda #{c2} -ora {c1} -sta {c1} //FRAGMENT vduz1_lt_vduz2_then_la1 lda {z1}+3 cmp {z2}+3 @@ -618,14 +721,6 @@ cmp {z1} beq {la1} !: bcc {la1} -//FRAGMENT vwuz1=vwuz1_minus_vwuz2 -lda {z1} -sec -sbc {z2} -sta {z1} -lda {z1}+1 -sbc {z2}+1 -sta {z1}+1 //FRAGMENT vwuz1=vwuz2_plus_1 clc lda {z2} @@ -697,9 +792,25 @@ sta {z1}+2 lda {z2}+3 adc {z3}+3 sta {z1}+3 -//FRAGMENT vbuz1=_deref_pbuc1_bor_vbuz2 +//FRAGMENT vbuz1=vbuz1_rol_vbuz2 +lda {z1} +ldy {z2} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +sta {z1} +//FRAGMENT vbuz1=_bnot__deref_pbuz2 +ldy #0 +lda ({z2}),y +eor #$ff +sta {z1} +//FRAGMENT vbuz1=_deref_pbuc1_band_vbuz2 lda {c1} -ora {z2} +and {z2} sta {z1} //FRAGMENT pbuc1_derefidx_vbuz1_lt_vbuz2_then_la1 ldy {z1} @@ -763,15 +874,6 @@ lda {z1} cmp {z2} bcc {la1} !: -//FRAGMENT vbuz1=_lo_pvoz2 -lda {z2} -sta {z1} -//FRAGMENT vbuz1=_hi_pvoz2 -lda {z2}+1 -sta {z1} -//FRAGMENT _deref_pbuc1=_deref_pbuc2 -lda {c2} -sta {c1} //FRAGMENT vbuaa=_deref_pbuc1 lda {c1} //FRAGMENT vbuxx=_deref_pbuc1 @@ -792,6 +894,20 @@ ldx {z1} //FRAGMENT 0_eq_vbuaa_then_la1 cmp #0 beq {la1} +//FRAGMENT vbuxx_lt_vbuc1_then_la1 +cpx #{c1} +bcc {la1} +//FRAGMENT vbuaa=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +//FRAGMENT vbuxx=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +tax +//FRAGMENT vbuyy=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +tay //FRAGMENT vbuaa=_deref_pbuc1_ror_7 lda {c1} rol @@ -1083,6 +1199,191 @@ lda {z1} sta {c1},y lda {z1}+1 sta {c1}+1,y +//FRAGMENT vbuaa=_lo_pvoz1 +lda {z1} +//FRAGMENT vbuxx=_lo_pvoz1 +ldx {z1} +//FRAGMENT vbuaa=_hi_pvoz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi_pvoz1 +ldx {z1}+1 +//FRAGMENT vbuz1=vbuc1_bor_vbuxx +txa +ora #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuc1_bor_vbuyy +tya +ora #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuc1_bor_vbuz1 +lda #{c1} +ora {z1} +//FRAGMENT vbuaa=vbuc1_bor_vbuxx +txa +ora #{c1} +//FRAGMENT vbuaa=vbuc1_bor_vbuyy +tya +ora #{c1} +//FRAGMENT vbuxx=vbuc1_bor_vbuz1 +lda #{c1} +ora {z1} +tax +//FRAGMENT vbuxx=vbuc1_bor_vbuxx +txa +ora #{c1} +tax +//FRAGMENT vbuxx=vbuc1_bor_vbuyy +tya +ora #{c1} +tax +//FRAGMENT vbuyy=vbuc1_bor_vbuz1 +lda #{c1} +ora {z1} +tay +//FRAGMENT vbuyy=vbuc1_bor_vbuxx +txa +ora #{c1} +tay +//FRAGMENT vbuyy=vbuc1_bor_vbuyy +tya +ora #{c1} +tay +//FRAGMENT pbuc1_derefidx_vbuxx=vbuc2 +lda #{c2} +sta {c1},x +//FRAGMENT pwuc1_derefidx_vbuaa=vwuc2 +tay +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=vwuc2 +lda #<{c2} +sta {c1},x +lda #>{c2} +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=vwuc2 +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT vbuxx=vbuxx_bor_vbuc1 +txa +ora #{c1} +tax +//FRAGMENT vbuyy=vbuyy_bor_vbuc1 +tya +ora #{c1} +tay +//FRAGMENT vbuz1=vbuxx +stx {z1} +//FRAGMENT pbuc1_derefidx_vbuxx=_byte_vwuz1 +lda {z1} +sta {c1},x +//FRAGMENT vbuz1=vbuxx_rol_2 +txa +asl +asl +sta {z1} +//FRAGMENT vbuxx=vbuz1_rol_2 +lda {z1} +asl +asl +tax +//FRAGMENT vbuxx=vbuxx_rol_2 +txa +asl +asl +tax +//FRAGMENT pduc1_derefidx_vbuxx=vduz1 +lda {z1} +sta {c1},x +lda {z1}+1 +sta {c1}+1,x +lda {z1}+2 +sta {c1}+2,x +lda {z1}+3 +sta {c1}+3,x +//FRAGMENT vbuaa=_hi_vwuz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi_vwuz1 +ldx {z1}+1 +//FRAGMENT vbuz1=vbuaa_band_vbuc1 +and #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuxx_band_vbuc1 +txa +and #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuyy_band_vbuc1 +tya +and #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +//FRAGMENT vbuaa=vbuaa_band_vbuc1 +and #{c1} +//FRAGMENT vbuaa=vbuxx_band_vbuc1 +txa +and #{c1} +//FRAGMENT vbuaa=vbuyy_band_vbuc1 +tya +and #{c1} +//FRAGMENT vbuxx=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +tax +//FRAGMENT vbuxx=vbuaa_band_vbuc1 +and #{c1} +tax +//FRAGMENT vbuxx=vbuxx_band_vbuc1 +txa +and #{c1} +tax +//FRAGMENT vbuxx=vbuyy_band_vbuc1 +tya +and #{c1} +tax +//FRAGMENT vbuyy=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +tay +//FRAGMENT vbuyy=vbuaa_band_vbuc1 +and #{c1} +tay +//FRAGMENT vbuyy=vbuxx_band_vbuc1 +txa +and #{c1} +tay +//FRAGMENT vbuyy=vbuyy_band_vbuc1 +tya +and #{c1} +tay +//FRAGMENT vbuxx_eq_vbuc1_then_la1 +cpx #{c1} +beq {la1} +//FRAGMENT vbuxx_neq_vbuc1_then_la1 +cpx #{c1} +bne {la1} +//FRAGMENT vbuaa=vbuaa_bor_vbuc1 +ora #{c1} +//FRAGMENT pwuc1_derefidx_vbuaa=vbuc2 +tay +lda #{c2} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=vbuc2 +lda #{c2} +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=vbuc2 +lda #{c2} +sta {c1},y +lda #0 +sta {c1}+1,y //FRAGMENT vbuz1=vbuaa_rol_4 asl asl @@ -1250,22 +1551,6 @@ ldy {z1}+1 bne {la1} cmp {z1} bcc {la1} -//FRAGMENT pwuc1_derefidx_vbuaa=vbuc2 -tay -lda #{c2} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=vbuc2 -lda #{c2} -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=vbuc2 -lda #{c2} -sta {c1},y -lda #0 -sta {c1}+1,y //FRAGMENT vbuaa=_lo_pbuz1 lda {z1} //FRAGMENT vbuxx=_lo_pbuz1 @@ -1292,10 +1577,6 @@ sta {z1} //FRAGMENT vbuaa=vbuxx_bor_vbuc1 txa ora #{c1} -//FRAGMENT vbuxx=vbuxx_bor_vbuc1 -txa -ora #{c1} -tax //FRAGMENT vbuyy=vbuxx_bor_vbuc1 txa ora #{c1} @@ -1316,6 +1597,31 @@ tay //FRAGMENT 0_neq_vbuaa_then_la1 cmp #0 bne {la1} +//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 vbuz1=pbuc1_derefidx_vbuaa +tay +lda {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa +tay +lda {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa +tay +ldx {c1},y +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa +tax +ldy {c1},x +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx +lda {c1},x +sta {z1} //FRAGMENT vbsz1=pbsc1_derefidx_vbuaa tay lda {c1},y @@ -1342,49 +1648,42 @@ ldx {c1},y //FRAGMENT vbuaa_neq_0_then_la1 cmp #0 bne {la1} -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuxx -lda {c1},x -ldy #0 -sta ({z1}),y -//FRAGMENT vbuxx_neq_vbuc1_then_la1 -cpx #{c1} -bne {la1} +//FRAGMENT vbuxx=vbuxx_ror_2 +txa +lsr +lsr +tax //FRAGMENT vbsxx=vbsxx_minus_vbsc1 txa sec sbc #{c1} tax -//FRAGMENT vbsxx_neq_vbsc1_then_la1 -cpx #{c1} +//FRAGMENT vbuxx=vbuxx_ror_4 +txa +lsr +lsr +lsr +lsr +tax +//FRAGMENT vbsxx_ge_0_then_la1 +cpx #0 +bpl {la1} +//FRAGMENT vbuxx_neq_0_then_la1 +cpx #0 bne {la1} //FRAGMENT vbuaa=vbuz1_rol_2 lda {z1} asl asl -//FRAGMENT vbuxx=vbuz1_rol_2 -lda {z1} -asl -asl -tax //FRAGMENT vbuyy=vbuz1_rol_2 lda {z1} asl asl tay -//FRAGMENT vbuz1=vbuxx_rol_2 -txa -asl -asl -sta {z1} //FRAGMENT vbuaa=vbuxx_rol_2 txa asl asl -//FRAGMENT vbuxx=vbuxx_rol_2 -txa -asl -asl -tax //FRAGMENT vbuyy=vbuxx_rol_2 txa asl @@ -1644,29 +1943,16 @@ tay tya asl tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx -lda {c1},x -sta {z1} +//FRAGMENT vbuaa_eq_0_then_la1 +cmp #0 +beq {la1} //FRAGMENT vbuz1=pbuc1_derefidx_vbuyy lda {c1},y sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa -tay -lda {c1},y //FRAGMENT vbuaa=pbuc1_derefidx_vbuxx lda {c1},x //FRAGMENT vbuaa=pbuc1_derefidx_vbuyy lda {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1 -ldy {z1} -ldx {c1},y //FRAGMENT vbuaa=_deref_pbuz1_band_vbuc1 lda #{c1} ldy #0 @@ -1737,13 +2023,6 @@ lsr lsr lsr tax -//FRAGMENT vbuxx=vbuxx_ror_4 -txa -lsr -lsr -lsr -lsr -tax //FRAGMENT vbuxx=vbuyy_ror_4 tya lsr @@ -1778,15 +2057,6 @@ lsr lsr lsr tay -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1 -ldx {z1} -ldy {c1},x -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa -tay -ldx {c1},y -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa -tax -ldy {c1},x //FRAGMENT vbuz1=vbuaa_ror_6 rol rol @@ -1946,9 +2216,6 @@ sta {z1} lda #0 adc {z2}+1 sta {z1}+1 -//FRAGMENT vbuxx_eq_vbuc1_then_la1 -cpx #{c1} -beq {la1} //FRAGMENT _deref_pbuc1_neq_pbuc2_derefidx_vbuaa_then_la1 tay lda {c1} @@ -1962,28 +2229,10 @@ bne {la1} lda {c1} cmp {c2},y bne {la1} -//FRAGMENT vbuaa=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -//FRAGMENT vbuxx=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -tax -//FRAGMENT vbuyy=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -tay -//FRAGMENT vbuaa_eq_0_then_la1 -cmp #0 -beq {la1} //FRAGMENT vbuaa=_lo_vwuz1 lda {z1} //FRAGMENT vbuxx=_lo_vwuz1 ldx {z1} -//FRAGMENT vbuaa=_hi_vwuz1 -lda {z1}+1 -//FRAGMENT vbuxx=_hi_vwuz1 -ldx {z1}+1 //FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_rol_4 ldy {z1} lda {c1},y @@ -2157,339 +2406,6 @@ tax tya ora {c1},x tay -//FRAGMENT vbuaa=_deref_pbuc1_bor_vbuz1 -lda {c1} -ora {z1} -//FRAGMENT vbuxx=_deref_pbuc1_bor_vbuz1 -lda {c1} -ora {z1} -tax -//FRAGMENT vbuyy=_deref_pbuc1_bor_vbuz1 -lda {c1} -ora {z1} -tay -//FRAGMENT vbuz1=_deref_pbuc1_bor_vbuxx -txa -ora {c1} -sta {z1} -//FRAGMENT vbuaa=_deref_pbuc1_bor_vbuxx -txa -ora {c1} -//FRAGMENT vbuxx=_deref_pbuc1_bor_vbuxx -txa -ora {c1} -tax -//FRAGMENT vbuyy=_deref_pbuc1_bor_vbuxx -txa -ora {c1} -tay -//FRAGMENT vbuz1=_deref_pbuc1_bor_vbuyy -tya -ora {c1} -sta {z1} -//FRAGMENT vbuaa=_deref_pbuc1_bor_vbuyy -tya -ora {c1} -//FRAGMENT vbuxx=_deref_pbuc1_bor_vbuyy -tya -ora {c1} -tax -//FRAGMENT vbuyy=_deref_pbuc1_bor_vbuyy -tya -ora {c1} -tay -//FRAGMENT vbuxx=vbuz1_minus_1 -ldx {z1} -dex -//FRAGMENT vbuaa=_lo__deref_pwuc1 -lda {c1} -//FRAGMENT vbuxx=_lo__deref_pwuc1 -ldx {c1} -//FRAGMENT vbuaa=_hi__deref_pwuc1 -lda {c1}+1 -//FRAGMENT vbuxx=_hi__deref_pwuc1 -ldx {c1}+1 -//FRAGMENT vbuz1_le_vbuxx_then_la1 -cpx {z1} -bcs {la1} -//FRAGMENT vwuz1=vbuaa_rol_vbuz2 -ldy {z2} -sta {z1} -lda #0 -sta {z1}+1 -cpy #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -dey -bne !- -!e: -//FRAGMENT vwuz1=vbuxx_rol_vbuz2 -ldy {z2} -txa -sta {z1} -lda #0 -sta {z1}+1 -cpy #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -dey -bne !- -!e: -//FRAGMENT vwuz1=vbuyy_rol_vbuz2 -tya -ldy {z2} -sta {z1} -lda #0 -sta {z1}+1 -cpy #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -dey -bne !- -!e: -//FRAGMENT vwuz1=vbuxx -txa -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vbuaa=_lo_pvoz1 -lda {z1} -//FRAGMENT vbuxx=_lo_pvoz1 -ldx {z1} -//FRAGMENT vbuaa=_hi_pvoz1 -lda {z1}+1 -//FRAGMENT vbuxx=_hi_pvoz1 -ldx {z1}+1 -//FRAGMENT vbuxx_lt_vbuz1_then_la1 -cpx {z1} -bcc {la1} -//FRAGMENT vbuz1=vbuxx -stx {z1} -//FRAGMENT vbuxx_le_vbuz1_then_la1 -lda {z1} -stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuxx_lt_vwuz1_then_la1 -lda {z1}+1 -bne {la1} -cpx {z1} -bcc {la1} -//FRAGMENT vbuyy_lt_vwuz1_then_la1 -lda {z1}+1 -bne {la1} -cpy {z1} -bcc {la1} -//FRAGMENT vbuxx_neq_0_then_la1 -cpx #0 -bne {la1} -//FRAGMENT vbuyy=_lo_pvoz1 -ldy {z1} -//FRAGMENT _deref_pbuc1=vbuyy -sty {c1} -//FRAGMENT vbuyy=_hi_pvoz1 -ldy {z1}+1 -//FRAGMENT vbuyy=vbuz1 -ldy {z1} -//FRAGMENT vbuyy=_lo_pbuz1 -ldy {z1} -//FRAGMENT vbuz1=vbuyy -sty {z1} -//FRAGMENT 0_neq_vbuxx_then_la1 -cpx #0 -bne {la1} -//FRAGMENT 0_neq_vbuyy_then_la1 -cpy #0 -bne {la1} -//FRAGMENT vbuxx=vbuc1 -ldx #{c1} -//FRAGMENT vbuz1=vbuxx_minus_1 -dex -stx {z1} -//FRAGMENT vbuxx=_inc_vbuxx -inx -//FRAGMENT vbuaa=vbuxx_minus_1 -txa -sec -sbc #1 -//FRAGMENT vbuyy=vbuz1_minus_1 -lda {z1} -tay -dey -//FRAGMENT vbuyy=vbuxx_minus_1 -txa -tay -dey -//FRAGMENT vbuyy=_lo__deref_pwuc1 -ldy {c1} -//FRAGMENT vbuyy=_hi__deref_pwuc1 -ldy {c1}+1 -//FRAGMENT vbuyy=vbuc1 -ldy #{c1} -//FRAGMENT vbuxx_eq_0_then_la1 -cpx #0 -beq {la1} -//FRAGMENT vbuyy_eq_0_then_la1 -cpy #0 -beq {la1} -//FRAGMENT vbsxx=vbsxx_minus_1 -dex -//FRAGMENT vbsxx=vbsxx_minus_2 -dex -dex -//FRAGMENT vbuaa=vbuc1 -lda #{c1} -//FRAGMENT vbuyy=_lo_vwuz1 -ldy {z1} -//FRAGMENT vbuyy=_hi_vwuz1 -ldy {z1}+1 -//FRAGMENT vbuyy=_inc_vbuyy -iny -//FRAGMENT vbuyy_neq_vbuc1_then_la1 -cpy #{c1} -bne {la1} -//FRAGMENT vbuaa=vbuxx -txa -//FRAGMENT vbuaa=vbuyy -tya -//FRAGMENT vbuxx=vbuyy -tya -tax -//FRAGMENT vbuyy=vbuxx -txa -tay -//FRAGMENT vbuxx=vbuaa -tax -//FRAGMENT vbuyy=vbuaa -tay -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx -lda {c1},x -tax -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy -ldx {c1},y -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx -ldy {c1},x -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy -lda {c1},y -tay -//FRAGMENT 0_eq_vbuxx_then_la1 -cpx #0 -beq {la1} -//FRAGMENT 0_eq_vbuyy_then_la1 -cpy #0 -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuxx=vbuaa -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=vbuaa -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuaa=vbuxx -tay -txa -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=vbuxx -txa -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=vbuyy -tya -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuaa=vbuyy -tax -tya -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=vbuyy -tya -sta {c1},x -//FRAGMENT vbuz1=vbuyy_bor_vbuaa -sty $ff -ora $ff -sta {z1} -//FRAGMENT vwuz1=vwuz1_bxor_vwuz2 -lda {z1} -eor {z2} -sta {z1} -lda {z1}+1 -eor {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_2 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_vbuz2 -ldy {z2} -beq !e+ -!: -asl {z1} -rol {z1}+1 -dey -bne !- -!e: -//FRAGMENT vbuz1=vbuz1_bor_vbuaa -ora {z1} -sta {z1} -//FRAGMENT pwuz1=pwuc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pduz1=pduc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuz1_plus_vbuaa -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pbuz1=pbuz2_plus_vwuz1 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vbuz1=vbuz1_rol_vbuz2 -lda {z1} -ldy {z2} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -sta {z1} //FRAGMENT vbuxx=vbuxx_rol_vbuz1 txa ldx {z1} @@ -2564,45 +2480,6 @@ dey bne !- !e: tax -//FRAGMENT vbsz1_ge_0_then_la1 -lda {z1} -cmp #0 -bpl {la1} -//FRAGMENT vbsxx_ge_0_then_la1 -cpx #0 -bpl {la1} -//FRAGMENT vbuz1=vbuz1_ror_1 -lsr {z1} -//FRAGMENT vbuz1=vbuz1_ror_2 -lda {z1} -lsr -lsr -sta {z1} -//FRAGMENT vbuz1=vbuz1_ror_4 -lda {z1} -lsr -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuz1=_bnot__deref_pbuz2 -ldy #0 -lda ({z2}),y -eor #$ff -sta {z1} -//FRAGMENT vbuz1=vbuz2_band_vbuz3 -lda {z2} -and {z3} -sta {z1} -//FRAGMENT vbuz1=_deref_pbuc1_band_vbuz2 -lda {c1} -and {z2} -sta {z1} -//FRAGMENT vbuxx=vbuxx_ror_2 -txa -lsr -lsr -tax //FRAGMENT vbuaa=_bnot__deref_pbuz1 ldy #0 lda ({z1}),y @@ -2617,182 +2494,58 @@ ldy #0 lda ({z1}),y eor #$ff tay -//FRAGMENT vbuz1=vbuxx_band_vbuz2 +//FRAGMENT vbuz1=_deref_pbuc1_band_vbuaa +and {c1} +sta {z1} +//FRAGMENT vbuz1=_deref_pbuc1_band_vbuxx txa -and {z2} +and {c1} sta {z1} -//FRAGMENT vbuz1=vbuz2_band_vbuaa -and {z2} -sta {z1} -//FRAGMENT vbuz1=vbuxx_band_vbuaa -stx $ff -and $ff -sta {z1} -//FRAGMENT vbuz1=vbuz2_band_vbuxx -txa -and {z2} -sta {z1} -//FRAGMENT vbuz1=vbuxx_band_vbuxx -txa -stx $ff -and $ff -sta {z1} -//FRAGMENT vbuz1=vbuz2_band_vbuyy +//FRAGMENT vbuz1=_deref_pbuc1_band_vbuyy tya -and {z2} +and {c1} sta {z1} -//FRAGMENT vbuz1=vbuxx_band_vbuyy -txa -sty $ff -and $ff -sta {z1} -//FRAGMENT vbuaa=vbuz1_band_vbuz2 -lda {z1} -and {z2} -//FRAGMENT vbuaa=vbuxx_band_vbuz1 -txa -and {z1} -//FRAGMENT vbuaa=vbuz1_band_vbuaa -and {z1} -//FRAGMENT vbuaa=vbuxx_band_vbuaa -stx $ff -and $ff -//FRAGMENT vbuaa=vbuz1_band_vbuxx -txa -and {z1} -//FRAGMENT vbuaa=vbuxx_band_vbuxx -txa -stx $ff -and $ff -//FRAGMENT vbuaa=vbuz1_band_vbuyy -tya -and {z1} -//FRAGMENT vbuaa=vbuxx_band_vbuyy -txa -sty $ff -and $ff -//FRAGMENT vbuxx=vbuz1_band_vbuz2 -lda {z1} -and {z2} -tax -//FRAGMENT vbuxx=vbuxx_band_vbuz1 -txa -and {z1} -tax -//FRAGMENT vbuxx=vbuz1_band_vbuaa -and {z1} -tax -//FRAGMENT vbuxx=vbuxx_band_vbuaa -stx $ff -and $ff -tax -//FRAGMENT vbuxx=vbuz1_band_vbuxx -txa -and {z1} -tax -//FRAGMENT vbuxx=vbuxx_band_vbuxx -txa -stx $ff -and $ff -tax -//FRAGMENT vbuxx=vbuz1_band_vbuyy -tya -and {z1} -tax -//FRAGMENT vbuxx=vbuxx_band_vbuyy -txa -sty $ff -and $ff -tax -//FRAGMENT vbuyy=vbuz1_band_vbuz2 -lda {z1} -and {z2} -tay -//FRAGMENT vbuyy=vbuxx_band_vbuz1 -txa -and {z1} -tay -//FRAGMENT vbuyy=vbuz1_band_vbuaa -and {z1} -tay -//FRAGMENT vbuyy=vbuxx_band_vbuaa -stx $ff -and $ff -tay -//FRAGMENT vbuyy=vbuz1_band_vbuxx -txa -and {z1} -tay -//FRAGMENT vbuyy=vbuxx_band_vbuxx -txa -stx $ff -and $ff -tay -//FRAGMENT vbuyy=vbuz1_band_vbuyy -tya -and {z1} -tay -//FRAGMENT vbuyy=vbuxx_band_vbuyy -txa -sty $ff -and $ff -tay //FRAGMENT vbuaa=_deref_pbuc1_band_vbuz1 lda {c1} and {z1} +//FRAGMENT vbuaa=_deref_pbuc1_band_vbuaa +and {c1} +//FRAGMENT vbuaa=_deref_pbuc1_band_vbuxx +txa +and {c1} +//FRAGMENT vbuaa=_deref_pbuc1_band_vbuyy +tya +and {c1} //FRAGMENT vbuxx=_deref_pbuc1_band_vbuz1 lda {c1} and {z1} tax +//FRAGMENT vbuxx=_deref_pbuc1_band_vbuaa +and {c1} +tax +//FRAGMENT vbuxx=_deref_pbuc1_band_vbuxx +txa +and {c1} +tax +//FRAGMENT vbuxx=_deref_pbuc1_band_vbuyy +tya +and {c1} +tax //FRAGMENT vbuyy=_deref_pbuc1_band_vbuz1 lda {c1} and {z1} tay -//FRAGMENT vbuz1=_deref_pbuc1_band_vbuxx -txa +//FRAGMENT vbuyy=_deref_pbuc1_band_vbuaa and {c1} -sta {z1} -//FRAGMENT vbuaa=_deref_pbuc1_band_vbuxx -txa -and {c1} -//FRAGMENT vbuxx=_deref_pbuc1_band_vbuxx -txa -and {c1} -tax +tay //FRAGMENT vbuyy=_deref_pbuc1_band_vbuxx txa and {c1} tay -//FRAGMENT vbuz1=_deref_pbuc1_band_vbuyy -tya -and {c1} -sta {z1} -//FRAGMENT vbuaa=_deref_pbuc1_band_vbuyy -tya -and {c1} -//FRAGMENT vbuxx=_deref_pbuc1_band_vbuyy -tya -and {c1} -tax //FRAGMENT vbuyy=_deref_pbuc1_band_vbuyy tya and {c1} tay -//FRAGMENT vbuxx=vbuxx_ror_1 -txa -lsr -tax -//FRAGMENT vbuz1=_deref_pbuc1_band_vbuaa -and {c1} -sta {z1} -//FRAGMENT vbuaa=_deref_pbuc1_band_vbuaa -and {c1} -//FRAGMENT vbuxx=_deref_pbuc1_band_vbuaa -and {c1} -tax -//FRAGMENT vbuyy=_deref_pbuc1_band_vbuaa -and {c1} -tay //FRAGMENT vbuz1=vbuaa_bor_vbuxx stx $ff ora $ff @@ -2814,6 +2567,98 @@ ora {z2} sta {z1} //FRAGMENT vbuz1=vbuxx_bor_vbuxx stx {z1} +//FRAGMENT vbuxx=vbuz1_minus_1 +ldx {z1} +dex +//FRAGMENT vbuaa=_lo__deref_pwuc1 +lda {c1} +//FRAGMENT vbuxx=_lo__deref_pwuc1 +ldx {c1} +//FRAGMENT vbuaa=_hi__deref_pwuc1 +lda {c1}+1 +//FRAGMENT vbuxx=_hi__deref_pwuc1 +ldx {c1}+1 +//FRAGMENT vbuz1_le_vbuxx_then_la1 +cpx {z1} +bcs {la1} +//FRAGMENT vwuz1=vbuaa_rol_vbuz2 +ldy {z2} +sta {z1} +lda #0 +sta {z1}+1 +cpy #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +dey +bne !- +!e: +//FRAGMENT vwuz1=vbuxx_rol_vbuz2 +ldy {z2} +txa +sta {z1} +lda #0 +sta {z1}+1 +cpy #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +dey +bne !- +!e: +//FRAGMENT vwuz1=vbuyy_rol_vbuz2 +tya +ldy {z2} +sta {z1} +lda #0 +sta {z1}+1 +cpy #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +dey +bne !- +!e: +//FRAGMENT vwuz1=vbuxx +txa +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vbuxx_lt_vbuz1_then_la1 +cpx {z1} +bcc {la1} +//FRAGMENT vbuxx_le_vbuz1_then_la1 +lda {z1} +stx $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuxx_lt_vwuz1_then_la1 +lda {z1}+1 +bne {la1} +cpx {z1} +bcc {la1} +//FRAGMENT vbuyy_lt_vwuz1_then_la1 +lda {z1}+1 +bne {la1} +cpy {z1} +bcc {la1} +//FRAGMENT vbuyy=_lo_pvoz1 +ldy {z1} +//FRAGMENT _deref_pbuc1=vbuyy +sty {c1} +//FRAGMENT vbuyy=_hi_pvoz1 +ldy {z1}+1 +//FRAGMENT vbuyy=_lo__deref_pwuc1 +ldy {c1} +//FRAGMENT vbuyy=_hi__deref_pwuc1 +ldy {c1}+1 +//FRAGMENT vbuyy=vbuz1 +ldy {z1} +//FRAGMENT vbuyy=_lo_pbuz1 +ldy {z1} //FRAGMENT vbuz1=vbuyy_bor_vbuz2 tya ora {z2} @@ -2846,366 +2691,182 @@ txa sty $ff ora $ff tax -//FRAGMENT pvoz1=pvoc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vbuc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT vbuz1=vbuc1_bor_vbuz2 -lda #{c1} -ora {z2} -sta {z1} -//FRAGMENT vwuz1_eq_vbuc1_then_la1 -lda #{c1} -cmp {z1} -bne !+ -lda {z1}+1 -bne !+ -jmp {la1} -!: -//FRAGMENT pwuc1_derefidx_vbuz1=vwuc2 -ldy {z1} -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT vbuz1=vbuz1_bor_vbuc1 -lda #{c1} -ora {z1} -sta {z1} -//FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwuz2 -ldy {z1} -lda {z2} -sta {c1},y -//FRAGMENT pduc1_derefidx_vbuz1=vduz2 -ldy {z1} -lda {z2} -sta {c1},y -lda {z2}+1 -sta {c1}+1,y -lda {z2}+2 -sta {c1}+2,y -lda {z2}+3 -sta {c1}+3,y -//FRAGMENT vduz1=vduz2_ror_1 -lda {z2}+3 +//FRAGMENT vbuz1=vbuyy +sty {z1} +//FRAGMENT 0_neq_vbuxx_then_la1 +cpx #0 +bne {la1} +//FRAGMENT 0_neq_vbuyy_then_la1 +cpy #0 +bne {la1} +//FRAGMENT vbuxx=vbuc1 +ldx #{c1} +//FRAGMENT vbuz1=vbuxx_minus_1 +dex +stx {z1} +//FRAGMENT vbuxx=_inc_vbuxx +inx +//FRAGMENT vbuaa=vbuxx_minus_1 +txa +sec +sbc #1 +//FRAGMENT vbuyy=vbuz1_minus_1 +lda {z1} +tay +dey +//FRAGMENT vbuyy=vbuxx_minus_1 +txa +tay +dey +//FRAGMENT vbuyy=_hi_vwuz1 +ldy {z1}+1 +//FRAGMENT vbuxx_eq_0_then_la1 +cpx #0 +beq {la1} +//FRAGMENT vbuyy_eq_0_then_la1 +cpy #0 +beq {la1} +//FRAGMENT vbuyy=vbuc1 +ldy #{c1} +//FRAGMENT vbuyy=_inc_vbuyy +iny +//FRAGMENT vbuyy_neq_vbuc1_then_la1 +cpy #{c1} +bne {la1} +//FRAGMENT vbuxx=vbuxx_ror_1 +txa lsr -sta {z1}+3 -lda {z2}+2 -ror -sta {z1}+2 -lda {z2}+1 -ror -sta {z1}+1 -lda {z2} -ror -sta {z1} -//FRAGMENT vbuz1=vbuz2_band_vbuc1 -lda #{c1} -and {z2} -sta {z1} -//FRAGMENT vbuz1=vbuc1_bor_vbuxx -txa -ora #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_bor_vbuyy -tya -ora #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuc1_bor_vbuz1 -lda #{c1} -ora {z1} -//FRAGMENT vbuaa=vbuc1_bor_vbuxx -txa -ora #{c1} -//FRAGMENT vbuaa=vbuc1_bor_vbuyy -tya -ora #{c1} -//FRAGMENT vbuxx=vbuc1_bor_vbuz1 -lda #{c1} -ora {z1} tax -//FRAGMENT vbuxx=vbuc1_bor_vbuxx -txa -ora #{c1} -tax -//FRAGMENT vbuxx=vbuc1_bor_vbuyy -tya -ora #{c1} -tax -//FRAGMENT vbuyy=vbuc1_bor_vbuz1 +//FRAGMENT vbsxx=vbsxx_minus_1 +dex +//FRAGMENT vbsxx=vbsxx_minus_2 +dex +dex +//FRAGMENT vbuaa=vbuc1 lda #{c1} -ora {z1} -tay -//FRAGMENT vbuyy=vbuc1_bor_vbuxx -txa -ora #{c1} -tay -//FRAGMENT vbuyy=vbuc1_bor_vbuyy +//FRAGMENT vbuxx=vbuyy tya -ora #{c1} +tax +//FRAGMENT vbuyy=_lo_vwuz1 +ldy {z1} +//FRAGMENT vbuaa=vbuxx +txa +//FRAGMENT vbuaa=vbuyy +tya +//FRAGMENT vbuyy=vbuxx +txa tay -//FRAGMENT pbuc1_derefidx_vbuxx=vbuc2 -lda #{c2} +//FRAGMENT vbuxx=vbuaa +tax +//FRAGMENT vbuyy=vbuaa +tay +//FRAGMENT 0_eq_vbuxx_then_la1 +cpx #0 +beq {la1} +//FRAGMENT 0_eq_vbuyy_then_la1 +cpy #0 +beq {la1} +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx +lda {c1},x +tax +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy +ldx {c1},y +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx +ldy {c1},x +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy +lda {c1},y +tay +//FRAGMENT pbuc1_derefidx_vbuxx=vbuaa sta {c1},x -//FRAGMENT pwuc1_derefidx_vbuaa=vwuc2 -tay -lda #<{c2} +//FRAGMENT pbuc1_derefidx_vbuyy=vbuaa sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=vwuc2 -lda #<{c2} -sta {c1},x -lda #>{c2} -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=vwuc2 -lda #<{c2} +//FRAGMENT pbuc1_derefidx_vbuaa=vbuxx +tay +txa sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT vbuyy=vbuyy_bor_vbuc1 +//FRAGMENT pbuc1_derefidx_vbuyy=vbuxx +txa +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=vbuyy +tya +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuaa=vbuyy +tax tya -ora #{c1} -tay -//FRAGMENT pbuc1_derefidx_vbuxx=_byte_vwuz1 -lda {z1} sta {c1},x -//FRAGMENT pduc1_derefidx_vbuxx=vduz1 -lda {z1} +//FRAGMENT pbuc1_derefidx_vbuxx=vbuyy +tya sta {c1},x -lda {z1}+1 -sta {c1}+1,x -lda {z1}+2 -sta {c1}+2,x -lda {z1}+3 -sta {c1}+3,x -//FRAGMENT vbuz1=vbuaa_band_vbuc1 -and #{c1} +//FRAGMENT vbuz1=vbuyy_bor_vbuaa +sty $ff +ora $ff sta {z1} -//FRAGMENT vbuz1=vbuxx_band_vbuc1 -txa -and #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuyy_band_vbuc1 -tya -and #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -//FRAGMENT vbuaa=vbuaa_band_vbuc1 -and #{c1} -//FRAGMENT vbuaa=vbuxx_band_vbuc1 -txa -and #{c1} -//FRAGMENT vbuaa=vbuyy_band_vbuc1 -tya -and #{c1} -//FRAGMENT vbuxx=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -tax -//FRAGMENT vbuxx=vbuaa_band_vbuc1 -and #{c1} -tax -//FRAGMENT vbuxx=vbuxx_band_vbuc1 -txa -and #{c1} -tax -//FRAGMENT vbuxx=vbuyy_band_vbuc1 -tya -and #{c1} -tax -//FRAGMENT vbuyy=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -tay -//FRAGMENT vbuyy=vbuaa_band_vbuc1 -and #{c1} -tay -//FRAGMENT vbuyy=vbuxx_band_vbuc1 -txa -and #{c1} -tay -//FRAGMENT vbuyy=vbuyy_band_vbuc1 -tya -and #{c1} -tay -//FRAGMENT vbuaa=vbuaa_bor_vbuc1 -ora #{c1} //FRAGMENT vduz1=vduz1_ror_1 lsr {z1}+3 ror {z1}+2 ror {z1}+1 ror {z1} -//FRAGMENT vbuz1_lt_vbuc1_then_la1 +//FRAGMENT vwuz1=vwuz1_bxor_vwuz2 lda {z1} -cmp #{c1} -bcc {la1} -//FRAGMENT vbuz1=_byte_vduz2 -lda {z2} +eor {z2} sta {z1} -//FRAGMENT pbuz1=_inc_pbuz2 +lda {z1}+1 +eor {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vwuz1 clc -lda {z2} -adc #1 -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 -//FRAGMENT _deref_pbuz1=vbuc1 -lda #{c1} -ldy #0 -sta ({z1}),y -//FRAGMENT vduz1=pduc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -lda {c1}+2,y -sta {z1}+2 -lda {c1}+3,y -sta {z1}+3 -//FRAGMENT vduz1_ge_vduz2_then_la1 -lda {z1}+3 -cmp {z2}+3 -bcc !+ -bne {la1} -lda {z1}+2 -cmp {z2}+2 -bcc !+ -bne {la1} -lda {z1}+1 -cmp {z2}+1 -bcc !+ -bne {la1} lda {z1} -cmp {z2} -bcs {la1} -!: -//FRAGMENT vduz1=vduz1_minus_vduz2 -lda {z1} -sec -sbc {z2} +adc #<{c1} sta {z1} lda {z1}+1 -sbc {z2}+1 +adc #>{c1} sta {z1}+1 -lda {z1}+2 -sbc {z2}+2 -sta {z1}+2 -lda {z1}+3 -sbc {z2}+3 -sta {z1}+3 -//FRAGMENT vbuaa_lt_vbuc1_then_la1 -cmp #{c1} -bcc {la1} -//FRAGMENT vbuaa=_byte_vduz1 -lda {z1} -//FRAGMENT vbuxx=_byte_vduz1 -lda {z1} -tax -//FRAGMENT vbuyy=_byte_vduz1 -lda {z1} -tay -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuaa -tay -lda {c1},y -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuyy -lda {c1},y -ldy #0 -sta ({z1}),y -//FRAGMENT vbuz1=vbuaa_rol_2 -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuaa_rol_2 -asl -asl -//FRAGMENT vbuxx=vbuaa_rol_2 -asl -asl -tax -//FRAGMENT vbuyy=vbuaa_rol_2 -asl -asl -tay -//FRAGMENT vduz1=pduc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -lda {c1}+2,y -sta {z1}+2 -lda {c1}+3,y -sta {z1}+3 -//FRAGMENT vduz1=pduc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda {c1}+1,x -sta {z1}+1 -lda {c1}+2,x -sta {z1}+2 -lda {c1}+3,x -sta {z1}+3 -//FRAGMENT vduz1=pduc1_derefidx_vbuyy -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -lda {c1}+2,y -sta {z1}+2 -lda {c1}+3,y -sta {z1}+3 -//FRAGMENT vbuxx_lt_vbuc1_then_la1 -cpx #{c1} -bcc {la1} -//FRAGMENT vbuyy=_deref_pbuc1 -ldy {c1} -//FRAGMENT vwuz1=vwuz2_band_vwuc1 -lda {z2} -and #<{c1} -sta {z1} -lda {z2}+1 -and #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_band_vwuc1 -lda {z1} -and #<{c1} -sta {z1} -lda {z1}+1 -and #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_1 +//FRAGMENT vwuz1=vwuz1_rol_2 asl {z1} rol {z1}+1 -//FRAGMENT vwuz1=vwuz1_bor_vbuc1 -lda #{c1} +asl {z1} +rol {z1}+1 +//FRAGMENT vwuz1=vwuz1_rol_vbuz2 +ldy {z2} +beq !e+ +!: +asl {z1} +rol {z1}+1 +dey +bne !- +!e: +//FRAGMENT vbuz1=vbuz1_bor_vbuaa ora {z1} sta {z1} -//FRAGMENT pbuc1_derefidx_vbuaa=vbuc2 -tay -lda #{c2} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=vbuc2 -lda #{c2} -sta {c1},y -//FRAGMENT vwuz1_le_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne !+ +//FRAGMENT pwuz1=pwuc1_plus_vwuz1 +clc lda {z1} -cmp #<{c1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT pduz1=pduc1_plus_vwuz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1=pbuz1_plus_vbuaa +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 !: -bcc {la1} -beq {la1} +//FRAGMENT pbuz1=pbuz2_plus_vwuz1 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 diff --git a/src/main/kc/include/bitmap-draw-c64.h b/src/main/kc/include/bitmap-draw-c64.h new file mode 100644 index 000000000..5bf079ff8 --- /dev/null +++ b/src/main/kc/include/bitmap-draw-c64.h @@ -0,0 +1,13 @@ +// Plot and line drawing routines for HIRES bitmaps +// Currently it can only plot on the first 256 x-positions. + +// Initialize the bitmap plotter tables for a specific bitmap +void bitmap_init(char* bitmap); + +// Clear all graphics on the bitmap +void bitmap_clear(); + +void bitmap_plot(char x, char y); + +// Draw a line on the bitmap +void bitmap_line(char x0, char x1, char y0, char y1); \ No newline at end of file diff --git a/src/main/kc/include/bitmap-draw-cx16.h b/src/main/kc/include/bitmap-draw-cx16.h new file mode 100644 index 000000000..954d05a03 --- /dev/null +++ b/src/main/kc/include/bitmap-draw-cx16.h @@ -0,0 +1,13 @@ +// Plot and line drawing routines for HIRES bitmaps +// Currently it can only plot on the first 256 x-positions. + +// Initialize the bitmap plotter tables for a specific bitmap +void bitmap_init(byte layer, dword address); + +// Clear all graphics on the bitmap +void bitmap_clear(); + +void bitmap_plot(word x, word y, byte c); + +// Draw a line on the bitmap +void bitmap_line(word x0, word x1, word y0, word y1, byte c); \ No newline at end of file diff --git a/src/main/kc/include/bitmap-draw.h b/src/main/kc/include/bitmap-draw.h index 954d05a03..347bd8866 100644 --- a/src/main/kc/include/bitmap-draw.h +++ b/src/main/kc/include/bitmap-draw.h @@ -1,13 +1,9 @@ -// Plot and line drawing routines for HIRES bitmaps -// Currently it can only plot on the first 256 x-positions. - -// Initialize the bitmap plotter tables for a specific bitmap -void bitmap_init(byte layer, dword address); - -// Clear all graphics on the bitmap -void bitmap_clear(); - -void bitmap_plot(word x, word y, byte c); - -// Draw a line on the bitmap -void bitmap_line(word x0, word x1, word y0, word y1, byte c); \ No newline at end of file +// Provides provide bitmap output +// Currently C64/PLUS4/VIC20/CX16 platforms are supported +#if defined(__CX16__) +#include "bitmap-draw-cx16.h" +#elif defined(__C64__) +#include "bitmap-draw-c64.h" +#else +#error "Target platform does not support bitmap-draw.h" +#endif \ No newline at end of file diff --git a/src/main/kc/include/bitmap2-c64.h b/src/main/kc/include/bitmap2-c64.h new file mode 100644 index 000000000..405055122 --- /dev/null +++ b/src/main/kc/include/bitmap2-c64.h @@ -0,0 +1,23 @@ +// Simple single-color (320x200) bitmap routines +#include + +// Initialize bitmap plotting tables +void bitmap_init(char* gfx, char* screen); + +// Clear all graphics on the bitmap +// bgcol - the background color to fill the screen with +// fgcol - the foreground color to fill the screen with +void bitmap_clear(char bgcol, char fgcol); + +// Plot a single dot in the bitmap +void bitmap_plot(unsigned int x, char y); + +// Draw a line on the bitmap using bresenhams algorithm +void bitmap_line(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2); + +// Get the absolute value of a 16-bit unsigned number treated as a signed number. +unsigned int abs_u16(unsigned int w); + +// Get the sign of a 16-bit unsigned number treated as a signed number. +// Returns unsigned -1 if the number is +unsigned int sgn_u16(unsigned int w); diff --git a/src/main/kc/include/bitmap2-cx16.h b/src/main/kc/include/bitmap2-cx16.h new file mode 100644 index 000000000..405055122 --- /dev/null +++ b/src/main/kc/include/bitmap2-cx16.h @@ -0,0 +1,23 @@ +// Simple single-color (320x200) bitmap routines +#include + +// Initialize bitmap plotting tables +void bitmap_init(char* gfx, char* screen); + +// Clear all graphics on the bitmap +// bgcol - the background color to fill the screen with +// fgcol - the foreground color to fill the screen with +void bitmap_clear(char bgcol, char fgcol); + +// Plot a single dot in the bitmap +void bitmap_plot(unsigned int x, char y); + +// Draw a line on the bitmap using bresenhams algorithm +void bitmap_line(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2); + +// Get the absolute value of a 16-bit unsigned number treated as a signed number. +unsigned int abs_u16(unsigned int w); + +// Get the sign of a 16-bit unsigned number treated as a signed number. +// Returns unsigned -1 if the number is +unsigned int sgn_u16(unsigned int w); diff --git a/src/main/kc/include/bitmap2.h b/src/main/kc/include/bitmap2.h index 405055122..0e58c5309 100644 --- a/src/main/kc/include/bitmap2.h +++ b/src/main/kc/include/bitmap2.h @@ -1,23 +1,9 @@ -// Simple single-color (320x200) bitmap routines -#include - -// Initialize bitmap plotting tables -void bitmap_init(char* gfx, char* screen); - -// Clear all graphics on the bitmap -// bgcol - the background color to fill the screen with -// fgcol - the foreground color to fill the screen with -void bitmap_clear(char bgcol, char fgcol); - -// Plot a single dot in the bitmap -void bitmap_plot(unsigned int x, char y); - -// Draw a line on the bitmap using bresenhams algorithm -void bitmap_line(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2); - -// Get the absolute value of a 16-bit unsigned number treated as a signed number. -unsigned int abs_u16(unsigned int w); - -// Get the sign of a 16-bit unsigned number treated as a signed number. -// Returns unsigned -1 if the number is -unsigned int sgn_u16(unsigned int w); +// Provides provide bitmap output +// Currently C64/PLUS4/VIC20/CX16 platforms are supported +#if defined(__CX16__) +#include "bitmap-cx16.h" +#elif defined(__C64__) +#include "bitmap-c64.h" +#else +#error "Target platform does not support bitmap.h" +#endif \ No newline at end of file