diff --git a/src/main/fragment/cache/fragment-cache-csg65ce02.asm b/src/main/fragment/cache/fragment-cache-csg65ce02.asm index 29a51e825..4cb115c06 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 149935006b 1499351e94 +//KICKC FRAGMENT CACHE 15355792e7 153557b11b //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 9f8e9e94c..c02ee88a7 100644 --- a/src/main/fragment/cache/fragment-cache-mega45gs02.asm +++ b/src/main/fragment/cache/fragment-cache-mega45gs02.asm @@ -1293,3 +1293,1321 @@ tay tza sty $ff ora $ff +//FRAGMENT pbuz1_lt_pbuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bcc {la1} +bne !+ +lda {z1} +cmp #<{c1} +bcc {la1} +!: +//FRAGMENT _deref_pbuc1=_deref_pbuc2 +lda {c2} +sta {c1} +//FRAGMENT vbuz1=_lo_pbuz2 +lda {z2} +sta {z1} +//FRAGMENT _deref_pbuz1=vbuz2 +lda {z2} +ldy #0 +sta ({z1}),y +//FRAGMENT vbuaa=_lo_pbuz1 +lda {z1} +//FRAGMENT vbuxx=_lo_pbuz1 +ldx {z1} +//FRAGMENT _deref_pbuz1=vbuaa +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=vbuxx +txa +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=vbuyy +tya +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=vbuzz +tza +ldy #0 +sta ({z1}),y +//FRAGMENT vbuyy=_lo_pbuz1 +ldy {z1} +//FRAGMENT vbuzz=_lo_pbuz1 +ldz {z1} +//FRAGMENT vbuz1=_deref_pbuc1_plus_1 +lda {c1} +inc +sta {z1} +//FRAGMENT vwuz1=_word_vbuz2 +lda {z2} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_rol_2 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT vwuz1=vwuz2_plus_vwuz3 +lda {z2} +clc +adc {z3} +sta {z1} +lda {z2}+1 +adc {z3}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_rol_4 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vwuz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT 0_neq_vbuz1_then_la1 +lda {z1} +cmp #0 +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuz2=vbuz3 +lda {z3} +ldz {z2} +sta ({z1}),z +//FRAGMENT pbuz1_derefidx_vbuz2=vbuc1 +lda #{c1} +ldz {z2} +sta ({z1}),z +//FRAGMENT pbuz1=pbuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT pvoz1=pvoc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1=pbuz1_minus_vbuc1 +sec +lda {z1} +sbc #{c1} +sta {z1} +lda {z1}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_plus_vwuc1 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1_neq_pbuz2_then_la1 +lda {z1}+1 +cmp {z2}+1 +bne {la1} +lda {z1} +cmp {z2} +bne {la1} +//FRAGMENT _deref_pbuz1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +ldy #0 +sta ({z1}),y +//FRAGMENT pbuz1=pbuz2_plus_vbuc1 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vbuaa=_deref_pbuc1_plus_1 +lda {c1} +inc +//FRAGMENT vbuxx=_deref_pbuc1_plus_1 +ldx {c1} +inx +//FRAGMENT vbuz1=vbuxx +stx {z1} +//FRAGMENT vwuz1=_word_vbuxx +txa +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=_word_vbuyy +tya +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=_word_vbuzz +tza +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT 0_neq_vbuaa_then_la1 +cmp #0 +bne {la1} +//FRAGMENT vbuz1=vbuaa +sta {z1} +//FRAGMENT pbuz1_derefidx_vbuz2=vbuaa +ldz {z2} +sta ({z1}),z +//FRAGMENT pbuz1_derefidx_vbuz2=vbuxx +txa +ldz {z2} +sta ({z1}),z +//FRAGMENT pbuz1_derefidx_vbuz2=vbuyy +tya +ldz {z2} +sta ({z1}),z +//FRAGMENT pbuz1_derefidx_vbuz2=vbuzz +tza +ldz {z2} +sta ({z1}),z +//FRAGMENT 0_neq_vbuxx_then_la1 +cpx #0 +bne {la1} +//FRAGMENT vbuaa=vbuxx +txa +//FRAGMENT 0_neq_vbuyy_then_la1 +cpy #0 +bne {la1} +//FRAGMENT vbuaa=vbuyy +tya +//FRAGMENT 0_neq_vbuzz_then_la1 +cpz #0 +bne {la1} +//FRAGMENT vbuaa=vbuzz +tza +//FRAGMENT vbuz1=vbuyy +sty {z1} +//FRAGMENT vbuz1=vbuzz +tza +sta {z1} +//FRAGMENT vbuxx=vbuaa +tax +//FRAGMENT vbuyy=_deref_pbuc1_plus_1 +ldy {c1} +iny +//FRAGMENT vbuxx=vbuyy +tya +tax +//FRAGMENT vbuzz=_deref_pbuc1_plus_1 +lda {c1} +inc +taz +//FRAGMENT vbuxx=vbuzz +tza +tax +//FRAGMENT vwuz1=vwuz2_plus_vwuz1 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {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_4 +asw {z1} +asw {z1} +asw {z1} +asw {z1} +//FRAGMENT pwuz1=pbuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1=pbuz1_plus_vwuc1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz2 +ldy {z2} +lda ({z3}),y +sta ({z1}),y +//FRAGMENT pwuz1=pwuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT vbuz1=vbuz2_rol_1 +lda {z2} +asl +sta {z1} +//FRAGMENT pwuz1_derefidx_vbuz2=vwuz3 +ldy {z2} +lda {z3} +sta ({z1}),y +iny +lda {z3}+1 +sta ({z1}),y +//FRAGMENT vwuz1=vwuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT _deref_pwuc1=vwuz1 +lda {z1} +sta {c1} +lda {z1}+1 +sta {c1}+1 +//FRAGMENT _deref_qbuc1=_ptr_vbuz1 +lda {z1} +sta {c1} +lda #0 +sta {c1}+1 +//FRAGMENT _deref_qbuc1=pbuz1 +lda {z1} +sta {c1} +lda {z1}+1 +sta {c1}+1 +//FRAGMENT pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuaa +tay +lda ({z2}),y +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuxx +txa +tay +lda ({z2}),y +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy +lda ({z2}),y +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuzz=pbuz2_derefidx_vbuzz +tza +tay +lda ({z2}),y +sta ({z1}),y +//FRAGMENT vwuz1=_word_vbuaa +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vbuz1=vbuaa_rol_1 +asl +sta {z1} +//FRAGMENT vbuz1=vbuxx_rol_1 +txa +asl +sta {z1} +//FRAGMENT vbuz1=vbuyy_rol_1 +tya +asl +sta {z1} +//FRAGMENT vbuz1=vbuzz_rol_1 +tza +asl +sta {z1} +//FRAGMENT vbuaa=vbuz1_rol_1 +lda {z1} +asl +//FRAGMENT vbuaa=vbuaa_rol_1 +asl +//FRAGMENT vbuaa=vbuxx_rol_1 +txa +asl +//FRAGMENT vbuaa=vbuyy_rol_1 +tya +asl +//FRAGMENT vbuaa=vbuzz_rol_1 +tza +asl +//FRAGMENT vbuxx=vbuz1_rol_1 +lda {z1} +asl +tax +//FRAGMENT vbuxx=vbuaa_rol_1 +asl +tax +//FRAGMENT vbuxx=vbuxx_rol_1 +txa +asl +tax +//FRAGMENT vbuxx=vbuyy_rol_1 +tya +asl +tax +//FRAGMENT vbuxx=vbuzz_rol_1 +tza +asl +tax +//FRAGMENT vbuyy=vbuz1_rol_1 +lda {z1} +asl +tay +//FRAGMENT vbuyy=vbuaa_rol_1 +asl +tay +//FRAGMENT vbuyy=vbuxx_rol_1 +txa +asl +tay +//FRAGMENT vbuyy=vbuyy_rol_1 +tya +asl +tay +//FRAGMENT vbuyy=vbuzz_rol_1 +tza +asl +tay +//FRAGMENT vbuzz=vbuz1_rol_1 +lda {z1} +asl +taz +//FRAGMENT vbuzz=vbuaa_rol_1 +asl +taz +//FRAGMENT vbuzz=vbuxx_rol_1 +txa +asl +taz +//FRAGMENT vbuzz=vbuyy_rol_1 +tya +asl +taz +//FRAGMENT vbuzz=vbuzz_rol_1 +tza +asl +taz +//FRAGMENT pwuz1_derefidx_vbuaa=vwuz2 +tay +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuxx=vwuz2 +txa +tay +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuyy=vwuz2 +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuzz=vwuz2 +tza +tay +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT _deref_qbuc1=_ptr_vbuxx +txa +sta {c1} +lda #0 +sta {c1}+1 +//FRAGMENT _deref_qbuc1=_ptr_vbuyy +tya +sta {c1} +lda #0 +sta {c1}+1 +//FRAGMENT _deref_qbuc1=_ptr_vbuzz +tza +sta {c1} +lda #0 +sta {c1}+1 +//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 vduz1=vbuc1 +lda #{c1} +sta {z1} +lda #0 +sta {z1}+1 +sta {z1}+2 +sta {z1}+3 +//FRAGMENT vbuz1=vbuc1_plus_vbuz2 +lda #{c1} +clc +adc {z2} +sta {z1} +//FRAGMENT vwuz1=vwuc1_minus_vbuz2 +sec +lda #<{c1} +sbc {z2} +sta {z1} +lda #>{c1} +sbc #0 +sta {z1}+1 +//FRAGMENT vbuz1=vbuz2_ror_5 +lda {z2} +lsr +lsr +lsr +lsr +lsr +sta {z1} +//FRAGMENT vbuz1=vbuc1_rol_vbuz2 +lda #{c1} +ldy {z2} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +sta {z1} +//FRAGMENT vwuz1=vwuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vduz1=vduz2_ror_4 +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} +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +//FRAGMENT vbuz1=_hi__word_vduz2 +lda {z2}+1 +sta {z1} +//FRAGMENT vwuz1=_lo_vduz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vbuz1=vbuc1_plus_vbuaa +clc +adc #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuc1_plus_vbuxx +txa +clc +adc #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuc1_plus_vbuyy +tya +clc +adc #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuc1_plus_vbuzz +tza +clc +adc #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuc1_plus_vbuz1 +lda #{c1} +clc +adc {z1} +//FRAGMENT vbuaa=vbuc1_plus_vbuaa +clc +adc #{c1} +//FRAGMENT vbuaa=vbuc1_plus_vbuxx +txa +clc +adc #{c1} +//FRAGMENT vbuaa=vbuc1_plus_vbuyy +tya +clc +adc #{c1} +//FRAGMENT vbuaa=vbuc1_plus_vbuzz +tza +clc +adc #{c1} +//FRAGMENT vbuxx=vbuc1_plus_vbuz1 +lda #{c1} +clc +adc {z1} +tax +//FRAGMENT vbuxx=vbuc1_plus_vbuaa +clc +adc #{c1} +tax +//FRAGMENT vbuxx=vbuc1_plus_vbuxx +txa +clc +adc #{c1} +tax +//FRAGMENT vbuxx=vbuc1_plus_vbuyy +tya +clc +adc #{c1} +tax +//FRAGMENT vbuxx=vbuc1_plus_vbuzz +tza +clc +adc #{c1} +tax +//FRAGMENT vbuyy=vbuc1_plus_vbuz1 +lda #{c1} +clc +adc {z1} +tay +//FRAGMENT vbuyy=vbuc1_plus_vbuaa +clc +adc #{c1} +tay +//FRAGMENT vbuyy=vbuc1_plus_vbuxx +txa +clc +adc #{c1} +tay +//FRAGMENT vbuyy=vbuc1_plus_vbuyy +tya +clc +adc #{c1} +tay +//FRAGMENT vbuyy=vbuc1_plus_vbuzz +tza +clc +adc #{c1} +tay +//FRAGMENT vbuzz=vbuc1_plus_vbuz1 +lda #{c1} +clc +adc {z1} +taz +//FRAGMENT vbuzz=vbuc1_plus_vbuaa +clc +adc #{c1} +taz +//FRAGMENT vbuzz=vbuc1_plus_vbuxx +txa +clc +adc #{c1} +taz +//FRAGMENT vbuzz=vbuc1_plus_vbuyy +tya +clc +adc #{c1} +taz +//FRAGMENT vbuzz=vbuc1_plus_vbuzz +tza +clc +adc #{c1} +taz +//FRAGMENT vwuz1=vwuc1_minus_vbuaa +tax +stx $ff +lda #<{c1} +sec +sbc $ff +sta {z1} +lda #>{c1} +sbc #00 +sta {z1}+1 +//FRAGMENT vwuz1=vwuc1_minus_vbuxx +stx $ff +lda #<{c1} +sec +sbc $ff +sta {z1} +lda #>{c1} +sbc #00 +sta {z1}+1 +//FRAGMENT vwuz1=vwuc1_minus_vbuyy +tya +tax +stx $ff +lda #<{c1} +sec +sbc $ff +sta {z1} +lda #>{c1} +sbc #00 +sta {z1}+1 +//FRAGMENT vwuz1=vwuc1_minus_vbuzz +tza +tax +stx $ff +lda #<{c1} +sec +sbc $ff +sta {z1} +lda #>{c1} +sbc #00 +sta {z1}+1 +//FRAGMENT vbuz1=vbuxx_ror_5 +txa +lsr +lsr +lsr +lsr +lsr +sta {z1} +//FRAGMENT vbuz1=vbuyy_ror_5 +tya +lsr +lsr +lsr +lsr +lsr +sta {z1} +//FRAGMENT vbuz1=vbuzz_ror_5 +tza +lsr +lsr +lsr +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=vbuz1_ror_5 +lda {z1} +lsr +lsr +lsr +lsr +lsr +//FRAGMENT vbuaa=vbuxx_ror_5 +txa +lsr +lsr +lsr +lsr +lsr +//FRAGMENT vbuaa=vbuyy_ror_5 +tya +lsr +lsr +lsr +lsr +lsr +//FRAGMENT vbuaa=vbuzz_ror_5 +tza +lsr +lsr +lsr +lsr +lsr +//FRAGMENT vbuxx=vbuz1_ror_5 +lda {z1} +lsr +lsr +lsr +lsr +lsr +tax +//FRAGMENT vbuxx=vbuxx_ror_5 +txa +lsr +lsr +lsr +lsr +lsr +tax +//FRAGMENT vbuxx=vbuyy_ror_5 +tya +lsr +lsr +lsr +lsr +lsr +tax +//FRAGMENT vbuxx=vbuzz_ror_5 +tza +lsr +lsr +lsr +lsr +lsr +tax +//FRAGMENT vbuyy=vbuz1_ror_5 +lda {z1} +lsr +lsr +lsr +lsr +lsr +tay +//FRAGMENT vbuyy=vbuxx_ror_5 +txa +lsr +lsr +lsr +lsr +lsr +tay +//FRAGMENT vbuyy=vbuyy_ror_5 +tya +lsr +lsr +lsr +lsr +lsr +tay +//FRAGMENT vbuyy=vbuzz_ror_5 +tza +lsr +lsr +lsr +lsr +lsr +tay +//FRAGMENT vbuzz=vbuz1_ror_5 +lda {z1} +lsr +lsr +lsr +lsr +lsr +taz +//FRAGMENT vbuzz=vbuxx_ror_5 +txa +lsr +lsr +lsr +lsr +lsr +taz +//FRAGMENT vbuzz=vbuyy_ror_5 +tya +lsr +lsr +lsr +lsr +lsr +taz +//FRAGMENT vbuzz=vbuzz_ror_5 +tza +lsr +lsr +lsr +lsr +lsr +taz +//FRAGMENT vbuaa=vbuc1_rol_vbuz1 +lda #{c1} +ldy {z1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +//FRAGMENT vbuxx=vbuc1_rol_vbuz1 +lda #{c1} +ldx {z1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +tax +//FRAGMENT vbuyy=vbuc1_rol_vbuz1 +lda #{c1} +ldy {z1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +tay +//FRAGMENT vbuzz=vbuc1_rol_vbuz1 +lda #{c1} +ldy {z1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +taz +//FRAGMENT vbuz1=vbuc1_rol_vbuaa +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +sta {z1} +//FRAGMENT vbuaa=vbuc1_rol_vbuaa +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +//FRAGMENT vbuxx=vbuc1_rol_vbuaa +tax +lda #{c1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +tax +//FRAGMENT vbuyy=vbuc1_rol_vbuaa +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +tay +//FRAGMENT vbuzz=vbuc1_rol_vbuaa +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +taz +//FRAGMENT vbuz1=vbuc1_rol_vbuxx +lda #{c1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +sta {z1} +//FRAGMENT vbuaa=vbuc1_rol_vbuxx +lda #{c1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +//FRAGMENT vbuxx=vbuc1_rol_vbuxx +lda #{c1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +tax +//FRAGMENT vbuyy=vbuc1_rol_vbuxx +lda #{c1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +tay +//FRAGMENT vbuzz=vbuc1_rol_vbuxx +lda #{c1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +taz +//FRAGMENT vbuz1=vbuc1_rol_vbuyy +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +sta {z1} +//FRAGMENT vbuaa=vbuc1_rol_vbuyy +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +//FRAGMENT vbuxx=vbuc1_rol_vbuyy +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +tax +//FRAGMENT vbuyy=vbuc1_rol_vbuyy +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +tay +//FRAGMENT vbuzz=vbuc1_rol_vbuyy +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +taz +//FRAGMENT vbuz1=vbuc1_rol_vbuzz +tza +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +sta {z1} +//FRAGMENT vbuaa=vbuc1_rol_vbuzz +tza +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +//FRAGMENT vbuxx=vbuc1_rol_vbuzz +tza +tax +lda #{c1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +tax +//FRAGMENT vbuyy=vbuc1_rol_vbuzz +tza +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +tay +//FRAGMENT vbuzz=vbuc1_rol_vbuzz +tza +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +taz +//FRAGMENT vbuaa=_hi__word_vduz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi__word_vduz1 +ldx {z1}+1 +//FRAGMENT vbuaa=vbuz1_bor_vbuz2 +lda {z1} +ora {z2} +//FRAGMENT vbuxx=vbuz1_bor_vbuz2 +lda {z1} +ora {z2} +tax +//FRAGMENT vbuyy=vbuz1_bor_vbuz2 +lda {z1} +ora {z2} +tay +//FRAGMENT vbuzz=vbuz1_bor_vbuz2 +lda {z1} +ora {z2} +taz +//FRAGMENT vbuaa=vbuxx_bor_vbuz1 +txa +ora {z1} +//FRAGMENT vbuxx=vbuxx_bor_vbuz1 +txa +ora {z1} +tax +//FRAGMENT vbuyy=vbuxx_bor_vbuz1 +txa +ora {z1} +tay +//FRAGMENT vbuzz=vbuxx_bor_vbuz1 +txa +ora {z1} +taz +//FRAGMENT vbuaa=vbuyy_bor_vbuz1 +tya +ora {z1} +//FRAGMENT vbuxx=vbuyy_bor_vbuz1 +tya +ora {z1} +tax +//FRAGMENT vbuyy=vbuyy_bor_vbuz1 +tya +ora {z1} +tay +//FRAGMENT vbuzz=vbuyy_bor_vbuz1 +tya +ora {z1} +taz +//FRAGMENT vbuaa=vbuzz_bor_vbuz1 +tza +ora {z1} +//FRAGMENT vbuxx=vbuzz_bor_vbuz1 +tza +ora {z1} +tax +//FRAGMENT vbuyy=vbuzz_bor_vbuz1 +tza +ora {z1} +tay +//FRAGMENT vbuzz=vbuzz_bor_vbuz1 +tza +ora {z1} +taz +//FRAGMENT vbuxx=vbuxx_bor_vbuaa +stx $ff +ora $ff +tax +//FRAGMENT vbuyy=vbuxx_bor_vbuaa +stx $ff +ora $ff +tay +//FRAGMENT vbuzz=vbuxx_bor_vbuaa +stx $ff +ora $ff +taz +//FRAGMENT vbuxx=vbuyy_bor_vbuaa +sty $ff +ora $ff +tax +//FRAGMENT vbuyy=vbuyy_bor_vbuaa +sty $ff +ora $ff +tay +//FRAGMENT vbuzz=vbuyy_bor_vbuaa +sty $ff +ora $ff +taz +//FRAGMENT vbuxx=vbuzz_bor_vbuaa +tax +tza +stx $ff +ora $ff +tax +//FRAGMENT vbuyy=vbuzz_bor_vbuaa +tay +tza +sty $ff +ora $ff +tay +//FRAGMENT vbuzz=vbuzz_bor_vbuaa +tay +tza +sty $ff +ora $ff +taz +//FRAGMENT vbuaa=vbuz1_bor_vbuxx +txa +ora {z1} +//FRAGMENT vbuxx=vbuz1_bor_vbuxx +txa +ora {z1} +tax +//FRAGMENT vbuyy=vbuz1_bor_vbuxx +txa +ora {z1} +tay +//FRAGMENT vbuzz=vbuz1_bor_vbuxx +txa +ora {z1} +taz +//FRAGMENT vbuyy=_hi__word_vduz1 +ldy {z1}+1 +//FRAGMENT vbuzz=_hi__word_vduz1 +lda {z1}+1 +taz +//FRAGMENT pbuc1_derefidx_vbuyy=vbuaa +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuzz=vbuaa +tax +tza +tay +txa +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuyy=vbuxx +txa +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuzz=vbuxx +tza +tay +txa +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuzz=vbuyy +tza +tax +tya +sta {c1},x +//FRAGMENT vbuyy=vbuaa +tay +//FRAGMENT vbuzz=vbuaa +taz +//FRAGMENT 0_neq_pbuc1_derefidx_vbuz1_then_la1 +ldy {z1} +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuz1=vbuz1 +ldy {z1} +tya +sta {c1},y +//FRAGMENT 0_neq_pbuc1_derefidx_vbuaa_then_la1 +tay +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT 0_neq_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +cmp #0 +bne {la1} +//FRAGMENT 0_neq_pbuc1_derefidx_vbuyy_then_la1 +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT 0_neq_pbuc1_derefidx_vbuzz_then_la1 +tza +tay +lda {c1},y +cmp #0 +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=vwuc1 +NO_SYNTHESIS +//FRAGMENT vduz1=vwsc1 +NO_SYNTHESIS +//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 diff --git a/src/main/fragment/cache/fragment-cache-mos6502.asm b/src/main/fragment/cache/fragment-cache-mos6502.asm index abf47acfd..a21352901 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 149935006b 1499351e94 +//KICKC FRAGMENT CACHE 15355792e7 153557b11b //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 ba006c864..ae37e3938 100644 --- a/src/main/fragment/cache/fragment-cache-mos6502x.asm +++ b/src/main/fragment/cache/fragment-cache-mos6502x.asm @@ -1895,3 +1895,18106 @@ rti lda #{c2} ora {c1} sta {c1} +//FRAGMENT vwuz1_lt_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bcc {la1} +bne !+ +lda {z1} +cmp #<{c1} +bcc {la1} +!: +//FRAGMENT vwuz1=vwuz2_plus_1 +clc +lda {z2} +adc #1 +sta {z1} +lda {z2}+1 +adc #0 +sta {z1}+1 +//FRAGMENT vwuz1=_inc_vwuz1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT vwuz1=vwuz2_rol_1 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +//FRAGMENT pwuz1=pwuc1_plus_vwuz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=_deref_pwuz2_plus__deref_pwuz3 +ldy #0 +clc +lda ({z2}),y +adc ({z3}),y +sta {z1} +iny +lda ({z2}),y +adc ({z3}),y +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_plus__deref_pwuz3 +ldy #0 +clc +lda {z2} +adc ({z3}),y +sta {z1} +iny +lda {z2}+1 +adc ({z3}),y +sta {z1}+1 +//FRAGMENT vwuz1_neq_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT vwuz1=_deref_pwuz2 +ldy #0 +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT vduz1=vduz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +//FRAGMENT vwuz1=_lo_vduz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT pvoz1=_deref_qvoc1 +lda {c1} +sta {z1} +lda {c1}+1 +sta {z1}+1 +//FRAGMENT vbuz1=_deref_pbuc1 +lda {c1} +sta {z1} +//FRAGMENT vduz1=_dword_vwuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda #0 +sta {z1}+2 +sta {z1}+3 +//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 vwuz1_neq_0_then_la1 +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 +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +lda {z1}+2 +adc {z2}+2 +sta {z1}+2 +lda {z1}+3 +adc {z2}+3 +sta {z1}+3 +//FRAGMENT vduz1=vduz1_rol_1 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +//FRAGMENT vwuz1_le_0_then_la1 +lda {z1} +bne !+ +lda {z1}+1 +beq {la1} +!: +//FRAGMENT pbuz1_neq_pbuz2_then_la1 +lda {z1}+1 +cmp {z2}+1 +bne {la1} +lda {z1} +cmp {z2} +bne {la1} +//FRAGMENT _deref_pwuc1=vbuc2 +lda #0 +sta {c1}+1 +lda #<{c2} +sta {c1} +//FRAGMENT vbuz1=pbuc1_derefidx_(_deref_pbuc2) +ldy {c2} +lda {c1},y +sta {z1} +//FRAGMENT _deref_pwuc1=_inc__deref_pwuc1 +inc {c1} +bne !+ +inc {c1}+1 +!: +//FRAGMENT _deref_pwuc1_eq_vbuc2_then_la1 +lda {c1}+1 +bne !+ +lda {c1} +cmp #{c2} +beq {la1} +!: +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +ldy #0 +sta ({z1}),y +//FRAGMENT pbuz1=_inc_pbuz2 +clc +lda {z2} +adc #1 +sta {z1} +lda {z2}+1 +adc #0 +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1_ge_vwuz2_then_la1 +lda {z2}+1 +cmp {z1}+1 +bne !+ +lda {z2} +cmp {z1} +beq {la1} +!: +bcc {la1} +//FRAGMENT vbuz1=_byte_vduz2 +lda {z2} +sta {z1} +//FRAGMENT vbuz1=vbuz2_rol_2 +lda {z2} +asl +asl +sta {z1} +//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 _deref_(_deref_qbuc1)=_deref_pbuc2 +lda {c2} +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT _deref_pbuc1=vbuz1 +lda {z1} +sta {c1} +//FRAGMENT _deref_qbuc1=pbuz1 +lda {z1} +sta {c1} +lda {z1}+1 +sta {c1}+1 +//FRAGMENT vbuz1=vbuz2_bxor_vbuc1 +lda #{c1} +eor {z2} +sta {z1} +//FRAGMENT _deref_(_deref_qbuc1)=vbuz1 +lda {z1} +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT _deref_pbuz1=vbuz2 +lda {z2} +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuc1_neq_vbuc2_then_la1 +lda #{c2} +cmp {c1} +bne {la1} +//FRAGMENT _deref_(_deref_qbuc1)=_deref_(_deref_qbuc1)_bxor_vbuc2 +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +lda ($fe),y +eor #{c2} +sta ($fe),y +//FRAGMENT pbuz1=_deref_qbuc1 +lda {c1} +sta {z1} +lda {c1}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_plus_vbuc1 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vbuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_minus_vwuz2 +lda {z1} +sec +sbc {z2} +sta {z1} +lda {z1}+1 +sbc {z2}+1 +sta {z1}+1 +//FRAGMENT vduz1=vduz1_minus_vduz2 +lda {z1} +sec +sbc {z2} +sta {z1} +lda {z1}+1 +sbc {z2}+1 +sta {z1}+1 +lda {z1}+2 +sbc {z2}+2 +sta {z1}+2 +lda {z1}+3 +sbc {z2}+3 +sta {z1}+3 +//FRAGMENT vwuz1=_word__deref_pbuc1 +lda {c1} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT pbuz1=_deref_qbuc1_plus_vwuz2 +clc +lda {z2} +adc {c1} +sta {z1} +lda {z2}+1 +adc {c1}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_plus__deref_pwuc1 +clc +lda {c1} +adc {z2} +sta {z1} +lda {c1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vbuaa=_deref_pbuc1 +lda {c1} +//FRAGMENT vbuxx=_deref_pbuc1 +ldx {c1} +//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=pbuc1_derefidx_(_deref_pbuc2) +ldy {c2} +lda {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_(_deref_pbuc2) +ldy {c2} +ldx {c1},y +//FRAGMENT vbuyy=pbuc1_derefidx_(_deref_pbuc2) +ldx {c2} +ldy {c1},x +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuaa +tay +lda {c1},y +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuxx +lda {c1},x +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuyy +lda {c1},y +ldy #0 +sta ({z1}),y +//FRAGMENT vwuz1=pwuc1_derefidx_vbuaa +tay +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx +lda {c1},x +sta {z1} +lda {c1}+1,x +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT 0_eq_vbuaa_then_la1 +cmp #0 +beq {la1} +//FRAGMENT vbuaa=_byte_vduz1 +lda {z1} +//FRAGMENT vbuxx=_byte_vduz1 +lda {z1} +tax +//FRAGMENT vbuyy=_byte_vduz1 +lda {z1} +tay +//FRAGMENT vbuz1=vbuaa_rol_2 +asl +asl +sta {z1} +//FRAGMENT vbuz1=vbuxx_rol_2 +txa +asl +asl +sta {z1} +//FRAGMENT vbuz1=vbuyy_rol_2 +tya +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuz1_rol_2 +lda {z1} +asl +asl +//FRAGMENT vbuaa=vbuaa_rol_2 +asl +asl +//FRAGMENT vbuaa=vbuxx_rol_2 +txa +asl +asl +//FRAGMENT vbuaa=vbuyy_rol_2 +tya +asl +asl +//FRAGMENT vbuxx=vbuz1_rol_2 +lda {z1} +asl +asl +tax +//FRAGMENT vbuxx=vbuaa_rol_2 +asl +asl +tax +//FRAGMENT vbuxx=vbuxx_rol_2 +txa +asl +asl +tax +//FRAGMENT vbuxx=vbuyy_rol_2 +tya +asl +asl +tax +//FRAGMENT vbuyy=vbuz1_rol_2 +lda {z1} +asl +asl +tay +//FRAGMENT vbuyy=vbuaa_rol_2 +asl +asl +tay +//FRAGMENT vbuyy=vbuxx_rol_2 +txa +asl +asl +tay +//FRAGMENT vbuyy=vbuyy_rol_2 +tya +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 _deref_pbuc1=vbuaa +sta {c1} +//FRAGMENT vbuaa=vbuz1_bxor_vbuc1 +lda #{c1} +eor {z1} +//FRAGMENT vbuxx=vbuz1_bxor_vbuc1 +lda #{c1} +eor {z1} +tax +//FRAGMENT vbuyy=vbuz1_bxor_vbuc1 +lda #{c1} +eor {z1} +tay +//FRAGMENT vbuz1=vbuxx_bxor_vbuc1 +txa +eor #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuxx_bxor_vbuc1 +txa +eor #{c1} +//FRAGMENT vbuxx=vbuxx_bxor_vbuc1 +txa +eor #{c1} +tax +//FRAGMENT vbuyy=vbuxx_bxor_vbuc1 +txa +eor #{c1} +tay +//FRAGMENT vbuz1=vbuyy_bxor_vbuc1 +tya +eor #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuyy_bxor_vbuc1 +tya +eor #{c1} +//FRAGMENT vbuxx=vbuyy_bxor_vbuc1 +tya +eor #{c1} +tax +//FRAGMENT vbuyy=vbuyy_bxor_vbuc1 +tya +eor #{c1} +tay +//FRAGMENT _deref_(_deref_qbuc1)=vbuaa +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT _deref_(_deref_qbuc1)=vbuxx +txa +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT _deref_(_deref_qbuc1)=vbuyy +tya +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT _deref_pbuz1=vbuaa +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=vbuxx +txa +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=vbuyy +tya +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuc1=vbuxx +stx {c1} +//FRAGMENT _deref_pbuc1=vbuyy +sty {c1} +//FRAGMENT vbuxx_eq_0_then_la1 +cpx #0 +beq {la1} +//FRAGMENT vbuyy_eq_0_then_la1 +cpy #0 +beq {la1} +//FRAGMENT vbuyy=_deref_pbuc1 +ldy {c1} +//FRAGMENT vwuz1=_deref_pwuz1 +ldy #0 +lda ({z1}),y +pha +iny +lda ({z1}),y +sta {z1}+1 +pla +sta {z1} +//FRAGMENT vwuz1=_deref_pwuz1_plus__deref_pwuz2 +ldy #0 +clc +lda ({z1}),y +adc ({z2}),y +pha +iny +lda ({z1}),y +adc ({z2}),y +sta {z1}+1 +pla +sta {z1} +//FRAGMENT vwuz1=vwuz2_plus__deref_pwuz1 +ldy #0 +clc +lda ({z1}),y +adc {z2} +pha +iny +lda ({z1}),y +adc {z2}+1 +sta {z1}+1 +pla +sta {z1} +//FRAGMENT pbuz1=_deref_qbuc1_plus_vwuz1 +clc +lda {z1} +adc {c1} +sta {z1} +lda {z1}+1 +adc {c1}+1 +sta {z1}+1 +//FRAGMENT pwuz1=pwuc1_plus_vwuz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1=pbuz1_plus__deref_pwuc1 +clc +lda {c1} +adc {z1} +sta {z1} +lda {c1}+1 +adc {z1}+1 +sta {z1}+1 +//FRAGMENT pbuz1_derefidx_vbuz2_neq_vbuc1_then_la1 +ldy {z2} +lda ({z1}),y + +cmp #{c1} +bne {la1} +//FRAGMENT vbuz1=vbuz1_plus_vbuz2 +lda {z1} +clc +adc {z2} +sta {z1} +//FRAGMENT vbuz1=vbuz1_minus_vbuc1 +lax {z1} +axs #{c1} +stx {z1} +//FRAGMENT pbuz1=pbuz1_plus_vbuz2 +lda {z2} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT pbuz1_derefidx_vbuxx_neq_vbuc1_then_la1 +txa +tay +lda ({z1}),y + +cmp #{c1} +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuyy_neq_vbuc1_then_la1 +lda ({z1}),y + +cmp #{c1} +bne {la1} +//FRAGMENT vbuz1=vbuz1_plus_vbuxx +txa +clc +adc {z1} +sta {z1} +//FRAGMENT vbuz1=vbuz1_plus_vbuyy +tya +clc +adc {z1} +sta {z1} +//FRAGMENT vbuxx=vbuxx_minus_vbuc1 +txa +axs #{c1} +//FRAGMENT vbuyy=vbuyy_minus_vbuc1 +tya +sec +sbc #{c1} +tay +//FRAGMENT pbuz1=pbuz1_plus_vbuaa +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT pbuz1=pbuz1_plus_vbuxx +txa +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT pbuz1=pbuz1_plus_vbuyy +tya +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT vwuz1=vwuz1_plus_vbuxx +txa +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT vwuz1=vwuz1_plus_vbuyy +tya +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT vbuyy_lt_vbuc1_then_la1 +cpy #{c1} +bcc {la1} +//FRAGMENT 0_neq__deref_pbuz1_then_la1 +ldy #0 +lda ({z1}),y +cmp #0 +bne {la1} +//FRAGMENT _deref_pbuz1_neq_vbuc1_then_la1 +ldy #0 +lda ({z1}),y +cmp #{c1} +bne {la1} +//FRAGMENT 0_eq_pbuc1_derefidx_vbuz1_then_la1 +ldy {z1} +lda {c1},y +cmp #0 +beq {la1} +//FRAGMENT 0_eq__deref_pbuz1_then_la1 +ldy #0 +lda ({z1}),y +cmp #0 +beq {la1} +//FRAGMENT _deref_pbuz1_eq_vbuc1_then_la1 +lda #{c1} +ldy #0 +cmp ({z1}),y +beq {la1} +//FRAGMENT pbuz1_derefidx_vbuz2_neq_pbuz3_derefidx_vbuz2_then_la1 +ldy {z2} +lda ({z1}),y + +tax +lda ({z3}),y + +tay +stx $ff +cpy $ff +bne {la1} +//FRAGMENT vbuaa_eq_vbuc1_then_la1 +cmp #{c1} +beq {la1} +//FRAGMENT 0_eq_pbuc1_derefidx_vbuaa_then_la1 +tay +lda {c1},y +cmp #0 +beq {la1} +//FRAGMENT 0_eq_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +cmp #0 +beq {la1} +//FRAGMENT 0_eq_pbuc1_derefidx_vbuyy_then_la1 +lda {c1},y +cmp #0 +beq {la1} +//FRAGMENT pbuz1_derefidx_vbuaa_neq_pbuz2_derefidx_vbuaa_then_la1 +tay +lda ({z1}),y + +tax +lda ({z2}),y + +tay +stx $ff +cpy $ff +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuxx_neq_pbuz2_derefidx_vbuxx_then_la1 +txa +tay +lda ({z1}),y + +tax +lda ({z2}),y + +tay +stx $ff +cpy $ff +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuyy_neq_pbuz2_derefidx_vbuyy_then_la1 +lda ({z1}),y + +tax +lda ({z2}),y + +tay +stx $ff +cpy $ff +bne {la1} +//FRAGMENT vbsz1=vbsc1 +lda #{c1} +sta {z1} +//FRAGMENT vbsz1_ge_0_then_la1 +lda {z1} +cmp #0 +bpl {la1} +//FRAGMENT vbsz1=_dec_vbsz1 +dec {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1},y +//FRAGMENT pbuz1=pbuc1_plus_vbsz2 +lda {z2} +clc +adc #<{c1} +sta {z1} +lda {z2} +ora #$7f +bmi !+ +lda #0 +!: +adc #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +//FRAGMENT vbuz1_lt_vbuz2_then_la1 +lda {z1} +cmp {z2} +bcc {la1} +//FRAGMENT vbuz1=_deref_pbuz2_band_vbuc1 +lda #{c1} +ldy #0 +and ({z2}),y +sta {z1} +//FRAGMENT vbuz1=vbuz2_rol_4 +lda {z2} +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuz1=vbuz2_bor_vbuz3 +lda {z2} +ora {z3} +sta {z1} +//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 vbsaa_ge_0_then_la1 +cmp #0 +bpl {la1} +//FRAGMENT pbuz1=pbuc1_plus_vbsaa +pha +clc +adc #<{c1} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vbsxx +txa +pha +clc +adc #<{c1} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vbsyy +tya +pha +clc +adc #<{c1} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc #>{c1} +sta {z1}+1 +//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 vbuaa_lt_vbuz1_then_la1 +cmp {z1} +bcc {la1} +//FRAGMENT vbuaa=_deref_pbuz1_band_vbuc1 +lda #{c1} +ldy #0 +and ({z1}),y +//FRAGMENT vbuxx=_deref_pbuz1_band_vbuc1 +lda #{c1} +ldy #0 +and ({z1}),y +tax +//FRAGMENT vbuyy=_deref_pbuz1_band_vbuc1 +lda #{c1} +ldy #0 +and ({z1}),y +tay +//FRAGMENT vbuz1=vbuxx_rol_4 +txa +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuz1_rol_4 +lda {z1} +asl +asl +asl +asl +//FRAGMENT vbuaa=vbuxx_rol_4 +txa +asl +asl +asl +asl +//FRAGMENT vbuxx=vbuz1_rol_4 +lda {z1} +asl +asl +asl +asl +tax +//FRAGMENT vbuxx=vbuxx_rol_4 +txa +asl +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuz1_rol_4 +lda {z1} +asl +asl +asl +asl +tay +//FRAGMENT vbuyy=vbuxx_rol_4 +txa +asl +asl +asl +asl +tay +//FRAGMENT vbuz1=vbuxx_bor_vbuz2 +txa +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuyy_bor_vbuz2 +tya +ora {z2} +sta {z1} +//FRAGMENT vbuaa=vbuz1_bor_vbuz2 +lda {z1} +ora {z2} +//FRAGMENT vbuaa=vbuxx_bor_vbuz1 +txa +ora {z1} +//FRAGMENT vbuaa=vbuyy_bor_vbuz1 +tya +ora {z1} +//FRAGMENT vbuxx=vbuz1_bor_vbuz2 +lda {z1} +ora {z2} +tax +//FRAGMENT vbuxx=vbuxx_bor_vbuz1 +txa +ora {z1} +tax +//FRAGMENT vbuxx=vbuyy_bor_vbuz1 +tya +ora {z1} +tax +//FRAGMENT vbuyy=vbuz1_bor_vbuz2 +lda {z1} +ora {z2} +tay +//FRAGMENT vbuyy=vbuxx_bor_vbuz1 +txa +ora {z1} +tay +//FRAGMENT vbuyy=vbuyy_bor_vbuz1 +tya +ora {z1} +tay +//FRAGMENT vbuz1=vbuz2_bor_vbuaa +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuxx_bor_vbuaa +stx $ff +ora $ff +sta {z1} +//FRAGMENT vbuz1=vbuyy_bor_vbuaa +sty $ff +ora $ff +sta {z1} +//FRAGMENT vbuaa=vbuz1_bor_vbuaa +ora {z1} +//FRAGMENT vbuaa=vbuxx_bor_vbuaa +stx $ff +ora $ff +//FRAGMENT vbuaa=vbuyy_bor_vbuaa +sty $ff +ora $ff +//FRAGMENT vbuxx=vbuz1_bor_vbuaa +ora {z1} +tax +//FRAGMENT vbuxx=vbuxx_bor_vbuaa +stx $ff +ora $ff +tax +//FRAGMENT vbuxx=vbuyy_bor_vbuaa +sty $ff +ora $ff +tax +//FRAGMENT vbuyy=vbuz1_bor_vbuaa +ora {z1} +tay +//FRAGMENT vbuyy=vbuxx_bor_vbuaa +stx $ff +ora $ff +tay +//FRAGMENT vbuyy=vbuyy_bor_vbuaa +sty $ff +ora $ff +tay +//FRAGMENT vbuz1=vbuz2_bor_vbuxx +txa +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuxx_bor_vbuxx +stx {z1} +//FRAGMENT vbsxx_ge_0_then_la1 +cpx #0 +bpl {la1} +//FRAGMENT vbuxx_lt_vbuz1_then_la1 +cpx {z1} +bcc {la1} +//FRAGMENT vbuz1=vbuz2_bor_vbuyy +tya +ora {z2} +sta {z1} +//FRAGMENT vbuaa=vbuz1_bor_vbuxx +txa +ora {z1} +//FRAGMENT vbuaa=vbuz1_bor_vbuyy +tya +ora {z1} +//FRAGMENT vbuxx=vbuz1_bor_vbuxx +txa +ora {z1} +tax +//FRAGMENT vbuxx=vbuz1_bor_vbuyy +tya +ora {z1} +tax +//FRAGMENT vbuyy=vbuz1_bor_vbuxx +txa +ora {z1} +tay +//FRAGMENT vbuyy=vbuz1_bor_vbuyy +tya +ora {z1} +tay +//FRAGMENT vbuz1=vbuxx_bor_vbuyy +txa +sty $ff +ora $ff +sta {z1} +//FRAGMENT vbuaa=vbuxx_bor_vbuyy +txa +sty $ff +ora $ff +//FRAGMENT vbuxx=vbuxx_bor_vbuyy +txa +sty $ff +ora $ff +tax +//FRAGMENT vbuyy=vbuxx_bor_vbuyy +txa +sty $ff +ora $ff +tay +//FRAGMENT vbuz1=vbuyy_bor_vbuxx +txa +sty $ff +ora $ff +sta {z1} +//FRAGMENT vbuaa=vbuyy_bor_vbuxx +txa +sty $ff +ora $ff +//FRAGMENT vbuxx=vbuyy_bor_vbuxx +txa +sty $ff +ora $ff +tax +//FRAGMENT vbuyy=vbuyy_bor_vbuxx +txa +sty $ff +ora $ff +tay +//FRAGMENT vbsxx=vbsc1 +ldx #{c1} +//FRAGMENT vbsxx=_dec_vbsxx +dex +//FRAGMENT 0_neq__deref_pbuc1_then_la1 +lda {c1} +cmp #0 +bne {la1} +//FRAGMENT vbuz1_neq_vbuz2_then_la1 +lda {z1} +cmp {z2} +bne {la1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy +lda {c1},y +sta {z1} +//FRAGMENT vbuxx_neq_vbuz1_then_la1 +cpx {z1} +bne {la1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx +lda {c1},x +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy +lda {c1},y +//FRAGMENT vbuz1_neq_vbuxx_then_la1 +cpx {z1} +bne {la1} +//FRAGMENT vbuz1_neq_vbuyy_then_la1 +cpy {z1} +bne {la1} +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy +ldx {c1},y +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx +ldy {c1},x +//FRAGMENT _deref_qbuc1=pbuc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT 0_neq_pbuc1_derefidx_vbuz1_then_la1 +ldy {z1} +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT 0_neq_pbuc1_derefidx_vbuaa_then_la1 +tay +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT 0_neq_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +cmp #0 +bne {la1} +//FRAGMENT 0_neq_pbuc1_derefidx_vbuyy_then_la1 +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT pvoz1=pvoc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT _deref_pbuz1=_inc__deref_pbuz1 +ldy #0 +lda ({z1}),y +clc +adc #1 +ldy #0 +sta ({z1}),y +//FRAGMENT vbuz1=vbuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {z1} +//FRAGMENT vwuz1=vwuz2_rol_7 +lda {z2}+1 +lsr +lda {z2} +ror +sta {z1}+1 +lda #0 +ror +sta {z1} +//FRAGMENT vwuz1=vwuz2_bxor_vwuz3 +lda {z2} +eor {z3} +sta {z1} +lda {z2}+1 +eor {z3}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_ror_9 +lda {z2}+1 +lsr +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_rol_8 +lda {z2} +sta {z1}+1 +lda #0 +sta {z1} +//FRAGMENT vbuaa=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +//FRAGMENT vbuxx=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +tax +//FRAGMENT vbuyy=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +tay +//FRAGMENT vbuz1=vbuxx_band_vbuc1 +lda #{c1} +sax {z1} +//FRAGMENT vbuaa=vbuxx_band_vbuc1 +txa +and #{c1} +//FRAGMENT vbuxx=vbuxx_band_vbuc1 +lda #{c1} +axs #0 +//FRAGMENT vbuyy=vbuxx_band_vbuc1 +txa +and #{c1} +tay +//FRAGMENT vbuz1=vbuyy_band_vbuc1 +tya +and #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuyy_band_vbuc1 +tya +and #{c1} +//FRAGMENT vbuxx=vbuyy_band_vbuc1 +ldx #{c1} +tya +axs #0 +//FRAGMENT vbuyy=vbuyy_band_vbuc1 +tya +and #{c1} +tay +//FRAGMENT vbuz1=vbuaa_band_vbuc1 +and #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuaa_band_vbuc1 +and #{c1} +//FRAGMENT vbuxx=vbuaa_band_vbuc1 +ldx #{c1} +axs #0 +//FRAGMENT vbuxx=_dec_vbuxx +dex +//FRAGMENT vwuz1=vwuz1_bxor_vwuz2 +lda {z1} +eor {z2} +sta {z1} +lda {z1}+1 +eor {z2}+1 +sta {z1}+1 +//FRAGMENT vbuaa=vbuyy +tya +//FRAGMENT vbuxx=vbuaa +tax +//FRAGMENT vbuyy=vbuaa +tay +//FRAGMENT vbuz1=_inc_vbuz2 +ldy {z2} +iny +sty {z1} +//FRAGMENT vbuaa=_inc_vbuz1 +lda {z1} +clc +adc #1 +//FRAGMENT vbuxx=_inc_vbuz1 +ldx {z1} +inx +//FRAGMENT vbuz1=_inc_vbuxx +inx +stx {z1} +//FRAGMENT vbuz1=_inc_vbuyy +iny +sty {z1} +//FRAGMENT vbuaa=vbuc1 +lda #{c1} +//FRAGMENT vbuaa=_inc_vbuaa +clc +adc #1 +//FRAGMENT vbuxx=_inc_vbuyy +tya +tax +inx +//FRAGMENT vbuyy=_inc_vbuz1 +ldy {z1} +iny +//FRAGMENT vbuyy=_inc_vbuxx +txa +tay +iny +//FRAGMENT pbuc1_derefidx_vbuz1=vbuz1 +ldy {z1} +tya +sta {c1},y +//FRAGMENT vbuz1_neq_0_then_la1 +lda {z1} +cmp #0 +bne {la1} +//FRAGMENT vbuz1=vbuz2_plus_pbuc1_derefidx_vbuz3 +lda {z2} +ldy {z3} +clc +adc {c1},y +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuaa=vbuaa +tax +sta {c1},x +//FRAGMENT vbuaa_neq_0_then_la1 +cmp #0 +bne {la1} +//FRAGMENT vbuaa=vbuz1_plus_pbuc1_derefidx_vbuz2 +lda {z1} +ldy {z2} +clc +adc {c1},y +//FRAGMENT vbuxx=vbuz1_plus_pbuc1_derefidx_vbuz2 +lda {z1} +ldx {z2} +clc +adc {c1},x +tax +//FRAGMENT vbuyy=vbuz1_plus_pbuc1_derefidx_vbuz2 +lda {z1} +ldy {z2} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=vbuxx_plus_pbuc1_derefidx_vbuz2 +ldy {z2} +txa +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=vbuxx_plus_pbuc1_derefidx_vbuz1 +ldy {z1} +txa +clc +adc {c1},y +//FRAGMENT vbuxx=vbuxx_plus_pbuc1_derefidx_vbuz1 +txa +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbuyy=vbuxx_plus_pbuc1_derefidx_vbuz1 +ldy {z1} +txa +clc +adc {c1},y +tay +//FRAGMENT vbuz1=vbuyy_plus_pbuc1_derefidx_vbuz2 +tya +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=vbuyy_plus_pbuc1_derefidx_vbuz1 +tya +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbuxx=vbuyy_plus_pbuc1_derefidx_vbuz1 +ldx {z1} +tya +clc +adc {c1},x +tax +//FRAGMENT vbuyy=vbuyy_plus_pbuc1_derefidx_vbuz1 +tya +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=vbuz2_plus_pbuc1_derefidx_vbuxx +lda {c1},x +clc +adc {z2} +sta {z1} +//FRAGMENT vbuaa=vbuz1_plus_pbuc1_derefidx_vbuxx +lda {c1},x +clc +adc {z1} +//FRAGMENT vbuxx=vbuz1_plus_pbuc1_derefidx_vbuxx +lda {c1},x +clc +adc {z1} +tax +//FRAGMENT vbuyy=vbuz1_plus_pbuc1_derefidx_vbuxx +lda {c1},x +clc +adc {z1} +tay +//FRAGMENT vbuz1=vbuxx_plus_pbuc1_derefidx_vbuxx +txa +clc +adc {c1},x +sta {z1} +//FRAGMENT vbuaa=vbuxx_plus_pbuc1_derefidx_vbuxx +txa +clc +adc {c1},x +//FRAGMENT vbuxx=vbuxx_plus_pbuc1_derefidx_vbuxx +txa +clc +adc {c1},x +tax +//FRAGMENT vbuyy=vbuxx_plus_pbuc1_derefidx_vbuxx +txa +clc +adc {c1},x +tay +//FRAGMENT vbuz1=vbuyy_plus_pbuc1_derefidx_vbuxx +tya +clc +adc {c1},x +sta {z1} +//FRAGMENT vbuaa=vbuyy_plus_pbuc1_derefidx_vbuxx +tya +clc +adc {c1},x +//FRAGMENT vbuxx=vbuyy_plus_pbuc1_derefidx_vbuxx +tya +clc +adc {c1},x +tax +//FRAGMENT vbuyy=vbuyy_plus_pbuc1_derefidx_vbuxx +tya +clc +adc {c1},x +tay +//FRAGMENT vbuz1=vbuz2_plus_pbuc1_derefidx_vbuyy +lda {c1},y +clc +adc {z2} +sta {z1} +//FRAGMENT vbuaa=vbuz1_plus_pbuc1_derefidx_vbuyy +lda {c1},y +clc +adc {z1} +//FRAGMENT vbuxx=vbuz1_plus_pbuc1_derefidx_vbuyy +lda {c1},y +clc +adc {z1} +tax +//FRAGMENT vbuyy=vbuz1_plus_pbuc1_derefidx_vbuyy +lda {c1},y +clc +adc {z1} +tay +//FRAGMENT vbuz1=vbuxx_plus_pbuc1_derefidx_vbuyy +txa +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=vbuxx_plus_pbuc1_derefidx_vbuyy +txa +clc +adc {c1},y +//FRAGMENT vbuxx=vbuxx_plus_pbuc1_derefidx_vbuyy +txa +clc +adc {c1},y +tax +//FRAGMENT vbuyy=vbuxx_plus_pbuc1_derefidx_vbuyy +txa +clc +adc {c1},y +tay +//FRAGMENT vbuz1=vbuyy_plus_pbuc1_derefidx_vbuyy +tya +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=vbuyy_plus_pbuc1_derefidx_vbuyy +tya +clc +adc {c1},y +//FRAGMENT vbuxx=vbuyy_plus_pbuc1_derefidx_vbuyy +tya +clc +adc {c1},y +tax +//FRAGMENT vbuyy=vbuyy_plus_pbuc1_derefidx_vbuyy +tya +clc +adc {c1},y +tay +//FRAGMENT vbuxx_neq_0_then_la1 +cpx #0 +bne {la1} +//FRAGMENT vbuyy_neq_0_then_la1 +cpy #0 +bne {la1} +//FRAGMENT _deref_pbuc1=_byte_vwuz1 +lda {z1} +sta {c1} +//FRAGMENT vwuz1=vwuz2_ror_6 +lda {z2} +asl +sta $ff +lda {z2}+1 +rol +sta {z1} +lda #0 +rol +sta {z1}+1 +asl $ff +rol {z1} +rol {z1}+1 +//FRAGMENT vwuz1=vwuz2_minus_vbuc1 +sec +lda {z2} +sbc #{c1} +sta {z1} +lda {z2}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT vduz1=vwuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda #0 +sta {z1}+2 +sta {z1}+3 +//FRAGMENT vwsz1=vwsc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1_lt_vwuz2_then_la1 +lda {z1}+1 +bmi {la1} +cmp {z2}+1 +bcc {la1} +bne !+ +lda {z1} +cmp {z2} +bcc {la1} +!: +//FRAGMENT pbuz1=pbuz2_plus_vwsz3 +lda {z2} +clc +adc {z3} +sta {z1} +lda {z2}+1 +adc {z3}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_plus_vbsc1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=vbuz2_ror_4 +lda {z2} +lsr +lsr +lsr +lsr +sta {z1} +//FRAGMENT vduz1=pduz2_derefidx_vbuz3 +ldy {z3} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +iny +lda ({z2}),y +sta {z1}+2 +iny +lda ({z2}),y +sta {z1}+3 +//FRAGMENT vduz1=vduz2_plus_vduz3 +lda {z2} +clc +adc {z3} +sta {z1} +lda {z2}+1 +adc {z3}+1 +sta {z1}+1 +lda {z2}+2 +adc {z3}+2 +sta {z1}+2 +lda {z2}+3 +adc {z3}+3 +sta {z1}+3 +//FRAGMENT vduz1=vduz2_plus_pduc1_derefidx_vbuz3 +ldy {z3} +lda {z2} +clc +adc {c1},y +sta {z1} +lda {z2}+1 +adc {c1}+1,y +sta {z1}+1 +lda {z2}+2 +adc {c1}+2,y +sta {z1}+2 +lda {z2}+3 +adc {c1}+3,y +sta {z1}+3 +//FRAGMENT vduz1=vduz2_plus_pduz3_derefidx_vbuz4 +ldy {z4} +lda {z2} +clc +adc ({z3}),y +sta {z1} +iny +lda {z2}+1 +adc ({z3}),y +sta {z1}+1 +iny +lda {z2}+2 +adc ({z3}),y +sta {z1}+2 +iny +lda {z2}+3 +adc ({z3}),y +sta {z1}+3 +//FRAGMENT vduz1=_bnot_vduz2 +lda {z2} +eor #$ff +sta {z1} +lda {z2}+1 +eor #$ff +sta {z1}+1 +lda {z2}+2 +eor #$ff +sta {z1}+2 +lda {z2}+3 +eor #$ff +sta {z1}+3 +//FRAGMENT vduz1=vduz2_bor_vduz3 +lda {z2} +ora {z3} +sta {z1} +lda {z2}+1 +ora {z3}+1 +sta {z1}+1 +lda {z2}+2 +ora {z3}+2 +sta {z1}+2 +lda {z2}+3 +ora {z3}+3 +sta {z1}+3 +//FRAGMENT vduz1=vduz2_bxor_vduz3 +lda {z2} +eor {z3} +sta {z1} +lda {z2}+1 +eor {z3}+1 +sta {z1}+1 +lda {z2}+2 +eor {z3}+2 +sta {z1}+2 +lda {z2}+3 +eor {z3}+3 +sta {z1}+3 +//FRAGMENT vduz1=vduz2_band_vduz3 +lda {z2} +and {z3} +sta {z1} +lda {z2}+1 +and {z3}+1 +sta {z1}+1 +lda {z2}+2 +and {z3}+2 +sta {z1}+2 +lda {z2}+3 +and {z3}+3 +sta {z1}+3 +//FRAGMENT vduz1=_deref_pduc1 +lda {c1} +sta {z1} +lda {c1}+1 +sta {z1}+1 +lda {c1}+2 +sta {z1}+2 +lda {c1}+3 +sta {z1}+3 +//FRAGMENT vwuz1=vwuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_minus_vwuz2 +sec +lda #<{c1} +sbc {z2} +sta {z1} +lda #>{c1} +sbc {z2}+1 +sta {z1}+1 +//FRAGMENT vbsz1=_sbyte_vwuz2 +lda {z2} +sta {z1} +//FRAGMENT vbsz1=_inc_vbsz1 +inc {z1} +//FRAGMENT vbsz1=vbsc1_minus_vbsz2 +lda #{c1} +sec +sbc {z2} +sta {z1} +//FRAGMENT 0_neq_vbsz1_then_la1 +lda {z1} +cmp #0 +bne {la1} +//FRAGMENT _deref_pbuc1=_deref_pbuc2 +lda {c2} +sta {c1} +//FRAGMENT vbuz1=vbuz1_minus_vbuz2 +lda {z1} +sec +sbc {z2} +sta {z1} +//FRAGMENT vbuaa=vbuz1_ror_4 +lda {z1} +lsr +lsr +lsr +lsr +//FRAGMENT vbuxx=vbuz1_ror_4 +lda {z1} +lsr +lsr +lsr +lsr +tax +//FRAGMENT vbuyy=vbuz1_ror_4 +lda {z1} +lsr +lsr +lsr +lsr +tay +//FRAGMENT vbuz1=vbuxx_ror_4 +txa +lsr +lsr +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=vbuxx_ror_4 +txa +lsr +lsr +lsr +lsr +//FRAGMENT vbuxx=vbuxx_ror_4 +txa +lsr +lsr +lsr +lsr +tax +//FRAGMENT vbuyy=vbuxx_ror_4 +txa +lsr +lsr +lsr +lsr +tay +//FRAGMENT vduz1=pduz2_derefidx_vbuxx +txa +tay +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +iny +lda ({z2}),y +sta {z1}+2 +iny +lda ({z2}),y +sta {z1}+3 +//FRAGMENT vduz1=vduz2_plus_pduc1_derefidx_vbuxx +lda {z2} +clc +adc {c1},x +sta {z1} +lda {z2}+1 +adc {c1}+1,x +sta {z1}+1 +lda {z2}+2 +adc {c1}+2,x +sta {z1}+2 +lda {z2}+3 +adc {c1}+3,x +sta {z1}+3 +//FRAGMENT vduz1=vduz2_plus_pduz3_derefidx_vbuxx +txa +tay +lda {z2} +clc +adc ({z3}),y +sta {z1} +iny +lda {z2}+1 +adc ({z3}),y +sta {z1}+1 +iny +lda {z2}+2 +adc ({z3}),y +sta {z1}+2 +iny +lda {z2}+3 +adc ({z3}),y +sta {z1}+3 +//FRAGMENT vbsaa=_sbyte_vwuz1 +lda {z1} +//FRAGMENT vbsxx=_sbyte_vwuz1 +ldx {z1} +//FRAGMENT vbsz1=vbsc1_minus_vbsaa +eor #$ff +sec +adc #{c1} +sta {z1} +//FRAGMENT vbsz1=vbsc1_minus_vbsxx +txa +eor #$ff +sec +adc #{c1} +sta {z1} +//FRAGMENT vbsz1=vbsc1_minus_vbsyy +tya +eor #$ff +sec +adc #{c1} +sta {z1} +//FRAGMENT vbsxx=vbsc1_minus_vbsz1 +lda #{c1} +sec +sbc {z1} +tax +//FRAGMENT vbsxx=vbsc1_minus_vbsaa +eor #$ff +tax +axs #-{c1}-1 +//FRAGMENT vbsxx=vbsc1_minus_vbsxx +txa +eor #$ff +tax +axs #-{c1}-1 +//FRAGMENT vbsxx=vbsc1_minus_vbsyy +tya +eor #$ff +tax +axs #-{c1}-1 +//FRAGMENT 0_neq_vbsxx_then_la1 +cpx #0 +bne {la1} +//FRAGMENT vbuxx=vbuxx_minus_vbuz1 +txa +sec +sbc {z1} +tax +//FRAGMENT vbuz1=vbuz1_minus_vbuaa +eor #$ff +sec +adc {z1} +sta {z1} +//FRAGMENT vbuxx=vbuxx_minus_vbuaa +sta $ff +txa +sec +sbc $ff +tax +//FRAGMENT vbuz1=vbuz1_minus_vbuxx +txa +eor #$ff +sec +adc {z1} +sta {z1} +//FRAGMENT vbuxx=vbuxx_minus_vbuxx +lda #0 +tax +//FRAGMENT vbuz1=vbuz1_minus_vbuyy +tya +eor #$ff +sec +adc {z1} +sta {z1} +//FRAGMENT vbuxx=vbuxx_minus_vbuyy +txa +sty $ff +sec +sbc $ff +tax +//FRAGMENT vbuxx=vbuyy_minus_vbuc1 +tya +tax +axs #{c1} +//FRAGMENT vbuyy=vbuxx_minus_vbuc1 +txa +sec +sbc #{c1} +tay +//FRAGMENT vbsaa=_inc_vbsaa +clc +adc #1 +//FRAGMENT vbsxx=_inc_vbsxx +inx +//FRAGMENT vbsyy=_sbyte_vwuz1 +ldy {z1} +//FRAGMENT vbsyy=_inc_vbsyy +iny +//FRAGMENT vbuyy=vbuaa_band_vbuc1 +and #{c1} +tay +//FRAGMENT vduz1=vduz2_bxor_vduz1 +lda {z1} +eor {z2} +sta {z1} +lda {z1}+1 +eor {z2}+1 +sta {z1}+1 +lda {z1}+2 +eor {z2}+2 +sta {z1}+2 +lda {z1}+3 +eor {z2}+3 +sta {z1}+3 +//FRAGMENT vduz1=vduz1_bxor_vduz2 +lda {z1} +eor {z2} +sta {z1} +lda {z1}+1 +eor {z2}+1 +sta {z1}+1 +lda {z1}+2 +eor {z2}+2 +sta {z1}+2 +lda {z1}+3 +eor {z2}+3 +sta {z1}+3 +//FRAGMENT vduz1=vduz1_bor_vduz2 +lda {z2} +ora {z1} +sta {z1} +lda {z2}+1 +ora {z1}+1 +sta {z1}+1 +lda {z2}+2 +ora {z1}+2 +sta {z1}+2 +lda {z2}+3 +ora {z1}+3 +sta {z1}+3 +//FRAGMENT vbuz1=vbuz1_rol_2 +lda {z1} +asl +asl +sta {z1} +//FRAGMENT vwuz1=vwuz1_plus_1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT vwuz1=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_ror_6 +lda {z1} +asl +sta $ff +lda {z1}+1 +rol +sta {z1} +lda #0 +rol +sta {z1}+1 +asl $ff +rol {z1} +rol {z1}+1 +//FRAGMENT vduz1=vduz1_plus_pduz2_derefidx_vbuz3 +ldy {z3} +lda {z1} +clc +adc ({z2}),y +sta {z1} +iny +lda {z1}+1 +adc ({z2}),y +sta {z1}+1 +iny +lda {z1}+2 +adc ({z2}),y +sta {z1}+2 +iny +lda {z1}+3 +adc ({z2}),y +sta {z1}+3 +//FRAGMENT vduz1=vduz1_band_vduz2 +lda {z1} +and {z2} +sta {z1} +lda {z1}+1 +and {z2}+1 +sta {z1}+1 +lda {z1}+2 +and {z2}+2 +sta {z1}+2 +lda {z1}+3 +and {z2}+3 +sta {z1}+3 +//FRAGMENT pbuz1=pbuc1_minus_vwuz1 +sec +lda #<{c1} +sbc {z1} +sta {z1} +lda #>{c1} +sbc {z1}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_plus_vwuz2 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vduz1=vduz1_plus_pduc1_derefidx_vbuz2 +ldy {z2} +lda {z1} +clc +adc {c1},y +sta {z1} +lda {z1}+1 +adc {c1}+1,y +sta {z1}+1 +lda {z1}+2 +adc {c1}+2,y +sta {z1}+2 +lda {z1}+3 +adc {c1}+3,y +sta {z1}+3 +//FRAGMENT vduz1=vduz2_bor_vduz1 +lda {z2} +ora {z1} +sta {z1} +lda {z2}+1 +ora {z1}+1 +sta {z1}+1 +lda {z2}+2 +ora {z1}+2 +sta {z1}+2 +lda {z2}+3 +ora {z1}+3 +sta {z1}+3 +//FRAGMENT vduz1=vduz2_plus_vduz1 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +lda {z1}+2 +adc {z2}+2 +sta {z1}+2 +lda {z1}+3 +adc {z2}+3 +sta {z1}+3 +//FRAGMENT vwuz1=vwuz1_rol_1 +asl {z1} +rol {z1}+1 +//FRAGMENT vwuz1=vwuz1_minus_vbuc1 +sec +lda {z1} +sbc #{c1} +sta {z1} +lda {z1}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT _deref_pbuc1_eq_vbuc2_then_la1 +lda #{c2} +cmp {c1} +beq {la1} +//FRAGMENT vwsz1=_inc_vwsz1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT vwsz1_neq_vbsc1_then_la1 +NO_SYNTHESIS +//FRAGMENT vwsz1_neq_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT vwsz1_neq_vwsc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT _deref_pwuc1=vbuz1 +lda {z1} +sta {c1} +lda #0 +sta {c1}+1 +//FRAGMENT vwsz1_lt_0_then_la1 +lda {z1}+1 +bmi {la1} +//FRAGMENT vwsz1=_neg_vwsz1 +sec +lda #0 +sbc {z1} +sta {z1} +lda #0 +sbc {z1}+1 +sta {z1}+1 +//FRAGMENT vbuz1=vbuz1_bxor_vbuc1 +lda #{c1} +eor {z1} +sta {z1} +//FRAGMENT _deref_pwuc1=vbuaa +sta {c1} +lda #0 +sta {c1}+1 +//FRAGMENT _deref_pwuc1=vbuxx +txa +sta {c1} +lda #0 +sta {c1}+1 +//FRAGMENT _deref_pwuc1=vbuyy +tya +sta {c1} +lda #0 +sta {c1}+1 +//FRAGMENT _deref_pbuc1=_dec__deref_pbuc1 +dec {c1} +//FRAGMENT vwuz1=vwuz1_plus_vwuc1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=_lo_vwuz2 +lda {z2} +sta {z1} +//FRAGMENT pbuz1_lt_pbuz2_then_la1 +lda {z1}+1 +cmp {z2}+1 +bcc {la1} +bne !+ +lda {z1} +cmp {z2} +bcc {la1} +!: +//FRAGMENT vbuaa=_lo_vwuz1 +lda {z1} +//FRAGMENT vbuxx=_lo_vwuz1 +ldx {z1} +//FRAGMENT vbuz1=vbuaa_ror_4 +lsr +lsr +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=vbuaa_ror_4 +lsr +lsr +lsr +lsr +//FRAGMENT vbuxx=vbuaa_ror_4 +lsr +lsr +lsr +lsr +tax +//FRAGMENT vbuyy=vbuaa_ror_4 +lsr +lsr +lsr +lsr +tay +//FRAGMENT vbuz1=vbuz1_plus_2 +lda {z1} +clc +adc #2 +sta {z1} +//FRAGMENT vbuxx=vbuxx_plus_2 +inx +inx +//FRAGMENT vbuyy=vbuyy_plus_2 +iny +iny +//FRAGMENT vbsz1=vbsz2 +lda {z2} +sta {z1} +//FRAGMENT vbuz1=_hi_vwsz2 +lda {z2}+1 +sta {z1} +//FRAGMENT vwuz1=vwuz1_minus_vwuc1 +lda {z1} +sec +sbc #<{c1} +sta {z1} +lda {z1}+1 +sbc #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=vbuz2_minus_vbuz3 +lda {z2} +sec +sbc {z3} +sta {z1} +//FRAGMENT vbsz1=_neg_vbsz2 +lda {z2} +eor #$ff +clc +adc #$01 +sta {z1} +//FRAGMENT vwuz1=vwuz1_sethi_vbuz2 +lda {z2} +sta {z1}+1 +//FRAGMENT vbsz1_lt_0_then_la1 +lda {z1} +bmi {la1} +//FRAGMENT vbsz1=_neg_vbsz1 +lda {z1} +eor #$ff +clc +adc #$01 +sta {z1} +//FRAGMENT vwuz1=vwuz1_bor_vbuc1 +lda #{c1} +ora {z1} +sta {z1} +//FRAGMENT vwuz1=vwuz2_rol_vbuz3 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +ldy {z3} +beq !e+ +!: +asl {z1} +rol {z1}+1 +dey +bne !- +!e: +//FRAGMENT vbuz1=vbuz1_ror_1 +lsr {z1} +//FRAGMENT vbsaa=vbsz1 +lda {z1} +//FRAGMENT vbsxx=vbsz1 +ldx {z1} +//FRAGMENT vbsz1=vbsaa +sta {z1} +//FRAGMENT vbuaa=_hi_vwsz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi_vwsz1 +ldx {z1}+1 +//FRAGMENT vbuz1=vbuc1_plus_vbuaa +clc +adc #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuc1_plus_vbuaa +clc +adc #{c1} +//FRAGMENT vbuxx=vbuc1_plus_vbuaa +tax +axs #-[{c1}] +//FRAGMENT vbuz1=vbuyy_ror_4 +tya +lsr +lsr +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=vbuyy_ror_4 +tya +lsr +lsr +lsr +lsr +//FRAGMENT vbuxx=vbuyy_ror_4 +tya +lsr +lsr +lsr +lsr +tax +//FRAGMENT vbuyy=vbuyy_ror_4 +tya +lsr +lsr +lsr +lsr +tay +//FRAGMENT vbuz1=vbuaa_minus_vbuz2 +sec +sbc {z2} +sta {z1} +//FRAGMENT vbuz1=vbuxx_minus_vbuz2 +txa +sec +sbc {z2} +sta {z1} +//FRAGMENT vbuz1=vbuyy_minus_vbuz2 +tya +sec +sbc {z2} +sta {z1} +//FRAGMENT vbuz1=vbuz2_minus_vbuaa +eor #$ff +sec +adc {z2} +sta {z1} +//FRAGMENT vbuz1=vbuaa_minus_vbuaa +lda #0 +sta {z1} +//FRAGMENT vbuz1=vbuxx_minus_vbuaa +sta $ff +txa +sec +sbc $ff +sta {z1} +//FRAGMENT vbuz1=vbuyy_minus_vbuaa +sta $ff +tya +sec +sbc $ff +sta {z1} +//FRAGMENT vbuz1=vbuz2_minus_vbuxx +txa +eor #$ff +sec +adc {z2} +sta {z1} +//FRAGMENT vbuz1=vbuaa_minus_vbuxx +stx $ff +sec +sbc $ff +sta {z1} +//FRAGMENT vbuz1=vbuxx_minus_vbuxx +lda #0 +sta {z1} +//FRAGMENT vbuz1=vbuyy_minus_vbuxx +tya +stx $ff +sec +sbc $ff +sta {z1} +//FRAGMENT vbuz1=vbuz2_minus_vbuyy +tya +eor #$ff +sec +adc {z2} +sta {z1} +//FRAGMENT vbuz1=vbuaa_minus_vbuyy +sty $ff +sec +sbc $ff +sta {z1} +//FRAGMENT vbuz1=vbuxx_minus_vbuyy +txa +sty $ff +sec +sbc $ff +sta {z1} +//FRAGMENT vbuz1=vbuyy_minus_vbuyy +lda #0 +sta {z1} +//FRAGMENT vbuaa=vbuz1_minus_vbuz2 +lda {z1} +sec +sbc {z2} +//FRAGMENT vbuaa=vbuaa_minus_vbuz1 +sec +sbc {z1} +//FRAGMENT vbuaa=vbuxx_minus_vbuz1 +txa +sec +sbc {z1} +//FRAGMENT vbuaa=vbuyy_minus_vbuz1 +tya +sec +sbc {z1} +//FRAGMENT vbuaa=vbuz1_minus_vbuaa +eor #$ff +sec +adc {z1} +//FRAGMENT vbuaa=vbuaa_minus_vbuaa +lda #0 +//FRAGMENT vbuaa=vbuxx_minus_vbuaa +sta $ff +txa +sec +sbc $ff +//FRAGMENT vbuaa=vbuyy_minus_vbuaa +sta $ff +tya +sec +sbc $ff +//FRAGMENT vbuaa=vbuz1_minus_vbuxx +txa +eor #$ff +sec +adc {z1} +//FRAGMENT vbuaa=vbuaa_minus_vbuxx +stx $ff +sec +sbc $ff +//FRAGMENT vbuaa=vbuxx_minus_vbuxx +lda #0 +//FRAGMENT vbuaa=vbuyy_minus_vbuxx +tya +stx $ff +sec +sbc $ff +//FRAGMENT vbuaa=vbuz1_minus_vbuyy +tya +eor #$ff +sec +adc {z1} +//FRAGMENT vbuaa=vbuaa_minus_vbuyy +sty $ff +sec +sbc $ff +//FRAGMENT vbuaa=vbuxx_minus_vbuyy +txa +sty $ff +sec +sbc $ff +//FRAGMENT vbuaa=vbuyy_minus_vbuyy +lda #0 +//FRAGMENT vbuxx=vbuz1_minus_vbuz2 +lda {z1} +sec +sbc {z2} +tax +//FRAGMENT vbuxx=vbuaa_minus_vbuz1 +sec +sbc {z1} +tax +//FRAGMENT vbuxx=vbuyy_minus_vbuz1 +tya +sec +sbc {z1} +tax +//FRAGMENT vbuxx=vbuz1_minus_vbuaa +eor #$ff +sec +adc {z1} +tax +//FRAGMENT vbuxx=vbuaa_minus_vbuaa +lda #0 +tax +//FRAGMENT vbuxx=vbuyy_minus_vbuaa +sta $ff +tya +sec +sbc $ff +tax +//FRAGMENT vbuxx=vbuz1_minus_vbuxx +txa +eor #$ff +sec +adc {z1} +tax +//FRAGMENT vbuxx=vbuaa_minus_vbuxx +stx $ff +sec +sbc $ff +tax +//FRAGMENT vbuxx=vbuyy_minus_vbuxx +tya +stx $ff +sec +sbc $ff +tax +//FRAGMENT vbuxx=vbuz1_minus_vbuyy +tya +eor #$ff +sec +adc {z1} +tax +//FRAGMENT vbuxx=vbuaa_minus_vbuyy +sty $ff +sec +sbc $ff +tax +//FRAGMENT vbuxx=vbuyy_minus_vbuyy +lda #0 +tax +//FRAGMENT vbuyy=vbuz1_minus_vbuz2 +lda {z1} +sec +sbc {z2} +tay +//FRAGMENT vbuyy=vbuaa_minus_vbuz1 +sec +sbc {z1} +tay +//FRAGMENT vbuyy=vbuxx_minus_vbuz1 +txa +sec +sbc {z1} +tay +//FRAGMENT vbuyy=vbuyy_minus_vbuz1 +tya +sec +sbc {z1} +tay +//FRAGMENT vbuyy=vbuz1_minus_vbuaa +eor #$ff +sec +adc {z1} +tay +//FRAGMENT vbuyy=vbuaa_minus_vbuaa +lda #0 +tay +//FRAGMENT vbuyy=vbuxx_minus_vbuaa +sta $ff +txa +sec +sbc $ff +tay +//FRAGMENT vbuyy=vbuyy_minus_vbuaa +sta $ff +tya +sec +sbc $ff +tay +//FRAGMENT vbuyy=vbuz1_minus_vbuxx +txa +eor #$ff +sec +adc {z1} +tay +//FRAGMENT vbuyy=vbuaa_minus_vbuxx +stx $ff +sec +sbc $ff +tay +//FRAGMENT vbuyy=vbuxx_minus_vbuxx +lda #0 +tay +//FRAGMENT vbuyy=vbuyy_minus_vbuxx +tya +stx $ff +sec +sbc $ff +tay +//FRAGMENT vbuyy=vbuz1_minus_vbuyy +tya +eor #$ff +sec +adc {z1} +tay +//FRAGMENT vbuyy=vbuaa_minus_vbuyy +sty $ff +sec +sbc $ff +tay +//FRAGMENT vbuyy=vbuxx_minus_vbuyy +txa +sty $ff +sec +sbc $ff +tay +//FRAGMENT vbuyy=vbuyy_minus_vbuyy +lda #0 +tay +//FRAGMENT vbuz1=vbuz2_plus_vbuaa +clc +adc {z2} +sta {z1} +//FRAGMENT vbuaa=vbuz1_plus_vbuaa +clc +adc {z1} +//FRAGMENT vbuxx=vbuz1_plus_vbuaa +clc +adc {z1} +tax +//FRAGMENT vbuyy=vbuz1_plus_vbuaa +clc +adc {z1} +tay +//FRAGMENT vbuz1=vbuxx_plus_vbuaa +stx $ff +clc +adc $ff +sta {z1} +//FRAGMENT vbuaa=vbuxx_plus_vbuaa +stx $ff +clc +adc $ff +//FRAGMENT vbuxx=vbuxx_plus_vbuaa +stx $ff +clc +adc $ff +tax +//FRAGMENT vbuyy=vbuxx_plus_vbuaa +stx $ff +clc +adc $ff +tay +//FRAGMENT vbuz1=vbuyy_plus_vbuaa +sty $ff +clc +adc $ff +sta {z1} +//FRAGMENT vbuaa=vbuyy_plus_vbuaa +sty $ff +clc +adc $ff +//FRAGMENT vbuxx=vbuyy_plus_vbuaa +sty $ff +clc +adc $ff +tax +//FRAGMENT vbuyy=vbuyy_plus_vbuaa +sty $ff +clc +adc $ff +tay +//FRAGMENT vbsaa=_neg_vbsz1 +lda {z1} +eor #$ff +clc +adc #$01 +//FRAGMENT vbsxx=_neg_vbsz1 +lda {z1} +eor #$ff +clc +adc #$01 +tax +//FRAGMENT vbsyy=_neg_vbsz1 +lda {z1} +eor #$ff +clc +adc #$01 +tay +//FRAGMENT vbsz1=_neg_vbsaa +eor #$ff +clc +adc #$01 +sta {z1} +//FRAGMENT vbsaa=_neg_vbsaa +eor #$ff +clc +adc #$01 +//FRAGMENT vbsxx=_neg_vbsaa +eor #$ff +clc +adc #$01 +tax +//FRAGMENT vbsyy=_neg_vbsaa +eor #$ff +clc +adc #$01 +tay +//FRAGMENT vbsz1=_neg_vbsxx +txa +eor #$ff +clc +adc #$01 +sta {z1} +//FRAGMENT vbsaa=_neg_vbsxx +txa +eor #$ff +clc +adc #$01 +//FRAGMENT vbsxx=_neg_vbsxx +txa +eor #$ff +clc +adc #$01 +tax +//FRAGMENT vbsyy=_neg_vbsxx +txa +eor #$ff +clc +adc #$01 +tay +//FRAGMENT vbsz1=_neg_vbsyy +tya +eor #$ff +clc +adc #$01 +sta {z1} +//FRAGMENT vbsaa=_neg_vbsyy +tya +eor #$ff +clc +adc #$01 +//FRAGMENT vbsxx=_neg_vbsyy +tya +eor #$ff +clc +adc #$01 +tax +//FRAGMENT vbsyy=_neg_vbsyy +tya +eor #$ff +clc +adc #$01 +tay +//FRAGMENT vwuz1=vwuz1_sethi_vbuaa +sta {z1}+1 +//FRAGMENT vbsaa_lt_0_then_la1 +cmp #0 +bmi {la1} +//FRAGMENT vwuz1=vwuz2_rol_vbuxx +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +cpx #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +dex +bne !- +!e: +//FRAGMENT vwuz1=vwuz2_rol_vbuyy +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +cpy #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +dey +bne !- +!e: +//FRAGMENT vbsz1=vbsxx +stx {z1} +//FRAGMENT vbuxx=vbuxx_ror_1 +txa +lsr +tax +//FRAGMENT vbuyy=vbuyy_ror_1 +tya +lsr +tay +//FRAGMENT vbuaa=_dec_vbuaa +sec +sbc #1 +//FRAGMENT vbuyy=_dec_vbuyy +dey +//FRAGMENT vbsz1=vbsyy +sty {z1} +//FRAGMENT vbsaa=vbsxx +txa +//FRAGMENT vbsaa=vbsyy +tya +//FRAGMENT vbsxx=vbsaa +tax +//FRAGMENT vbsxx=vbsyy +tya +tax +//FRAGMENT vbsyy=vbsz1 +ldy {z1} +//FRAGMENT vbsyy=vbsaa +tay +//FRAGMENT vbsyy=vbsxx +txa +tay +//FRAGMENT vwuz1=vwuz1_sethi_vbuxx +stx {z1}+1 +//FRAGMENT vwuz1=vwuz1_sethi_vbuyy +sty {z1}+1 +//FRAGMENT vbsyy_ge_0_then_la1 +cpy #0 +bpl {la1} +//FRAGMENT vbsxx_lt_0_then_la1 +cpx #0 +bmi {la1} +//FRAGMENT vbuyy=_hi_vwsz1 +ldy {z1}+1 +//FRAGMENT vbuz1=vbuc1_plus_vbuyy +tya +clc +adc #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuc1_plus__hi_vwsz2 +lda #{c1} +clc +adc {z2}+1 +sta {z1} +//FRAGMENT vwuz1=vwuz1_rol_vbuz2 +ldy {z2} +beq !e+ +!: +asl {z1} +rol {z1}+1 +dey +bne !- +!e: +//FRAGMENT vbuz1_eq_vbuz2_then_la1 +lda {z1} +cmp {z2} +beq {la1} +//FRAGMENT vbuz1_eq_vbuaa_then_la1 +cmp {z1} +beq {la1} +//FRAGMENT vbuz1_eq_vbuyy_then_la1 +tya +cmp {z1} +beq {la1} +//FRAGMENT vbuyy_eq_vbuz1_then_la1 +tya +cmp {z1} +beq {la1} +//FRAGMENT vbuyy_eq_vbuaa_then_la1 +tax +sty $ff +cpx $ff +beq {la1} +//FRAGMENT vbuz1=vbuz2_minus_1 +ldx {z2} +dex +stx {z1} +//FRAGMENT pbuz1_derefidx_vbuz2_neq_vbuz3_then_la1 +ldy {z2} +lda ({z1}),y + +cmp {z3} +bne {la1} +//FRAGMENT vbuz1_le_vbuz2_then_la1 +lda {z2} +cmp {z1} +bcs {la1} +//FRAGMENT _deref_pbuz1_neq_vbuz2_then_la1 +ldy #0 +lda ({z1}),y +cmp {z2} +bne {la1} +//FRAGMENT vbuz1_le_vbuc1_then_la1 +lda #{c1} +cmp {z1} +bcs {la1} +//FRAGMENT vbuaa=vbuz1_minus_1 +lda {z1} +sec +sbc #1 +//FRAGMENT pbuz1_derefidx_vbuaa_neq_vbuz2_then_la1 +tay +lda ({z1}),y + +cmp {z2} +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuxx_neq_vbuz2_then_la1 +txa +tay +lda ({z1}),y + +cmp {z2} +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuyy_neq_vbuz2_then_la1 +lda ({z1}),y + +cmp {z2} +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuz2_neq_vbuxx_then_la1 +ldy {z2} +lda ({z1}),y + +tay +stx $ff +cpy $ff +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuaa_neq_vbuxx_then_la1 +tay +lda ({z1}),y + +tay +stx $ff +cpy $ff +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuxx_neq_vbuxx_then_la1 +txa +tay +lda ({z1}),y + +tay +stx $ff +cpy $ff +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuyy_neq_vbuxx_then_la1 +lda ({z1}),y + +tay +stx $ff +cpy $ff +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuz2_neq_vbuyy_then_la1 +tya +ldy {z2} +tax +lda ({z1}),y + +tay +stx $ff +cpy $ff +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuaa_neq_vbuyy_then_la1 +NO_SYNTHESIS +//FRAGMENT pbuz1_derefidx_vbuxx_neq_vbuyy_then_la1 +NO_SYNTHESIS +//FRAGMENT pbuz1_derefidx_vbuyy_neq_vbuyy_then_la1 +lda ({z1}),y + +tax +stx $ff +cpy $ff +bne {la1} +//FRAGMENT vbuxx_le_vbuz1_then_la1 +lda {z1} +stx $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuz1_le_vbuxx_then_la1 +cpx {z1} +bcs {la1} +//FRAGMENT _deref_pbuz1_neq_vbuxx_then_la1 +ldy #0 +lda ({z1}),y +tay +stx $ff +cpy $ff +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuaa=vbuc1 +tay +lda #{c1} +sta ({z1}),y +//FRAGMENT vbuaa_le_vbuc1_then_la1 +cmp #{c1} +bcc {la1} +beq {la1} +//FRAGMENT vbuxx_le_vbuc1_then_la1 +cpx #{c1} +bcc {la1} +beq {la1} +//FRAGMENT vbuyy_le_vbuc1_then_la1 +cpy #{c1} +bcc {la1} +beq {la1} +//FRAGMENT vbuxx=vbuz1_minus_1 +ldx {z1} +dex +//FRAGMENT vbuyy=vbuz1_minus_1 +lda {z1} +tay +dey +//FRAGMENT vbuz1=vbuz1_plus_vbuaa +clc +adc {z1} +sta {z1} +//FRAGMENT vbuaa_ge_vbuc1_then_la1 +cmp #{c1} +bcs {la1} +//FRAGMENT 0_neq_pbuz1_derefidx_vbuz2_then_la1 +ldy {z2} +lda ({z1}),y + +cmp #0 +bne {la1} +//FRAGMENT 0_neq_pbuz1_derefidx_vbuaa_then_la1 +tay +lda ({z1}),y + +cmp #0 +bne {la1} +//FRAGMENT 0_neq_pbuz1_derefidx_vbuxx_then_la1 +txa +tay +lda ({z1}),y + +cmp #0 +bne {la1} +//FRAGMENT 0_neq_pbuz1_derefidx_vbuyy_then_la1 +lda ({z1}),y + +cmp #0 +bne {la1} +//FRAGMENT vbuz1_gt_vbuz2_then_la1 +lda {z2} +cmp {z1} +bcc {la1} +//FRAGMENT vbuz1_neq_vbuaa_then_la1 +cmp {z1} +bne {la1} +//FRAGMENT vbuz1_gt_vbuaa_then_la1 +cmp {z1} +bcc {la1} +//FRAGMENT vbuz1_gt_vbuxx_then_la1 +cpx {z1} +bcc {la1} +//FRAGMENT vbuz1_gt_vbuyy_then_la1 +cpy {z1} +bcc {la1} +//FRAGMENT vbuxx_gt_vbuz1_then_la1 +cpx {z1} +beq !+ +bcs {la1} +!: +//FRAGMENT vbuxx_neq_vbuyy_then_la1 +stx $ff +cpy $ff +bne {la1} +//FRAGMENT vbuxx_gt_vbuyy_then_la1 +stx $ff +cpy $ff +bcc {la1} +//FRAGMENT vbuyy_neq_vbuz1_then_la1 +cpy {z1} +bne {la1} +//FRAGMENT vbuyy_gt_vbuz1_then_la1 +cpy {z1} +beq !+ +bcs {la1} +!: +//FRAGMENT vbuyy_neq_vbuxx_then_la1 +stx $ff +cpy $ff +bne {la1} +//FRAGMENT vbuyy_gt_vbuxx_then_la1 +sty $ff +cpx $ff +bcc {la1} +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_vbuc2 +ldy {z1} +clc +lda {c1},y +adc #{c2} +sta {c1},y +lda {c1}+1,y +adc #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_pwuc2_derefidx_vbuz1 +ldy {z1} +clc +lda {c1},y +adc {c2},y +sta {c1},y +lda {c1}+1,y +adc {c2}+1,y +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuaa=pwuc1_derefidx_vbuaa_plus_vbuc2 +tay +clc +lda {c1},y +adc #{c2} +sta {c1},y +lda {c1}+1,y +adc #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vbuc2 +clc +lda {c1},x +adc #{c2} +sta {c1},x +lda {c1}+1,x +adc #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_vbuc2 +clc +lda {c1},y +adc #{c2} +sta {c1},y +lda {c1}+1,y +adc #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_pwuc2_derefidx_vbuxx +txa +tay +txa +sty $ff +ldx $ff +tay +clc +lda {c1},y +adc {c2},x +sta {c1},y +lda {c1}+1,y +adc {c2}+1,x +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_pwuc2_derefidx_vbuyy +clc +lda {c1},y +adc {c2},y +sta {c1},y +lda {c1}+1,y +adc {c2}+1,y +sta {c1}+1,y +//FRAGMENT _deref_pbuc1_lt_vbuc2_then_la1 +lda {c1} +cmp #{c2} +bcc {la1} +//FRAGMENT qbuz1=qbuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vbsz1=pbsc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +//FRAGMENT vwsz1=vwsz2_plus_vwsc1 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=vwsz2_rol_1 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +//FRAGMENT vbuz1=vbuz1_plus_vbuc1 +lax {z1} +axs #-[{c1}] +stx {z1} +//FRAGMENT vbsz1=vbsz1_plus_vbsc1 +lax {z1} +axs #-[{c1}] +stx {z1} +//FRAGMENT pbuz1=pbuc1_plus_vbuz2 +lda {z2} +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT qbuc1_derefidx_vbuz1=pbuc2 +ldy {z1} +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT pbuz1=qbuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT vbuz1=vbuz2_ror_2 +lda {z2} +lsr +lsr +sta {z1} +//FRAGMENT pbuz1=pbuz2_plus_vbuz3 +lda {z3} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT _deref_qbuz1=pbuz2 +ldy #0 +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT qbuz1=qbuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 +ldy {z2} +lda {c2},y +ldy #{c1} +sta ({z1}),y +//FRAGMENT vbuz1=vbuz2_band__deref_pbuc1 +lda {c1} +and {z2} +sta {z1} +//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz2 +ldy {z2} +lda ({z3}),y +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2_eq_pbuz3_derefidx_vbuz2_then_la1 +ldy {z2} +lda ({z1}),y + +cmp ({z3}),y +beq {la1} +//FRAGMENT vbuz1_gt_0_then_la1 +lda {z1} +bne {la1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_band_vbuc2 +lda #{c2} +ldy {z2} +and {c1},y +sta {z1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_ror_1 +ldy {z2} +lda {c1},y +lsr +sta {z1} +//FRAGMENT _deref_pbuz1=_deref_pbuc1 +lda {c1} +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbsc1_ge_0_then_la1 +lda {c1} +cmp #0 +bpl {la1} +//FRAGMENT vbuz1=vbuz2_minus__deref_pbuc1 +lda {z2} +sec +sbc {c1} +sta {z1} +//FRAGMENT vbuz1=_bnot__deref_pbuc1 +lda {c1} +eor #$ff +sta {z1} +//FRAGMENT vwuz1=_deref_pbuc1_word__deref_pbuc2 +lda {c2} +sta {z1} +lda {c1} +sta {z1}+1 +//FRAGMENT vbsz1=pbsc1_derefidx_vbuxx +lda {c1},x +sta {z1} +//FRAGMENT vbsz1=pbsc1_derefidx_vbuyy +lda {c1},y +sta {z1} +//FRAGMENT vbsaa=pbsc1_derefidx_vbuz1 +ldy {z1} +lda {c1},y +//FRAGMENT vbsaa=pbsc1_derefidx_vbuxx +lda {c1},x +//FRAGMENT vbsaa=pbsc1_derefidx_vbuyy +lda {c1},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbuz1 +ldy {z1} +ldx {c1},y +//FRAGMENT vbuxx=vbuxx_plus_vbuc1 +txa +axs #-[{c1}] +//FRAGMENT vbuyy=vbuyy_plus_vbuc1 +tya +clc +adc #{c1} +tay +//FRAGMENT vbsxx=vbsxx_plus_vbsc1 +txa +axs #-[{c1}] +//FRAGMENT vbsyy=vbsyy_plus_vbsc1 +tya +clc +adc #{c1} +tay +//FRAGMENT pbuz1=pbuc1_plus_vbuaa +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vbuxx +txa +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vbuyy +tya +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT qbuc1_derefidx_vbuaa=pbuc2 +tay +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT qbuc1_derefidx_vbuxx=pbuc2 +lda #<{c2} +sta {c1},x +lda #>{c2} +sta {c1}+1,x +//FRAGMENT qbuc1_derefidx_vbuyy=pbuc2 +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT pbuz1=qbuc1_derefidx_vbuaa +tay +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT pbuz1=qbuc1_derefidx_vbuxx +lda {c1},x +sta {z1} +lda {c1}+1,x +sta {z1}+1 +//FRAGMENT pbuz1=qbuc1_derefidx_vbuyy +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT vbuz1=vbuaa_ror_2 +lsr +lsr +sta {z1} +//FRAGMENT vbuz1=vbuxx_ror_2 +txa +lsr +lsr +sta {z1} +//FRAGMENT vbuz1=vbuyy_ror_2 +tya +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=vbuz1_ror_2 +lda {z1} +lsr +lsr +//FRAGMENT vbuaa=vbuaa_ror_2 +lsr +lsr +//FRAGMENT vbuaa=vbuxx_ror_2 +txa +lsr +lsr +//FRAGMENT vbuaa=vbuyy_ror_2 +tya +lsr +lsr +//FRAGMENT vbuxx=vbuz1_ror_2 +lda {z1} +lsr +lsr +tax +//FRAGMENT vbuxx=vbuaa_ror_2 +lsr +lsr +tax +//FRAGMENT vbuxx=vbuxx_ror_2 +txa +lsr +lsr +tax +//FRAGMENT vbuxx=vbuyy_ror_2 +tya +lsr +lsr +tax +//FRAGMENT vbuyy=vbuz1_ror_2 +lda {z1} +lsr +lsr +tay +//FRAGMENT vbuyy=vbuaa_ror_2 +lsr +lsr +tay +//FRAGMENT vbuyy=vbuxx_ror_2 +txa +lsr +lsr +tay +//FRAGMENT vbuyy=vbuyy_ror_2 +tya +lsr +lsr +tay +//FRAGMENT vbuz1=vbuyy_ror_3 +tya +lsr +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=vbuyy_ror_3 +tya +lsr +lsr +lsr +//FRAGMENT vbuxx=vbuyy_ror_3 +tya +lsr +lsr +lsr +tax +//FRAGMENT vbuyy=vbuyy_ror_3 +tya +lsr +lsr +lsr +tay +//FRAGMENT pbuz1=pbuz2_plus_vbuxx +txa +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_plus_vbuyy +tya +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx +lda {c2},x +ldy #{c1} +sta ({z1}),y +//FRAGMENT vbuaa=vbuz1_band__deref_pbuc1 +lda {c1} +and {z1} +//FRAGMENT vbuxx=vbuz1_band__deref_pbuc1 +lda {c1} +and {z1} +tax +//FRAGMENT vbuyy=vbuz1_band__deref_pbuc1 +lda {c1} +and {z1} +tay +//FRAGMENT vbuz1=vbuaa_band__deref_pbuc1 +and {c1} +sta {z1} +//FRAGMENT vbuaa=vbuaa_band__deref_pbuc1 +and {c1} +//FRAGMENT vbuxx=vbuaa_band__deref_pbuc1 +ldx {c1} +axs #0 +//FRAGMENT vbuaa_neq_vbuz1_then_la1 +cmp {z1} +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuaa +tay +lda ({z2}),y +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuxx +txa +tay +lda ({z2}),y +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy +lda ({z2}),y +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuaa_eq_pbuz2_derefidx_vbuaa_then_la1 +tay +lda ({z1}),y + +cmp ({z2}),y +beq {la1} +//FRAGMENT pbuz1_derefidx_vbuxx_eq_pbuz2_derefidx_vbuxx_then_la1 +txa +tay +lda ({z1}),y + +cmp ({z2}),y +beq {la1} +//FRAGMENT pbuz1_derefidx_vbuyy_eq_pbuz2_derefidx_vbuyy_then_la1 +lda ({z1}),y + +cmp ({z2}),y +beq {la1} +//FRAGMENT vbuaa_gt_0_then_la1 +cmp #0 +bne {la1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_band_vbuc2 +tay +lda #{c2} +and {c1},y +sta {z1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_band_vbuc2 +lda #{c2} +and {c1},x +sta {z1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_band_vbuc2 +lda #{c2} +and {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_band_vbuc2 +lda #{c2} +ldy {z1} +and {c1},y +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_band_vbuc2 +tay +lda #{c2} +and {c1},y +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_band_vbuc2 +lda #{c2} +and {c1},x +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_band_vbuc2 +lda #{c2} +and {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_band_vbuc2 +lda #{c2} +ldx {z1} +and {c1},x +tax +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_band_vbuc2 +tax +lda #{c2} +and {c1},x +tax +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_band_vbuc2 +lda #{c2} +and {c1},x +tax +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_band_vbuc2 +lda #{c2} +and {c1},y +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_band_vbuc2 +lda #{c2} +ldy {z1} +and {c1},y +tay +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_band_vbuc2 +tay +lda #{c2} +and {c1},y +tay +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_band_vbuc2 +lda #{c2} +and {c1},x +tay +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_band_vbuc2 +lda #{c2} +and {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_ror_1 +lda {c1},x +lsr +sta {z1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_ror_1 +lda {c1},y +lsr +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_ror_1 +ldy {z1} +lda {c1},y +lsr +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_ror_1 +lda {c1},x +lsr +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_ror_1 +lda {c1},y +lsr +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_ror_1 +ldx {z1} +lda {c1},x +lsr +tax +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_ror_1 +lda {c1},x +lsr +tax +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_ror_1 +lda {c1},y +lsr +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_ror_1 +ldy {z1} +lda {c1},y +lsr +tay +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_ror_1 +lda {c1},x +lsr +tay +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_ror_1 +lda {c1},y +lsr +tay +//FRAGMENT vbuaa=vbuz1_minus__deref_pbuc1 +lda {z1} +sec +sbc {c1} +//FRAGMENT vbuxx=vbuz1_minus__deref_pbuc1 +lda {z1} +sec +sbc {c1} +tax +//FRAGMENT vbuyy=vbuz1_minus__deref_pbuc1 +lda {z1} +sec +sbc {c1} +tay +//FRAGMENT vbuz1=vbuaa_minus__deref_pbuc1 +sec +sbc {c1} +sta {z1} +//FRAGMENT vbuaa=vbuaa_minus__deref_pbuc1 +sec +sbc {c1} +//FRAGMENT vbuxx=vbuaa_minus__deref_pbuc1 +sec +sbc {c1} +tax +//FRAGMENT vbuyy=vbuaa_minus__deref_pbuc1 +sec +sbc {c1} +tay +//FRAGMENT vbuz1=vbuxx_minus__deref_pbuc1 +txa +sec +sbc {c1} +sta {z1} +//FRAGMENT vbuaa=vbuxx_minus__deref_pbuc1 +txa +sec +sbc {c1} +//FRAGMENT vbuxx=vbuxx_minus__deref_pbuc1 +txa +sec +sbc {c1} +tax +//FRAGMENT vbuyy=vbuxx_minus__deref_pbuc1 +txa +sec +sbc {c1} +tay +//FRAGMENT vbuz1=vbuyy_minus__deref_pbuc1 +tya +sec +sbc {c1} +sta {z1} +//FRAGMENT vbuaa=vbuyy_minus__deref_pbuc1 +tya +sec +sbc {c1} +//FRAGMENT vbuxx=vbuyy_minus__deref_pbuc1 +tya +sec +sbc {c1} +tax +//FRAGMENT vbuyy=vbuyy_minus__deref_pbuc1 +tya +sec +sbc {c1} +tay +//FRAGMENT vbuaa=_bnot__deref_pbuc1 +lda {c1} +eor #$ff +//FRAGMENT vbuxx=_bnot__deref_pbuc1 +lda {c1} +eor #$ff +tax +//FRAGMENT vbuyy=_bnot__deref_pbuc1 +lda {c1} +eor #$ff +tay +//FRAGMENT vbsyy=pbsc1_derefidx_vbuz1 +ldx {z1} +ldy {c1},x +//FRAGMENT vbuxx_gt_0_then_la1 +cpx #0 +bne {la1} +//FRAGMENT vbuyy_gt_0_then_la1 +cpy #0 +bne {la1} +//FRAGMENT vbuyy=_lo_vwuz1 +ldy {z1} +//FRAGMENT vbuz1=vbuxx_band__deref_pbuc1 +lda {c1} +sax {z1} +//FRAGMENT vbuz1=vbuyy_band__deref_pbuc1 +tya +and {c1} +sta {z1} +//FRAGMENT vbuaa=vbuxx_band__deref_pbuc1 +txa +and {c1} +//FRAGMENT vbuaa=vbuyy_band__deref_pbuc1 +tya +and {c1} +//FRAGMENT vbuxx=vbuxx_band__deref_pbuc1 +lda {c1} +axs #0 +//FRAGMENT vbuxx=vbuyy_band__deref_pbuc1 +ldx {c1} +tya +axs #0 +//FRAGMENT vbuyy=vbuaa_band__deref_pbuc1 +and {c1} +tay +//FRAGMENT vbuyy=vbuxx_band__deref_pbuc1 +txa +and {c1} +tay +//FRAGMENT vbuyy=vbuyy_band__deref_pbuc1 +tya +and {c1} +tay +//FRAGMENT pbuc1_derefidx_vbuxx=vbuaa +sta {c1},x +//FRAGMENT vwsz1=vwsz1_plus_vwsc1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_rol_1 +asl {z1} +rol {z1}+1 +//FRAGMENT isr_rom_min_c64_entry + +//FRAGMENT isr_rom_min_c64_exit +jmp $ea81 +//FRAGMENT vbuz1=vbuz2_plus_vbuc1 +lax {z2} +axs #-[{c1}] +stx {z1} +//FRAGMENT vbuaa=vbuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +//FRAGMENT vbuxx=vbuz1_plus_vbuc1 +lax {z1} +axs #-[{c1}] +//FRAGMENT vbuyy=vbuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +tay +//FRAGMENT vbuz1=vbuaa_plus_vbuc1 +clc +adc #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuaa_plus_vbuc1 +clc +adc #{c1} +//FRAGMENT vbuxx=vbuaa_plus_vbuc1 +tax +axs #-[{c1}] +//FRAGMENT pbuc1_derefidx_vbuaa=vbuz1 +tay +lda {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuyy=vbuaa +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuaa=vbuxx +tay +txa +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuaa=vbuyy +tax +tya +sta {c1},x +//FRAGMENT vbuyy=vbuaa_plus_vbuc1 +clc +adc #{c1} +tay +//FRAGMENT vbuz1=vbuxx_plus_vbuc1 +txa +axs #-[{c1}] +stx {z1} +//FRAGMENT vbuaa=vbuxx_plus_vbuc1 +txa +clc +adc #{c1} +//FRAGMENT vbuyy=vbuxx_plus_vbuc1 +txa +clc +adc #{c1} +tay +//FRAGMENT vbuz1=vbuyy_plus_vbuc1 +tya +clc +adc #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuyy_plus_vbuc1 +tya +clc +adc #{c1} +//FRAGMENT vbuxx=vbuyy_plus_vbuc1 +tya +tax +axs #-[{c1}] +//FRAGMENT vbuz1=_inc_vbuaa +clc +adc #1 +sta {z1} +//FRAGMENT vbuaa=_inc_vbuxx +inx +txa +//FRAGMENT vbuaa=_inc_vbuyy +iny +tya +//FRAGMENT vbuxx=_inc_vbuaa +tax +inx +//FRAGMENT vbuyy=_inc_vbuaa +tay +iny +//FRAGMENT vwsz1=vwsz2_minus_vbsc1 +lda {z2} +sec +sbc #{c1} +sta {z1} +lda {z2}+1 +sbc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_minus_vbsc1 +lda {z1} +sec +sbc #{c1} +sta {z1} +lda {z1}+1 +sbc #>{c1} +sta {z1}+1 +//FRAGMENT pwsc1_derefidx_vbuz1=vwsz2 +ldy {z1} +lda {z2} +sta {c1},y +lda {z2}+1 +sta {c1}+1,y +//FRAGMENT pwsc1_derefidx_vbuaa=vwsz1 +tay +lda {z1} +sta {c1},y +lda {z1}+1 +sta {c1}+1,y +//FRAGMENT pwsc1_derefidx_vbuxx=vwsz1 +lda {z1} +sta {c1},x +lda {z1}+1 +sta {c1}+1,x +//FRAGMENT pwsc1_derefidx_vbuyy=vwsz1 +lda {z1} +sta {c1},y +lda {z1}+1 +sta {c1}+1,y +//FRAGMENT vbuz1=_bnot_vbuz2 +lda {z2} +eor #$ff +sta {z1} +//FRAGMENT vbuaa=_bnot_vbuz1 +lda {z1} +eor #$ff +//FRAGMENT vbuxx=_bnot_vbuz1 +lda {z1} +eor #$ff +tax +//FRAGMENT vbuyy=_bnot_vbuz1 +lda {z1} +eor #$ff +tay +//FRAGMENT vbuz1=_bnot_vbuaa +eor #$ff +sta {z1} +//FRAGMENT vbuaa=_bnot_vbuaa +eor #$ff +//FRAGMENT vbuxx=_bnot_vbuaa +eor #$ff +tax +//FRAGMENT vbuyy=_bnot_vbuaa +eor #$ff +tay +//FRAGMENT vbuz1=_bnot_vbuxx +txa +eor #$ff +sta {z1} +//FRAGMENT vbuaa=_bnot_vbuxx +txa +eor #$ff +//FRAGMENT vbuxx=_bnot_vbuxx +txa +eor #$ff +tax +//FRAGMENT vbuyy=_bnot_vbuxx +txa +eor #$ff +tay +//FRAGMENT vbuz1=_bnot_vbuyy +tya +eor #$ff +sta {z1} +//FRAGMENT vbuaa=_bnot_vbuyy +tya +eor #$ff +//FRAGMENT vbuxx=_bnot_vbuyy +tya +eor #$ff +tax +//FRAGMENT vbuyy=_bnot_vbuyy +tya +eor #$ff +tay +//FRAGMENT _deref_pbuc1_neq_0_then_la1 +lda {c1} +cmp #0 +bne {la1} +//FRAGMENT pbum1=pbuc1 +lda #<{c1} +sta {m1} +lda #>{c1} +sta {m1}+1 +//FRAGMENT vbum1=vbuc1 +lda #{c1} +sta {m1} +//FRAGMENT _deref_pbum1=vbuc1 +lda #{c1} +ldy {m1} +sty $fe +ldy {m1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT pbum1=_inc_pbum1 +inc {m1} +bne !+ +inc {m1}+1 +!: +//FRAGMENT vbum1=_inc_vbum1 +inc {m1} +//FRAGMENT vbum1_neq_vbuc1_then_la1 +lda #{c1} +cmp {m1} +bne {la1} +//FRAGMENT vboz1=vbuz2_eq_vbuc1 +lda {z2} +eor #{c1} +beq !+ +lda #1 +!: +eor #1 +sta {z1} +//FRAGMENT vboz1=vboz2 +lda {z2} +sta {z1} +//FRAGMENT vboz1_then_la1 +lda {z1} +cmp #0 +bne {la1} +//FRAGMENT vboz1=vbuz2_neq_vbuc1 +lda {z2} +eor #{c1} +beq !+ +lda #1 +!: +sta {z1} +//FRAGMENT vboz1=vboz2_or_vboz3 +lda {z2} +ora {z3} +sta {z1} +//FRAGMENT vboaa=vbuz1_eq_vbuc1 +lda {z1} +eor #{c1} +beq !+ +lda #1 +!: +eor #1 +//FRAGMENT vboxx=vbuz1_eq_vbuc1 +lda {z1} +eor #{c1} +beq !+ +lda #1 +!: +eor #1 +tax +//FRAGMENT vboyy=vbuz1_eq_vbuc1 +lda {z1} +eor #{c1} +beq !+ +lda #1 +!: +eor #1 +tay +//FRAGMENT vboz1=vbuaa_eq_vbuc1 +eor #{c1} +beq !+ +lda #1 +!: +eor #1 +sta {z1} +//FRAGMENT vboaa=vbuaa_eq_vbuc1 +eor #{c1} +beq !+ +lda #1 +!: +eor #1 +//FRAGMENT vboxx=vbuaa_eq_vbuc1 +eor #{c1} +beq !+ +lda #1 +!: +eor #1 +tax +//FRAGMENT vboyy=vbuaa_eq_vbuc1 +eor #{c1} +beq !+ +lda #1 +!: +eor #1 +tay +//FRAGMENT vboz1=vbuxx_eq_vbuc1 +lda #1 +cpx #{c1} +beq !+ +lda #0 +!: +sta {z1} +//FRAGMENT vboaa=vbuxx_eq_vbuc1 +lda #1 +cpx #{c1} +beq !+ +lda #0 +!: +//FRAGMENT vboxx=vbuxx_eq_vbuc1 +lda #1 +cpx #{c1} +beq !+ +lda #0 +!: +tax +//FRAGMENT vboyy=vbuxx_eq_vbuc1 +lda #1 +cpx #{c1} +beq !+ +lda #0 +!: +tay +//FRAGMENT vboz1=vbuyy_eq_vbuc1 +lda #1 +cpy #{c1} +beq !+ +lda #0 +!: +sta {z1} +//FRAGMENT vboaa=vbuyy_eq_vbuc1 +lda #1 +cpy #{c1} +beq !+ +lda #0 +!: +//FRAGMENT vboxx=vbuyy_eq_vbuc1 +lda #1 +cpy #{c1} +beq !+ +lda #0 +!: +tax +//FRAGMENT vboyy=vbuyy_eq_vbuc1 +lda #1 +cpy #{c1} +beq !+ +lda #0 +!: +tay +//FRAGMENT vboz1=vboaa +sta {z1} +//FRAGMENT vboaa=vboz1 +lda {z1} +//FRAGMENT vboxx=vboz1 +ldx {z1} +//FRAGMENT vboaa_then_la1 +cmp #0 +bne {la1} +//FRAGMENT vboaa=vbuz1_neq_vbuc1 +lda {z1} +eor #{c1} +beq !+ +lda #1 +!: +//FRAGMENT vboxx=vbuz1_neq_vbuc1 +lda {z1} +eor #{c1} +beq !+ +lda #1 +!: +tax +//FRAGMENT vboyy=vbuz1_neq_vbuc1 +lda {z1} +eor #{c1} +beq !+ +lda #1 +!: +tay +//FRAGMENT vboz1=vbuaa_neq_vbuc1 +eor #{c1} +beq !+ +lda #1 +!: +sta {z1} +//FRAGMENT vboaa=vbuaa_neq_vbuc1 +eor #{c1} +beq !+ +lda #1 +!: +//FRAGMENT vboxx=vbuaa_neq_vbuc1 +eor #{c1} +beq !+ +lda #1 +!: +tax +//FRAGMENT vboyy=vbuaa_neq_vbuc1 +eor #{c1} +beq !+ +lda #1 +!: +tay +//FRAGMENT vboz1=vbuxx_neq_vbuc1 +lda #0 +cpx #{c1} +beq !+ +lda #1 +!: +sta {z1} +//FRAGMENT vboaa=vbuxx_neq_vbuc1 +lda #0 +cpx #{c1} +beq !+ +lda #1 +!: +//FRAGMENT vboxx=vbuxx_neq_vbuc1 +lda #0 +cpx #{c1} +beq !+ +lda #1 +!: +tax +//FRAGMENT vboyy=vbuxx_neq_vbuc1 +lda #0 +cpx #{c1} +beq !+ +lda #1 +!: +tay +//FRAGMENT vboz1=vbuyy_neq_vbuc1 +lda #0 +cpy #{c1} +beq !+ +lda #1 +!: +sta {z1} +//FRAGMENT vboaa=vbuyy_neq_vbuc1 +lda #0 +cpy #{c1} +beq !+ +lda #1 +!: +//FRAGMENT vboxx=vbuyy_neq_vbuc1 +lda #0 +cpy #{c1} +beq !+ +lda #1 +!: +tax +//FRAGMENT vboyy=vbuyy_neq_vbuc1 +lda #0 +cpy #{c1} +beq !+ +lda #1 +!: +tay +//FRAGMENT vboz1=vboz2_or_vboaa +ora {z2} +sta {z1} +//FRAGMENT vboz1=vboz2_or_vboxx +txa +ora {z2} +sta {z1} +//FRAGMENT vboz1=vboz2_or_vboyy +tya +ora {z2} +sta {z1} +//FRAGMENT vboz1=vboxx_or_vboz2 +txa +ora {z2} +sta {z1} +//FRAGMENT vboz1=vboxx_or_vboaa +stx $ff +ora $ff +sta {z1} +//FRAGMENT vboz1=vboxx_or_vboxx +txa +stx $ff +ora $ff +sta {z1} +//FRAGMENT vboz1=vboxx_or_vboyy +txa +sty $ff +ora $ff +sta {z1} +//FRAGMENT vboz1=vboyy_or_vboz2 +tya +ora {z2} +sta {z1} +//FRAGMENT vboz1=vboyy_or_vboaa +sty $ff +ora $ff +sta {z1} +//FRAGMENT vboz1=vboyy_or_vboxx +txa +sty $ff +ora $ff +sta {z1} +//FRAGMENT vboz1=vboyy_or_vboyy +tya +sty $ff +ora $ff +sta {z1} +//FRAGMENT vboaa=vboz1_or_vboz2 +lda {z1} +ora {z2} +//FRAGMENT vboaa=vboz1_or_vboaa +ora {z1} +//FRAGMENT vboaa=vboz1_or_vboxx +txa +ora {z1} +//FRAGMENT vboaa=vboz1_or_vboyy +tya +ora {z1} +//FRAGMENT vboaa=vboxx_or_vboz1 +txa +ora {z1} +//FRAGMENT vboaa=vboxx_or_vboaa +stx $ff +ora $ff +//FRAGMENT vboaa=vboxx_or_vboxx +txa +stx $ff +ora $ff +//FRAGMENT vboaa=vboxx_or_vboyy +txa +sty $ff +ora $ff +//FRAGMENT vboaa=vboyy_or_vboz1 +tya +ora {z1} +//FRAGMENT vboaa=vboyy_or_vboaa +sty $ff +ora $ff +//FRAGMENT vboaa=vboyy_or_vboxx +txa +sty $ff +ora $ff +//FRAGMENT vboaa=vboyy_or_vboyy +tya +sty $ff +ora $ff +//FRAGMENT vboxx=vboz1_or_vboz2 +lda {z1} +ora {z2} +tax +//FRAGMENT vboxx=vboz1_or_vboaa +ora {z1} +tax +//FRAGMENT vboxx=vboz1_or_vboxx +txa +ora {z1} +tax +//FRAGMENT vboxx=vboz1_or_vboyy +tya +ora {z1} +tax +//FRAGMENT vboxx=vboxx_or_vboz1 +txa +ora {z1} +tax +//FRAGMENT vboxx=vboxx_or_vboaa +stx $ff +ora $ff +tax +//FRAGMENT vboxx=vboxx_or_vboxx +txa +stx $ff +ora $ff +tax +//FRAGMENT vboxx=vboxx_or_vboyy +txa +sty $ff +ora $ff +tax +//FRAGMENT vboxx=vboyy_or_vboz1 +tya +ora {z1} +tax +//FRAGMENT vboxx=vboyy_or_vboaa +sty $ff +ora $ff +tax +//FRAGMENT vboxx=vboyy_or_vboxx +txa +sty $ff +ora $ff +tax +//FRAGMENT vboxx=vboyy_or_vboyy +tya +sty $ff +ora $ff +tax +//FRAGMENT vboyy=vboz1_or_vboz2 +lda {z1} +ora {z2} +tay +//FRAGMENT vboyy=vboz1_or_vboaa +ora {z1} +tay +//FRAGMENT vboyy=vboz1_or_vboxx +txa +ora {z1} +tay +//FRAGMENT vboyy=vboz1_or_vboyy +tya +ora {z1} +tay +//FRAGMENT vboyy=vboxx_or_vboz1 +txa +ora {z1} +tay +//FRAGMENT vboyy=vboxx_or_vboaa +stx $ff +ora $ff +tay +//FRAGMENT vboyy=vboxx_or_vboxx +txa +stx $ff +ora $ff +tay +//FRAGMENT vboyy=vboxx_or_vboyy +txa +sty $ff +ora $ff +tay +//FRAGMENT vboyy=vboyy_or_vboz1 +tya +ora {z1} +tay +//FRAGMENT vboyy=vboyy_or_vboaa +sty $ff +ora $ff +tay +//FRAGMENT vboyy=vboyy_or_vboxx +txa +sty $ff +ora $ff +tay +//FRAGMENT vboyy=vboyy_or_vboyy +tya +sty $ff +ora $ff +tay +//FRAGMENT vboxx_then_la1 +cpx #0 +bne {la1} +//FRAGMENT vboyy=vboz1 +ldy {z1} +//FRAGMENT vboyy_then_la1 +cpy #0 +bne {la1} +//FRAGMENT vboyy=vboaa +tay +//FRAGMENT vboaa=vboyy +tya +//FRAGMENT vbuz1=vbuc1_rol_vbuz2 +lda #{c1} +ldy {z2} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +sta {z1} +//FRAGMENT vbuaa=vbuc1_rol_vbuz1 +lda #{c1} +ldy {z1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +//FRAGMENT vbuxx=vbuc1_rol_vbuz1 +lda #{c1} +ldx {z1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +tax +//FRAGMENT vbuyy=vbuc1_rol_vbuz1 +lda #{c1} +ldy {z1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +tay +//FRAGMENT vbuz1=vbuc1_rol_vbuaa +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +sta {z1} +//FRAGMENT vbuaa=vbuc1_rol_vbuaa +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +//FRAGMENT vbuxx=vbuc1_rol_vbuaa +tax +lda #{c1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +tax +//FRAGMENT vbuyy=vbuc1_rol_vbuaa +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +tay +//FRAGMENT vbuz1=vbuc1_rol_vbuxx +lda #{c1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +sta {z1} +//FRAGMENT vbuaa=vbuc1_rol_vbuxx +lda #{c1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +//FRAGMENT vbuxx=vbuc1_rol_vbuxx +lda #{c1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +tax +//FRAGMENT vbuyy=vbuc1_rol_vbuxx +lda #{c1} +cpx #0 +beq !e+ +!: +asl +dex +bne !- +!e: +tay +//FRAGMENT vbuz1=vbuc1_rol_vbuyy +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +sta {z1} +//FRAGMENT vbuaa=vbuc1_rol_vbuyy +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +//FRAGMENT vbuxx=vbuc1_rol_vbuyy +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +tax +//FRAGMENT vbuyy=vbuc1_rol_vbuyy +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +tay +//FRAGMENT pprz1=pprc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT _deref_pwsc1=vbsc2 +NO_SYNTHESIS +//FRAGMENT _deref_pwsc1=vwuc2 +NO_SYNTHESIS +//FRAGMENT _deref_pwsc1=vwsc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT vwsz1=vbsc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT pwsz1=pwsc1_plus_vwsz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=_deref_pwsz2 +ldy #0 +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT vdsz1=vdsz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +//FRAGMENT vwsz1=_sword_vdsz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwsz1_le_vwsz2_then_la1 +lda {z2} +cmp {z1} +lda {z2}+1 +sbc {z1}+1 +bvc !+ +eor #$80 +!: +bpl {la1} +//FRAGMENT _deref_pwsz1=vwsz2 +ldy #0 +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT vwsz1_lt_vwsc1_then_la1 +lda {z1} +cmp #<{c1} +lda {z1}+1 +sbc #>{c1} +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vwuz1=_hi_vduz2 +lda {z2}+2 +sta {z1} +lda {z2}+3 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_minus_vwuz3 +lda {z2} +sec +sbc {z3} +sta {z1} +lda {z2}+1 +sbc {z3}+1 +sta {z1}+1 +//FRAGMENT vduz1=vduz1_sethi_vwuz2 +lda {z2} +sta {z1}+2 +lda {z2}+1 +sta {z1}+3 +//FRAGMENT vwuz1_lt_vwuz2_then_la1 +lda {z1}+1 +cmp {z2}+1 +bcc {la1} +bne !+ +lda {z1} +cmp {z2} +bcc {la1} +!: +//FRAGMENT pwsz1=pwsc1_plus_vwsz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=_deref_pwsz1 +ldy #0 +lda ({z1}),y +pha +iny +lda ({z1}),y +sta {z1}+1 +pla +sta {z1} +//FRAGMENT pprz1=pprz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT pprz1=qprc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT pprz1=qprc1_derefidx_vbuaa +tay +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT pprz1=qprc1_derefidx_vbuxx +lda {c1},x +sta {z1} +lda {c1}+1,x +sta {z1}+1 +//FRAGMENT pprz1=qprc1_derefidx_vbuyy +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT pbuz1_lt_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bcc {la1} +bne !+ +lda {z1} +cmp #<{c1} +bcc {la1} +!: +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2 +ldy {z2} +lda {c2},y +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuaa +tay +lda {c2},y +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuxx +lda {c2},x +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuyy +lda {c2},y +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz3 +ldx {z1} +ldy {z3} +lda ({z2}),y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuaa +ldx {z1} +tay +lda ({z2}),y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuxx +txa +ldx {z1} +tay +lda ({z2}),y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuyy +lda ({z2}),y +ldx {z1} +sta {c1},x +//FRAGMENT pbuz1_derefidx_(pbsc1_derefidx_vbuz2)=vbuc2 +lda #{c2} +ldx {z2} +ldy {c1},x +sta ({z1}),y +//FRAGMENT pbsc1_derefidx_vbuz1=pbsc1_derefidx_vbuz1_plus_pbsc2_derefidx_vbuz1 +ldy {z1} +clc +lda {c1},y +adc {c2},y +sta {c1},y +//FRAGMENT pbsc1_derefidx_vbuz1_lt_0_then_la1 +ldy {z1} +lda {c1},y +cmp #0 +bmi {la1} +//FRAGMENT pbsc1_derefidx_vbuz1_lt_vbsc2_then_la1 +ldy {z1} +lda {c1},y +sec +sbc #{c2} +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vbsz1=_neg_pbsc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +eor #$ff +clc +adc #$01 +sta {z1} +//FRAGMENT pbsc1_derefidx_vbuz1=vbsz2 +lda {z2} +ldy {z1} +sta {c1},y +//FRAGMENT pbuz1_derefidx_(pbsc1_derefidx_vbuz2)=pbuc2_derefidx_vbuz2 +ldx {z2} +lda {c2},x +ldy {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_(pbsc1_derefidx_vbuaa)=vbuc2 +tax +lda #{c2} +ldy {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_(pbsc1_derefidx_vbuxx)=vbuc2 +lda #{c2} +ldy {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_(pbsc1_derefidx_vbuyy)=vbuc2 +tya +tax +lda #{c2} +ldy {c1},x +sta ({z1}),y +//FRAGMENT pbsc1_derefidx_vbuxx=pbsc1_derefidx_vbuxx_plus_pbsc2_derefidx_vbuxx +clc +lda {c1},x +adc {c2},x +sta {c1},x +//FRAGMENT pbsc1_derefidx_vbuxx_lt_0_then_la1 +lda {c1},x +cmp #0 +bmi {la1} +//FRAGMENT pbsc1_derefidx_vbuxx_lt_vbsc2_then_la1 +lda {c1},x +sec +sbc #{c2} +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vbsz1=_neg_pbsc1_derefidx_vbuxx +lda {c1},x +eor #$ff +clc +adc #$01 +sta {z1} +//FRAGMENT vbsaa=_neg_pbsc1_derefidx_vbuz1 +ldy {z1} +lda {c1},y +eor #$ff +clc +adc #$01 +//FRAGMENT vbsaa=_neg_pbsc1_derefidx_vbuxx +lda {c1},x +eor #$ff +clc +adc #$01 +//FRAGMENT vbsxx=_neg_pbsc1_derefidx_vbuz1 +ldx {z1} +lda {c1},x +eor #$ff +clc +adc #$01 +tax +//FRAGMENT vbsxx=_neg_pbsc1_derefidx_vbuxx +lda {c1},x +eor #$ff +clc +adc #$01 +tax +//FRAGMENT vbsyy=_neg_pbsc1_derefidx_vbuz1 +ldy {z1} +lda {c1},y +eor #$ff +clc +adc #$01 +tay +//FRAGMENT vbsyy=_neg_pbsc1_derefidx_vbuxx +lda {c1},x +eor #$ff +clc +adc #$01 +tay +//FRAGMENT pbsc1_derefidx_vbuxx=vbsz1 +lda {z1} +sta {c1},x +//FRAGMENT pbsc1_derefidx_vbuz1=vbsaa +ldy {z1} +sta {c1},y +//FRAGMENT pbuz1_derefidx_(pbsc1_derefidx_vbuxx)=pbuc2_derefidx_vbuxx +lda {c2},x +ldy {c1},x +sta ({z1}),y +//FRAGMENT pbsc1_derefidx_vbuz1=vbsxx +ldy {z1} +txa +sta {c1},y +//FRAGMENT pbsc1_derefidx_vbuz1=vbsyy +tya +ldy {z1} +sta {c1},y +//FRAGMENT pbsc1_derefidx_vbuaa=vbsz1 +tay +lda {z1} +sta {c1},y +//FRAGMENT pbsc1_derefidx_vbuaa=vbsxx +tay +txa +sta {c1},y +//FRAGMENT pbsc1_derefidx_vbuaa=vbsyy +tax +tya +sta {c1},x +//FRAGMENT pbsc1_derefidx_vbuxx=vbsxx +txa +sta {c1},x +//FRAGMENT pbsc1_derefidx_vbuxx=vbsyy +tya +sta {c1},x +//FRAGMENT pbsc1_derefidx_vbuyy=vbsz1 +lda {z1} +sta {c1},y +//FRAGMENT pbsc1_derefidx_vbuyy=vbsxx +txa +sta {c1},y +//FRAGMENT pbsc1_derefidx_vbuyy=vbsyy +tya +sta {c1},y +//FRAGMENT pbsc1_derefidx_vbuxx=vbsaa +sta {c1},x +//FRAGMENT vbsyy=vbsc1 +ldy #{c1} +//FRAGMENT vbuz1=vbuz2_plus_vbuz2 +lda {z2} +asl +sta {z1} +//FRAGMENT vbuz1=vbuz2_plus_1 +ldy {z2} +iny +sty {z1} +//FRAGMENT _deref_pbuz1=pbuz2_derefidx_vbuz3 +ldy {z3} +lda ({z2}),y +ldy #0 +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2_neq_0_then_la1 +ldy {z2} +lda ({z1}),y + +cmp #0 +bne {la1} +//FRAGMENT vwuz1=vbuz2_rol_3 +lda {z2} +sta {z1} +lda #0 +sta {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT vbuz1=vbuaa_plus_vbuaa +asl +sta {z1} +//FRAGMENT vbuaa=vbuz1_plus_vbuz1 +lda {z1} +asl +//FRAGMENT vbuaa=vbuaa_plus_vbuaa +asl +//FRAGMENT vbuxx=vbuz1_plus_vbuz1 +lda {z1} +asl +tax +//FRAGMENT vbuxx=vbuaa_plus_vbuaa +asl +tax +//FRAGMENT vbuyy=vbuz1_plus_vbuz1 +lda {z1} +asl +tay +//FRAGMENT vbuyy=vbuaa_plus_vbuaa +asl +tay +//FRAGMENT vbuaa=vbuz1_plus_1 +lda {z1} +clc +adc #1 +//FRAGMENT vbuz1=vbuaa_plus_1 +clc +adc #1 +sta {z1} +//FRAGMENT vbuxx_eq_vbuz1_then_la1 +cpx {z1} +beq {la1} +//FRAGMENT _deref_pbuz1=pbuz2_derefidx_vbuxx +txa +tay +lda ({z2}),y +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=pbuz2_derefidx_vbuyy +lda ({z2}),y +ldy #0 +sta ({z1}),y +//FRAGMENT vbuz1=vbuxx_plus_1 +inx +stx {z1} +//FRAGMENT pbuz1_derefidx_vbuxx_neq_0_then_la1 +txa +tay +lda ({z1}),y + +cmp #0 +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuyy_neq_0_then_la1 +lda ({z1}),y + +cmp #0 +bne {la1} +//FRAGMENT vbuxx=vbuz1_plus_1 +ldx {z1} +inx +//FRAGMENT vwuz1=vbuaa_rol_3 +sta {z1} +lda #0 +sta {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT vwuz1=vbuxx_rol_3 +txa +sta {z1} +lda #0 +sta {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT vwuz1=vbuyy_rol_3 +tya +sta {z1} +lda #0 +sta {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT vbuz1_lt_vbuxx_then_la1 +cpx {z1} +beq !+ +bcs {la1} +!: +//FRAGMENT vwuz1=vwuz2_plus_vbuaa +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vbuyy=vbuz1_plus_1 +ldy {z1} +iny +//FRAGMENT vbuyy_lt_vbuz1_then_la1 +cpy {z1} +bcc {la1} +//FRAGMENT vbuz1=vbuyy_plus_1 +iny +sty {z1} +//FRAGMENT vbuxx_lt_vbuaa_then_la1 +sta $ff +cpx $ff +bcc {la1} +//FRAGMENT vbuz1=vbuz1_plus_1 +inc {z1} +//FRAGMENT vbuz1=_lo__deref_pwuc1 +lda {c1} +sta {z1} +//FRAGMENT vbuz1=_hi__deref_pwuc1 +lda {c1}+1 +sta {z1} +//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 vbuyy=_lo__deref_pwuc1 +ldy {c1} +//FRAGMENT vbuyy=_hi__deref_pwuc1 +ldy {c1}+1 +//FRAGMENT vwsz1=vbsc1_minus_vwsz2 +NO_SYNTHESIS +//FRAGMENT vwsz1=vwuc1_minus_vwsz2 +sec +lda #<{c1} +sbc {z2} +sta {z1} +lda #>{c1} +sbc {z2}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_minus_1 +sec +lda {z1} +sbc #1 +sta {z1} +bcs !+ +dec {z1}+1 +!: +//FRAGMENT vwsz1=vwsz2_minus_vwsz3 +lda {z2} +sec +sbc {z3} +sta {z1} +lda {z2}+1 +sbc {z3}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz2_rol_2 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT vwsz1=vwsz2_plus_vwsz3 +lda {z2} +clc +adc {z3} +sta {z1} +lda {z2}+1 +adc {z3}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz2_plus_vbsc1 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=vwsc1_plus_vwsz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=vwsc1_minus_vwsz2 +lda #<{c1} +sec +sbc {z2} +sta {z1} +lda #>{c1} +sbc {z2}+1 +sta {z1}+1 +//FRAGMENT vwsz1_gt_vwsc1_then_la1 +lda #<{c1} +cmp {z1} +lda #>{c1} +sbc {z1}+1 +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vwsz1_ge_vwsc1_then_la1 +lda {z1} +cmp #<{c1} +lda {z1}+1 +sbc #>{c1} +bvc !+ +eor #$80 +!: +bpl {la1} +//FRAGMENT vwsz1=vwsz2_band_vdsc1 +lda {z2} +and #<{c1} +sta {z1} +lda {z2}+1 +and #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vwsz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=_lo_vwsz2 +lda {z2} +sta {z1} +//FRAGMENT vwsz1=vwsz2_ror_3 +lda {z2}+1 +cmp #$80 +ror +sta {z1}+1 +lda {z2} +ror +sta {z1} +lda {z1}+1 +cmp #$80 +ror {z1}+1 +ror {z1} +lda {z1}+1 +cmp #$80 +ror {z1}+1 +ror {z1} +//FRAGMENT vwsz1=vwsz2_rol_6 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT vbsz1=vwsz2_band_vbsc1 +lda #{c1} +and {z2} +sta {z1} +//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbsz3 +ldy #0 +lda ({z2}),y +ldy {z3} +ora {c1},y +sta {z1} +//FRAGMENT vbuaa=_lo_vwsz1 +lda {z1} +//FRAGMENT vbuxx=_lo_vwsz1 +ldx {z1} +//FRAGMENT pbuz1=pbuz2_plus_vbuaa +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vbsaa=vwsz1_band_vbsc1 +lda #{c1} +and {z1} +//FRAGMENT vbsxx=vwsz1_band_vbsc1 +lda #{c1} +and {z1} +tax +//FRAGMENT vbsyy=vwsz1_band_vbsc1 +lda #{c1} +and {z1} +tay +//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbsaa +tay +lda {c1},y +ldy #0 +ora ({z2}),y +sta {z1} +//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbsxx +lda {c1},x +ldy #0 +ora ({z2}),y +sta {z1} +//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbsyy +lda {c1},y +ldy #0 +ora ({z2}),y +sta {z1} +//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbsz2 +ldy #0 +lda ({z1}),y +ldy {z2} +ora {c1},y +//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbsaa +tay +lda {c1},y +ldy #0 +ora ({z1}),y +//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbsxx +lda {c1},x +ldy #0 +ora ({z1}),y +//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbsyy +lda {c1},y +ldy #0 +ora ({z1}),y +//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbsz2 +ldx {z2} +lda {c1},x +ldy #0 +ora ({z1}),y +tax +//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbsaa +tax +lda {c1},x +ldy #0 +ora ({z1}),y +tax +//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbsxx +lda {c1},x +ldy #0 +ora ({z1}),y +tax +//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbsyy +lda {c1},y +ldy #0 +ora ({z1}),y +tax +//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbsz2 +ldy #0 +lda ({z1}),y +ldy {z2} +ora {c1},y +tay +//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbsaa +tay +lda {c1},y +ldy #0 +ora ({z1}),y +tay +//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbsxx +lda {c1},x +ldy #0 +ora ({z1}),y +tay +//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbsyy +lda {c1},y +ldy #0 +ora ({z1}),y +tay +//FRAGMENT vbuyy=_lo_vwsz1 +ldy {z1} +//FRAGMENT pbuz1=pbuz2_plus_vwsz1 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vbsc1_minus_vwsz1 +NO_SYNTHESIS +//FRAGMENT vwsz1=vwuc1_minus_vwsz1 +sec +lda #<{c1} +sbc {z1} +sta {z1} +lda #>{c1} +sbc {z1}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_ror_3 +lda {z1}+1 +cmp #$80 +ror {z1}+1 +ror {z1} +lda {z1}+1 +cmp #$80 +ror {z1}+1 +ror {z1} +lda {z1}+1 +cmp #$80 +ror {z1}+1 +ror {z1} +//FRAGMENT vwsz1=vwsz1_rol_2 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vwsz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1=pbuz1_plus_vwsz2 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_rol_6 +lda {z1}+1 +sta $ff +lda {z1} +sta {z1}+1 +lda #0 +sta {z1} +lsr $ff +ror {z1}+1 +ror {z1} +lsr $ff +ror {z1}+1 +ror {z1} +//FRAGMENT _deref_pwuc1=vwuc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT 0_eq_vwuz1_then_la1 +lda {z1} +ora {z1}+1 +beq {la1} +//FRAGMENT vwuz1=_dec_vwuz1 +lda {z1} +bne !+ +dec {z1}+1 +!: +dec {z1} +//FRAGMENT _deref_pwuc1=_deref_pwuc2 +lda {c2} +sta {c1} +lda {c2}+1 +sta {c1}+1 +//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1 +ldx {z1} +tay +lda {c2},x +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuxx +tay +lda {c2},x +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuyy +tax +lda {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuaa +tay +lda {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy +lda {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1 +ldx {z1} +lda {c2},x +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuaa +tax +lda {c2},x +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx +lda {c2},x +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuz2 +ldy {z2} +lda ({z1}),y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuxx +txa +tay +lda ({z1}),y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuyy +lda ({z1}),y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz2 +tya +ldy {z2} +tax +lda ({z1}),y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuxx +sty $ff +txa +tay +lda ({z1}),y +ldy $ff +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuyy +lda ({z1}),y +sta {c1},y +//FRAGMENT _deref_pbuc1=_deref_qbuc2_memcpy_vbuc3 +ldy #{c3} +!: +lda {c2}-1,y +sta {c1}-1,y +dey +bne !- +//FRAGMENT _deref_pssc1=_memset_vbuc2 +ldy #{c2} +lda #0 +!: +dey +sta {c1},y +bne !- +//FRAGMENT _deref_pssc1=_deref_pssc2_memcpy_vbuc3 +ldy #{c3} +!: +lda {c2}-1,y +sta {c1}-1,y +dey +bne !- +//FRAGMENT vwsz1=pwsc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT vbuz1=vbuaa_rol_3 +asl +asl +asl +sta {z1} +//FRAGMENT vbuz1=vbuyy_rol_3 +tya +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuaa_rol_3 +asl +asl +asl +//FRAGMENT vbuaa=vbuyy_rol_3 +tya +asl +asl +asl +//FRAGMENT vbuxx=vbuaa_rol_3 +asl +asl +asl +tax +//FRAGMENT vbuxx=vbuyy_rol_3 +tya +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuaa_rol_3 +asl +asl +asl +tay +//FRAGMENT vbuyy=vbuyy_rol_3 +tya +asl +asl +asl +tay +//FRAGMENT vwsz1=pwsc1_derefidx_vbuaa +tay +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT vwsz1=pwsc1_derefidx_vbuxx +lda {c1},x +sta {z1} +lda {c1}+1,x +sta {z1}+1 +//FRAGMENT vwsz1=pwsc1_derefidx_vbuyy +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT _deref_pssc1=pssc2_derefidx_vbuz1_memcpy_vbuc3 +ldx {z1} +ldy #0 +!: +lda {c2},x +sta {c1},y +inx +iny +cpy #{c3} +bne !- +//FRAGMENT pwsc1_derefidx_vbuz1=_deref_pwsc2 +ldy {z1} +lda {c2} +sta {c1},y +lda {c2}+1 +sta {c1}+1,y +//FRAGMENT _deref_pssc1=pssc2_derefidx_vbuaa_memcpy_vbuc3 +tax +ldy #0 +!: +lda {c2},x +sta {c1},y +inx +iny +cpy #{c3} +bne !- +//FRAGMENT _deref_pssc1=pssc2_derefidx_vbuxx_memcpy_vbuc3 +ldy #0 +!: +lda {c2},x +sta {c1},y +inx +iny +cpy #{c3} +bne !- +//FRAGMENT _deref_pssc1=pssc2_derefidx_vbuyy_memcpy_vbuc3 +ldx #0 +!: +lda {c2},y +sta {c1},x +iny +inx +cpx #{c3} +bne !- +//FRAGMENT pwsc1_derefidx_vbuaa=_deref_pwsc2 +tay +lda {c2} +sta {c1},y +lda {c2}+1 +sta {c1}+1,y +//FRAGMENT pwsc1_derefidx_vbuxx=_deref_pwsc2 +lda {c2} +sta {c1},x +lda {c2}+1 +sta {c1}+1,x +//FRAGMENT pwsc1_derefidx_vbuyy=_deref_pwsc2 +lda {c2} +sta {c1},y +lda {c2}+1 +sta {c1}+1,y +//FRAGMENT _deref_pbuc1=_byte_pprz1 +lda {z1} +sta {c1} +//FRAGMENT vwuz1=_deref_pwuc1_minus_vwuc2 +sec +lda {c1} +sbc #<{c2} +sta {z1} +lda {c1}+1 +sbc #>{c2} +sta {z1}+1 +//FRAGMENT _deref_pwuc1=vwuz1 +lda {z1} +sta {c1} +lda {z1}+1 +sta {c1}+1 +//FRAGMENT pbuz1=_deref_qbuc1_plus_vwuc2 +clc +lda {c1} +adc #<{c2} +sta {z1} +lda {c1}+1 +adc #>{c2} +sta {z1}+1 +//FRAGMENT vbuz1=vbuz2_minus__deref_pbuz3 +lda {z2} +sec +ldy #0 +sbc ({z3}),y +sta {z1} +//FRAGMENT vbsz1_neq_vbsc1_then_la1 +lda #{c1} +cmp {z1} +bne {la1} +//FRAGMENT vbuz1=pbuz2_derefidx_vbuz3_rol_4 +ldy {z3} +lda ({z2}),y +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuz1=pbuz2_derefidx_vbuz3_rol_1 +ldy {z3} +lda ({z2}),y +asl +sta {z1} +//FRAGMENT vwuz1=vwuz1_plus_vbuaa +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT vbuz1=vbuxx_minus__deref_pbuz2 +txa +sec +ldy #0 +sbc ({z2}),y +sta {z1} +//FRAGMENT vbuaa=vbuz1_minus__deref_pbuz2 +lda {z1} +sec +ldy #0 +sbc ({z2}),y +//FRAGMENT vbuaa=vbuxx_minus__deref_pbuz1 +txa +sec +ldy #0 +sbc ({z1}),y +//FRAGMENT vbuxx=vbuz1_minus__deref_pbuz2 +lda {z1} +sec +ldy #0 +sbc ({z2}),y +tax +//FRAGMENT vbuxx=vbuxx_minus__deref_pbuz1 +txa +sec +ldy #0 +sbc ({z1}),y +tax +//FRAGMENT vbuyy=vbuz1_minus__deref_pbuz2 +lda {z1} +sec +ldy #0 +sbc ({z2}),y +tay +//FRAGMENT vbuyy=vbuxx_minus__deref_pbuz1 +txa +sec +ldy #0 +sbc ({z1}),y +tay +//FRAGMENT vbsxx_neq_vbsc1_then_la1 +cpx #{c1} +bne {la1} +//FRAGMENT vbuaa=pbuz1_derefidx_vbuz2_rol_4 +ldy {z2} +lda ({z1}),y +asl +asl +asl +asl +//FRAGMENT vbuxx=pbuz1_derefidx_vbuz2_rol_4 +ldy {z2} +lda ({z1}),y +asl +asl +asl +asl +tax +//FRAGMENT vbuyy=pbuz1_derefidx_vbuz2_rol_4 +ldy {z2} +lda ({z1}),y +asl +asl +asl +asl +tay +//FRAGMENT vbuz1=pbuz2_derefidx_vbuaa_rol_4 +tay +lda ({z2}),y +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=pbuz1_derefidx_vbuaa_rol_4 +tay +lda ({z1}),y +asl +asl +asl +asl +//FRAGMENT vbuxx=pbuz1_derefidx_vbuaa_rol_4 +tay +lda ({z1}),y +asl +asl +asl +asl +tax +//FRAGMENT vbuyy=pbuz1_derefidx_vbuaa_rol_4 +tay +lda ({z1}),y +asl +asl +asl +asl +tay +//FRAGMENT vbuz1=pbuz2_derefidx_vbuxx_rol_4 +txa +tay +lda ({z2}),y +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=pbuz1_derefidx_vbuxx_rol_4 +txa +tay +lda ({z1}),y +asl +asl +asl +asl +//FRAGMENT vbuxx=pbuz1_derefidx_vbuxx_rol_4 +txa +tay +lda ({z1}),y +asl +asl +asl +asl +tax +//FRAGMENT vbuyy=pbuz1_derefidx_vbuxx_rol_4 +txa +tay +lda ({z1}),y +asl +asl +asl +asl +tay +//FRAGMENT vbuz1=pbuz2_derefidx_vbuyy_rol_4 +lda ({z2}),y +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=pbuz1_derefidx_vbuyy_rol_4 +lda ({z1}),y +asl +asl +asl +asl +//FRAGMENT vbuxx=pbuz1_derefidx_vbuyy_rol_4 +lda ({z1}),y +asl +asl +asl +asl +tax +//FRAGMENT vbuyy=pbuz1_derefidx_vbuyy_rol_4 +lda ({z1}),y +asl +asl +asl +asl +tay +//FRAGMENT vbuaa=pbuz1_derefidx_vbuz2_rol_1 +ldy {z2} +lda ({z1}),y +asl +//FRAGMENT vbuxx=pbuz1_derefidx_vbuz2_rol_1 +ldy {z2} +lda ({z1}),y +asl +tax +//FRAGMENT vbuyy=pbuz1_derefidx_vbuz2_rol_1 +ldy {z2} +lda ({z1}),y +asl +tay +//FRAGMENT vbuz1=pbuz2_derefidx_vbuxx_rol_1 +txa +tay +lda ({z2}),y +asl +sta {z1} +//FRAGMENT vbuaa=pbuz1_derefidx_vbuxx_rol_1 +txa +tay +lda ({z1}),y +asl +//FRAGMENT vbuxx=pbuz1_derefidx_vbuxx_rol_1 +txa +tay +lda ({z1}),y +asl +tax +//FRAGMENT vbuyy=pbuz1_derefidx_vbuxx_rol_1 +txa +tay +lda ({z1}),y +asl +tay +//FRAGMENT vbuz1=pbuz2_derefidx_vbuyy_rol_1 +lda ({z2}),y +asl +sta {z1} +//FRAGMENT vbuaa=pbuz1_derefidx_vbuyy_rol_1 +lda ({z1}),y +asl +//FRAGMENT vbuxx=pbuz1_derefidx_vbuyy_rol_1 +lda ({z1}),y +asl +tax +//FRAGMENT vbuyy=pbuz1_derefidx_vbuyy_rol_1 +lda ({z1}),y +asl +tay +//FRAGMENT pbuz1_derefidx_vbuyy=vbuz2 +lda {z2} +sta ({z1}),y +//FRAGMENT vbuz1_lt_vbuaa_then_la1 +cmp {z1} +beq !+ +bcs {la1} +!: +//FRAGMENT vbuz1_lt_vbuyy_then_la1 +cpy {z1} +beq !+ +bcs {la1} +!: +//FRAGMENT vbuxx_lt_vbuyy_then_la1 +sty $ff +cpx $ff +bcc {la1} +//FRAGMENT pbuz1_derefidx_vbuyy=vbuaa +sta ({z1}),y +//FRAGMENT vbuz1_eq_vbuxx_then_la1 +cpx {z1} +beq {la1} +//FRAGMENT vbuxx_eq_vbuaa_then_la1 +tay +sty $ff +cpx $ff +beq {la1} +//FRAGMENT vbuxx_eq_vbuyy_then_la1 +sty $ff +cpx $ff +beq {la1} +//FRAGMENT vbuyy_eq_vbuxx_then_la1 +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuz3 +ldy {z3} +lda {c1},y +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuz2 +txa +ldx {z2} +tay +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuz2 +ldx {z2} +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuxx +lda {c1},x +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuxx +txa +tay +lda {c1},y +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuyy +lda {c1},y +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuyy +lda {c1},y +stx $ff +ldy $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuyy +lda {c1},y +sta ({z1}),y +//FRAGMENT vwsz1=_sword_vbuz2 +lda {z2} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vboz1=vbuz2_lt_vbuc1 +lda {z2} +cmp #{c1} +lda #0 +rol +eor #1 +sta {z1} +//FRAGMENT vboaa=vbuz1_lt_vbuc1 +lda {z1} +cmp #{c1} +lda #0 +rol +eor #1 +//FRAGMENT vboxx=vbuz1_lt_vbuc1 +lda {z1} +cmp #{c1} +lda #0 +rol +eor #1 +tax +//FRAGMENT vboyy=vbuz1_lt_vbuc1 +lda {z1} +cmp #{c1} +lda #0 +rol +eor #1 +tay +//FRAGMENT vboz1=vbuaa_lt_vbuc1 +cmp #{c1} +lda #0 +rol +eor #1 +sta {z1} +//FRAGMENT vboaa=vbuaa_lt_vbuc1 +cmp #{c1} +lda #0 +rol +eor #1 +//FRAGMENT vboxx=vbuaa_lt_vbuc1 +cmp #{c1} +lda #0 +rol +eor #1 +tax +//FRAGMENT vboyy=vbuaa_lt_vbuc1 +cmp #{c1} +lda #0 +rol +eor #1 +tay +//FRAGMENT vboz1=vbuxx_lt_vbuc1 +cpx #{c1} +lda #0 +rol +eor #1 +sta {z1} +//FRAGMENT vboaa=vbuxx_lt_vbuc1 +cpx #{c1} +lda #0 +rol +eor #1 +//FRAGMENT vboxx=vbuxx_lt_vbuc1 +cpx #{c1} +lda #0 +rol +eor #1 +tax +//FRAGMENT vboyy=vbuxx_lt_vbuc1 +cpx #{c1} +lda #0 +rol +eor #1 +tay +//FRAGMENT vboz1=vbuyy_lt_vbuc1 +cpy #{c1} +lda #0 +rol +eor #1 +sta {z1} +//FRAGMENT vboaa=vbuyy_lt_vbuc1 +cpy #{c1} +lda #0 +rol +eor #1 +//FRAGMENT vboxx=vbuyy_lt_vbuc1 +cpy #{c1} +lda #0 +rol +eor #1 +tax +//FRAGMENT vboyy=vbuyy_lt_vbuc1 +cpy #{c1} +lda #0 +rol +eor #1 +tay +//FRAGMENT vbuaa=vbuc1_plus_vbuyy +tya +clc +adc #{c1} +//FRAGMENT vbuxx=vbuc1_plus_vbuyy +tya +tax +axs #-[{c1}] +//FRAGMENT vbuyy=vbuc1_plus_vbuaa +clc +adc #{c1} +tay +//FRAGMENT vbuyy=vbuc1_plus_vbuyy +tya +clc +adc #{c1} +tay +//FRAGMENT vbuz1=vbuaa_rol_4 +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuz1=vbuyy_rol_4 +tya +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuaa_rol_4 +asl +asl +asl +asl +//FRAGMENT vbuaa=vbuyy_rol_4 +tya +asl +asl +asl +asl +//FRAGMENT vbuxx=vbuaa_rol_4 +asl +asl +asl +asl +tax +//FRAGMENT vbuxx=vbuyy_rol_4 +tya +asl +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuaa_rol_4 +asl +asl +asl +asl +tay +//FRAGMENT vbuyy=vbuyy_rol_4 +tya +asl +asl +asl +asl +tay +//FRAGMENT vbuz1=vbuaa_bor_vbuz2 +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuaa_bor_vbuxx +stx $ff +ora $ff +sta {z1} +//FRAGMENT vbuz1=vbuaa_bor_vbuyy +sty $ff +ora $ff +sta {z1} +//FRAGMENT vbuaa=vbuaa_bor_vbuz1 +ora {z1} +//FRAGMENT vbuaa=vbuaa_bor_vbuxx +stx $ff +ora $ff +//FRAGMENT vbuaa=vbuaa_bor_vbuyy +sty $ff +ora $ff +//FRAGMENT vbuxx=vbuaa_bor_vbuz1 +ora {z1} +tax +//FRAGMENT vbuxx=vbuaa_bor_vbuxx +stx $ff +ora $ff +tax +//FRAGMENT vbuxx=vbuaa_bor_vbuyy +sty $ff +ora $ff +tax +//FRAGMENT vbuyy=vbuaa_bor_vbuz1 +ora {z1} +tay +//FRAGMENT vbuyy=vbuaa_bor_vbuxx +stx $ff +ora $ff +tay +//FRAGMENT vbuyy=vbuaa_bor_vbuyy +sty $ff +ora $ff +tay +//FRAGMENT pbuz1_derefidx_vbuyy=vbuxx +txa +sta ({z1}),y +//FRAGMENT vboz1=vboyy +tya +sta {z1} +//FRAGMENT vbuz1=_byte_pwuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_1 +ldx {z1} +inc {c1},x +bne !+ +inc {c1}+1,x +!: +//FRAGMENT pwuc1_derefidx_vbuz1_lt_vbuc2_then_la1 +ldy {z1} +lda {c1}+1,y +bne !+ +lda {c1},y +cmp #{c2} +bcc {la1} +!: +//FRAGMENT pwuc1_derefidx_vbuz1=vbuc2 +lda #{c2} +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pbuz1=pbuz2_plus_pwuc1_derefidx_vbuz3 +ldy {z3} +clc +lda {z2} +adc {c1},y +sta {z1} +lda {z2}+1 +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vbuaa=_byte_pwuc1_derefidx_vbuz1 +ldy {z1} +lda {c1},y +//FRAGMENT vbuxx=_byte_pwuc1_derefidx_vbuz1 +ldx {z1} +lda {c1},x +tax +//FRAGMENT vbuyy=_byte_pwuc1_derefidx_vbuz1 +ldy {z1} +lda {c1},y +tay +//FRAGMENT vbuz1=_byte_pwuc1_derefidx_vbuaa +tay +lda {c1},y +sta {z1} +//FRAGMENT vbuaa=_byte_pwuc1_derefidx_vbuaa +tay +lda {c1},y +//FRAGMENT vbuxx=_byte_pwuc1_derefidx_vbuaa +tax +lda {c1},x +tax +//FRAGMENT vbuyy=_byte_pwuc1_derefidx_vbuaa +tay +lda {c1},y +tay +//FRAGMENT vbuz1=_byte_pwuc1_derefidx_vbuxx +lda {c1},x +sta {z1} +//FRAGMENT vbuaa=_byte_pwuc1_derefidx_vbuxx +lda {c1},x +//FRAGMENT vbuxx=_byte_pwuc1_derefidx_vbuxx +lda {c1},x +tax +//FRAGMENT vbuyy=_byte_pwuc1_derefidx_vbuxx +lda {c1},x +tay +//FRAGMENT vbuz1=_byte_pwuc1_derefidx_vbuyy +lda {c1},y +sta {z1} +//FRAGMENT vbuaa=_byte_pwuc1_derefidx_vbuyy +lda {c1},y +//FRAGMENT vbuxx=_byte_pwuc1_derefidx_vbuyy +lda {c1},y +tax +//FRAGMENT vbuyy=_byte_pwuc1_derefidx_vbuyy +lda {c1},y +tay +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_1 +inc {c1},x +bne !+ +inc {c1}+1,x +!: +//FRAGMENT pwuc1_derefidx_vbuxx_lt_vbuc2_then_la1 +lda {c1}+1,x +bne !+ +lda {c1},x +cmp #{c2} +bcc {la1} +!: +//FRAGMENT pwuc1_derefidx_vbuyy_lt_vbuc2_then_la1 +lda {c1}+1,y +bne !+ +lda {c1},y +cmp #{c2} +bcc {la1} +!: +//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 pbuz1=pbuz2_plus_pwuc1_derefidx_vbuxx +clc +lda {z2} +adc {c1},x +sta {z1} +lda {z2}+1 +adc {c1}+1,x +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_plus_pwuc1_derefidx_vbuyy +clc +lda {z2} +adc {c1},y +sta {z1} +lda {z2}+1 +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_1 +tya +tax +inc {c1},x +bne !+ +inc {c1}+1,x +!: +//FRAGMENT vbuz1=vbuc1_bor_vbuz2 +lda #{c1} +ora {z2} +sta {z1} +//FRAGMENT pbuz1_neq_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT vbuz1=vbuc1_bor_vbuaa +ora #{c1} +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_vbuaa +ora #{c1} +//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_vbuaa +ora #{c1} +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_vbuaa +ora #{c1} +tay +//FRAGMENT vbuyy=vbuc1_bor_vbuxx +txa +ora #{c1} +tay +//FRAGMENT vbuyy=vbuc1_bor_vbuyy +tya +ora #{c1} +tay +//FRAGMENT vwuz1_gt_vbuc1_then_la1 +lda {z1}+1 +bne {la1} +lda #{c1} +cmp {z1} +bcc {la1} +//FRAGMENT vbuz1=vbuaa_bxor_vbuc1 +eor #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuaa_bxor_vbuc1 +eor #{c1} +//FRAGMENT vbuxx=vbuaa_bxor_vbuc1 +eor #{c1} +tax +//FRAGMENT vbuyy=vbuaa_bxor_vbuc1 +eor #{c1} +tay +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuaa +ora {c1} +sta {c1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuxx +txa +ora {c1} +sta {c1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuyy +tya +ora {c1} +sta {c1} +//FRAGMENT vduz1=vduz2_minus_vduc1 +lda {z2} +sec +sbc #<{c1} +sta {z1} +lda {z2}+1 +sbc #>{c1} +sta {z1}+1 +lda {z2}+2 +sbc #<{c1}>>$10 +sta {z1}+2 +lda {z2}+3 +sbc #>{c1}>>$10 +sta {z1}+3 +//FRAGMENT _deref_pduc1=vduc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +lda #<{c2}>>$10 +sta {c1}+2 +lda #>{c2}>>$10 +sta {c1}+3 +//FRAGMENT vduz1=vduc1_minus__deref_pduc2 +lda #<{c1} +sec +sbc {c2} +sta {z1} +lda #>{c1} +sbc {c2}+1 +sta {z1}+1 +lda #<{c1}>>$10 +sbc {c2}+2 +sta {z1}+2 +lda #>{c1}>>$10 +sbc {c2}+3 +sta {z1}+3 +//FRAGMENT pwuz1=pwuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT _deref_pwuz1=vwuz2 +ldy #0 +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT pwuz1=pwuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT pwuz1=pwuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=pwuz2_minus_pwuc1 +lda {z2} +sec +sbc #<{c1} +sta {z1} +lda {z2}+1 +sbc #>{c1} +sta {z1}+1 +//FRAGMENT _deref_pwuz1_le_vwuz2_then_la1 +ldy #1 +lda ({z1}),y +cmp {z2}+1 +bne !+ +dey +lda ({z1}),y +cmp {z2} +beq {la1} +!: +bcc {la1} +//FRAGMENT pwuz1=pwuz1_minus_vbuc1 +sec +lda {z1} +sbc #{c1} +sta {z1} +lda {z1}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT vbuz1=vbuz2_ror_1 +lda {z2} +lsr +sta {z1} +//FRAGMENT pwuz1=pwuz2_plus_vbuz3 +lda {z3} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz2_minus__deref_pwsz3 +sec +lda {z2} +ldy #0 +sbc ({z3}),y +sta {z1} +lda {z2}+1 +iny +sbc ({z3}),y +sta {z1}+1 +//FRAGMENT vwsz1_le_0_then_la1 +lda {z1}+1 +bmi {la1} +bne !+ +lda {z1} +beq {la1} +!: +//FRAGMENT pwuz1=pwuz2_plus_vbuc1 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_plus_1 +clc +lda {z2} +adc #1 +sta {z1} +lda {z2}+1 +adc #0 +sta {z1}+1 +//FRAGMENT vbuaa=vbuz1_ror_1 +lda {z1} +lsr +//FRAGMENT vbuxx=vbuz1_ror_1 +lda {z1} +lsr +tax +//FRAGMENT vbuyy=vbuz1_ror_1 +lda {z1} +lsr +tay +//FRAGMENT vbuz1=vbuaa_ror_1 +lsr +sta {z1} +//FRAGMENT vbuaa=vbuaa_ror_1 +lsr +//FRAGMENT vbuxx=vbuaa_ror_1 +lsr +tax +//FRAGMENT vbuyy=vbuaa_ror_1 +lsr +tay +//FRAGMENT vbuz1=vbuxx_ror_1 +txa +lsr +sta {z1} +//FRAGMENT vbuaa=vbuxx_ror_1 +txa +lsr +//FRAGMENT vbuyy=vbuxx_ror_1 +txa +lsr +tay +//FRAGMENT vbuz1=vbuyy_ror_1 +tya +lsr +sta {z1} +//FRAGMENT vbuaa=vbuyy_ror_1 +tya +lsr +//FRAGMENT vbuxx=vbuyy_ror_1 +tya +lsr +tax +//FRAGMENT pwuz1=pwuz2_plus_vbuaa +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pwuz1=pwuz2_plus_vbuxx +txa +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pwuz1=pwuz2_plus_vbuyy +tya +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vbuaa=vbuaa_plus_1 +clc +adc #1 +//FRAGMENT vbuaa=vbuxx_plus_1 +inx +txa +//FRAGMENT vbuaa=vbuyy_plus_1 +iny +tya +//FRAGMENT vbuxx=vbuaa_plus_1 +tax +inx +//FRAGMENT vbuxx=vbuxx_plus_1 +inx +//FRAGMENT vbuxx=vbuyy_plus_1 +tya +tax +inx +//FRAGMENT vbuyy=vbuaa_plus_1 +tay +iny +//FRAGMENT vbuyy=vbuxx_plus_1 +txa +tay +iny +//FRAGMENT vbuyy=vbuyy_plus_1 +iny +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx +lda {c1},x +tax +//FRAGMENT vwuz1=pwuz1_minus_pwuc1 +lda {z1} +sec +sbc #<{c1} +sta {z1} +lda {z1}+1 +sbc #>{c1} +sta {z1}+1 +//FRAGMENT vduz1=vduz1_minus_vduc1 +lda {z1} +sec +sbc #<{c1} +sta {z1} +lda {z1}+1 +sbc #>{c1} +sta {z1}+1 +lda {z1}+2 +sbc #<{c1}>>$10 +sta {z1}+2 +lda {z1}+3 +sbc #>{c1}>>$10 +sta {z1}+3 +//FRAGMENT pbuz1=_dec_pbuz1 +lda {z1} +bne !+ +dec {z1}+1 +!: +dec {z1} +//FRAGMENT vbuz1=_stackidxbyte_vbuc1 +tsx +lda STACK_BASE+{c1},x +sta {z1} +//FRAGMENT _stackidxbyte_vbuc1=vbuz1 +lda {z1} +tsx +sta STACK_BASE+{c1},x +//FRAGMENT _stackpushbyte_=vbuz1 +lda {z1} +pha +//FRAGMENT _stackpushbyte_1 +pha +//FRAGMENT vbuz1=_stackpullbyte_ +pla +sta {z1} +//FRAGMENT _stackpullbyte_2 +pla +pla +//FRAGMENT vbuaa=_stackidxbyte_vbuc1 +tsx +lda STACK_BASE+{c1},x +//FRAGMENT vbuxx=_stackidxbyte_vbuc1 +tsx +lda STACK_BASE+{c1},x +tax +//FRAGMENT vbuyy=_stackidxbyte_vbuc1 +tsx +lda STACK_BASE+{c1},x +tay +//FRAGMENT _stackidxbyte_vbuc1=vbuxx +txa +tsx +sta STACK_BASE+{c1},x +//FRAGMENT _stackidxbyte_vbuc1=vbuyy +tya +tsx +sta STACK_BASE+{c1},x +//FRAGMENT vbuaa=_stackpullbyte_ +pla +//FRAGMENT vbuxx=_stackpullbyte_ +pla +tax +//FRAGMENT vbuyy=_stackpullbyte_ +pla +tay +//FRAGMENT _stackpushbyte_=vbuxx +txa +pha +//FRAGMENT _stackpushbyte_=vbuyy +tya +pha +//FRAGMENT _stackpushbyte_3 +pha +pha +pha +//FRAGMENT _stackpullbyte_4 +tsx +txa +axs #-4 +txs +//FRAGMENT pbuz1=_stackidxptr_vbuc1 +tsx +lda STACK_BASE+{c1},x +sta {z1} +lda STACK_BASE+{c1}+1,x +sta {z1}+1 +//FRAGMENT pbuc1_derefidx_vbuz1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +ldy {z1} +sta {c1},y +//FRAGMENT _stackpushptr_=pbuc1 +lda #>{c1} +pha +lda #<{c1} +pha +//FRAGMENT _stackpushbyte_=vbuc1 +lda #{c1} +pha +//FRAGMENT _stackpullbyte_3 +tsx +txa +axs #-3 +txs +//FRAGMENT _stackpushbyte_=vbuaa +pha +//FRAGMENT _stackidxbyte_vbuc1=vbuaa +tsx +sta STACK_BASE+{c1},x +//FRAGMENT vbuz1=vbuaa_minus_1 +sec +sbc #1 +sta {z1} +//FRAGMENT vbuaa=vbuaa_minus_1 +sec +sbc #1 +//FRAGMENT vbuxx=vbuaa_minus_1 +tax +dex +//FRAGMENT vbuz1=_lo_pbuz2 +lda {z2} +sta {z1} +//FRAGMENT vbuz1=_hi_pbuz2 +lda {z2}+1 +sta {z1} +//FRAGMENT vbuc1_lt_vbuz1_then_la1 +lda #{c1} +cmp {z1} +bcc {la1} +//FRAGMENT vbuc1_ge_vbuz1_then_la1 +lda #{c1} +cmp {z1} +bcs {la1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_pbuc2_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1}+1 +lda {c2},y +sta {z1} +//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbuz3 +ldy #0 +lda ({z2}),y +ldy {z3} +ora {c1},y +sta {z1} +//FRAGMENT vbuaa=_lo_pbuz1 +lda {z1} +//FRAGMENT vbuxx=_lo_pbuz1 +ldx {z1} +//FRAGMENT vbuz1=vbuaa_bor_vbuaa +sta {z1} +//FRAGMENT vbuaa=_hi_pbuz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi_pbuz1 +ldx {z1}+1 +//FRAGMENT vbuc1_lt_vbuaa_then_la1 +cmp #{c1} +beq !+ +bcs {la1} +!: +//FRAGMENT vbuc1_ge_vbuaa_then_la1 +cmp #{c1} +bcc {la1} +beq {la1} +//FRAGMENT vbuz1_ge_vbuaa_then_la1 +ldy {z1} +sta $ff +cpy $ff +bcs {la1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_pbuc2_derefidx_vbuaa +tay +lda {c1},y +sta {z1}+1 +lda {c2},y +sta {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx +lda {c1},x +sta {z1}+1 +lda {c2},x +sta {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_pbuc2_derefidx_vbuyy +lda {c1},y +sta {z1}+1 +lda {c2},y +sta {z1} +//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbuxx +lda {c1},x +ldy #0 +ora ({z2}),y +sta {z1} +//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbuyy +lda {c1},y +ldy #0 +ora ({z2}),y +sta {z1} +//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 +ldy #0 +lda ({z1}),y +ldy {z2} +ora {c1},y +//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx +lda {c1},x +ldy #0 +ora ({z1}),y +//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbuyy +lda {c1},y +ldy #0 +ora ({z1}),y +//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 +ldx {z2} +lda {c1},x +ldy #0 +ora ({z1}),y +tax +//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx +lda {c1},x +ldy #0 +ora ({z1}),y +tax +//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbuyy +lda {c1},y +ldy #0 +ora ({z1}),y +tax +//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 +ldy #0 +lda ({z1}),y +ldy {z2} +ora {c1},y +tay +//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx +lda {c1},x +ldy #0 +ora ({z1}),y +tay +//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbuyy +lda {c1},y +ldy #0 +ora ({z1}),y +tay +//FRAGMENT vbuc1_ge_vbuxx_then_la1 +cpx #{c1} +bcc {la1} +beq {la1} +//FRAGMENT vbuc1_lt_vbuxx_then_la1 +cpx #{c1} +beq !+ +bcs {la1} +!: +//FRAGMENT vbuc1_lt_vbuyy_then_la1 +cpy #{c1} +beq !+ +bcs {la1} +!: +//FRAGMENT vbuyy=_lo_pbuz1 +ldy {z1} +//FRAGMENT vbuz1=vbuz2_bor__lo_pbuz3 +lda {z2} +ora {z3} +sta {z1} +//FRAGMENT vbuyy=_hi_pbuz1 +ldy {z1}+1 +//FRAGMENT vwuz1_eq_0_then_la1 +lda {z1} +ora {z1}+1 +beq {la1} +//FRAGMENT vwuz1_gt_vwuz2_then_la1 +lda {z2}+1 +cmp {z1}+1 +bcc {la1} +bne !+ +lda {z2} +cmp {z1} +bcc {la1} +!: +//FRAGMENT vwuz1_neq_vwuz2_then_la1 +lda {z1}+1 +cmp {z2}+1 +bne {la1} +lda {z1} +cmp {z2} +bne {la1} +//FRAGMENT vwuz1=vwuz2_band_vwuc1 +lda {z2} +and #<{c1} +sta {z1} +lda {z2}+1 +and #>{c1} +sta {z1}+1 +//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 +ldy #0 +lda ({z1}),y +ldy {z2} +ora {c1},y +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuaa +tay +lda {c1},y +ldy #0 +ora ({z1}),y +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx +lda {c1},x +ldy #0 +ora ({z1}),y +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuyy +lda {c1},y +ldy #0 +ora ({z1}),y +ldy #0 +sta ({z1}),y +//FRAGMENT pbuz1=pbuz1_plus_vwuz2 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuc1_derefidx_vbuz1_neq_0_then_la1 +ldy {z1} +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuaa_neq_0_then_la1 +tay +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuxx_neq_0_then_la1 +lda {c1},x +cmp #0 +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuyy_neq_0_then_la1 +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT pbuz1=pbuz2_minus_vwuz3 +lda {z2} +sec +sbc {z3} +sta {z1} +lda {z2}+1 +sbc {z3}+1 +sta {z1}+1 +//FRAGMENT pwuz1=qwuz2_derefidx_vbuz3 +ldy {z3} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT vbuz1_le_0_then_la1 +lda {z1} +cmp #0 +beq {la1} +//FRAGMENT vwuz1_eq_vwuc1_then_la1 +lda {z1} +cmp #<{c1} +bne !+ +lda {z1}+1 +cmp #>{c1} +beq {la1} +!: +//FRAGMENT vwuz1=pwuz2_derefidx_vbuz3 +ldy {z3} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT _deref_pbuz1_gt_vbuz2_then_la1 +ldy #0 +lda ({z1}),y +cmp {z2} +beq !+ +bcs {la1} +!: +//FRAGMENT pbuz1_derefidx_(_deref_pbuz2)=_inc_pbuz1_derefidx_(_deref_pbuz2) +ldy #0 +lda ({z2}),y +tay +lda ({z1}),y +clc +adc #1 +sta ({z1}),y +//FRAGMENT vwuz1=_deref_pbuz2_rol_1 +ldy #0 +lda ({z2}),y +asl +sta {z1} +lda #0 +rol +sta {z1}+1 +//FRAGMENT qwuz1=qwuz2_plus_vwuz3 +lda {z2} +clc +adc {z3} +sta {z1} +lda {z2}+1 +adc {z3}+1 +sta {z1}+1 +//FRAGMENT _deref_qwuz1=pwuz2 +ldy #0 +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT vwuz1_neq_vbuc1_then_la1 +NO_SYNTHESIS +//FRAGMENT vwuz1_neq_vbsc1_then_la1 +NO_SYNTHESIS +//FRAGMENT pwuz1=_deref_qwuz2 +ldy #0 +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT vwuz1=pbuz2_minus_pbuz3 +lda {z2} +sec +sbc {z3} +sta {z1} +lda {z2}+1 +sbc {z3}+1 +sta {z1}+1 +//FRAGMENT pwuz1_derefidx_vbuz2=vwuz3 +ldy {z2} +lda {z3} +sta ({z1}),y +iny +lda {z3}+1 +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 +ldy {z2} +lda ({z1}),y +clc +adc #1 +sta ({z1}),y +//FRAGMENT vwuz1=pwuz2_minus_pwuz3 +lda {z2} +sec +sbc {z3} +sta {z1} +lda {z2}+1 +sbc {z3}+1 +sta {z1}+1 +//FRAGMENT pwuz1=qwuz2_derefidx_vbuaa +tay +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT pwuz1=qwuz2_derefidx_vbuxx +txa +tay +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT pwuz1=qwuz2_derefidx_vbuyy +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT vbuaa_le_0_then_la1 +cmp #0 +beq {la1} +//FRAGMENT vwuz1=pwuz2_derefidx_vbuaa +tay +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT vwuz1=pwuz2_derefidx_vbuxx +txa +tay +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT vwuz1=pwuz2_derefidx_vbuyy +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT _deref_pbuz1_gt_vbuxx_then_la1 +ldy #0 +lda ({z1}),y +sta $ff +cpx $ff +bcc {la1} +//FRAGMENT pwuz1_derefidx_vbuaa=vwuz2 +tay +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuxx=vwuz2 +txa +tay +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuyy=vwuz2 +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=_inc_pbuz1_derefidx_vbuxx +txa +tay +lda ({z1}),y +clc +adc #1 +sta ({z1}),y +//FRAGMENT vbuxx_le_0_then_la1 +cpx #0 +beq {la1} +//FRAGMENT pbuz1=pbuz2_minus_vwuz1 +lda {z2} +sec +sbc {z1} +sta {z1} +lda {z2}+1 +sbc {z1}+1 +sta {z1}+1 +//FRAGMENT vwuz1=_deref_pbuz1_rol_1 +ldy #0 +lda ({z1}),y +asl +sta {z1} +lda #0 +rol +sta {z1}+1 +//FRAGMENT qwuz1=qwuz2_plus_vwuz1 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pwuz1=_deref_qwuz1 +ldy #0 +lda ({z1}),y +pha +iny +lda ({z1}),y +sta {z1}+1 +pla +sta {z1} +//FRAGMENT vwuz1=pwuz1_minus_pwuz2 +lda {z1} +sec +sbc {z2} +sta {z1} +lda {z1}+1 +sbc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuaa +tay +lda {c1},y +ldy {z2} +sta ({z1}),y +//FRAGMENT _stackpullbyte_1 +pla +//FRAGMENT vduz1=_inc_vduz1 +inc {z1} +bne !+ +inc {z1}+1 +bne !+ +inc {z1}+2 +bne !+ +inc {z1}+3 +!: +//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuz2_then_la1 +ldy {z1} +lda {c1},y +cmp {z2} +beq {la1} +//FRAGMENT vbsz1=vbsz2_minus_vbsz3 +lda {z2} +sec +sbc {z3} +sta {z1} +//FRAGMENT vbuaa_le_vbuz1_then_la1 +ldy {z1} +sta $ff +cpy $ff +bcs {la1} +//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuz1_then_la1 +tay +lda {c1},y +cmp {z1} +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuz1_then_la1 +lda {c1},x +cmp {z1} +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuz1_then_la1 +lda {c1},y +cmp {z1} +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuaa_then_la1 +ldx {z1} +tay +lda {c1},x +tax +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuaa_then_la1 +tax +lda {c1},x +tay +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuaa_then_la1 +tay +lda {c1},x +tax +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuaa_then_la1 +tax +lda {c1},y +tay +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuxx_then_la1 +ldy {z1} +lda {c1},y +tay +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuxx_then_la1 +tay +lda {c1},y +tay +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuxx_then_la1 +lda {c1},x +tay +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuxx_then_la1 +lda {c1},y +tay +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuyy_then_la1 +ldx {z1} +lda {c1},x +tax +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuyy_then_la1 +tax +lda {c1},x +tax +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuyy_then_la1 +lda {c1},x +tax +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuyy_then_la1 +lda {c1},y +tax +sty $ff +cpx $ff +beq {la1} +//FRAGMENT vbsz1=vbsz2_minus_vbsaa +eor #$ff +sec +adc {z2} +sta {z1} +//FRAGMENT vbsz1=vbsz2_minus_vbsxx +txa +eor #$ff +sec +adc {z2} +sta {z1} +//FRAGMENT vbsz1=vbsz2_minus_vbsyy +tya +eor #$ff +sec +adc {z2} +sta {z1} +//FRAGMENT vbsxx=vbsz1_minus_vbsz2 +lda {z1} +sec +sbc {z2} +tax +//FRAGMENT vbsxx=vbsz1_minus_vbsaa +eor #$ff +sec +adc {z1} +tax +//FRAGMENT vbsxx=vbsz1_minus_vbsxx +txa +eor #$ff +sec +adc {z1} +tax +//FRAGMENT vbsxx=vbsz1_minus_vbsyy +tya +eor #$ff +sec +adc {z1} +tax +//FRAGMENT vbsz1=vbsxx_minus_vbsz2 +txa +sec +sbc {z2} +sta {z1} +//FRAGMENT vbsz1=vbsxx_minus_vbsaa +sta $ff +txa +sec +sbc $ff +sta {z1} +//FRAGMENT vbsz1=vbsxx_minus_vbsxx +lda #0 +sta {z1} +//FRAGMENT vbsz1=vbsxx_minus_vbsyy +txa +sty $ff +sec +sbc $ff +sta {z1} +//FRAGMENT vbsxx=vbsxx_minus_vbsz1 +txa +sec +sbc {z1} +tax +//FRAGMENT vbsxx=vbsxx_minus_vbsaa +sta $ff +txa +sec +sbc $ff +tax +//FRAGMENT vbsxx=vbsxx_minus_vbsxx +lda #0 +tax +//FRAGMENT vbsxx=vbsxx_minus_vbsyy +txa +sty $ff +sec +sbc $ff +tax +//FRAGMENT vbsz1=vbsyy_minus_vbsz2 +tya +sec +sbc {z2} +sta {z1} +//FRAGMENT vbsz1=vbsyy_minus_vbsaa +sta $ff +tya +sec +sbc $ff +sta {z1} +//FRAGMENT vbsz1=vbsyy_minus_vbsxx +tya +stx $ff +sec +sbc $ff +sta {z1} +//FRAGMENT vbsz1=vbsyy_minus_vbsyy +lda #0 +sta {z1} +//FRAGMENT vbsxx=vbsyy_minus_vbsz1 +tya +sec +sbc {z1} +tax +//FRAGMENT vbsxx=vbsyy_minus_vbsaa +sta $ff +tya +sec +sbc $ff +tax +//FRAGMENT vbsxx=vbsyy_minus_vbsxx +tya +stx $ff +sec +sbc $ff +tax +//FRAGMENT vbsxx=vbsyy_minus_vbsyy +lda #0 +tax +//FRAGMENT vbuz1=vbuxx_minus_1 +dex +stx {z1} +//FRAGMENT vbuz1=vbuyy_minus_1 +tya +sec +sbc #1 +sta {z1} +//FRAGMENT vbuyy_le_vbuz1_then_la1 +lda {z1} +sty $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuz1_le_vbuaa_then_la1 +cmp {z1} +bcs {la1} +//FRAGMENT vbuaa_lt_vbuxx_then_la1 +stx $ff +cmp $ff +bcc {la1} +//FRAGMENT vbuaa_lt_vbuyy_then_la1 +tax +sty $ff +cpx $ff +bcc {la1} +//FRAGMENT vbuyy_lt_vbuaa_then_la1 +sta $ff +cpy $ff +bcc {la1} +//FRAGMENT vbuyy_lt_vbuxx_then_la1 +stx $ff +cpy $ff +bcc {la1} +//FRAGMENT vbuxx_le_vbuaa_then_la1 +stx $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuyy_le_vbuaa_then_la1 +sty $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuyy_le_vbuxx_then_la1 +sty $ff +cpx $ff +bcs {la1} +//FRAGMENT vbuz1_le_vbuyy_then_la1 +cpy {z1} +bcs {la1} +//FRAGMENT vbuxx_le_vbuyy_then_la1 +stx $ff +cpy $ff +bcs {la1} +//FRAGMENT vbuz1=vbuz2_minus_vbuz1 +lda {z2} +sec +sbc {z1} +sta {z1} +//FRAGMENT vbsz1=vbsz1_minus_vbsz2 +lda {z1} +sec +sbc {z2} +sta {z1} +//FRAGMENT vbuz1=vbuc1_plus_vbuz1 +lax {z1} +axs #-[{c1}] +stx {z1} +//FRAGMENT vbuz1=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +sta {z1} +//FRAGMENT pbuz1_le_pbuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne !+ +lda {z1} +cmp #<{c1} +!: +bcc {la1} +beq {la1} +//FRAGMENT pbuz1_gt_pbuc1_then_la1 +lda #>{c1} +cmp {z1}+1 +bcc {la1} +bne !+ +lda #<{c1} +cmp {z1} +bcc {la1} +!: +//FRAGMENT vbuz1=vbuz1_rol_1 +asl {z1} +//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuc2_then_la1 +ldy {z1} +lda {c1},y +cmp #{c2} +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 +ldx {z1} +inc {c1},x +//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuc2_then_la1 +tay +lda {c1},y +cmp #{c2} +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuc2_then_la1 +lda {c1},x +cmp #{c2} +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuc2_then_la1 +lda {c1},y +cmp #{c2} +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx +inc {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=_inc_pbuc1_derefidx_vbuyy +tya +tax +inc {c1},x +//FRAGMENT vduz1=vduc1_plus_vbuz2 +lda {z2} +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +lda #<{c1}>>$10 +adc #0 +sta {z1}+2 +lda #>{c1}>>$10 +adc #0 +sta {z1}+3 +//FRAGMENT vduz1=vduc1_plus_vbuaa +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +lda #<{c1}>>$10 +adc #0 +sta {z1}+2 +lda #>{c1}>>$10 +adc #0 +sta {z1}+3 +//FRAGMENT vduz1=vduc1_plus_vbuxx +txa +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +lda #<{c1}>>$10 +adc #0 +sta {z1}+2 +lda #>{c1}>>$10 +adc #0 +sta {z1}+3 +//FRAGMENT vduz1=vduc1_plus_vbuyy +tya +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +lda #<{c1}>>$10 +adc #0 +sta {z1}+2 +lda #>{c1}>>$10 +adc #0 +sta {z1}+3 +//FRAGMENT pbuz1_derefidx_vbuaa=vbuz2 +tay +lda {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuaa=vbuaa +tay +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuaa=vbuxx +tay +txa +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuaa=vbuyy +sta $ff +tya +ldy $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=vbuyy +tya +sta ({z1}),y +//FRAGMENT vwuz1_lt_vbuc1_then_la1 +lda {z1}+1 +bne !+ +lda {z1} +cmp #{c1} +bcc {la1} +!: +//FRAGMENT vwuz1=_word_vduz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vduz1=vwuz2_dword_vwuz3 +lda {z2} +sta {z1}+2 +lda {z2}+1 +sta {z1}+3 +lda {z3} +sta {z1} +lda {z3}+1 +sta {z1}+1 +//FRAGMENT _deref_pbuz1_eq_vbuz2_then_la1 +lda {z2} +ldy #0 +cmp ({z1}),y +beq {la1} +//FRAGMENT _deref_pbuz1_neq_0_then_la1 +ldy #0 +lda ({z1}),y +cmp #0 +bne {la1} +//FRAGMENT _deref_pbuz1_eq_vbuxx_then_la1 +txa +ldy #0 +cmp ({z1}),y +beq {la1} +//FRAGMENT _deref_pbuz1_eq_vbuyy_then_la1 +tya +ldy #0 +cmp ({z1}),y +beq {la1} +//FRAGMENT vwuz1=vbuz2 +lda {z2} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vbuz1=pwuc1_derefidx_vbuz2_band_vbuc2 +lda #{c2} +ldy {z2} +and {c1},y +sta {z1} +//FRAGMENT vwuz1=vbuaa +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vbuxx +txa +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vbuyy +tya +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vbuaa=pwuc1_derefidx_vbuz1_band_vbuc2 +lda #{c2} +ldy {z1} +and {c1},y +//FRAGMENT vbuxx=pwuc1_derefidx_vbuz1_band_vbuc2 +lda #{c2} +ldx {z1} +and {c1},x +tax +//FRAGMENT vbuyy=pwuc1_derefidx_vbuz1_band_vbuc2 +lda #{c2} +ldy {z1} +and {c1},y +tay +//FRAGMENT vbuz1=pwuc1_derefidx_vbuaa_band_vbuc2 +tay +lda #{c2} +and {c1},y +sta {z1} +//FRAGMENT vbuaa=pwuc1_derefidx_vbuaa_band_vbuc2 +tay +lda #{c2} +and {c1},y +//FRAGMENT vbuxx=pwuc1_derefidx_vbuaa_band_vbuc2 +tax +lda #{c2} +and {c1},x +tax +//FRAGMENT vbuyy=pwuc1_derefidx_vbuaa_band_vbuc2 +tay +lda #{c2} +and {c1},y +tay +//FRAGMENT vbuz1=pwuc1_derefidx_vbuxx_band_vbuc2 +lda #{c2} +and {c1},x +sta {z1} +//FRAGMENT vbuaa=pwuc1_derefidx_vbuxx_band_vbuc2 +lda #{c2} +and {c1},x +//FRAGMENT vbuxx=pwuc1_derefidx_vbuxx_band_vbuc2 +lda #{c2} +and {c1},x +tax +//FRAGMENT vbuyy=pwuc1_derefidx_vbuxx_band_vbuc2 +lda #{c2} +and {c1},x +tay +//FRAGMENT vbuz1=pwuc1_derefidx_vbuyy_band_vbuc2 +lda #{c2} +and {c1},y +sta {z1} +//FRAGMENT vbuaa=pwuc1_derefidx_vbuyy_band_vbuc2 +lda #{c2} +and {c1},y +//FRAGMENT vbuxx=pwuc1_derefidx_vbuyy_band_vbuc2 +lda #{c2} +and {c1},y +tax +//FRAGMENT vbuyy=pwuc1_derefidx_vbuyy_band_vbuc2 +lda #{c2} +and {c1},y +tay +//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz2 +ldx {z2} +tay +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuxx +tay +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuyy +ldx {c1},y +tay +txa +sta ({z1}),y +//FRAGMENT vwsz1=vwsz2_plus_pbuz3_derefidx_vbuz4 +ldy {z4} +clc +lda {z2} +adc ({z3}),y +sta {z1} +bcc !+ +inc {z2}+1 +!: +//FRAGMENT vwsz1=vwsz2_minus_vbuc1 +sec +lda {z2} +sbc #{c1} +sta {z1} +lda {z2}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz2_plus_pbuz3_derefidx_vbuxx +txa +tay +clc +lda {z2} +adc ({z3}),y +sta {z1} +bcc !+ +inc {z2}+1 +!: +//FRAGMENT vwsz1=vwsz2_plus_pbuz3_derefidx_vbuyy +clc +lda {z2} +adc ({z3}),y +sta {z1} +bcc !+ +inc {z2}+1 +!: +//FRAGMENT vwsz1=vwsz2_plus_vwsz1 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_minus_vbuc1 +sec +lda {z1} +sbc #{c1} +sta {z1} +bcs !+ +dec {z1}+1 +!: +//FRAGMENT vwsz1=vwsz1_plus_pbuz2_derefidx_vbuyy +clc +lda {z1} +adc ({z2}),y +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT vbuz1=vbuz1_plus_pbuc1_derefidx_vbuz2 +lda {z1} +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuz1=pbuz2_derefidx_vbuc1_plus_pbuz2_derefidx_vbuc1 +ldy #{c1} +lda ({z2}),y +clc +adc ({z2}),y +sta {z1} +//FRAGMENT vbuz1=vbuz2_plus_pbuz3_derefidx_vbuc1 +lda {z2} +ldy #{c1} +clc +adc ({z3}),y +sta {z1} +//FRAGMENT vbuz1=vbuz1_plus_pbuc1_derefidx_vbuaa +tay +lda {c1},y +clc +adc {z1} +sta {z1} +//FRAGMENT vbuyy=vbuyy_plus_pbuc1_derefidx_vbuaa +tax +tya +clc +adc {c1},x +tay +//FRAGMENT vbuz1=vbuz1_plus_pbuc1_derefidx_vbuxx +lda {c1},x +clc +adc {z1} +sta {z1} +//FRAGMENT vbuz1=vbuz1_plus_pbuc1_derefidx_vbuyy +lda {c1},y +clc +adc {z1} +sta {z1} +//FRAGMENT vbuaa=pbuz1_derefidx_vbuc1_plus_pbuz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +clc +adc ({z1}),y +//FRAGMENT vbuxx=pbuz1_derefidx_vbuc1_plus_pbuz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +clc +adc ({z1}),y +tax +//FRAGMENT vbuyy=pbuz1_derefidx_vbuc1_plus_pbuz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +clc +adc ({z1}),y +tay +//FRAGMENT vbuaa=vbuz1_plus_pbuz2_derefidx_vbuc1 +lda {z1} +ldy #{c1} +clc +adc ({z2}),y +//FRAGMENT vbuxx=vbuz1_plus_pbuz2_derefidx_vbuc1 +lda {z1} +ldy #{c1} +clc +adc ({z2}),y +tax +//FRAGMENT vbuyy=vbuz1_plus_pbuz2_derefidx_vbuc1 +lda {z1} +ldy #{c1} +clc +adc ({z2}),y +tay +//FRAGMENT vbuz1=vbuaa_plus_pbuz2_derefidx_vbuc1 +ldy #{c1} +clc +adc ({z2}),y +sta {z1} +//FRAGMENT vbuaa=vbuaa_plus_pbuz1_derefidx_vbuc1 +ldy #{c1} +clc +adc ({z1}),y +//FRAGMENT vbuxx=vbuaa_plus_pbuz1_derefidx_vbuc1 +ldy #{c1} +clc +adc ({z1}),y +tax +//FRAGMENT vbuyy=vbuaa_plus_pbuz1_derefidx_vbuc1 +ldy #{c1} +clc +adc ({z1}),y +tay +//FRAGMENT vbuz1=vbuxx_plus_pbuz2_derefidx_vbuc1 +ldy #{c1} +txa +clc +adc ({z2}),y +sta {z1} +//FRAGMENT vbuaa=vbuxx_plus_pbuz1_derefidx_vbuc1 +ldy #{c1} +txa +clc +adc ({z1}),y +//FRAGMENT vbuxx=vbuxx_plus_pbuz1_derefidx_vbuc1 +ldy #{c1} +txa +clc +adc ({z1}),y +tax +//FRAGMENT vbuyy=vbuxx_plus_pbuz1_derefidx_vbuc1 +ldy #{c1} +txa +clc +adc ({z1}),y +tay +//FRAGMENT vbuz1=vbuyy_plus_pbuz2_derefidx_vbuc1 +tya +ldy #{c1} +clc +adc ({z2}),y +sta {z1} +//FRAGMENT vbuaa=vbuyy_plus_pbuz1_derefidx_vbuc1 +tya +ldy #{c1} +clc +adc ({z1}),y +//FRAGMENT vbuxx=vbuyy_plus_pbuz1_derefidx_vbuc1 +tya +ldy #{c1} +clc +adc ({z1}),y +tax +//FRAGMENT vbuyy=vbuyy_plus_pbuz1_derefidx_vbuc1 +tya +ldy #{c1} +clc +adc ({z1}),y +tay +//FRAGMENT vwuz1=vbuz2_word_vbuz3 +lda {z2} +sta {z1}+1 +lda {z3} +sta {z1} +//FRAGMENT vwuz1=vbuaa_word_vbuz2 +sta {z1}+1 +lda {z2} +sta {z1} +//FRAGMENT vwuz1=vbuxx_word_vbuz2 +txa +sta {z1}+1 +lda {z2} +sta {z1} +//FRAGMENT vwuz1=vbuyy_word_vbuz2 +tya +sta {z1}+1 +lda {z2} +sta {z1} +//FRAGMENT vwuz1=vbuz2_word_vbuaa +tay +lda {z2} +sta {z1}+1 +sty {z1} +//FRAGMENT vwuz1=vbuaa_word_vbuaa +tay +sta {z1}+1 +sty {z1} +//FRAGMENT vwuz1=vbuxx_word_vbuaa +tay +txa +sta {z1}+1 +sty {z1} +//FRAGMENT vwuz1=vbuyy_word_vbuaa +tax +tya +sta {z1}+1 +stx {z1} +//FRAGMENT vwuz1=vbuz2_word_vbuxx +lda {z2} +sta {z1}+1 +stx {z1} +//FRAGMENT vwuz1=vbuaa_word_vbuxx +sta {z1}+1 +stx {z1} +//FRAGMENT vwuz1=vbuyy_word_vbuxx +tya +sta {z1}+1 +stx {z1} +//FRAGMENT vwuz1=vbuz2_word_vbuyy +lda {z2} +sta {z1}+1 +sty {z1} +//FRAGMENT vwuz1=vbuaa_word_vbuyy +sta {z1}+1 +sty {z1} +//FRAGMENT vwuz1=vbuxx_word_vbuyy +txa +sta {z1}+1 +sty {z1} +//FRAGMENT _deref_pbsc1=vbsc2 +lda #{c2} +sta {c1} +//FRAGMENT vbuz1=_dec_vbuz2 +ldy {z2} +dey +sty {z1} +//FRAGMENT vbuz1=_dec_vbuaa +sec +sbc #1 +sta {z1} +//FRAGMENT vbuz1=_dec_vbuxx +dex +stx {z1} +//FRAGMENT vbuz1=_dec_vbuyy +dey +sty {z1} +//FRAGMENT vbuaa=_dec_vbuz1 +lda {z1} +sec +sbc #1 +//FRAGMENT vbuaa=_dec_vbuxx +txa +sec +sbc #1 +//FRAGMENT vbuaa=_dec_vbuyy +tya +sec +sbc #1 +//FRAGMENT vbuxx=_dec_vbuz1 +ldx {z1} +dex +//FRAGMENT vbuxx=_dec_vbuaa +tax +dex +//FRAGMENT vbuxx=_dec_vbuyy +tya +tax +dex +//FRAGMENT vbuyy=_dec_vbuz1 +ldy {z1} +dey +//FRAGMENT vbuyy=_dec_vbuaa +tay +dey +//FRAGMENT vbuyy=_dec_vbuxx +txa +tay +dey +//FRAGMENT vwuz1=vwuz2_bor_vbuz3 +lda {z3} +ora {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vbuz1=pbuz2_derefidx_vbuaa +tay +lda ({z2}),y +sta {z1} +//FRAGMENT vbuaa=pbuz1_derefidx_vbuaa +tay +lda ({z1}),y +//FRAGMENT vbuxx=pbuz1_derefidx_vbuaa +tay +lda ({z1}),y +tax +//FRAGMENT vbuyy=pbuz1_derefidx_vbuaa +tay +lda ({z1}),y +tay +//FRAGMENT vwuz1=vwuz2_bor_vbuxx +txa +ora {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_bor_vbuyy +tya +ora {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuaa +tay +lda {c2},y +ldy #{c1} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuyy +lda {c2},y +ldy #{c1} +sta ({z1}),y +//FRAGMENT vwuz1=vwuz1_bor_vbuxx +txa +ora {z1} +sta {z1} +//FRAGMENT vbuz1_ge_pbuc1_derefidx_vbuz2_then_la1 +lda {z1} +ldy {z2} +cmp {c1},y +bcs {la1} +//FRAGMENT vbuz1_ge_vbuz1_then_la1 +lda {z1} +cmp {z1} +bcs {la1} +//FRAGMENT vbuz1_le_pbuc1_derefidx_vbuz2_then_la1 +ldy {z2} +lda {c1},y +cmp {z1} +bcs {la1} +//FRAGMENT vbuz1_le_vbuz1_then_la1 +lda {z1} +cmp {z1} +bcs {la1} +//FRAGMENT vbuz1_gt_pbuc1_derefidx_vbuz2_then_la1 +ldy {z2} +lda {c1},y +cmp {z1} +bcc {la1} +//FRAGMENT vbuz1_gt_vbuz1_then_la1 +lda {z1} +cmp {z1} +bcc {la1} +//FRAGMENT vbuz1_lt_pbuc1_derefidx_vbuz2_then_la1 +lda {z1} +ldy {z2} +cmp {c1},y +bcc {la1} +//FRAGMENT vbuz1_lt_vbuz1_then_la1 +lda {z1} +cmp {z1} +bcc {la1} +//FRAGMENT vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 +lda {z1} +ldy {z2} +cmp {c1},y +bne {la1} +//FRAGMENT vbuz1_neq_vbuz1_then_la1 +lda {z1} +cmp {z1} +bne {la1} +//FRAGMENT vbuz1_ge_pbuc1_derefidx_vbuxx_then_la1 +txa +tay +lda {z1} +cmp {c1},y +bcs {la1} +//FRAGMENT vbuz1_ge_pbuc1_derefidx_vbuyy_then_la1 +lda {z1} +cmp {c1},y +bcs {la1} +//FRAGMENT vbuxx_ge_pbuc1_derefidx_vbuz1_then_la1 +ldy {z1} +txa +cmp {c1},y +bcs {la1} +//FRAGMENT vbuxx_ge_pbuc1_derefidx_vbuxx_then_la1 +txa +tay +cmp {c1},y +bcs {la1} +//FRAGMENT vbuxx_ge_pbuc1_derefidx_vbuyy_then_la1 +txa +cmp {c1},y +bcs {la1} +//FRAGMENT vbuyy_ge_pbuc1_derefidx_vbuz1_then_la1 +tya +ldy {z1} +cmp {c1},y +bcs {la1} +//FRAGMENT vbuyy_ge_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +sta $ff +cpy $ff +bcs {la1} +//FRAGMENT vbuyy_ge_pbuc1_derefidx_vbuyy_then_la1 +tya +cmp {c1},y +bcs {la1} +//FRAGMENT vbuxx_ge_vbuxx_then_la1 +txa +stx $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuyy_ge_vbuyy_then_la1 +tya +sta $ff +cpy $ff +bcs {la1} +//FRAGMENT vbuz1_le_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +cmp {z1} +bcs {la1} +//FRAGMENT vbuz1_le_pbuc1_derefidx_vbuyy_then_la1 +lda {c1},y +cmp {z1} +bcs {la1} +//FRAGMENT vbuxx_le_pbuc1_derefidx_vbuz1_then_la1 +ldy {z1} +txa +cmp {c1},y +bcc {la1} +beq {la1} +//FRAGMENT vbuxx_le_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +stx $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuxx_le_pbuc1_derefidx_vbuyy_then_la1 +txa +cmp {c1},y +bcc {la1} +beq {la1} +//FRAGMENT vbuyy_le_pbuc1_derefidx_vbuz1_then_la1 +tya +ldy {z1} +cmp {c1},y +bcc {la1} +beq {la1} +//FRAGMENT vbuyy_le_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +sty $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuyy_le_pbuc1_derefidx_vbuyy_then_la1 +tya +cmp {c1},y +bcc {la1} +beq {la1} +//FRAGMENT vbuxx_le_vbuxx_then_la1 +txa +stx $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuyy_le_vbuyy_then_la1 +tya +sta $ff +cpy $ff +bcs {la1} +//FRAGMENT vbuz1_gt_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +cmp {z1} +bcc {la1} +//FRAGMENT vbuz1_gt_pbuc1_derefidx_vbuyy_then_la1 +lda {c1},y +cmp {z1} +bcc {la1} +//FRAGMENT vbuxx_gt_pbuc1_derefidx_vbuz1_then_la1 +ldy {z1} +txa +cmp {c1},y +beq !+ +bcs {la1} +!: +//FRAGMENT vbuxx_gt_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +stx $ff +cmp $ff +bcc {la1} +//FRAGMENT vbuxx_gt_pbuc1_derefidx_vbuyy_then_la1 +txa +cmp {c1},y +beq !+ +bcs {la1} +!: +//FRAGMENT vbuyy_gt_pbuc1_derefidx_vbuz1_then_la1 +tya +ldy {z1} +cmp {c1},y +beq !+ +bcs {la1} +!: +//FRAGMENT vbuyy_gt_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +tax +sty $ff +cpx $ff +bcc {la1} +//FRAGMENT vbuyy_gt_pbuc1_derefidx_vbuyy_then_la1 +tya +cmp {c1},y +beq !+ +bcs {la1} +!: +//FRAGMENT vbuxx_gt_vbuxx_then_la1 +txa +sta $ff +cpx $ff +bcc {la1} +//FRAGMENT vbuyy_gt_vbuyy_then_la1 +tya +sta $ff +cpy $ff +bcc {la1} +//FRAGMENT vbuz1_lt_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +cmp {z1} +beq !+ +bcs {la1} +!: +//FRAGMENT vbuz1_lt_pbuc1_derefidx_vbuyy_then_la1 +lda {z1} +cmp {c1},y +bcc {la1} +//FRAGMENT vbuxx_lt_pbuc1_derefidx_vbuz1_then_la1 +ldy {z1} +txa +cmp {c1},y +bcc {la1} +//FRAGMENT vbuxx_lt_pbuc1_derefidx_vbuxx_then_la1 +txa +tay +cmp {c1},y +bcc {la1} +//FRAGMENT vbuxx_lt_pbuc1_derefidx_vbuyy_then_la1 +txa +cmp {c1},y +bcc {la1} +//FRAGMENT vbuyy_lt_pbuc1_derefidx_vbuz1_then_la1 +tya +ldy {z1} +cmp {c1},y +bcc {la1} +//FRAGMENT vbuyy_lt_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +sta $ff +cpy $ff +bcc {la1} +//FRAGMENT vbuyy_lt_pbuc1_derefidx_vbuyy_then_la1 +tya +cmp {c1},y +bcc {la1} +//FRAGMENT vbuxx_lt_vbuxx_then_la1 +txa +sta $ff +cpx $ff +bcc {la1} +//FRAGMENT vbuyy_lt_vbuyy_then_la1 +tya +sta $ff +cpy $ff +bcc {la1} +//FRAGMENT vbuz1_neq_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +cmp {z1} +bne {la1} +//FRAGMENT vbuz1_neq_pbuc1_derefidx_vbuyy_then_la1 +lda {c1},y +cmp {z1} +bne {la1} +//FRAGMENT vbuxx_neq_pbuc1_derefidx_vbuz1_then_la1 +ldy {z1} +txa +cmp {c1},y +bne {la1} +//FRAGMENT vbuxx_neq_pbuc1_derefidx_vbuxx_then_la1 +txa +tay +cmp {c1},y +bne {la1} +//FRAGMENT vbuxx_neq_pbuc1_derefidx_vbuyy_then_la1 +txa +cmp {c1},y +bne {la1} +//FRAGMENT vbuyy_neq_pbuc1_derefidx_vbuz1_then_la1 +tya +ldy {z1} +cmp {c1},y +bne {la1} +//FRAGMENT vbuyy_neq_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +tax +stx $ff +cpy $ff +bne {la1} +//FRAGMENT vbuyy_neq_pbuc1_derefidx_vbuyy_then_la1 +tya +cmp {c1},y +bne {la1} +//FRAGMENT vbuxx_neq_vbuxx_then_la1 +txa +tay +stx $ff +cpy $ff +bne {la1} +//FRAGMENT vbuyy_neq_vbuyy_then_la1 +tya +tax +stx $ff +cpy $ff +bne {la1} +//FRAGMENT pwuz1_derefidx_vbuc1=vwuz2 +ldy #{c1} +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT vbuz1=vbuz2_plus_2 +lda {z2} +clc +adc #2 +sta {z1} +//FRAGMENT vbuz1=vbuaa_plus_2 +clc +adc #2 +sta {z1} +//FRAGMENT vbuz1=vbuxx_plus_2 +inx +inx +stx {z1} +//FRAGMENT vbuxx=vbuz1_plus_2 +ldx {z1} +inx +inx +//FRAGMENT vbuyy=vbuz1_plus_2 +ldy {z1} +iny +iny +//FRAGMENT vbuxx=vbuaa_plus_2 +tax +inx +inx +//FRAGMENT vbuxx=vbuyy_plus_2 +tya +clc +adc #2 +tax +//FRAGMENT vbsz1_lt_vbsc1_then_la1 +lda {z1} +sec +sbc #{c1} +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vbsaa_lt_vbsc1_then_la1 +sec +sbc #{c1} +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vbsxx_lt_vbsc1_then_la1 +txa +sec +sbc #{c1} +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vbsyy_lt_vbsc1_then_la1 +tya +sec +sbc #{c1} +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vwsz1=vwsz2_ror_7 +lda {z2}+1 +sta {z1} +and #$80 +beq !+ +lda #$ff +!: +sta {z1}+1 +lda {z2} +rol +rol {z1} +rol {z1}+1 +//FRAGMENT vwsz1=vwsz2_ror_5 +lda {z2} +sta $ff +lda {z2}+1 +sta {z1} +lda #0 +bit {z2}+1 +bpl !+ +lda #$ff +!: +sta {z1}+1 +rol $ff +rol {z1} +rol {z1}+1 +rol $ff +rol {z1} +rol {z1}+1 +rol $ff +rol {z1} +rol {z1}+1 +//FRAGMENT _deref_pbuc1=_byte_vwsz1 +lda {z1} +sta {c1} +//FRAGMENT vwsz1=vwsc1_minus_vwsz1 +lda #<{c1} +sec +sbc {z1} +sta {z1} +lda #>{c1} +sbc {z1}+1 +sta {z1}+1 +//FRAGMENT _deref_pbsc1=vbsz1 +lda {z1} +sta {c1} +//FRAGMENT pwuc1_derefidx_vbuaa=_word_vbuz1 +tay +lda {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuaa=_word_vbuxx +tay +txa +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuaa=_word_vbuyy +tax +tya +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT vbuxx_neq_vbuaa_then_la1 +tay +stx $ff +cpy $ff +bne {la1} +//FRAGMENT _deref_pbuc1=_deref_pbuz1 +ldy #0 +lda ({z1}),y +sta {c1} +//FRAGMENT vwuz1=pbuc1_minus_pbuz2 +sec +lda #<{c1} +sbc {z2} +sta {z1} +lda #>{c1} +sbc {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=pbuc1_minus_pbuz1 +sec +lda #<{c1} +sbc {z1} +sta {z1} +lda #>{c1} +sbc {z1}+1 +sta {z1}+1 +//FRAGMENT pbuc1_derefidx_vbuaa=_deref_pbuz1 +tax +ldy #0 +lda ({z1}),y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuxx=_deref_pbuz1 +ldy #0 +lda ({z1}),y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=_deref_pbuz1 +tya +tax +ldy #0 +lda ({z1}),y +sta {c1},x +//FRAGMENT pbsc1_derefidx_vbuz1=_deref_pbsc2 +lda {c2} +ldy {z1} +sta {c1},y +//FRAGMENT vbuz1=vbuc1_plus__deref_pbuc2 +lda #{c1} +clc +adc {c2} +sta {z1} +//FRAGMENT vbsz1=vbsz1_plus_2 +inc {z1} +inc {z1} +//FRAGMENT vbsz1=vbsz1_minus_vbsc1 +lax {z1} +axs #{c1} +stx {z1} +//FRAGMENT vbsz1=vbsz2_plus_vbsz3 +lda {z2} +clc +adc {z3} +sta {z1} +//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_plus_pbsc1_derefidx_vbsz3 +ldy {z2} +lda {c1},y +ldy {z3} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_minus_pbsc1_derefidx_vbsz3 +ldy {z2} +lda {c1},y +ldy {z3} +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_plus_pbsc1_derefidx_vbsz2 +ldy {z2} +clc +lda {c1},y +adc {c1},y +sta {z1} +//FRAGMENT vbsz1=vbsz2_plus_pbsc1_derefidx_vbsz3 +lda {z2} +ldy {z3} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbsz1=vbsz2_minus_pbsc1_derefidx_vbsz3 +lda {z2} +ldy {z3} +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsz1=_deref_pbsc1 +lda {c1} +sta {z1} +//FRAGMENT vbsz1=pbsc1_derefidx_vbuaa +tay +lda {c1},y +sta {z1} +//FRAGMENT vbsaa=pbsc1_derefidx_vbuaa +tay +lda {c1},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbuaa +tay +ldx {c1},y +//FRAGMENT vbsyy=pbsc1_derefidx_vbuaa +tax +ldy {c1},x +//FRAGMENT pbsc1_derefidx_vbuaa=_deref_pbsc2 +tay +lda {c2} +sta {c1},y +//FRAGMENT pbsc1_derefidx_vbuxx=_deref_pbsc2 +lda {c2} +sta {c1},x +//FRAGMENT pbsc1_derefidx_vbuyy=_deref_pbsc2 +lda {c2} +sta {c1},y +//FRAGMENT vbuaa=vbuc1_plus__deref_pbuc2 +lda #{c1} +clc +adc {c2} +//FRAGMENT vbuxx=vbuc1_plus__deref_pbuc2 +lda {c2} +tax +axs #-[{c1}] +//FRAGMENT vbuyy=vbuc1_plus__deref_pbuc2 +lda #{c1} +clc +adc {c2} +tay +//FRAGMENT vbsxx=vbsxx_minus_vbsc1 +txa +axs #{c1} +//FRAGMENT vbsyy=vbsyy_minus_vbsc1 +tya +sec +sbc #{c1} +tay +//FRAGMENT vbsz1=vbsz2_plus_vbsaa +clc +adc {z2} +sta {z1} +//FRAGMENT vbsz1=vbsz2_plus_vbsxx +txa +clc +adc {z2} +sta {z1} +//FRAGMENT vbsz1=vbsz2_plus_vbsyy +tya +clc +adc {z2} +sta {z1} +//FRAGMENT vbsaa=vbsz1_plus_vbsz2 +lda {z1} +clc +adc {z2} +//FRAGMENT vbsaa=vbsz1_plus_vbsaa +clc +adc {z1} +//FRAGMENT vbsaa=vbsz1_plus_vbsxx +txa +clc +adc {z1} +//FRAGMENT vbsaa=vbsz1_plus_vbsyy +tya +clc +adc {z1} +//FRAGMENT vbsxx=vbsz1_plus_vbsz2 +lda {z1} +clc +adc {z2} +tax +//FRAGMENT vbsxx=vbsz1_plus_vbsaa +clc +adc {z1} +tax +//FRAGMENT vbsxx=vbsz1_plus_vbsxx +txa +clc +adc {z1} +tax +//FRAGMENT vbsxx=vbsz1_plus_vbsyy +tya +clc +adc {z1} +tax +//FRAGMENT vbsyy=vbsz1_plus_vbsz2 +lda {z1} +clc +adc {z2} +tay +//FRAGMENT vbsyy=vbsz1_plus_vbsaa +clc +adc {z1} +tay +//FRAGMENT vbsyy=vbsz1_plus_vbsxx +txa +clc +adc {z1} +tay +//FRAGMENT vbsyy=vbsz1_plus_vbsyy +tya +clc +adc {z1} +tay +//FRAGMENT vbsz1=vbsaa_plus_vbsz2 +clc +adc {z2} +sta {z1} +//FRAGMENT vbsz1=vbsaa_plus_vbsaa +asl +sta {z1} +//FRAGMENT vbsz1=vbsaa_plus_vbsxx +stx $ff +clc +adc $ff +sta {z1} +//FRAGMENT vbsz1=vbsaa_plus_vbsyy +sty $ff +clc +adc $ff +sta {z1} +//FRAGMENT vbsaa=vbsaa_plus_vbsz1 +clc +adc {z1} +//FRAGMENT vbsaa=vbsaa_plus_vbsaa +asl +//FRAGMENT vbsaa=vbsaa_plus_vbsxx +stx $ff +clc +adc $ff +//FRAGMENT vbsaa=vbsaa_plus_vbsyy +sty $ff +clc +adc $ff +//FRAGMENT vbsxx=vbsaa_plus_vbsz1 +clc +adc {z1} +tax +//FRAGMENT vbsxx=vbsaa_plus_vbsaa +asl +tax +//FRAGMENT vbsxx=vbsaa_plus_vbsxx +stx $ff +clc +adc $ff +tax +//FRAGMENT vbsxx=vbsaa_plus_vbsyy +sty $ff +clc +adc $ff +tax +//FRAGMENT vbsyy=vbsaa_plus_vbsz1 +clc +adc {z1} +tay +//FRAGMENT vbsyy=vbsaa_plus_vbsaa +asl +tay +//FRAGMENT vbsyy=vbsaa_plus_vbsxx +stx $ff +clc +adc $ff +tay +//FRAGMENT vbsyy=vbsaa_plus_vbsyy +sty $ff +clc +adc $ff +tay +//FRAGMENT vbsz1=vbsxx_plus_vbsz2 +txa +clc +adc {z2} +sta {z1} +//FRAGMENT vbsz1=vbsxx_plus_vbsaa +stx $ff +clc +adc $ff +sta {z1} +//FRAGMENT vbsz1=vbsxx_plus_vbsxx +txa +asl +sta {z1} +//FRAGMENT vbsz1=vbsxx_plus_vbsyy +txa +sty $ff +clc +adc $ff +sta {z1} +//FRAGMENT vbsaa=vbsxx_plus_vbsz1 +txa +clc +adc {z1} +//FRAGMENT vbsaa=vbsxx_plus_vbsaa +stx $ff +clc +adc $ff +//FRAGMENT vbsaa=vbsxx_plus_vbsxx +txa +asl +//FRAGMENT vbsaa=vbsxx_plus_vbsyy +txa +sty $ff +clc +adc $ff +//FRAGMENT vbsxx=vbsxx_plus_vbsz1 +txa +clc +adc {z1} +tax +//FRAGMENT vbsxx=vbsxx_plus_vbsaa +stx $ff +clc +adc $ff +tax +//FRAGMENT vbsxx=vbsxx_plus_vbsxx +txa +asl +tax +//FRAGMENT vbsxx=vbsxx_plus_vbsyy +txa +sty $ff +clc +adc $ff +tax +//FRAGMENT vbsyy=vbsxx_plus_vbsz1 +txa +clc +adc {z1} +tay +//FRAGMENT vbsyy=vbsxx_plus_vbsaa +stx $ff +clc +adc $ff +tay +//FRAGMENT vbsyy=vbsxx_plus_vbsxx +txa +asl +tay +//FRAGMENT vbsyy=vbsxx_plus_vbsyy +txa +sty $ff +clc +adc $ff +tay +//FRAGMENT vbsz1=vbsyy_plus_vbsz2 +tya +clc +adc {z2} +sta {z1} +//FRAGMENT vbsz1=vbsyy_plus_vbsaa +sty $ff +clc +adc $ff +sta {z1} +//FRAGMENT vbsz1=vbsyy_plus_vbsxx +txa +sty $ff +clc +adc $ff +sta {z1} +//FRAGMENT vbsz1=vbsyy_plus_vbsyy +tya +asl +sta {z1} +//FRAGMENT vbsaa=vbsyy_plus_vbsz1 +tya +clc +adc {z1} +//FRAGMENT vbsaa=vbsyy_plus_vbsaa +sty $ff +clc +adc $ff +//FRAGMENT vbsaa=vbsyy_plus_vbsxx +txa +sty $ff +clc +adc $ff +//FRAGMENT vbsaa=vbsyy_plus_vbsyy +tya +asl +//FRAGMENT vbsxx=vbsyy_plus_vbsz1 +tya +clc +adc {z1} +tax +//FRAGMENT vbsxx=vbsyy_plus_vbsaa +sty $ff +clc +adc $ff +tax +//FRAGMENT vbsxx=vbsyy_plus_vbsxx +txa +sty $ff +clc +adc $ff +tax +//FRAGMENT vbsxx=vbsyy_plus_vbsyy +tya +asl +tax +//FRAGMENT vbsyy=vbsyy_plus_vbsz1 +tya +clc +adc {z1} +tay +//FRAGMENT vbsyy=vbsyy_plus_vbsaa +sty $ff +clc +adc $ff +tay +//FRAGMENT vbsyy=vbsyy_plus_vbsxx +txa +sty $ff +clc +adc $ff +tay +//FRAGMENT vbsyy=vbsyy_plus_vbsyy +tya +asl +tay +//FRAGMENT vbsaa=vbsz1_minus_vbsz2 +lda {z1} +sec +sbc {z2} +//FRAGMENT vbsaa=vbsz1_minus_vbsxx +txa +eor #$ff +sec +adc {z1} +//FRAGMENT vbsaa=vbsz1_minus_vbsyy +tya +eor #$ff +sec +adc {z1} +//FRAGMENT vbsyy=vbsz1_minus_vbsz2 +lda {z1} +sec +sbc {z2} +tay +//FRAGMENT vbsyy=vbsz1_minus_vbsxx +txa +eor #$ff +sec +adc {z1} +tay +//FRAGMENT vbsyy=vbsz1_minus_vbsyy +tya +eor #$ff +sec +adc {z1} +tay +//FRAGMENT vbsaa=vbsxx_minus_vbsz1 +txa +sec +sbc {z1} +//FRAGMENT vbsaa=vbsxx_minus_vbsxx +lda #0 +//FRAGMENT vbsaa=vbsxx_minus_vbsyy +txa +sty $ff +sec +sbc $ff +//FRAGMENT vbsyy=vbsxx_minus_vbsz1 +txa +sec +sbc {z1} +tay +//FRAGMENT vbsyy=vbsxx_minus_vbsxx +lda #0 +tay +//FRAGMENT vbsyy=vbsxx_minus_vbsyy +txa +sty $ff +sec +sbc $ff +tay +//FRAGMENT vbsaa=vbsyy_minus_vbsz1 +tya +sec +sbc {z1} +//FRAGMENT vbsaa=vbsyy_minus_vbsxx +tya +stx $ff +sec +sbc $ff +//FRAGMENT vbsaa=vbsyy_minus_vbsyy +lda #0 +//FRAGMENT vbsyy=vbsyy_minus_vbsz1 +tya +sec +sbc {z1} +tay +//FRAGMENT vbsyy=vbsyy_minus_vbsxx +tya +stx $ff +sec +sbc $ff +tay +//FRAGMENT vbsyy=vbsyy_minus_vbsyy +lda #0 +tay +//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz2 +ldy {z1} +lda {c1},y +ldy {z2} +clc +adc {c1},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz2 +ldx {z1} +lda {c1},x +ldx {z2} +clc +adc {c1},x +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz2 +ldy {z1} +lda {c1},y +ldy {z2} +clc +adc {c1},y +tay +//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsz2 +lda {c1},x +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsz1 +lda {c1},x +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsz1 +lda {c1},x +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsz1 +lda {c1},x +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsz2 +lda {c1},y +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsz1 +lda {c1},y +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsz1 +lda {c1},y +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsz1 +lda {c1},y +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_plus_pbsc1_derefidx_vbsxx +lda {c1},x +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsxx +lda {c1},x +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsxx +lda {c1},x +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsxx +lda {c1},x +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsxx +clc +lda {c1},x +adc {c1},x +sta {z1} +//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsxx +clc +lda {c1},x +adc {c1},x +//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsxx +clc +lda {c1},x +adc {c1},x +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsxx +clc +lda {c1},x +adc {c1},x +tay +//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsxx +clc +lda {c1},x +adc {c1},y +sta {z1} +//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsxx +clc +lda {c1},x +adc {c1},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsxx +clc +lda {c1},x +adc {c1},y +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsxx +clc +lda {c1},x +adc {c1},y +tay +//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_plus_pbsc1_derefidx_vbsyy +lda {c1},y +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsyy +lda {c1},y +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsyy +lda {c1},y +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsyy +lda {c1},y +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsyy +clc +lda {c1},x +adc {c1},y +sta {z1} +//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsyy +clc +lda {c1},x +adc {c1},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsyy +clc +lda {c1},x +adc {c1},y +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsyy +clc +lda {c1},x +adc {c1},y +tay +//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsyy +clc +lda {c1},y +adc {c1},y +sta {z1} +//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsyy +clc +lda {c1},y +adc {c1},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsyy +clc +lda {c1},y +adc {c1},y +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsyy +clc +lda {c1},y +adc {c1},y +tay +//FRAGMENT _deref_pbsc1=vbsaa +sta {c1} +//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsz2 +lda {c1},x +ldy {z2} +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsz2 +lda {c1},y +ldy {z2} +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_minus_pbsc1_derefidx_vbsxx +ldy {z2} +lda {c1},y +sec +sbc {c1},x +sta {z1} +//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsxx +lda {c1},x +sec +sbc {c1},x +sta {z1} +//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsxx +lda {c1},y +sec +sbc {c1},x +sta {z1} +//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_minus_pbsc1_derefidx_vbsyy +ldx {z2} +lda {c1},x +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsyy +lda {c1},x +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsyy +lda {c1},y +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsz2 +ldy {z1} +lda {c1},y +ldy {z2} +sec +sbc {c1},y +//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsz1 +lda {c1},x +ldy {z1} +sec +sbc {c1},y +//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsz1 +lda {c1},y +ldy {z1} +sec +sbc {c1},y +//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsxx +ldy {z1} +lda {c1},y +sec +sbc {c1},x +//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsxx +lda {c1},x +sec +sbc {c1},x +//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsxx +lda {c1},y +sec +sbc {c1},x +//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsyy +ldx {z1} +lda {c1},x +sec +sbc {c1},y +//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsyy +lda {c1},x +sec +sbc {c1},y +//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsyy +lda {c1},y +sec +sbc {c1},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsz2 +ldx {z1} +lda {c1},x +ldx {z2} +sec +sbc {c1},x +tax +//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsz1 +lda {c1},x +ldx {z1} +sec +sbc {c1},x +tax +//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsz1 +lda {c1},y +ldx {z1} +sec +sbc {c1},x +tax +//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsxx +ldy {z1} +lda {c1},y +sec +sbc {c1},x +tax +//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsxx +lda {c1},x +sec +sbc {c1},x +tax +//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsxx +lda {c1},y +sec +sbc {c1},x +tax +//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsyy +ldx {z1} +lda {c1},x +sec +sbc {c1},y +tax +//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsyy +lda {c1},x +sec +sbc {c1},y +tax +//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsyy +lda {c1},y +sec +sbc {c1},y +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsz2 +ldy {z1} +lda {c1},y +ldy {z2} +sec +sbc {c1},y +tay +//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsz1 +lda {c1},x +ldy {z1} +sec +sbc {c1},y +tay +//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsz1 +lda {c1},y +ldy {z1} +sec +sbc {c1},y +tay +//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsxx +ldy {z1} +lda {c1},y +sec +sbc {c1},x +tay +//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsxx +lda {c1},x +sec +sbc {c1},x +tay +//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsxx +lda {c1},y +sec +sbc {c1},x +tay +//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsyy +ldx {z1} +lda {c1},x +sec +sbc {c1},y +tay +//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsyy +lda {c1},x +sec +sbc {c1},y +tay +//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsyy +lda {c1},y +sec +sbc {c1},y +tay +//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz1 +ldy {z1} +clc +lda {c1},y +adc {c1},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz1 +ldx {z1} +clc +lda {c1},x +adc {c1},x +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz1 +ldy {z1} +clc +lda {c1},y +adc {c1},y +tay +//FRAGMENT vbsaa=vbsz1_plus_pbsc1_derefidx_vbsz2 +lda {z1} +ldy {z2} +clc +adc {c1},y +//FRAGMENT vbsxx=vbsz1_plus_pbsc1_derefidx_vbsz2 +lda {z1} +ldx {z2} +clc +adc {c1},x +tax +//FRAGMENT vbsyy=vbsz1_plus_pbsc1_derefidx_vbsz2 +lda {z1} +ldy {z2} +clc +adc {c1},y +tay +//FRAGMENT vbsz1=vbsaa_plus_pbsc1_derefidx_vbsz2 +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbsaa=vbsaa_plus_pbsc1_derefidx_vbsz1 +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbsxx=vbsaa_plus_pbsc1_derefidx_vbsz1 +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbsyy=vbsaa_plus_pbsc1_derefidx_vbsz1 +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbsz1=vbsxx_plus_pbsc1_derefidx_vbsz2 +ldy {z2} +txa +clc +adc {c1},y +sta {z1} +//FRAGMENT vbsaa=vbsxx_plus_pbsc1_derefidx_vbsz1 +ldy {z1} +txa +clc +adc {c1},y +//FRAGMENT vbsxx=vbsxx_plus_pbsc1_derefidx_vbsz1 +txa +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbsyy=vbsxx_plus_pbsc1_derefidx_vbsz1 +ldy {z1} +txa +clc +adc {c1},y +tay +//FRAGMENT vbsz1=vbsyy_plus_pbsc1_derefidx_vbsz2 +tya +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbsaa=vbsyy_plus_pbsc1_derefidx_vbsz1 +tya +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbsxx=vbsyy_plus_pbsc1_derefidx_vbsz1 +ldx {z1} +tya +clc +adc {c1},x +tax +//FRAGMENT vbsyy=vbsyy_plus_pbsc1_derefidx_vbsz1 +tya +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbsz1=vbsz2_plus_pbsc1_derefidx_vbsxx +lda {c1},x +clc +adc {z2} +sta {z1} +//FRAGMENT vbsaa=vbsz1_plus_pbsc1_derefidx_vbsxx +lda {c1},x +clc +adc {z1} +//FRAGMENT vbsxx=vbsz1_plus_pbsc1_derefidx_vbsxx +lda {c1},x +clc +adc {z1} +tax +//FRAGMENT vbsyy=vbsz1_plus_pbsc1_derefidx_vbsxx +lda {c1},x +clc +adc {z1} +tay +//FRAGMENT vbsz1=vbsaa_plus_pbsc1_derefidx_vbsxx +clc +adc {c1},x +sta {z1} +//FRAGMENT vbsaa=vbsaa_plus_pbsc1_derefidx_vbsxx +clc +adc {c1},x +//FRAGMENT vbsxx=vbsaa_plus_pbsc1_derefidx_vbsxx +clc +adc {c1},x +tax +//FRAGMENT vbsyy=vbsaa_plus_pbsc1_derefidx_vbsxx +clc +adc {c1},x +tay +//FRAGMENT vbsz1=vbsxx_plus_pbsc1_derefidx_vbsxx +txa +clc +adc {c1},x +sta {z1} +//FRAGMENT vbsaa=vbsxx_plus_pbsc1_derefidx_vbsxx +txa +clc +adc {c1},x +//FRAGMENT vbsxx=vbsxx_plus_pbsc1_derefidx_vbsxx +txa +clc +adc {c1},x +tax +//FRAGMENT vbsyy=vbsxx_plus_pbsc1_derefidx_vbsxx +txa +clc +adc {c1},x +tay +//FRAGMENT vbsz1=vbsyy_plus_pbsc1_derefidx_vbsxx +tya +clc +adc {c1},x +sta {z1} +//FRAGMENT vbsaa=vbsyy_plus_pbsc1_derefidx_vbsxx +tya +clc +adc {c1},x +//FRAGMENT vbsxx=vbsyy_plus_pbsc1_derefidx_vbsxx +tya +clc +adc {c1},x +tax +//FRAGMENT vbsyy=vbsyy_plus_pbsc1_derefidx_vbsxx +tya +clc +adc {c1},x +tay +//FRAGMENT vbsz1=vbsz2_plus_pbsc1_derefidx_vbsyy +lda {c1},y +clc +adc {z2} +sta {z1} +//FRAGMENT vbsaa=vbsz1_plus_pbsc1_derefidx_vbsyy +lda {c1},y +clc +adc {z1} +//FRAGMENT vbsxx=vbsz1_plus_pbsc1_derefidx_vbsyy +lda {c1},y +clc +adc {z1} +tax +//FRAGMENT vbsyy=vbsz1_plus_pbsc1_derefidx_vbsyy +lda {c1},y +clc +adc {z1} +tay +//FRAGMENT vbsz1=vbsaa_plus_pbsc1_derefidx_vbsyy +clc +adc {c1},y +sta {z1} +//FRAGMENT vbsaa=vbsaa_plus_pbsc1_derefidx_vbsyy +clc +adc {c1},y +//FRAGMENT vbsxx=vbsaa_plus_pbsc1_derefidx_vbsyy +clc +adc {c1},y +tax +//FRAGMENT vbsyy=vbsaa_plus_pbsc1_derefidx_vbsyy +clc +adc {c1},y +tay +//FRAGMENT vbsz1=vbsxx_plus_pbsc1_derefidx_vbsyy +txa +clc +adc {c1},y +sta {z1} +//FRAGMENT vbsaa=vbsxx_plus_pbsc1_derefidx_vbsyy +txa +clc +adc {c1},y +//FRAGMENT vbsxx=vbsxx_plus_pbsc1_derefidx_vbsyy +txa +clc +adc {c1},y +tax +//FRAGMENT vbsyy=vbsxx_plus_pbsc1_derefidx_vbsyy +txa +clc +adc {c1},y +tay +//FRAGMENT vbsz1=vbsyy_plus_pbsc1_derefidx_vbsyy +tya +clc +adc {c1},y +sta {z1} +//FRAGMENT vbsaa=vbsyy_plus_pbsc1_derefidx_vbsyy +tya +clc +adc {c1},y +//FRAGMENT vbsxx=vbsyy_plus_pbsc1_derefidx_vbsyy +tya +clc +adc {c1},y +tax +//FRAGMENT vbsyy=vbsyy_plus_pbsc1_derefidx_vbsyy +tya +clc +adc {c1},y +tay +//FRAGMENT vbsz1=vbsaa_minus_pbsc1_derefidx_vbsz2 +ldy {z2} +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsz1=vbsxx_minus_pbsc1_derefidx_vbsz2 +ldy {z2} +txa +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsz1=vbsyy_minus_pbsc1_derefidx_vbsz2 +tya +ldy {z2} +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsaa=vbsz1_minus_pbsc1_derefidx_vbsz2 +lda {z1} +ldy {z2} +sec +sbc {c1},y +//FRAGMENT vbsaa=vbsaa_minus_pbsc1_derefidx_vbsz1 +ldy {z1} +sec +sbc {c1},y +//FRAGMENT vbsaa=vbsxx_minus_pbsc1_derefidx_vbsz1 +ldy {z1} +txa +sec +sbc {c1},y +//FRAGMENT vbsaa=vbsyy_minus_pbsc1_derefidx_vbsz1 +tya +ldy {z1} +sec +sbc {c1},y +//FRAGMENT vbsxx=vbsz1_minus_pbsc1_derefidx_vbsz2 +lda {z1} +ldx {z2} +sec +sbc {c1},x +tax +//FRAGMENT vbsxx=vbsaa_minus_pbsc1_derefidx_vbsz1 +ldx {z1} +sec +sbc {c1},x +tax +//FRAGMENT vbsxx=vbsxx_minus_pbsc1_derefidx_vbsz1 +txa +ldx {z1} +sec +sbc {c1},x +tax +//FRAGMENT vbsxx=vbsyy_minus_pbsc1_derefidx_vbsz1 +ldx {z1} +tya +sec +sbc {c1},x +tax +//FRAGMENT vbsyy=vbsz1_minus_pbsc1_derefidx_vbsz2 +lda {z1} +ldy {z2} +sec +sbc {c1},y +tay +//FRAGMENT vbsyy=vbsaa_minus_pbsc1_derefidx_vbsz1 +ldy {z1} +sec +sbc {c1},y +tay +//FRAGMENT vbsyy=vbsxx_minus_pbsc1_derefidx_vbsz1 +ldy {z1} +txa +sec +sbc {c1},y +tay +//FRAGMENT vbsyy=vbsyy_minus_pbsc1_derefidx_vbsz1 +tya +ldy {z1} +sec +sbc {c1},y +tay +//FRAGMENT vbsz1=vbsz2_minus_pbsc1_derefidx_vbsxx +lda {z2} +sec +sbc {c1},x +sta {z1} +//FRAGMENT vbsz1=vbsaa_minus_pbsc1_derefidx_vbsxx +sec +sbc {c1},x +sta {z1} +//FRAGMENT vbsz1=vbsxx_minus_pbsc1_derefidx_vbsxx +txa +tay +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsz1=vbsyy_minus_pbsc1_derefidx_vbsxx +tya +sec +sbc {c1},x +sta {z1} +//FRAGMENT vbsaa=vbsz1_minus_pbsc1_derefidx_vbsxx +lda {z1} +sec +sbc {c1},x +//FRAGMENT vbsaa=vbsaa_minus_pbsc1_derefidx_vbsxx +sec +sbc {c1},x +//FRAGMENT vbsaa=vbsxx_minus_pbsc1_derefidx_vbsxx +txa +tay +sec +sbc {c1},y +//FRAGMENT vbsaa=vbsyy_minus_pbsc1_derefidx_vbsxx +tya +sec +sbc {c1},x +//FRAGMENT vbsxx=vbsz1_minus_pbsc1_derefidx_vbsxx +lda {z1} +sec +sbc {c1},x +tax +//FRAGMENT vbsxx=vbsaa_minus_pbsc1_derefidx_vbsxx +sec +sbc {c1},x +tax +//FRAGMENT vbsxx=vbsxx_minus_pbsc1_derefidx_vbsxx +txa +tax +sec +sbc {c1},x +tax +//FRAGMENT vbsxx=vbsyy_minus_pbsc1_derefidx_vbsxx +tya +sec +sbc {c1},x +tax +//FRAGMENT vbsyy=vbsz1_minus_pbsc1_derefidx_vbsxx +lda {z1} +sec +sbc {c1},x +tay +//FRAGMENT vbsyy=vbsaa_minus_pbsc1_derefidx_vbsxx +sec +sbc {c1},x +tay +//FRAGMENT vbsyy=vbsxx_minus_pbsc1_derefidx_vbsxx +txa +tay +sec +sbc {c1},y +tay +//FRAGMENT vbsyy=vbsyy_minus_pbsc1_derefidx_vbsxx +tya +sec +sbc {c1},x +tay +//FRAGMENT vbsz1=vbsz2_minus_pbsc1_derefidx_vbsyy +lda {z2} +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsz1=vbsaa_minus_pbsc1_derefidx_vbsyy +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsz1=vbsxx_minus_pbsc1_derefidx_vbsyy +txa +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsz1=vbsyy_minus_pbsc1_derefidx_vbsyy +tya +tay +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsaa=vbsz1_minus_pbsc1_derefidx_vbsyy +lda {z1} +sec +sbc {c1},y +//FRAGMENT vbsaa=vbsaa_minus_pbsc1_derefidx_vbsyy +sec +sbc {c1},y +//FRAGMENT vbsaa=vbsxx_minus_pbsc1_derefidx_vbsyy +txa +sec +sbc {c1},y +//FRAGMENT vbsaa=vbsyy_minus_pbsc1_derefidx_vbsyy +tya +tay +sec +sbc {c1},y +//FRAGMENT vbsxx=vbsz1_minus_pbsc1_derefidx_vbsyy +lda {z1} +sec +sbc {c1},y +tax +//FRAGMENT vbsxx=vbsaa_minus_pbsc1_derefidx_vbsyy +sec +sbc {c1},y +tax +//FRAGMENT vbsxx=vbsxx_minus_pbsc1_derefidx_vbsyy +txa +sec +sbc {c1},y +tax +//FRAGMENT vbsxx=vbsyy_minus_pbsc1_derefidx_vbsyy +tya +tax +sec +sbc {c1},x +tax +//FRAGMENT vbsyy=vbsz1_minus_pbsc1_derefidx_vbsyy +lda {z1} +sec +sbc {c1},y +tay +//FRAGMENT vbsyy=vbsaa_minus_pbsc1_derefidx_vbsyy +sec +sbc {c1},y +tay +//FRAGMENT vbsyy=vbsxx_minus_pbsc1_derefidx_vbsyy +txa +sec +sbc {c1},y +tay +//FRAGMENT vbsyy=vbsyy_minus_pbsc1_derefidx_vbsyy +tya +tay +sec +sbc {c1},y +tay +//FRAGMENT vbsaa=_deref_pbsc1 +lda {c1} +//FRAGMENT vbsxx=_deref_pbsc1 +ldx {c1} +//FRAGMENT vbsyy=_deref_pbsc1 +ldy {c1} +//FRAGMENT _deref_pbsc1=vbsxx +stx {c1} +//FRAGMENT _deref_pbsc1=vbsyy +sty {c1} +//FRAGMENT pbuz1=pbuz1_plus_1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT pbuz1_derefidx_vbuc1=vbuz2 +lda {z2} +ldy #{c1} +sta ({z1}),y +//FRAGMENT vbuz1=pbuz2_derefidx_vbuc1 +ldy #{c1} +lda ({z2}),y +sta {z1} +//FRAGMENT pbuz1_derefidx_vbuc1=vbuaa +ldy #{c1} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuc1=vbuxx +ldy #{c1} +txa +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuc1=vbuyy +tya +ldy #{c1} +sta ({z1}),y +//FRAGMENT vbuaa=pbuz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +//FRAGMENT vbuxx=pbuz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +tax +//FRAGMENT vbuyy=pbuz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +tay +//FRAGMENT vwuz1=vwuc1_plus_vbuz2 +lda {z2} +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT qbuz1_derefidx_vbuc1=pbuz2 +ldy #{c1} +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT qwuz1_derefidx_vbuc1=pwuz2 +ldy #{c1} +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT vwuz1=pwuz2_derefidx_vbuc1 +ldy #{c1} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT vwuz1=vwuc1_plus_vbuaa +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuc1_plus_vbuxx +txa +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuc1_plus_vbuyy +tya +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_ror_4 +lda {z2}+1 +lsr +sta {z1}+1 +lda {z2} +ror +sta {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +//FRAGMENT vwuz1=vwuz2_ror_8 +lda {z2}+1 +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1_ge_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bcc !+ +bne {la1} +lda {z1} +cmp #<{c1} +bcs {la1} +!: +//FRAGMENT vwuz1_ge_vbuc1_then_la1 +lda {z1}+1 +bne {la1} +lda {z1} +cmp #{c1} +bcs {la1} +!: +//FRAGMENT pbuc1_derefidx_vbuxx=_byte_vwuz1 +lda {z1} +sta {c1},x +//FRAGMENT vwuz1=vwuz1_rol_8 +lda {z1} +sta {z1}+1 +lda #0 +sta {z1} +//FRAGMENT vwuz1=vwuz1_ror_4 +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +//FRAGMENT pwsc1_derefidx_vbuz1=vwsc2 +ldy {z1} +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT _deref_pwsc1=_deref_pwsc2 +lda {c2} +sta {c1} +lda {c2}+1 +sta {c1}+1 +//FRAGMENT pwsc1_derefidx_vbuaa=vwsc2 +tay +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT pwsc1_derefidx_vbuxx=vwsc2 +lda #<{c2} +sta {c1},x +lda #>{c2} +sta {c1}+1,x +//FRAGMENT pwsc1_derefidx_vbuyy=vwsc2 +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT vbuz1_eq__deref_pbuc1_then_la1 +lda {c1} +cmp {z1} +beq {la1} +//FRAGMENT _deref_pbuc1_eq_0_then_la1 +lda {c1} +cmp #0 +beq {la1} +//FRAGMENT vbuz1=vbuz1_bor_vbuc1 +lda #{c1} +ora {z1} +sta {z1} +//FRAGMENT vbuz1=_deref_pbuc1_rol_4 +lda {c1} +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuz1=vbuz2_bor__deref_pbuc1 +lda {c1} +ora {z2} +sta {z1} +//FRAGMENT vduz1=vduz2_plus_vbuz3 +lda {z3} +clc +adc {z2} +sta {z1} +lda {z2}+1 +adc #0 +sta {z1}+1 +lda {z2}+2 +adc #0 +sta {z1}+2 +lda {z2}+3 +adc #0 +sta {z1}+3 +//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) +ldx {z3} +ldy {c2},x +lda {c1},y +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuc1_derefidx_vbuz1=_dec_pbuc1_derefidx_vbuz1 +ldx {z1} +dec {c1},x +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) +ldx {z2} +ldy {c2},x +lda {c1},y +ldy #0 +sta ({z1}),y +//FRAGMENT pbuc1_derefidx_vbuz1_le_pbuc2_derefidx_vbuz1_then_la1 +ldy {z1} +lda {c2},y +cmp {c1},y +bcs {la1} +//FRAGMENT vbuz1=_deref_pbuz2_bor_vbuc1 +lda #{c1} +ldy #0 +ora ({z2}),y +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz1 +ldy {z1} +lda ({z2}),y +sta {c1},y +//FRAGMENT vbuz1=vbuz2_bxor_pbuc1_derefidx_vbuz3 +lda {z2} +ldy {z3} +eor {c1},y +sta {z1} +//FRAGMENT vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 +lda {z2} +ldy {z3} +and {c1},y +sta {z1} +//FRAGMENT vbuz1=vbuz2_bor_vbuc1 +lda #{c1} +ora {z2} +sta {z1} +//FRAGMENT vduz1=vduz2_rol_2 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +lda {z2}+2 +rol +sta {z1}+2 +lda {z2}+3 +rol +sta {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +//FRAGMENT vwuz1=vwuc1_plus_vwuz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1} +//FRAGMENT vbuxx_eq__deref_pbuc1_then_la1 +cpx {c1} +beq {la1} +//FRAGMENT vbuxx=vbuxx_bor_vbuc1 +txa +ora #{c1} +tax +//FRAGMENT vbuyy=vbuyy_bor_vbuc1 +tya +ora #{c1} +tay +//FRAGMENT vbuaa=_deref_pbuc1_rol_4 +lda {c1} +asl +asl +asl +asl +//FRAGMENT vbuxx=_deref_pbuc1_rol_4 +lda {c1} +asl +asl +asl +asl +tax +//FRAGMENT vbuyy=_deref_pbuc1_rol_4 +lda {c1} +asl +asl +asl +asl +tay +//FRAGMENT vbuaa=vbuz1_bor__deref_pbuc1 +lda {c1} +ora {z1} +//FRAGMENT vbuxx=vbuz1_bor__deref_pbuc1 +lda {c1} +ora {z1} +tax +//FRAGMENT vbuyy=vbuz1_bor__deref_pbuc1 +lda {c1} +ora {z1} +tay +//FRAGMENT vbuz1=vbuaa_bor__deref_pbuc1 +ora {c1} +sta {z1} +//FRAGMENT vbuaa=vbuaa_bor__deref_pbuc1 +ora {c1} +//FRAGMENT vbuxx=vbuaa_bor__deref_pbuc1 +ora {c1} +tax +//FRAGMENT vbuyy=vbuaa_bor__deref_pbuc1 +ora {c1} +tay +//FRAGMENT vbuz1=vbuxx_bor__deref_pbuc1 +txa +ora {c1} +sta {z1} +//FRAGMENT vbuaa=vbuxx_bor__deref_pbuc1 +txa +ora {c1} +//FRAGMENT vbuxx=vbuxx_bor__deref_pbuc1 +txa +ora {c1} +tax +//FRAGMENT vbuyy=vbuxx_bor__deref_pbuc1 +txa +ora {c1} +tay +//FRAGMENT vbuz1=vbuyy_bor__deref_pbuc1 +tya +ora {c1} +sta {z1} +//FRAGMENT vbuaa=vbuyy_bor__deref_pbuc1 +tya +ora {c1} +//FRAGMENT vbuxx=vbuyy_bor__deref_pbuc1 +tya +ora {c1} +tax +//FRAGMENT vbuyy=vbuyy_bor__deref_pbuc1 +tya +ora {c1} +tay +//FRAGMENT vduz1=vduz2_plus_vbuxx +txa +clc +adc {z2} +sta {z1} +lda {z2}+1 +adc #0 +sta {z1}+1 +lda {z2}+2 +adc #0 +sta {z1}+2 +lda {z2}+3 +adc #0 +sta {z1}+3 +//FRAGMENT vduz1=vduz2_plus_vbuyy +tya +clc +adc {z2} +sta {z1} +lda {z2}+1 +adc #0 +sta {z1}+1 +lda {z2}+2 +adc #0 +sta {z1}+2 +lda {z2}+3 +adc #0 +sta {z1}+3 +//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuaa) +tax +ldy {c2},x +lda {c1},y +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) +ldy {c2},x +lda {c1},y +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuyy) +ldx {c2},y +lda {c1},x +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) +ldy {z2} +ldx {c2},y +tay +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuaa) +tay +ldx {c2},y +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) +ldy {c2},x +ldx {c1},y +tay +txa +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuyy) +ldx {c2},y +tay +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) +ldy {z2} +txa +ldx {c2},y +tay +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuaa) +tay +txa +ldx {c2},y +tay +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) +txa +tay +ldx {c2},y +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuyy) +txa +ldx {c2},y +tay +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) +ldx {z2} +lda {c2},x +tax +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuaa) +tax +lda {c2},x +tax +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) +lda {c2},x +tax +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuyy) +ldx {c2},y +lda {c1},x +sta ({z1}),y +//FRAGMENT pbuc1_derefidx_vbuxx=_dec_pbuc1_derefidx_vbuxx +dec {c1},x +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) +ldy {c2},x +lda {c1},y +ldy #0 +sta ({z1}),y +//FRAGMENT pbuc1_derefidx_vbuxx_le_pbuc2_derefidx_vbuxx_then_la1 +txa +tay +lda {c2},x +cmp {c1},y +bcs {la1} +//FRAGMENT vbuaa=_deref_pbuz1_bor_vbuc1 +lda #{c1} +ldy #0 +ora ({z1}),y +//FRAGMENT vbuxx=_deref_pbuz1_bor_vbuc1 +lda #{c1} +ldy #0 +ora ({z1}),y +tax +//FRAGMENT vbuyy=_deref_pbuz1_bor_vbuc1 +lda #{c1} +ldy #0 +ora ({z1}),y +tay +//FRAGMENT pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuaa +tay +lda ({z1}),y +sta {c1},y +//FRAGMENT vbuz1_neq_pbuc1_derefidx_vbuaa_then_la1 +tay +lda {c1},y +cmp {z1} +bne {la1} +//FRAGMENT vbuaa_neq_pbuc1_derefidx_vbuz1_then_la1 +ldy {z1} +cmp {c1},y +bne {la1} +//FRAGMENT vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuz2 +lda {z1} +ldy {z2} +eor {c1},y +//FRAGMENT vbuxx=vbuz1_bxor_pbuc1_derefidx_vbuz2 +lda {z1} +ldx {z2} +eor {c1},x +tax +//FRAGMENT vbuyy=vbuz1_bxor_pbuc1_derefidx_vbuz2 +lda {z1} +ldy {z2} +eor {c1},y +tay +//FRAGMENT vbuz1=vbuz2_bxor_pbuc1_derefidx_vbuxx +lda {c1},x +eor {z2} +sta {z1} +//FRAGMENT vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuxx +lda {c1},x +eor {z1} +//FRAGMENT vbuxx=vbuz1_bxor_pbuc1_derefidx_vbuxx +lda {c1},x +eor {z1} +tax +//FRAGMENT vbuyy=vbuz1_bxor_pbuc1_derefidx_vbuxx +lda {c1},x +eor {z1} +tay +//FRAGMENT vbuz1=vbuz2_bxor_pbuc1_derefidx_vbuyy +lda {c1},y +eor {z2} +sta {z1} +//FRAGMENT vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuyy +lda {c1},y +eor {z1} +//FRAGMENT vbuxx=vbuz1_bxor_pbuc1_derefidx_vbuyy +lda {c1},y +eor {z1} +tax +//FRAGMENT vbuyy=vbuz1_bxor_pbuc1_derefidx_vbuyy +lda {c1},y +eor {z1} +tay +//FRAGMENT vbuz1=vbuaa_bxor_pbuc1_derefidx_vbuz2 +ldy {z2} +eor {c1},y +sta {z1} +//FRAGMENT vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuz1 +ldy {z1} +eor {c1},y +//FRAGMENT vbuxx=vbuaa_bxor_pbuc1_derefidx_vbuz1 +ldx {z1} +eor {c1},x +tax +//FRAGMENT vbuyy=vbuaa_bxor_pbuc1_derefidx_vbuz1 +ldy {z1} +eor {c1},y +tay +//FRAGMENT vbuz1=vbuaa_bxor_pbuc1_derefidx_vbuxx +eor {c1},x +sta {z1} +//FRAGMENT vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuxx +eor {c1},x +//FRAGMENT vbuxx=vbuaa_bxor_pbuc1_derefidx_vbuxx +eor {c1},x +tax +//FRAGMENT vbuyy=vbuaa_bxor_pbuc1_derefidx_vbuxx +eor {c1},x +tay +//FRAGMENT vbuz1=vbuaa_bxor_pbuc1_derefidx_vbuyy +eor {c1},y +sta {z1} +//FRAGMENT vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuyy +eor {c1},y +//FRAGMENT vbuxx=vbuaa_bxor_pbuc1_derefidx_vbuyy +eor {c1},y +tax +//FRAGMENT vbuyy=vbuaa_bxor_pbuc1_derefidx_vbuyy +eor {c1},y +tay +//FRAGMENT vbuz1=vbuxx_bxor_pbuc1_derefidx_vbuz2 +ldy {z2} +txa +eor {c1},y +sta {z1} +//FRAGMENT vbuaa=vbuxx_bxor_pbuc1_derefidx_vbuz1 +ldy {z1} +txa +eor {c1},y +//FRAGMENT vbuxx=vbuxx_bxor_pbuc1_derefidx_vbuz1 +txa +ldx {z1} +eor {c1},x +tax +//FRAGMENT vbuyy=vbuxx_bxor_pbuc1_derefidx_vbuz1 +ldy {z1} +txa +eor {c1},y +tay +//FRAGMENT vbuz1=vbuxx_bxor_pbuc1_derefidx_vbuxx +txa +eor {c1},x +sta {z1} +//FRAGMENT vbuaa=vbuxx_bxor_pbuc1_derefidx_vbuxx +txa +eor {c1},x +//FRAGMENT vbuxx=vbuxx_bxor_pbuc1_derefidx_vbuxx +txa +eor {c1},x +tax +//FRAGMENT vbuyy=vbuxx_bxor_pbuc1_derefidx_vbuxx +txa +eor {c1},x +tay +//FRAGMENT vbuz1=vbuxx_bxor_pbuc1_derefidx_vbuyy +txa +eor {c1},y +sta {z1} +//FRAGMENT vbuaa=vbuxx_bxor_pbuc1_derefidx_vbuyy +txa +eor {c1},y +//FRAGMENT vbuxx=vbuxx_bxor_pbuc1_derefidx_vbuyy +txa +eor {c1},y +tax +//FRAGMENT vbuyy=vbuxx_bxor_pbuc1_derefidx_vbuyy +txa +eor {c1},y +tay +//FRAGMENT vbuz1=vbuyy_bxor_pbuc1_derefidx_vbuz2 +tya +ldy {z2} +eor {c1},y +sta {z1} +//FRAGMENT vbuaa=vbuyy_bxor_pbuc1_derefidx_vbuz1 +tya +ldy {z1} +eor {c1},y +//FRAGMENT vbuxx=vbuyy_bxor_pbuc1_derefidx_vbuz1 +ldx {z1} +tya +eor {c1},x +tax +//FRAGMENT vbuyy=vbuyy_bxor_pbuc1_derefidx_vbuz1 +tya +ldy {z1} +eor {c1},y +tay +//FRAGMENT vbuz1=vbuyy_bxor_pbuc1_derefidx_vbuxx +tya +eor {c1},x +sta {z1} +//FRAGMENT vbuaa=vbuyy_bxor_pbuc1_derefidx_vbuxx +tya +eor {c1},x +//FRAGMENT vbuxx=vbuyy_bxor_pbuc1_derefidx_vbuxx +tya +eor {c1},x +tax +//FRAGMENT vbuyy=vbuyy_bxor_pbuc1_derefidx_vbuxx +tya +eor {c1},x +tay +//FRAGMENT vbuz1=vbuyy_bxor_pbuc1_derefidx_vbuyy +tya +eor {c1},y +sta {z1} +//FRAGMENT vbuaa=vbuyy_bxor_pbuc1_derefidx_vbuyy +tya +eor {c1},y +//FRAGMENT vbuxx=vbuyy_bxor_pbuc1_derefidx_vbuyy +tya +eor {c1},y +tax +//FRAGMENT vbuyy=vbuyy_bxor_pbuc1_derefidx_vbuyy +tya +eor {c1},y +tay +//FRAGMENT vbuaa=vbuz1_band_pbuc1_derefidx_vbuz2 +lda {z1} +ldy {z2} +and {c1},y +//FRAGMENT vbuxx=vbuz1_band_pbuc1_derefidx_vbuz2 +lda {z1} +ldx {z2} +and {c1},x +tax +//FRAGMENT vbuyy=vbuz1_band_pbuc1_derefidx_vbuz2 +lda {z1} +ldy {z2} +and {c1},y +tay +//FRAGMENT vbuz1=vbuaa_band_pbuc1_derefidx_vbuz2 +ldy {z2} +and {c1},y +sta {z1} +//FRAGMENT vbuaa=vbuaa_band_pbuc1_derefidx_vbuz1 +ldy {z1} +and {c1},y +//FRAGMENT vbuxx=vbuaa_band_pbuc1_derefidx_vbuz1 +ldx {z1} +and {c1},x +tax +//FRAGMENT vbuyy=vbuaa_band_pbuc1_derefidx_vbuz1 +ldy {z1} +and {c1},y +tay +//FRAGMENT vbuz1=vbuxx_band_pbuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sax {z1} +//FRAGMENT vbuaa=vbuxx_band_pbuc1_derefidx_vbuz1 +ldy {z1} +txa +and {c1},y +//FRAGMENT vbuxx=vbuxx_band_pbuc1_derefidx_vbuz1 +ldy {z1} +lda {c1},y +axs #0 +//FRAGMENT vbuyy=vbuxx_band_pbuc1_derefidx_vbuz1 +ldy {z1} +txa +and {c1},y +tay +//FRAGMENT vbuz1=vbuyy_band_pbuc1_derefidx_vbuz2 +tya +ldy {z2} +and {c1},y +sta {z1} +//FRAGMENT vbuaa=vbuyy_band_pbuc1_derefidx_vbuz1 +tya +ldy {z1} +and {c1},y +//FRAGMENT vbuxx=vbuyy_band_pbuc1_derefidx_vbuz1 +ldx {z1} +tya +and {c1},x +tax +//FRAGMENT vbuyy=vbuyy_band_pbuc1_derefidx_vbuz1 +tya +ldy {z1} +and {c1},y +tay +//FRAGMENT vbuz1=vbuz2_band_pbuc1_derefidx_vbuxx +lda {c1},x +and {z2} +sta {z1} +//FRAGMENT vbuaa=vbuz1_band_pbuc1_derefidx_vbuxx +lda {c1},x +and {z1} +//FRAGMENT vbuxx=vbuz1_band_pbuc1_derefidx_vbuxx +lda {c1},x +and {z1} +tax +//FRAGMENT vbuyy=vbuz1_band_pbuc1_derefidx_vbuxx +lda {c1},x +and {z1} +tay +//FRAGMENT vbuz1=vbuaa_band_pbuc1_derefidx_vbuxx +and {c1},x +sta {z1} +//FRAGMENT vbuaa=vbuaa_band_pbuc1_derefidx_vbuxx +and {c1},x +//FRAGMENT vbuxx=vbuaa_band_pbuc1_derefidx_vbuxx +and {c1},x +tax +//FRAGMENT vbuyy=vbuaa_band_pbuc1_derefidx_vbuxx +and {c1},x +tay +//FRAGMENT vbuz1=vbuxx_band_pbuc1_derefidx_vbuxx +lda {c1},x +sax {z1} +//FRAGMENT vbuaa=vbuxx_band_pbuc1_derefidx_vbuxx +txa +and {c1},x +//FRAGMENT vbuxx=vbuxx_band_pbuc1_derefidx_vbuxx +lda {c1},x +axs #0 +//FRAGMENT vbuyy=vbuxx_band_pbuc1_derefidx_vbuxx +txa +and {c1},x +tay +//FRAGMENT vbuz1=vbuyy_band_pbuc1_derefidx_vbuxx +tya +and {c1},x +sta {z1} +//FRAGMENT vbuaa=vbuyy_band_pbuc1_derefidx_vbuxx +tya +and {c1},x +//FRAGMENT vbuxx=vbuyy_band_pbuc1_derefidx_vbuxx +tya +and {c1},x +tax +//FRAGMENT vbuyy=vbuyy_band_pbuc1_derefidx_vbuxx +tya +and {c1},x +tay +//FRAGMENT vbuz1=vbuz2_band_pbuc1_derefidx_vbuyy +lda {c1},y +and {z2} +sta {z1} +//FRAGMENT vbuaa=vbuz1_band_pbuc1_derefidx_vbuyy +lda {c1},y +and {z1} +//FRAGMENT vbuxx=vbuz1_band_pbuc1_derefidx_vbuyy +lda {c1},y +and {z1} +tax +//FRAGMENT vbuyy=vbuz1_band_pbuc1_derefidx_vbuyy +lda {c1},y +and {z1} +tay +//FRAGMENT vbuz1=vbuaa_band_pbuc1_derefidx_vbuyy +and {c1},y +sta {z1} +//FRAGMENT vbuaa=vbuaa_band_pbuc1_derefidx_vbuyy +and {c1},y +//FRAGMENT vbuxx=vbuaa_band_pbuc1_derefidx_vbuyy +ldx {c1},y +axs #0 +//FRAGMENT vbuz1=vbuxx_band_pbuc1_derefidx_vbuyy +lda {c1},y +sax {z1} +//FRAGMENT vbuz1=vbuyy_band_pbuc1_derefidx_vbuyy +tya +and {c1},y +sta {z1} +//FRAGMENT vbuaa=vbuxx_band_pbuc1_derefidx_vbuyy +txa +and {c1},y +//FRAGMENT vbuaa=vbuyy_band_pbuc1_derefidx_vbuyy +tya +and {c1},y +//FRAGMENT vbuxx=vbuxx_band_pbuc1_derefidx_vbuyy +lda {c1},y +axs #0 +//FRAGMENT vbuxx=vbuyy_band_pbuc1_derefidx_vbuyy +ldx {c1},y +tya +axs #0 +//FRAGMENT vbuyy=vbuxx_band_pbuc1_derefidx_vbuyy +txa +and {c1},y +tay +//FRAGMENT vbuyy=vbuyy_band_pbuc1_derefidx_vbuyy +tya +and {c1},y +tay +//FRAGMENT vbuaa=vbuz1_bor_vbuc1 +lda #{c1} +ora {z1} +//FRAGMENT vbuxx=vbuz1_bor_vbuc1 +lda #{c1} +ora {z1} +tax +//FRAGMENT vbuyy=vbuz1_bor_vbuc1 +lda #{c1} +ora {z1} +tay +//FRAGMENT vbuz1=vbuxx_bor_vbuc1 +txa +ora #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuxx_bor_vbuc1 +txa +ora #{c1} +//FRAGMENT vbuyy=vbuxx_bor_vbuc1 +txa +ora #{c1} +tay +//FRAGMENT vbuz1=vbuyy_bor_vbuc1 +tya +ora #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuyy_bor_vbuc1 +tya +ora #{c1} +//FRAGMENT vbuxx=vbuyy_bor_vbuc1 +tya +ora #{c1} +tax +//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuaa +tay +lda {c2},y +sta {c1} +//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuxx +lda {c2},x +sta {c1} +//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuyy +lda {c2},y +sta {c1} +//FRAGMENT vbuz1=vbuaa_ror_3 +lsr +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=vbuaa_ror_3 +lsr +lsr +lsr +//FRAGMENT vbuxx=vbuaa_ror_3 +lsr +lsr +lsr +tax +//FRAGMENT vbuyy=vbuaa_ror_3 +lsr +lsr +lsr +tay +//FRAGMENT vbuz1=vbuz2_band_pbuc1_derefidx_vbuaa +tay +lda {c1},y +and {z2} +sta {z1} +//FRAGMENT vbuz1=vbuxx_band_pbuc1_derefidx_vbuaa +tay +lda {c1},y +sax {z1} +//FRAGMENT vbuz1=vbuyy_band_pbuc1_derefidx_vbuaa +tax +tya +and {c1},x +sta {z1} +//FRAGMENT vbuaa=vbuz1_band_pbuc1_derefidx_vbuaa +tay +lda {c1},y +and {z1} +//FRAGMENT vbuaa=vbuxx_band_pbuc1_derefidx_vbuaa +tay +txa +and {c1},y +//FRAGMENT vbuaa=vbuyy_band_pbuc1_derefidx_vbuaa +tax +tya +and {c1},x +//FRAGMENT vbuxx=vbuz1_band_pbuc1_derefidx_vbuaa +tax +lda {c1},x +and {z1} +tax +//FRAGMENT vbuxx=vbuxx_band_pbuc1_derefidx_vbuaa +tay +lda {c1},y +axs #0 +//FRAGMENT vbuxx=vbuyy_band_pbuc1_derefidx_vbuaa +tax +tya +and {c1},x +tax +//FRAGMENT vbuyy=vbuz1_band_pbuc1_derefidx_vbuaa +tay +lda {c1},y +and {z1} +tay +//FRAGMENT vbuyy=vbuxx_band_pbuc1_derefidx_vbuaa +tay +txa +and {c1},y +tay +//FRAGMENT vbuyy=vbuyy_band_pbuc1_derefidx_vbuaa +tax +tya +and {c1},x +tay +//FRAGMENT vduz1=vduz1_plus_vbuxx +txa +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 vwuz1=vwuz1_band_vwuc1 +lda {z1} +and #<{c1} +sta {z1} +lda {z1}+1 +and #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=vwuc1_plus_vwuz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT isr_rom_sys_c64_entry + +//FRAGMENT isr_rom_sys_c64_exit +jmp $ea31 +//FRAGMENT vwuz1=pbuz2_bxor_vwuc1 +lda #<{c1} +eor {z2} +sta {z1} +lda #>{c1} +eor {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuz3 +ldx {z3} +ldy {z2} +lda ({z1}),y +ora {c1},x +sta ({z1}),y +//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuz3 +lda {z1} +ldy {z3} +eor ({z2}),y +sta {z1} +//FRAGMENT vbuz1=_neg_vbuz1 +lda {z1} +eor #$ff +clc +adc #$01 +sta {z1} +//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuaa +ldy {z2} +tax +lda ({z1}),y +ora {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuxx +ldy {z2} +lda ({z1}),y +ora {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuyy +tya +ldy {z2} +tax +lda ({z1}),y +ora {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuz2 +txa +ldx {z2} +tay +lda ({z1}),y +ora {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuaa +tay +txa +ldx {c1},y +tay +lda ({z1}),y +stx $ff +ora $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuxx +txa +tay +lda ({z1}),y +stx $ff +ora {c1},x +ldy $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuyy +txa +ldx {c1},y +tay +lda ({z1}),y +stx $ff +ora $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuz2 +lda ({z1}),y +ldx {z2} +ora {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuaa +tax +lda ({z1}),y +ora {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuxx +lda ({z1}),y +ora {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuyy +lda ({z1}),y +ora {c1},y +sta ({z1}),y +//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuaa +tay +lda {z1} +eor ({z2}),y +sta {z1} +//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuxx +txa +tay +lda {z1} +eor ({z2}),y +sta {z1} +//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuyy +lda {z1} +eor ({z2}),y +sta {z1} +//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuz2 +ldy {z2} +eor ({z1}),y +//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuaa +tay +eor ({z1}),y +//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuxx +stx $ff +ldy $ff +eor ({z1}),y +//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuyy +eor ({z1}),y +//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuz2 +ldy {z2} +txa +eor ({z1}),y +tax +//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuaa +tay +txa +eor ({z1}),y +tax +//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuxx +txa +tay +eor ({z1}),y +tax +//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuyy +txa +eor ({z1}),y +tax +//FRAGMENT vbuyy=_neg_vbuyy +dey +tya +eor #$ff +tay +//FRAGMENT vwuz1=pbuz1_bxor_vwuc1 +lda #<{c1} +eor {z1} +sta {z1} +lda #>{c1} +eor {z1}+1 +sta {z1}+1 +//FRAGMENT vbsz1=vbsz2_plus_vbsc1 +lax {z2} +axs #-[{c1}] +stx {z1} +//FRAGMENT vbsz1=vbsc1_plus_vbsz2 +lax {z2} +axs #-[{c1}] +stx {z1} +//FRAGMENT vbsz1=vbsz2_plus_vbsz2 +lda {z2} +asl +sta {z1} +//FRAGMENT vbsaa=vbsz1_plus_vbsc1 +lda #{c1} +clc +adc {z1} +//FRAGMENT vbsxx=vbsz1_plus_vbsc1 +lax {z1} +axs #-[{c1}] +//FRAGMENT vbsyy=vbsz1_plus_vbsc1 +lda #{c1} +clc +adc {z1} +tay +//FRAGMENT vbsaa=vbsc1_plus_vbsz1 +lda #{c1} +clc +adc {z1} +//FRAGMENT vbsxx=vbsc1_plus_vbsz1 +lax {z1} +axs #-[{c1}] +//FRAGMENT vbsyy=vbsc1_plus_vbsz1 +lda #{c1} +clc +adc {z1} +tay +//FRAGMENT vbsaa=vbsz1_plus_vbsz1 +lda {z1} +asl +//FRAGMENT vbsxx=vbsz1_plus_vbsz1 +lda {z1} +asl +tax +//FRAGMENT vbsyy=vbsz1_plus_vbsz1 +lda {z1} +asl +tay +//FRAGMENT vbsz1=vbsz2_rol_1 +lda {z2} +asl +sta {z1} +//FRAGMENT vbsz1=vbsz2_minus_vbsc1 +lax {z2} +axs #{c1} +stx {z1} +//FRAGMENT vbsaa=vbsz1_rol_1 +lda {z1} +asl +//FRAGMENT vbsxx=vbsz1_rol_1 +lda {z1} +asl +tax +//FRAGMENT vbsyy=vbsz1_rol_1 +lda {z1} +asl +tay +//FRAGMENT vbsz1=vbsxx_rol_1 +txa +asl +sta {z1} +//FRAGMENT vbsaa=vbsxx_rol_1 +txa +asl +//FRAGMENT vbsxx=vbsxx_rol_1 +txa +asl +tax +//FRAGMENT vbsyy=vbsxx_rol_1 +txa +asl +tay +//FRAGMENT vbsz1=vbsyy_rol_1 +tya +asl +sta {z1} +//FRAGMENT vbsaa=vbsyy_rol_1 +tya +asl +//FRAGMENT vbsxx=vbsyy_rol_1 +tya +asl +tax +//FRAGMENT vbsyy=vbsyy_rol_1 +tya +asl +tay +//FRAGMENT vbsz1=vbsaa_minus_vbsc1 +sec +sbc #{c1} +sta {z1} +//FRAGMENT vbsz1=vbsxx_minus_vbsc1 +txa +axs #{c1} +stx {z1} +//FRAGMENT vbsz1=vbsyy_minus_vbsc1 +tya +sec +sbc #{c1} +sta {z1} +//FRAGMENT vbsaa=vbsz1_minus_vbsc1 +lda {z1} +sec +sbc #{c1} +//FRAGMENT vbsaa=vbsaa_minus_vbsc1 +sec +sbc #{c1} +//FRAGMENT vbsaa=vbsxx_minus_vbsc1 +txa +sec +sbc #{c1} +//FRAGMENT vbsaa=vbsyy_minus_vbsc1 +tya +sec +sbc #{c1} +//FRAGMENT vbsxx=vbsz1_minus_vbsc1 +lax {z1} +axs #{c1} +//FRAGMENT vbsxx=vbsaa_minus_vbsc1 +tax +axs #{c1} +//FRAGMENT vbsxx=vbsyy_minus_vbsc1 +tya +tax +axs #{c1} +//FRAGMENT vbsyy=vbsz1_minus_vbsc1 +lda {z1} +sec +sbc #{c1} +tay +//FRAGMENT vbsyy=vbsaa_minus_vbsc1 +sec +sbc #{c1} +tay +//FRAGMENT vbsyy=vbsxx_minus_vbsc1 +txa +sec +sbc #{c1} +tay +//FRAGMENT vbuc1_gt_vbuz1_then_la1 +lda {z1} +cmp #{c1} +bcc {la1} +//FRAGMENT vbuc1_gt_vbuxx_then_la1 +cpx #{c1} +bcc {la1} +//FRAGMENT vwuz1=vbuz2_rol_1 +lda {z2} +asl +sta {z1} +lda #0 +rol +sta {z1}+1 +//FRAGMENT vwuz1=vbuxx_rol_1 +txa +asl +sta {z1} +lda #0 +rol +sta {z1}+1 +//FRAGMENT vwuz1=vbuyy_rol_1 +tya +asl +sta {z1} +lda #0 +rol +sta {z1}+1 +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy +lda {c1},y +tay +//FRAGMENT vbsaa=vbsc1_minus_vbsz1 +lda #{c1} +sec +sbc {z1} +//FRAGMENT vbsaa=vbsc1_minus_vbsaa +eor #$ff +sec +adc #{c1} +//FRAGMENT vbsaa=vbsc1_minus_vbsxx +txa +eor #$ff +sec +adc #{c1} +//FRAGMENT vbsaa=vbsc1_minus_vbsyy +tya +eor #$ff +sec +adc #{c1} +//FRAGMENT vbsyy=vbsc1_minus_vbsz1 +lda #{c1} +sec +sbc {z1} +tay +//FRAGMENT vbsyy=vbsc1_minus_vbsaa +eor #$ff +sec +adc #{c1} +tay +//FRAGMENT vbsyy=vbsc1_minus_vbsxx +txa +eor #$ff +sec +adc #{c1} +tay +//FRAGMENT vbsyy=vbsc1_minus_vbsyy +tya +eor #$ff +sec +adc #{c1} +tay +//FRAGMENT 0_neq_vbsaa_then_la1 +cmp #0 +bne {la1} +//FRAGMENT vbsyy=vbsz1_minus_vbsaa +eor #$ff +sec +adc {z1} +tay +//FRAGMENT vbsyy=vbsxx_minus_vbsaa +sta $ff +txa +sec +sbc $ff +tay +//FRAGMENT vbsyy=vbsyy_minus_vbsaa +sta $ff +tya +sec +sbc $ff +tay +//FRAGMENT vbsyy_lt_0_then_la1 +cpy #0 +bmi {la1} +//FRAGMENT vbsz1_neq_0_then_la1 +lda {z1} +cmp #0 +bne {la1} +//FRAGMENT vwsz1=vbsz2 +lda {z2} +sta {z1} +and #$80 +beq !+ +lda #$ff +!: +sta {z1}+1 +//FRAGMENT vbsaa_neq_0_then_la1 +cmp #0 +bne {la1} +//FRAGMENT vwsz1=vbsaa +sta {z1} +and #$80 +beq !+ +lda #$ff +!: +sta {z1}+1 +//FRAGMENT vwsz1=vbsxx +txa +sta {z1} +and #$80 +beq !+ +lda #$ff +!: +sta {z1}+1 +//FRAGMENT vwsz1=vbsyy +tya +sta {z1} +and #$80 +beq !+ +lda #$ff +!: +sta {z1}+1 +//FRAGMENT vbsxx_neq_0_then_la1 +cpx #0 +bne {la1} +//FRAGMENT pwsz1=pwsc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=_hi_vdsz2 +lda {z2}+2 +sta {z1} +lda {z2}+3 +sta {z1}+1 +//FRAGMENT pwsz1=pwsz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT pwsz1=pwsc1_plus_vwuz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vduz1_lt_vduc1_then_la1 +lda {z1}+3 +cmp #>{c1}>>$10 +bcc {la1} +bne !+ +lda {z1}+2 +cmp #<{c1}>>$10 +bcc {la1} +bne !+ +lda {z1}+1 +cmp #>{c1} +bcc {la1} +bne !+ +lda {z1} +cmp #<{c1} +bcc {la1} +!: +//FRAGMENT vduz1=vduc1_minus_vduz1 +lda #<{c1} +sec +sbc {z1} +sta {z1} +lda #>{c1} +sbc {z1}+1 +sta {z1}+1 +lda #<{c1}>>$10 +sbc {z1}+2 +sta {z1}+2 +lda #>{c1}>>$10 +sbc {z1}+3 +sta {z1}+3 +//FRAGMENT vduz1=vduz2_rol_3 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +lda {z2}+2 +rol +sta {z1}+2 +lda {z2}+3 +rol +sta {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +//FRAGMENT vwuz1=vwuz2_minus_vwuc1 +lda {z2} +sec +sbc #<{c1} +sta {z1} +lda {z2}+1 +sbc #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=_byte_vwsz2 +lda {z2} +sta {z1} +//FRAGMENT vbsz1=_sbyte_vwsz2 +lda {z2} +sta {z1} +//FRAGMENT vduz1=vduz2_rol_vbuz3 +ldy {z3} +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpy #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +dey +bne !- +!e: +//FRAGMENT vbuaa=_byte_vwsz1 +lda {z1} +//FRAGMENT vbuxx=_byte_vwsz1 +lda {z1} +tax +//FRAGMENT vbuyy=_byte_vwsz1 +lda {z1} +tay +//FRAGMENT vbsaa=_sbyte_vwsz1 +lda {z1} +//FRAGMENT vbsxx=_sbyte_vwsz1 +lda {z1} +tax +//FRAGMENT vbsyy=_sbyte_vwsz1 +lda {z1} +tay +//FRAGMENT vduz1=vduz2_rol_vbuxx +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpx #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +dex +bne !- +!e: +//FRAGMENT vduz1=vduz2_rol_vbuyy +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpy #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +dey +bne !- +!e: +//FRAGMENT vduz1=vduz1_rol_3 +ldy #3 +!: +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +dey +bne !- +//FRAGMENT pwsz1=pwsc1_plus_vwuz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vduz1=vduz1_rol_vbuxx +cpx #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +dex +bne !- +!e: +//FRAGMENT pssz1=pssc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_minus_1 +lda {z1} +sec +sbc #1 +sta {z1} +lda {z1}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT vbuz1=vbuz1_minus_1 +dec {z1} +//FRAGMENT pbsz1_derefidx_vbuc1=pbsz1_derefidx_vbuc1_plus_pbsz1_derefidx_vbuc2 +ldy #{c2} +lda ({z1}),y +ldy #{c1} +tax +lda ({z1}),y +stx $ff +clc +adc $ff +sta ({z1}),y +//FRAGMENT pbsz1_derefidx_vbuc1_lt_vbsc2_then_la1 +ldy #{c1} +lda ({z1}),y + +sec +sbc #{c2} +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT pbsz1_derefidx_vbuc1=vbsc2 +lda #{c2} +ldy #{c1} +sta ({z1}),y +//FRAGMENT pwsz1_derefidx_vbuc1_gt_vwsc2_then_la1 +ldy #{c1} +lda #<{c2} +cmp ({z1}),y +iny +lda #>{c2} +sbc ({z1}),y +bvc !+ +eor #$80 +!: +bmi {la1} +!e: +//FRAGMENT pwsz1_derefidx_vbuc1_ge_vwsc2_then_la1 +ldy #{c1} +lda ({z1}),y +cmp #<{c2} +iny +lda ({z1}),y +sbc #>{c2} +bvc !+ +eor #$80 +!: +bpl {la1} +//FRAGMENT pwsz1_derefidx_vbuc1=pwsz1_derefidx_vbuc1_plus_pbsz1_derefidx_vbuc2 +ldy #{c2} +lda ({z1}),y +sta $fe +ora #$7f +bmi !+ +lda #0 +!: +sta $ff +ldy #{c1} +clc +lda ({z1}),y +adc $fe +sta ({z1}),y +iny +lda ({z1}),y +adc $fe +sta ({z1}),y +//FRAGMENT pbuc1_derefidx_vbuz1_ge_vbuc2_then_la1 +ldy {z1} +lda {c1},y +cmp #{c2} +bcs {la1} +//FRAGMENT vwsz1=pwsz2_derefidx_vbuc1_ror_vbuc2 +ldx #{c2} +ldy #{c1} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +cpx #0 +beq !e+ +!: +lda {z1}+1 +cmp #$80 +ror {z1}+1 +ror {z1} +dex +bne !- +!e: +//FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwsz2 +ldy {z1} +lda {z2} +sta {c1},y +//FRAGMENT pssz1=pssz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT pwsz1_derefidx_vbuc1=vwsc2 +ldy #{c1} +lda #<{c2} +sta ({z1}),y +iny +lda #>{c2} +sta ({z1}),y +//FRAGMENT pbsz1_derefidx_vbuc1=vbsz2 +lda {z2} +ldy #{c1} +sta ({z1}),y +//FRAGMENT pbuc1_derefidx_vbuz1_lt_vbuc2_then_la1 +ldy {z1} +lda {c1},y +cmp #{c2} +bcc {la1} +//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuz1_then_la1 +ldy {z1} +lda {c2},y +cmp #{c1} +beq {la1} +//FRAGMENT pbsz1_derefidx_vbuc1=vbsxx +ldy #{c1} +txa +sta ({z1}),y +//FRAGMENT pbuc1_derefidx_vbuaa_lt_vbuc2_then_la1 +tay +lda {c1},y +cmp #{c2} +bcc {la1} +//FRAGMENT pbuc1_derefidx_vbuxx_lt_vbuc2_then_la1 +lda {c1},x +cmp #{c2} +bcc {la1} +//FRAGMENT pbuc1_derefidx_vbuyy_lt_vbuc2_then_la1 +lda {c1},y +cmp #{c2} +bcc {la1} +//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuaa_then_la1 +tay +lda {c2},y +cmp #{c1} +beq {la1} +//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuxx_then_la1 +lda {c2},x +cmp #{c1} +beq {la1} +//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuyy_then_la1 +lda {c2},y +cmp #{c1} +beq {la1} +//FRAGMENT vbuxx=vbuxx_minus_1 +dex +//FRAGMENT vbuyy=vbuyy_minus_1 +tya +tay +dey +//FRAGMENT _deref_pwsc1=vwsz1 +lda {z1} +sta {c1} +lda {z1}+1 +sta {c1}+1 +//FRAGMENT pwuc1_derefidx_vbuz1=vbuz2 +lda {z2} +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT vbuz1=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +sta {z1} +//FRAGMENT _deref_pbuc1_lt_vbuz1_then_la1 +lda {c1} +cmp {z1} +bcc {la1} +//FRAGMENT vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1 +lda {z1} +ldx {z2} +ldy {c2},x +cmp {c1},y +bcs {la1} +//FRAGMENT vbuz1_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1 +lda {z1} +ldx {z2} +ldy {c2},x +cmp {c1},y +bcc {la1} +//FRAGMENT vbuz1=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) +ldx {z2} +ldy {c2},x +ldx {c1},y +stx {z1} +//FRAGMENT vbuz1=_lo_pwuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +//FRAGMENT vbuz1=_hi_pwuc1_derefidx_vbuz2 +ldy {z2} +lda {c1}+1,y +sta {z1} +//FRAGMENT pwuc1_derefidx_vbuz1=vbuxx +ldy {z1} +txa +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=vbuyy +tya +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuaa=vbuz1 +tay +lda {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuaa=vbuxx +tay +txa +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuaa=vbuyy +tax +tya +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=vbuz1 +lda {z1} +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=vbuxx +txa +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=vbuyy +tya +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=vbuz1 +lda {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=vbuxx +txa +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=vbuyy +tya +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT vbuaa=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +//FRAGMENT vbuxx=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +tax +//FRAGMENT vbuyy=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +tay +//FRAGMENT _deref_pbuc1_lt_vbuaa_then_la1 +ldy {c1} +sta $ff +cpy $ff +bcc {la1} +//FRAGMENT vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuaa)_then_la1 +tax +lda {z1} +ldy {c2},x +cmp {c1},y +bcs {la1} +//FRAGMENT vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 +lda {z1} +ldy {c2},x +cmp {c1},y +bcs {la1} +//FRAGMENT vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 +lda {z1} +ldx {c2},y +cmp {c1},x +bcs {la1} +//FRAGMENT vbuaa_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 +ldx {z1} +ldy {c2},x +cmp {c1},y +bcs {la1} +//FRAGMENT vbuz1_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 +lda {z1} +ldy {c2},x +cmp {c1},y +bcc {la1} +//FRAGMENT vbuz1_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 +lda {z1} +ldx {c2},y +cmp {c1},x +bcc {la1} +//FRAGMENT vbuxx_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 +ldy {z1} +txa +ldx {c2},y +cmp {c1},x +bcc {la1} +//FRAGMENT vbuxx_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 +txa +ldy {c2},x +cmp {c1},y +bcc {la1} +//FRAGMENT vbuxx_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 +txa +ldx {c2},y +cmp {c1},x +bcc {la1} +//FRAGMENT vbuyy_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 +ldx {z1} +tya +ldy {c2},x +cmp {c1},y +bcc {la1} +//FRAGMENT vbuyy_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 +tya +ldy {c2},x +cmp {c1},y +bcc {la1} +//FRAGMENT vbuyy_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 +tya +ldx {c2},y +cmp {c1},x +bcc {la1} +//FRAGMENT vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) +ldx {z1} +ldy {c2},x +lda {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) +ldx {z1} +ldy {c2},x +ldx {c1},y +//FRAGMENT vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) +ldy {z1} +ldx {c2},y +ldy {c1},x +//FRAGMENT vbuaa=_lo_pwuc1_derefidx_vbuz1 +ldy {z1} +lda {c1},y +//FRAGMENT vbuxx=_lo_pwuc1_derefidx_vbuz1 +ldx {z1} +lda {c1},x +tax +//FRAGMENT vbuyy=_lo_pwuc1_derefidx_vbuz1 +ldy {z1} +lda {c1},y +tay +//FRAGMENT vbuz1=_lo_pwuc1_derefidx_vbuaa +tay +lda {c1},y +sta {z1} +//FRAGMENT vbuaa=_lo_pwuc1_derefidx_vbuaa +tay +lda {c1},y +//FRAGMENT vbuxx=_lo_pwuc1_derefidx_vbuaa +tax +lda {c1},x +tax +//FRAGMENT vbuyy=_lo_pwuc1_derefidx_vbuaa +tay +lda {c1},y +tay +//FRAGMENT vbuz1=_lo_pwuc1_derefidx_vbuxx +lda {c1},x +sta {z1} +//FRAGMENT vbuaa=_lo_pwuc1_derefidx_vbuxx +lda {c1},x +//FRAGMENT vbuxx=_lo_pwuc1_derefidx_vbuxx +lda {c1},x +tax +//FRAGMENT vbuyy=_lo_pwuc1_derefidx_vbuxx +lda {c1},x +tay +//FRAGMENT vbuz1=_lo_pwuc1_derefidx_vbuyy +lda {c1},y +sta {z1} +//FRAGMENT vbuaa=_lo_pwuc1_derefidx_vbuyy +lda {c1},y +//FRAGMENT vbuxx=_lo_pwuc1_derefidx_vbuyy +lda {c1},y +tax +//FRAGMENT vbuyy=_lo_pwuc1_derefidx_vbuyy +lda {c1},y +tay +//FRAGMENT vbuz1=_hi_pwuc1_derefidx_vbuxx +lda {c1}+1,x +sta {z1} +//FRAGMENT vbuaa=_hi_pwuc1_derefidx_vbuz1 +ldy {z1} +lda {c1}+1,y +//FRAGMENT vbuaa=_hi_pwuc1_derefidx_vbuxx +lda {c1}+1,x +//FRAGMENT vbuxx=_hi_pwuc1_derefidx_vbuz1 +ldx {z1} +lda {c1}+1,x +tax +//FRAGMENT vbuxx=_hi_pwuc1_derefidx_vbuxx +lda {c1}+1,x +tax +//FRAGMENT vbuyy=_hi_pwuc1_derefidx_vbuz1 +ldy {z1} +lda {c1}+1,y +tay +//FRAGMENT vbuyy=_hi_pwuc1_derefidx_vbuxx +lda {c1}+1,x +tay +//FRAGMENT vbuxx_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 +ldy {z1} +txa +ldx {c2},y +cmp {c1},x +bcs {la1} +//FRAGMENT vbuxx_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 +txa +ldy {c2},x +cmp {c1},y +bcs {la1} +//FRAGMENT vbuxx_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 +txa +ldx {c2},y +cmp {c1},x +bcs {la1} +//FRAGMENT vbuyy_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 +ldx {z1} +tya +ldy {c2},x +cmp {c1},y +bcs {la1} +//FRAGMENT vbuyy_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 +tya +ldy {c2},x +cmp {c1},y +bcs {la1} +//FRAGMENT vbuyy_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 +tya +ldx {c2},y +cmp {c1},x +bcs {la1} +//FRAGMENT _deref_pbuc1_lt_vbuxx_then_la1 +lda {c1} +stx $ff +cmp $ff +bcc {la1} +//FRAGMENT _deref_pbuc1_lt_vbuyy_then_la1 +ldx {c1} +sty $ff +cpx $ff +bcc {la1} +//FRAGMENT vbsxx=pbsc1_derefidx_vbuyy +ldx {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuc2 +ldx {z1} +ldy #{c2} +lda ({z2}),y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuc2 +ldy #{c2} +lda ({z1}),y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuc2 +tya +ldy #{c2} +tax +lda ({z1}),y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuc2 +ldy #{c2} +tax +lda ({z1}),y +sta {c1},x +//FRAGMENT _deref_qssc1=pssc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT pssc1_neq_pssz1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT vbuz1=vbuc1_plus__deref_pbuz2 +lda #{c1} +clc +ldy #0 +adc ({z2}),y +sta {z1} +//FRAGMENT vbuz1=_lo_qssz2_derefidx_vbuc1 +ldy #{c1} +lda ({z2}),y +sta {z1} +//FRAGMENT vbuz1=_hi_qssz2_derefidx_vbuc1 +ldy #{c1}+1 +lda ({z2}),y +sta {z1} +//FRAGMENT pssz1=qssz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +pha +iny +lda ({z1}),y +sta {z1}+1 +pla +sta {z1} +//FRAGMENT vbuaa=vbuc1_plus__deref_pbuz1 +lda #{c1} +clc +ldy #0 +adc ({z1}),y +//FRAGMENT vbuxx=vbuc1_plus__deref_pbuz1 +ldy #0 +lda ({z1}),y +tax +axs #-[{c1}] +//FRAGMENT vbuyy=vbuc1_plus__deref_pbuz1 +lda #{c1} +clc +ldy #0 +adc ({z1}),y +tay +//FRAGMENT vbuaa=_lo_qssz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +//FRAGMENT vbuxx=_lo_qssz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +tax +//FRAGMENT vbuyy=_lo_qssz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +tay +//FRAGMENT vbuaa=_hi_qssz1_derefidx_vbuc1 +ldy #{c1}+1 +lda ({z1}),y +//FRAGMENT vbuxx=_hi_qssz1_derefidx_vbuc1 +ldy #{c1}+1 +lda ({z1}),y +tax +//FRAGMENT vbuyy=_hi_qssz1_derefidx_vbuc1 +ldy #{c1}+1 +lda ({z1}),y +tay +//FRAGMENT pssc1_derefidx_vbuz1=pssc2_derefidx_vbuz1_memcpy_vbuc3 +ldx #{c3} +ldy {z1} +!: +lda {c2},y +sta {c1},y +iny +dex +bne !- +//FRAGMENT pssc1_derefidx_vbuaa=pssc2_derefidx_vbuaa_memcpy_vbuc3 +ldx #{c3} +tay +!: +lda {c2},y +sta {c1},y +iny +dex +bne !- +//FRAGMENT pssc1_derefidx_vbuxx=pssc2_derefidx_vbuxx_memcpy_vbuc3 +ldy #{c3} +!: +lda {c2},x +sta {c1},x +inx +dey +bne !- +//FRAGMENT pssc1_derefidx_vbuyy=pssc2_derefidx_vbuyy_memcpy_vbuc3 +ldx #{c3} +!: +lda {c2},y +sta {c1},y +iny +dex +bne !- +//FRAGMENT vbum1_lt_vbuc1_then_la1 +lda {m1} +cmp #{c1} +bcc {la1} +//FRAGMENT pbuc1_derefidx_vbum1=vbum1 +ldy {m1} +tya +sta {c1},y +//FRAGMENT pwuc1_derefidx_vbuaa=vwuc2 +tay +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT _deref_pbuc1_ge_vbuc2_then_la1 +lda {c1} +cmp #{c2} +bcs {la1} +//FRAGMENT vboz1=vboxx +txa +sta {z1} +//FRAGMENT vboaa=vboxx +txa +//FRAGMENT vboxx=vboaa +tax +//FRAGMENT vboxx=vboyy +tya +tax +//FRAGMENT vboyy=vboxx +txa +tay +//FRAGMENT vbsz1=vbsz1_minus_vbsxx +txa +eor #$ff +sec +adc {z1} +sta {z1} +//FRAGMENT vwsz1=vwsz1_minus_vwsc1 +lda {z1} +sec +sbc #<{c1} +sta {z1} +lda {z1}+1 +sbc #>{c1} +sta {z1}+1 +//FRAGMENT vbsz1=pbsc1_derefidx_vbuz2_minus_pbsc2_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sec +sbc {c2},y +sta {z1} +//FRAGMENT pbsz1=pbsc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT _deref_pbsz1=vbsz2 +lda {z2} +ldy #0 +sta ({z1}),y +//FRAGMENT pbsz1=_inc_pbsz1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT vbsaa=pbsc1_derefidx_vbuz1_minus_pbsc2_derefidx_vbuz1 +ldy {z1} +lda {c1},y +sec +sbc {c2},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbuz1_minus_pbsc2_derefidx_vbuz1 +ldx {z1} +lda {c1},x +sec +sbc {c2},x +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbuz1_minus_pbsc2_derefidx_vbuz1 +ldy {z1} +lda {c1},y +sec +sbc {c2},y +tay +//FRAGMENT vbsz1=pbsc1_derefidx_vbuaa_minus_pbsc2_derefidx_vbuaa +tay +lda {c1},y +sec +sbc {c2},y +sta {z1} +//FRAGMENT vbsaa=pbsc1_derefidx_vbuaa_minus_pbsc2_derefidx_vbuaa +tay +lda {c1},y +sec +sbc {c2},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbuaa_minus_pbsc2_derefidx_vbuaa +tax +lda {c1},x +sec +sbc {c2},x +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbuaa_minus_pbsc2_derefidx_vbuaa +tay +lda {c1},y +sec +sbc {c2},y +tay +//FRAGMENT vbsz1=pbsc1_derefidx_vbuxx_minus_pbsc2_derefidx_vbuxx +lda {c1},x +sec +sbc {c2},x +sta {z1} +//FRAGMENT vbsaa=pbsc1_derefidx_vbuxx_minus_pbsc2_derefidx_vbuxx +lda {c1},x +sec +sbc {c2},x +//FRAGMENT vbsxx=pbsc1_derefidx_vbuxx_minus_pbsc2_derefidx_vbuxx +lda {c1},x +sec +sbc {c2},x +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbuxx_minus_pbsc2_derefidx_vbuxx +lda {c1},x +sec +sbc {c2},x +tay +//FRAGMENT vbsz1=pbsc1_derefidx_vbuyy_minus_pbsc2_derefidx_vbuyy +lda {c1},y +sec +sbc {c2},y +sta {z1} +//FRAGMENT vbsaa=pbsc1_derefidx_vbuyy_minus_pbsc2_derefidx_vbuyy +lda {c1},y +sec +sbc {c2},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbuyy_minus_pbsc2_derefidx_vbuyy +lda {c1},y +sec +sbc {c2},y +tax +//FRAGMENT vbsyy=pbsc1_derefidx_vbuyy_minus_pbsc2_derefidx_vbuyy +lda {c1},y +sec +sbc {c2},y +tay +//FRAGMENT _deref_pbsz1=vbsaa +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbsz1=vbsxx +txa +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbsz1=vbsyy +tya +ldy #0 +sta ({z1}),y +//FRAGMENT vwuz1=_deref_pwuc1 +lda {c1} +sta {z1} +lda {c1}+1 +sta {z1}+1 +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_minus_1 +ldx {z1} +lda {c1},x +bne !+ +dec {c1}+1,x +!: +dec {c1},x +//FRAGMENT pwuc1_derefidx_vbuaa=pwuc1_derefidx_vbuaa_minus_1 +tax +lda {c1},x +bne !+ +dec {c1}+1,x +!: +dec {c1},x +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_minus_1 +lda {c1},x +bne !+ +dec {c1}+1,x +!: +dec {c1},x +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_minus_1 +sec +lda {c1},y +sbc #$01 +sta {c1},y +lda {c1}+1,y +sbc #$00 +sta {c1}+1,y +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_1 +ldx {z2} +ldy {c1},x +iny +sty {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_1 +ldy {z1} +lda {c1},y +clc +adc #1 +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_1 +ldy {z1} +ldx {c1},y +inx +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_1 +ldx {z1} +ldy {c1},x +iny +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_1 +tax +ldy {c1},x +iny +sty {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_1 +tay +lda {c1},y +clc +adc #1 +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_1 +tay +ldx {c1},y +inx +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_1 +tax +ldy {c1},x +iny +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_1 +ldy {c1},x +iny +sty {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_1 +lda {c1},x +clc +adc #1 +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_1 +ldy {c1},x +iny +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_1 +ldx {c1},y +inx +stx {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_1 +lda {c1},y +clc +adc #1 +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_1 +ldx {c1},y +inx +//FRAGMENT vwuz1_eq_vwuz2_then_la1 +lda {z1} +cmp {z2} +bne !+ +lda {z1}+1 +cmp {z2}+1 +beq {la1} +!: +//FRAGMENT vwuz1_le_vwuz2_then_la1 +lda {z1}+1 +cmp {z2}+1 +bne !+ +lda {z1} +cmp {z2} +beq {la1} +!: +bcc {la1} +//FRAGMENT vduz1=vwuz2_dword_vwuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +lda {z2} +sta {z1}+2 +lda {z2}+1 +sta {z1}+3 +//FRAGMENT vduz1_lt_vwuc1_then_la1 +NO_SYNTHESIS +//FRAGMENT vduz1_lt_vwsc1_then_la1 +NO_SYNTHESIS +//FRAGMENT vduz1=vduz2_rol_4 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +lda {z2}+2 +rol +sta {z1}+2 +lda {z2}+3 +rol +sta {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +//FRAGMENT vduz1=vduz2_rol_1 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +lda {z2}+2 +rol +sta {z1}+2 +lda {z2}+3 +rol +sta {z1}+3 +//FRAGMENT vduz1=vduz1_plus_vwuc1 +lda {z1} +clc +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +lda {z1}+2 +adc #0 +sta {z1}+2 +lda {z1}+3 +adc #0 +sta {z1}+3 +//FRAGMENT vduz1=vduz1_rol_2 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +//FRAGMENT vbsz1_gt_0_then_la1 +lda {z1} +cmp #0 +beq !+ +bpl {la1} +!: +//FRAGMENT vbuz1=vbuc1_minus_vbuz1 +lda #{c1} +sec +sbc {z1} +sta {z1} +//FRAGMENT vbsz1=vbsz2_ror_vbuz3 +lda {z2} +ldy {z3} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +sta {z1} +//FRAGMENT vbsz1=vbsz1_plus_vbsz2 +lda {z1} +clc +adc {z2} +sta {z1} +//FRAGMENT vbuz1=vbuz1_minus_pbuc1_derefidx_vbuz2 +lda {z1} +ldy {z2} +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbsaa_neq_vbsc1_then_la1 +cmp #{c1} +bne {la1} +//FRAGMENT vbsaa_gt_0_then_la1 +cmp #0 +beq !+ +bpl {la1} +!: +//FRAGMENT vbsxx_gt_0_then_la1 +txa +cmp #0 +beq !+ +bpl {la1} +!: +//FRAGMENT vbsyy_gt_0_then_la1 +tya +cmp #0 +beq !+ +bpl {la1} +!: +//FRAGMENT vbsaa=vbsz1_ror_vbuz2 +lda {z1} +ldy {z2} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +//FRAGMENT vbsxx=vbsz1_ror_vbuz2 +lda {z1} +ldx {z2} +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsz1_ror_vbuz2 +lda {z1} +ldy {z2} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsaa_ror_vbuz2 +ldy {z2} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsaa_ror_vbuz1 +ldy {z1} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +//FRAGMENT vbsxx=vbsaa_ror_vbuz1 +ldx {z1} +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsaa_ror_vbuz1 +ldy {z1} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsxx_ror_vbuz2 +ldy {z2} +txa +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsxx_ror_vbuz1 +ldy {z1} +txa +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +//FRAGMENT vbsxx=vbsxx_ror_vbuz1 +txa +ldx {z1} +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsxx_ror_vbuz1 +ldy {z1} +txa +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsyy_ror_vbuz2 +tya +ldy {z2} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsyy_ror_vbuz1 +tya +ldy {z1} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +//FRAGMENT vbsxx=vbsyy_ror_vbuz1 +ldx {z1} +tya +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsyy_ror_vbuz1 +tya +ldy {z1} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsz2_ror_vbuaa +tay +lda {z2} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsz1_ror_vbuaa +tay +lda {z1} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +//FRAGMENT vbsxx=vbsz1_ror_vbuaa +tax +lda {z1} +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsz1_ror_vbuaa +tay +lda {z1} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsaa_ror_vbuaa +tay +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsaa_ror_vbuaa +tay +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +//FRAGMENT vbsxx=vbsaa_ror_vbuaa +tax +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsaa_ror_vbuaa +tay +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsxx_ror_vbuaa +tay +txa +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsxx_ror_vbuaa +tay +txa +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +//FRAGMENT vbsxx=vbsxx_ror_vbuaa +tay +txa +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsxx_ror_vbuaa +tay +txa +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsyy_ror_vbuaa +tax +tya +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsyy_ror_vbuaa +tax +tya +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +//FRAGMENT vbsxx=vbsyy_ror_vbuaa +tax +tya +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsyy_ror_vbuaa +tax +tya +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsz2_ror_vbuxx +lda {z2} +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsz1_ror_vbuxx +lda {z1} +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +//FRAGMENT vbsxx=vbsz1_ror_vbuxx +lda {z1} +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsz1_ror_vbuxx +lda {z1} +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsaa_ror_vbuxx +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsaa_ror_vbuxx +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +//FRAGMENT vbsxx=vbsaa_ror_vbuxx +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsaa_ror_vbuxx +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsxx_ror_vbuxx +txa +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsxx_ror_vbuxx +txa +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +//FRAGMENT vbsxx=vbsxx_ror_vbuxx +txa +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsxx_ror_vbuxx +txa +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsyy_ror_vbuxx +tya +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsyy_ror_vbuxx +tya +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +//FRAGMENT vbsxx=vbsyy_ror_vbuxx +tya +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsyy_ror_vbuxx +tya +cpx #0 +beq !e+ +!l: +cmp #$80 +ror +dex +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsz2_ror_vbuyy +lda {z2} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsz1_ror_vbuyy +lda {z1} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +//FRAGMENT vbsxx=vbsz1_ror_vbuyy +lda {z1} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsz1_ror_vbuyy +lda {z1} +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsaa_ror_vbuyy +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsaa_ror_vbuyy +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +//FRAGMENT vbsxx=vbsaa_ror_vbuyy +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsaa_ror_vbuyy +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsxx_ror_vbuyy +txa +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsxx_ror_vbuyy +txa +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +//FRAGMENT vbsxx=vbsxx_ror_vbuyy +txa +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsxx_ror_vbuyy +txa +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsyy_ror_vbuyy +tya +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +sta {z1} +//FRAGMENT vbsaa=vbsyy_ror_vbuyy +tya +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +//FRAGMENT vbsxx=vbsyy_ror_vbuyy +tya +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tax +//FRAGMENT vbsyy=vbsyy_ror_vbuyy +tya +cpy #0 +beq !e+ +!l: +cmp #$80 +ror +dey +bne !l- +!e: +tay +//FRAGMENT vbsz1=vbsz1_minus_vbsyy +tya +eor #$ff +sec +adc {z1} +sta {z1} +//FRAGMENT vbsz1=vbsz1_plus_vbsxx +txa +clc +adc {z1} +sta {z1} +//FRAGMENT vbsz1=vbsz1_plus_vbsyy +tya +clc +adc {z1} +sta {z1} +//FRAGMENT vbuxx=vbuxx_minus_pbuc1_derefidx_vbuz1 +txa +ldx {z1} +sec +sbc {c1},x +tax +//FRAGMENT vbuyy=vbuyy_minus_pbuc1_derefidx_vbuz1 +tya +ldy {z1} +sec +sbc {c1},y +tay +//FRAGMENT vbuz1=vbuz1_minus_pbuc1_derefidx_vbuxx +lda {z1} +sec +sbc {c1},x +sta {z1} +//FRAGMENT vbuxx=vbuxx_minus_pbuc1_derefidx_vbuxx +txa +tax +sec +sbc {c1},x +tax +//FRAGMENT vbuyy=vbuyy_minus_pbuc1_derefidx_vbuxx +tya +sec +sbc {c1},x +tay +//FRAGMENT vbuz1=vbuz1_minus_pbuc1_derefidx_vbuyy +lda {z1} +sec +sbc {c1},y +sta {z1} +//FRAGMENT vbuxx=vbuxx_minus_pbuc1_derefidx_vbuyy +txa +sec +sbc {c1},y +tax +//FRAGMENT vbuyy=vbuyy_minus_pbuc1_derefidx_vbuyy +tya +tay +sec +sbc {c1},y +tay +//FRAGMENT vbsyy_neq_0_then_la1 +cpy #0 +bne {la1} +//FRAGMENT _deref_pduc1=vduz1 +lda {z1} +sta {c1} +lda {z1}+1 +sta {c1}+1 +lda {z1}+2 +sta {c1}+2 +lda {z1}+3 +sta {c1}+3 +//FRAGMENT vduz1=_dec_vduz2 +lda {z2} +sec +sbc #1 +sta {z1} +lda {z2}+1 +sbc #0 +sta {z1}+1 +lda {z2}+2 +sbc #0 +sta {z1}+2 +lda {z2}+3 +sbc #0 +sta {z1}+3 +//FRAGMENT vduz1=vduz1_plus_vbuc1 +lda {z1} +clc +adc #{c1} +sta {z1} +bcc !+ +inc {z1}+1 +bne !+ +inc {z1}+2 +bne !+ +inc {z1}+3 +!: +//FRAGMENT vduz1=_dec_vduz1 +lda {z1} +sec +sbc #1 +sta {z1} +lda {z1}+1 +sbc #0 +sta {z1}+1 +lda {z1}+2 +sbc #0 +sta {z1}+2 +lda {z1}+3 +sbc #0 +sta {z1}+3 +//FRAGMENT vwuz1=_stackidxword_vbuc1 +tsx +lda STACK_BASE+{c1},x +sta {z1} +lda STACK_BASE+{c1}+1,x +sta {z1}+1 +//FRAGMENT _stackidxword_vbuc1=vwuz1 +tsx +lda {z1} +sta STACK_BASE+{c1},x +lda {z1}+1 +sta STACK_BASE+{c1}+1,x +//FRAGMENT _stackpushword_=vwuc1 +lda #>{c1} +pha +lda #<{c1} +pha +//FRAGMENT vwuz1=_stackpullword_ +pla +sta {z1} +pla +sta {z1}+1 +//FRAGMENT _stackpushword_=vbuc1 +lda #0 +pha +lda #<{c1} +pha +//FRAGMENT _stackidxsword_vbuc1=vwsz1 +tsx +lda {z1} +sta STACK_BASE+{c1},x +lda {z1}+1 +sta STACK_BASE+{c1}+1,x +//FRAGMENT _stackpushbyte_2 +pha +pha +//FRAGMENT vwsz1=_stackpullsword_ +pla +sta {z1} +pla +sta {z1}+1 +//FRAGMENT pbuc1_derefidx_vbuaa=_inc_pbuc1_derefidx_vbuaa +tax +inc {c1},x +//FRAGMENT vbuaa=vbuaa_bor_vbuc1 +ora #{c1} +//FRAGMENT vbuz1=_deref_pbuz2_rol_1 +ldy #0 +lda ({z2}),y +asl +sta {z1} +//FRAGMENT pwuc1_derefidx_vbuz1=_inc_pwuc1_derefidx_vbuz1 +ldx {z1} +inc {c1},x +bne !+ +inc {c1}+1,x +!: +//FRAGMENT vbuaa=_deref_pbuz1_rol_1 +ldy #0 +lda ({z1}),y +asl +//FRAGMENT vbuxx=_deref_pbuz1_rol_1 +ldy #0 +lda ({z1}),y +asl +tax +//FRAGMENT vbuyy=_deref_pbuz1_rol_1 +ldy #0 +lda ({z1}),y +asl +tay +//FRAGMENT pwuc1_derefidx_vbuaa=_inc_pwuc1_derefidx_vbuaa +tax +inc {c1},x +bne !+ +inc {c1}+1,x +!: +//FRAGMENT pwuc1_derefidx_vbuxx=_inc_pwuc1_derefidx_vbuxx +inc {c1},x +bne !+ +inc {c1}+1,x +!: +//FRAGMENT pwuc1_derefidx_vbuyy=_inc_pwuc1_derefidx_vbuyy +tya +tax +inc {c1},x +bne !+ +inc {c1}+1,x +!: +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz1) +ldx {z1} +ldy {c3},x +lda {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_(pbuc3_derefidx_vbuxx) +ldy {c3},x +lda {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_(pbuc3_derefidx_vbuyy) +ldx {c3},y +lda {c2},x +sta {c1},y +//FRAGMENT pwsz1_lt_pwsc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bcc {la1} +bne !+ +lda {z1} +cmp #<{c1} +bcc {la1} +!: +//FRAGMENT vbsaa=vbsz1_minus_vbsaa +eor #$ff +sec +adc {z1} +//FRAGMENT vbsaa=vbsxx_minus_vbsaa +sta $ff +txa +sec +sbc $ff +//FRAGMENT vbuz1=_deref_pbuc1_bxor_vbuc2 +lda #{c2} +eor {c1} +sta {z1} +//FRAGMENT vbuz1=vbuc1_bxor_vbuaa +eor #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuc1_bxor_vbuxx +txa +eor #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuc1_bxor_vbuyy +tya +eor #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuc1_bxor_vbuaa +eor #{c1} +//FRAGMENT vbuaa=vbuc1_bxor_vbuxx +txa +eor #{c1} +//FRAGMENT vbuaa=vbuc1_bxor_vbuyy +tya +eor #{c1} +//FRAGMENT vbuxx=vbuc1_bxor_vbuaa +eor #{c1} +tax +//FRAGMENT vbuxx=vbuc1_bxor_vbuxx +txa +eor #{c1} +tax +//FRAGMENT vbuxx=vbuc1_bxor_vbuyy +tya +eor #{c1} +tax +//FRAGMENT vbuyy=vbuc1_bxor_vbuaa +eor #{c1} +tay +//FRAGMENT vbuyy=vbuc1_bxor_vbuxx +txa +eor #{c1} +tay +//FRAGMENT vbuyy=vbuc1_bxor_vbuyy +tya +eor #{c1} +tay +//FRAGMENT vbuaa=_deref_pbuc1_bxor_vbuc2 +lda #{c2} +eor {c1} +//FRAGMENT vbuxx=_deref_pbuc1_bxor_vbuc2 +lda #{c2} +eor {c1} +tax +//FRAGMENT vbuyy=_deref_pbuc1_bxor_vbuc2 +lda #{c2} +eor {c1} +tay +//FRAGMENT vduz1_neq_vduc1_then_la1 +lda {z1}+3 +cmp #>{c1}>>$10 +bne {la1} +lda {z1}+2 +cmp #<{c1}>>$10 +bne {la1} +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT vwuz1=vwuz2_plus_vwuc1 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vduz1=vduz2_sethi_vwuz3 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z3} +sta {z1}+2 +lda {z3}+1 +sta {z1}+3 +//FRAGMENT vduz1=vduz2_setlo_vwuz3 +lda {z3} +sta {z1} +lda {z3}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +//FRAGMENT vduz1=vduz1_setlo_vwuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vbuaa=vbuaa_plus_2 +clc +adc #2 +//FRAGMENT vbuz1_ge__deref_pbuc1_then_la1 +lda {c1} +ldy {z1} +sta $ff +cpy $ff +bcs {la1} +//FRAGMENT vbuxx_ge__deref_pbuc1_then_la1 +ldy {c1} +sty $ff +cpx $ff +bcs {la1} +//FRAGMENT vbuyy_ge__deref_pbuc1_then_la1 +lda {c1} +sta $ff +cpy $ff +bcs {la1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_vbuz3 +ldy {z2} +lda {c1},y +sta {z1}+1 +lda {z3} +sta {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_vbuz2 +tay +lda {c1},y +sta {z1}+1 +lda {z2} +sta {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_vbuz2 +lda {c1},x +sta {z1}+1 +lda {z2} +sta {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_vbuz2 +lda {c1},y +sta {z1}+1 +lda {z2} +sta {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_vbuaa +ldx {z2} +tay +lda {c1},x +sta {z1}+1 +sty {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_vbuaa +tay +lda {c1},y +sta {z1}+1 +sty {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_vbuaa +tay +lda {c1},x +sta {z1}+1 +sty {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_vbuaa +tax +lda {c1},y +sta {z1}+1 +stx {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_vbuxx +ldy {z2} +lda {c1},y +sta {z1}+1 +stx {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_vbuxx +tay +lda {c1},y +sta {z1}+1 +stx {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_vbuxx +lda {c1},x +sta {z1}+1 +stx {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_vbuxx +lda {c1},y +sta {z1}+1 +stx {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_vbuyy +ldx {z2} +lda {c1},x +sta {z1}+1 +sty {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_vbuyy +tax +lda {c1},x +sta {z1}+1 +sty {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_vbuyy +lda {c1},x +sta {z1}+1 +sty {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_vbuyy +lda {c1},y +sta {z1}+1 +sty {z1} +//FRAGMENT _deref_(_deref_qwuc1)=_deref_(_deref_qwuc2) +ldy {c2} +sty $fe +ldy {c2}+1 +sty $ff +ldy #0 +lda ($fe),y +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT vbuyy=vbuaa_band_pbuc1_derefidx_vbuyy +and {c1},y +tay +//FRAGMENT _deref_pbuc1_eq__deref_pbuc2_then_la1 +lda {c1} +cmp {c2} +beq {la1} +//FRAGMENT _deref_pbsc1=_deref_pbsc2 +lda {c2} +sta {c1} +//FRAGMENT vwsz1_eq_vwsz2_then_la1 +lda {z1} +cmp {z2} +bne !+ +lda {z1}+1 +cmp {z2}+1 +beq {la1} +!: +//FRAGMENT vwsz1_neq_vwsz2_then_la1 +lda {z1}+1 +cmp {z2}+1 +bne {la1} +lda {z1} +cmp {z2} +bne {la1} +//FRAGMENT vwsz1_lt_vwsz2_then_la1 +lda {z1} +cmp {z2} +lda {z1}+1 +sbc {z2}+1 +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vwsz1_gt_vwsz2_then_la1 +lda {z2} +cmp {z1} +lda {z2}+1 +sbc {z1}+1 +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vwsz1_ge_vwsz2_then_la1 +lda {z1} +cmp {z2} +lda {z1}+1 +sbc {z2}+1 +bvc !+ +eor #$80 +!: +bpl {la1} +//FRAGMENT vbuz1=_deref_pbuc1_plus_1 +ldy {c1} +iny +sty {z1} +//FRAGMENT vbuz1=_deref_pbuc1_minus_1 +ldx {c1} +dex +stx {z1} +//FRAGMENT vbuz1=_deref_pbuc1_plus_vbuc2 +lda #{c2} +clc +adc {c1} +sta {z1} +//FRAGMENT vbuz1=_deref_pbuc1_minus_vbuc2 +lda {c1} +sec +sbc #{c2} +sta {z1} +//FRAGMENT vbuaa=_deref_pbuc1_plus_1 +lda {c1} +clc +adc #1 +//FRAGMENT vbuaa=_deref_pbuc1_minus_1 +lda {c1} +sec +sbc #1 +//FRAGMENT vbuaa=_deref_pbuc1_plus_vbuc2 +lda #{c2} +clc +adc {c1} +//FRAGMENT vbuxx=_deref_pbuc1_plus_vbuc2 +lda {c1} +tax +axs #-[{c2}] +//FRAGMENT vbuyy=_deref_pbuc1_plus_vbuc2 +lda #{c2} +clc +adc {c1} +tay +//FRAGMENT vbuaa=_deref_pbuc1_minus_vbuc2 +lda {c1} +sec +sbc #{c2} +//FRAGMENT vbuxx=_deref_pbuc1_minus_vbuc2 +lda {c1} +tax +axs #{c2} +//FRAGMENT vbuyy=_deref_pbuc1_minus_vbuc2 +lda {c1} +sec +sbc #{c2} +tay +//FRAGMENT vbuaa_ge_vbuxx_then_la1 +stx $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuaa_ge_vbuyy_then_la1 +sty $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuxx=_deref_pbuc1_plus_1 +ldx {c1} +inx +//FRAGMENT vbuyy=_deref_pbuc1_plus_1 +ldy {c1} +iny +//FRAGMENT vbuxx=_deref_pbuc1_minus_1 +ldx {c1} +dex +//FRAGMENT vbuyy=_deref_pbuc1_minus_1 +lda {c1} +tay +dey +//FRAGMENT vbsz1_neq_vbsz2_then_la1 +lda {z1} +cmp {z2} +bne {la1} +//FRAGMENT vbsz1_neq_vbsxx_then_la1 +cpx {z1} +bne {la1} +//FRAGMENT vbsxx_neq_vbsz1_then_la1 +cpx {z1} +bne {la1} +//FRAGMENT _deref_pbuz1=vbum2 +lda {m2} +ldy #0 +sta ({z1}),y +//FRAGMENT pbuc1_derefidx_vbum1=vbuc2 +lda #{c2} +ldy {m1} +sta {c1},y +//FRAGMENT vbuz1=vbum2 +lda {m2} +sta {z1} +//FRAGMENT vbuaa=vbum1 +lda {m1} +//FRAGMENT vbuxx=vbum1 +ldx {m1} +//FRAGMENT vbuyy=vbum1 +ldy {m1} +//FRAGMENT vwuz1=vwuc1_plus_pbuc2_derefidx_vbuz2 +ldy {z2} +lda {c2},y +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pbuz1_derefidx_vbuz2=_byte_vwuz3 +lda {z3} +ldy {z2} +sta ({z1}),y +//FRAGMENT vwuz1=vwuc1_plus_pbuc2_derefidx_vbuaa +tay +lda {c2},y +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuc1_plus_pbuc2_derefidx_vbuxx +lda {c2},x +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuc1_plus_pbuc2_derefidx_vbuyy +lda {c2},y +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pbuz1_derefidx_vbuxx=_byte_vwuz2 +txa +tay +lda {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=_byte_vwuz2 +lda {z2} +sta ({z1}),y +//FRAGMENT vbuz1=vbuz2_bor__hi_vwuz3 +lda {z2} +ora {z3}+1 +sta {z1} +//FRAGMENT vbuz1=vbuz1_bor_vbuaa +ora {z1} +sta {z1} +//FRAGMENT pbuz1_ge_pbuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bcc !+ +bne {la1} +lda {z1} +cmp #<{c1} +bcs {la1} +!: +//FRAGMENT vbuz1=_deref_pbuc1_ror_1 +lda {c1} +lsr +sta {z1} +//FRAGMENT vwuz1_ge_pwuc1_derefidx_vbuz2_then_la1 +ldy {z2} +lda {c1}+1,y +cmp {z1}+1 +bne !+ +lda {c1},y +cmp {z1} +beq {la1} +!: +bcc {la1} +//FRAGMENT _deref_(_deref_qbuc1)=pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT _deref_qbuc1=_inc__deref_qbuc1 +inc {c1} +bne !+ +inc {c1}+1 +!: +//FRAGMENT vbuaa=_deref_pbuc1_ror_1 +lda {c1} +lsr +//FRAGMENT vbuxx=_deref_pbuc1_ror_1 +lda {c1} +lsr +tax +//FRAGMENT vbuyy=_deref_pbuc1_ror_1 +lda {c1} +lsr +tay +//FRAGMENT vwuz1_ge_pwuc1_derefidx_vbuaa_then_la1 +tay +lda {c1}+1,y +cmp {z1}+1 +bne !+ +lda {c1},y +cmp {z1} +beq {la1} +!: +bcc {la1} +//FRAGMENT vwuz1_ge_pwuc1_derefidx_vbuxx_then_la1 +lda {c1}+1,x +cmp {z1}+1 +bne !+ +lda {c1},x +cmp {z1} +beq {la1} +!: +bcc {la1} +//FRAGMENT vwuz1_ge_pwuc1_derefidx_vbuyy_then_la1 +lda {c1}+1,y +cmp {z1}+1 +bne !+ +lda {c1},y +cmp {z1} +beq {la1} +!: +bcc {la1} +//FRAGMENT _deref_(_deref_qbuc1)=pbuc2_derefidx_vbuaa +tay +lda {c2},y +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT _deref_(_deref_qbuc1)=pbuc2_derefidx_vbuxx +lda {c2},x +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT _deref_(_deref_qbuc1)=pbuc2_derefidx_vbuyy +lda {c2},y +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT _deref_pwuz1=vbuz2 +lda {z2} +ldy #0 +sta ({z1}),y +tya +iny +sta ({z1}),y +//FRAGMENT _deref_pwuz1=vbuaa +ldy #0 +sta ({z1}),y +tya +iny +sta ({z1}),y +//FRAGMENT _deref_pwuz1=vbuxx +txa +ldy #0 +sta ({z1}),y +tya +iny +sta ({z1}),y +//FRAGMENT _deref_pwuz1=vbuyy +tya +ldy #0 +sta ({z1}),y +tya +iny +sta ({z1}),y +//FRAGMENT vboz1=vboc1 +lda #{c1} +sta {z1} +//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 +ldy {z4} +lda ({z3}),y +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz3 +ldy {z3} +sta $ff +lda ({z2}),y +ldy $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuz3 +ldy {z3} +stx $ff +lda ({z2}),y +ldy $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz3 +sty $ff +ldy {z3} +lda ({z2}),y +ldy $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuaa +tay +lda ({z3}),y +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuaa +stx $ff +tay +lda ({z2}),y +ldy $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa +sty $ff +tay +lda ({z2}),y +ldy $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuxx +txa +tay +lda ({z3}),y +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuxx +sta $ff +txa +tay +lda ({z2}),y +ldy $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuxx +sty $ff +txa +tay +lda ({z2}),y +ldy $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuyy +lda ({z3}),y +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy +sta $ff +lda ({z2}),y +ldy $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuyy +stx $ff +lda ({z2}),y +ldy $ff +sta ({z1}),y +//FRAGMENT vbsz1=vbsaa_rol_1 +asl +sta {z1} +//FRAGMENT vbsaa=vbsaa_rol_1 +asl +//FRAGMENT vbsxx=vbsaa_rol_1 +asl +tax +//FRAGMENT vbsyy=vbsaa_rol_1 +asl +tay +//FRAGMENT pwsz1=pwsc1_plus_vbuz2 +lda {z2} +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pwsc1_derefidx_vbuz1=_deref_pwsz2 +ldx {z1} +ldy #0 +lda ({z2}),y +sta {c1},x +iny +lda ({z2}),y +sta {c1}+1,x +//FRAGMENT pwsz1=pwsc1_plus_vbuaa +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pwsz1=pwsc1_plus_vbuxx +txa +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pwsz1=pwsc1_plus_vbuyy +tya +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pwsc1_derefidx_vbuaa=_deref_pwsz1 +tax +ldy #0 +lda ({z1}),y +sta {c1},x +iny +lda ({z1}),y +sta {c1}+1,x +//FRAGMENT pwsc1_derefidx_vbuxx=_deref_pwsz1 +ldy #0 +lda ({z1}),y +sta {c1},x +iny +lda ({z1}),y +sta {c1}+1,x +//FRAGMENT pwsc1_derefidx_vbuyy=_deref_pwsz1 +tya +tax +ldy #0 +lda ({z1}),y +sta {c1},x +iny +lda ({z1}),y +sta {c1}+1,x +//FRAGMENT vbuz1=_hi_pwuc1_derefidx_vbuyy +lda {c1}+1,y +sta {z1} +//FRAGMENT vbuaa=_hi_pwuc1_derefidx_vbuyy +lda {c1}+1,y +//FRAGMENT vbuxx=_hi_pwuc1_derefidx_vbuyy +lda {c1}+1,y +tax +//FRAGMENT vbuyy=_hi_pwuc1_derefidx_vbuyy +lda {c1}+1,y +tay +//FRAGMENT vbuz1=_lo_pwsc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +//FRAGMENT vbuz1=_hi_pwsc1_derefidx_vbuz2 +ldy {z2} +lda {c1}+1,y +sta {z1} +//FRAGMENT vbuaa=_lo_pwsc1_derefidx_vbuz1 +ldy {z1} +lda {c1},y +//FRAGMENT vbuxx=_lo_pwsc1_derefidx_vbuz1 +ldx {z1} +lda {c1},x +tax +//FRAGMENT vbuyy=_lo_pwsc1_derefidx_vbuz1 +ldy {z1} +lda {c1},y +tay +//FRAGMENT vbuz1=_lo_pwsc1_derefidx_vbuxx +lda {c1},x +sta {z1} +//FRAGMENT vbuaa=_lo_pwsc1_derefidx_vbuxx +lda {c1},x +//FRAGMENT vbuxx=_lo_pwsc1_derefidx_vbuxx +lda {c1},x +tax +//FRAGMENT vbuyy=_lo_pwsc1_derefidx_vbuxx +lda {c1},x +tay +//FRAGMENT vbuz1=_lo_pwsc1_derefidx_vbuyy +lda {c1},y +sta {z1} +//FRAGMENT vbuaa=_lo_pwsc1_derefidx_vbuyy +lda {c1},y +//FRAGMENT vbuxx=_lo_pwsc1_derefidx_vbuyy +lda {c1},y +tax +//FRAGMENT vbuyy=_lo_pwsc1_derefidx_vbuyy +lda {c1},y +tay +//FRAGMENT vbuaa=_hi_pwsc1_derefidx_vbuz1 +ldy {z1} +lda {c1}+1,y +//FRAGMENT vbuxx=_hi_pwsc1_derefidx_vbuz1 +ldx {z1} +lda {c1}+1,x +tax +//FRAGMENT vbuyy=_hi_pwsc1_derefidx_vbuz1 +ldy {z1} +lda {c1}+1,y +tay +//FRAGMENT vbuz1=_hi_pwsc1_derefidx_vbuxx +lda {c1}+1,x +sta {z1} +//FRAGMENT vbuaa=_hi_pwsc1_derefidx_vbuxx +lda {c1}+1,x +//FRAGMENT vbuxx=_hi_pwsc1_derefidx_vbuxx +lda {c1}+1,x +tax +//FRAGMENT vbuyy=_hi_pwsc1_derefidx_vbuxx +lda {c1}+1,x +tay +//FRAGMENT vbuz1=_hi_pwsc1_derefidx_vbuyy +lda {c1}+1,y +sta {z1} +//FRAGMENT vbuaa=_hi_pwsc1_derefidx_vbuyy +lda {c1}+1,y +//FRAGMENT vbuxx=_hi_pwsc1_derefidx_vbuyy +lda {c1}+1,y +tax +//FRAGMENT vbuyy=_hi_pwsc1_derefidx_vbuyy +lda {c1}+1,y +tay +//FRAGMENT vwuz1=vbuz2_band_vbuc1 +lda {z2} +and #{c1} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vbuaa_band_vbuc1 +and #{c1} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vbuxx_band_vbuc1 +txa +and #{c1} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vbuyy_band_vbuc1 +tya +and #{c1} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuc1_le_vwuc2_then_la1 +lda #>{c1} +cmp #>{c2} +bne !+ +lda #<{c1} +cmp #<{c2} +beq {la1} +!: +bcc {la1} +//FRAGMENT _deref_pboc1=vboc2 +lda #{c2} +sta {c1} +//FRAGMENT _deref_pboc1_then_la1 +lda {c1} +cmp #0 +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuc1=_byte_vwuz2 +ldy #{c1} +lda {z2} +sta ({z1}),y +//FRAGMENT pssz1=pssc1_plus_vwuz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT _deref_pssz1=_deref_pssz2_memcpy_vbuc1 +ldy #00 +!: +lda ({z2}),y +sta ({z1}),y +iny +cpy #{c1} +bne !- +//FRAGMENT pssz1=pssc1_plus_vwuz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT _deref_pbuc1=_deref_pbuc1_plus_vbuc2 +lda #{c2} +clc +adc {c1} +sta {c1} +//FRAGMENT pssz1=pssz2_plus_vbuc1 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pssz1_lt_pssc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bcc {la1} +bne !+ +lda {z1} +cmp #<{c1} +bcc {la1} +!: +//FRAGMENT vbuz1_lt__deref_pbuc1_then_la1 +lda {z1} +cmp {c1} +bcc {la1} +//FRAGMENT pwuc1_derefidx_vbuz1=(_deref_qwuc2)_derefidx_vbuz1 +ldy {z1} +lda {c2} +sta $fe +lda {c2}+1 +sta $ff +lda ($fe),y +sta {c1},y +iny +lda ($fe),y +sta {c1},y +//FRAGMENT vbuaa_lt__deref_pbuc1_then_la1 +cmp {c1} +bcc {la1} +//FRAGMENT pwuc1_derefidx_vbuaa=(_deref_qwuc2)_derefidx_vbuaa +tay +lda {c2} +sta $fe +lda {c2}+1 +sta $ff +lda ($fe),y +sta {c1},y +iny +lda ($fe),y +sta {c1},y +//FRAGMENT pwuc1_derefidx_vbuxx=(_deref_qwuc2)_derefidx_vbuxx +txa +tay +lda {c2} +sta $fe +lda {c2}+1 +sta $ff +lda ($fe),y +sta {c1},y +iny +lda ($fe),y +sta {c1},y +//FRAGMENT pwuc1_derefidx_vbuyy=(_deref_qwuc2)_derefidx_vbuyy +lda {c2} +sta $fe +lda {c2}+1 +sta $ff +lda ($fe),y +sta {c1},y +iny +lda ($fe),y +sta {c1},y +//FRAGMENT vbuxx_lt__deref_pbuc1_then_la1 +cpx {c1} +bcc {la1} +//FRAGMENT (_deref_qbuc1)_derefidx_vbuc2=vbuc3 +lda #{c3} +ldy #{c2} +ldx {c1} +stx $fe +ldx {c1}+1 +stx $ff +sta ($fe),y +//FRAGMENT pssz1_neq_pssc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT pssz1=pssz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=(_deref_qwuc1)_derefidx_vbuc2 +ldy #{c2} +lda {c1} +sta $fe +lda {c1}+1 +sta $ff +lda ($fe),y +sta {z1} +iny +lda ($fe),y +sta {z1}+1 +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_(_deref_pbuz2) +ldy #0 +lda ({z2}),y +tay +lda {c2},y +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_(_deref_pbuz1) +ldy #0 +lda ({z1}),y +tay +lda {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_(_deref_pbuz1) +tax +ldy #0 +lda ({z1}),y +tay +lda {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_(_deref_pbuz1) +tya +tax +ldy #0 +lda ({z1}),y +tay +lda {c2},y +sta {c1},x +//FRAGMENT vboaa=vboc1 +lda #{c1} +//FRAGMENT vboxx=vboc1 +lda #{c1} +tax +//FRAGMENT vboyy=vboc1 +lda #{c1} +tay +//FRAGMENT vbuyy_neq_vbuaa_then_la1 +tax +stx $ff +cpy $ff +bne {la1} +//FRAGMENT vwuz1=_deref_pbuz2_word__deref_pbuz3 +ldy #0 +lda ({z3}),y +sta {z1} +lda ({z2}),y +sta {z1}+1 +//FRAGMENT vbuz1=vbuz2_minus_2 +lda {z2} +sec +sbc #2 +sta {z1} +//FRAGMENT vbuxx=vbuz1_minus_2 +ldx {z1} +dex +dex +//FRAGMENT vbuz1=_deref_pbuc1_plus_2 +lda {c1} +clc +adc #2 +sta {z1} +//FRAGMENT vbuaa=_deref_pbuc1_plus_2 +lda {c1} +clc +adc #2 +//FRAGMENT vbuxx=_deref_pbuc1_plus_2 +ldx {c1} +inx +inx +//FRAGMENT vbuyy=_deref_pbuc1_plus_2 +ldy {c1} +iny +iny +//FRAGMENT 0_neq_vwuz1_then_la1 +lda {z1} +ora {z1}+1 +bne {la1} +//FRAGMENT _deref_pbuz1=_byte_vwsz2 +lda {z2} +ldy #0 +sta ({z1}),y +//FRAGMENT isr_hardware_clobax_entry +sta rega+1 +stx regx+1 +//FRAGMENT isr_hardware_clobax_exit +rega: lda #0 +regx: ldx #0 +rti +//FRAGMENT vbuz1=vbuxx_band_pbuz2_derefidx_vbuc1 +ldy #{c1} +txa +and ({z2}),y +sta {z1} +//FRAGMENT vbuaa=vbuxx_band_pbuz1_derefidx_vbuc1 +ldy #{c1} +txa +and ({z1}),y +//FRAGMENT vbuxx=vbuxx_band_pbuz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +axs #0 +//FRAGMENT vbuyy=vbuxx_band_pbuz1_derefidx_vbuc1 +ldy #{c1} +txa +and ({z1}),y +tay +//FRAGMENT vbsz1=vbsz2_ror_1 +lda {z2} +cmp #$80 +ror +sta {z1} +//FRAGMENT vbsaa=vbsz1_ror_1 +lda {z1} +cmp #$80 +ror +//FRAGMENT vbsxx=vbsz1_ror_1 +lda {z1} +cmp #$80 +ror +tax +//FRAGMENT vbsyy=vbsz1_ror_1 +lda {z1} +cmp #$80 +ror +tay +//FRAGMENT vbsz1=vbsaa_ror_1 +cmp #$80 +ror +sta {z1} +//FRAGMENT vbsaa=vbsaa_ror_1 +cmp #$80 +ror +//FRAGMENT vbsxx=vbsaa_ror_1 +cmp #$80 +ror +tax +//FRAGMENT vbsyy=vbsaa_ror_1 +cmp #$80 +ror +tay +//FRAGMENT vbsz1=vbsxx_ror_1 +txa +cmp #$80 +ror +sta {z1} +//FRAGMENT vbsaa=vbsxx_ror_1 +txa +cmp #$80 +ror +//FRAGMENT vbsxx=vbsxx_ror_1 +txa +cmp #$80 +ror +tax +//FRAGMENT vbsyy=vbsxx_ror_1 +txa +cmp #$80 +ror +tay +//FRAGMENT vbsz1=vbsyy_ror_1 +tya +cmp #$80 +ror +sta {z1} +//FRAGMENT vbsaa=vbsyy_ror_1 +tya +cmp #$80 +ror +//FRAGMENT vbsxx=vbsyy_ror_1 +tya +cmp #$80 +ror +tax +//FRAGMENT vbsyy=vbsyy_ror_1 +tya +cmp #$80 +ror +tay +//FRAGMENT vbuz1=_neg_vbuyy +dey +tya +eor #$ff +sta {z1} +//FRAGMENT vbuaa=_neg_vbuyy +dey +tya +eor #$ff +//FRAGMENT vbuxx=_neg_vbuyy +tya +eor #$ff +tax +inx +//FRAGMENT vbuz1=vbuz2_band_vbuz3 +lda {z2} +and {z3} +sta {z1} +//FRAGMENT vbuz1=vbuaa_band_vbuz2 +and {z2} +sta {z1} +//FRAGMENT vbuz1=vbuxx_band_vbuz2 +lda {z2} +sax {z1} +//FRAGMENT vbuz1=vbuyy_band_vbuz2 +tya +and {z2} +sta {z1} +//FRAGMENT vbuz1=vbuz2_band_vbuxx +lda {z2} +sax {z1} +//FRAGMENT vbuz1=vbuaa_band_vbuxx +sax {z1} +//FRAGMENT vbuaa=vbuz1_band_vbuz2 +lda {z1} +and {z2} +//FRAGMENT vbuaa=vbuaa_band_vbuz1 +and {z1} +//FRAGMENT vbuaa=vbuxx_band_vbuz1 +txa +and {z1} +//FRAGMENT vbuaa=vbuyy_band_vbuz1 +tya +and {z1} +//FRAGMENT vbuxx=vbuz1_band_vbuz2 +lda {z1} +and {z2} +tax +//FRAGMENT vbuxx=vbuaa_band_vbuz1 +ldx {z1} +axs #0 +//FRAGMENT vbuxx=vbuxx_band_vbuz1 +lda {z1} +axs #0 +//FRAGMENT vbuxx=vbuyy_band_vbuz1 +ldx {z1} +tya +axs #0 +//FRAGMENT vbuyy=vbuz1_band_vbuz2 +lda {z1} +and {z2} +tay +//FRAGMENT vbuyy=vbuaa_band_vbuz1 +and {z1} +tay +//FRAGMENT vbuyy=vbuxx_band_vbuz1 +txa +and {z1} +tay +//FRAGMENT vbuyy=vbuyy_band_vbuz1 +tya +and {z1} +tay +//FRAGMENT vdsz1=vdsz2_rol_4 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +//FRAGMENT vwuz1=vbuc1_plus__hi_vdsz2 +NO_SYNTHESIS +//FRAGMENT vwuz1=vwuc1_plus__hi_vdsz2 +clc +lda #<{c1} +adc {z2}+2 +sta {z1} +lda #>{c1} +adc {z2}+3 +sta {z1}+1 +//FRAGMENT vwuz1=vbsc1_plus__hi_vdsz2 +NO_SYNTHESIS +//FRAGMENT vwuz1=vwuz2_minus_vwuz1 +lda {z2} +sec +sbc {z1} +sta {z1} +lda {z2}+1 +sbc {z1}+1 +sta {z1}+1 +//FRAGMENT vdsz1=vdsz1_rol_4 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +//FRAGMENT vwsz1=vwsz2_ror_2 +lda {z2}+1 +cmp #$80 +ror +sta {z1}+1 +lda {z2} +ror +sta {z1} +lda {z1}+1 +cmp #$80 +ror {z1}+1 +ror {z1} +//FRAGMENT vwsz1=vbsc1_plus_vwsz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_plus_vbuz2 +clc +lda {z1} +adc {z2} +sta {z1} +lda {z1}+1 +adc #0 +sta {z1}+1 +//FRAGMENT vwsz1=vwsc1_plus_vwsz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=vbsc1_plus_vwsz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=_word_pbuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=_word_pbuc1_derefidx_vbuaa +tay +lda {c1},y +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=_word_pbuc1_derefidx_vbuxx +lda {c1},x +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=_word_pbuc1_derefidx_vbuyy +lda {c1},y +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT pbuz1_ge_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bcc !+ +bne {la1} +lda {z1} +cmp #<{c1} +bcs {la1} +!: +//FRAGMENT pbuc1_derefidx_vbuz1=vbum2 +lda {m2} +ldy {z1} +sta {c1},y +//FRAGMENT vbum1=vbum1_plus_vbuz2 +lda {m1} +clc +adc {z2} +sta {m1} +//FRAGMENT pbuc1_derefidx_vbuaa=vbum1 +tay +lda {m1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=vbum1 +lda {m1} +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbum1 +lda {m1} +sta {c1},y +//FRAGMENT vbum1=vbum1_plus_vbuxx +txa +clc +adc {m1} +sta {m1} +//FRAGMENT vbum1=vbum1_plus_vbuyy +tya +clc +adc {m1} +sta {m1} +//FRAGMENT pbuc1_derefidx_vbuz1=_deref_pbuc2 +lda {c2} +ldy {z1} +sta {c1},y +//FRAGMENT _deref_pbuc1=_deref_pbuc1_plus_vbuz1 +lda {c1} +clc +adc {z1} +sta {c1} +//FRAGMENT pbuc1_derefidx_vbuaa=_deref_pbuc2 +tay +lda {c2} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=_deref_pbuc2 +lda {c2} +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=_deref_pbuc2 +lda {c2} +sta {c1},y +//FRAGMENT _deref_pbuc1=_deref_pbuc1_plus_vbuxx +txa +clc +adc {c1} +sta {c1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_plus_vbuyy +tya +clc +adc {c1} +sta {c1} +//FRAGMENT pbum1=pbum1_plus_vbuc1 +lda #{c1} +clc +adc {m1} +sta {m1} +bcc !+ +inc {m1}+1 +!: +//FRAGMENT vwsz1=vwsz1_plus_vbsz2 +lda {z2} +pha +clc +adc {z1} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc {z1}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_plus_vbsaa +pha +clc +adc {z1} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc {z1}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_plus_vbsxx +txa +pha +clc +adc {z1} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc {z1}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_plus_vbsyy +tya +pha +clc +adc {z1} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc {z1}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_sethi_vbuz2 +lda {z2} +sta {z1}+1 +lda #<{c1} +sta {z1} +//FRAGMENT pbuz1=pbuz2_setlo_vbuz3 +lda {z3} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuc1_sethi_vbuz2 +lda {z2} +sta {z1}+1 +lda #<{c1} +sta {z1} +//FRAGMENT vwuz1=vwuz2_setlo_vbuz3 +lda {z3} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_sethi_vbuaa +sta {z1}+1 +lda #<{c1} +sta {z1} +//FRAGMENT pbuz1=pbuc1_sethi_vbuxx +stx {z1}+1 +ldx #<{c1} +stx {z1} +//FRAGMENT pbuz1=pbuz2_setlo_vbuaa +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_setlo_vbuxx +stx {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_setlo_vbuyy +sty {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuc1_sethi_vbuaa +sta {z1}+1 +lda #<{c1} +sta {z1} +//FRAGMENT vwuz1=vwuc1_sethi_vbuxx +stx {z1}+1 +ldx #<{c1} +stx {z1} +//FRAGMENT vwuz1=vwuz2_setlo_vbuaa +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_setlo_vbuxx +stx {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_setlo_vbuyy +sty {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_sethi_vbuyy +sty {z1}+1 +ldy #<{c1} +sty {z1} +//FRAGMENT vwuz1=vwuc1_sethi_vbuyy +sty {z1}+1 +ldy #<{c1} +sty {z1} +//FRAGMENT pbuz1=pbuz1_setlo_vbuaa +sta {z1} +//FRAGMENT vwuz1=vwuz1_setlo_vbuaa +sta {z1} +//FRAGMENT vdsz1=vdsc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +lda #<{c1}>>$10 +sta {z1}+2 +lda #>{c1}>>$10 +sta {z1}+3 +//FRAGMENT vdsz1_lt_0_then_la1 +lda {z1}+3 +bmi {la1} +//FRAGMENT vdsz1=_neg_vdsz1 +sec +lda {z1} +eor #$ff +adc #$0 +sta {z1} +lda {z1}+1 +eor #$ff +adc #$0 +sta {z1}+1 +lda {z1}+2 +eor #$ff +adc #$0 +sta {z1}+2 +lda {z1}+3 +eor #$ff +adc #$0 +sta {z1}+3 +//FRAGMENT pwsc1_derefidx_vbuz1_ge_vwsz2_then_la1 +ldy {z1} +lda {c1},y +cmp {z2} +lda {c1}+1,y +sbc {z2}+1 +bvc !+ +eor #$80 +!: +bpl {la1} +//FRAGMENT vbuz1=_lo_pwsc1_derefidx_vbuaa +tay +lda {c1},y +sta {z1} +//FRAGMENT vbuaa=_lo_pwsc1_derefidx_vbuaa +tay +lda {c1},y +//FRAGMENT vbuxx=_lo_pwsc1_derefidx_vbuaa +tax +lda {c1},x +tax +//FRAGMENT vbuyy=_lo_pwsc1_derefidx_vbuaa +tay +lda {c1},y +tay +//FRAGMENT pwsc1_derefidx_vbuaa_ge_vwsz1_then_la1 +tay +lda {c1},y +cmp {z1} +lda {c1}+1,y +sbc {z1}+1 +bvc !+ +eor #$80 +!: +bpl {la1} +//FRAGMENT pwsc1_derefidx_vbuxx_ge_vwsz1_then_la1 +lda {c1},x +cmp {z1} +lda {c1}+1,x +sbc {z1}+1 +bvc !+ +eor #$80 +!: +bpl {la1} +//FRAGMENT pwsc1_derefidx_vbuyy_ge_vwsz1_then_la1 +lda {c1},y +cmp {z1} +lda {c1}+1,y +sbc {z1}+1 +bvc !+ +eor #$80 +!: +bpl {la1} +//FRAGMENT pbuz1_derefidx_vbuz2=vbuz2 +lda {z2} +tay +sta ({z1}),y +//FRAGMENT pbuz1=pbuz2_minus_vbuc1 +sec +lda {z2} +sbc #{c1} +sta {z1} +lda {z2}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT _deref_qssz1=pssz2 +ldy #0 +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT vwuz1=vwuz1_plus_pwuz2_derefidx_vbuc1 +ldy #{c1} +clc +lda {z1} +adc ({z2}),y +sta {z1} +iny +lda {z1}+1 +adc ({z2}),y +sta {z1}+1 +//FRAGMENT pssz1=_deref_qssz1 +ldy #0 +lda ({z1}),y +pha +iny +lda ({z1}),y +sta {z1}+1 +pla +sta {z1} +//FRAGMENT _deref_pbuz1_eq__deref_pbuz2_then_la1 +ldy #0 +lda ({z1}),y +ldy #0 +cmp ({z2}),y +beq {la1} +//FRAGMENT vbsz1_le_0_then_la1 +lda {z1} +cmp #1 +bmi {la1} +//FRAGMENT vwsz1=vwsz1_minus_vbsz2 +lda {z2} +sta $fe +ora #$7f +bmi !+ +lda #0 +!: +sta $ff +sec +lda {z1} +sbc $fe +sta {z1} +lda {z1}+1 +sbc $ff +sta {z1}+1 +//FRAGMENT vbsaa_le_0_then_la1 +cmp #1 +bmi {la1} +//FRAGMENT vbsaa_neq_vbsz1_then_la1 +cmp {z1} +bne {la1} +//FRAGMENT vwsz1=vwsz1_minus_vbsxx +txa +sta $fe +ora #$7f +bmi !+ +lda #0 +!: +sta $ff +sec +lda {z1} +sbc $fe +sta {z1} +lda {z1}+1 +sbc $ff +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_minus_vbsyy +tya +sta $fe +ora #$7f +bmi !+ +lda #0 +!: +sta $ff +sec +lda {z1} +sbc $fe +sta {z1} +lda {z1}+1 +sbc $ff +sta {z1}+1 +//FRAGMENT vbsyy_neq_vbsc1_then_la1 +cpy #{c1} +bne {la1} +//FRAGMENT vbsxx_le_0_then_la1 +cpx #1 +bmi {la1} +//FRAGMENT vbsyy_neq_vbsz1_then_la1 +cpy {z1} +bne {la1} +//FRAGMENT vbsyy=_dec_vbsyy +dey +//FRAGMENT vbsyy_neq_vbsxx_then_la1 +stx $ff +cpy $ff +bne {la1} +//FRAGMENT vbsyy_le_0_then_la1 +cpy #1 +bmi {la1} +//FRAGMENT vbsz1_neq_vbsyy_then_la1 +cpy {z1} +bne {la1} +//FRAGMENT vbsxx_neq_vbsyy_then_la1 +stx $ff +cpy $ff +bne {la1} +//FRAGMENT vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 +lda {z1} +ldy {z2} +ora {c1},y +sta {z1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz3 +ldy {z2} +lda {c1},y +ldy {z3} +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 +ldy {z2} +lda {c1},y +ldy {z3} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuxx=vbuxx_bor_pbuc1_derefidx_vbuz1 +txa +ldx {z1} +ora {c1},x +tax +//FRAGMENT vbuyy=vbuyy_bor_pbuc1_derefidx_vbuz1 +tya +ldy {z1} +ora {c1},y +tay +//FRAGMENT vbuz1=vbuz1_bor_pbuc1_derefidx_vbuxx +lda {c1},x +ora {z1} +sta {z1} +//FRAGMENT vbuxx=vbuxx_bor_pbuc1_derefidx_vbuxx +txa +ora {c1},x +tax +//FRAGMENT vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx +tya +ora {c1},x +tay +//FRAGMENT vbuz1=vbuz1_bor_pbuc1_derefidx_vbuyy +lda {c1},y +ora {z1} +sta {z1} +//FRAGMENT vbuxx=vbuxx_bor_pbuc1_derefidx_vbuyy +txa +ora {c1},y +tax +//FRAGMENT vbuyy=vbuyy_bor_pbuc1_derefidx_vbuyy +tya +ora {c1},y +tay +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz2 +ldy {z1} +lda {c1},y +ldy {z2} +clc +adc {c2},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz2 +ldx {z1} +lda {c1},x +ldx {z2} +clc +adc {c2},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz2 +ldy {z1} +lda {c1},y +ldy {z2} +clc +adc {c2},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuz2 +tay +lda {c1},y +ldy {z2} +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuz1 +tay +lda {c1},y +ldy {z1} +clc +adc {c2},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuz1 +tax +lda {c1},x +ldx {z1} +clc +adc {c2},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuz1 +tay +lda {c1},y +ldy {z1} +clc +adc {c2},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz2 +lda {c1},x +ldy {z2} +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz1 +lda {c1},x +ldy {z1} +clc +adc {c2},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz1 +lda {c1},x +ldx {z1} +clc +adc {c2},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz1 +lda {c1},x +ldy {z1} +clc +adc {c2},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz2 +lda {c1},y +ldy {z2} +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz1 +lda {c1},y +ldy {z1} +clc +adc {c2},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz1 +lda {c1},y +ldx {z1} +clc +adc {c2},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz1 +lda {c1},y +ldy {z1} +clc +adc {c2},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuxx +lda {c2},x +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuxx +lda {c2},x +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuxx +lda {c2},x +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuxx +lda {c2},x +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuxx +tay +lda {c1},y +clc +adc {c2},x +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuxx +tay +lda {c1},y +clc +adc {c2},x +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuxx +tay +lda {c1},y +clc +adc {c2},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuxx +tay +lda {c1},y +clc +adc {c2},x +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx +lda {c1},x +clc +adc {c2},x +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx +lda {c1},x +clc +adc {c2},x +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx +lda {c1},x +clc +adc {c2},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx +lda {c1},x +clc +adc {c2},x +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx +lda {c1},y +clc +adc {c2},x +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx +lda {c1},y +clc +adc {c2},x +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx +lda {c1},y +clc +adc {c2},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx +lda {c1},y +clc +adc {c2},x +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuyy +lda {c2},y +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuyy +lda {c2},y +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuyy +lda {c2},y +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuyy +lda {c2},y +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuyy +tax +lda {c1},x +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuyy +tax +lda {c1},x +clc +adc {c2},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuyy +tax +lda {c1},x +clc +adc {c2},y +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuyy +tax +lda {c1},x +clc +adc {c2},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy +lda {c1},x +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy +lda {c1},x +clc +adc {c2},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy +lda {c1},x +clc +adc {c2},y +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy +lda {c1},x +clc +adc {c2},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy +lda {c1},y +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy +lda {c1},y +clc +adc {c2},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy +lda {c1},y +clc +adc {c2},y +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy +lda {c1},y +clc +adc {c2},y +tay +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 +ldy {z1} +lda {c1},y +ldy {z2} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 +ldx {z1} +lda {c1},x +ldx {z2} +clc +adc {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 +ldy {z1} +lda {c1},y +ldy {z2} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuz2 +tay +lda {c1},y +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuz1 +tay +lda {c1},y +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuz1 +tax +lda {c1},x +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuz1 +tay +lda {c1},y +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuz2 +lda {c1},x +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuz1 +lda {c1},x +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuz1 +lda {c1},x +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuz1 +lda {c1},x +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuz2 +lda {c1},y +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuz1 +lda {c1},y +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuz1 +lda {c1},y +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuz1 +lda {c1},y +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuaa +tay +lda {c1},y +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuaa +tay +lda {c1},y +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuaa +tax +lda {c1},x +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuaa +tay +lda {c1},y +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuaa +tay +lda {c1},y +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuaa +tay +lda {c1},y +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuaa +tax +lda {c1},x +clc +adc {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuaa +tay +lda {c1},y +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuaa +tay +lda {c1},x +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuaa +tay +lda {c1},x +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuaa +tay +lda {c1},x +clc +adc {c1},y +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuaa +tay +lda {c1},x +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuaa +tax +lda {c1},x +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuaa +tax +lda {c1},x +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuaa +tax +lda {c1},x +clc +adc {c1},y +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuaa +tax +lda {c1},x +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuxx +lda {c1},x +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuxx +lda {c1},x +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuxx +lda {c1},x +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuxx +lda {c1},x +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuxx +tay +lda {c1},x +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuxx +tay +lda {c1},x +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuxx +tay +lda {c1},x +clc +adc {c1},y +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuxx +tay +lda {c1},x +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuxx +lda {c1},x +clc +adc {c1},x +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuxx +lda {c1},x +clc +adc {c1},x +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuxx +lda {c1},x +clc +adc {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuxx +lda {c1},x +clc +adc {c1},x +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuxx +lda {c1},x +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuxx +lda {c1},x +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuxx +lda {c1},x +clc +adc {c1},y +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuxx +lda {c1},x +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuyy +lda {c1},y +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuyy +lda {c1},y +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuyy +lda {c1},y +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuyy +lda {c1},y +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuyy +tax +lda {c1},x +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuyy +tax +lda {c1},x +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuyy +tax +lda {c1},x +clc +adc {c1},y +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuyy +tax +lda {c1},x +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuyy +lda {c1},x +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuyy +lda {c1},x +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuyy +lda {c1},x +clc +adc {c1},y +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuyy +lda {c1},x +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuyy +lda {c1},y +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuyy +lda {c1},y +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuyy +lda {c1},y +clc +adc {c1},y +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuyy +lda {c1},y +clc +adc {c1},y +tay +//FRAGMENT vbuaa_le_vbuxx_then_la1 +tay +sty $ff +cpx $ff +bcs {la1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz2 +ldy {z2} +lda {c1},y +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c1},y +clc +adc {c2},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz1 +ldx {z1} +lda {c1},x +clc +adc {c2},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c1},y +clc +adc {c2},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuaa +tay +lda {c1},y +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuaa +tay +lda {c1},y +clc +adc {c2},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuaa +tax +lda {c1},x +clc +adc {c2},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuaa +tay +lda {c1},y +clc +adc {c2},y +tay +//FRAGMENT vbuz1=pbuz2_derefidx_(pbuz3_derefidx_vbuz4)_plus_pbuz5_derefidx_(pbuz6_derefidx_vbuz4) +ldy {z4} +lda ({z6}),y +sta $ff +lda ({z3}),y +tay +lda ({z2}),y +ldy $ff +clc +adc ({z5}),y +sta {z1} +//FRAGMENT vbuz1=vbuz1_bor_pbuc1_derefidx_vbuaa +tay +lda {c1},y +ora {z1} +sta {z1} +//FRAGMENT vbuxx=vbuxx_bor_pbuc1_derefidx_vbuaa +tay +txa +ora {c1},y +tax +//FRAGMENT vbuyy=vbuyy_bor_pbuc1_derefidx_vbuaa +tax +tya +ora {c1},x +tay +//FRAGMENT vbuaa=pbuz1_derefidx_(pbuz2_derefidx_vbuz3)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuz3) +ldy {z3} +lda ({z5}),y +sta $ff +lda ({z2}),y +tay +lda ({z1}),y +ldy $ff +clc +adc ({z4}),y +//FRAGMENT vbuxx=pbuz1_derefidx_(pbuz2_derefidx_vbuz3)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuz3) +ldy {z3} +lda ({z5}),y +sta $ff +lda ({z2}),y +tay +lda ({z1}),y +ldy $ff +clc +adc ({z4}),y +tax +//FRAGMENT vbuyy=pbuz1_derefidx_(pbuz2_derefidx_vbuz3)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuz3) +ldy {z3} +lda ({z5}),y +sta $ff +lda ({z2}),y +tay +lda ({z1}),y +ldy $ff +clc +adc ({z4}),y +tay +//FRAGMENT vbuz1=pbuz2_derefidx_(pbuz3_derefidx_vbuaa)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuaa) +tay +lda ({z5}),y +sta $ff +lda ({z3}),y +tay +lda ({z2}),y +ldy $ff +clc +adc ({z4}),y +sta {z1} +//FRAGMENT vbuaa=pbuz1_derefidx_(pbuz2_derefidx_vbuaa)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuaa) +tay +lda ({z4}),y +sta $ff +lda ({z2}),y +tay +lda ({z1}),y +ldy $ff +clc +adc ({z3}),y +//FRAGMENT vbuxx=pbuz1_derefidx_(pbuz2_derefidx_vbuaa)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuaa) +tay +lda ({z4}),y +sta $ff +lda ({z2}),y +tay +lda ({z1}),y +ldy $ff +clc +adc ({z3}),y +tax +//FRAGMENT vbuyy=pbuz1_derefidx_(pbuz2_derefidx_vbuaa)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuaa) +tay +lda ({z4}),y +sta $ff +lda ({z2}),y +tay +lda ({z1}),y +ldy $ff +clc +adc ({z3}),y +tay +//FRAGMENT vbuz1=pbuz2_derefidx_(pbuz3_derefidx_vbuxx)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuxx) +txa +tay +lda ({z5}),y +sta $ff +lda ({z3}),y +tay +lda ({z2}),y +ldy $ff +clc +adc ({z4}),y +sta {z1} +//FRAGMENT vbuaa=pbuz1_derefidx_(pbuz2_derefidx_vbuxx)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuxx) +txa +tay +lda ({z4}),y +sta $ff +lda ({z2}),y +tay +lda ({z1}),y +ldy $ff +clc +adc ({z3}),y +//FRAGMENT vbuxx=pbuz1_derefidx_(pbuz2_derefidx_vbuxx)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuxx) +txa +tay +lda ({z4}),y +sta $ff +lda ({z2}),y +tay +lda ({z1}),y +ldy $ff +clc +adc ({z3}),y +tax +//FRAGMENT vbuyy=pbuz1_derefidx_(pbuz2_derefidx_vbuxx)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuxx) +txa +tay +lda ({z4}),y +sta $ff +lda ({z2}),y +tay +lda ({z1}),y +ldy $ff +clc +adc ({z3}),y +tay +//FRAGMENT vbuz1=pbuz2_derefidx_(pbuz3_derefidx_vbuyy)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuyy) +lda ({z5}),y +sta $ff +lda ({z3}),y +tay +lda ({z2}),y +ldy $ff +clc +adc ({z4}),y +sta {z1} +//FRAGMENT vbuaa=pbuz1_derefidx_(pbuz2_derefidx_vbuyy)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuyy) +lda ({z4}),y +sta $ff +lda ({z2}),y +tay +lda ({z1}),y +ldy $ff +clc +adc ({z3}),y +//FRAGMENT vbuxx=pbuz1_derefidx_(pbuz2_derefidx_vbuyy)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuyy) +lda ({z4}),y +sta $ff +lda ({z2}),y +tay +lda ({z1}),y +ldy $ff +clc +adc ({z3}),y +tax +//FRAGMENT vbuyy=pbuz1_derefidx_(pbuz2_derefidx_vbuyy)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuyy) +lda ({z4}),y +sta $ff +lda ({z2}),y +tay +lda ({z1}),y +ldy $ff +clc +adc ({z3}),y +tay +//FRAGMENT _deref_pbuc1=_deref_(_deref_qbuc2) +ldy {c2} +sty $fe +ldy {c2}+1 +sty $ff +ldy #0 +lda ($fe),y +sta {c1} +//FRAGMENT vbsz1_eq_vbsc1_then_la1 +lda #{c1} +cmp {z1} +beq {la1} +//FRAGMENT 0_eq_vbsz1_then_la1 +lda {z1} +cmp #0 +beq {la1} +//FRAGMENT pbuz1=pbuz2_plus_vbsz3 +lda {z3} +pha +clc +adc {z2} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vbsaa_eq_vbsc1_then_la1 +cmp #{c1} +beq {la1} +//FRAGMENT vbsaa=vbsyy_minus_vbsaa +sta $ff +tya +sec +sbc $ff +//FRAGMENT 0_eq_vbsaa_then_la1 +cmp #0 +beq {la1} +//FRAGMENT pbuz1=pbuz2_plus_vbsaa +pha +clc +adc {z2} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_plus_vbsxx +txa +pha +clc +adc {z2} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_plus_vbsyy +tya +pha +clc +adc {z2} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc {z2}+1 +sta {z1}+1 +//FRAGMENT 0_eq_vbsxx_then_la1 +cpx #0 +beq {la1} +//FRAGMENT vbsxx_eq_vbsc1_then_la1 +cpx #{c1} +beq {la1} +//FRAGMENT 0_eq_vbsyy_then_la1 +cpy #0 +beq {la1} +//FRAGMENT pbuz1=pbuz1_plus_vbsxx +txa +pha +clc +adc {z1} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc {z1}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_rol_2 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT _deref_pwsz1=vwsc1 +ldy #0 +lda #<{c1} +sta ({z1}),y +iny +lda #>{c1} +sta ({z1}),y +//FRAGMENT vwsz1=_deref_pwsz2_band_vwsc1 +ldy #0 +lda ({z2}),y +and #<{c1} +sta {z1} +iny +lda ({z2}),y +and #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=_hi__deref_pwsz2 +ldy #1 +lda ({z2}),y +sta {z1} +//FRAGMENT vbuaa=_hi__deref_pwsz1 +ldy #1 +lda ({z1}),y +//FRAGMENT vbuxx=_hi__deref_pwsz1 +ldy #1 +lda ({z1}),y +tax +//FRAGMENT vbuyy=_hi__deref_pwsz1 +ldy #1 +lda ({z1}),y +tay +//FRAGMENT pwsc1_derefidx_vbuz1=pwsc1_derefidx_vbuz1_minus_vbuz2 +ldx {z1} +sec +lda {c1},x +sbc {z2} +sta {c1},x +bcs !+ +dec {c1}+1,x +!: +//FRAGMENT pwsc1_derefidx_vbuz1=pwsc1_derefidx_vbuz1_minus_vbuxx +ldy {z1} +stx $ff +sec +lda {c1},y +sbc $ff +sta {c1},y +lda {c1}+1,y +sbc #0 +sta {c1},y +//FRAGMENT pwsc1_derefidx_vbuz1=pwsc1_derefidx_vbuz1_minus_vbuyy +tya +ldy {z1} +clc +sbc {c1},y +eor #$ff +sta {c1},y +bcc !+ +lda {c1}+1,y +sbc #$01 +sta {c1}+1,y +!: +//FRAGMENT pwsc1_derefidx_vbuaa=pwsc1_derefidx_vbuaa_minus_vbuz1 +tax +sec +lda {c1},x +sbc {z1} +sta {c1},x +bcs !+ +dec {c1}+1,x +!: +//FRAGMENT pwsc1_derefidx_vbuaa=pwsc1_derefidx_vbuaa_minus_vbuxx +sec +stx $ff +tax +lda {c1},x +sbc $ff +sta {c1},x +bcs !+ +dec {c1}+1,x +!: +//FRAGMENT pwsc1_derefidx_vbuaa=pwsc1_derefidx_vbuaa_minus_vbuyy +sec +sty $ff +tay +lda {c1},y +sbc $ff +sta {c1},y +lda {c1}+1,y +sbc #$00 +sta {c1}+1,y +//FRAGMENT pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_minus_vbuz1 +sec +lda {c1},x +sbc {z1} +sta {c1},x +bcs !+ +dec {c1}+1,x +!: +//FRAGMENT pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_minus_vbuxx +txa +clc +sbc {c1},x +eor #$ff +sta {c1},x +bcc !+ +lda {c1}+1,x +sbc #$01 +sta {c1}+1,x +!: +//FRAGMENT pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_minus_vbuyy +tya +clc +sbc {c1},x +eor #$ff +sta {c1},x +bcc !+ +lda {c1}+1,x +sbc #$01 +sta {c1}+1,x +!: +//FRAGMENT pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_minus_vbuz1 +sec +lda {c1},y +sbc {z1} +sta {c1},y +lda {c1}+1,y +sbc #0 +sta {c1}+1,y +//FRAGMENT pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_minus_vbuxx +stx $ff +sec +lda {c1},y +sbc $ff +sta {c1},y +lda {c1}+1,y +sbc #0 +sta {c1},y +//FRAGMENT pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_minus_vbuyy +tya +clc +sbc {c1},y +eor #$ff +sta {c1},y +bcc !+ +lda {c1}+1,y +sbc #$01 +sta {c1}+1,y +!: +//FRAGMENT pwuc1_derefidx_vbuaa=vbuc2 +tay +lda #{c2} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT _deref_pwuz1=vbuc1 +lda #{c1} +ldy #0 +sta ({z1}),y +tya +iny +sta ({z1}),y +//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_plus_pwuc1_derefidx_vbuz3 +ldx {z2} +ldy {z3} +clc +lda {c1},x +adc {c1},y +sta {z1} +lda {c1}+1,x +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vbuaa=vbuz1_plus_2 +lda {z1} +clc +adc #2 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_plus_pwuc1_derefidx_vbuz2 +ldy {z2} +clc +lda {c1},x +adc {c1},y +sta {z1} +lda {c1}+1,x +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_plus_pwuc1_derefidx_vbuz2 +ldx {z2} +clc +lda {c1},x +adc {c1},y +sta {z1} +lda {c1}+1,x +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_plus_pwuc1_derefidx_vbuaa +ldx {z2} +tay +clc +lda {c1},x +adc {c1},y +sta {z1} +lda {c1}+1,x +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_plus_pwuc1_derefidx_vbuaa +tay +clc +lda {c1},x +adc {c1},y +sta {z1} +lda {c1}+1,x +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_plus_pwuc1_derefidx_vbuaa +tax +clc +lda {c1},x +adc {c1},y +sta {z1} +lda {c1}+1,x +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_plus_pwuc1_derefidx_vbuxx +ldy {z2} +clc +lda {c1},x +adc {c1},y +sta {z1} +lda {c1}+1,x +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_plus_pwuc1_derefidx_vbuxx +txa +tay +clc +lda {c1},x +adc {c1},y +sta {z1} +lda {c1}+1,x +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_plus_pwuc1_derefidx_vbuxx +clc +lda {c1},x +adc {c1},y +sta {z1} +lda {c1}+1,x +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_plus_pwuc1_derefidx_vbuyy +ldx {z2} +clc +lda {c1},x +adc {c1},y +sta {z1} +lda {c1}+1,x +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_plus_pwuc1_derefidx_vbuyy +clc +lda {c1},x +adc {c1},y +sta {z1} +lda {c1}+1,x +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_plus_pwuc1_derefidx_vbuyy +tya +tax +clc +lda {c1},x +adc {c1},y +sta {z1} +lda {c1}+1,x +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vbuz1=vbuyy_plus_2 +iny +iny +sty {z1} +//FRAGMENT vbuz1=_deref_pbuz2_plus__deref_pbuz3 +ldy #0 +lda ({z2}),y +clc +ldy #0 +adc ({z3}),y +sta {z1} +//FRAGMENT vbuaa=_deref_pbuz1_plus__deref_pbuz2 +ldy #0 +lda ({z1}),y +clc +ldy #0 +adc ({z2}),y +//FRAGMENT vbuxx=_deref_pbuz1_plus__deref_pbuz2 +ldy #0 +lda ({z1}),y +clc +ldy #0 +adc ({z2}),y +tax +//FRAGMENT vbuyy=_deref_pbuz1_plus__deref_pbuz2 +ldy #0 +lda ({z1}),y +clc +ldy #0 +adc ({z2}),y +tay +//FRAGMENT vwuz1=_deref_pwuz2_plus__deref_pwuz1 +ldy #0 +clc +lda ({z1}),y +adc ({z2}),y +pha +iny +lda ({z1}),y +adc ({z2}),y +sta {z1}+1 +pla +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c1},y +clc +adc {c2},y +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc1_derefidx_vbuz1_plus_vbuc2 +lda #{c2} +ldy {z1} +clc +adc {c1},y +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuaa +tax +tay +lda {c1},x +clc +adc {c2},x +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx +lda {c1},x +clc +adc {c2},x +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy +lda {c1},y +clc +adc {c2},y +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuxx_plus_vbuc2 +lda #{c2} +clc +adc {c1},x +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuyy_plus_vbuc2 +lda #{c2} +clc +adc {c1},y +sta {c1},y +//FRAGMENT _deref_pbuz1=_deref_pbuz1_plus_pbuz1_derefidx_vbuc1 +ldy #0 +lda ({z1}),y +ldy #{c1} +clc +adc ({z1}),y +ldy #0 +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuc1=pbuz1_derefidx_vbuc1_plus_vbuc2 +lda #{c2} +ldy #{c1} +clc +adc ({z1}),y +sta ({z1}),y +//FRAGMENT vbuz1=_deref_pbuz2_ror_4 +ldy #0 +lda ({z2}),y +lsr +lsr +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=_deref_pbuz1_ror_4 +ldy #0 +lda ({z1}),y +lsr +lsr +lsr +lsr +//FRAGMENT vbuxx=_deref_pbuz1_ror_4 +ldy #0 +lda ({z1}),y +lsr +lsr +lsr +lsr +tax +//FRAGMENT vbuyy=_deref_pbuz1_ror_4 +ldy #0 +lda ({z1}),y +lsr +lsr +lsr +lsr +tay +//FRAGMENT isr_hardware_clobay_entry +sta rega+1 +sty regy+1 +//FRAGMENT isr_hardware_clobay_exit +rega: lda #0 +regy: ldy #0 +rti +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bxor_vbuc2 +lda #{c2} +eor {c1} +sta {c1} +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_vwuc2 +ldy {z1} +clc +lda {c1},y +adc #<{c2} +sta {c1},y +lda {c1}+1,y +adc #>{c2} +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuaa=pwuc1_derefidx_vbuaa_plus_vwuc2 +tay +clc +lda {c1},y +adc #<{c2} +sta {c1},y +lda {c1}+1,y +adc #>{c2} +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vwuc2 +clc +lda {c1},x +adc #<{c2} +sta {c1},x +lda {c1}+1,x +adc #>{c2} +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_vwuc2 +clc +lda {c1},y +adc #<{c2} +sta {c1},y +lda {c1}+1,y +adc #>{c2} +sta {c1}+1,y +//FRAGMENT vwsz1=_deref_pwsz2_minus__deref_pwsz3 +ldy #0 +sec +lda ({z2}),y +sbc ({z3}),y +sta {z1} +iny +lda ({z2}),y +sbc ({z3}),y +sta {z1}+1 +//FRAGMENT vduz1=vduz2_plus_vwuz3 +lda {z2} +clc +adc {z3} +sta {z1} +lda {z2}+1 +adc {z3}+1 +sta {z1}+1 +lda {z2}+2 +adc #0 +sta {z1}+2 +lda {z2}+3 +adc #0 +sta {z1}+3 +//FRAGMENT vduz1=vduz1_plus_vwuz2 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +lda {z1}+2 +adc #0 +sta {z1}+2 +lda {z1}+3 +adc #0 +sta {z1}+3 +//FRAGMENT _deref_(_deref_qbuc1)=vbuc2 +lda #{c2} +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT vwsz1=vwsz2_minus_vwsc1 +lda {z2} +sec +sbc #<{c1} +sta {z1} +lda {z2}+1 +sbc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=_sword_pbsc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +// sign-extend the byte +ora #$7f +bmi !+ +lda #0 +!: +sta {z1}+1 +//FRAGMENT vwsz1=_sword_vbsz2 +lda {z2} +sta {z1} +// sign-extend the byte +ora #$7f +bmi !+ +lda #0 +!: +sta {z1}+1 +//FRAGMENT vwsz1=vwsz2_rol_3 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT vwsz1=vwsz2_ror_6 +lda {z2} +sta $ff +lda {z2}+1 +sta {z1} +lda #0 +bit {z2}+1 +bpl !+ +lda #$ff +!: +sta {z1}+1 +rol $ff +rol {z1} +rol {z1}+1 +rol $ff +rol {z1} +rol {z1}+1 +//FRAGMENT vwsz1=_deref_pwsc1 +lda {c1} +sta {z1} +lda {c1}+1 +sta {z1}+1 +//FRAGMENT vwsz1=_sword_pbsc1_derefidx_vbuaa +tay +lda {c1},y +sta {z1} +// sign-extend the byte +ora #$7f +bmi !+ +lda #0 +!: +sta {z1}+1 +//FRAGMENT vwsz1=_sword_pbsc1_derefidx_vbuxx +lda {c1},x +sta {z1} +// sign-extend the byte +ora #$7f +bmi !+ +lda #0 +!: +sta {z1}+1 +//FRAGMENT vwsz1=_sword_pbsc1_derefidx_vbuyy +lda {c1},y +sta {z1} +// sign-extend the byte +ora #$7f +bmi !+ +lda #0 +!: +sta {z1}+1 +//FRAGMENT vwsz1=_sword_vbsaa +sta {z1} +// sign-extend the byte +ora #$7f +bmi !+ +lda #0 +!: +sta {z1}+1 +//FRAGMENT vwsz1=_sword_vbsxx +txa +sta {z1} +// sign-extend the byte +ora #$7f +bmi !+ +lda #0 +!: +sta {z1}+1 +//FRAGMENT vwsz1=_sword_vbsyy +tya +sta {z1} +// sign-extend the byte +ora #$7f +bmi !+ +lda #0 +!: +sta {z1}+1 +//FRAGMENT vwsz1=vwsz2_minus_vwsz1 +lda {z2} +sec +sbc {z1} +sta {z1} +lda {z2}+1 +sbc {z1}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_ror_6 +lda {z1} +sta $ff +lda {z1}+1 +sta {z1} +lda #0 +bit {z1}+1 +bpl !+ +lda #$ff +!: +sta {z1}+1 +rol $ff +rol {z1} +rol {z1}+1 +rol $ff +rol {z1} +rol {z1}+1 +//FRAGMENT vwsz1=vwsz1_rol_3 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT vbsz1_le_vbsc1_then_la1 +lda #{c1} +sec +sbc {z1} +bvc !+ +eor #$80 +!: +bpl {la1} +//FRAGMENT vbsaa_le_vbsc1_then_la1 +sec +sbc #{c1} +beq {la1} +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vbsxx_le_vbsc1_then_la1 +txa +sec +sbc #{c1} +beq {la1} +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vbsyy_le_vbsc1_then_la1 +tya +sec +sbc #{c1} +beq {la1} +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vwsz1=vbsz2_plus_vwsc1 +lda {z2} +tax +clc +adc #<{c1} +sta {z1} +txa +ora #$7f +bmi !+ +lda #0 +!: +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=vbsaa_plus_vwsc1 +tax +clc +adc #<{c1} +sta {z1} +txa +ora #$7f +bmi !+ +lda #0 +!: +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=vbsxx_plus_vwsc1 +txa +tax +clc +adc #<{c1} +sta {z1} +txa +ora #$7f +bmi !+ +lda #0 +!: +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=vbsyy_plus_vwsc1 +tya +tax +clc +adc #<{c1} +sta {z1} +txa +ora #$7f +bmi !+ +lda #0 +!: +adc #>{c1} +sta {z1}+1 +//FRAGMENT vbuaa_gt_vbuz1_then_la1 +cmp {z1} +beq !+ +bcs {la1} +!: +//FRAGMENT pduc1_derefidx_vbuz1=pduc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1},y +lda {c2}+1,y +sta {c1}+1,y +lda {c2}+2,y +sta {c1}+2,y +lda {c2}+3,y +sta {c1}+3,y +//FRAGMENT pbuz1_derefidx_vbuz2_eq_0_then_la1 +ldy {z2} +lda ({z1}),y + +cmp #0 +beq {la1} +//FRAGMENT pduc1_derefidx_vbuz1=pduc1_derefidx_vbuz1_plus_pduc2_derefidx_vbuz1 +ldy {z1} +clc +lda {c1},y +adc {c2},y +sta {c1},y +lda {c1}+1,y +adc {c2}+1,y +sta {c1}+1,y +lda {c1}+2,y +adc {c2}+2,y +sta {c1}+2,y +lda {c1}+3,y +adc {c2}+3,y +sta {c1}+3,y +//FRAGMENT qbuc1_derefidx_vbuaa=pbuz1 +tay +lda {z1} +sta {c1},y +lda {z1}+1 +sta {c1}+1,y +//FRAGMENT pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa +tay +lda {c2},y +sta {c1},y +lda {c2}+1,y +sta {c1}+1,y +lda {c2}+2,y +sta {c1}+2,y +lda {c2}+3,y +sta {c1}+3,y +//FRAGMENT pduc1_derefidx_vbuxx=pduc2_derefidx_vbuxx +lda {c2},x +sta {c1},x +lda {c2}+1,x +sta {c1}+1,x +lda {c2}+2,x +sta {c1}+2,x +lda {c2}+3,x +sta {c1}+3,x +//FRAGMENT pduc1_derefidx_vbuyy=pduc2_derefidx_vbuyy +lda {c2},y +sta {c1},y +lda {c2}+1,y +sta {c1}+1,y +lda {c2}+2,y +sta {c1}+2,y +lda {c2}+3,y +sta {c1}+3,y +//FRAGMENT pbuz1_derefidx_vbuxx_eq_0_then_la1 +txa +tay +lda ({z1}),y + +cmp #0 +beq {la1} +//FRAGMENT pbuz1_derefidx_vbuyy_eq_0_then_la1 +lda ({z1}),y + +cmp #0 +beq {la1} +//FRAGMENT pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa +tay +clc +lda {c1},y +adc {c2},y +sta {c1},y +lda {c1}+1,y +adc {c2}+1,y +sta {c1}+1,y +lda {c1}+2,y +adc {c2}+2,y +sta {c1}+2,y +lda {c1}+3,y +adc {c2}+3,y +sta {c1}+3,y +//FRAGMENT pduc1_derefidx_vbuxx=pduc1_derefidx_vbuxx_plus_pduc2_derefidx_vbuxx +clc +lda {c1},x +adc {c2},x +sta {c1},x +lda {c1}+1,x +adc {c2}+1,x +sta {c1}+1,x +lda {c1}+2,x +adc {c2}+2,x +sta {c1}+2,x +lda {c1}+3,x +adc {c2}+3,x +sta {c1}+3,x +//FRAGMENT pduc1_derefidx_vbuyy=pduc1_derefidx_vbuyy_plus_pduc2_derefidx_vbuyy +clc +lda {c1},y +adc {c2},y +sta {c1},y +lda {c1}+1,y +adc {c2}+1,y +sta {c1}+1,y +lda {c1}+2,y +adc {c2}+2,y +sta {c1}+2,y +lda {c1}+3,y +adc {c2}+3,y +sta {c1}+3,y +//FRAGMENT pbuz1=_dec_pbuz2 +lda {z2} +sec +sbc #1 +sta {z1} +lda {z2}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT vduz1_eq_vduz2_then_la1 +lda {z1} +cmp {z2} +bne !+ +lda {z1}+1 +cmp {z2}+1 +bne !+ +lda {z1}+2 +cmp {z2}+2 +bne !+ +lda {z1}+3 +cmp {z2}+3 +beq {la1} +!: +//FRAGMENT vdsz1_eq_vdsz2_then_la1 +lda {z1} +cmp {z2} +bne !+ +lda {z1}+1 +cmp {z2}+1 +bne !+ +lda {z1}+2 +cmp {z2}+2 +bne !+ +lda {z1}+3 +cmp {z2}+3 +beq {la1} +!: +//FRAGMENT vdsz1=vdsz1_plus_vwsz2 +lda {z2}+1 +ora #$7f +bmi !+ +lda #0 +!: +sta $ff +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +lda {z1}+2 +adc $ff +sta {z1}+2 +lda {z1}+3 +adc $ff +sta {z1}+3 +//FRAGMENT vdsz1=vdsz1_minus_vwsz2 +lda {z2}+1 +ora #$7f +bmi !+ +lda #0 +!: +sta $ff +sec +lda {z1} +sbc {z2} +sta {z1} +lda {z1}+1 +sbc {z2}+1 +sta {z1}+1 +lda {z1}+2 +sbc $ff +sta {z1}+2 +lda {z1}+3 +sbc $ff +sta {z1}+3 +//FRAGMENT vwsz1=_dec_vwsz1 +lda {z1} +bne !+ +dec {z1}+1 +!: +dec {z1} +//FRAGMENT vwsz1_lt_vbsc1_then_la1 +NO_SYNTHESIS +//FRAGMENT vwsz1_lt_vwuc1_then_la1 +lda {z1}+1 +bmi {la1} +cmp #>{c1} +bcc {la1} +bne !+ +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_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 _deref_pwuc1=_deref_pwuc1_plus_vwuc2 +lda #<{c2} +clc +adc {c1} +sta {c1} +lda #>{c2} +adc {c1}+1 +sta {c1}+1 +//FRAGMENT vbuz1=vbuz2_plus__deref_pbuc1 +lda {c1} +clc +adc {z2} +sta {z1} +//FRAGMENT vbuaa=vbuz1_plus__deref_pbuc1 +lda {c1} +clc +adc {z1} +//FRAGMENT vbuxx=vbuz1_plus__deref_pbuc1 +lda {c1} +clc +adc {z1} +tax +//FRAGMENT vbuyy=vbuz1_plus__deref_pbuc1 +lda {c1} +clc +adc {z1} +tay +//FRAGMENT vbuz1=vbuaa_plus__deref_pbuc1 +clc +adc {c1} +sta {z1} +//FRAGMENT vbuaa=vbuaa_plus__deref_pbuc1 +clc +adc {c1} +//FRAGMENT vbuxx=vbuaa_plus__deref_pbuc1 +clc +adc {c1} +tax +//FRAGMENT vbuyy=vbuaa_plus__deref_pbuc1 +clc +adc {c1} +tay +//FRAGMENT vbuz1=vbuxx_plus__deref_pbuc1 +txa +clc +adc {c1} +sta {z1} +//FRAGMENT vbuaa=vbuxx_plus__deref_pbuc1 +txa +clc +adc {c1} +//FRAGMENT vbuxx=vbuxx_plus__deref_pbuc1 +txa +clc +adc {c1} +tax +//FRAGMENT vbuyy=vbuxx_plus__deref_pbuc1 +txa +clc +adc {c1} +tay +//FRAGMENT vbuz1=vbuyy_plus__deref_pbuc1 +tya +clc +adc {c1} +sta {z1} +//FRAGMENT vbuaa=vbuyy_plus__deref_pbuc1 +tya +clc +adc {c1} +//FRAGMENT vbuxx=vbuyy_plus__deref_pbuc1 +tya +clc +adc {c1} +tax +//FRAGMENT vbuyy=vbuyy_plus__deref_pbuc1 +tya +clc +adc {c1} +tay +//FRAGMENT vwsz1=pwsc1_derefidx_vbuz2_plus__deref_pwsz3 +ldx {z2} +clc +ldy #0 +lda {c1},x +adc ({z3}),y +sta {z1} +iny +lda {c1}+1,x +adc ({z3}),y +sta {z1}+1 +//FRAGMENT vwsz1=pwsc1_derefidx_vbuaa_plus__deref_pwsz2 +tax +clc +ldy #0 +lda {c1},x +adc ({z2}),y +sta {z1} +iny +lda {c1}+1,x +adc ({z2}),y +sta {z1}+1 +//FRAGMENT vwsz1=pwsc1_derefidx_vbuxx_plus__deref_pwsz2 +clc +ldy #0 +lda {c1},x +adc ({z2}),y +sta {z1} +iny +lda {c1}+1,x +adc ({z2}),y +sta {z1}+1 +//FRAGMENT vwsz1=pwsc1_derefidx_vbuyy_plus__deref_pwsz2 +tya +tax +clc +ldy #0 +lda {c1},x +adc ({z2}),y +sta {z1} +iny +lda {c1}+1,x +adc ({z2}),y +sta {z1}+1 +//FRAGMENT vwsz1=pwsc1_derefidx_vbuaa_plus__deref_pwsz1 +tax +ldy #0 +clc +lda {c1},x +adc ({z1}),y +pha +iny +lda {c1}+1,x +adc ({z1}),y +sta {z1}+1 +pla +sta {z1} +//FRAGMENT pprz1=_deref_qprc1 +lda {c1} +sta {z1} +lda {c1}+1 +sta {z1}+1 +//FRAGMENT vbuaa_le_vbuyy_then_la1 +sta $ff +cpy $ff +bcs {la1} +//FRAGMENT vbuxx_ge_vbuaa_then_la1 +tay +sty $ff +cpx $ff +bcs {la1} +//FRAGMENT vbuyy_ge_vbuaa_then_la1 +sta $ff +cpy $ff +bcs {la1} +//FRAGMENT pwuc1_derefidx_vbuz1=pwuz2_derefidx_vbuc2 +ldx {z1} +ldy #{c2} +lda ({z2}),y +sta {c1},x +iny +lda ({z2}),y +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuaa=pwuz1_derefidx_vbuc2 +ldy #{c2} +tax +lda ({z1}),y +sta {c1},x +iny +lda ({z1}),y +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=pwuz1_derefidx_vbuc2 +ldy #{c2} +lda ({z1}),y +sta {c1},x +iny +lda ({z1}),y +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=pwuz1_derefidx_vbuc2 +tya +ldy #{c2} +tax +lda ({z1}),y +sta {c1},x +iny +lda ({z1}),y +sta {c1}+1,x +//FRAGMENT vbsaa=vbsc1 +lda #{c1} +//FRAGMENT 0_neq_vbsyy_then_la1 +cpy #0 +bne {la1} +//FRAGMENT vbum1=vbum2 +lda {m2} +sta {m1} +//FRAGMENT vbum1=vbum1_plus_vbuc1 +lax {m1} +axs #-[{c1}] +stx {m1} +//FRAGMENT pbuc1_derefidx_vbum1=pbuc2_derefidx_vbum2 +ldy {m2} +lda {c2},y +ldy {m1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc1_derefidx_vbuz1_bor_vbuc2 +lda #{c2} +ldy {z1} +ora {c1},y +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuxx_bor_vbuc2 +lda #{c2} +ora {c1},x +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuyy_bor_vbuc2 +lda #{c2} +ora {c1},y +sta {c1},y +//FRAGMENT vduz1=vduz2_rol_0 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +//FRAGMENT vduz1=vduz2_rol_5 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +lda {z2}+2 +rol +sta {z1}+2 +lda {z2}+3 +rol +sta {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +//FRAGMENT vduz1=vduz2_rol_6 +lda {z2}+3 +lsr +sta $ff +lda {z2}+2 +ror +sta {z1}+3 +lda {z2}+1 +ror +sta {z1}+2 +lda {z2} +ror +sta {z1}+1 +lda #0 +ror +sta {z1} +lsr $ff +ror {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +//FRAGMENT vduz1=vduz2_rol_7 +lda {z2}+3 +lsr +lda {z2}+2 +ror +sta {z1}+3 +lda {z2}+1 +ror +sta {z1}+2 +lda {z2} +ror +sta {z1}+1 +lda #0 +ror +sta {z1} +//FRAGMENT vduz1=vduz2_rol_8 +lda #0 +sta {z1} +lda {z2} +sta {z1}+1 +lda {z2}+1 +sta {z1}+2 +lda {z2}+2 +sta {z1}+3 +//FRAGMENT vduz1=vduz2_rol_9 +lda #0 +sta {z1} +lda {z2} +asl +sta {z1}+1 +lda {z2}+1 +rol +sta {z1}+2 +lda {z2}+2 +rol +sta {z1}+3 +//FRAGMENT vduz1=vduz2_rol_vbuc1 +ldy #{c1} +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpy #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +dey +bne !- +!e: +//FRAGMENT vduz1=vduz2_rol_16 +lda #0 +sta {z1} +sta {z1}+1 +lda {z2} +sta {z1}+2 +lda {z2}+1 +sta {z1}+3 +//FRAGMENT vduz1=vduz2_rol_24 +lda #0 +sta {z1} +sta {z1}+1 +sta {z1}+2 +lda {z2} +sta {z1}+3 +//FRAGMENT vduz1=vduz2_rol_32 +lda #0 +sta {z1} +sta {z1}+1 +sta {z1}+2 +sta {z1}+3 +//FRAGMENT vduz1=vduz2_ror_0 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +//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 vduz1=vduz2_ror_2 +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} +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +//FRAGMENT vduz1=vduz2_ror_3 +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} +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +//FRAGMENT vduz1=vduz2_ror_4 +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} +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +//FRAGMENT vduz1=vduz2_ror_5 +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} +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +//FRAGMENT vduz1=vduz2_ror_6 +lda {z2} +asl +sta $ff +lda {z2}+1 +rol +sta {z1} +lda {z2}+2 +rol +sta {z1}+1 +lda {z2}+3 +rol +sta {z1}+2 +lda #0 +rol +sta {z1}+3 +asl $ff +rol {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +//FRAGMENT vduz1=vduz2_ror_7 +lda {z2} +asl +lda {z2}+1 +rol +sta {z1} +lda {z2}+2 +rol +sta {z1}+1 +lda {z2}+3 +rol +sta {z1}+2 +lda #0 +rol +sta {z1}+3 +//FRAGMENT vduz1=vduz2_ror_8 +lda #0 +sta {z1}+3 +lda {z2}+3 +sta {z1}+2 +lda {z2}+2 +sta {z1}+1 +lda {z2}+1 +sta {z1} +//FRAGMENT vduz1=vduz2_ror_9 +lda #0 +sta {z1}+3 +lda {z2}+3 +lsr +sta {z1}+2 +lda {z2}+2 +ror +sta {z1}+1 +lda {z2}+1 +ror +sta {z1} +//FRAGMENT vduz1=vduz2_ror_vbuc1 +ldx #{c1} +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpx #0 +beq !e+ +!: +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +dex +bne !- +!e: +//FRAGMENT vduz1=vduz2_ror_16 +lda #0 +sta {z1}+3 +sta {z1}+2 +lda {z2}+3 +sta {z1}+1 +lda {z2}+2 +sta {z1} +//FRAGMENT vduz1=vduz2_ror_24 +lda #0 +sta {z1}+3 +sta {z1}+2 +sta {z1}+1 +lda {z2}+3 +sta {z1} +//FRAGMENT vduz1=vduz2_ror_32 +lda #0 +sta {z1}+3 +sta {z1}+2 +sta {z1}+1 +sta {z1} +//FRAGMENT vduz1=vduz2_rol_pbuc1_derefidx_vbuz3 +ldx {z3} +ldy {c1},x +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpy #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +dey +bne !- +!e: +//FRAGMENT vduz1=vduz2_ror_pbuc1_derefidx_vbuz3 +ldy {z3} +ldx {c1},y +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpx #0 +beq !e+ +!: +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +dex +bne !- +!e: +//FRAGMENT vduz1=vduz2_rol_pbuc1_derefidx_vbuaa +tax +ldy {c1},x +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpy #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +dey +bne !- +!e: +//FRAGMENT vduz1=vduz2_rol_pbuc1_derefidx_vbuxx +ldy {c1},x +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpy #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +dey +bne !- +!e: +//FRAGMENT vduz1=vduz2_rol_pbuc1_derefidx_vbuyy +ldx {c1},y +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpx #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +dex +bne !- +!e: +//FRAGMENT vduz1=vduz2_ror_pbuc1_derefidx_vbuaa +tay +ldx {c1},y +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpx #0 +beq !e+ +!: +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +dex +bne !- +!e: +//FRAGMENT vduz1=vduz2_ror_pbuc1_derefidx_vbuxx +lda {c1},x +tax +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpx #0 +beq !e+ +!: +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +dex +bne !- +!e: +//FRAGMENT vduz1=vduz2_ror_pbuc1_derefidx_vbuyy +ldx {c1},y +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpx #0 +beq !e+ +!: +lsr {z1}+3 +ror {z1}+2 +ror {z1}+1 +ror {z1} +dex +bne !- +!e: diff --git a/src/main/fragment/cache/fragment-cache-rom6502x.asm b/src/main/fragment/cache/fragment-cache-rom6502x.asm index d308c9e0e..7b1704f69 100644 --- a/src/main/fragment/cache/fragment-cache-rom6502x.asm +++ b/src/main/fragment/cache/fragment-cache-rom6502x.asm @@ -1128,3 +1128,893 @@ bcc {la1} //FRAGMENT vbuyy_lt_vbuc1_then_la1 cpy #{c1} bcc {la1} +//FRAGMENT vbuz1=vbuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {z1} +//FRAGMENT _deref_pbuc1=_dec__deref_pbuc1 +dec {c1} +//FRAGMENT pbuz1=pbuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vbuz2 +lda {z2} +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pvoz1=pvoz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vbuz1=vbuz1_plus_2 +lda {z1} +clc +adc #2 +sta {z1} +//FRAGMENT vbuz1=vbuz2_rol_1 +lda {z2} +asl +sta {z1} +//FRAGMENT vbuz1=vbuz2_bor_vbuz3 +lda {z2} +ora {z3} +sta {z1} +//FRAGMENT vwuz1_lt_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bcc {la1} +bne !+ +lda {z1} +cmp #<{c1} +bcc {la1} +!: +//FRAGMENT vbuz1=pbuz2_derefidx_vbuc1 +ldy #{c1} +lda ({z2}),y +sta {z1} +//FRAGMENT pbuz1=pbuz2_plus_vbuc1 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1_neq_pbuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT _deref_pbuz1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +ldy #0 +sta ({z1}),y +//FRAGMENT vbuaa=vbuz1 +lda {z1} +//FRAGMENT vbuz1=vbuaa_band_vbuc1 +and #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuxx_band_vbuc1 +lda #{c1} +sax {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 +ldx #{c1} +axs #0 +//FRAGMENT vbuyy=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +tay +//FRAGMENT pbuz1=pbuc1_plus_vbuaa +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vbuxx +txa +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vbuyy +tya +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT vbuxx=vbuxx_plus_2 +inx +inx +//FRAGMENT vbuz1=vbuaa_rol_1 +asl +sta {z1} +//FRAGMENT vbuz1=vbuxx_rol_1 +txa +asl +sta {z1} +//FRAGMENT vbuz1=vbuyy_rol_1 +tya +asl +sta {z1} +//FRAGMENT vbuaa=vbuz1_rol_1 +lda {z1} +asl +//FRAGMENT vbuaa=vbuaa_rol_1 +asl +//FRAGMENT vbuaa=vbuxx_rol_1 +txa +asl +//FRAGMENT vbuaa=vbuyy_rol_1 +tya +asl +//FRAGMENT vbuxx=vbuz1_rol_1 +lda {z1} +asl +tax +//FRAGMENT vbuxx=vbuaa_rol_1 +asl +tax +//FRAGMENT vbuxx=vbuxx_rol_1 +txa +asl +tax +//FRAGMENT vbuxx=vbuyy_rol_1 +tya +asl +tax +//FRAGMENT vbuyy=vbuz1_rol_1 +lda {z1} +asl +tay +//FRAGMENT vbuyy=vbuaa_rol_1 +asl +tay +//FRAGMENT vbuyy=vbuxx_rol_1 +txa +asl +tay +//FRAGMENT vbuyy=vbuyy_rol_1 +tya +asl +tay +//FRAGMENT vbuz1=vbuxx_bor_vbuz2 +txa +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuyy_bor_vbuz2 +tya +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuz2_bor_vbuaa +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuxx_bor_vbuaa +stx $ff +ora $ff +sta {z1} +//FRAGMENT vbuz1=vbuyy_bor_vbuaa +sty $ff +ora $ff +sta {z1} +//FRAGMENT vbuz1=vbuz2_bor_vbuxx +txa +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuxx_bor_vbuxx +stx {z1} +//FRAGMENT vbuaa=pbuz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +//FRAGMENT vbuxx=pbuz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +tax +//FRAGMENT vbuyy=pbuz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +tay +//FRAGMENT vbuz1=vbuz2_bor_vbuyy +tya +ora {z2} +sta {z1} +//FRAGMENT vbuaa=vbuc1 +lda #{c1} +//FRAGMENT vbuaa=vbuz1_bor_vbuz2 +lda {z1} +ora {z2} +//FRAGMENT vbuaa=vbuz1_bor_vbuaa +ora {z1} +//FRAGMENT vbuaa=vbuz1_bor_vbuxx +txa +ora {z1} +//FRAGMENT vbuaa=vbuz1_bor_vbuyy +tya +ora {z1} +//FRAGMENT vbuxx=vbuz1_bor_vbuz2 +lda {z1} +ora {z2} +tax +//FRAGMENT vbuxx=vbuz1_bor_vbuaa +ora {z1} +tax +//FRAGMENT vbuxx=vbuz1_bor_vbuxx +txa +ora {z1} +tax +//FRAGMENT vbuxx=vbuz1_bor_vbuyy +tya +ora {z1} +tax +//FRAGMENT vbuyy=vbuz1_bor_vbuz2 +lda {z1} +ora {z2} +tay +//FRAGMENT vbuyy=vbuz1_bor_vbuaa +ora {z1} +tay +//FRAGMENT vbuyy=vbuz1_bor_vbuxx +txa +ora {z1} +tay +//FRAGMENT vbuyy=vbuz1_bor_vbuyy +tya +ora {z1} +tay +//FRAGMENT vbuz1=vbuxx_bor_vbuyy +txa +sty $ff +ora $ff +sta {z1} +//FRAGMENT vbuaa=vbuxx_bor_vbuz1 +txa +ora {z1} +//FRAGMENT vbuaa=vbuxx_bor_vbuaa +stx $ff +ora $ff +//FRAGMENT vbuaa=vbuxx_bor_vbuyy +txa +sty $ff +ora $ff +//FRAGMENT vbuxx=vbuxx_bor_vbuz1 +txa +ora {z1} +tax +//FRAGMENT vbuxx=vbuxx_bor_vbuaa +stx $ff +ora $ff +tax +//FRAGMENT vbuxx=vbuxx_bor_vbuyy +txa +sty $ff +ora $ff +tax +//FRAGMENT vbuyy=vbuxx_bor_vbuz1 +txa +ora {z1} +tay +//FRAGMENT vbuyy=vbuxx_bor_vbuaa +stx $ff +ora $ff +tay +//FRAGMENT vbuyy=vbuxx_bor_vbuyy +txa +sty $ff +ora $ff +tay +//FRAGMENT vbuaa=vbuyy_bor_vbuaa +sty $ff +ora $ff +//FRAGMENT vbuxx=vbuaa +tax +//FRAGMENT vbuyy=vbuaa +tay +//FRAGMENT pbuz1=pbuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT vbuz1=_dec_vbuz1 +dec {z1} +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +ldy #0 +sta ({z1}),y +//FRAGMENT pbuz1=_inc_pbuz2 +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 vbuz1=pbuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +//FRAGMENT vbuz1_ge_vbuz2_then_la1 +lda {z1} +cmp {z2} +bcs {la1} +//FRAGMENT vbuz1=vbuz1_minus_vbuz2 +lda {z1} +sec +sbc {z2} +sta {z1} +//FRAGMENT vwuz1=vwuz2_rol_5 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vwuz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1_eq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +beq {la1} +//FRAGMENT pbuz1=pbuz2_plus_vbuz3 +lda {z3} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz1_minus_vbuc1 +sec +lda {z1} +sbc #{c1} +sta {z1} +lda {z1}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT vbuz1=_deref_pbuc1 +lda {c1} +sta {z1} +//FRAGMENT _deref_pbuz1=vbuz2 +lda {z2} +ldy #0 +sta ({z1}),y +//FRAGMENT vbuxx=vbuxx_band_vbuc1 +lda #{c1} +axs #0 +//FRAGMENT vbuyy=vbuxx_band_vbuc1 +txa +and #{c1} +tay +//FRAGMENT vbuxx=vbuyy_band_vbuc1 +ldx #{c1} +tya +axs #0 +//FRAGMENT vbuyy=vbuyy_band_vbuc1 +tya +and #{c1} +tay +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuaa +tay +lda {c1},y +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuxx +lda {c1},x +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuyy +lda {c1},y +ldy #0 +sta ({z1}),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 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 0_neq_vbuaa_then_la1 +cmp #0 +bne {la1} +//FRAGMENT vbuaa_ge_vbuz1_then_la1 +cmp {z1} +bcs {la1} +//FRAGMENT vbuxx=vbuxx_minus_vbuz1 +txa +sec +sbc {z1} +tax +//FRAGMENT vbuz1=vbuz1_minus_vbuaa +eor #$ff +sec +adc {z1} +sta {z1} +//FRAGMENT vbuxx=vbuxx_minus_vbuaa +sta $ff +txa +sec +sbc $ff +tax +//FRAGMENT vbuz1=vbuz1_minus_vbuxx +txa +eor #$ff +sec +adc {z1} +sta {z1} +//FRAGMENT vbuxx=vbuxx_minus_vbuxx +lda #0 +tax +//FRAGMENT vbuz1=vbuz1_minus_vbuyy +tya +eor #$ff +sec +adc {z1} +sta {z1} +//FRAGMENT vbuxx=vbuxx_minus_vbuyy +txa +sty $ff +sec +sbc $ff +tax +//FRAGMENT vbuaa_eq_vbuc1_then_la1 +cmp #{c1} +beq {la1} +//FRAGMENT vbuaa=_deref_pbuc1 +lda {c1} +//FRAGMENT vbuxx=_deref_pbuc1 +ldx {c1} +//FRAGMENT _deref_pbuz1=vbuaa +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=vbuxx +txa +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=vbuyy +tya +ldy #0 +sta ({z1}),y +//FRAGMENT vbuxx_ge_vbuz1_then_la1 +cpx {z1} +bcs {la1} +//FRAGMENT vbuxx_eq_vbuc1_then_la1 +cpx #{c1} +beq {la1} +//FRAGMENT vbuyy=_deref_pbuc1 +ldy {c1} +//FRAGMENT vbuz1_ge_vbuxx_then_la1 +lda {z1} +stx $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuyy=vbuz1 +ldy {z1} +//FRAGMENT vbuz1_ge_vbuyy_then_la1 +lda {z1} +sty $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuxx_ge_vbuyy_then_la1 +sty $ff +cpx $ff +bcs {la1} +//FRAGMENT vbuaa=vbuxx +txa +//FRAGMENT vbuyy=vbuxx +txa +tay +//FRAGMENT vbuyy_eq_vbuc1_then_la1 +cpy #{c1} +beq {la1} +//FRAGMENT vbuaa=vbuyy +tya +//FRAGMENT vbuxx=vbuyy +tya +tax +//FRAGMENT vbuyy_ge_vbuz1_then_la1 +cpy {z1} +bcs {la1} +//FRAGMENT vwuz1=vwuz1_rol_5 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vwuz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=vbuz2_plus_1 +ldy {z2} +iny +sty {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2 +ldy {z2} +lda {c2},y +ldy {z1} +sta {c1},y +//FRAGMENT vbuz1=vbuz1_minus_vbuc1 +lax {z1} +axs #{c1} +stx {z1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz3 +ldy {z2} +lda {c1},y +ldy {z3} +clc +adc {c2},y +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=vbuz2 +lda {z2} +ldy {z1} +sta {c1},y +//FRAGMENT vbuz1=vbuz1_plus_vbuc1 +lax {z1} +axs #-[{c1}] +stx {z1} +//FRAGMENT vbuaa=vbuz1_plus_1 +lda {z1} +clc +adc #1 +//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 pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1 +ldx {z1} +tay +lda {c2},x +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1 +ldx {z1} +lda {c2},x +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuxx +lda {c2},x +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuxx +tay +lda {c2},x +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx +lda {c2},x +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuyy +lda {c2},y +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuyy +tax +lda {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy +lda {c2},y +sta {c1},x +//FRAGMENT vbuxx=vbuxx_minus_vbuc1 +txa +axs #{c1} +//FRAGMENT vbuyy=vbuyy_minus_vbuc1 +tya +sec +sbc #{c1} +tay +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz2 +ldy {z1} +lda {c1},y +ldy {z2} +clc +adc {c2},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz2 +ldx {z1} +lda {c1},x +ldx {z2} +clc +adc {c2},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz2 +ldy {z1} +lda {c1},y +ldy {z2} +clc +adc {c2},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuxx +lda {c2},x +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuxx +lda {c2},x +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuxx +lda {c2},x +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuxx +lda {c2},x +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuyy +lda {c2},y +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuyy +lda {c2},y +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuyy +lda {c2},y +ldx {z1} +clc +adc {c1},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuyy +lda {c2},y +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz2 +lda {c1},x +ldy {z2} +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz1 +lda {c1},x +ldy {z1} +clc +adc {c2},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz1 +lda {c1},x +ldx {z1} +clc +adc {c2},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz1 +lda {c1},x +ldy {z1} +clc +adc {c2},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx +lda {c1},x +clc +adc {c2},x +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx +lda {c1},x +clc +adc {c2},x +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx +lda {c1},x +clc +adc {c2},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx +lda {c1},x +clc +adc {c2},x +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy +lda {c1},x +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy +lda {c1},x +clc +adc {c2},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy +lda {c1},x +clc +adc {c2},y +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy +lda {c1},x +clc +adc {c2},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz2 +lda {c1},y +ldy {z2} +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz1 +lda {c1},y +ldy {z1} +clc +adc {c2},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz1 +lda {c1},y +ldx {z1} +clc +adc {c2},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz1 +lda {c1},y +ldy {z1} +clc +adc {c2},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx +lda {c1},y +clc +adc {c2},x +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx +lda {c1},y +clc +adc {c2},x +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx +lda {c1},y +clc +adc {c2},x +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx +lda {c1},y +clc +adc {c2},x +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy +lda {c1},y +clc +adc {c2},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy +lda {c1},y +clc +adc {c2},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy +lda {c1},y +clc +adc {c2},y +tax +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy +lda {c1},y +clc +adc {c2},y +tay +//FRAGMENT pbuc1_derefidx_vbuz1=vbuaa +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=vbuxx +ldy {z1} +txa +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=vbuyy +tya +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=vbuz1 +lda {z1} +sta {c1},x +//FRAGMENT vbuyy_ge_vbuc1_then_la1 +cpy #{c1} +bcs {la1} +//FRAGMENT pbuc1_derefidx_vbuxx=vbuaa +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbuaa +sta {c1},y +//FRAGMENT vbuxx=vbuz1_plus_1 +ldx {z1} +inx +//FRAGMENT vbuyy=vbuz1_plus_1 +ldy {z1} +iny +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 +lda #{c2} +ora {c1} +sta {c1} +//FRAGMENT _deref_qprc1=pprc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 diff --git a/src/main/fragment/cache/fragment-cache-wdc65c02.asm b/src/main/fragment/cache/fragment-cache-wdc65c02.asm index a9dacfa48..84ac4eee3 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 149935006b 1499351e94 +//KICKC FRAGMENT CACHE 15355792e7 153557b11b //FRAGMENT vwuz1=vwuc1 lda #<{c1} sta {z1} @@ -268,63 +268,6 @@ sta {z1} lda {z1}+1 adc #>{c1} sta {z1}+1 -//FRAGMENT vbuz1=_deref_pbuc1 -lda {c1} -sta {z1} -//FRAGMENT vbuz1=vbuz2_plus_1 -lda {z2} -inc -sta {z1} -//FRAGMENT vbuaa=_deref_pbuc1 -lda {c1} -//FRAGMENT vbuxx=_deref_pbuc1 -ldx {c1} -//FRAGMENT vbuz1=vbuaa_plus_1 -inc -sta {z1} -//FRAGMENT vbuz1=vbuxx_plus_1 -inx -stx {z1} -//FRAGMENT vbuyy=_deref_pbuc1 -ldy {c1} -//FRAGMENT vbuz1=vbuyy_plus_1 -iny -sty {z1} -//FRAGMENT vbuaa=vbuz1_plus_1 -lda {z1} -inc -//FRAGMENT vbuaa=vbuaa_plus_1 -inc -//FRAGMENT vbuaa=vbuxx_plus_1 -txa -inc -//FRAGMENT vbuaa=vbuyy_plus_1 -tya -inc -//FRAGMENT vbuxx=vbuz1_plus_1 -ldx {z1} -inx -//FRAGMENT vbuxx=vbuaa_plus_1 -tax -inx -//FRAGMENT vbuxx=vbuxx_plus_1 -inx -//FRAGMENT vbuxx=vbuyy_plus_1 -tya -inc -tax -//FRAGMENT vbuyy=vbuz1_plus_1 -ldy {z1} -iny -//FRAGMENT vbuyy=vbuaa_plus_1 -tay -iny -//FRAGMENT vbuyy=vbuxx_plus_1 -txa -inc -tay -//FRAGMENT vbuyy=vbuyy_plus_1 -iny //FRAGMENT 0_neq_pbuc1_derefidx_vbuz1_then_la1 ldy {z1} lda {c1},y @@ -531,3 +474,60 @@ inc //FRAGMENT vbuyy_neq_vbuc1_then_la1 cpy #{c1} bne {la1} +//FRAGMENT vbuz1=_deref_pbuc1 +lda {c1} +sta {z1} +//FRAGMENT vbuz1=vbuz2_plus_1 +lda {z2} +inc +sta {z1} +//FRAGMENT vbuaa=_deref_pbuc1 +lda {c1} +//FRAGMENT vbuxx=_deref_pbuc1 +ldx {c1} +//FRAGMENT vbuz1=vbuaa_plus_1 +inc +sta {z1} +//FRAGMENT vbuz1=vbuxx_plus_1 +inx +stx {z1} +//FRAGMENT vbuyy=_deref_pbuc1 +ldy {c1} +//FRAGMENT vbuz1=vbuyy_plus_1 +iny +sty {z1} +//FRAGMENT vbuaa=vbuz1_plus_1 +lda {z1} +inc +//FRAGMENT vbuaa=vbuaa_plus_1 +inc +//FRAGMENT vbuaa=vbuxx_plus_1 +txa +inc +//FRAGMENT vbuaa=vbuyy_plus_1 +tya +inc +//FRAGMENT vbuxx=vbuz1_plus_1 +ldx {z1} +inx +//FRAGMENT vbuxx=vbuaa_plus_1 +tax +inx +//FRAGMENT vbuxx=vbuxx_plus_1 +inx +//FRAGMENT vbuxx=vbuyy_plus_1 +tya +inc +tax +//FRAGMENT vbuyy=vbuz1_plus_1 +ldy {z1} +iny +//FRAGMENT vbuyy=vbuaa_plus_1 +tay +iny +//FRAGMENT vbuyy=vbuxx_plus_1 +txa +inc +tay +//FRAGMENT vbuyy=vbuyy_plus_1 +iny diff --git a/src/main/java/dk/camelot64/kickc/model/TargetPlatform.java b/src/main/java/dk/camelot64/kickc/model/TargetPlatform.java index 406e9e977..2f3a14fc4 100644 --- a/src/main/java/dk/camelot64/kickc/model/TargetPlatform.java +++ b/src/main/java/dk/camelot64/kickc/model/TargetPlatform.java @@ -18,7 +18,7 @@ import java.util.Map; public class TargetPlatform { /** The name of the default target platform. */ - public static String DEFAULT_NAME = "c64basic"; + public static String DEFAULT_NAME = "c64"; /** The platform name. */ private String name; diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 7dc5c8d85..88168deeb 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -101,9 +101,6 @@ public class Pass4CodeGeneration { linkScriptBody = linkScriptBody.replace("%P", AsmFormat.getAsmNumber(startAddress)); asm.addLine(new AsmInlineKickAsm(linkScriptBody, 0L, 0L)); - // If the link script contains ".segment" then generate segments! - useSegments = linkScriptBody.contains(".segment"); - // Generate global ZP labels asm.startChunk(currentScope, null, "Global Constants & labels"); addConstantsAndLabels(asm, currentScope); @@ -176,8 +173,6 @@ public class Pass4CodeGeneration { program.setAsm(asm); } - // Should the generated program use segments? - private boolean useSegments = false; // Name of the current data segment private String currentCodeSegmentName = Scope.SEGMENT_CODE_DEFAULT; // Name of the current code segment @@ -192,7 +187,7 @@ public class Pass4CodeGeneration { * @param asm The ASM program (where a .segment line is added if needed) */ private void setCurrentSegment(String segmentName, AsmProgram asm) { - if(useSegments && !currentSegmentName.equals(segmentName)) { + if(!currentSegmentName.equals(segmentName)) { asm.addLine(new AsmSegment(segmentName)); currentSegmentName = segmentName; } diff --git a/src/main/kc/target/asm6502.ld b/src/main/kc/target/asm6502.ld index f3c5a32f9..7519f55ed 100644 --- a/src/main/kc/target/asm6502.ld +++ b/src/main/kc/target/asm6502.ld @@ -1 +1,5 @@ -.pc = %P "Program" \ No newline at end of file +// Generic ASM 6502 +.file [name="%O", type="prg", segments="Program"] +.segmentdef Program [segments="Code, Data"] +.segmentdef Code [start=%P] +.segmentdef Data [startAfter="Code"] \ No newline at end of file diff --git a/src/main/kc/target/atari2600.ld b/src/main/kc/target/atari2600.ld index a73daaa03..6854a547d 100644 --- a/src/main/kc/target/atari2600.ld +++ b/src/main/kc/target/atari2600.ld @@ -6,5 +6,4 @@ .segment Vectors .word %E // NMI .word %E // RESET -.word %E // IRQ -.segment Code +.word %E // IRQ \ No newline at end of file diff --git a/src/main/kc/target/c64.ld b/src/main/kc/target/c64.ld index 88d801012..91922d13f 100644 --- a/src/main/kc/target/c64.ld +++ b/src/main/kc/target/c64.ld @@ -5,6 +5,4 @@ .segmentdef Code [start=%P] .segmentdef Data [startAfter="Code"] .segment Basic -:BasicUpstart(%E) -.segment Code - +:BasicUpstart(%E) \ No newline at end of file diff --git a/src/main/kc/target/c64basic.ld b/src/main/kc/target/c64basic.ld deleted file mode 100644 index 797225642..000000000 --- a/src/main/kc/target/c64basic.ld +++ /dev/null @@ -1,3 +0,0 @@ -.pc = $801 "Basic" -:BasicUpstart(%E) -.pc = %P "Program" \ No newline at end of file diff --git a/src/main/kc/target/c64basic.tgt b/src/main/kc/target/c64basic.tgt deleted file mode 100644 index 23046fa4f..000000000 --- a/src/main/kc/target/c64basic.tgt +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extension": "prg", - "link": "c64basic.ld", - "start_address": "0x080d", - "cpu": "MOS6502X", - "interrupt": "rom_min_c64", - "emulator": "x64sc", - "defines": { - "__C64__": 1 - } -} \ No newline at end of file diff --git a/src/main/kc/target/cx16.ld b/src/main/kc/target/cx16.ld index 88d801012..91922d13f 100644 --- a/src/main/kc/target/cx16.ld +++ b/src/main/kc/target/cx16.ld @@ -5,6 +5,4 @@ .segmentdef Code [start=%P] .segmentdef Data [startAfter="Code"] .segment Basic -:BasicUpstart(%E) -.segment Code - +:BasicUpstart(%E) \ No newline at end of file diff --git a/src/main/kc/target/mega65_c64.ld b/src/main/kc/target/mega65_c64.ld index c484a4d4e..aea6062ac 100644 --- a/src/main/kc/target/mega65_c64.ld +++ b/src/main/kc/target/mega65_c64.ld @@ -5,6 +5,4 @@ .segmentdef Code [start=%P] .segmentdef Data [startAfter="Code"] .segment Basic -:BasicUpstart(%E) -.segment Code - +:BasicUpstart(%E) \ No newline at end of file diff --git a/src/main/kc/target/nes.ld b/src/main/kc/target/nes.ld index 71a7d1a6c..e1af3f573 100644 --- a/src/main/kc/target/nes.ld +++ b/src/main/kc/target/nes.ld @@ -24,5 +24,4 @@ .byte $01 // 1x 16KB ROM (PRG) .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) - // Mirroring nibble 0001 == Vertical mirroring only -.segment Code + // Mirroring nibble 0001 == Vertical mirroring only \ No newline at end of file diff --git a/src/main/kc/target/plus4.ld b/src/main/kc/target/plus4.ld index c52aad128..a927415ec 100644 --- a/src/main/kc/target/plus4.ld +++ b/src/main/kc/target/plus4.ld @@ -5,6 +5,4 @@ .segmentdef Code [start=%P] .segmentdef Data [startAfter="Code"] .segment Basic -:BasicUpstart(%E) -.segment Code - +:BasicUpstart(%E) \ No newline at end of file diff --git a/src/main/kc/target/plus4basic.ld b/src/main/kc/target/plus4basic.ld deleted file mode 100644 index 99feeb98d..000000000 --- a/src/main/kc/target/plus4basic.ld +++ /dev/null @@ -1,3 +0,0 @@ -.pc = $1001 "Basic" -:BasicUpstart(%E) -.pc = %P "Program" diff --git a/src/main/kc/target/plus4basic.tgt b/src/main/kc/target/plus4basic.tgt deleted file mode 100644 index 6be0ef7fe..000000000 --- a/src/main/kc/target/plus4basic.tgt +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extension": "prg", - "link": "plus4basic.ld", - "start_address": "0x100d", - "cpu": "MOS6502X", - "interrupt": "rom_min_plus4", - "emulator": "xplus4", - "defines": { - "__PLUS4__": 1 - } -} \ No newline at end of file diff --git a/src/main/kc/target/vic20.ld b/src/main/kc/target/vic20.ld index 6b2dbea57..43ff7c684 100644 --- a/src/main/kc/target/vic20.ld +++ b/src/main/kc/target/vic20.ld @@ -5,6 +5,4 @@ .segmentdef Code [start=%P] .segmentdef Data [startAfter="Code"] .segment Basic -:BasicUpstart(%E) -.segment Code - +:BasicUpstart(%E) \ No newline at end of file diff --git a/src/main/kc/target/vic20basic.ld b/src/main/kc/target/vic20basic.ld deleted file mode 100644 index b97a2730e..000000000 --- a/src/main/kc/target/vic20basic.ld +++ /dev/null @@ -1,3 +0,0 @@ -.pc = $1001 "Basic" -:BasicUpstart(%E) -.pc = %P "Program" \ No newline at end of file diff --git a/src/main/kc/target/vic20basic.tgt b/src/main/kc/target/vic20basic.tgt deleted file mode 100644 index 0c37815d3..000000000 --- a/src/main/kc/target/vic20basic.tgt +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extension": "prg", - "link": "vic20basic.ld", - "start_address": "0x100d", - "cpu": "MOS6502X", - "interrupt": "rom_min_vic20", - "emulator": "xvic", - "defines": { - "__VIC20__": 1 - } -} \ No newline at end of file diff --git a/src/test/kc/platform-plus4-define.c b/src/test/kc/platform-plus4-define.c index 8b576c69b..6c2209074 100644 --- a/src/test/kc/platform-plus4-define.c +++ b/src/test/kc/platform-plus4-define.c @@ -1,5 +1,5 @@ // Test the #define for the plus4 target platform -#pragma target(plus4basic) +#pragma target(plus4) char * const SCREEN = 0x0c00; diff --git a/src/test/kc/plus4-kbhit.c b/src/test/kc/plus4-kbhit.c index 7b92a8a44..5ecc0c4dd 100644 --- a/src/test/kc/plus4-kbhit.c +++ b/src/test/kc/plus4-kbhit.c @@ -1,5 +1,5 @@ // Test implementation of kbhit() for Plus/4 -#pragma target(plus4basic) +#pragma target(plus4) #include void main() { diff --git a/src/test/kc/plus4-keyboard-test.c b/src/test/kc/plus4-keyboard-test.c index f1ef0f892..0b05e45e0 100644 --- a/src/test/kc/plus4-keyboard-test.c +++ b/src/test/kc/plus4-keyboard-test.c @@ -1,5 +1,5 @@ // Test reading keyboard port on the TED of the Plus/4 -#pragma target(plus4basic) +#pragma target(plus4) #include diff --git a/src/test/kc/vic20-raster.c b/src/test/kc/vic20-raster.c index 6c6968c2c..151b1862d 100644 --- a/src/test/kc/vic20-raster.c +++ b/src/test/kc/vic20-raster.c @@ -1,5 +1,5 @@ // VIC 20 Raster bars -#pragma target(vic20basic) +#pragma target(vic20) #include void main() { diff --git a/src/test/ref/32bit-rols.asm b/src/test/ref/32bit-rols.asm index b422d1043..486e5da32 100644 --- a/src/test/ref/32bit-rols.asm +++ b/src/test/ref/32bit-rols.asm @@ -1,8 +1,13 @@ // Tests different rotate left commands // Functions for performing input and output. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="32bit-rols.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const SIZEOF_BYTE = 1 @@ -20,6 +25,7 @@ .label conio_line_text = $15 // The current color cursor line start .label conio_line_color = $17 +.segment Code __start: { // conio_cursor_x = 0 lda #0 @@ -150,8 +156,10 @@ main: { lda #1 sax.z i jmp __b2 + .segment Data vals: .dword $deadbeef, $facefeed } +.segment Code // Set the cursor to the specified position // gotoxy(byte register(X) y) gotoxy: { @@ -1059,9 +1067,11 @@ rol_fixed: { jsr cputs // } rts + .segment Data s: .text @"rol fixed\n" .byte 0 } +.segment Code // Return true if there's a key waiting, return false if not kbhit: { // CIA#1 Port A: keyboard matrix columns and joystick #2 @@ -1838,9 +1848,11 @@ ror_fixed: { jsr cputs // } rts + .segment Data s: .text @"ror fixed\n" .byte 0 } +.segment Code // rol_var(dword zp($1a) val) rol_var: { .label val = $1a @@ -1902,9 +1914,11 @@ rol_var: { // for(char i=0;imain::@1#0] -- register_copy jmp __b1 + .segment Data vals: .dword $deadbeef, $facefeed } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -14527,9 +14535,11 @@ rol_fixed: { __breturn: // [257] return rts + .segment Data s: .text @"rol fixed\n" .byte 0 } +.segment Code // kbhit // Return true if there's a key waiting, return false if not kbhit: { @@ -15969,9 +15979,11 @@ ror_fixed: { __breturn: // [431] return rts + .segment Data s: .text @"ror fixed\n" .byte 0 } +.segment Code // rol_var // rol_var(dword zp($1a) val) rol_var: { @@ -16081,9 +16093,11 @@ rol_var: { __b1_from___b6: // [434] phi rol_var::i#2 = rol_var::i#1 [phi:rol_var::@6->rol_var::@1#0] -- register_copy jmp __b1 + .segment Data s: .text @"rol var\n" .byte 0 } +.segment Code // ror_var // ror_var(dword zp($1a) val) ror_var: { @@ -16193,9 +16207,11 @@ ror_var: { __b1_from___b6: // [449] phi ror_var::i#2 = ror_var::i#1 [phi:ror_var::@6->ror_var::@1#0] -- register_copy jmp __b1 + .segment Data s: .text @"ror var\n" .byte 0 } +.segment Code // cputs // Output a NUL-terminated string at the current cursor position // cputs(byte* zp($c) s) @@ -17498,6 +17514,7 @@ memset: { jmp __b2_from___b3 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits @@ -18978,9 +18995,14 @@ Score: 2528599 // Tests different rotate left commands // Functions for performing input and output. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="32bit-rols.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -18999,6 +19021,7 @@ Score: 2528599 .label conio_line_text = $15 // The current color cursor line start .label conio_line_color = $17 +.segment Code // __start __start: { // __start::__init1 @@ -19226,8 +19249,10 @@ main: { // [17] phi from main::@10 to main::@1 [phi:main::@10->main::@1] // [17] phi main::i#12 = main::i#1 [phi:main::@10->main::@1#0] -- register_copy jmp __b2 + .segment Data vals: .dword $deadbeef, $facefeed } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -20615,9 +20640,11 @@ rol_fixed: { // } // [257] return rts + .segment Data s: .text @"rol fixed\n" .byte 0 } +.segment Code // kbhit // Return true if there's a key waiting, return false if not kbhit: { @@ -21825,9 +21852,11 @@ ror_fixed: { // } // [431] return rts + .segment Data s: .text @"ror fixed\n" .byte 0 } +.segment Code // rol_var // rol_var(dword zp($1a) val) rol_var: { @@ -21924,9 +21953,11 @@ rol_var: { // [434] phi from rol_var::@6 to rol_var::@1 [phi:rol_var::@6->rol_var::@1] // [434] phi rol_var::i#2 = rol_var::i#1 [phi:rol_var::@6->rol_var::@1#0] -- register_copy jmp __b1 + .segment Data s: .text @"rol var\n" .byte 0 } +.segment Code // ror_var // ror_var(dword zp($1a) val) ror_var: { @@ -22023,9 +22054,11 @@ ror_var: { // [449] phi from ror_var::@6 to ror_var::@1 [phi:ror_var::@6->ror_var::@1] // [449] phi ror_var::i#2 = ror_var::i#1 [phi:ror_var::@6->ror_var::@1#0] -- register_copy jmp __b1 + .segment Data s: .text @"ror var\n" .byte 0 } +.segment Code // cputs // Output a NUL-terminated string at the current cursor position // cputs(byte* zp($c) s) @@ -23257,6 +23290,7 @@ memset: { jmp __b2 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/address-0.asm b/src/test/ref/address-0.asm index 38ebb6d6f..81c8a26aa 100644 --- a/src/test/ref/address-0.asm +++ b/src/test/ref/address-0.asm @@ -1,10 +1,16 @@ // Test that address vars are turned into load/store and located at hardcoded addresses // Hard-coded zero-page address - global variable -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label SCREEN = $400 .label i = 2 +.segment Code __start: { // i = 3 lda #3 diff --git a/src/test/ref/address-0.log b/src/test/ref/address-0.log index b221d7a05..2947474fb 100644 --- a/src/test/ref/address-0.log +++ b/src/test/ref/address-0.log @@ -126,12 +126,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Test that address vars are turned into load/store and located at hardcoded addresses // Hard-coded zero-page address - global variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label i = 2 +.segment Code // __start __start: { jmp __init1 @@ -213,12 +219,18 @@ Score: 278 // Test that address vars are turned into load/store and located at hardcoded addresses // Hard-coded zero-page address - global variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label i = 2 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/address-1.asm b/src/test/ref/address-1.asm index f5aba8403..4e586c7ba 100644 --- a/src/test/ref/address-1.asm +++ b/src/test/ref/address-1.asm @@ -1,9 +1,15 @@ // Test that address vars are turned into load/store and located at hardcoded addresses // Hard-coded zero-page address - local variable -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label i = 2 // i = 3 diff --git a/src/test/ref/address-1.log b/src/test/ref/address-1.log index 35e4069e2..6d2b26c6b 100644 --- a/src/test/ref/address-1.log +++ b/src/test/ref/address-1.log @@ -99,11 +99,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test that address vars are turned into load/store and located at hardcoded addresses // Hard-coded zero-page address - local variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label i = 2 @@ -156,11 +162,17 @@ Score: 266 // Test that address vars are turned into load/store and located at hardcoded addresses // Hard-coded zero-page address - local variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label i = 2 diff --git a/src/test/ref/address-2.asm b/src/test/ref/address-2.asm index 73af6d1d6..b3a483976 100644 --- a/src/test/ref/address-2.asm +++ b/src/test/ref/address-2.asm @@ -1,10 +1,16 @@ // Test that address vars are turned into load/store and located at hardcoded addresses // Hard-coded mainmem-page address - global variable -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label SCREEN = $400 .label i = $2000 +.segment Code __start: { // i = 3 lda #3 diff --git a/src/test/ref/address-2.log b/src/test/ref/address-2.log index abb3f3084..e30b20552 100644 --- a/src/test/ref/address-2.log +++ b/src/test/ref/address-2.log @@ -126,12 +126,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Test that address vars are turned into load/store and located at hardcoded addresses // Hard-coded mainmem-page address - global variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label i = $2000 +.segment Code // __start __start: { jmp __init1 @@ -213,12 +219,18 @@ Score: 309 // Test that address vars are turned into load/store and located at hardcoded addresses // Hard-coded mainmem-page address - global variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label i = $2000 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/address-3.asm b/src/test/ref/address-3.asm index 2257a45ea..b55a23cfc 100644 --- a/src/test/ref/address-3.asm +++ b/src/test/ref/address-3.asm @@ -1,9 +1,15 @@ // Test that address vars are turned into load/store and located at hardcoded addresses // Hard-coded mainmem address - local variable -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label i = $2000 // i = 3 diff --git a/src/test/ref/address-3.log b/src/test/ref/address-3.log index 59f3f166c..fdd002c98 100644 --- a/src/test/ref/address-3.log +++ b/src/test/ref/address-3.log @@ -99,11 +99,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test that address vars are turned into load/store and located at hardcoded addresses // Hard-coded mainmem address - local variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label i = $2000 @@ -156,11 +162,17 @@ Score: 297 // Test that address vars are turned into load/store and located at hardcoded addresses // Hard-coded mainmem address - local variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label i = $2000 diff --git a/src/test/ref/address-4.asm b/src/test/ref/address-4.asm index dd42ea13c..df8b2a094 100644 --- a/src/test/ref/address-4.asm +++ b/src/test/ref/address-4.asm @@ -1,9 +1,15 @@ // Test declaring a variable as at a hard-coded address // Incrementing a load/store variable will result in cause two *SIZEOF's -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .const ch = $102 .label i = 2 diff --git a/src/test/ref/address-4.log b/src/test/ref/address-4.log index e26068ac5..465eb804c 100644 --- a/src/test/ref/address-4.log +++ b/src/test/ref/address-4.log @@ -136,11 +136,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test declaring a variable as at a hard-coded address // Incrementing a load/store variable will result in cause two *SIZEOF's // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .const ch = $102 @@ -215,11 +221,17 @@ Score: 636 // Test declaring a variable as at a hard-coded address // Incrementing a load/store variable will result in cause two *SIZEOF's // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .const ch = $102 diff --git a/src/test/ref/address-5.asm b/src/test/ref/address-5.asm index f31843f7b..18c542899 100644 --- a/src/test/ref/address-5.asm +++ b/src/test/ref/address-5.asm @@ -1,10 +1,16 @@ // Test declaring a variable as at a hard-coded address // zero-page hard-coded address parameter -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label SCREEN = $400 .label idx = 3 +.segment Code __start: { // idx lda #0 diff --git a/src/test/ref/address-5.log b/src/test/ref/address-5.log index d1eb2fc32..6946a8bc2 100644 --- a/src/test/ref/address-5.log +++ b/src/test/ref/address-5.log @@ -155,12 +155,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Test declaring a variable as at a hard-coded address // zero-page hard-coded address parameter // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label idx = 3 +.segment Code // __start __start: { jmp __init1 @@ -267,12 +273,18 @@ Score: 81 // Test declaring a variable as at a hard-coded address // zero-page hard-coded address parameter // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label idx = 3 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/address-6.asm b/src/test/ref/address-6.asm index 740305f2d..4a2860a1f 100644 --- a/src/test/ref/address-6.asm +++ b/src/test/ref/address-6.asm @@ -1,10 +1,16 @@ // Test declaring a variable as at a hard-coded address // mainmem-page hard-coded address parameter -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label SCREEN = $400 .label idx = $3000 +.segment Code __start: { // idx lda #0 diff --git a/src/test/ref/address-6.log b/src/test/ref/address-6.log index d569611dd..8f46c4b0e 100644 --- a/src/test/ref/address-6.log +++ b/src/test/ref/address-6.log @@ -155,12 +155,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Test declaring a variable as at a hard-coded address // mainmem-page hard-coded address parameter // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label idx = $3000 +.segment Code // __start __start: { jmp __init1 @@ -267,12 +273,18 @@ Score: 85 // Test declaring a variable as at a hard-coded address // mainmem-page hard-coded address parameter // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label idx = $3000 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/address-8.asm b/src/test/ref/address-8.asm index 37dd22380..935acebaf 100644 --- a/src/test/ref/address-8.asm +++ b/src/test/ref/address-8.asm @@ -1,9 +1,15 @@ // Test declaring an array variable as at a hard-coded address -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // The screen .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = DATA[0] lda DATA @@ -11,6 +17,7 @@ main: { // } rts } +.segment Data .pc = $1000 "DATA" // Data to be put on the screen DATA: .fill $3e8, 0 diff --git a/src/test/ref/address-8.log b/src/test/ref/address-8.log index 7909265b3..35223db3f 100644 --- a/src/test/ref/address-8.log +++ b/src/test/ref/address-8.log @@ -82,12 +82,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test declaring an array variable as at a hard-coded address // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The screen .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = *DATA -- _deref_pbuc1=_deref_pbuc2 @@ -100,6 +106,7 @@ main: { rts } // File Data +.segment Data .pc = $1000 "DATA" // Data to be put on the screen DATA: .fill $3e8, 0 @@ -123,12 +130,18 @@ Score: 14 // File Comments // Test declaring an array variable as at a hard-coded address // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The screen .label SCREEN = $400 +.segment Code // main main: { // SCREEN[0] = DATA[0] @@ -141,6 +154,7 @@ main: { rts } // File Data +.segment Data .pc = $1000 "DATA" // Data to be put on the screen DATA: .fill $3e8, 0 diff --git a/src/test/ref/address-9.asm b/src/test/ref/address-9.asm index 4e40e0ce7..e3f306c32 100644 --- a/src/test/ref/address-9.asm +++ b/src/test/ref/address-9.asm @@ -1,9 +1,15 @@ // Test declaring an integer array variable as at a hard-coded address -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // The screen .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = DATA[0] lda DATA @@ -13,6 +19,7 @@ main: { // } rts } +.segment Data .pc = $1000 "DATA" // Data to be put on the screen DATA: .fill 2*$3e8, 0 diff --git a/src/test/ref/address-9.log b/src/test/ref/address-9.log index 71aa92fe2..deddb79fb 100644 --- a/src/test/ref/address-9.log +++ b/src/test/ref/address-9.log @@ -93,12 +93,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test declaring an integer array variable as at a hard-coded address // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The screen .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = *DATA -- _deref_pwsc1=_deref_pwsc2 @@ -113,6 +119,7 @@ main: { rts } // File Data +.segment Data .pc = $1000 "DATA" // Data to be put on the screen DATA: .fill 2*$3e8, 0 @@ -136,12 +143,18 @@ Score: 22 // File Comments // Test declaring an integer array variable as at a hard-coded address // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The screen .label SCREEN = $400 +.segment Code // main main: { // SCREEN[0] = DATA[0] @@ -156,6 +169,7 @@ main: { rts } // File Data +.segment Data .pc = $1000 "DATA" // Data to be put on the screen DATA: .fill 2*$3e8, 0 diff --git a/src/test/ref/address-of-0.asm b/src/test/ref/address-of-0.asm index a180c1aad..7b71f325f 100644 --- a/src/test/ref/address-of-0.asm +++ b/src/test/ref/address-of-0.asm @@ -1,7 +1,13 @@ // Test address-of - use the pointer to get the value -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-of-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label bp = b diff --git a/src/test/ref/address-of-0.log b/src/test/ref/address-of-0.log index 953ac89b9..1d615fa05 100644 --- a/src/test/ref/address-of-0.log +++ b/src/test/ref/address-of-0.log @@ -121,10 +121,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test address-of - use the pointer to get the value // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-of-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -182,10 +188,16 @@ Score: 286 // File Comments // Test address-of - use the pointer to get the value // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-of-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/address-of-1.asm b/src/test/ref/address-of-1.asm index 52ade1658..4eeecd6bc 100644 --- a/src/test/ref/address-of-1.asm +++ b/src/test/ref/address-of-1.asm @@ -1,7 +1,13 @@ // Test address-of - pass the pointer as parameter -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-of-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label b1 = 4 diff --git a/src/test/ref/address-of-1.log b/src/test/ref/address-of-1.log index 458a3a6c8..f2ef0e5fa 100644 --- a/src/test/ref/address-of-1.log +++ b/src/test/ref/address-of-1.log @@ -226,10 +226,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test address-of - pass the pointer as parameter // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-of-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -370,10 +376,16 @@ Score: 108 // File Comments // Test address-of - pass the pointer as parameter // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-of-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/address-of-2.asm b/src/test/ref/address-of-2.asm index 2bfadb4b7..06dd8aa2e 100644 --- a/src/test/ref/address-of-2.asm +++ b/src/test/ref/address-of-2.asm @@ -1,8 +1,14 @@ // Test address-of by assigning the affected variable in multiple ways -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-of-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label val = 2 +.segment Code __start: { // val = 0 lda #0 diff --git a/src/test/ref/address-of-2.log b/src/test/ref/address-of-2.log index 72fb2724f..2048d326e 100644 --- a/src/test/ref/address-of-2.log +++ b/src/test/ref/address-of-2.log @@ -343,11 +343,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test address-of by assigning the affected variable in multiple ways // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-of-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label val = 2 +.segment Code // __start __start: { jmp __init1 @@ -517,11 +523,17 @@ Score: 148 // File Comments // Test address-of by assigning the affected variable in multiple ways // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-of-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label val = 2 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/address-of-3.asm b/src/test/ref/address-of-3.asm index 1921c8dc6..0a03973fd 100644 --- a/src/test/ref/address-of-3.asm +++ b/src/test/ref/address-of-3.asm @@ -1,10 +1,16 @@ // Test address-of an array element -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-of-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_SIGNED_WORD = 2 .label SCREEN = $400 .label idx = 3 +.segment Code main: { .label i = 2 // print(VALS) @@ -61,4 +67,5 @@ print: { // } rts } +.segment Data VALS: .word 1, 2, 3, 4 diff --git a/src/test/ref/address-of-3.log b/src/test/ref/address-of-3.log index c4c77aa0e..1bf856239 100644 --- a/src/test/ref/address-of-3.log +++ b/src/test/ref/address-of-3.log @@ -305,13 +305,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test address-of an array element // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-of-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_SIGNED_WORD = 2 .label SCREEN = $400 .label idx = 3 +.segment Code // main main: { .label i = 2 @@ -409,6 +415,7 @@ print: { rts } // File Data +.segment Data VALS: .word 1, 2, 3, 4 ASSEMBLER OPTIMIZATIONS @@ -465,13 +472,19 @@ Score: 457 // File Comments // Test address-of an array element // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-of-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_SIGNED_WORD = 2 .label SCREEN = $400 .label idx = 3 +.segment Code // main main: { .label i = 2 @@ -562,5 +575,6 @@ print: { rts } // File Data +.segment Data VALS: .word 1, 2, 3, 4 diff --git a/src/test/ref/address-with-expression-value.asm b/src/test/ref/address-with-expression-value.asm index cd03d8f4a..aacc004fa 100644 --- a/src/test/ref/address-with-expression-value.asm +++ b/src/test/ref/address-with-expression-value.asm @@ -1,11 +1,17 @@ // Test declaring an address as expression -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-with-expression-value.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const var1 = $800 .const var2 = $900 // The screen .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = DATA[0] lda DATA @@ -13,6 +19,7 @@ main: { // } rts } +.segment Data .pc = var1+var2 "DATA" // Data to be put on the screen DATA: .fill $3e8, 0 diff --git a/src/test/ref/address-with-expression-value.log b/src/test/ref/address-with-expression-value.log index dbff6b8cf..a323346f3 100644 --- a/src/test/ref/address-with-expression-value.log +++ b/src/test/ref/address-with-expression-value.log @@ -83,14 +83,20 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test declaring an address as expression // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-with-expression-value.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const var1 = $800 .const var2 = $900 // The screen .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = *DATA -- _deref_pbuc1=_deref_pbuc2 @@ -103,6 +109,7 @@ main: { rts } // File Data +.segment Data .pc = var1+var2 "DATA" // Data to be put on the screen DATA: .fill $3e8, 0 @@ -128,14 +135,20 @@ Score: 14 // File Comments // Test declaring an address as expression // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="address-with-expression-value.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const var1 = $800 .const var2 = $900 // The screen .label SCREEN = $400 +.segment Code // main main: { // SCREEN[0] = DATA[0] @@ -148,6 +161,7 @@ main: { rts } // File Data +.segment Data .pc = var1+var2 "DATA" // Data to be put on the screen DATA: .fill $3e8, 0 diff --git a/src/test/ref/adventofcode/2020-02.asm b/src/test/ref/adventofcode/2020-02.asm index 91d25afd2..21c0906af 100644 --- a/src/test/ref/adventofcode/2020-02.asm +++ b/src/test/ref/adventofcode/2020-02.asm @@ -1,7 +1,12 @@ // https://adventofcode.com/2020/day/2 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="2020-02.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c @@ -18,6 +23,7 @@ .label conio_line_text = $15 // The current color cursor line start .label conio_line_color = $17 +.segment Code __start: { // conio_cursor_x = 0 lda #0 @@ -319,6 +325,7 @@ main: { inc.z pwd+1 !: jmp __b6 + .segment Data s: .text "rule a valid: " .byte 0 s1: .text " invalid:" @@ -330,6 +337,7 @@ main: { s4: .text "rule b valid: " .byte 0 } +.segment Code // Set the cursor to the specified position // gotoxy(byte register(X) y) gotoxy: { @@ -907,6 +915,7 @@ memset: { !: jmp __b2 } +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/adventofcode/2020-02.log b/src/test/ref/adventofcode/2020-02.log index 5df9de229..5cfd86446 100644 --- a/src/test/ref/adventofcode/2020-02.log +++ b/src/test/ref/adventofcode/2020-02.log @@ -5070,9 +5070,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // https://adventofcode.com/2020/day/2 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="2020-02.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -5090,6 +5095,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label conio_line_text = $15 // The current color cursor line start .label conio_line_color = $17 +.segment Code // __start __start: { jmp __init1 @@ -5649,6 +5655,7 @@ main: { __b6_from___b9: // [70] phi main::count_a#2 = main::count_a#6 [phi:main::@9->main::@6#0] -- register_copy jmp __b6 + .segment Data s: .text "rule a valid: " .byte 0 s1: .text " invalid:" @@ -5660,6 +5667,7 @@ main: { s4: .text "rule b valid: " .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -6534,6 +6542,7 @@ memset: { jmp __b2_from___b3 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits @@ -6817,7 +6826,7 @@ Succesful ASM optimization Pass5NextJumpElimination Replacing instruction lda #0 with TYA Removing instruction lda.z digit_value+1 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [81] bne __b2 to beq +Fixing long branch [87] bne __b2 to beq FINAL SYMBOL TABLE const nomodify byte* COLORRAM = (byte*) 55296 @@ -7099,9 +7108,14 @@ Score: 35049 // File Comments // https://adventofcode.com/2020/day/2 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="2020-02.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -7119,6 +7133,7 @@ Score: 35049 .label conio_line_text = $15 // The current color cursor line start .label conio_line_color = $17 +.segment Code // __start __start: { // __start::__init1 @@ -7610,6 +7625,7 @@ main: { // [70] phi from main::@9 to main::@6 [phi:main::@9->main::@6] // [70] phi main::count_a#2 = main::count_a#6 [phi:main::@9->main::@6#0] -- register_copy jmp __b6 + .segment Data s: .text "rule a valid: " .byte 0 s1: .text " invalid:" @@ -7621,6 +7637,7 @@ main: { s4: .text "rule b valid: " .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -8465,6 +8482,7 @@ memset: { jmp __b2 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/array-16bit-init.asm b/src/test/ref/array-16bit-init.asm index c310990bb..687e36f5b 100644 --- a/src/test/ref/array-16bit-init.asm +++ b/src/test/ref/array-16bit-init.asm @@ -1,9 +1,15 @@ // Demonstrates wrong padding for non-byte arrays. // https://gitlab.com/camelot/kickc/-/issues/497 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="array-16bit-init.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_POINTER = 2 +.segment Code main: { ldx #0 __b1: @@ -25,5 +31,6 @@ main: { inx jmp __b1 } +.segment Data levelRowOff: .word 1, 2, 3 .fill 2*$1c, 0 diff --git a/src/test/ref/array-16bit-init.log b/src/test/ref/array-16bit-init.log index e36cff218..db7f6f867 100644 --- a/src/test/ref/array-16bit-init.log +++ b/src/test/ref/array-16bit-init.log @@ -153,11 +153,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Demonstrates wrong padding for non-byte arrays. // https://gitlab.com/camelot/kickc/-/issues/497 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="array-16bit-init.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_POINTER = 2 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -194,6 +200,7 @@ main: { jmp __b1 } // File Data +.segment Data levelRowOff: .word 1, 2, 3 .fill 2*$1c, 0 @@ -226,11 +233,17 @@ Score: 321 // Demonstrates wrong padding for non-byte arrays. // https://gitlab.com/camelot/kickc/-/issues/497 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="array-16bit-init.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_POINTER = 2 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -266,6 +279,7 @@ main: { jmp __b1 } // File Data +.segment Data levelRowOff: .word 1, 2, 3 .fill 2*$1c, 0 diff --git a/src/test/ref/array-16bit-lookup.asm b/src/test/ref/array-16bit-lookup.asm index 33cea210a..c4c46a7ab 100644 --- a/src/test/ref/array-16bit-lookup.asm +++ b/src/test/ref/array-16bit-lookup.asm @@ -1,8 +1,14 @@ // Test KickC performance for 16-bit array lookup function from article "Optimizing C array lookups for the 6502" // http://8bitworkshop.com/blog/compilers/2019/03/17/cc65-optimization.html -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="array-16bit-lookup.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label __0 = 4 @@ -50,4 +56,5 @@ getValue: { // } rts } +.segment Data arr16: .fill 2*$80, 0 diff --git a/src/test/ref/array-16bit-lookup.log b/src/test/ref/array-16bit-lookup.log index 68d14b15d..c35cf17ad 100644 --- a/src/test/ref/array-16bit-lookup.log +++ b/src/test/ref/array-16bit-lookup.log @@ -283,10 +283,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Test KickC performance for 16-bit array lookup function from article "Optimizing C array lookups for the 6502" // http://8bitworkshop.com/blog/compilers/2019/03/17/cc65-optimization.html // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="array-16bit-lookup.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -361,6 +367,7 @@ getValue: { rts } // File Data +.segment Data arr16: .fill 2*$80, 0 ASSEMBLER OPTIMIZATIONS @@ -417,10 +424,16 @@ Score: 502 // Test KickC performance for 16-bit array lookup function from article "Optimizing C array lookups for the 6502" // http://8bitworkshop.com/blog/compilers/2019/03/17/cc65-optimization.html // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="array-16bit-lookup.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -494,5 +507,6 @@ getValue: { rts } // File Data +.segment Data arr16: .fill 2*$80, 0 diff --git a/src/test/ref/array-length-symbolic-min.asm b/src/test/ref/array-length-symbolic-min.asm index 02579646d..877f9bcfb 100644 --- a/src/test/ref/array-length-symbolic-min.asm +++ b/src/test/ref/array-length-symbolic-min.asm @@ -1,8 +1,14 @@ // Illustrates symbolic array lengths -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="array-length-symbolic-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SZ = $f +.segment Code // Fills the array item by item with $is, where i is the item# and s is the sub# main: { ldx #0 @@ -17,4 +23,5 @@ main: { // } rts } +.segment Data items: .fill SZ, 0 diff --git a/src/test/ref/array-length-symbolic-min.log b/src/test/ref/array-length-symbolic-min.log index 1ec4a4b0e..736ada3bf 100644 --- a/src/test/ref/array-length-symbolic-min.log +++ b/src/test/ref/array-length-symbolic-min.log @@ -113,11 +113,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Illustrates symbolic array lengths // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="array-length-symbolic-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SZ = $f +.segment Code // main // Fills the array item by item with $is, where i is the item# and s is the sub# main: { @@ -147,6 +153,7 @@ main: { rts } // File Data +.segment Data items: .fill SZ, 0 ASSEMBLER OPTIMIZATIONS @@ -179,11 +186,17 @@ Score: 161 // File Comments // Illustrates symbolic array lengths // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="array-length-symbolic-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SZ = $f +.segment Code // main // Fills the array item by item with $is, where i is the item# and s is the sub# main: { @@ -210,5 +223,6 @@ main: { rts } // File Data +.segment Data items: .fill SZ, 0 diff --git a/src/test/ref/array-length-symbolic.asm b/src/test/ref/array-length-symbolic.asm index 549670fb8..400436e23 100644 --- a/src/test/ref/array-length-symbolic.asm +++ b/src/test/ref/array-length-symbolic.asm @@ -1,9 +1,15 @@ // Illustrates symbolic array lengths -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="array-length-symbolic.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const ITEM_COUNT = 3 .const ITEM_SIZE = 5 +.segment Code // Fills the array item by item with $is, where i is the item# and s is the sub# main: { .label cur_item = 2 @@ -45,4 +51,5 @@ main: { // } rts } +.segment Data items: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 diff --git a/src/test/ref/array-length-symbolic.log b/src/test/ref/array-length-symbolic.log index f75dea7a1..3075ec015 100644 --- a/src/test/ref/array-length-symbolic.log +++ b/src/test/ref/array-length-symbolic.log @@ -230,12 +230,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Illustrates symbolic array lengths // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="array-length-symbolic.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const ITEM_COUNT = 3 .const ITEM_SIZE = 5 +.segment Code // main // Fills the array item by item with $is, where i is the item# and s is the sub# main: { @@ -307,6 +313,7 @@ main: { rts } // File Data +.segment Data items: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ASSEMBLER OPTIMIZATIONS @@ -359,12 +366,18 @@ Score: 3416 // File Comments // Illustrates symbolic array lengths // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="array-length-symbolic.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const ITEM_COUNT = 3 .const ITEM_SIZE = 5 +.segment Code // main // Fills the array item by item with $is, where i is the item# and s is the sub# main: { @@ -431,5 +444,6 @@ main: { rts } // File Data +.segment Data items: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 diff --git a/src/test/ref/arrays-init-kasm-0.asm b/src/test/ref/arrays-init-kasm-0.asm index c198ed1b1..e04b4ce75 100644 --- a/src/test/ref/arrays-init-kasm-0.asm +++ b/src/test/ref/arrays-init-kasm-0.asm @@ -1,8 +1,14 @@ // Test initializing array using KickAssembler -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="arrays-init-kasm-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = SINTAB[0] lda SINTAB @@ -10,6 +16,7 @@ main: { // } rts } +.segment Data // Sine table SINTAB: .fill 256, 128 + 128*sin(i*2*PI/256) diff --git a/src/test/ref/arrays-init-kasm-0.log b/src/test/ref/arrays-init-kasm-0.log index aa21b3487..759539eb9 100644 --- a/src/test/ref/arrays-init-kasm-0.log +++ b/src/test/ref/arrays-init-kasm-0.log @@ -88,11 +88,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test initializing array using KickAssembler // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="arrays-init-kasm-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = *SINTAB -- _deref_pbuc1=_deref_pbuc2 @@ -105,6 +111,7 @@ main: { rts } // File Data +.segment Data // Sine table SINTAB: .fill 256, 128 + 128*sin(i*2*PI/256) @@ -130,11 +137,17 @@ Score: 14 // File Comments // Test initializing array using KickAssembler // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="arrays-init-kasm-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // SCREEN[0] = SINTAB[0] @@ -147,6 +160,7 @@ main: { rts } // File Data +.segment Data // Sine table SINTAB: .fill 256, 128 + 128*sin(i*2*PI/256) diff --git a/src/test/ref/arrays-init-kasm-1.asm b/src/test/ref/arrays-init-kasm-1.asm index 23ce5cfc3..00a03aa8a 100644 --- a/src/test/ref/arrays-init-kasm-1.asm +++ b/src/test/ref/arrays-init-kasm-1.asm @@ -1,9 +1,15 @@ // Test initializing array using KickAssembler // Place array at hardcoded address -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="arrays-init-kasm-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = SINTAB[0] lda SINTAB @@ -11,6 +17,7 @@ main: { // } rts } +.segment Data .pc = $1000 "SINTAB" // Sine table at an absolute address in memory SINTAB: diff --git a/src/test/ref/arrays-init-kasm-1.log b/src/test/ref/arrays-init-kasm-1.log index 58f1ed91f..72ca7c4b1 100644 --- a/src/test/ref/arrays-init-kasm-1.log +++ b/src/test/ref/arrays-init-kasm-1.log @@ -90,11 +90,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test initializing array using KickAssembler // Place array at hardcoded address // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="arrays-init-kasm-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = *SINTAB -- _deref_pbuc1=_deref_pbuc2 @@ -107,6 +113,7 @@ main: { rts } // File Data +.segment Data .pc = $1000 "SINTAB" // Sine table at an absolute address in memory SINTAB: @@ -134,11 +141,17 @@ Score: 14 // Test initializing array using KickAssembler // Place array at hardcoded address // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="arrays-init-kasm-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // SCREEN[0] = SINTAB[0] @@ -151,6 +164,7 @@ main: { rts } // File Data +.segment Data .pc = $1000 "SINTAB" // Sine table at an absolute address in memory SINTAB: diff --git a/src/test/ref/arrays-init-short.asm b/src/test/ref/arrays-init-short.asm index 185b0059c..fff4ef511 100644 --- a/src/test/ref/arrays-init-short.asm +++ b/src/test/ref/arrays-init-short.asm @@ -1,8 +1,14 @@ // Test a short array initializer - the rest should be zero-filled -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="arrays-init-short.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: @@ -33,6 +39,7 @@ main: { inx jmp __b1 } +.segment Data msg1: .text "camelot" .byte 0 .fill 8, 0 diff --git a/src/test/ref/arrays-init-short.log b/src/test/ref/arrays-init-short.log index c2cf0a2da..10123f7cd 100644 --- a/src/test/ref/arrays-init-short.log +++ b/src/test/ref/arrays-init-short.log @@ -178,11 +178,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test a short array initializer - the rest should be zero-filled // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="arrays-init-short.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -236,6 +242,7 @@ main: { jmp __b1 } // File Data +.segment Data msg1: .text "camelot" .byte 0 .fill 8, 0 @@ -276,11 +283,17 @@ Score: 516 // File Comments // Test a short array initializer - the rest should be zero-filled // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="arrays-init-short.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -333,6 +346,7 @@ main: { jmp __b1 } // File Data +.segment Data msg1: .text "camelot" .byte 0 .fill 8, 0 diff --git a/src/test/ref/arrays-init.asm b/src/test/ref/arrays-init.asm index c3cce1b43..20026e533 100644 --- a/src/test/ref/arrays-init.asm +++ b/src/test/ref/arrays-init.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="arrays-init.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // b[0] = 'c' lda #'c' @@ -17,6 +23,7 @@ main: { // } rts } +.segment Data b: .fill 3, 0 c: .byte 'c', 'm', 'l' d: .text "cml" diff --git a/src/test/ref/arrays-init.log b/src/test/ref/arrays-init.log index 36ebb8c6a..fc7115fce 100644 --- a/src/test/ref/arrays-init.log +++ b/src/test/ref/arrays-init.log @@ -126,11 +126,17 @@ Uplifting [] best 39 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="arrays-init.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] *b = 'c' -- _deref_pbuc1=vbuc2 @@ -152,6 +158,7 @@ main: { rts } // File Data +.segment Data b: .fill 3, 0 c: .byte 'c', 'm', 'l' d: .text "cml" @@ -178,11 +185,17 @@ Score: 32 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="arrays-init.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // b[0] = 'c' @@ -206,6 +219,7 @@ main: { rts } // File Data +.segment Data b: .fill 3, 0 c: .byte 'c', 'm', 'l' d: .text "cml" diff --git a/src/test/ref/asm-culling-jmp.asm b/src/test/ref/asm-culling-jmp.asm index b4ba3b098..39c886fa8 100644 --- a/src/test/ref/asm-culling-jmp.asm +++ b/src/test/ref/asm-culling-jmp.asm @@ -1,8 +1,14 @@ // Example of inline ASM where a JMP is erronously culled during compilation // https://gitlab.com/camelot/kickc/issues/302 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="asm-culling-jmp.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // asm jmp qwe diff --git a/src/test/ref/asm-culling-jmp.log b/src/test/ref/asm-culling-jmp.log index f284646f5..21b170962 100644 --- a/src/test/ref/asm-culling-jmp.log +++ b/src/test/ref/asm-culling-jmp.log @@ -69,10 +69,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Example of inline ASM where a JMP is erronously culled during compilation // https://gitlab.com/camelot/kickc/issues/302 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="asm-culling-jmp.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // asm { jmpqwe .byte0,25,51,76,102,128,153,179,204,230 qwe: lda#50 } @@ -109,10 +115,16 @@ Score: 17 // Example of inline ASM where a JMP is erronously culled during compilation // https://gitlab.com/camelot/kickc/issues/302 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="asm-culling-jmp.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // asm diff --git a/src/test/ref/asm-mnemonic-names.asm b/src/test/ref/asm-mnemonic-names.asm index 7befdb645..3f03e566f 100644 --- a/src/test/ref/asm-mnemonic-names.asm +++ b/src/test/ref/asm-mnemonic-names.asm @@ -1,9 +1,15 @@ // Test using an ASM mnemonic as a C symbol names // Works if the C-lexer and the ASM-lexer are separated properly -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="asm-mnemonic-names.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label lda = $400 +.segment Code main: { .label jmp = 1 // *lda = jmp diff --git a/src/test/ref/asm-mnemonic-names.log b/src/test/ref/asm-mnemonic-names.log index d178634e4..9c0740ba6 100644 --- a/src/test/ref/asm-mnemonic-names.log +++ b/src/test/ref/asm-mnemonic-names.log @@ -118,11 +118,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test using an ASM mnemonic as a C symbol names // Works if the C-lexer and the ASM-lexer are separated properly // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="asm-mnemonic-names.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label lda = $400 +.segment Code // main main: { .label jmp = 1 @@ -189,11 +195,17 @@ Score: 40 // Test using an ASM mnemonic as a C symbol names // Works if the C-lexer and the ASM-lexer are separated properly // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="asm-mnemonic-names.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label lda = $400 +.segment Code // main main: { .label jmp = 1 diff --git a/src/test/ref/asm-uses-0.asm b/src/test/ref/asm-uses-0.asm index c70ad47a5..0f4123224 100644 --- a/src/test/ref/asm-uses-0.asm +++ b/src/test/ref/asm-uses-0.asm @@ -1,8 +1,14 @@ // Tests that inline asm uses clause makes the compiler not cull a procedure referenced -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="asm-uses-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label BG_COLOR = $d020 +.segment Code // Function only used inside the inline asm init: { // *BG_COLOR = 0 diff --git a/src/test/ref/asm-uses-0.log b/src/test/ref/asm-uses-0.log index a41ee650c..e431f5c1a 100644 --- a/src/test/ref/asm-uses-0.log +++ b/src/test/ref/asm-uses-0.log @@ -95,11 +95,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that inline asm uses clause makes the compiler not cull a procedure referenced // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="asm-uses-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label BG_COLOR = $d020 +.segment Code // init // Function only used inside the inline asm init: { @@ -145,11 +151,17 @@ Score: 24 // File Comments // Tests that inline asm uses clause makes the compiler not cull a procedure referenced // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="asm-uses-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label BG_COLOR = $d020 +.segment Code // init // Function only used inside the inline asm init: { diff --git a/src/test/ref/assignment-chained.asm b/src/test/ref/assignment-chained.asm index a41d21e13..a3478b3bf 100644 --- a/src/test/ref/assignment-chained.asm +++ b/src/test/ref/assignment-chained.asm @@ -1,7 +1,13 @@ // Tests that chained assignments work as intended -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="assignment-chained.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 // screen[0] = a = 'c' diff --git a/src/test/ref/assignment-chained.log b/src/test/ref/assignment-chained.log index 90e45f3c3..f0ff6266c 100644 --- a/src/test/ref/assignment-chained.log +++ b/src/test/ref/assignment-chained.log @@ -148,10 +148,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that chained assignments work as intended // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="assignment-chained.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -207,10 +213,16 @@ Score: 38 // File Comments // Tests that chained assignments work as intended // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="assignment-chained.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/assignment-compound.asm b/src/test/ref/assignment-compound.asm index fa501dff2..759328fd8 100644 --- a/src/test/ref/assignment-compound.asm +++ b/src/test/ref/assignment-compound.asm @@ -1,12 +1,18 @@ // Test compound assignment operators -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="assignment-compound.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const GREEN = 5 .const RED = 2 .label screen1 = $400 .label cols = $d800 .label screen2 = screen1+$28 +.segment Code main: { // test(i++, a) //3 @@ -101,4 +107,5 @@ test: { sta cols,x rts } +.segment Data ref: .byte 3, 4, 3, $12, 9, 1, 4, 2, 4, 5, 1, 0 diff --git a/src/test/ref/assignment-compound.log b/src/test/ref/assignment-compound.log index 7ac01d2d2..4f872ec5c 100644 --- a/src/test/ref/assignment-compound.log +++ b/src/test/ref/assignment-compound.log @@ -703,15 +703,21 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test compound assignment operators // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="assignment-compound.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const GREEN = 5 .const RED = 2 .label screen1 = $400 .label cols = $d800 .label screen2 = screen1+$28 +.segment Code // main main: { // [1] call test @@ -913,6 +919,7 @@ test: { jmp __breturn } // File Data +.segment Data ref: .byte 3, 4, 3, $12, 9, 1, 4, 2, 4, 5, 1, 0 ASSEMBLER OPTIMIZATIONS @@ -997,15 +1004,21 @@ Score: 202 // File Comments // Test compound assignment operators // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="assignment-compound.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const GREEN = 5 .const RED = 2 .label screen1 = $400 .label cols = $d800 .label screen2 = screen1+$28 +.segment Code // main main: { // test(i++, a) @@ -1178,5 +1191,6 @@ test: { rts } // File Data +.segment Data ref: .byte 3, 4, 3, $12, 9, 1, 4, 2, 4, 5, 1, 0 diff --git a/src/test/ref/atarixl-md5b.asm b/src/test/ref/atarixl-md5b.asm index e9149e00a..d71bd098a 100644 --- a/src/test/ref/atarixl-md5b.asm +++ b/src/test/ref/atarixl-md5b.asm @@ -1,9 +1,15 @@ // 8 bit converted md5 calculator -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="atarixl-md5b.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label line = 9 .label idx = $b +.segment Code __start: { // line = 0x0400 lda #<$400 @@ -231,5 +237,6 @@ print: { // } rts } +.segment Data HEX: .text "0123456789abcdef" .byte 0 diff --git a/src/test/ref/atarixl-md5b.log b/src/test/ref/atarixl-md5b.log index 2a377f105..bac2e2895 100644 --- a/src/test/ref/atarixl-md5b.log +++ b/src/test/ref/atarixl-md5b.log @@ -871,12 +871,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // 8 bit converted md5 calculator // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="atarixl-md5b.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label line = 9 .label idx = $b +.segment Code // __start __start: { jmp __init1 @@ -1220,6 +1226,7 @@ print: { rts } // File Data +.segment Data HEX: .text "0123456789abcdef" .byte 0 @@ -1364,12 +1371,18 @@ Score: 1690 // File Comments // 8 bit converted md5 calculator // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="atarixl-md5b.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label line = 9 .label idx = $b +.segment Code // __start __start: { // __start::__init1 @@ -1714,6 +1727,7 @@ print: { rts } // File Data +.segment Data HEX: .text "0123456789abcdef" .byte 0 diff --git a/src/test/ref/atoi-1.asm b/src/test/ref/atoi-1.asm index 0dcf42ece..6d22f2ed9 100644 --- a/src/test/ref/atoi-1.asm +++ b/src/test/ref/atoi-1.asm @@ -1,7 +1,12 @@ // Test atoi() -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="atoi-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c @@ -18,6 +23,7 @@ .label conio_line_text = $b // The current color cursor line start .label conio_line_color = $d +.segment Code __start: { // conio_cursor_x = 0 lda #0 @@ -90,6 +96,7 @@ main: { jsr cputs // } rts + .segment Data str: .text "1234" .byte 0 s: .text @"\n" @@ -97,6 +104,7 @@ main: { str1: .text "-5678" .byte 0 } +.segment Code // Set the cursor to the specified position // gotoxy(byte register(X) y) gotoxy: { @@ -723,6 +731,7 @@ memset: { !: jmp __b2 } +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/atoi-1.log b/src/test/ref/atoi-1.log index 46bfac219..e41a9bac7 100644 --- a/src/test/ref/atoi-1.log +++ b/src/test/ref/atoi-1.log @@ -4028,9 +4028,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test atoi() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="atoi-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -4048,6 +4053,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label conio_line_text = $b // The current color cursor line start .label conio_line_color = $d +.segment Code // __start __start: { jmp __init1 @@ -4208,6 +4214,7 @@ main: { __breturn: // [32] return rts + .segment Data str: .text "1234" .byte 0 s: .text @"\n" @@ -4215,6 +4222,7 @@ main: { str1: .text "-5678" .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -5155,6 +5163,7 @@ memset: { jmp __b2_from___b3 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits @@ -5590,9 +5599,14 @@ Score: 21586 // File Comments // Test atoi() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="atoi-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -5610,6 +5624,7 @@ Score: 21586 .label conio_line_text = $b // The current color cursor line start .label conio_line_color = $d +.segment Code // __start __start: { // __start::__init1 @@ -5746,6 +5761,7 @@ main: { // } // [32] return rts + .segment Data str: .text "1234" .byte 0 s: .text @"\n" @@ -5753,6 +5769,7 @@ main: { str1: .text "-5678" .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -6659,6 +6676,7 @@ memset: { jmp __b2 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/bgblack.asm b/src/test/ref/bgblack.asm index 9b273c3b0..e092aadd1 100644 --- a/src/test/ref/bgblack.asm +++ b/src/test/ref/bgblack.asm @@ -1,8 +1,14 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bgblack.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const BLACK = 0 .label BG_COLOR = $d021 +.segment Code main: { // *BG_COLOR = BLACK lda #BLACK diff --git a/src/test/ref/bgblack.log b/src/test/ref/bgblack.log index 1d2183ef8..ede8e9004 100644 --- a/src/test/ref/bgblack.log +++ b/src/test/ref/bgblack.log @@ -66,12 +66,18 @@ Uplifting [] best 15 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bgblack.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const BLACK = 0 .label BG_COLOR = $d021 +.segment Code // main main: { // [0] *BG_COLOR = BLACK -- _deref_pbuc1=vbuc2 @@ -103,12 +109,18 @@ Score: 12 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bgblack.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const BLACK = 0 .label BG_COLOR = $d021 +.segment Code // main main: { // *BG_COLOR = BLACK diff --git a/src/test/ref/bitmap-circle-2.asm b/src/test/ref/bitmap-circle-2.asm index ea000a224..fd3e8d0bc 100644 --- a/src/test/ref/bitmap-circle-2.asm +++ b/src/test/ref/bitmap-circle-2.asm @@ -1,9 +1,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-circle-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const VIC_BMM = $20 .const VIC_DEN = $10 .const VIC_RSEL = 8 @@ -13,6 +18,7 @@ .label VIC_MEMORY = $d018 .label SCREEN = $400 .label BITMAP = $2000 +.segment Code main: { .label i = 2 // fill(BITMAP,40*25*8,0) @@ -493,4 +499,5 @@ plot: { // } rts } +.segment Data bitmask: .byte $80, $40, $20, $10, 8, 4, 2, 1 diff --git a/src/test/ref/bitmap-circle-2.log b/src/test/ref/bitmap-circle-2.log index 003cd2f54..28dae31f7 100644 --- a/src/test/ref/bitmap-circle-2.log +++ b/src/test/ref/bitmap-circle-2.log @@ -1274,9 +1274,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-circle-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -1287,6 +1292,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label VIC_MEMORY = $d018 .label SCREEN = $400 .label BITMAP = $2000 +.segment Code // main main: { .label i = 2 @@ -1928,6 +1934,7 @@ plot: { rts } // File Data +.segment Data bitmask: .byte $80, $40, $20, $10, 8, 4, 2, 1 ASSEMBLER OPTIMIZATIONS @@ -2003,11 +2010,11 @@ Removing instruction __b3: Removing instruction __b2: Removing instruction __b1: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [146] bmi __b3 to bpl -Fixing long branch [343] bmi __breturn to bpl -Fixing long branch [353] bmi __breturn to bpl -Fixing long branch [357] bmi __breturn to bpl -Fixing long branch [367] bpl __breturn to bmi +Fixing long branch [152] bmi __b3 to bpl +Fixing long branch [349] bmi __breturn to bpl +Fixing long branch [359] bmi __breturn to bpl +Fixing long branch [363] bmi __breturn to bpl +Fixing long branch [373] bpl __breturn to bmi FINAL SYMBOL TABLE const nomodify byte* BITMAP = (byte*) 8192 @@ -2120,9 +2127,14 @@ Score: 51752 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-circle-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -2133,6 +2145,7 @@ Score: 51752 .label VIC_MEMORY = $d018 .label SCREEN = $400 .label BITMAP = $2000 +.segment Code // main main: { .label i = 2 @@ -2767,5 +2780,6 @@ plot: { rts } // File Data +.segment Data bitmask: .byte $80, $40, $20, $10, 8, 4, 2, 1 diff --git a/src/test/ref/bitmap-circle.asm b/src/test/ref/bitmap-circle.asm index 9b07cc05f..1ae142076 100644 --- a/src/test/ref/bitmap-circle.asm +++ b/src/test/ref/bitmap-circle.asm @@ -1,9 +1,14 @@ // Plots a circle on a bitmap using Bresenham's Circle algorithm // Coded by Richard-William Loerakker // Original Source https://bcaorganizer.blogspot.com/p/c-program-for_21.html?fbclid=IwAR0iL8pYcCqhCPa6LmtQ9qej-YonYVepY2cBegYRIWO0l8RPeOnTVniMAac -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-circle.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const VIC_BMM = $20 .const VIC_DEN = $10 .const VIC_RSEL = 8 @@ -13,6 +18,7 @@ .label VIC_MEMORY = $d018 .label SCREEN = $400 .label BITMAP = $2000 +.segment Code main: { // fill(BITMAP,40*25*8,0) ldx #0 @@ -425,4 +431,5 @@ plot: { // } rts } +.segment Data bitmask: .byte $80, $40, $20, $10, 8, 4, 2, 1 diff --git a/src/test/ref/bitmap-circle.log b/src/test/ref/bitmap-circle.log index c8e7f2ff2..63de22f15 100644 --- a/src/test/ref/bitmap-circle.log +++ b/src/test/ref/bitmap-circle.log @@ -1150,9 +1150,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Coded by Richard-William Loerakker // Original Source https://bcaorganizer.blogspot.com/p/c-program-for_21.html?fbclid=IwAR0iL8pYcCqhCPa6LmtQ9qej-YonYVepY2cBegYRIWO0l8RPeOnTVniMAac // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-circle.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -1163,6 +1168,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label VIC_MEMORY = $d018 .label SCREEN = $400 .label BITMAP = $2000 +.segment Code // main main: { // [1] call fill @@ -1719,6 +1725,7 @@ plot: { rts } // File Data +.segment Data bitmask: .byte $80, $40, $20, $10, 8, 4, 2, 1 ASSEMBLER OPTIMIZATIONS @@ -1783,7 +1790,7 @@ Removing instruction __b13: Removing instruction __b1_from___b13: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [112] bmi __b3 to bpl +Fixing long branch [118] bmi __b3 to bpl FINAL SYMBOL TABLE const nomodify byte* BITMAP = (byte*) 8192 @@ -1890,9 +1897,14 @@ Score: 6073 // Coded by Richard-William Loerakker // Original Source https://bcaorganizer.blogspot.com/p/c-program-for_21.html?fbclid=IwAR0iL8pYcCqhCPa6LmtQ9qej-YonYVepY2cBegYRIWO0l8RPeOnTVniMAac // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-circle.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -1903,6 +1915,7 @@ Score: 6073 .label VIC_MEMORY = $d018 .label SCREEN = $400 .label BITMAP = $2000 +.segment Code // main main: { // fill(BITMAP,40*25*8,0) @@ -2450,5 +2463,6 @@ plot: { rts } // File Data +.segment Data bitmask: .byte $80, $40, $20, $10, 8, 4, 2, 1 diff --git a/src/test/ref/bitmap-line-anim-1.asm b/src/test/ref/bitmap-line-anim-1.asm index 540a3d6aa..b443156a9 100644 --- a/src/test/ref/bitmap-line-anim-1.asm +++ b/src/test/ref/bitmap-line-anim-1.asm @@ -1,8 +1,13 @@ // Illustrates problem with bitmap-draw.kc line() // Reported by Janne Johansson -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-line-anim-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const VIC_BMM = $20 .const VIC_DEN = $10 .const VIC_RSEL = 8 @@ -13,6 +18,7 @@ .label SCREEN = $400 .label BITMAP = $2000 .label next = 5 +.segment Code main: { // *BORDER_COLOR = 0 lda #0 @@ -426,6 +432,7 @@ bitmap_plot: { // } rts } +.segment Data // Tables for the plotter - initialized by calling bitmap_draw_init(); bitmap_plot_xlo: .fill $100, 0 bitmap_plot_xhi: .fill $100, 0 diff --git a/src/test/ref/bitmap-line-anim-1.log b/src/test/ref/bitmap-line-anim-1.log index 9ad1ad18e..14f03afff 100644 --- a/src/test/ref/bitmap-line-anim-1.log +++ b/src/test/ref/bitmap-line-anim-1.log @@ -2641,9 +2641,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Illustrates problem with bitmap-draw.kc line() // Reported by Janne Johansson // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-line-anim-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -2655,6 +2660,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN = $400 .label BITMAP = $2000 .label next = 5 +.segment Code // main main: { // [0] *BORDER_COLOR = 0 -- _deref_pbuc1=vbuc2 @@ -3375,6 +3381,7 @@ bitmap_plot: { rts } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_draw_init(); bitmap_plot_xlo: .fill $100, 0 bitmap_plot_xhi: .fill $100, 0 @@ -3734,9 +3741,14 @@ Score: 30221 // Illustrates problem with bitmap-draw.kc line() // Reported by Janne Johansson // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-line-anim-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -3748,6 +3760,7 @@ Score: 30221 .label SCREEN = $400 .label BITMAP = $2000 .label next = 5 +.segment Code // main main: { // *BORDER_COLOR = 0 @@ -4428,6 +4441,7 @@ bitmap_plot: { rts } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_draw_init(); bitmap_plot_xlo: .fill $100, 0 bitmap_plot_xhi: .fill $100, 0 diff --git a/src/test/ref/bitmap-line-anim-2.asm b/src/test/ref/bitmap-line-anim-2.asm index 833697ccb..21dc065cd 100644 --- a/src/test/ref/bitmap-line-anim-2.asm +++ b/src/test/ref/bitmap-line-anim-2.asm @@ -1,8 +1,13 @@ // Shows that bitmap2.kc line() does not have the same problem as bitmap-draw.kc // See bitmap-line-anim-1.kc -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-line-anim-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const VIC_BMM = $20 .const VIC_DEN = $10 .const VIC_RSEL = 8 @@ -15,6 +20,7 @@ .label SCREEN = $400 .label BITMAP = $2000 .label next = 2 +.segment Code main: { // *BORDER_COLOR = 0 lda #0 @@ -502,6 +508,7 @@ bitmap_plot: { // } rts } +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 diff --git a/src/test/ref/bitmap-line-anim-2.log b/src/test/ref/bitmap-line-anim-2.log index 7542c9f5a..e85c411b8 100644 --- a/src/test/ref/bitmap-line-anim-2.log +++ b/src/test/ref/bitmap-line-anim-2.log @@ -2272,9 +2272,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Shows that bitmap2.kc line() does not have the same problem as bitmap-draw.kc // See bitmap-line-anim-1.kc // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-line-anim-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -2288,6 +2293,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN = $400 .label BITMAP = $2000 .label next = 2 +.segment Code // main main: { // [0] *BORDER_COLOR = 0 -- _deref_pbuc1=vbuc2 @@ -3054,6 +3060,7 @@ bitmap_plot: { rts } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 @@ -3217,7 +3224,7 @@ Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination Removing unreachable instruction jmp __b1 Succesful ASM optimization Pass5UnreachableCodeElimination -Fixing long branch [153] beq __b4 to bne +Fixing long branch [159] beq __b4 to bne FINAL SYMBOL TABLE const nomodify byte* BG_COLOR = (byte*) 53281 @@ -3396,9 +3403,14 @@ Score: 30180 // Shows that bitmap2.kc line() does not have the same problem as bitmap-draw.kc // See bitmap-line-anim-1.kc // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-line-anim-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -3412,6 +3424,7 @@ Score: 30180 .label SCREEN = $400 .label BITMAP = $2000 .label next = 2 +.segment Code // main main: { // *BORDER_COLOR = 0 @@ -4138,6 +4151,7 @@ bitmap_plot: { rts } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 diff --git a/src/test/ref/bitmap-plot-0.asm b/src/test/ref/bitmap-plot-0.asm index 8432b399f..06a1c4f36 100644 --- a/src/test/ref/bitmap-plot-0.asm +++ b/src/test/ref/bitmap-plot-0.asm @@ -3,9 +3,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plot-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f .const VIC_BMM = $20 @@ -42,6 +47,7 @@ .label SCREEN = $400 // Counts frames - updated by the IRQ .label frame_cnt = 8 +.segment Code __start: { // frame_cnt = 1 lda #1 @@ -364,6 +370,7 @@ memset: { !: jmp __b2 } +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 diff --git a/src/test/ref/bitmap-plot-0.log b/src/test/ref/bitmap-plot-0.log index b474677f3..c6baff467 100644 --- a/src/test/ref/bitmap-plot-0.log +++ b/src/test/ref/bitmap-plot-0.log @@ -1648,9 +1648,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plot-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -1688,6 +1693,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN = $400 // Counts frames - updated by the IRQ .label frame_cnt = 8 +.segment Code // __start __start: { jmp __init1 @@ -2202,6 +2208,7 @@ memset: { jmp __b2_from___b3 } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 @@ -2444,9 +2451,14 @@ Score: 3232 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plot-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -2484,6 +2496,7 @@ Score: 3232 .label SCREEN = $400 // Counts frames - updated by the IRQ .label frame_cnt = 8 +.segment Code // __start __start: { // __start::__init1 @@ -2969,6 +2982,7 @@ memset: { jmp __b2 } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 diff --git a/src/test/ref/bitmap-plot-1.asm b/src/test/ref/bitmap-plot-1.asm index 941b1f5fa..0307ec3d3 100644 --- a/src/test/ref/bitmap-plot-1.asm +++ b/src/test/ref/bitmap-plot-1.asm @@ -3,9 +3,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plot-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f .const VIC_BMM = $20 @@ -51,6 +56,7 @@ .label frame_cnt = $16 // Remainder after unsigned 16-bit division .label rem16u = $2c +.segment Code __start: { // frame_cnt = 1 lda #1 @@ -1080,6 +1086,7 @@ mulu16_sel: { // } rts } +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 diff --git a/src/test/ref/bitmap-plot-1.log b/src/test/ref/bitmap-plot-1.log index ddcd2798c..8b7274c6f 100644 --- a/src/test/ref/bitmap-plot-1.log +++ b/src/test/ref/bitmap-plot-1.log @@ -4061,9 +4061,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plot-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -4110,6 +4115,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label frame_cnt = $16 // Remainder after unsigned 16-bit division .label rem16u = $2c +.segment Code // __start __start: { jmp __init1 @@ -5622,6 +5628,7 @@ mulu16_sel: { rts } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 @@ -6213,9 +6220,14 @@ Score: 20504 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plot-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -6262,6 +6274,7 @@ Score: 20504 .label frame_cnt = $16 // Remainder after unsigned 16-bit division .label rem16u = $2c +.segment Code // __start __start: { // __start::__init1 @@ -7722,6 +7735,7 @@ mulu16_sel: { rts } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 diff --git a/src/test/ref/bitmap-plot-2.asm b/src/test/ref/bitmap-plot-2.asm index 7dd18b001..c4d8c32ef 100644 --- a/src/test/ref/bitmap-plot-2.asm +++ b/src/test/ref/bitmap-plot-2.asm @@ -3,9 +3,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plot-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f .const VIC_BMM = $20 @@ -52,6 +57,7 @@ .label frame_cnt = $1b // Remainder after unsigned 16-bit division .label rem16u = $2f +.segment Code __start: { // frame_cnt = 1 lda #1 @@ -1116,6 +1122,7 @@ mulu16_sel: { // } rts } +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 diff --git a/src/test/ref/bitmap-plot-2.log b/src/test/ref/bitmap-plot-2.log index d93f8a0e7..7dc841df0 100644 --- a/src/test/ref/bitmap-plot-2.log +++ b/src/test/ref/bitmap-plot-2.log @@ -4293,9 +4293,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plot-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -4343,6 +4348,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label frame_cnt = $1b // Remainder after unsigned 16-bit division .label rem16u = $2f +.segment Code // __start __start: { jmp __init1 @@ -5913,6 +5919,7 @@ mulu16_sel: { rts } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 @@ -6530,9 +6537,14 @@ Score: 20664 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plot-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -6580,6 +6592,7 @@ Score: 20664 .label frame_cnt = $1b // Remainder after unsigned 16-bit division .label rem16u = $2f +.segment Code // __start __start: { // __start::__init1 @@ -8094,6 +8107,7 @@ mulu16_sel: { rts } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 diff --git a/src/test/ref/bitmap-plot-3.asm b/src/test/ref/bitmap-plot-3.asm index ddf5a6807..9b554eaab 100644 --- a/src/test/ref/bitmap-plot-3.asm +++ b/src/test/ref/bitmap-plot-3.asm @@ -3,9 +3,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plot-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const VIC_BMM = $20 .const VIC_DEN = $10 .const VIC_RSEL = 8 @@ -15,6 +20,7 @@ .label BITMAP = $2000 .label SCREEN = $400 .label COSTAB = SINTAB+$40 +.segment Code main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f .label __13 = 6 @@ -528,6 +534,7 @@ bitmap_plot: { // } rts } +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 diff --git a/src/test/ref/bitmap-plot-3.log b/src/test/ref/bitmap-plot-3.log index 1b5cc98c5..8c3f46726 100644 --- a/src/test/ref/bitmap-plot-3.log +++ b/src/test/ref/bitmap-plot-3.log @@ -2521,9 +2521,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plot-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -2534,6 +2539,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label BITMAP = $2000 .label SCREEN = $400 .label COSTAB = SINTAB+$40 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f @@ -3319,6 +3325,7 @@ bitmap_plot: { rts } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 @@ -3473,7 +3480,7 @@ Removing instruction __b2: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [192] beq __b4 to bne +Fixing long branch [198] beq __b4 to bne FINAL SYMBOL TABLE const byte* BITMAP = (byte*) 8192 @@ -3673,9 +3680,14 @@ Score: 26877 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plot-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -3686,6 +3698,7 @@ Score: 26877 .label BITMAP = $2000 .label SCREEN = $400 .label COSTAB = SINTAB+$40 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f @@ -4439,6 +4452,7 @@ bitmap_plot: { rts } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 diff --git a/src/test/ref/bitmap-plotter.asm b/src/test/ref/bitmap-plotter.asm index 2f6c7f84a..cdcf9cfc3 100644 --- a/src/test/ref/bitmap-plotter.asm +++ b/src/test/ref/bitmap-plotter.asm @@ -1,6 +1,11 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plotter.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const BMM = $20 .const DEN = $10 .const RSEL = 8 @@ -12,6 +17,7 @@ .label BG_COLOR = $d020 .label FGCOL = $d021 .label SCREEN = $400 +.segment Code main: { // *BG_COLOR = 0 lda #0 @@ -224,6 +230,7 @@ plot: { // } rts } +.segment Data plots_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28 plots_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28 plot_xlo: .fill $100, 0 diff --git a/src/test/ref/bitmap-plotter.log b/src/test/ref/bitmap-plotter.log index 77706986f..93a104e0b 100644 --- a/src/test/ref/bitmap-plotter.log +++ b/src/test/ref/bitmap-plotter.log @@ -947,9 +947,14 @@ Allocated (was zp[2]:26) zp[2]:6 [ plot::plotter_y#1 plot::plotter_y#2 init_plot ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plotter.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const BMM = $20 .const DEN = $10 @@ -962,6 +967,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label BG_COLOR = $d020 .label FGCOL = $d021 .label SCREEN = $400 +.segment Code // main main: { // [0] *BG_COLOR = 0 -- _deref_pbuc1=vbuc2 @@ -1298,6 +1304,7 @@ plot: { rts } // File Data +.segment Data plots_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28 plots_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28 plot_xlo: .fill $100, 0 @@ -1467,9 +1474,14 @@ Score: 6531 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-plotter.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const BMM = $20 .const DEN = $10 @@ -1482,6 +1494,7 @@ Score: 6531 .label BG_COLOR = $d020 .label FGCOL = $d021 .label SCREEN = $400 +.segment Code // main main: { // *BG_COLOR = 0 @@ -1810,6 +1823,7 @@ plot: { rts } // File Data +.segment Data plots_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28 plots_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28 plot_xlo: .fill $100, 0 diff --git a/src/test/ref/bitwise-not-1.asm b/src/test/ref/bitwise-not-1.asm index 1977c04a0..81a584f2f 100644 --- a/src/test/ref/bitwise-not-1.asm +++ b/src/test/ref/bitwise-not-1.asm @@ -1,7 +1,13 @@ // Test that bitwise NOT (~) is handled correctly -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitwise-not-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const b = $10^$ff .label screen = $400 diff --git a/src/test/ref/bitwise-not-1.log b/src/test/ref/bitwise-not-1.log index 95835ecc7..2ebb280e7 100644 --- a/src/test/ref/bitwise-not-1.log +++ b/src/test/ref/bitwise-not-1.log @@ -71,10 +71,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test that bitwise NOT (~) is handled correctly // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitwise-not-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const b = $10^$ff @@ -109,10 +115,16 @@ Score: 12 // File Comments // Test that bitwise NOT (~) is handled correctly // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitwise-not-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const b = $10^$ff diff --git a/src/test/ref/bitwise-not.asm b/src/test/ref/bitwise-not.asm index 9b4da1799..9a5c1fb06 100644 --- a/src/test/ref/bitwise-not.asm +++ b/src/test/ref/bitwise-not.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitwise-not.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 // *SCREEN = ~1ub diff --git a/src/test/ref/bitwise-not.log b/src/test/ref/bitwise-not.log index e1ca7c51e..07b133852 100644 --- a/src/test/ref/bitwise-not.log +++ b/src/test/ref/bitwise-not.log @@ -121,10 +121,16 @@ Uplifting [] best 277 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitwise-not.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -190,10 +196,16 @@ Score: 187 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitwise-not.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/bool-const.asm b/src/test/ref/bool-const.asm index 4831d52d8..77f8274cc 100644 --- a/src/test/ref/bool-const.asm +++ b/src/test/ref/bool-const.asm @@ -1,8 +1,14 @@ // A Minimal test of boolean constants. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-const.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // bool_const_if() jsr bool_const_if diff --git a/src/test/ref/bool-const.log b/src/test/ref/bool-const.log index 1076d3128..f5e3f9355 100644 --- a/src/test/ref/bool-const.log +++ b/src/test/ref/bool-const.log @@ -361,11 +361,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // A Minimal test of boolean constants. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-const.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] call bool_const_if @@ -489,11 +495,17 @@ Score: 60 // File Comments // A Minimal test of boolean constants. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-const.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // bool_const_if() diff --git a/src/test/ref/bool-function.asm b/src/test/ref/bool-function.asm index f418950b5..975156b1f 100644 --- a/src/test/ref/bool-function.asm +++ b/src/test/ref/bool-function.asm @@ -1,7 +1,13 @@ // Test a function taking boolean parameter and returning boolean result -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-function.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 ldx #0 diff --git a/src/test/ref/bool-function.log b/src/test/ref/bool-function.log index 34b31a2f8..7a998611b 100644 --- a/src/test/ref/bool-function.log +++ b/src/test/ref/bool-function.log @@ -289,10 +289,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test a function taking boolean parameter and returning boolean result // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-function.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -434,10 +440,16 @@ Score: 551 // File Comments // Test a function taking boolean parameter and returning boolean result // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-function.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/bool-ifs-min.asm b/src/test/ref/bool-ifs-min.asm index ba0ad9b79..d14fe9e0e 100644 --- a/src/test/ref/bool-ifs-min.asm +++ b/src/test/ref/bool-ifs-min.asm @@ -1,7 +1,13 @@ // A test of boolean conditions using && || and ! -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-ifs-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 ldx #0 diff --git a/src/test/ref/bool-ifs-min.log b/src/test/ref/bool-ifs-min.log index a9ebc90e5..a6bbe48ad 100644 --- a/src/test/ref/bool-ifs-min.log +++ b/src/test/ref/bool-ifs-min.log @@ -173,10 +173,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // A test of boolean conditions using && || and ! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-ifs-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -261,10 +267,16 @@ Score: 291 // File Comments // A test of boolean conditions using && || and ! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-ifs-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/bool-ifs.asm b/src/test/ref/bool-ifs.asm index bdba0f101..29a1a716c 100644 --- a/src/test/ref/bool-ifs.asm +++ b/src/test/ref/bool-ifs.asm @@ -1,7 +1,13 @@ // A test of boolean conditions using && || and ! -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-ifs.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // bool_and() jsr bool_and diff --git a/src/test/ref/bool-ifs.log b/src/test/ref/bool-ifs.log index c684ce236..62b7e47a8 100644 --- a/src/test/ref/bool-ifs.log +++ b/src/test/ref/bool-ifs.log @@ -642,10 +642,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // A test of boolean conditions using && || and ! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-ifs.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] call bool_and @@ -1020,10 +1026,16 @@ Score: 1684 // File Comments // A test of boolean conditions using && || and ! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-ifs.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // bool_and() diff --git a/src/test/ref/bool-not-operator-1.asm b/src/test/ref/bool-not-operator-1.asm index 086911faa..2abca757c 100644 --- a/src/test/ref/bool-not-operator-1.asm +++ b/src/test/ref/bool-not-operator-1.asm @@ -2,9 +2,15 @@ // Bool not operator used in ternary operator // Fails due to "Number integer type not resolved to fixed size integer type" // https://gitlab.com/camelot/kickc/issues/199 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-not-operator-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 ldx #0 diff --git a/src/test/ref/bool-not-operator-1.log b/src/test/ref/bool-not-operator-1.log index 89802b0b2..c45e2c499 100644 --- a/src/test/ref/bool-not-operator-1.log +++ b/src/test/ref/bool-not-operator-1.log @@ -206,10 +206,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Fails due to "Number integer type not resolved to fixed size integer type" // https://gitlab.com/camelot/kickc/issues/199 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-not-operator-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -306,10 +312,16 @@ Score: 296 // Fails due to "Number integer type not resolved to fixed size integer type" // https://gitlab.com/camelot/kickc/issues/199 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-not-operator-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/bool-not-operator-2.asm b/src/test/ref/bool-not-operator-2.asm index fefc2583c..c8575afa9 100644 --- a/src/test/ref/bool-not-operator-2.asm +++ b/src/test/ref/bool-not-operator-2.asm @@ -2,9 +2,15 @@ // Bool not operator used on char in ternary operator // Fails due to "Number integer type not resolved to fixed size integer type" // https://gitlab.com/camelot/kickc/issues/199 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-not-operator-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 ldx #0 diff --git a/src/test/ref/bool-not-operator-2.log b/src/test/ref/bool-not-operator-2.log index 1fa4012c9..81b382050 100644 --- a/src/test/ref/bool-not-operator-2.log +++ b/src/test/ref/bool-not-operator-2.log @@ -204,10 +204,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Fails due to "Number integer type not resolved to fixed size integer type" // https://gitlab.com/camelot/kickc/issues/199 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-not-operator-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -304,10 +310,16 @@ Score: 296 // Fails due to "Number integer type not resolved to fixed size integer type" // https://gitlab.com/camelot/kickc/issues/199 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-not-operator-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/bool-nullpointer-exception.asm b/src/test/ref/bool-nullpointer-exception.asm index 67e43cab9..10e771cb7 100644 --- a/src/test/ref/bool-nullpointer-exception.asm +++ b/src/test/ref/bool-nullpointer-exception.asm @@ -1,7 +1,13 @@ // Some bool code that causes a NullPointerException -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-nullpointer-exception.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { lda #1 jmp __b2 diff --git a/src/test/ref/bool-nullpointer-exception.log b/src/test/ref/bool-nullpointer-exception.log index 2e6c51e95..3906045ec 100644 --- a/src/test/ref/bool-nullpointer-exception.log +++ b/src/test/ref/bool-nullpointer-exception.log @@ -138,10 +138,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Some bool code that causes a NullPointerException // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-nullpointer-exception.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -192,10 +198,16 @@ Score: 820 // File Comments // Some bool code that causes a NullPointerException // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-nullpointer-exception.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/bool-pointer.asm b/src/test/ref/bool-pointer.asm index 181316c43..2be1232fe 100644 --- a/src/test/ref/bool-pointer.asm +++ b/src/test/ref/bool-pointer.asm @@ -1,7 +1,13 @@ // Tests a pointer to a boolean -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // bscreen[0] = true lda #1 diff --git a/src/test/ref/bool-pointer.log b/src/test/ref/bool-pointer.log index 923cc77d4..f3b6ed56d 100644 --- a/src/test/ref/bool-pointer.log +++ b/src/test/ref/bool-pointer.log @@ -133,10 +133,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests a pointer to a boolean // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [0] *((bool*) 1024) = true -- _deref_pboc1=vboc2 @@ -188,10 +194,16 @@ Score: 40 // File Comments // Tests a pointer to a boolean // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // bscreen[0] = true diff --git a/src/test/ref/bool-vars.asm b/src/test/ref/bool-vars.asm index ab082935a..fbdb2d5df 100644 --- a/src/test/ref/bool-vars.asm +++ b/src/test/ref/bool-vars.asm @@ -1,7 +1,13 @@ // A test of boolean conditions using && || and ! -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-vars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // bool_and() jsr bool_and diff --git a/src/test/ref/bool-vars.log b/src/test/ref/bool-vars.log index 0ecd0625b..2c927b8ac 100644 --- a/src/test/ref/bool-vars.log +++ b/src/test/ref/bool-vars.log @@ -704,10 +704,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // A test of boolean conditions using && || and ! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-vars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] call bool_and @@ -1110,10 +1116,16 @@ Score: 1899 // File Comments // A test of boolean conditions using && || and ! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bool-vars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // bool_and() diff --git a/src/test/ref/bresenham.asm b/src/test/ref/bresenham.asm index 998100826..b38c0aea1 100644 --- a/src/test/ref/bresenham.asm +++ b/src/test/ref/bresenham.asm @@ -1,8 +1,14 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bresenham.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const STAR = $51 .label SCREEN = $400 +.segment Code main: { .const x0 = 4 .const y0 = 4 diff --git a/src/test/ref/bresenham.log b/src/test/ref/bresenham.log index 505574afa..c0d5658cf 100644 --- a/src/test/ref/bresenham.log +++ b/src/test/ref/bresenham.log @@ -376,12 +376,18 @@ Allocated (was zp[1]:6) zp[1]:5 [ main::y#2 main::y#4 main::y#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bresenham.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const STAR = $51 .label SCREEN = $400 +.segment Code // main main: { .const x0 = 4 @@ -532,12 +538,18 @@ Score: 926 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bresenham.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const STAR = $51 .label SCREEN = $400 +.segment Code // main main: { .const x0 = 4 diff --git a/src/test/ref/bresenhamarr.asm b/src/test/ref/bresenhamarr.asm index b4952163f..1296804f3 100644 --- a/src/test/ref/bresenhamarr.asm +++ b/src/test/ref/bresenhamarr.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bresenhamarr.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const STAR = $51 .const x0 = 0 diff --git a/src/test/ref/bresenhamarr.log b/src/test/ref/bresenhamarr.log index 87c17f113..0cba0ac66 100644 --- a/src/test/ref/bresenhamarr.log +++ b/src/test/ref/bresenhamarr.log @@ -384,10 +384,16 @@ Allocated (was zp[2]:7) zp[2]:6 [ main::$15 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bresenhamarr.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const STAR = $51 @@ -551,10 +557,16 @@ Score: 1111 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bresenhamarr.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const STAR = $51 diff --git a/src/test/ref/c-types.asm b/src/test/ref/c-types.asm index 40f955450..d581720e8 100644 --- a/src/test/ref/c-types.asm +++ b/src/test/ref/c-types.asm @@ -1,10 +1,16 @@ // Tests the different standard C types -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c-types.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label print_screen = $400 .label print_char_cursor = 2 .label print_line_cursor = 4 +.segment Code main: { // print_cls() jsr print_cls @@ -62,9 +68,11 @@ testChar: { jsr print_ln // } rts + .segment Data str: .text "char: " .byte 0 } +.segment Code testShort: { .const u = $578 .const n = -$578 @@ -107,9 +115,11 @@ testShort: { jsr print_ln // } rts + .segment Data str: .text "short: " .byte 0 } +.segment Code testInt: { .const u = $578 .const n = -$578 @@ -152,9 +162,11 @@ testInt: { jsr print_ln // } rts + .segment Data str: .text "int: " .byte 0 } +.segment Code testLong: { .const u = $222e0 .const n = -$222e0 @@ -209,9 +221,11 @@ testLong: { jsr print_ln // } rts + .segment Data str: .text "long: " .byte 0 } +.segment Code // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { .const c = ' ' @@ -441,4 +455,5 @@ print_slong: { sta.z dw+3 jmp __b2 } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/c-types.log b/src/test/ref/c-types.log index 5938eed5d..ee89df800 100644 --- a/src/test/ref/c-types.log +++ b/src/test/ref/c-types.log @@ -2199,13 +2199,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests the different standard C types // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c-types.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_char_cursor = 2 .label print_line_cursor = 4 +.segment Code // main main: { // [1] call print_cls @@ -2356,9 +2362,11 @@ testChar: { __breturn: // [28] return rts + .segment Data str: .text "char: " .byte 0 } +.segment Code // testShort testShort: { .const u = $578 @@ -2461,9 +2469,11 @@ testShort: { __breturn: // [43] return rts + .segment Data str: .text "short: " .byte 0 } +.segment Code // testInt testInt: { .const u = $578 @@ -2566,9 +2576,11 @@ testInt: { __breturn: // [58] return rts + .segment Data str: .text "int: " .byte 0 } +.segment Code // testLong testLong: { .const u = $222e0 @@ -2683,9 +2695,11 @@ testLong: { __breturn: // [73] return rts + .segment Data str: .text "long: " .byte 0 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { @@ -3106,6 +3120,7 @@ print_slong: { jmp __b2_from___b4 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -3442,13 +3457,19 @@ Score: 2013 // File Comments // Tests the different standard C types // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c-types.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_char_cursor = 2 .label print_line_cursor = 4 +.segment Code // main main: { // print_cls() @@ -3569,9 +3590,11 @@ testChar: { // } // [28] return rts + .segment Data str: .text "char: " .byte 0 } +.segment Code // testShort testShort: { .const u = $578 @@ -3655,9 +3678,11 @@ testShort: { // } // [43] return rts + .segment Data str: .text "short: " .byte 0 } +.segment Code // testInt testInt: { .const u = $578 @@ -3741,9 +3766,11 @@ testInt: { // } // [58] return rts + .segment Data str: .text "int: " .byte 0 } +.segment Code // testLong testLong: { .const u = $222e0 @@ -3839,9 +3866,11 @@ testLong: { // } // [73] return rts + .segment Data str: .text "long: " .byte 0 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { @@ -4224,5 +4253,6 @@ print_slong: { jmp __b2 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/c64dtv-8bppcharstretch.asm b/src/test/ref/c64dtv-8bppcharstretch.asm index e21c42c66..cd9f81737 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.asm +++ b/src/test/ref/c64dtv-8bppcharstretch.asm @@ -4,9 +4,14 @@ // Sources // (J) https://www.c64-wiki.com/wiki/C64DTV_Programming_Guide // (H) http://dtvhacking.cbm8bit.com/dtv_wiki/images/d/d9/Dtv_registers_full.txt -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-8bppcharstretch.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const VIC_ECM = $40 .const VIC_DEN = $10 .const VIC_RSEL = 8 @@ -61,6 +66,7 @@ .label SCREEN = $7c00 // Plane with all pixels .label CHARSET8 = $8000 +.segment Code main: { // asm sei diff --git a/src/test/ref/c64dtv-8bppcharstretch.log b/src/test/ref/c64dtv-8bppcharstretch.log index 8d230d5c6..9336bb9d6 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/ref/c64dtv-8bppcharstretch.log @@ -1260,9 +1260,14 @@ ASSEMBLER BEFORE OPTIMIZATION // (J) https://www.c64-wiki.com/wiki/C64DTV_Programming_Guide // (H) http://dtvhacking.cbm8bit.com/dtv_wiki/images/d/d9/Dtv_registers_full.txt // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-8bppcharstretch.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_ECM = $40 .const VIC_DEN = $10 @@ -1318,6 +1323,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN = $7c00 // Plane with all pixels .label CHARSET8 = $8000 +.segment Code // main main: { // asm { sei } @@ -2052,9 +2058,14 @@ Score: 75375 // (J) https://www.c64-wiki.com/wiki/C64DTV_Programming_Guide // (H) http://dtvhacking.cbm8bit.com/dtv_wiki/images/d/d9/Dtv_registers_full.txt // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-8bppcharstretch.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_ECM = $40 .const VIC_DEN = $10 @@ -2110,6 +2121,7 @@ Score: 75375 .label SCREEN = $7c00 // Plane with all pixels .label CHARSET8 = $8000 +.segment Code // main main: { // asm diff --git a/src/test/ref/c64dtv-8bppchunkystretch.asm b/src/test/ref/c64dtv-8bppchunkystretch.asm index 9d3fb08c8..3172ea32c 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.asm +++ b/src/test/ref/c64dtv-8bppchunkystretch.asm @@ -4,9 +4,14 @@ // Sources // (J) https://www.c64-wiki.com/wiki/C64DTV_Programming_Guide // (H) http://dtvhacking.cbm8bit.com/dtv_wiki/images/d/d9/Dtv_registers_full.txt -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-8bppchunkystretch.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const VIC_ECM = $40 .const VIC_DEN = $10 .const VIC_RSEL = 8 @@ -49,6 +54,7 @@ .label DTV_PLANEB_MODULO_HI = $d048 // Plane with all pixels .label CHUNKY = $8000 +.segment Code main: { // asm sei diff --git a/src/test/ref/c64dtv-8bppchunkystretch.log b/src/test/ref/c64dtv-8bppchunkystretch.log index 6d75f5a25..21029f5e7 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/ref/c64dtv-8bppchunkystretch.log @@ -806,9 +806,14 @@ ASSEMBLER BEFORE OPTIMIZATION // (J) https://www.c64-wiki.com/wiki/C64DTV_Programming_Guide // (H) http://dtvhacking.cbm8bit.com/dtv_wiki/images/d/d9/Dtv_registers_full.txt // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-8bppchunkystretch.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_ECM = $40 .const VIC_DEN = $10 @@ -852,6 +857,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label DTV_PLANEB_MODULO_HI = $d048 // Plane with all pixels .label CHUNKY = $8000 +.segment Code // main main: { // asm { sei } @@ -1372,9 +1378,14 @@ Score: 19882 // (J) https://www.c64-wiki.com/wiki/C64DTV_Programming_Guide // (H) http://dtvhacking.cbm8bit.com/dtv_wiki/images/d/d9/Dtv_registers_full.txt // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-8bppchunkystretch.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_ECM = $40 .const VIC_DEN = $10 @@ -1418,6 +1429,7 @@ Score: 19882 .label DTV_PLANEB_MODULO_HI = $d048 // Plane with all pixels .label CHUNKY = $8000 +.segment Code // main main: { // asm diff --git a/src/test/ref/c64dtv-blitter-box.asm b/src/test/ref/c64dtv-blitter-box.asm index e74306c0c..078080603 100644 --- a/src/test/ref/c64dtv-blitter-box.asm +++ b/src/test/ref/c64dtv-blitter-box.asm @@ -1,7 +1,12 @@ // Fill a box on the screen using the blitter -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-blitter-box.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const DTV_FEATURE_ENABLE = 1 // Bit[0] Force Start Strobe when set .const DTV_BLIT_FORCE_START = 1 @@ -71,6 +76,7 @@ .label SCREEN = $400 // Controls the ALU operation .label DTV_BLITTER_ALU = $d33e +.segment Code main: { // *DTV_FEATURE = DTV_FEATURE_ENABLE lda #DTV_FEATURE_ENABLE @@ -179,6 +185,7 @@ main: { // } rts } +.segment Data SRCA: .text "camelot rules!" .byte 0 SRCB: .byte $80 diff --git a/src/test/ref/c64dtv-blitter-box.log b/src/test/ref/c64dtv-blitter-box.log index e6193510c..418687df2 100644 --- a/src/test/ref/c64dtv-blitter-box.log +++ b/src/test/ref/c64dtv-blitter-box.log @@ -342,9 +342,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Fill a box on the screen using the blitter // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-blitter-box.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const DTV_FEATURE_ENABLE = 1 // Bit[0] Force Start Strobe when set @@ -415,6 +420,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN = $400 // Controls the ALU operation .label DTV_BLITTER_ALU = $d33e +.segment Code // main main: { // [0] *DTV_FEATURE = DTV_FEATURE_ENABLE -- _deref_pbuc1=vbuc2 @@ -536,6 +542,7 @@ main: { rts } // File Data +.segment Data SRCA: .text "camelot rules!" .byte 0 SRCB: .byte $80 @@ -611,9 +618,14 @@ Score: 291 // File Comments // Fill a box on the screen using the blitter // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-blitter-box.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const DTV_FEATURE_ENABLE = 1 // Bit[0] Force Start Strobe when set @@ -684,6 +696,7 @@ Score: 291 .label SCREEN = $400 // Controls the ALU operation .label DTV_BLITTER_ALU = $d33e +.segment Code // main main: { // *DTV_FEATURE = DTV_FEATURE_ENABLE @@ -831,6 +844,7 @@ main: { rts } // File Data +.segment Data SRCA: .text "camelot rules!" .byte 0 SRCB: .byte $80 diff --git a/src/test/ref/c64dtv-blittermin.asm b/src/test/ref/c64dtv-blittermin.asm index 2cbd9665f..29b9a5327 100644 --- a/src/test/ref/c64dtv-blittermin.asm +++ b/src/test/ref/c64dtv-blittermin.asm @@ -3,9 +3,14 @@ // Sources // (J) https://www.c64-wiki.com/wiki/C64DTV_Programming_Guide // (H) http://dtvhacking.cbm8bit.com/dtv_wiki/images/d/d9/Dtv_registers_full.txt -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-blittermin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const DTV_FEATURE_ENABLE = 1 // Bit[0] Force Start Strobe when set .const DTV_BLIT_FORCE_START = 1 @@ -76,6 +81,7 @@ .label SCREEN = $400 // Controls the ALU operation .label DTV_BLITTER_ALU = $d33e +.segment Code main: { // *DTV_FEATURE = DTV_FEATURE_ENABLE lda #DTV_FEATURE_ENABLE @@ -189,5 +195,6 @@ main: { // } rts } +.segment Data SRCA: .byte 'c', 'a', 'm', 'e', 'l', 'o', 't', '!', ' ' SRCB: .byte $80 diff --git a/src/test/ref/c64dtv-blittermin.log b/src/test/ref/c64dtv-blittermin.log index 1dcc71ab3..41163d655 100644 --- a/src/test/ref/c64dtv-blittermin.log +++ b/src/test/ref/c64dtv-blittermin.log @@ -420,9 +420,14 @@ ASSEMBLER BEFORE OPTIMIZATION // (J) https://www.c64-wiki.com/wiki/C64DTV_Programming_Guide // (H) http://dtvhacking.cbm8bit.com/dtv_wiki/images/d/d9/Dtv_registers_full.txt // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-blittermin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const DTV_FEATURE_ENABLE = 1 // Bit[0] Force Start Strobe when set @@ -494,6 +499,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN = $400 // Controls the ALU operation .label DTV_BLITTER_ALU = $d33e +.segment Code // main main: { // [0] *DTV_FEATURE = DTV_FEATURE_ENABLE -- _deref_pbuc1=vbuc2 @@ -636,6 +642,7 @@ main: { rts } // File Data +.segment Data SRCA: .byte 'c', 'a', 'm', 'e', 'l', 'o', 't', '!', ' ' SRCB: .byte $80 @@ -733,9 +740,14 @@ Score: 1553 // (J) https://www.c64-wiki.com/wiki/C64DTV_Programming_Guide // (H) http://dtvhacking.cbm8bit.com/dtv_wiki/images/d/d9/Dtv_registers_full.txt // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-blittermin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const DTV_FEATURE_ENABLE = 1 // Bit[0] Force Start Strobe when set @@ -807,6 +819,7 @@ Score: 1553 .label SCREEN = $400 // Controls the ALU operation .label DTV_BLITTER_ALU = $d33e +.segment Code // main main: { // *DTV_FEATURE = DTV_FEATURE_ENABLE @@ -967,6 +980,7 @@ main: { rts } // File Data +.segment Data SRCA: .byte 'c', 'a', 'm', 'e', 'l', 'o', 't', '!', ' ' SRCB: .byte $80 diff --git a/src/test/ref/c64dtv-color.asm b/src/test/ref/c64dtv-color.asm index edd1cf354..150a5c32a 100644 --- a/src/test/ref/c64dtv-color.asm +++ b/src/test/ref/c64dtv-color.asm @@ -1,7 +1,12 @@ // Test C64DTV v2 256-colors and the 16-color redefinable palette -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-color.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const DTV_FEATURE_ENABLE = 1 .const DTV_BORDER_OFF = 2 .const DTV_HIGHCOLOR = 4 @@ -14,6 +19,7 @@ .label DTV_CONTROL = $d03c // Defines colors for the 16 first colors ($00-$0f) .label DTV_PALETTE = $d200 +.segment Code main: { // asm sei @@ -79,5 +85,6 @@ main: { cpx #$10 bne __b4 jmp __b1 + .segment Data palette: .byte 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, $a, $b, $c, $d, $e, $f } diff --git a/src/test/ref/c64dtv-color.log b/src/test/ref/c64dtv-color.log index c46c032af..dc4025298 100644 --- a/src/test/ref/c64dtv-color.log +++ b/src/test/ref/c64dtv-color.log @@ -234,9 +234,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test C64DTV v2 256-colors and the 16-color redefinable palette // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-color.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const DTV_FEATURE_ENABLE = 1 .const DTV_BORDER_OFF = 2 @@ -250,6 +255,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label DTV_CONTROL = $d03c // Defines colors for the 16 first colors ($00-$0f) .label DTV_PALETTE = $d200 +.segment Code // main main: { // asm { sei } @@ -341,6 +347,7 @@ main: { cpx #$10 bne __b4_from___b4 jmp __b1 + .segment Data palette: .byte 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, $a, $b, $c, $d, $e, $f } // File Data @@ -393,9 +400,14 @@ Score: 10174 // File Comments // Test C64DTV v2 256-colors and the 16-color redefinable palette // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-color.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const DTV_FEATURE_ENABLE = 1 .const DTV_BORDER_OFF = 2 @@ -409,6 +421,7 @@ Score: 10174 .label DTV_CONTROL = $d03c // Defines colors for the 16 first colors ($00-$0f) .label DTV_PALETTE = $d200 +.segment Code // main main: { // asm @@ -500,6 +513,7 @@ main: { cpx #$10 bne __b4 jmp __b1 + .segment Data palette: .byte 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, $a, $b, $c, $d, $e, $f } // File Data diff --git a/src/test/ref/c64dtv-gfxexplorer.asm b/src/test/ref/c64dtv-gfxexplorer.asm index f18f1cb6d..50aaab111 100644 --- a/src/test/ref/c64dtv-gfxexplorer.asm +++ b/src/test/ref/c64dtv-gfxexplorer.asm @@ -4,9 +4,14 @@ // Sources // (J) https://www.c64-wiki.com/wiki/C64DTV_Programming_Guide // (H) http://dtvhacking.cbm8bit.com/dtv_wiki/images/d/d9/Dtv_registers_full.txt -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-gfxexplorer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const VIC_ECM = $40 .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -179,6 +184,7 @@ .label form_cursor_count = $11 // Current selected field in the form .label form_field_idx = 2 +.segment Code main: { // asm sei @@ -1140,9 +1146,11 @@ gfx_init_vic_bitmap: { // for(byte l=0; lgfx_init_vic_bitmap::@1#0] -- register_copy jmp __b1 + .segment Data lines_x: .byte 0, $ff, $ff, 0, 0, $80, $ff, $80, 0, $80 lines_y: .byte 0, 0, $c7, $c7, 0, 0, $64, $c7, $64, 0 } +.segment Code // gfx_init_plane_8bppchunky // Initialize 8BPP Chunky Bitmap (contains 8bpp pixels) gfx_init_plane_8bppchunky: { @@ -16321,8 +16329,10 @@ gfx_init_plane_horisontal2: { __breturn: // [416] return rts + .segment Data row_bitmask: .byte 0, $55, $aa, $ff } +.segment Code // gfx_init_plane_vertical2 // Initialize Plane with Vertical Stripes every 2 pixels gfx_init_plane_vertical2: { @@ -16778,6 +16788,7 @@ render_preset_name: { __breturn: // [482] return rts + .segment Data name_1: .text "Standard Charset " .byte 0 name_2: .text "Extended Color Charset " @@ -16801,6 +16812,7 @@ render_preset_name: { name_11: .text "8bpp Pixel Cell " .byte 0 } +.segment Code // form_control // Reads keyboard and allows the user to navigate and change the fields of the form // Returns 0 if space is not pressed, non-0 if space is pressed @@ -19126,6 +19138,7 @@ bitmap_plot: { rts } // File Data +.segment Data // Default vallues for the palette DTV_PALETTE_DEFAULT: .byte 0, $f, $36, $be, $58, $db, $86, $ff, $29, $26, $3b, 5, 7, $df, $9a, $a print_hextab: .text "0123456789abcdef" @@ -20246,15 +20259,15 @@ Removing unreachable instruction jmp __b14 Removing unreachable instruction jmp __b7 Removing unreachable instruction jmp __b9 Succesful ASM optimization Pass5UnreachableCodeElimination -Fixing long branch [1466] bmi __b2 to bpl -Fixing long branch [1666] beq __b6 to bne -Fixing long branch [1670] beq __b7 to bne -Fixing long branch [1674] beq __b8 to bne -Fixing long branch [1678] beq __b9 to bne -Fixing long branch [1682] beq __b10 to bne -Fixing long branch [1686] beq __b11 to bne -Fixing long branch [1690] beq __b12 to bne -Fixing long branch [1694] beq __b13 to bne +Fixing long branch [1478] bmi __b2 to bpl +Fixing long branch [1678] beq __b6 to bne +Fixing long branch [1682] beq __b7 to bne +Fixing long branch [1686] beq __b8 to bne +Fixing long branch [1690] beq __b9 to bne +Fixing long branch [1694] beq __b10 to bne +Fixing long branch [1698] beq __b11 to bne +Fixing long branch [1702] beq __b12 to bne +Fixing long branch [1706] beq __b13 to bne FINAL SYMBOL TABLE const nomodify byte* CHARGEN = (byte*) 53248 @@ -21344,9 +21357,14 @@ Score: 10118930 // (J) https://www.c64-wiki.com/wiki/C64DTV_Programming_Guide // (H) http://dtvhacking.cbm8bit.com/dtv_wiki/images/d/d9/Dtv_registers_full.txt // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-gfxexplorer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_ECM = $40 .const VIC_BMM = $20 @@ -21520,6 +21538,7 @@ Score: 10118930 .label form_cursor_count = $11 // Current selected field in the form .label form_field_idx = 2 +.segment Code // main main: { // asm @@ -23073,9 +23092,11 @@ gfx_init_vic_bitmap: { // [317] phi from gfx_init_vic_bitmap::@4 to gfx_init_vic_bitmap::@1 [phi:gfx_init_vic_bitmap::@4->gfx_init_vic_bitmap::@1] // [317] phi gfx_init_vic_bitmap::l#2 = gfx_init_vic_bitmap::l#1 [phi:gfx_init_vic_bitmap::@4->gfx_init_vic_bitmap::@1#0] -- register_copy jmp __b1 + .segment Data lines_x: .byte 0, $ff, $ff, 0, 0, $80, $ff, $80, 0, $80 lines_y: .byte 0, 0, $c7, $c7, 0, 0, $64, $c7, $64, 0 } +.segment Code // gfx_init_plane_8bppchunky // Initialize 8BPP Chunky Bitmap (contains 8bpp pixels) gfx_init_plane_8bppchunky: { @@ -23621,8 +23642,10 @@ gfx_init_plane_horisontal2: { // } // [416] return rts + .segment Data row_bitmask: .byte 0, $55, $aa, $ff } +.segment Code // gfx_init_plane_vertical2 // Initialize Plane with Vertical Stripes every 2 pixels gfx_init_plane_vertical2: { @@ -24045,6 +24068,7 @@ render_preset_name: { // } // [482] return rts + .segment Data name_1: .text "Standard Charset " .byte 0 name_2: .text "Extended Color Charset " @@ -24068,6 +24092,7 @@ render_preset_name: { name_11: .text "8bpp Pixel Cell " .byte 0 } +.segment Code // form_control // Reads keyboard and allows the user to navigate and change the fields of the form // Returns 0 if space is not pressed, non-0 if space is pressed @@ -26272,6 +26297,7 @@ bitmap_plot: { rts } // File Data +.segment Data // Default vallues for the palette DTV_PALETTE_DEFAULT: .byte 0, $f, $36, $be, $58, $db, $86, $ff, $29, $26, $3b, 5, 7, $df, $9a, $a print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/c64dtv-gfxmodes.asm b/src/test/ref/c64dtv-gfxmodes.asm index 3604688db..539547a4c 100644 --- a/src/test/ref/c64dtv-gfxmodes.asm +++ b/src/test/ref/c64dtv-gfxmodes.asm @@ -4,9 +4,14 @@ // Sources // (J) https://www.c64-wiki.com/wiki/C64DTV_Programming_Guide // (H) http://dtvhacking.cbm8bit.com/dtv_wiki/images/d/d9/Dtv_registers_full.txt -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-gfxmodes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const VIC_ECM = $40 .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -100,6 +105,7 @@ .label DTV_GRAPHICS_VIC_BANK = $d03d .label print_char_cursor = 2 .label print_line_cursor = $11 +.segment Code main: { // asm sei @@ -980,9 +986,11 @@ mode_stdbitmap: { // for(byte l=0; lmode_stdbitmap::@7#0] -- register_copy jmp __b7 + .segment Data lines_x: .byte 0, $ff, $ff, 0, 0, $80, $ff, $80, 0, $80 lines_y: .byte 0, 0, $c7, $c7, 0, 0, $64, $c7, $64, 0 } +.segment Code // mode_hicolstdchar // High Color Standard Character Mode (LINEAR/CHUNK/COLDIS/ECM/MCM/BMM = 0, HICOL = 1) // Resolution: 320x200 @@ -15494,8 +15502,10 @@ mode_sixsfred2: { __breturn: // [444] return rts + .segment Data row_bitmask: .byte 0, $55, $aa, $ff } +.segment Code // mode_twoplanebitmap // Two Plane Bitmap - generated from the two DTV linear graphics plane counters // Two Plane Bitmap Mode (CHUNK/COLDIS/MCM = 0, ECM/BMM/HICOL/LINEAR = 1) @@ -16123,8 +16133,10 @@ mode_sixsfred: { __breturn: // [557] return rts + .segment Data row_bitmask: .byte 0, $55, $aa, $ff } +.segment Code // mode_8bpppixelcell //8bpp Pixel Cell Mode (BMM/COLDIS = 0, ECM/MCM/HICOL/LINEAR/CHUNK = 1) //Pixel Cell Adressing @@ -17855,6 +17867,7 @@ bitmap_plot: { rts } // File Data +.segment Data // Default vallues for the palette DTV_PALETTE_DEFAULT: .byte 0, $f, $36, $be, $58, $db, $86, $ff, $29, $26, $3b, 5, 7, $df, $9a, $a // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) @@ -18763,9 +18776,9 @@ Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [254] beq __b5 to bne -Fixing long branch [163] bne __b3 to beq -Fixing long branch [168] bne __b3 to beq +Fixing long branch [260] beq __b5 to bne +Fixing long branch [169] bne __b3 to beq +Fixing long branch [174] bne __b3 to beq FINAL SYMBOL TABLE const nomodify byte* BG_COLOR = (byte*) 53281 @@ -19761,9 +19774,14 @@ Score: 2307914 // (J) https://www.c64-wiki.com/wiki/C64DTV_Programming_Guide // (H) http://dtvhacking.cbm8bit.com/dtv_wiki/images/d/d9/Dtv_registers_full.txt // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="c64dtv-gfxmodes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_ECM = $40 .const VIC_BMM = $20 @@ -19858,6 +19876,7 @@ Score: 2307914 .label DTV_GRAPHICS_VIC_BANK = $d03d .label print_char_cursor = 2 .label print_line_cursor = $11 +.segment Code // main main: { // asm @@ -21240,9 +21259,11 @@ mode_stdbitmap: { // [278] phi from mode_stdbitmap::@11 to mode_stdbitmap::@7 [phi:mode_stdbitmap::@11->mode_stdbitmap::@7] // [278] phi mode_stdbitmap::l#2 = mode_stdbitmap::l#1 [phi:mode_stdbitmap::@11->mode_stdbitmap::@7#0] -- register_copy jmp __b7 + .segment Data lines_x: .byte 0, $ff, $ff, 0, 0, $80, $ff, $80, 0, $80 lines_y: .byte 0, 0, $c7, $c7, 0, 0, $64, $c7, $64, 0 } +.segment Code // mode_hicolstdchar // High Color Standard Character Mode (LINEAR/CHUNK/COLDIS/ECM/MCM/BMM = 0, HICOL = 1) // Resolution: 320x200 @@ -22125,8 +22146,10 @@ mode_sixsfred2: { // } // [444] return rts + .segment Data row_bitmask: .byte 0, $55, $aa, $ff } +.segment Code // mode_twoplanebitmap // Two Plane Bitmap - generated from the two DTV linear graphics plane counters // Two Plane Bitmap Mode (CHUNK/COLDIS/MCM = 0, ECM/BMM/HICOL/LINEAR = 1) @@ -22741,8 +22764,10 @@ mode_sixsfred: { // } // [557] return rts + .segment Data row_bitmask: .byte 0, $55, $aa, $ff } +.segment Code // mode_8bpppixelcell //8bpp Pixel Cell Mode (BMM/COLDIS = 0, ECM/MCM/HICOL/LINEAR/CHUNK = 1) //Pixel Cell Adressing @@ -24389,6 +24414,7 @@ bitmap_plot: { rts } // File Data +.segment Data // Default vallues for the palette DTV_PALETTE_DEFAULT: .byte 0, $f, $36, $be, $58, $db, $86, $ff, $29, $26, $3b, 5, 7, $df, $9a, $a // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) diff --git a/src/test/ref/call-parameter-autocast.asm b/src/test/ref/call-parameter-autocast.asm index bc4ac0c8a..906488294 100644 --- a/src/test/ref/call-parameter-autocast.asm +++ b/src/test/ref/call-parameter-autocast.asm @@ -1,8 +1,14 @@ // Test auto-casting of call-parameters -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="call-parameter-autocast.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .const w = $1234 // print(0x1234) diff --git a/src/test/ref/call-parameter-autocast.log b/src/test/ref/call-parameter-autocast.log index fff9c8453..79840fa3b 100644 --- a/src/test/ref/call-parameter-autocast.log +++ b/src/test/ref/call-parameter-autocast.log @@ -256,11 +256,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test auto-casting of call-parameters // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="call-parameter-autocast.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .const w = $1234 @@ -375,11 +381,17 @@ Score: 86 // File Comments // Test auto-casting of call-parameters // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="call-parameter-autocast.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .const w = $1234 diff --git a/src/test/ref/callconstparam.asm b/src/test/ref/callconstparam.asm index 37383dd14..050adfdc9 100644 --- a/src/test/ref/callconstparam.asm +++ b/src/test/ref/callconstparam.asm @@ -1,10 +1,16 @@ // Multiple calls with different (constant?) parameters should yield different values at runtime // Currently the same constant parameter is passed on every call. // Reason: Multiple versioned parameter constants x0#0, x0#1 are only output as a single constant in the ASM .const x0 = 0 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="callconstparam.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = 3 +.segment Code main: { // line(1,2) lda #<$400 diff --git a/src/test/ref/callconstparam.log b/src/test/ref/callconstparam.log index 9a8b3b55a..adde8b624 100644 --- a/src/test/ref/callconstparam.log +++ b/src/test/ref/callconstparam.log @@ -281,11 +281,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Currently the same constant parameter is passed on every call. // Reason: Multiple versioned parameter constants x0#0, x0#1 are only output as a single constant in the ASM .const x0 = 0 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="callconstparam.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = 3 +.segment Code // main main: { // [1] call line @@ -406,11 +412,17 @@ Score: 378 // Currently the same constant parameter is passed on every call. // Reason: Multiple versioned parameter constants x0#0, x0#1 are only output as a single constant in the ASM .const x0 = 0 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="callconstparam.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = 3 +.segment Code // main main: { // line(1,2) diff --git a/src/test/ref/cast-deref.asm b/src/test/ref/cast-deref.asm index 76bae2033..72c454f20 100644 --- a/src/test/ref/cast-deref.asm +++ b/src/test/ref/cast-deref.asm @@ -1,7 +1,13 @@ // Example of NOP-casting a dereferenced signed byte to a byte -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-deref.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 @@ -15,5 +21,6 @@ main: { bne __b1 // } rts + .segment Data sbs: .byte -1, -2, -3, -4 } diff --git a/src/test/ref/cast-deref.log b/src/test/ref/cast-deref.log index 20a64a46c..f5dffa305 100644 --- a/src/test/ref/cast-deref.log +++ b/src/test/ref/cast-deref.log @@ -114,10 +114,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Example of NOP-casting a dereferenced signed byte to a byte // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-deref.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -145,6 +151,7 @@ main: { __breturn: // [5] return rts + .segment Data sbs: .byte -1, -2, -3, -4 } // File Data @@ -179,10 +186,16 @@ Score: 186 // File Comments // Example of NOP-casting a dereferenced signed byte to a byte // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-deref.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -207,6 +220,7 @@ main: { // } // [5] return rts + .segment Data sbs: .byte -1, -2, -3, -4 } // File Data diff --git a/src/test/ref/cast-not-needed-2.asm b/src/test/ref/cast-not-needed-2.asm index 0eb2bf4c3..5949b9470 100644 --- a/src/test/ref/cast-not-needed-2.asm +++ b/src/test/ref/cast-not-needed-2.asm @@ -1,7 +1,13 @@ // Tests a cast that is not needed -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-not-needed-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label getScreen1_return = 2 .label spritePtr1_return = 2 @@ -25,4 +31,5 @@ main: { // } rts } +.segment Data screens: .word $400, $1400 diff --git a/src/test/ref/cast-not-needed-2.log b/src/test/ref/cast-not-needed-2.log index 6dc59d49e..33b271d14 100644 --- a/src/test/ref/cast-not-needed-2.log +++ b/src/test/ref/cast-not-needed-2.log @@ -195,10 +195,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests a cast that is not needed // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-not-needed-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label getScreen1_return = 2 @@ -236,6 +242,7 @@ main: { rts } // File Data +.segment Data screens: .word $400, $1400 ASSEMBLER OPTIMIZATIONS @@ -270,10 +277,16 @@ Score: 48 // File Comments // Tests a cast that is not needed // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-not-needed-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label getScreen1_return = 2 @@ -307,5 +320,6 @@ main: { rts } // File Data +.segment Data screens: .word $400, $1400 diff --git a/src/test/ref/cast-not-needed-3.asm b/src/test/ref/cast-not-needed-3.asm index dedeaf996..1446a6835 100644 --- a/src/test/ref/cast-not-needed-3.asm +++ b/src/test/ref/cast-not-needed-3.asm @@ -1,7 +1,13 @@ // Tests a cast that is not needed -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-not-needed-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label DSP = $400 .label spritePtr1___0 = 2 @@ -27,4 +33,5 @@ main: { // } rts } +.segment Data screens: .word $400, $1400 diff --git a/src/test/ref/cast-not-needed-3.log b/src/test/ref/cast-not-needed-3.log index 751ea18cb..9ea5bc873 100644 --- a/src/test/ref/cast-not-needed-3.log +++ b/src/test/ref/cast-not-needed-3.log @@ -195,10 +195,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests a cast that is not needed // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-not-needed-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label DSP = $400 @@ -238,6 +244,7 @@ main: { rts } // File Data +.segment Data screens: .word $400, $1400 ASSEMBLER OPTIMIZATIONS @@ -274,10 +281,16 @@ Score: 49 // File Comments // Tests a cast that is not needed // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-not-needed-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label DSP = $400 @@ -314,5 +327,6 @@ main: { rts } // File Data +.segment Data screens: .word $400, $1400 diff --git a/src/test/ref/cast-not-needed.asm b/src/test/ref/cast-not-needed.asm index 8b15c7fb7..29281d3da 100644 --- a/src/test/ref/cast-not-needed.asm +++ b/src/test/ref/cast-not-needed.asm @@ -1,9 +1,15 @@ // Tests a cast that is not needed -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-not-needed.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label sprite = $5000 .label SCREEN = $4400 +.segment Code main: { .label sprite_ptr = SCREEN+$378 // sprite_ptr[0] = (byte)(sprite/$40) diff --git a/src/test/ref/cast-not-needed.log b/src/test/ref/cast-not-needed.log index f47862a2e..d2e7adc1d 100644 --- a/src/test/ref/cast-not-needed.log +++ b/src/test/ref/cast-not-needed.log @@ -108,12 +108,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests a cast that is not needed // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-not-needed.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label sprite = $5000 .label SCREEN = $4400 +.segment Code // main main: { .label sprite_ptr = SCREEN+$378 @@ -149,12 +155,18 @@ Score: 12 // File Comments // Tests a cast that is not needed // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-not-needed.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label sprite = $5000 .label SCREEN = $4400 +.segment Code // main main: { .label sprite_ptr = SCREEN+$378 diff --git a/src/test/ref/cast-precedence-problem.asm b/src/test/ref/cast-precedence-problem.asm index 856bdd974..cfd126c9d 100644 --- a/src/test/ref/cast-precedence-problem.asm +++ b/src/test/ref/cast-precedence-problem.asm @@ -1,7 +1,13 @@ // Tests that casting inside constants in the output handles precedence between cast and + correctly - should generate the following KA-expression ($ff & sumw>>1)+1 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-precedence-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const min = $a .const max = $c8 diff --git a/src/test/ref/cast-precedence-problem.log b/src/test/ref/cast-precedence-problem.log index 146d0374f..1d7486f34 100644 --- a/src/test/ref/cast-precedence-problem.log +++ b/src/test/ref/cast-precedence-problem.log @@ -198,10 +198,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that casting inside constants in the output handles precedence between cast and + correctly - should generate the following KA-expression ($ff & sumw>>1)+1 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-precedence-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const min = $a @@ -276,10 +282,16 @@ Score: 46 // File Comments // Tests that casting inside constants in the output handles precedence between cast and + correctly - should generate the following KA-expression ($ff & sumw>>1)+1 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cast-precedence-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const min = $a diff --git a/src/test/ref/casting-negative.asm b/src/test/ref/casting-negative.asm index 999217275..7a5fd17f7 100644 --- a/src/test/ref/casting-negative.asm +++ b/src/test/ref/casting-negative.asm @@ -1,8 +1,13 @@ // Demonstrates problem with Casting of negative signed values // https://gitlab.com/camelot/kickc/-/issues/496 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="casting-negative.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c @@ -19,6 +24,7 @@ .label conio_line_text = $c // The current color cursor line start .label conio_line_color = $e +.segment Code __start: { // conio_cursor_x = 0 lda #0 @@ -242,9 +248,11 @@ test_casting: { jsr cputs // } rts + .segment Data s: .text @"\n" .byte 0 } +.segment Code // Print a signed integer using a specific format // printf_sint(signed word zp(3) value) printf_sint: { @@ -638,6 +646,7 @@ memset: { !: jmp __b2 } +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/casting-negative.log b/src/test/ref/casting-negative.log index 8be4ee302..685ff6cd4 100644 --- a/src/test/ref/casting-negative.log +++ b/src/test/ref/casting-negative.log @@ -3639,9 +3639,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Demonstrates problem with Casting of negative signed values // https://gitlab.com/camelot/kickc/-/issues/496 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="casting-negative.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -3659,6 +3664,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label conio_line_text = $c // The current color cursor line start .label conio_line_color = $e +.segment Code // __start __start: { jmp __init1 @@ -4001,9 +4007,11 @@ test_casting: { __breturn: // [58] return rts + .segment Data s: .text @"\n" .byte 0 } +.segment Code // printf_sint // Print a signed integer using a specific format // printf_sint(signed word zp(3) value) @@ -4619,6 +4627,7 @@ memset: { jmp __b2_from___b3 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits @@ -5002,9 +5011,14 @@ Score: 163872 // Demonstrates problem with Casting of negative signed values // https://gitlab.com/camelot/kickc/-/issues/496 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="casting-negative.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -5022,6 +5036,7 @@ Score: 163872 .label conio_line_text = $c // The current color cursor line start .label conio_line_color = $e +.segment Code // __start __start: { // __start::__init1 @@ -5351,9 +5366,11 @@ test_casting: { // } // [58] return rts + .segment Data s: .text @"\n" .byte 0 } +.segment Code // printf_sint // Print a signed integer using a specific format // printf_sint(signed word zp(3) value) @@ -5940,6 +5957,7 @@ memset: { jmp __b2 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/casting.asm b/src/test/ref/casting.asm index 94d3842b8..4ed340839 100644 --- a/src/test/ref/casting.asm +++ b/src/test/ref/casting.asm @@ -1,10 +1,16 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="casting.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 .label SCREEN2 = SCREEN+$28*3 .label SCREEN3 = SCREEN+$28*6 .label SCREEN4 = SCREEN+$28*9 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/casting.log b/src/test/ref/casting.log index e24571c8a..5f8a89af6 100644 --- a/src/test/ref/casting.log +++ b/src/test/ref/casting.log @@ -372,14 +372,20 @@ Uplifting [] best 804 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="casting.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label SCREEN2 = SCREEN+$28*3 .label SCREEN3 = SCREEN+$28*6 .label SCREEN4 = SCREEN+$28*9 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -529,14 +535,20 @@ Score: 648 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="casting.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label SCREEN2 = SCREEN+$28*3 .label SCREEN3 = SCREEN+$28*6 .label SCREEN4 = SCREEN+$28*9 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/chargen.asm b/src/test/ref/chargen.asm index 732ef4e0d..d313262be 100644 --- a/src/test/ref/chargen.asm +++ b/src/test/ref/chargen.asm @@ -1,9 +1,15 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="chargen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label PROCPORT = 1 .label CHARGEN = $d000 .label SCREEN = $400 +.segment Code main: { .label CHAR_A = CHARGEN+8 .label bits = 3 diff --git a/src/test/ref/chargen.log b/src/test/ref/chargen.log index 711dc538b..c066ff8ee 100644 --- a/src/test/ref/chargen.log +++ b/src/test/ref/chargen.log @@ -384,13 +384,19 @@ Uplifting [main] best 7220 combination zp[1]:2 [ main::y#2 main::y#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="chargen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label PROCPORT = 1 .label CHARGEN = $d000 .label SCREEN = $400 +.segment Code // main main: { .label CHAR_A = CHARGEN+8 @@ -578,13 +584,19 @@ Score: 5627 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="chargen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label PROCPORT = 1 .label CHARGEN = $d000 .label SCREEN = $400 +.segment Code // main main: { .label CHAR_A = CHARGEN+8 diff --git a/src/test/ref/chessboard.asm b/src/test/ref/chessboard.asm index 3507bab2b..3ca7c48b3 100644 --- a/src/test/ref/chessboard.asm +++ b/src/test/ref/chessboard.asm @@ -1,7 +1,13 @@ // Draws a chess board in the upper left corner of the screen -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="chessboard.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = 2 .label colors = 4 diff --git a/src/test/ref/chessboard.log b/src/test/ref/chessboard.log index a4d1c6995..a3ce6f194 100644 --- a/src/test/ref/chessboard.log +++ b/src/test/ref/chessboard.log @@ -296,10 +296,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Draws a chess board in the upper left corner of the screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="chessboard.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = 2 @@ -450,10 +456,16 @@ Score: 3861 // File Comments // Draws a chess board in the upper left corner of the screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="chessboard.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = 2 diff --git a/src/test/ref/chipset-test.asm b/src/test/ref/chipset-test.asm index ac9f92fb2..e1e3a775b 100644 --- a/src/test/ref/chipset-test.asm +++ b/src/test/ref/chipset-test.asm @@ -1,9 +1,15 @@ // Test ATARI chipset variations // Pointer to struct versus MAcro pointer to struct -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="chipset-test.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label PIA2 = $d300 +.segment Code main: { // PIA1.porta = 7 lda #7 diff --git a/src/test/ref/chipset-test.log b/src/test/ref/chipset-test.log index be94175e5..ca841e147 100644 --- a/src/test/ref/chipset-test.log +++ b/src/test/ref/chipset-test.log @@ -94,11 +94,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test ATARI chipset variations // Pointer to struct versus MAcro pointer to struct // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="chipset-test.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label PIA2 = $d300 +.segment Code // main main: { // [0] *((byte*)(struct __pia*) 54016) = 7 -- _deref_pbuc1=vbuc2 @@ -136,11 +142,17 @@ Score: 16 // Test ATARI chipset variations // Pointer to struct versus MAcro pointer to struct // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="chipset-test.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label PIA2 = $d300 +.segment Code // main main: { // PIA1.porta = 7 diff --git a/src/test/ref/cia-timer-cyclecount.asm b/src/test/ref/cia-timer-cyclecount.asm index 774a9735f..3eaf7a063 100644 --- a/src/test/ref/cia-timer-cyclecount.asm +++ b/src/test/ref/cia-timer-cyclecount.asm @@ -1,7 +1,12 @@ // Counting cycles using a CIA timer -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cia-timer-cyclecount.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -16,6 +21,7 @@ // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 +.segment Code main: { .label __1 = 9 .label cyclecount = 9 @@ -193,4 +199,5 @@ print_char_at: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/cia-timer-cyclecount.log b/src/test/ref/cia-timer-cyclecount.log index 094242e22..0215d71f9 100644 --- a/src/test/ref/cia-timer-cyclecount.log +++ b/src/test/ref/cia-timer-cyclecount.log @@ -647,9 +647,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Counting cycles using a CIA timer // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cia-timer-cyclecount.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 @@ -665,6 +670,7 @@ ASSEMBLER BEFORE OPTIMIZATION // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 +.segment Code // main main: { .label __1 = 9 @@ -925,6 +931,7 @@ print_char_at: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -1035,9 +1042,14 @@ Score: 869 // File Comments // Counting cycles using a CIA timer // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cia-timer-cyclecount.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 @@ -1053,6 +1065,7 @@ Score: 869 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 +.segment Code // main main: { .label __1 = 9 @@ -1308,5 +1321,6 @@ print_char_at: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/cia-timer-simple.asm b/src/test/ref/cia-timer-simple.asm index 65255ff2e..b389ad54b 100644 --- a/src/test/ref/cia-timer-simple.asm +++ b/src/test/ref/cia-timer-simple.asm @@ -1,7 +1,12 @@ // Setup and run a simple CIA-timer -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cia-timer-simple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -13,6 +18,7 @@ // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 +.segment Code main: { // clock_start() // Reset & start the CIA#2 timer A+B @@ -171,4 +177,5 @@ print_char_at: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/cia-timer-simple.log b/src/test/ref/cia-timer-simple.log index e58862100..eb1b1615d 100644 --- a/src/test/ref/cia-timer-simple.log +++ b/src/test/ref/cia-timer-simple.log @@ -619,9 +619,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Setup and run a simple CIA-timer // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cia-timer-simple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 @@ -634,6 +639,7 @@ ASSEMBLER BEFORE OPTIMIZATION // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 +.segment Code // main main: { // [1] call clock_start @@ -871,6 +877,7 @@ print_char_at: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -975,9 +982,14 @@ Score: 455 // File Comments // Setup and run a simple CIA-timer // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cia-timer-simple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 @@ -990,6 +1002,7 @@ Score: 455 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 +.segment Code // main main: { // clock_start() @@ -1222,5 +1235,6 @@ print_char_at: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/circlechars.asm b/src/test/ref/circlechars.asm index fb167712d..5e918d9ba 100644 --- a/src/test/ref/circlechars.asm +++ b/src/test/ref/circlechars.asm @@ -1,9 +1,14 @@ // Plot a r=9 circle on the screen using chars - count how many chars are used // C standard library string.h // Functions to manipulate C strings and arrays. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="circlechars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c @@ -21,6 +26,7 @@ .label conio_line_text = $f // The current color cursor line start .label conio_line_color = $11 +.segment Code __start: { // conio_cursor_x = 0 lda #0 @@ -188,9 +194,11 @@ main: { // for(signed char x=0;x<40;x++) inc.z x jmp __b3 + .segment Data s: .text " chars" .byte 0 } +.segment Code // Set the cursor to the specified position // gotoxy(byte register(X) y) gotoxy: { @@ -738,6 +746,7 @@ memcpy: { !: jmp __b1 } +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/circlechars.log b/src/test/ref/circlechars.log index fcd0caff2..bc1ef6535 100644 --- a/src/test/ref/circlechars.log +++ b/src/test/ref/circlechars.log @@ -4226,9 +4226,14 @@ ASSEMBLER BEFORE OPTIMIZATION // C standard library string.h // Functions to manipulate C strings and arrays. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="circlechars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -4247,6 +4252,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label conio_line_text = $f // The current color cursor line start .label conio_line_color = $11 +.segment Code // __start __start: { jmp __init1 @@ -4540,9 +4546,11 @@ main: { // [27] phi main::sc#10 = main::sc#1 [phi:main::@6->main::@3#1] -- register_copy // [27] phi main::x#2 = main::x#1 [phi:main::@6->main::@3#2] -- register_copy jmp __b3 + .segment Data s: .text " chars" .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -5390,6 +5398,7 @@ memcpy: { jmp __b1_from___b2 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits @@ -5865,9 +5874,14 @@ Score: 86187 // C standard library string.h // Functions to manipulate C strings and arrays. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="circlechars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -5886,6 +5900,7 @@ Score: 86187 .label conio_line_text = $f // The current color cursor line start .label conio_line_color = $11 +.segment Code // __start __start: { // __start::__init1 @@ -6157,9 +6172,11 @@ main: { // [27] phi main::sc#10 = main::sc#1 [phi:main::@6->main::@3#1] -- register_copy // [27] phi main::x#2 = main::x#1 [phi:main::@6->main::@3#2] -- register_copy jmp __b3 + .segment Data s: .text " chars" .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -6968,6 +6985,7 @@ memcpy: { jmp __b1 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/clobber-a-problem.asm b/src/test/ref/clobber-a-problem.asm index 456fcf854..3cc4ab697 100644 --- a/src/test/ref/clobber-a-problem.asm +++ b/src/test/ref/clobber-a-problem.asm @@ -1,12 +1,18 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="clobber-a-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const DARK_GREY = $b .const BLACK = 0 .label KERNEL_IRQ = $314 .label BORDER_COLOR = $d020 .label RASTER = $d012 .label irq_raster_next = 2 +.segment Code __start: { // irq_raster_next = 0 lda #0 diff --git a/src/test/ref/clobber-a-problem.log b/src/test/ref/clobber-a-problem.log index bf8a17c76..63847d387 100644 --- a/src/test/ref/clobber-a-problem.log +++ b/src/test/ref/clobber-a-problem.log @@ -207,9 +207,14 @@ Interrupt procedure irq clobbers AXcnzP ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="clobber-a-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const DARK_GREY = $b .const BLACK = 0 @@ -217,6 +222,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label BORDER_COLOR = $d020 .label RASTER = $d012 .label irq_raster_next = 2 +.segment Code // __start __start: { jmp __init1 @@ -352,9 +358,14 @@ Score: 249 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="clobber-a-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const DARK_GREY = $b .const BLACK = 0 @@ -362,6 +373,7 @@ Score: 249 .label BORDER_COLOR = $d020 .label RASTER = $d012 .label irq_raster_next = 2 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/coalesce-assignment.asm b/src/test/ref/coalesce-assignment.asm index 1227b4fcb..4a1f85f3d 100644 --- a/src/test/ref/coalesce-assignment.asm +++ b/src/test/ref/coalesce-assignment.asm @@ -1,7 +1,13 @@ // Tests variable coalescing over assignments -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="coalesce-assignment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label a = 2 diff --git a/src/test/ref/coalesce-assignment.log b/src/test/ref/coalesce-assignment.log index 50681bc14..04b1f5ac0 100644 --- a/src/test/ref/coalesce-assignment.log +++ b/src/test/ref/coalesce-assignment.log @@ -243,10 +243,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests variable coalescing over assignments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="coalesce-assignment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -366,10 +372,16 @@ Score: 2651 // File Comments // Tests variable coalescing over assignments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="coalesce-assignment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/code-after-return-1.asm b/src/test/ref/code-after-return-1.asm index 641461559..b33d68d8f 100644 --- a/src/test/ref/code-after-return-1.asm +++ b/src/test/ref/code-after-return-1.asm @@ -1,9 +1,15 @@ // Test code after return in main() -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="code-after-return-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const b = 0 .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = b lda #b diff --git a/src/test/ref/code-after-return-1.log b/src/test/ref/code-after-return-1.log index 1b0d99291..3980ae7e1 100644 --- a/src/test/ref/code-after-return-1.log +++ b/src/test/ref/code-after-return-1.log @@ -154,12 +154,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test code after return in main() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="code-after-return-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const b = 0 .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = b#14 -- _deref_pbuc1=vbuc2 @@ -193,12 +199,18 @@ Score: 12 // File Comments // Test code after return in main() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="code-after-return-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const b = 0 .label SCREEN = $400 +.segment Code // main main: { // SCREEN[0] = b diff --git a/src/test/ref/code-after-return.asm b/src/test/ref/code-after-return.asm index 05f103314..c6f29f312 100644 --- a/src/test/ref/code-after-return.asm +++ b/src/test/ref/code-after-return.asm @@ -1,8 +1,14 @@ // Test code after return in main() -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="code-after-return.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = 'a' lda #'a' diff --git a/src/test/ref/code-after-return.log b/src/test/ref/code-after-return.log index 5278b72cf..9c0c58f69 100644 --- a/src/test/ref/code-after-return.log +++ b/src/test/ref/code-after-return.log @@ -81,11 +81,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test code after return in main() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="code-after-return.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = 'a' -- _deref_pbuc1=vbuc2 @@ -117,11 +123,17 @@ Score: 12 // File Comments // Test code after return in main() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="code-after-return.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // SCREEN[0] = 'a' diff --git a/src/test/ref/comma-decl-2.asm b/src/test/ref/comma-decl-2.asm index d27518e7d..3eae9ed45 100644 --- a/src/test/ref/comma-decl-2.asm +++ b/src/test/ref/comma-decl-2.asm @@ -1,7 +1,13 @@ // Tests comma-separated declarations with different array-ness -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-decl-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const b = 0 .const d = 0 @@ -17,5 +23,6 @@ main: { sta SCREEN+2 // } rts + .segment Data c: .fill 3, 0 } diff --git a/src/test/ref/comma-decl-2.log b/src/test/ref/comma-decl-2.log index 65ea0a283..bcddd54e1 100644 --- a/src/test/ref/comma-decl-2.log +++ b/src/test/ref/comma-decl-2.log @@ -98,10 +98,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests comma-separated declarations with different array-ness // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-decl-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const b = 0 @@ -121,6 +127,7 @@ main: { __breturn: // [3] return rts + .segment Data c: .fill 3, 0 } // File Data @@ -146,10 +153,16 @@ Score: 26 // File Comments // Tests comma-separated declarations with different array-ness // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-decl-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const b = 0 @@ -171,6 +184,7 @@ main: { // } // [3] return rts + .segment Data c: .fill 3, 0 } // File Data diff --git a/src/test/ref/comma-decl-for.asm b/src/test/ref/comma-decl-for.asm index 3fe9a9a8b..2fd1b64aa 100644 --- a/src/test/ref/comma-decl-for.asm +++ b/src/test/ref/comma-decl-for.asm @@ -1,7 +1,13 @@ // Tests comma-separated declarations inside for() -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-decl-for.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 lda #'g' diff --git a/src/test/ref/comma-decl-for.log b/src/test/ref/comma-decl-for.log index 855694233..fc629e3a7 100644 --- a/src/test/ref/comma-decl-for.log +++ b/src/test/ref/comma-decl-for.log @@ -136,10 +136,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests comma-separated declarations inside for() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-decl-for.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -206,10 +212,16 @@ Score: 231 // File Comments // Tests comma-separated declarations inside for() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-decl-for.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/comma-decl.asm b/src/test/ref/comma-decl.asm index 35eababd8..296185fd0 100644 --- a/src/test/ref/comma-decl.asm +++ b/src/test/ref/comma-decl.asm @@ -1,7 +1,13 @@ // Tests comma-separated declarations -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-decl.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const b = 'c' .const c = b+1 diff --git a/src/test/ref/comma-decl.log b/src/test/ref/comma-decl.log index d28a470ed..e2b276b48 100644 --- a/src/test/ref/comma-decl.log +++ b/src/test/ref/comma-decl.log @@ -122,10 +122,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests comma-separated declarations // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-decl.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const b = 'c' @@ -172,10 +178,16 @@ Score: 24 // File Comments // Tests comma-separated declarations // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-decl.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const b = 'c' diff --git a/src/test/ref/comma-expr-1.asm b/src/test/ref/comma-expr-1.asm index 594314a5b..7fa83cec0 100644 --- a/src/test/ref/comma-expr-1.asm +++ b/src/test/ref/comma-expr-1.asm @@ -1,7 +1,13 @@ // Tests simple comma-expression (in parenthesis) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-expr-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const b = 3 .const c = b+1 diff --git a/src/test/ref/comma-expr-1.log b/src/test/ref/comma-expr-1.log index f271876d2..93d030a0b 100644 --- a/src/test/ref/comma-expr-1.log +++ b/src/test/ref/comma-expr-1.log @@ -91,10 +91,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests simple comma-expression (in parenthesis) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-expr-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const b = 3 @@ -132,10 +138,16 @@ Score: 12 // File Comments // Tests simple comma-expression (in parenthesis) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-expr-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const b = 3 diff --git a/src/test/ref/comma-expr-2.asm b/src/test/ref/comma-expr-2.asm index a5431c19c..42fa754ec 100644 --- a/src/test/ref/comma-expr-2.asm +++ b/src/test/ref/comma-expr-2.asm @@ -1,7 +1,13 @@ // Tests simple comma-expressions (without parenthesis) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-expr-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const c = 1+3 .label SCREEN = $400 diff --git a/src/test/ref/comma-expr-2.log b/src/test/ref/comma-expr-2.log index 747c2b5c6..bc443a6a1 100644 --- a/src/test/ref/comma-expr-2.log +++ b/src/test/ref/comma-expr-2.log @@ -94,10 +94,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests simple comma-expressions (without parenthesis) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-expr-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const c = 1+3 @@ -133,10 +139,16 @@ Score: 12 // File Comments // Tests simple comma-expressions (without parenthesis) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-expr-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const c = 1+3 diff --git a/src/test/ref/comma-expr-for.asm b/src/test/ref/comma-expr-for.asm index 7f1448de0..f804b8461 100644 --- a/src/test/ref/comma-expr-for.asm +++ b/src/test/ref/comma-expr-for.asm @@ -1,7 +1,13 @@ // Tests comma-expressions in for()-statement -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-expr-for.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 lda #'g' diff --git a/src/test/ref/comma-expr-for.log b/src/test/ref/comma-expr-for.log index 48b1db46e..e71127a4d 100644 --- a/src/test/ref/comma-expr-for.log +++ b/src/test/ref/comma-expr-for.log @@ -136,10 +136,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests comma-expressions in for()-statement // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-expr-for.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -206,10 +212,16 @@ Score: 231 // File Comments // Tests comma-expressions in for()-statement // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comma-expr-for.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/comparison-rewriting-pointer.asm b/src/test/ref/comparison-rewriting-pointer.asm index c8436fe58..118981453 100644 --- a/src/test/ref/comparison-rewriting-pointer.asm +++ b/src/test/ref/comparison-rewriting-pointer.asm @@ -1,7 +1,13 @@ // Test rewriting of constant comparisons for pointers -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comparison-rewriting-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 .label cols = $d800 diff --git a/src/test/ref/comparison-rewriting-pointer.log b/src/test/ref/comparison-rewriting-pointer.log index 30325bbea..7b49e7f49 100644 --- a/src/test/ref/comparison-rewriting-pointer.log +++ b/src/test/ref/comparison-rewriting-pointer.log @@ -175,10 +175,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test rewriting of constant comparisons for pointers // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comparison-rewriting-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -295,10 +301,16 @@ Score: 1096 // File Comments // Test rewriting of constant comparisons for pointers // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comparison-rewriting-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/comparison-rewriting.asm b/src/test/ref/comparison-rewriting.asm index b38aaf8ae..cec769d73 100644 --- a/src/test/ref/comparison-rewriting.asm +++ b/src/test/ref/comparison-rewriting.asm @@ -1,7 +1,13 @@ // Test rewriting of constant comparisons -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comparison-rewriting.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label sc = 2 @@ -109,6 +115,7 @@ main: { // for( byte i=0; header[i]!=0; i++) inx jmp __b2 + .segment Data header: .text " < <= == >= >" .byte 0 } diff --git a/src/test/ref/comparison-rewriting.log b/src/test/ref/comparison-rewriting.log index a04ec3ff2..264bff40c 100644 --- a/src/test/ref/comparison-rewriting.log +++ b/src/test/ref/comparison-rewriting.log @@ -480,10 +480,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test rewriting of constant comparisons // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comparison-rewriting.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -650,6 +656,7 @@ main: { __b2_from___b3: // [5] phi main::i#2 = main::i#1 [phi:main::@3->main::@2#0] -- register_copy jmp __b2 + .segment Data header: .text " < <= == >= >" .byte 0 } @@ -721,10 +728,16 @@ Score: 1991 // File Comments // Test rewriting of constant comparisons // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="comparison-rewriting.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -885,6 +898,7 @@ main: { // [5] phi from main::@3 to main::@2 [phi:main::@3->main::@2] // [5] phi main::i#2 = main::i#1 [phi:main::@3->main::@2#0] -- register_copy jmp __b2 + .segment Data header: .text " < <= == >= >" .byte 0 } diff --git a/src/test/ref/complex-conditional-problem.asm b/src/test/ref/complex-conditional-problem.asm index 3f73dda6c..883a4d19b 100644 --- a/src/test/ref/complex-conditional-problem.asm +++ b/src/test/ref/complex-conditional-problem.asm @@ -1,9 +1,15 @@ // Test to provoke Exception when using complex || condition -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="complex-conditional-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label RASTER = $d012 .label SCREEN = $400 +.segment Code main: { __b1: // key = *RASTER diff --git a/src/test/ref/complex-conditional-problem.log b/src/test/ref/complex-conditional-problem.log index 347ef24be..7c3bb2462 100644 --- a/src/test/ref/complex-conditional-problem.log +++ b/src/test/ref/complex-conditional-problem.log @@ -162,12 +162,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test to provoke Exception when using complex || condition // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="complex-conditional-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label RASTER = $d012 .label SCREEN = $400 +.segment Code // main main: { jmp __b1 @@ -244,12 +250,18 @@ Score: 220 // File Comments // Test to provoke Exception when using complex || condition // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="complex-conditional-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label RASTER = $d012 .label SCREEN = $400 +.segment Code // main main: { // main::@1 diff --git a/src/test/ref/complex/bubbles64/bubbles64.asm b/src/test/ref/complex/bubbles64/bubbles64.asm index f6d8c1810..28edc0e7b 100644 --- a/src/test/ref/complex/bubbles64/bubbles64.asm +++ b/src/test/ref/complex/bubbles64/bubbles64.asm @@ -1,9 +1,14 @@ // bubbles64 - Q&D C64 port of the bubbles demo from vbcc6502's NES exmaples // Coded by Lazycow // Source https://www.lemon64.com/forum/viewtopic.php?t=75283&start=15 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bubbles64.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const lfMC = $10 .const rfDrop = $fe .const maxSprites = $20 @@ -12,6 +17,7 @@ .const sprOff = $40 .const maxDrawObjects = $18 .const F = 3 +.segment Code // // main: { @@ -708,6 +714,7 @@ AddSprite: { sta cmRF,x rts } +.segment Data lcSprMapTab: .fill maxSprImages, 0 lcSprColTab: .fill maxC64Images, 0 cmIT: .fill maxSprites+1, 0 diff --git a/src/test/ref/complex/bubbles64/bubbles64.log b/src/test/ref/complex/bubbles64/bubbles64.log index 135074408..cf4bb8b7b 100644 --- a/src/test/ref/complex/bubbles64/bubbles64.log +++ b/src/test/ref/complex/bubbles64/bubbles64.log @@ -3425,9 +3425,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Coded by Lazycow // Source https://www.lemon64.com/forum/viewtopic.php?t=75283&start=15 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bubbles64.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const lfMC = $10 .const rfDrop = $fe @@ -3437,6 +3442,7 @@ ASSEMBLER BEFORE OPTIMIZATION .const sprOff = $40 .const maxDrawObjects = $18 .const F = 3 +.segment Code // main // // @@ -4410,6 +4416,7 @@ AddSprite: { jmp __breturn } // File Data +.segment Data lcSprMapTab: .fill maxSprImages, 0 lcSprColTab: .fill maxC64Images, 0 cmIT: .fill maxSprites+1, 0 @@ -4576,16 +4583,16 @@ Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination Removing unreachable instruction jmp __b36 Succesful ASM optimization Pass5UnreachableCodeElimination -Fixing long branch [65] bcc __b3 to bcs -Fixing long branch [72] bcc __b5 to bcs -Fixing long branch [81] bcc __b7 to bcs +Fixing long branch [71] bcc __b3 to bcs +Fixing long branch [78] bcc __b5 to bcs Fixing long branch [87] bcc __b7 to bcs -Fixing long branch [101] bcc __b9 to bcs +Fixing long branch [93] bcc __b7 to bcs Fixing long branch [107] bcc __b9 to bcs -Fixing long branch [145] bcc __b13 to bcs -Fixing long branch [166] bcc __b18 to bcs -Fixing long branch [260] bmi __b20 to bpl -Fixing long branch [284] bmi __b22 to bpl +Fixing long branch [113] bcc __b9 to bcs +Fixing long branch [151] bcc __b13 to bcs +Fixing long branch [172] bcc __b18 to bcs +Fixing long branch [266] bmi __b20 to bpl +Fixing long branch [290] bmi __b22 to bpl FINAL SYMBOL TABLE void AddSprite(byte AddSprite::sn) @@ -4726,9 +4733,14 @@ Score: 60932 // Coded by Lazycow // Source https://www.lemon64.com/forum/viewtopic.php?t=75283&start=15 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bubbles64.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const lfMC = $10 .const rfDrop = $fe @@ -4738,6 +4750,7 @@ Score: 60932 .const sprOff = $40 .const maxDrawObjects = $18 .const F = 3 +.segment Code // main // // @@ -5718,6 +5731,7 @@ AddSprite: { rts } // File Data +.segment Data lcSprMapTab: .fill maxSprImages, 0 lcSprColTab: .fill maxC64Images, 0 cmIT: .fill maxSprites+1, 0 diff --git a/src/test/ref/complex/clearscreen/clearscreen.asm b/src/test/ref/complex/clearscreen/clearscreen.asm index a36b1b674..8e794b704 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.asm +++ b/src/test/ref/complex/clearscreen/clearscreen.asm @@ -3,9 +3,14 @@ // Implementation of functions found int C stdlib.h / stdlib.c // C standard library string.h // Functions to manipulate C strings and arrays. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="clearscreen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f // Value that disables all CIA interrupts when stored to the CIA Interrupt registers @@ -87,6 +92,7 @@ .label SCREEN_COPY = $e // Screen containing bytes representing the distance to the center .label SCREEN_DIST = $10 +.segment Code __start: { // malloc(1000) lda #__start::__init1] @@ -7033,6 +7039,7 @@ atan2_16: { jmp __b3_from___b1 } // File Data +.segment Data // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i__start::__init1] @@ -9734,6 +9747,7 @@ atan2_16: { jmp __b3 } // File Data +.segment Data // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i(DEFAULT_SCREEN&$3fff)*4)|(>DYPPA_CHARSET)/4&$f // VICII->MEMORY = toD018(DEFAULT_SCREEN, DYPPA_CHARSET) @@ -54,6 +60,7 @@ memset: { !: jmp __b1 } +.segment Data // The DYPPA tables mapping the slopes, offsets and pixels to the right character in the charset // for(offset:0..7) for(slope:0..f) for(pixels: 0..f) glyph_id(offset,slope,pixels) .align $100 diff --git a/src/test/ref/complex/dyppa2/dyppa2.log b/src/test/ref/complex/dyppa2/dyppa2.log index 1cde55f81..6f9b80cda 100644 --- a/src/test/ref/complex/dyppa2/dyppa2.log +++ b/src/test/ref/complex/dyppa2/dyppa2.log @@ -419,15 +419,21 @@ ASSEMBLER BEFORE OPTIMIZATION // Chunky DYPP with arbitrary sine // First implemented as dyppa.asm in 2011 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="dyppa2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_MOS6569_VICII_MEMORY = $18 // The VIC-II MOS 6567/6569 .label VICII = $d000 // Default address of screen character matrix .label DEFAULT_SCREEN = $400 +.segment Code // main main: { .const toD0181_return = (>(DEFAULT_SCREEN&$3fff)*4)|(>DYPPA_CHARSET)/4&$f @@ -502,6 +508,7 @@ memset: { jmp __b1 } // File Data +.segment Data // The DYPPA tables mapping the slopes, offsets and pixels to the right character in the charset // for(offset:0..7) for(slope:0..f) for(pixels: 0..f) glyph_id(offset,slope,pixels) .align $100 @@ -573,15 +580,21 @@ Score: 617 // Chunky DYPP with arbitrary sine // First implemented as dyppa.asm in 2011 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="dyppa2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_MOS6569_VICII_MEMORY = $18 // The VIC-II MOS 6567/6569 .label VICII = $d000 // Default address of screen character matrix .label DEFAULT_SCREEN = $400 +.segment Code // main main: { .const toD0181_return = (>(DEFAULT_SCREEN&$3fff)*4)|(>DYPPA_CHARSET)/4&$f @@ -651,6 +664,7 @@ memset: { jmp __b1 } // File Data +.segment Data // The DYPPA tables mapping the slopes, offsets and pixels to the right character in the charset // for(offset:0..7) for(slope:0..f) for(pixels: 0..f) glyph_id(offset,slope,pixels) .align $100 diff --git a/src/test/ref/complex/includes/includes-1.asm b/src/test/ref/complex/includes/includes-1.asm index c7898dc5e..aea7c921f 100644 --- a/src/test/ref/complex/includes/includes-1.asm +++ b/src/test/ref/complex/includes/includes-1.asm @@ -1,8 +1,14 @@ // Includes a system library - ignores the local file with the same name -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="includes-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label __0 = 4 // strlen(STR) @@ -48,5 +54,6 @@ strlen: { !: jmp __b1 } +.segment Data STR: .text "camelot!" .byte 0 diff --git a/src/test/ref/complex/includes/includes-1.log b/src/test/ref/complex/includes/includes-1.log index a760a27e2..40dc3ed78 100644 --- a/src/test/ref/complex/includes/includes-1.log +++ b/src/test/ref/complex/includes/includes-1.log @@ -220,11 +220,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Includes a system library - ignores the local file with the same name // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="includes-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label __0 = 4 @@ -297,6 +303,7 @@ strlen: { jmp __b1 } // File Data +.segment Data STR: .text "camelot!" .byte 0 @@ -341,11 +348,17 @@ Score: 605 // File Comments // Includes a system library - ignores the local file with the same name // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="includes-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label __0 = 4 @@ -415,6 +428,7 @@ strlen: { jmp __b1 } // File Data +.segment Data STR: .text "camelot!" .byte 0 diff --git a/src/test/ref/complex/includes/includes-2.asm b/src/test/ref/complex/includes/includes-2.asm index d77198436..5af75428c 100644 --- a/src/test/ref/complex/includes/includes-2.asm +++ b/src/test/ref/complex/includes/includes-2.asm @@ -1,8 +1,14 @@ // Includes a local file with the same name as a system library -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="includes-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // strlen(STR) jsr strlen diff --git a/src/test/ref/complex/includes/includes-2.log b/src/test/ref/complex/includes/includes-2.log index 73790750c..494408b6b 100644 --- a/src/test/ref/complex/includes/includes-2.log +++ b/src/test/ref/complex/includes/includes-2.log @@ -150,11 +150,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Includes a local file with the same name as a system library // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="includes-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] call strlen @@ -212,11 +218,17 @@ Score: 24 // File Comments // Includes a local file with the same name as a system library // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="includes-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // strlen(STR) diff --git a/src/test/ref/complex/includes/includes-3.asm b/src/test/ref/complex/includes/includes-3.asm index 867e4f534..b94d8844a 100644 --- a/src/test/ref/complex/includes/includes-3.asm +++ b/src/test/ref/complex/includes/includes-3.asm @@ -1,8 +1,14 @@ // A file using a library -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="includes-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // SCREEN[i++] = value lda #'a' diff --git a/src/test/ref/complex/includes/includes-3.log b/src/test/ref/complex/includes/includes-3.log index 2f57bf76d..2852c1948 100644 --- a/src/test/ref/complex/includes/includes-3.log +++ b/src/test/ref/complex/includes/includes-3.log @@ -138,11 +138,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // A file using a library // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="includes-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = 'a' -- _deref_pbuc1=vbuc2 @@ -179,11 +185,17 @@ Score: 18 // File Comments // A file using a library // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="includes-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // SCREEN[i++] = value diff --git a/src/test/ref/complex/medusa/medusa.asm b/src/test/ref/complex/medusa/medusa.asm index 694dafbc3..3b6ac53cc 100644 --- a/src/test/ref/complex/medusa/medusa.asm +++ b/src/test/ref/complex/medusa/medusa.asm @@ -1,14 +1,20 @@ // Display MEDUSA PETSCII by Buzz_clik // https://csdb.dk/release/?id=178673 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="medusa.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // The colors of the C64 .const BLACK = 0 .label BG_COLOR = $d021 // Color Ram .label COLS = $d800 .label SCREEN = $400 +.segment Code main: { // *BG_COLOR = BLACK lda #BLACK @@ -83,6 +89,7 @@ memcpy: { !: jmp __b1 } +.segment Data MEDUSA_SCREEN: .var fileScreen = LoadBinary("medusas.prg", BF_C64FILE) .fill fileScreen.getSize(), fileScreen.get(i) diff --git a/src/test/ref/complex/medusa/medusa.log b/src/test/ref/complex/medusa/medusa.log index 68b3e4549..008df50aa 100644 --- a/src/test/ref/complex/medusa/medusa.log +++ b/src/test/ref/complex/medusa/medusa.log @@ -349,9 +349,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Display MEDUSA PETSCII by Buzz_clik // https://csdb.dk/release/?id=178673 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="medusa.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The colors of the C64 .const BLACK = 0 @@ -359,6 +364,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Color Ram .label COLS = $d800 .label SCREEN = $400 +.segment Code // main main: { // [0] *BG_COLOR = BLACK -- _deref_pbuc1=vbuc2 @@ -466,6 +472,7 @@ memcpy: { jmp __b1_from___b2 } // File Data +.segment Data MEDUSA_SCREEN: .var fileScreen = LoadBinary("medusas.prg", BF_C64FILE) .fill fileScreen.getSize(), fileScreen.get(i) @@ -536,9 +543,14 @@ Score: 797 // Display MEDUSA PETSCII by Buzz_clik // https://csdb.dk/release/?id=178673 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="medusa.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The colors of the C64 .const BLACK = 0 @@ -546,6 +558,7 @@ Score: 797 // Color Ram .label COLS = $d800 .label SCREEN = $400 +.segment Code // main main: { // *BG_COLOR = BLACK @@ -650,6 +663,7 @@ memcpy: { jmp __b1 } // File Data +.segment Data MEDUSA_SCREEN: .var fileScreen = LoadBinary("medusas.prg", BF_C64FILE) .fill fileScreen.getSize(), fileScreen.get(i) diff --git a/src/test/ref/complex/nes-balls/kickballs-2.asm b/src/test/ref/complex/nes-balls/kickballs-2.asm index 47744042b..289eea219 100644 --- a/src/test/ref/complex/nes-balls/kickballs-2.asm +++ b/src/test/ref/complex/nes-balls/kickballs-2.asm @@ -36,8 +36,6 @@ .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - .const OFFSET_STRUCT_RICOH_2A03_DMC_FREQ = $10 .const OFFSET_STRUCT_RICOH_2C02_PPUMASK = 1 .const OFFSET_STRUCT_RICOH_2C02_PPUSTATUS = 2 diff --git a/src/test/ref/complex/nes-balls/kickballs-2.log b/src/test/ref/complex/nes-balls/kickballs-2.log index 1cef1c99c..88ff9492a 100644 --- a/src/test/ref/complex/nes-balls/kickballs-2.log +++ b/src/test/ref/complex/nes-balls/kickballs-2.log @@ -2701,8 +2701,6 @@ ASSEMBLER BEFORE OPTIMIZATION .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - // Global Constants & labels .const OFFSET_STRUCT_RICOH_2A03_DMC_FREQ = $10 .const OFFSET_STRUCT_RICOH_2C02_PPUMASK = 1 @@ -3760,8 +3758,8 @@ Removing instruction jmp __b5 Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [212] bcc __b2 to bcs -Fixing long branch [236] bne __b25 to beq +Fixing long branch [210] bcc __b2 to bcs +Fixing long branch [234] bne __b25 to beq FINAL SYMBOL TABLE const struct RICOH_2A03* APU = (struct RICOH_2A03*) 16384 @@ -3976,8 +3974,6 @@ Score: 40981 .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - // Global Constants & labels .const OFFSET_STRUCT_RICOH_2A03_DMC_FREQ = $10 .const OFFSET_STRUCT_RICOH_2C02_PPUMASK = 1 diff --git a/src/test/ref/complex/nes-balls/kickballs-3.asm b/src/test/ref/complex/nes-balls/kickballs-3.asm index 17e0d6def..7195f6b20 100644 --- a/src/test/ref/complex/nes-balls/kickballs-3.asm +++ b/src/test/ref/complex/nes-balls/kickballs-3.asm @@ -26,8 +26,6 @@ .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - .const OFFSET_STRUCT_RICOH_2A03_DMC_FREQ = $10 .const OFFSET_STRUCT_RICOH_2C02_PPUMASK = 1 .const OFFSET_STRUCT_RICOH_2C02_PPUSTATUS = 2 diff --git a/src/test/ref/complex/nes-balls/kickballs-3.log b/src/test/ref/complex/nes-balls/kickballs-3.log index 2baa0483f..5a2366218 100644 --- a/src/test/ref/complex/nes-balls/kickballs-3.log +++ b/src/test/ref/complex/nes-balls/kickballs-3.log @@ -2830,8 +2830,6 @@ ASSEMBLER BEFORE OPTIMIZATION .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - // Global Constants & labels .const OFFSET_STRUCT_RICOH_2A03_DMC_FREQ = $10 .const OFFSET_STRUCT_RICOH_2C02_PPUMASK = 1 @@ -4049,8 +4047,8 @@ Removing instruction jmp __b5 Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [218] bcc __b2 to bcs -Fixing long branch [247] bne __b25 to beq +Fixing long branch [216] bcc __b2 to bcs +Fixing long branch [245] bne __b25 to beq FINAL SYMBOL TABLE const struct RICOH_2A03* APU = (struct RICOH_2A03*) 16384 @@ -4265,8 +4263,6 @@ Score: 64771 .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - // Global Constants & labels .const OFFSET_STRUCT_RICOH_2A03_DMC_FREQ = $10 .const OFFSET_STRUCT_RICOH_2C02_PPUMASK = 1 diff --git a/src/test/ref/complex/polygon/polygon.asm b/src/test/ref/complex/polygon/polygon.asm index ba4152456..7971d489a 100644 --- a/src/test/ref/complex/polygon/polygon.asm +++ b/src/test/ref/complex/polygon/polygon.asm @@ -4,9 +4,14 @@ // - Line-drawing polygon edges (fill-ready lines) // - Up-to-down EOR filling // - Double buffering -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="polygon.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // Timer Control - Start/stop timer (0:stop, 1: start) @@ -60,6 +65,7 @@ // Flag signalling that the canvas on screen needs to be updated. // Set to 1 by the renderer when a new canvas is ready for showing, and to 0 by the raster when the canvas is shown on screen. .label canvas_show_flag = $14 +.segment Code __start: { .const __init1_toD0181_return = (>(SCREEN&$3fff)*4)|(>CANVAS2)/4&$f // canvas_show_memory = toD018(SCREEN, CANVAS2) @@ -901,6 +907,7 @@ sgn_u8: { // } rts } +.segment Data // SIN/COS tables .align $100 SINTAB: diff --git a/src/test/ref/complex/polygon/polygon.log b/src/test/ref/complex/polygon/polygon.log index 1ebb77f36..b4610e56a 100644 --- a/src/test/ref/complex/polygon/polygon.log +++ b/src/test/ref/complex/polygon/polygon.log @@ -4573,9 +4573,14 @@ ASSEMBLER BEFORE OPTIMIZATION // - Up-to-down EOR filling // - Double buffering // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="polygon.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -4630,6 +4635,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Flag signalling that the canvas on screen needs to be updated. // Set to 1 by the renderer when a new canvas is ready for showing, and to 0 by the raster when the canvas is shown on screen. .label canvas_show_flag = $14 +.segment Code // __start __start: { .const __init1_toD0181_return = (>(SCREEN&$3fff)*4)|(>CANVAS2)/4&$f @@ -5904,6 +5910,7 @@ sgn_u8: { rts } // File Data +.segment Data // SIN/COS tables .align $100 SINTAB: @@ -6130,8 +6137,8 @@ Removing instruction __b2: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [186] bcc __b2 to bcs -Fixing long branch [468] bcc __b2 to bcs +Fixing long branch [192] bcc __b2 to bcs +Fixing long branch [474] bcc __b2 to bcs FINAL SYMBOL TABLE const nomodify byte BLACK = 0 @@ -6496,9 +6503,14 @@ Score: 105531 // - Up-to-down EOR filling // - Double buffering // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="polygon.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -6553,6 +6565,7 @@ Score: 105531 // Flag signalling that the canvas on screen needs to be updated. // Set to 1 by the renderer when a new canvas is ready for showing, and to 0 by the raster when the canvas is shown on screen. .label canvas_show_flag = $14 +.segment Code // __start __start: { .const __init1_toD0181_return = (>(SCREEN&$3fff)*4)|(>CANVAS2)/4&$f @@ -7803,6 +7816,7 @@ sgn_u8: { rts } // File Data +.segment Data // SIN/COS tables .align $100 SINTAB: diff --git a/src/test/ref/complex/prebob/grid-bobs.asm b/src/test/ref/complex/prebob/grid-bobs.asm index a51bca39d..574408bbd 100644 --- a/src/test/ref/complex/prebob/grid-bobs.asm +++ b/src/test/ref/complex/prebob/grid-bobs.asm @@ -2,9 +2,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="grid-bobs.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const KEY_SPACE = $3c // The number of different X-shifts .const BOB_SHIFTS_X = 4 @@ -41,6 +46,7 @@ // Pointer to the next clean-up to add // Prepare for next clean-up .label renderBobCleanupNext = $19 +.segment Code main: { .const origY = $a00 // Row and column offset vectors @@ -938,9 +944,11 @@ progress_inc: { sta (progress_cursor),y // } rts + .segment Data // Progress characters progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0 } +.segment Code // Read a single row of the keyboard matrix // The row ID (0-7) of the keyboard matrix row to read. See the C64 key matrix for row IDs. // Returns the keys pressed on the row as bits according to the C64 key matrix. @@ -956,6 +964,7 @@ keyboard_matrix_read: { // } rts } +.segment Data // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) diff --git a/src/test/ref/complex/prebob/grid-bobs.log b/src/test/ref/complex/prebob/grid-bobs.log index 4dd3c1174..f91221e64 100644 --- a/src/test/ref/complex/prebob/grid-bobs.log +++ b/src/test/ref/complex/prebob/grid-bobs.log @@ -4745,9 +4745,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="grid-bobs.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const KEY_SPACE = $3c // The number of different X-shifts @@ -4785,6 +4790,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Pointer to the next clean-up to add // Prepare for next clean-up .label renderBobCleanupNext = $19 +.segment Code // main main: { .const origY = $a00 @@ -6198,9 +6204,11 @@ progress_inc: { __breturn: // [227] return rts + .segment Data // Progress characters progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0 } +.segment Code // keyboard_matrix_read // Read a single row of the keyboard matrix // The row ID (0-7) of the keyboard matrix row to read. See the C64 key matrix for row IDs. @@ -6221,6 +6229,7 @@ keyboard_matrix_read: { rts } // File Data +.segment Data // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) @@ -6848,9 +6857,14 @@ Score: 3582839 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="grid-bobs.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const KEY_SPACE = $3c // The number of different X-shifts @@ -6888,6 +6902,7 @@ Score: 3582839 // Pointer to the next clean-up to add // Prepare for next clean-up .label renderBobCleanupNext = $19 +.segment Code // main main: { .const origY = $a00 @@ -8245,9 +8260,11 @@ progress_inc: { // } // [227] return rts + .segment Data // Progress characters progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0 } +.segment Code // keyboard_matrix_read // Read a single row of the keyboard matrix // The row ID (0-7) of the keyboard matrix row to read. See the C64 key matrix for row IDs. @@ -8269,6 +8286,7 @@ keyboard_matrix_read: { rts } // File Data +.segment Data // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) diff --git a/src/test/ref/complex/prebob/vogel-bobs.asm b/src/test/ref/complex/prebob/vogel-bobs.asm index 281091e7e..344a1d3c4 100644 --- a/src/test/ref/complex/prebob/vogel-bobs.asm +++ b/src/test/ref/complex/prebob/vogel-bobs.asm @@ -2,9 +2,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="vogel-bobs.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const KEY_SPACE = $3c // The number of different X-shifts .const BOB_SHIFTS_X = 4 @@ -42,6 +47,7 @@ // Pointer to the next clean-up to add // Prepare for next clean-up .label renderBobCleanupNext = $10 +.segment Code main: { .const vicSelectGfxBank1_toDd001_return = 3 .const vicSelectGfxBank2_toDd001_return = 3 @@ -917,9 +923,11 @@ progress_inc: { sta (progress_cursor),y // } rts + .segment Data // Progress characters progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0 } +.segment Code // Prepare for fast multiply with an unsigned char to a unsigned int result // mulf8u_prepare(byte register(A) a) mulf8u_prepare: { @@ -1016,6 +1024,7 @@ mulf8u_prepared: { // } rts } +.segment Data // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) diff --git a/src/test/ref/complex/prebob/vogel-bobs.log b/src/test/ref/complex/prebob/vogel-bobs.log index 4933586b8..d29b4c0c7 100644 --- a/src/test/ref/complex/prebob/vogel-bobs.log +++ b/src/test/ref/complex/prebob/vogel-bobs.log @@ -5274,9 +5274,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="vogel-bobs.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const KEY_SPACE = $3c // The number of different X-shifts @@ -5315,6 +5320,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Pointer to the next clean-up to add // Prepare for next clean-up .label renderBobCleanupNext = $10 +.segment Code // main main: { .const vicSelectGfxBank1_toDd001_return = 3 @@ -6719,9 +6725,11 @@ progress_inc: { __breturn: // [239] return rts + .segment Data // Progress characters progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0 } +.segment Code // mulf8u_prepare // Prepare for fast multiply with an unsigned char to a unsigned int result // mulf8u_prepare(byte register(A) a) @@ -6861,6 +6869,7 @@ mulf8u_prepared: { rts } // File Data +.segment Data // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) @@ -7563,9 +7572,14 @@ Score: 3510787 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="vogel-bobs.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const KEY_SPACE = $3c // The number of different X-shifts @@ -7604,6 +7618,7 @@ Score: 3510787 // Pointer to the next clean-up to add // Prepare for next clean-up .label renderBobCleanupNext = $10 +.segment Code // main main: { .const vicSelectGfxBank1_toDd001_return = 3 @@ -8950,9 +8965,11 @@ progress_inc: { // } // [239] return rts + .segment Data // Progress characters progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0 } +.segment Code // mulf8u_prepare // Prepare for fast multiply with an unsigned char to a unsigned int result // mulf8u_prepare(byte register(A) a) @@ -9090,6 +9107,7 @@ mulf8u_prepared: { rts } // File Data +.segment Data // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) diff --git a/src/test/ref/complex/prebob/vogel-sprites.asm b/src/test/ref/complex/prebob/vogel-sprites.asm index 62128825f..16590577a 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.asm +++ b/src/test/ref/complex/prebob/vogel-sprites.asm @@ -2,9 +2,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="vogel-sprites.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const VIC_RST8 = $80 .const VIC_DEN = $10 .const VIC_RSEL = 8 @@ -40,6 +45,7 @@ .label plex_sprite_msb = $15 // The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown. .label plex_free_next = $16 +.segment Code __start: { // PLEX_SCREEN_PTR = 0x400+0x3f8 lda #<$400+$3f8 @@ -789,6 +795,7 @@ mulf8u_prepared: { // } rts } +.segment Data // The x-positions of the multiplexer sprites (0x000-0x1ff) PLEX_XPOS: .fill 2*PLEX_COUNT, 0 // The y-positions of the multiplexer sprites. diff --git a/src/test/ref/complex/prebob/vogel-sprites.log b/src/test/ref/complex/prebob/vogel-sprites.log index 32ea70407..9b986ea20 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.log +++ b/src/test/ref/complex/prebob/vogel-sprites.log @@ -3387,9 +3387,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="vogel-sprites.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const VIC_RST8 = $80 .const VIC_DEN = $10 @@ -3426,6 +3431,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label plex_sprite_msb = $15 // The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown. .label plex_free_next = $16 +.segment Code // __start __start: { jmp __init1 @@ -4606,6 +4612,7 @@ mulf8u_prepared: { rts } // File Data +.segment Data // The x-positions of the multiplexer sprites (0x000-0x1ff) PLEX_XPOS: .fill 2*PLEX_COUNT, 0 // The y-positions of the multiplexer sprites. @@ -5198,9 +5205,14 @@ Score: 74811 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="vogel-sprites.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const VIC_RST8 = $80 .const VIC_DEN = $10 @@ -5237,6 +5249,7 @@ Score: 74811 .label plex_sprite_msb = $15 // The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown. .label plex_free_next = $16 +.segment Code // __start __start: { // __start::__init1 @@ -6378,6 +6391,7 @@ mulf8u_prepared: { rts } // File Data +.segment Data // The x-positions of the multiplexer sprites (0x000-0x1ff) PLEX_XPOS: .fill 2*PLEX_COUNT, 0 // The y-positions of the multiplexer sprites. diff --git a/src/test/ref/complex/splines/truetype-splines.asm b/src/test/ref/complex/splines/truetype-splines.asm index e8c759f92..80438b87f 100644 --- a/src/test/ref/complex/splines/truetype-splines.asm +++ b/src/test/ref/complex/splines/truetype-splines.asm @@ -1,7 +1,12 @@ // Show a few simple splines using the splines library -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="truetype-splines.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const VIC_BMM = $20 .const VIC_DEN = $10 .const VIC_RSEL = 8 @@ -22,6 +27,7 @@ .label BITMAP_SCREEN = $5c00 .label BITMAP_GRAPHICS = $6000 .label COS = SIN+$40 +.segment Code main: { .const vicSelectGfxBank1_toDd001_return = 3^(>BITMAP_SCREEN)/$40 .const toD0181_return = (>(BITMAP_SCREEN&$3fff)*4)|(>BITMAP_GRAPHICS)/4&$f @@ -1527,6 +1533,7 @@ mulf16u: { // } rts } +.segment Data // Array filled with spline segment points by splinePlot_8() SPLINE_8SEG: .fill 4*9, 0 // Tables for the plotter - initialized by calling bitmap_init(); diff --git a/src/test/ref/complex/splines/truetype-splines.log b/src/test/ref/complex/splines/truetype-splines.log index 35c008c67..883f32a84 100644 --- a/src/test/ref/complex/splines/truetype-splines.log +++ b/src/test/ref/complex/splines/truetype-splines.log @@ -5750,9 +5750,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Show a few simple splines using the splines library // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="truetype-splines.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -5774,6 +5779,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label BITMAP_SCREEN = $5c00 .label BITMAP_GRAPHICS = $6000 .label COS = SIN+$40 +.segment Code // main main: { .const vicSelectGfxBank1_toDd001_return = 3^(>BITMAP_SCREEN)/$40 @@ -7888,6 +7894,7 @@ mulf16u: { rts } // File Data +.segment Data // Array filled with spline segment points by splinePlot_8() SPLINE_8SEG: .fill 4*9, 0 // Tables for the plotter - initialized by calling bitmap_init(); @@ -8242,8 +8249,8 @@ Removing instruction __b2: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [971] bne __b1 to beq -Fixing long branch [587] beq __b4 to bne +Fixing long branch [977] bne __b1 to beq +Fixing long branch [593] beq __b4 to bne FINAL SYMBOL TABLE const nomodify byte* BITMAP_GRAPHICS = (byte*) 24576 @@ -8728,9 +8735,14 @@ Score: 668848 // File Comments // Show a few simple splines using the splines library // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="truetype-splines.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -8752,6 +8764,7 @@ Score: 668848 .label BITMAP_SCREEN = $5c00 .label BITMAP_GRAPHICS = $6000 .label COS = SIN+$40 +.segment Code // main main: { .const vicSelectGfxBank1_toDd001_return = 3^(>BITMAP_SCREEN)/$40 @@ -10831,6 +10844,7 @@ mulf16u: { rts } // File Data +.segment Data // Array filled with spline segment points by splinePlot_8() SPLINE_8SEG: .fill 4*9, 0 // Tables for the plotter - initialized by calling bitmap_init(); diff --git a/src/test/ref/complex/spritescroller/spritescroller.asm b/src/test/ref/complex/spritescroller/spritescroller.asm index e1e5d5772..f0310678d 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.asm +++ b/src/test/ref/complex/spritescroller/spritescroller.asm @@ -2,9 +2,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="spritescroller.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // Bits for the VICII IRQ Status/Enable Registers @@ -62,6 +67,7 @@ .label y_sin_idx = 9 // X-movement index .label x_movement_idx = $a +.segment Code __start: { // PLEX_SCREEN_PTR = 0x400+0x3f8 lda #<$400+$3f8 @@ -827,6 +833,7 @@ plexSort: { // } rts } +.segment Data // The x-positions of the multiplexer sprites (0x000-0x1ff) PLEX_XPOS: .fill 2*PLEX_COUNT, 0 // The y-positions of the multiplexer sprites. diff --git a/src/test/ref/complex/spritescroller/spritescroller.log b/src/test/ref/complex/spritescroller/spritescroller.log index 4675d3693..2fa250b34 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.log +++ b/src/test/ref/complex/spritescroller/spritescroller.log @@ -3765,9 +3765,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="spritescroller.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -3826,6 +3831,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label y_sin_idx = 9 // X-movement index .label x_movement_idx = $a +.segment Code // __start __start: { jmp __init1 @@ -5021,6 +5027,7 @@ plexSort: { rts } // File Data +.segment Data // The x-positions of the multiplexer sprites (0x000-0x1ff) PLEX_XPOS: .fill 2*PLEX_COUNT, 0 // The y-positions of the multiplexer sprites. @@ -5280,7 +5287,7 @@ Removing instruction lda #8 Removing instruction ldx.z m Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [414] bne __b1 to beq +Fixing long branch [420] bne __b1 to beq FINAL SYMBOL TABLE const nomodify byte* CHARGEN = (byte*) 53248 @@ -5569,9 +5576,14 @@ Score: 159175 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="spritescroller.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -5630,6 +5642,7 @@ Score: 159175 .label y_sin_idx = 9 // X-movement index .label x_movement_idx = $a +.segment Code // __start __start: { // __start::__init1 @@ -6785,6 +6798,7 @@ plexSort: { rts } // File Data +.segment Data // The x-positions of the multiplexer sprites (0x000-0x1ff) PLEX_XPOS: .fill 2*PLEX_COUNT, 0 // The y-positions of the multiplexer sprites. diff --git a/src/test/ref/complex/tetris/test-sprites.asm b/src/test/ref/complex/tetris/test-sprites.asm index 2330c8167..fcee9137a 100644 --- a/src/test/ref/complex/tetris/test-sprites.asm +++ b/src/test/ref/complex/tetris/test-sprites.asm @@ -3,9 +3,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-sprites.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The offset of the sprite pointers from the screen start address @@ -69,6 +74,7 @@ // Counting the 10 IRQs .label irq_cnt = $a .label sin_idx = 4 +.segment Code __start: { .const __init1_toSpritePtr1_return = $ff&PLAYFIELD_SPRITES/$40 // render_screen_showing = 0 @@ -404,6 +410,7 @@ loop: { inc.z sin_idx jmp __b2 } +.segment Data SIN: .var AMPL = 200-21 .for(var i=0; i<256; i++) { diff --git a/src/test/ref/complex/tetris/test-sprites.log b/src/test/ref/complex/tetris/test-sprites.log index 6e131cdb6..69b22c856 100644 --- a/src/test/ref/complex/tetris/test-sprites.log +++ b/src/test/ref/complex/tetris/test-sprites.log @@ -1675,9 +1675,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-sprites.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -1742,6 +1747,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Counting the 10 IRQs .label irq_cnt = $a .label sin_idx = 4 +.segment Code // __start __start: { .const __init1_toSpritePtr1_return = $ff&PLAYFIELD_SPRITES/$40 @@ -2249,6 +2255,7 @@ loop: { jmp __b1 } // File Data +.segment Data SIN: .var AMPL = 200-21 .for(var i=0; i<256; i++) { @@ -2545,9 +2552,14 @@ Score: 6632 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-sprites.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -2612,6 +2624,7 @@ Score: 6632 // Counting the 10 IRQs .label irq_cnt = $a .label sin_idx = 4 +.segment Code // __start __start: { .const __init1_toSpritePtr1_return = $ff&PLAYFIELD_SPRITES/$40 @@ -3123,6 +3136,7 @@ loop: { jmp __b2 } // File Data +.segment Data SIN: .var AMPL = 200-21 .for(var i=0; i<256; i++) { diff --git a/src/test/ref/complex/tetris/tetris.asm b/src/test/ref/complex/tetris/tetris.asm index e81801af9..87bdd8ba7 100644 --- a/src/test/ref/complex/tetris/tetris.asm +++ b/src/test/ref/complex/tetris/tetris.asm @@ -1,9 +1,14 @@ // Tetris Game for the Commodore 64 // The tetris game tries to match NES tetris gameplay pretty closely // Source: https://meatfighter.com/nintendotetrisai/ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="tetris.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The offset of the sprite pointers from the screen start address @@ -165,6 +170,7 @@ .label current_piece_gfx_1 = 7 // The char of the current piece .label current_piece_char_1 = 9 +.segment Code __start: { .const __init1_toSpritePtr1_return = $ff&PLAYFIELD_SPRITES/$40 // render_screen_showing = 0 @@ -2031,6 +2037,7 @@ play_increase_level: { // } rts } +.segment Data // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) diff --git a/src/test/ref/complex/tetris/tetris.log b/src/test/ref/complex/tetris/tetris.log index 28805ffd6..d9b1919bc 100644 --- a/src/test/ref/complex/tetris/tetris.log +++ b/src/test/ref/complex/tetris/tetris.log @@ -12542,9 +12542,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The tetris game tries to match NES tetris gameplay pretty closely // Source: https://meatfighter.com/nintendotetrisai/ // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="tetris.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -12707,6 +12712,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label current_piece_gfx_1 = 7 // The char of the current piece .label current_piece_char_1 = 9 +.segment Code // __start __start: { .const __init1_toSpritePtr1_return = $ff&PLAYFIELD_SPRITES/$40 @@ -15982,6 +15988,7 @@ play_increase_level: { rts } // File Data +.segment Data // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) @@ -17595,9 +17602,14 @@ Score: 3343892 // The tetris game tries to match NES tetris gameplay pretty closely // Source: https://meatfighter.com/nintendotetrisai/ // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="tetris.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -17760,6 +17772,7 @@ Score: 3343892 .label current_piece_gfx_1 = 7 // The char of the current piece .label current_piece_char_1 = 9 +.segment Code // __start __start: { .const __init1_toSpritePtr1_return = $ff&PLAYFIELD_SPRITES/$40 @@ -20855,6 +20868,7 @@ play_increase_level: { rts } // File Data +.segment Data // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) diff --git a/src/test/ref/complex/xmega65/xmega65logo.asm b/src/test/ref/complex/xmega65/xmega65logo.asm index b4ce9806f..2fd75534b 100644 --- a/src/test/ref/complex/xmega65/xmega65logo.asm +++ b/src/test/ref/complex/xmega65/xmega65logo.asm @@ -1,12 +1,18 @@ // Import an XMega65 8bit-per-color logo // Fill the palette values into -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="xmega65logo.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Create pointers to the palette RGBs in the logo (assumes dimensions are 128x128) .label LOGO256_RED = LOGO256+$80*$80 .label LOGO256_GREEN = LOGO256_RED+$100 .label LOGO256_BLUE = LOGO256_GREEN+$100 +.segment Code main: { .label SCREEN = $400 ldx #0 @@ -27,6 +33,7 @@ main: { // } rts } +.segment Data // Import a 128x128 8bit-per-color logo using inline KickAsm LOGO256: #import "xmega65graphics.asm" diff --git a/src/test/ref/complex/xmega65/xmega65logo.log b/src/test/ref/complex/xmega65/xmega65logo.log index 7f91a2d1b..234d8973b 100644 --- a/src/test/ref/complex/xmega65/xmega65logo.log +++ b/src/test/ref/complex/xmega65/xmega65logo.log @@ -220,14 +220,20 @@ ASSEMBLER BEFORE OPTIMIZATION // Import an XMega65 8bit-per-color logo // Fill the palette values into // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="xmega65logo.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Create pointers to the palette RGBs in the logo (assumes dimensions are 128x128) .label LOGO256_RED = LOGO256+$80*$80 .label LOGO256_GREEN = LOGO256_RED+$100 .label LOGO256_BLUE = LOGO256_GREEN+$100 +.segment Code // main main: { .label SCREEN = $400 @@ -263,6 +269,7 @@ main: { rts } // File Data +.segment Data // Import a 128x128 8bit-per-color logo using inline KickAsm LOGO256: #import "xmega65graphics.asm" @@ -327,14 +334,20 @@ Score: 376 // Import an XMega65 8bit-per-color logo // Fill the palette values into // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="xmega65logo.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Create pointers to the palette RGBs in the logo (assumes dimensions are 128x128) .label LOGO256_RED = LOGO256+$80*$80 .label LOGO256_GREEN = LOGO256_RED+$100 .label LOGO256_BLUE = LOGO256_GREEN+$100 +.segment Code // main main: { .label SCREEN = $400 @@ -369,6 +382,7 @@ main: { rts } // File Data +.segment Data // Import a 128x128 8bit-per-color logo using inline KickAsm LOGO256: #import "xmega65graphics.asm" diff --git a/src/test/ref/complex/xy-scroller/xy-scroller.asm b/src/test/ref/complex/xy-scroller/xy-scroller.asm index 4d6174e01..fd5b9c61a 100644 --- a/src/test/ref/complex/xy-scroller/xy-scroller.asm +++ b/src/test/ref/complex/xy-scroller/xy-scroller.asm @@ -1,8 +1,13 @@ // A full-screen x/y-scroller // World space is a 16-bit signed coordinate system [-32768, 32767] x [-32768, 32767] -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="xy-scroller.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // The colors of the C64 .const BLACK = 0 .const WHITE = 1 @@ -35,6 +40,7 @@ .label x_pos_coarse = $16 .label y_pos_fine = $1b .label y_pos_coarse = $18 +.segment Code main: { .const toD0181_return = (>(MAIN_SCREEN0&$3fff)*4)|(>MAIN_CHARSET)/4&$f .const toD0182_return = (>(MAIN_SCREEN1&$3fff)*4)|(>MAIN_CHARSET)/4&$f @@ -742,6 +748,7 @@ petscii_ptr: { // } rts } +.segment Data // Sine table [-399,399] SINTAB: .fillword SINSIZE, 399*sin(i*2*PI/SINSIZE) diff --git a/src/test/ref/complex/xy-scroller/xy-scroller.log b/src/test/ref/complex/xy-scroller/xy-scroller.log index 8a48753f0..216b5d756 100644 --- a/src/test/ref/complex/xy-scroller/xy-scroller.log +++ b/src/test/ref/complex/xy-scroller/xy-scroller.log @@ -4085,9 +4085,14 @@ ASSEMBLER BEFORE OPTIMIZATION // A full-screen x/y-scroller // World space is a 16-bit signed coordinate system [-32768, 32767] x [-32768, 32767] // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="xy-scroller.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The colors of the C64 .const BLACK = 0 @@ -4121,6 +4126,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label x_pos_coarse = $16 .label y_pos_fine = $1b .label y_pos_coarse = $18 +.segment Code // main main: { .const toD0181_return = (>(MAIN_SCREEN0&$3fff)*4)|(>MAIN_CHARSET)/4&$f @@ -5090,6 +5096,7 @@ petscii_ptr: { rts } // File Data +.segment Data // Sine table [-399,399] SINTAB: .fillword SINSIZE, 399*sin(i*2*PI/SINSIZE) @@ -5239,10 +5246,10 @@ Relabelling long label __b2_from___b25 to __b17 Relabelling long label __b2_from___b32 to __b18 Relabelling long label __b21_from___b2 to __b19 Succesful ASM optimization Pass5RelabelLongLabels -Fixing long branch [125] beq __b19 to bne -Fixing long branch [174] beq __b8 to bne -Fixing long branch [200] bcc __b11 to bcs -Fixing long branch [209] beq __b13 to bne +Fixing long branch [131] beq __b19 to bne +Fixing long branch [180] beq __b8 to bne +Fixing long branch [206] bcc __b11 to bcs +Fixing long branch [215] beq __b13 to bne FINAL SYMBOL TABLE const nomodify byte BLACK = 0 @@ -5465,9 +5472,14 @@ Score: 22699 // A full-screen x/y-scroller // World space is a 16-bit signed coordinate system [-32768, 32767] x [-32768, 32767] // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="xy-scroller.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The colors of the C64 .const BLACK = 0 @@ -5501,6 +5513,7 @@ Score: 22699 .label x_pos_coarse = $16 .label y_pos_fine = $1b .label y_pos_coarse = $18 +.segment Code // main main: { .const toD0181_return = (>(MAIN_SCREEN0&$3fff)*4)|(>MAIN_CHARSET)/4&$f @@ -6463,6 +6476,7 @@ petscii_ptr: { rts } // File Data +.segment Data // Sine table [-399,399] SINTAB: .fillword SINSIZE, 399*sin(i*2*PI/SINSIZE) diff --git a/src/test/ref/condition-integer-0.asm b/src/test/ref/condition-integer-0.asm index e085878a6..8131b6157 100644 --- a/src/test/ref/condition-integer-0.asm +++ b/src/test/ref/condition-integer-0.asm @@ -1,9 +1,15 @@ // Tests using integer conditions in if() // This should produce '+ ++ ++' at the top of the screen -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label i1 = 2 // SCREEN[idx++] = '+' diff --git a/src/test/ref/condition-integer-0.log b/src/test/ref/condition-integer-0.log index 0a6865c71..c88a9aa15 100644 --- a/src/test/ref/condition-integer-0.log +++ b/src/test/ref/condition-integer-0.log @@ -379,11 +379,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests using integer conditions in if() // This should produce '+ ++ ++' at the top of the screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label i1 = 2 @@ -571,11 +577,17 @@ Score: 797 // Tests using integer conditions in if() // This should produce '+ ++ ++' at the top of the screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label i1 = 2 diff --git a/src/test/ref/condition-integer-1.asm b/src/test/ref/condition-integer-1.asm index 369ab8b34..d8c858a59 100644 --- a/src/test/ref/condition-integer-1.asm +++ b/src/test/ref/condition-integer-1.asm @@ -1,9 +1,15 @@ // Tests using integer conditions in if() // This should produce '0 0 0' at the top of the screen -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label i1 = 2 // SCREEN[idx++] = '0' diff --git a/src/test/ref/condition-integer-1.log b/src/test/ref/condition-integer-1.log index 3dfcb64ee..fa4f734a2 100644 --- a/src/test/ref/condition-integer-1.log +++ b/src/test/ref/condition-integer-1.log @@ -381,11 +381,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests using integer conditions in if() // This should produce '0 0 0' at the top of the screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label i1 = 2 @@ -573,11 +579,17 @@ Score: 797 // Tests using integer conditions in if() // This should produce '0 0 0' at the top of the screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label i1 = 2 diff --git a/src/test/ref/condition-integer-2.asm b/src/test/ref/condition-integer-2.asm index 0682d2499..aad6b0979 100644 --- a/src/test/ref/condition-integer-2.asm +++ b/src/test/ref/condition-integer-2.asm @@ -1,9 +1,15 @@ // Tests using integer conditions in while() / for() / do..while // This should produce 'ba ba@ ba@' at the top of the screen -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // while() .label j = 2 diff --git a/src/test/ref/condition-integer-2.log b/src/test/ref/condition-integer-2.log index 5a4e4d965..6792c3c95 100644 --- a/src/test/ref/condition-integer-2.log +++ b/src/test/ref/condition-integer-2.log @@ -331,11 +331,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests using integer conditions in while() / for() / do..while // This should produce 'ba ba@ ba@' at the top of the screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // while() @@ -512,11 +518,17 @@ Score: 843 // Tests using integer conditions in while() / for() / do..while // This should produce 'ba ba@ ba@' at the top of the screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // while() diff --git a/src/test/ref/condition-integer-3.asm b/src/test/ref/condition-integer-3.asm index 0ca731bb5..5092aa522 100644 --- a/src/test/ref/condition-integer-3.asm +++ b/src/test/ref/condition-integer-3.asm @@ -1,9 +1,15 @@ // Tests using integer conditions in ternary operator // This should produce '++0++' at the top of the screen -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 ldy #-2 diff --git a/src/test/ref/condition-integer-3.log b/src/test/ref/condition-integer-3.log index e3809aed9..6eb25f1be 100644 --- a/src/test/ref/condition-integer-3.log +++ b/src/test/ref/condition-integer-3.log @@ -196,11 +196,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests using integer conditions in ternary operator // This should produce '++0++' at the top of the screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -297,11 +303,17 @@ Score: 296 // Tests using integer conditions in ternary operator // This should produce '++0++' at the top of the screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/condition-integer-4.asm b/src/test/ref/condition-integer-4.asm index 3825543ee..22443d34e 100644 --- a/src/test/ref/condition-integer-4.asm +++ b/src/test/ref/condition-integer-4.asm @@ -1,9 +1,15 @@ // Tests using integer conditions in && and || operator // This should produce '01010101', '00110011', '00010001', '01110111' at the top of the screen -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label __4 = 2 .label __5 = 3 diff --git a/src/test/ref/condition-integer-4.log b/src/test/ref/condition-integer-4.log index 52814f4f5..cf7718b41 100644 --- a/src/test/ref/condition-integer-4.log +++ b/src/test/ref/condition-integer-4.log @@ -388,11 +388,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests using integer conditions in && and || operator // This should produce '01010101', '00110011', '00010001', '01110111' at the top of the screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label __4 = 2 @@ -551,11 +557,17 @@ Score: 961 // Tests using integer conditions in && and || operator // This should produce '01010101', '00110011', '00010001', '01110111' at the top of the screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-integer-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label __4 = 2 diff --git a/src/test/ref/condition-type-mismatch.asm b/src/test/ref/condition-type-mismatch.asm index aa475a929..e8944466f 100644 --- a/src/test/ref/condition-type-mismatch.asm +++ b/src/test/ref/condition-type-mismatch.asm @@ -1,7 +1,13 @@ // Tests a condition type mismatch (not boolean) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-type-mismatch.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 // *screen = 'a' diff --git a/src/test/ref/condition-type-mismatch.log b/src/test/ref/condition-type-mismatch.log index 7e2282d16..991ed6710 100644 --- a/src/test/ref/condition-type-mismatch.log +++ b/src/test/ref/condition-type-mismatch.log @@ -92,10 +92,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests a condition type mismatch (not boolean) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-type-mismatch.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -133,10 +139,16 @@ Score: 12 // File Comments // Tests a condition type mismatch (not boolean) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="condition-type-mismatch.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/consolidate-array-index-problem.asm b/src/test/ref/consolidate-array-index-problem.asm index 646e96a9e..0ec63a535 100644 --- a/src/test/ref/consolidate-array-index-problem.asm +++ b/src/test/ref/consolidate-array-index-problem.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="consolidate-array-index-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const BLACK = 0 .label screen = $400 diff --git a/src/test/ref/consolidate-array-index-problem.log b/src/test/ref/consolidate-array-index-problem.log index d6cbc56fb..e1b86640c 100644 --- a/src/test/ref/consolidate-array-index-problem.log +++ b/src/test/ref/consolidate-array-index-problem.log @@ -142,10 +142,16 @@ Uplifting [] best 381 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="consolidate-array-index-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const BLACK = 0 @@ -218,10 +224,16 @@ Score: 291 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="consolidate-array-index-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const BLACK = 0 diff --git a/src/test/ref/consolidate-constant-problem.asm b/src/test/ref/consolidate-constant-problem.asm index 41fa4948b..33f77d0da 100644 --- a/src/test/ref/consolidate-constant-problem.asm +++ b/src/test/ref/consolidate-constant-problem.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="consolidate-constant-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = $400 +.segment Code main: { // *(screen+40*j+39) = 0 lda #0 diff --git a/src/test/ref/consolidate-constant-problem.log b/src/test/ref/consolidate-constant-problem.log index 9ec76700b..664644a00 100644 --- a/src/test/ref/consolidate-constant-problem.log +++ b/src/test/ref/consolidate-constant-problem.log @@ -222,11 +222,17 @@ Uplifting [] best 66 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="consolidate-constant-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { jmp __b1 @@ -282,11 +288,17 @@ Score: 24 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="consolidate-constant-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { // main::@1 diff --git a/src/test/ref/const-bool-0.asm b/src/test/ref/const-bool-0.asm index 752a3dc8c..773a2e360 100644 --- a/src/test/ref/const-bool-0.asm +++ b/src/test/ref/const-bool-0.asm @@ -1,7 +1,13 @@ // Tests a complex constant binary -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-bool-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 // *screen = bError diff --git a/src/test/ref/const-bool-0.log b/src/test/ref/const-bool-0.log index c36d102ab..1e5826473 100644 --- a/src/test/ref/const-bool-0.log +++ b/src/test/ref/const-bool-0.log @@ -91,10 +91,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests a complex constant binary // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-bool-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -128,10 +134,16 @@ Score: 12 // File Comments // Tests a complex constant binary // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-bool-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/const-condition.asm b/src/test/ref/const-condition.asm index 90a1490ca..97087f0f9 100644 --- a/src/test/ref/const-condition.asm +++ b/src/test/ref/const-condition.asm @@ -1,7 +1,13 @@ // Ensure that if()'s with constant comparisons are identified and eliminated -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-condition.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 // SCREEN[0] = '!' diff --git a/src/test/ref/const-condition.log b/src/test/ref/const-condition.log index f71786118..3ed7cf63f 100644 --- a/src/test/ref/const-condition.log +++ b/src/test/ref/const-condition.log @@ -93,10 +93,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Ensure that if()'s with constant comparisons are identified and eliminated // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-condition.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -134,10 +140,16 @@ Score: 12 // File Comments // Ensure that if()'s with constant comparisons are identified and eliminated // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-condition.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/const-declaration.asm b/src/test/ref/const-declaration.asm index f2397408f..85cc97778 100644 --- a/src/test/ref/const-declaration.asm +++ b/src/test/ref/const-declaration.asm @@ -1,7 +1,12 @@ // Tests a number of constant declarations -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-declaration.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const LINE_LEN = $28 .const MARGIN_TOP = 4 .const MARGIN_LEFT = 4 @@ -9,6 +14,7 @@ .label SCREEN = $400 .label BODY1 = SCREEN+MARGIN_TOP*LINE_LEN+MARGIN_LEFT .label BODY2 = SCREEN+OFFSET +.segment Code main: { // *BODY1 = '*' lda #'*' diff --git a/src/test/ref/const-declaration.log b/src/test/ref/const-declaration.log index 7878524de..dea0d4971 100644 --- a/src/test/ref/const-declaration.log +++ b/src/test/ref/const-declaration.log @@ -79,9 +79,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests a number of constant declarations // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-declaration.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const LINE_LEN = $28 .const MARGIN_TOP = 4 @@ -90,6 +95,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN = $400 .label BODY1 = SCREEN+MARGIN_TOP*LINE_LEN+MARGIN_LEFT .label BODY2 = SCREEN+OFFSET +.segment Code // main main: { // [0] *BODY1 = '*' -- _deref_pbuc1=vbuc2 @@ -132,9 +138,14 @@ Score: 16 // File Comments // Tests a number of constant declarations // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-declaration.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const LINE_LEN = $28 .const MARGIN_TOP = 4 @@ -143,6 +154,7 @@ Score: 16 .label SCREEN = $400 .label BODY1 = SCREEN+MARGIN_TOP*LINE_LEN+MARGIN_LEFT .label BODY2 = SCREEN+OFFSET +.segment Code // main main: { // *BODY1 = '*' diff --git a/src/test/ref/const-early-identification.asm b/src/test/ref/const-early-identification.asm index 38f5c430d..7eee4d73d 100644 --- a/src/test/ref/const-early-identification.asm +++ b/src/test/ref/const-early-identification.asm @@ -1,10 +1,16 @@ // Tests that constants are identified early -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-early-identification.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label SCREEN = $400 // Not an early constant (address-of is used) .label A = 2 +.segment Code __start: { // A = 'a' lda #'a' diff --git a/src/test/ref/const-early-identification.log b/src/test/ref/const-early-identification.log index ffc95db0e..eeaf297ef 100644 --- a/src/test/ref/const-early-identification.log +++ b/src/test/ref/const-early-identification.log @@ -184,13 +184,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that constants are identified early // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-early-identification.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 // Not an early constant (address-of is used) .label A = 2 +.segment Code // __start __start: { jmp __init1 @@ -290,13 +296,19 @@ Score: 70 // File Comments // Tests that constants are identified early // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-early-identification.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 // Not an early constant (address-of is used) .label A = 2 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/const-identification.asm b/src/test/ref/const-identification.asm index 5c43c4501..3487eab6e 100644 --- a/src/test/ref/const-identification.asm +++ b/src/test/ref/const-identification.asm @@ -1,8 +1,14 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-identification.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label plots = $1000 .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/const-identification.log b/src/test/ref/const-identification.log index cf2723023..8c54aa7d6 100644 --- a/src/test/ref/const-identification.log +++ b/src/test/ref/const-identification.log @@ -334,12 +334,18 @@ Uplifting [] best 3006 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-identification.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label plots = $1000 .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -488,12 +494,18 @@ Score: 2013 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-identification.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label plots = $1000 .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/const-if-problem.asm b/src/test/ref/const-if-problem.asm index 0666b23a1..11dc881ab 100644 --- a/src/test/ref/const-if-problem.asm +++ b/src/test/ref/const-if-problem.asm @@ -1,8 +1,14 @@ // Constant if() contains call to (unused) function - should be optimized away -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-if-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = 'a' lda #'a' diff --git a/src/test/ref/const-if-problem.log b/src/test/ref/const-if-problem.log index 8e0994e44..c249b285c 100644 --- a/src/test/ref/const-if-problem.log +++ b/src/test/ref/const-if-problem.log @@ -135,11 +135,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Constant if() contains call to (unused) function - should be optimized away // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-if-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { jmp __b1 @@ -176,11 +182,17 @@ Score: 12 // File Comments // Constant if() contains call to (unused) function - should be optimized away // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-if-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // main::@1 diff --git a/src/test/ref/const-int-cast-problem.asm b/src/test/ref/const-int-cast-problem.asm index c62dfeac0..66fb3b36b 100644 --- a/src/test/ref/const-int-cast-problem.asm +++ b/src/test/ref/const-int-cast-problem.asm @@ -1,8 +1,14 @@ // Test a problem with converting casted constant numbers to fixed type constant integers -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-int-cast-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #$79 __b1: diff --git a/src/test/ref/const-int-cast-problem.log b/src/test/ref/const-int-cast-problem.log index faa36c48c..27c274c91 100644 --- a/src/test/ref/const-int-cast-problem.log +++ b/src/test/ref/const-int-cast-problem.log @@ -126,11 +126,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test a problem with converting casted constant numbers to fixed type constant integers // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-int-cast-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -196,11 +202,17 @@ Score: 241 // File Comments // Test a problem with converting casted constant numbers to fixed type constant integers // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-int-cast-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/const-mult-div.asm b/src/test/ref/const-mult-div.asm index 3d2776530..ab8d221c2 100644 --- a/src/test/ref/const-mult-div.asm +++ b/src/test/ref/const-mult-div.asm @@ -1,7 +1,13 @@ // Test a constant with multiplication and division -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-mult-div.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const b = 6*$e/3+mod($16,3) .label screen = $400 diff --git a/src/test/ref/const-mult-div.log b/src/test/ref/const-mult-div.log index b35f7bda0..eef5b6fae 100644 --- a/src/test/ref/const-mult-div.log +++ b/src/test/ref/const-mult-div.log @@ -82,10 +82,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test a constant with multiplication and division // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-mult-div.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const b = 6*$e/3+mod($16,3) @@ -120,10 +126,16 @@ Score: 12 // File Comments // Test a constant with multiplication and division // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-mult-div.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const b = 6*$e/3+mod($16,3) diff --git a/src/test/ref/const-param.asm b/src/test/ref/const-param.asm index 971851d24..61272b382 100644 --- a/src/test/ref/const-param.asm +++ b/src/test/ref/const-param.asm @@ -1,7 +1,13 @@ // Test that the compiler optimizes when the same parameter value is passed into a function in all calls -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-param.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label reverse = $80 .label screen = $400 diff --git a/src/test/ref/const-param.log b/src/test/ref/const-param.log index d5b6fbe77..1337d3e46 100644 --- a/src/test/ref/const-param.log +++ b/src/test/ref/const-param.log @@ -252,10 +252,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test that the compiler optimizes when the same parameter value is passed into a function in all calls // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-param.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label reverse = $80 @@ -369,10 +375,16 @@ Score: 52 // File Comments // Test that the compiler optimizes when the same parameter value is passed into a function in all calls // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-param.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label reverse = $80 diff --git a/src/test/ref/const-parenthesis.asm b/src/test/ref/const-parenthesis.asm index 3b1dfa363..92504e188 100644 --- a/src/test/ref/const-parenthesis.asm +++ b/src/test/ref/const-parenthesis.asm @@ -1,9 +1,15 @@ // Test parenthesising of constants // See https://gitlab.com/camelot/kickc/-/issues/470#note_356486132 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-parenthesis.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .const dy = $80 // SCREEN[0] = (dy-1)/16 diff --git a/src/test/ref/const-parenthesis.log b/src/test/ref/const-parenthesis.log index 56496c5df..46422f149 100644 --- a/src/test/ref/const-parenthesis.log +++ b/src/test/ref/const-parenthesis.log @@ -103,11 +103,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test parenthesising of constants // See https://gitlab.com/camelot/kickc/-/issues/470#note_356486132 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-parenthesis.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .const dy = $80 @@ -147,11 +153,17 @@ Score: 18 // Test parenthesising of constants // See https://gitlab.com/camelot/kickc/-/issues/470#note_356486132 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-parenthesis.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .const dy = $80 diff --git a/src/test/ref/const-pointer.asm b/src/test/ref/const-pointer.asm index 2c289dfd0..21b58e979 100644 --- a/src/test/ref/const-pointer.asm +++ b/src/test/ref/const-pointer.asm @@ -1,7 +1,13 @@ //Test that constant pointers are detected correctly -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 // screen[0] = '*' diff --git a/src/test/ref/const-pointer.log b/src/test/ref/const-pointer.log index 5741a0e91..afc996068 100644 --- a/src/test/ref/const-pointer.log +++ b/src/test/ref/const-pointer.log @@ -103,10 +103,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments //Test that constant pointers are detected correctly // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -144,10 +150,16 @@ Score: 12 // File Comments //Test that constant pointers are detected correctly // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/const-signed-promotion.asm b/src/test/ref/const-signed-promotion.asm index e42507b5e..6df4cb328 100644 --- a/src/test/ref/const-signed-promotion.asm +++ b/src/test/ref/const-signed-promotion.asm @@ -1,7 +1,13 @@ // Test fragment promotion of a constant (400) to signed word even if it also matches an unsigned word -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-signed-promotion.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 ldx #0 @@ -26,4 +32,5 @@ main: { // } rts } +.segment Data world: .fill 2*3, 0 diff --git a/src/test/ref/const-signed-promotion.log b/src/test/ref/const-signed-promotion.log index ac277a544..f0b3be09e 100644 --- a/src/test/ref/const-signed-promotion.log +++ b/src/test/ref/const-signed-promotion.log @@ -163,10 +163,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test fragment promotion of a constant (400) to signed word even if it also matches an unsigned word // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-signed-promotion.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -210,6 +216,7 @@ main: { rts } // File Data +.segment Data world: .fill 2*3, 0 ASSEMBLER OPTIMIZATIONS @@ -246,10 +253,16 @@ Score: 307 // File Comments // Test fragment promotion of a constant (400) to signed word even if it also matches an unsigned word // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-signed-promotion.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -289,5 +302,6 @@ main: { rts } // File Data +.segment Data world: .fill 2*3, 0 diff --git a/src/test/ref/const-volatile-problem.asm b/src/test/ref/const-volatile-problem.asm index d2e73e957..eee453401 100644 --- a/src/test/ref/const-volatile-problem.asm +++ b/src/test/ref/const-volatile-problem.asm @@ -3,14 +3,20 @@ // PLEX_SCREEN_PTR2 is saved by only being assigned once - thus is is identified as a constant. // All assignments for PLEX_SCREEN_PTR1 are optimized away because it is only used in the IRQ. // A potential fix is https://gitlab.com/camelot/kickc/-/issues/430 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-volatile-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label IRQ = $314 .label PLEX_SCREEN_PTR2 = $500 .label idx = 4 // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR1 = 2 +.segment Code __start: { // idx = 0 lda #0 diff --git a/src/test/ref/const-volatile-problem.log b/src/test/ref/const-volatile-problem.log index 429eaf408..1c934488f 100644 --- a/src/test/ref/const-volatile-problem.log +++ b/src/test/ref/const-volatile-problem.log @@ -178,15 +178,21 @@ ASSEMBLER BEFORE OPTIMIZATION // All assignments for PLEX_SCREEN_PTR1 are optimized away because it is only used in the IRQ. // A potential fix is https://gitlab.com/camelot/kickc/-/issues/430 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-volatile-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label IRQ = $314 .label PLEX_SCREEN_PTR2 = $500 .label idx = 4 // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR1 = 2 +.segment Code // __start __start: { jmp __init1 @@ -285,15 +291,21 @@ Score: 98 // All assignments for PLEX_SCREEN_PTR1 are optimized away because it is only used in the IRQ. // A potential fix is https://gitlab.com/camelot/kickc/-/issues/430 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-volatile-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label IRQ = $314 .label PLEX_SCREEN_PTR2 = $500 .label idx = 4 // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR1 = 2 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/const-word-pointer.asm b/src/test/ref/const-word-pointer.asm index c4f25ead8..f415fc9ea 100644 --- a/src/test/ref/const-word-pointer.asm +++ b/src/test/ref/const-word-pointer.asm @@ -1,8 +1,14 @@ // Test a constant word pointers (pointing to a word placed on zeropage). // The result when running is "CML!" on the screen. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-word-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 .label wp = w diff --git a/src/test/ref/const-word-pointer.log b/src/test/ref/const-word-pointer.log index 56879761e..9d7be6f04 100644 --- a/src/test/ref/const-word-pointer.log +++ b/src/test/ref/const-word-pointer.log @@ -144,10 +144,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Test a constant word pointers (pointing to a word placed on zeropage). // The result when running is "CML!" on the screen. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-word-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -217,10 +223,16 @@ Score: 54 // Test a constant word pointers (pointing to a word placed on zeropage). // The result when running is "CML!" on the screen. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="const-word-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/constabsmin.asm b/src/test/ref/constabsmin.asm index 697620021..ea1327c53 100644 --- a/src/test/ref/constabsmin.asm +++ b/src/test/ref/constabsmin.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constabsmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // *SCREEN = 1 lda #1 diff --git a/src/test/ref/constabsmin.log b/src/test/ref/constabsmin.log index 8ebbba5c5..378609475 100644 --- a/src/test/ref/constabsmin.log +++ b/src/test/ref/constabsmin.log @@ -72,11 +72,17 @@ Uplifting [] best 15 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constabsmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = 1 -- _deref_pbuc1=vbuc2 @@ -107,11 +113,17 @@ Score: 12 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constabsmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // *SCREEN = 1 diff --git a/src/test/ref/constant-string-concat-0.asm b/src/test/ref/constant-string-concat-0.asm index c43c254e1..765f1fe1a 100644 --- a/src/test/ref/constant-string-concat-0.asm +++ b/src/test/ref/constant-string-concat-0.asm @@ -1,7 +1,13 @@ // Concatenates string constants in different ways -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constant-string-concat-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 @@ -19,6 +25,7 @@ main: { // for( byte i=0;msg[i]!=0;i++) inx jmp __b1 + .segment Data msg: .text "camelot" .byte 0 } diff --git a/src/test/ref/constant-string-concat-0.log b/src/test/ref/constant-string-concat-0.log index 75b0babd5..7f41d8aa5 100644 --- a/src/test/ref/constant-string-concat-0.log +++ b/src/test/ref/constant-string-concat-0.log @@ -119,10 +119,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Concatenates string constants in different ways // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constant-string-concat-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -153,6 +159,7 @@ main: { __b1_from___b2: // [1] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy jmp __b1 + .segment Data msg: .text "camelot" .byte 0 } @@ -184,10 +191,16 @@ Score: 261 // File Comments // Concatenates string constants in different ways // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constant-string-concat-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -217,6 +230,7 @@ main: { // [1] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [1] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy jmp __b1 + .segment Data msg: .text "camelot" .byte 0 } diff --git a/src/test/ref/constant-string-concat.asm b/src/test/ref/constant-string-concat.asm index bda662329..eb19ac46c 100644 --- a/src/test/ref/constant-string-concat.asm +++ b/src/test/ref/constant-string-concat.asm @@ -1,7 +1,13 @@ // Concatenates string constants in different ways -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constant-string-concat.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 @@ -15,6 +21,7 @@ main: { bne __b1 // } rts + .segment Data s: .text "camelot" .byte 0 } diff --git a/src/test/ref/constant-string-concat.log b/src/test/ref/constant-string-concat.log index b738ffbff..d10488c7c 100644 --- a/src/test/ref/constant-string-concat.log +++ b/src/test/ref/constant-string-concat.log @@ -114,10 +114,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Concatenates string constants in different ways // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constant-string-concat.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -145,6 +151,7 @@ main: { __breturn: // [5] return rts + .segment Data s: .text "camelot" .byte 0 } @@ -180,10 +187,16 @@ Score: 186 // File Comments // Concatenates string constants in different ways // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constant-string-concat.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -208,6 +221,7 @@ main: { // } // [5] return rts + .segment Data s: .text "camelot" .byte 0 } diff --git a/src/test/ref/constantmin.asm b/src/test/ref/constantmin.asm index 7c66e2d73..269d62636 100644 --- a/src/test/ref/constantmin.asm +++ b/src/test/ref/constantmin.asm @@ -1,10 +1,16 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constantmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const STAR = $51 .const RED = 2 .label SCREEN = $400 .label VIC = $d000 +.segment Code main: { // *SCREEN = STAR lda #STAR diff --git a/src/test/ref/constantmin.log b/src/test/ref/constantmin.log index 0952fce0d..aeaa27d56 100644 --- a/src/test/ref/constantmin.log +++ b/src/test/ref/constantmin.log @@ -178,14 +178,20 @@ Uplifting [] best 263 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constantmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const STAR = $51 .const RED = 2 .label SCREEN = $400 .label VIC = $d000 +.segment Code // main main: { // [0] *SCREEN = STAR -- _deref_pbuc1=vbuc2 @@ -253,14 +259,20 @@ Score: 173 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constantmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const STAR = $51 .const RED = 2 .label SCREEN = $400 .label VIC = $d000 +.segment Code // main main: { // *SCREEN = STAR diff --git a/src/test/ref/constants.asm b/src/test/ref/constants.asm index d5bc0c1f7..621a8ea0c 100644 --- a/src/test/ref/constants.asm +++ b/src/test/ref/constants.asm @@ -1,14 +1,20 @@ // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constants.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const GREEN = 5 .const RED = 2 .label BG_COLOR = $d021 .label print_screen = $400 .label print_char_cursor = 5 .label print_line_cursor = 7 +.segment Code main: { // print_cls() jsr print_cls @@ -79,9 +85,11 @@ test_bytes: { jsr assert_byte // } rts + .segment Data msg2: .text "0+2-4=254" .byte 0 } +.segment Code // Test different signed byte constants test_sbytes: { .const bb = 0 @@ -136,6 +144,7 @@ test_sbytes: { jsr assert_sbyte // } rts + .segment Data msg2: .text "0+2-4=-2" .byte 0 msg3: .text "-(0+2-4)=2" @@ -143,6 +152,7 @@ test_sbytes: { msg4: .text "-127-127=2" .byte 0 } +.segment Code // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { .const c = ' ' @@ -318,6 +328,7 @@ print_char: { // } rts } +.segment Data msg: .text "0=0" .byte 0 msg1: .text "0+2=2" diff --git a/src/test/ref/constants.log b/src/test/ref/constants.log index 4ff54056d..4dfbb1d18 100644 --- a/src/test/ref/constants.log +++ b/src/test/ref/constants.log @@ -1639,9 +1639,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constants.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const GREEN = 5 .const RED = 2 @@ -1649,6 +1654,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label print_screen = $400 .label print_char_cursor = 5 .label print_line_cursor = 7 +.segment Code // main main: { // [1] call print_cls @@ -1776,9 +1782,11 @@ test_bytes: { __breturn: // [16] return rts + .segment Data msg2: .text "0+2-4=254" .byte 0 } +.segment Code // test_sbytes // Test different signed byte constants test_sbytes: { @@ -1882,6 +1890,7 @@ test_sbytes: { __breturn: // [27] return rts + .segment Data msg2: .text "0+2-4=-2" .byte 0 msg3: .text "-(0+2-4)=2" @@ -1889,6 +1898,7 @@ test_sbytes: { msg4: .text "-127-127=2" .byte 0 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { @@ -2194,6 +2204,7 @@ print_char: { rts } // File Data +.segment Data msg: .text "0=0" .byte 0 msg1: .text "0+2=2" @@ -2415,9 +2426,14 @@ Score: 1783 // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constants.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const GREEN = 5 .const RED = 2 @@ -2425,6 +2441,7 @@ Score: 1783 .label print_screen = $400 .label print_char_cursor = 5 .label print_line_cursor = 7 +.segment Code // main main: { // print_cls() @@ -2541,9 +2558,11 @@ test_bytes: { // } // [16] return rts + .segment Data msg2: .text "0+2-4=254" .byte 0 } +.segment Code // test_sbytes // Test different signed byte constants test_sbytes: { @@ -2634,6 +2653,7 @@ test_sbytes: { // } // [27] return rts + .segment Data msg2: .text "0+2-4=-2" .byte 0 msg3: .text "-(0+2-4)=2" @@ -2641,6 +2661,7 @@ test_sbytes: { msg4: .text "-127-127=2" .byte 0 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { @@ -2922,6 +2943,7 @@ print_char: { rts } // File Data +.segment Data msg: .text "0=0" .byte 0 msg1: .text "0+2=2" diff --git a/src/test/ref/constref-not-literal-problem.asm b/src/test/ref/constref-not-literal-problem.asm index ea0df27d5..fca6b3934 100644 --- a/src/test/ref/constref-not-literal-problem.asm +++ b/src/test/ref/constref-not-literal-problem.asm @@ -1,8 +1,14 @@ // Demonstrates a problem where constant references are not literal -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constref-not-literal-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label B = $8000 +.segment Code main: { // copy(B, A) jsr copy @@ -31,5 +37,6 @@ copy: { // } rts } +.segment Data A: .text "qwe" .byte 0 diff --git a/src/test/ref/constref-not-literal-problem.log b/src/test/ref/constref-not-literal-problem.log index 7534ce8f2..aac922112 100644 --- a/src/test/ref/constref-not-literal-problem.log +++ b/src/test/ref/constref-not-literal-problem.log @@ -167,11 +167,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Demonstrates a problem where constant references are not literal // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constref-not-literal-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label B = $8000 +.segment Code // main main: { // [1] call copy @@ -211,6 +217,7 @@ copy: { rts } // File Data +.segment Data A: .text "qwe" .byte 0 @@ -245,11 +252,17 @@ Score: 41 // File Comments // Demonstrates a problem where constant references are not literal // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="constref-not-literal-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label B = $8000 +.segment Code // main main: { // copy(B, A) @@ -289,6 +302,7 @@ copy: { rts } // File Data +.segment Data A: .text "qwe" .byte 0 diff --git a/src/test/ref/cordic-atan2-16-ref.asm b/src/test/ref/cordic-atan2-16-ref.asm index 989821790..a01d29012 100644 --- a/src/test/ref/cordic-atan2-16-ref.asm +++ b/src/test/ref/cordic-atan2-16-ref.asm @@ -1,8 +1,13 @@ // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cordic-atan2-16-ref.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f .label D018 = $d018 @@ -12,6 +17,7 @@ .label SCREEN = $2800 .label print_screen = $400 .label print_char_cursor = $15 +.segment Code main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .label col00 = COLS+$c*$28+$13 @@ -508,6 +514,7 @@ print_char: { // } rts } +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... diff --git a/src/test/ref/cordic-atan2-16-ref.log b/src/test/ref/cordic-atan2-16-ref.log index ebe03ac45..71970f558 100644 --- a/src/test/ref/cordic-atan2-16-ref.log +++ b/src/test/ref/cordic-atan2-16-ref.log @@ -2320,9 +2320,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cordic-atan2-16-ref.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f @@ -2333,6 +2338,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN = $2800 .label print_screen = $400 .label print_char_cursor = $15 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -3104,6 +3110,7 @@ print_char: { rts } // File Data +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... @@ -3255,9 +3262,9 @@ Removing instruction jmp __b3 Succesful ASM optimization Pass5NextJumpElimination Removing instruction __b3: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [310] beq __b12 to bne -Fixing long branch [205] bpl __b1 to bmi -Fixing long branch [217] bpl __b4 to bmi +Fixing long branch [316] beq __b12 to bne +Fixing long branch [211] bpl __b1 to bmi +Fixing long branch [223] bpl __b4 to bmi FINAL SYMBOL TABLE const nomodify byte* CHARSET = (byte*) 8192 @@ -3472,9 +3479,14 @@ Score: 1041603 // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cordic-atan2-16-ref.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f @@ -3485,6 +3497,7 @@ Score: 1041603 .label SCREEN = $2800 .label print_screen = $400 .label print_char_cursor = $15 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -4224,6 +4237,7 @@ print_char: { rts } // File Data +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... diff --git a/src/test/ref/cordic-atan2-16.asm b/src/test/ref/cordic-atan2-16.asm index 6a9cf98ad..32d8964d8 100644 --- a/src/test/ref/cordic-atan2-16.asm +++ b/src/test/ref/cordic-atan2-16.asm @@ -1,8 +1,13 @@ // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cordic-atan2-16.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f .label D018 = $d018 @@ -10,6 +15,7 @@ .label COLS = $d800 .label CHARSET = $2000 .label SCREEN = $2800 +.segment Code main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .label col00 = COLS+$c*$28+$13 @@ -400,6 +406,7 @@ atan2_16: { sta.z yi+1 jmp __b3 } +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... diff --git a/src/test/ref/cordic-atan2-16.log b/src/test/ref/cordic-atan2-16.log index adcb5ff59..64fce24d6 100644 --- a/src/test/ref/cordic-atan2-16.log +++ b/src/test/ref/cordic-atan2-16.log @@ -1724,9 +1724,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cordic-atan2-16.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f @@ -1735,6 +1740,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label COLS = $d800 .label CHARSET = $2000 .label SCREEN = $2800 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -2325,6 +2331,7 @@ atan2_16: { jmp __b3_from___b1 } // File Data +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... @@ -2438,9 +2445,9 @@ Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __b3 Succesful ASM optimization Pass5NextJumpElimination -Fixing long branch [280] beq __b12 to bne -Fixing long branch [175] bpl __b1 to bmi -Fixing long branch [187] bpl __b4 to bmi +Fixing long branch [286] beq __b12 to bne +Fixing long branch [181] bpl __b1 to bmi +Fixing long branch [193] bpl __b4 to bmi FINAL SYMBOL TABLE const nomodify byte* CHARSET = (byte*) 8192 @@ -2592,9 +2599,14 @@ Score: 1036177 // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cordic-atan2-16.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f @@ -2603,6 +2615,7 @@ Score: 1036177 .label COLS = $d800 .label CHARSET = $2000 .label SCREEN = $2800 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -3170,6 +3183,7 @@ atan2_16: { jmp __b3 } // File Data +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... diff --git a/src/test/ref/cordic-atan2-clear.asm b/src/test/ref/cordic-atan2-clear.asm index f005259ef..4de9df17d 100644 --- a/src/test/ref/cordic-atan2-clear.asm +++ b/src/test/ref/cordic-atan2-clear.asm @@ -1,15 +1,21 @@ // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf // Creates a font where each char contains the number of the char (00-ff) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cordic-atan2-clear.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f .label RASTER = $d012 .label D018 = $d018 .label CHARSET = $2000 .label SCREEN = $2800 +.segment Code main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f // Clear the screen by modifying the charset @@ -487,6 +493,7 @@ atan2_16: { sta.z yi+1 jmp __b3 } +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... diff --git a/src/test/ref/cordic-atan2-clear.log b/src/test/ref/cordic-atan2-clear.log index ec55907f8..20ff40c56 100644 --- a/src/test/ref/cordic-atan2-clear.log +++ b/src/test/ref/cordic-atan2-clear.log @@ -2024,9 +2024,14 @@ ASSEMBLER BEFORE OPTIMIZATION // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf // Creates a font where each char contains the number of the char (00-ff) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cordic-atan2-clear.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f @@ -2034,6 +2039,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label D018 = $d018 .label CHARSET = $2000 .label SCREEN = $2800 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -2738,6 +2744,7 @@ atan2_16: { jmp __b3_from___b1 } // File Data +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... @@ -2869,9 +2876,9 @@ Removing instruction jmp __b2 Removing instruction jmp __b3 Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination -Fixing long branch [351] beq __b12 to bne -Fixing long branch [246] bpl __b1 to bmi -Fixing long branch [258] bpl __b4 to bmi +Fixing long branch [357] beq __b12 to bne +Fixing long branch [252] bpl __b1 to bmi +Fixing long branch [264] bpl __b4 to bmi FINAL SYMBOL TABLE const nomodify byte* CHARSET = (byte*) 8192 @@ -3044,9 +3051,14 @@ Score: 1054209 // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf // Creates a font where each char contains the number of the char (00-ff) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cordic-atan2-clear.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f @@ -3054,6 +3066,7 @@ Score: 1054209 .label D018 = $d018 .label CHARSET = $2000 .label SCREEN = $2800 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -3737,6 +3750,7 @@ atan2_16: { jmp __b3 } // File Data +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... diff --git a/src/test/ref/cordic-atan2.asm b/src/test/ref/cordic-atan2.asm index b0a091d9b..43a5a6877 100644 --- a/src/test/ref/cordic-atan2.asm +++ b/src/test/ref/cordic-atan2.asm @@ -1,8 +1,13 @@ // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cordic-atan2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // The number of iterations performed during 8-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_8 = 8 .label D018 = $d018 @@ -10,6 +15,7 @@ .label COLS = $d800 .label CHARSET = $2000 .label SCREEN = $2800 +.segment Code main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .label col00 = COLS+$c*$28+$13 @@ -321,6 +327,7 @@ atan2_8: { ldx.z y jmp __b3 } +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... diff --git a/src/test/ref/cordic-atan2.log b/src/test/ref/cordic-atan2.log index eaeb30f4a..7b0f7613c 100644 --- a/src/test/ref/cordic-atan2.log +++ b/src/test/ref/cordic-atan2.log @@ -1416,9 +1416,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cordic-atan2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The number of iterations performed during 8-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_8 = 8 @@ -1427,6 +1432,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label COLS = $d800 .label CHARSET = $2000 .label SCREEN = $2800 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -1912,6 +1918,7 @@ atan2_8: { jmp __b3_from___b1 } // File Data +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... @@ -2010,8 +2017,8 @@ Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __b3 Succesful ASM optimization Pass5NextJumpElimination -Fixing long branch [156] bpl __b1 to bmi -Fixing long branch [169] bpl __b4 to bmi +Fixing long branch [162] bpl __b1 to bmi +Fixing long branch [175] bpl __b4 to bmi FINAL SYMBOL TABLE const nomodify byte* CHARSET = (byte*) 8192 @@ -2137,9 +2144,14 @@ Score: 230290 // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cordic-atan2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The number of iterations performed during 8-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_8 = 8 @@ -2148,6 +2160,7 @@ Score: 230290 .label COLS = $d800 .label CHARSET = $2000 .label SCREEN = $2800 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -2610,6 +2623,7 @@ atan2_8: { jmp __b3 } // File Data +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... diff --git a/src/test/ref/cpu-45gs02-addressing-modes.asm b/src/test/ref/cpu-45gs02-addressing-modes.asm index 2d3f0c36d..418e9b18e 100644 --- a/src/test/ref/cpu-45gs02-addressing-modes.asm +++ b/src/test/ref/cpu-45gs02-addressing-modes.asm @@ -1,8 +1,14 @@ // Tests the different ASM addressing modes .cpu _45gs02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-45gs02-addressing-modes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // asm inx @@ -31,5 +37,6 @@ main: { // } rts } +.segment Data .pc = $2000 "far" far: .byte $60 diff --git a/src/test/ref/cpu-45gs02-addressing-modes.log b/src/test/ref/cpu-45gs02-addressing-modes.log index f1b7e0dbb..6b6924d04 100644 --- a/src/test/ref/cpu-45gs02-addressing-modes.log +++ b/src/test/ref/cpu-45gs02-addressing-modes.log @@ -68,10 +68,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests the different ASM addressing modes // Upstart .cpu _45gs02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-45gs02-addressing-modes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // asm { inx lda#$12 phw#$1234 lda$12 lda$12,x ldx$12,y lda($12,x) lda($12),y ora($12),z lda($12,sp),y lda$1234 lda$1234,x lda$1234,y beqlbl1 lbeqfar bbr0$12,lbl2 lbl1: jmp($1234) lbl2: jmp($1234,x) lbl3: lda(($12)),z ldq(($12)) } @@ -105,6 +111,7 @@ main: { rts } // File Data +.segment Data .pc = $2000 "far" far: .byte $60 @@ -127,10 +134,16 @@ Score: 103 // Tests the different ASM addressing modes // Upstart .cpu _45gs02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-45gs02-addressing-modes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // asm @@ -164,6 +177,7 @@ main: { rts } // File Data +.segment Data .pc = $2000 "far" far: .byte $60 diff --git a/src/test/ref/cpu-45gs02.asm b/src/test/ref/cpu-45gs02.asm index f6b8f24e9..9eb406e52 100644 --- a/src/test/ref/cpu-45gs02.asm +++ b/src/test/ref/cpu-45gs02.asm @@ -1,10 +1,16 @@ // Test the 45GS02 CPU // A program that uses 45GS02 instructions .cpu _45gs02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-45gs02.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label sum = 3 .label addend = 7 diff --git a/src/test/ref/cpu-45gs02.log b/src/test/ref/cpu-45gs02.log index 4656b7aba..195470307 100644 --- a/src/test/ref/cpu-45gs02.log +++ b/src/test/ref/cpu-45gs02.log @@ -187,11 +187,17 @@ ASSEMBLER BEFORE OPTIMIZATION // A program that uses 45GS02 instructions // Upstart .cpu _45gs02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-45gs02.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label sum = 3 @@ -310,11 +316,17 @@ Score: 1218 // A program that uses 45GS02 instructions // Upstart .cpu _45gs02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-45gs02.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label sum = 3 diff --git a/src/test/ref/cpu-6502-addressing-modes.asm b/src/test/ref/cpu-6502-addressing-modes.asm index 3100d5c4c..c59e14d35 100644 --- a/src/test/ref/cpu-6502-addressing-modes.asm +++ b/src/test/ref/cpu-6502-addressing-modes.asm @@ -1,8 +1,14 @@ // Tests the different ASM addressing modes .cpu _6502NoIllegals -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-6502-addressing-modes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // asm inx diff --git a/src/test/ref/cpu-6502-addressing-modes.log b/src/test/ref/cpu-6502-addressing-modes.log index d05aeeb55..44a54f626 100644 --- a/src/test/ref/cpu-6502-addressing-modes.log +++ b/src/test/ref/cpu-6502-addressing-modes.log @@ -64,10 +64,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests the different ASM addressing modes // Upstart .cpu _6502NoIllegals -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-6502-addressing-modes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // asm { inx lda#$12 lda$12 lda$12,x ldx$12,y lda($12,x) lda($12),y lda$1234 lda$1234,x lda$1234,y beq!+ jmp($1234) !: } @@ -110,10 +116,16 @@ Score: 53 // Tests the different ASM addressing modes // Upstart .cpu _6502NoIllegals -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-6502-addressing-modes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // asm diff --git a/src/test/ref/cpu-6502.asm b/src/test/ref/cpu-6502.asm index 1ca619bf1..922e4c7b5 100644 --- a/src/test/ref/cpu-6502.asm +++ b/src/test/ref/cpu-6502.asm @@ -1,9 +1,15 @@ // Test the 6502 CPU without support for illegal opcodes // By a program that normally uses illegal opcodes .cpu _6502NoIllegals -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-6502.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 ldx #0 diff --git a/src/test/ref/cpu-6502.log b/src/test/ref/cpu-6502.log index 45aa58bdc..cb97d6203 100644 --- a/src/test/ref/cpu-6502.log +++ b/src/test/ref/cpu-6502.log @@ -172,10 +172,16 @@ ASSEMBLER BEFORE OPTIMIZATION // By a program that normally uses illegal opcodes // Upstart .cpu _6502NoIllegals -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-6502.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -267,10 +273,16 @@ Score: 356 // By a program that normally uses illegal opcodes // Upstart .cpu _6502NoIllegals -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-6502.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/cpu-65c02-addressing-modes.asm b/src/test/ref/cpu-65c02-addressing-modes.asm index 1593c96ba..861334bad 100644 --- a/src/test/ref/cpu-65c02-addressing-modes.asm +++ b/src/test/ref/cpu-65c02-addressing-modes.asm @@ -1,8 +1,14 @@ // Tests the different ASM addressing modes .cpu _65c02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65c02-addressing-modes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // asm inx diff --git a/src/test/ref/cpu-65c02-addressing-modes.log b/src/test/ref/cpu-65c02-addressing-modes.log index e6567d340..77a0147fb 100644 --- a/src/test/ref/cpu-65c02-addressing-modes.log +++ b/src/test/ref/cpu-65c02-addressing-modes.log @@ -64,10 +64,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests the different ASM addressing modes // Upstart .cpu _65c02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65c02-addressing-modes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // asm { inx lda#$12 lda$12 lda$12,x ldx$12,y ora($12) lda($12,x) lda($12),y lda$1234 lda$1234,x lda$1234,y beqlbl1 bbr0$12,lbl2 lbl1: jmp($1234) lbl2: jmp($1234,x) } @@ -116,10 +122,16 @@ Score: 63 // Tests the different ASM addressing modes // Upstart .cpu _65c02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65c02-addressing-modes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // asm diff --git a/src/test/ref/cpu-65c02.asm b/src/test/ref/cpu-65c02.asm index 5fea81a03..1c0f9c0be 100644 --- a/src/test/ref/cpu-65c02.asm +++ b/src/test/ref/cpu-65c02.asm @@ -1,10 +1,16 @@ // Test the 65C02 CPU // A program that uses 65C02 instructions .cpu _65c02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65c02.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // a = SCREEN[0] lda SCREEN diff --git a/src/test/ref/cpu-65c02.log b/src/test/ref/cpu-65c02.log index 845e735e4..5d939fb2b 100644 --- a/src/test/ref/cpu-65c02.log +++ b/src/test/ref/cpu-65c02.log @@ -102,11 +102,17 @@ ASSEMBLER BEFORE OPTIMIZATION // A program that uses 65C02 instructions // Upstart .cpu _65c02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65c02.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] main::a#0 = *SCREEN -- vbuaa=_deref_pbuc1 @@ -148,11 +154,17 @@ Score: 16 // A program that uses 65C02 instructions // Upstart .cpu _65c02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65c02.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // a = SCREEN[0] diff --git a/src/test/ref/cpu-65ce02-addressing-modes.asm b/src/test/ref/cpu-65ce02-addressing-modes.asm index 00428bfcd..9d39c44cb 100644 --- a/src/test/ref/cpu-65ce02-addressing-modes.asm +++ b/src/test/ref/cpu-65ce02-addressing-modes.asm @@ -1,8 +1,14 @@ // Tests the different ASM addressing modes .cpu _65ce02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65ce02-addressing-modes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // asm inx @@ -27,5 +33,6 @@ main: { jmp ($1234,x) // } } +.segment Data .pc = $2000 "far" far: .byte $60 diff --git a/src/test/ref/cpu-65ce02-addressing-modes.log b/src/test/ref/cpu-65ce02-addressing-modes.log index 4a8b05905..4feaa5ff8 100644 --- a/src/test/ref/cpu-65ce02-addressing-modes.log +++ b/src/test/ref/cpu-65ce02-addressing-modes.log @@ -68,10 +68,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests the different ASM addressing modes // Upstart .cpu _65ce02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65ce02-addressing-modes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // asm { inx lda#$12 phw#$1234 lda$12 lda$12,x ldx$12,y lda($12,x) lda($12),y ora($12),z lda($12,sp),y lda$1234 lda$1234,x lda$1234,y beqlbl1 lbeqfar bbr0$12,lbl2 lbl1: jmp($1234) lbl2: jmp($1234,x) } @@ -102,6 +108,7 @@ main: { rts } // File Data +.segment Data .pc = $2000 "far" far: .byte $60 @@ -126,10 +133,16 @@ Score: 77 // Tests the different ASM addressing modes // Upstart .cpu _65ce02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65ce02-addressing-modes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // asm @@ -159,6 +172,7 @@ main: { // [1] return } // File Data +.segment Data .pc = $2000 "far" far: .byte $60 diff --git a/src/test/ref/cpu-65ce02-b.asm b/src/test/ref/cpu-65ce02-b.asm index c6d79f5d1..0fa753ed2 100644 --- a/src/test/ref/cpu-65ce02-b.asm +++ b/src/test/ref/cpu-65ce02-b.asm @@ -1,10 +1,16 @@ // Test the 65CE02 CPU // A program that uses 65CE02 instructions .cpu _65ce02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65ce02-b.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldz #0 __b1: diff --git a/src/test/ref/cpu-65ce02-b.log b/src/test/ref/cpu-65ce02-b.log index 8c789364c..2925387bc 100644 --- a/src/test/ref/cpu-65ce02-b.log +++ b/src/test/ref/cpu-65ce02-b.log @@ -116,11 +116,17 @@ ASSEMBLER BEFORE OPTIMIZATION // A program that uses 65CE02 instructions // Upstart .cpu _65ce02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65ce02-b.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -180,11 +186,17 @@ Score: 191 // A program that uses 65CE02 instructions // Upstart .cpu _65ce02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65ce02-b.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/cpu-65ce02-eightqueens.asm b/src/test/ref/cpu-65ce02-eightqueens.asm index 81edbf41d..f22161334 100644 --- a/src/test/ref/cpu-65ce02-eightqueens.asm +++ b/src/test/ref/cpu-65ce02-eightqueens.asm @@ -4,9 +4,14 @@ // // This is an iterative solution. .cpu _65ce02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65ce02-eightqueens.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c @@ -25,6 +30,7 @@ .label conio_line_color = $1a // The number of found solutions .label count = 3 +.segment Code __start: { // conio_cursor_x = 0 lda #0 @@ -105,6 +111,7 @@ main: { jsr cputs // } rts + .segment Data s: .text " - n queens problem using backtracking -" .byte 0 s1: .text @"\nnumber of queens:" @@ -112,6 +119,7 @@ main: { s2: .text @"\n\nsolutions: " .byte 0 } +.segment Code // Set the cursor to the specified position // gotoxy(byte register(X) y) gotoxy: { @@ -778,6 +786,7 @@ print: { // for(char i=1;i<=QUEENS;++i) inc.z i jmp __b1 + .segment Data s: .text @"\n#" .byte 0 s1: .text @":\n " @@ -787,6 +796,7 @@ print: { s4: .text "-" .byte 0 } +.segment Code // Converts unsigned number value to a string representing it in RADIX format. // If the leading digits are zero they are not included in the string. // - value : The number to be converted to RADIX @@ -1347,6 +1357,7 @@ uctoa_append: { taz jmp __b1 } +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of hexadecimal digits diff --git a/src/test/ref/cpu-65ce02-eightqueens.log b/src/test/ref/cpu-65ce02-eightqueens.log index a853564d7..89e146372 100644 --- a/src/test/ref/cpu-65ce02-eightqueens.log +++ b/src/test/ref/cpu-65ce02-eightqueens.log @@ -7153,9 +7153,14 @@ ASSEMBLER BEFORE OPTIMIZATION // This is an iterative solution. // Upstart .cpu _65ce02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65ce02-eightqueens.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -7175,6 +7180,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label conio_line_color = $1a // The number of found solutions .label count = 3 +.segment Code // __start __start: { jmp __init1 @@ -7353,6 +7359,7 @@ main: { __breturn: // [32] return rts + .segment Data s: .text " - n queens problem using backtracking -" .byte 0 s1: .text @"\nnumber of queens:" @@ -7360,6 +7367,7 @@ main: { s2: .text @"\n\nsolutions: " .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -8510,6 +8518,7 @@ print: { __b1_from___b14: // [198] phi print::i#2 = print::i#1 [phi:print::@14->print::@1#0] -- register_copy jmp __b1 + .segment Data s: .text @"\n#" .byte 0 s1: .text @":\n " @@ -8519,6 +8528,7 @@ print: { s4: .text "-" .byte 0 } +.segment Code // ultoa // Converts unsigned number value to a string representing it in RADIX format. // If the leading digits are zero they are not included in the string. @@ -9400,6 +9410,7 @@ uctoa_append: { jmp __b1 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of hexadecimal digits @@ -10292,9 +10303,14 @@ Score: 1297303 // This is an iterative solution. // Upstart .cpu _65ce02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65ce02-eightqueens.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -10314,6 +10330,7 @@ Score: 1297303 .label conio_line_color = $1a // The number of found solutions .label count = 3 +.segment Code // __start __start: { // __start::__init1 @@ -10461,6 +10478,7 @@ main: { // } // [32] return rts + .segment Data s: .text " - n queens problem using backtracking -" .byte 0 s1: .text @"\nnumber of queens:" @@ -10468,6 +10486,7 @@ main: { s2: .text @"\n\nsolutions: " .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -11521,6 +11540,7 @@ print: { // [198] phi from print::@14 to print::@1 [phi:print::@14->print::@1] // [198] phi print::i#2 = print::i#1 [phi:print::@14->print::@1#0] -- register_copy jmp __b1 + .segment Data s: .text @"\n#" .byte 0 s1: .text @":\n " @@ -11530,6 +11550,7 @@ print: { s4: .text "-" .byte 0 } +.segment Code // ultoa // Converts unsigned number value to a string representing it in RADIX format. // If the leading digits are zero they are not included in the string. @@ -12371,6 +12392,7 @@ uctoa_append: { jmp __b1 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of hexadecimal digits diff --git a/src/test/ref/cpu-65ce02.asm b/src/test/ref/cpu-65ce02.asm index 8bfe3bb0b..6b99c074b 100644 --- a/src/test/ref/cpu-65ce02.asm +++ b/src/test/ref/cpu-65ce02.asm @@ -1,10 +1,16 @@ // Test the 65CE02 CPU // A program that uses 65CE02 instructions .cpu _65ce02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65ce02.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // a = SCREEN[0] lda SCREEN diff --git a/src/test/ref/cpu-65ce02.log b/src/test/ref/cpu-65ce02.log index ba71a0f5c..80cc1c97d 100644 --- a/src/test/ref/cpu-65ce02.log +++ b/src/test/ref/cpu-65ce02.log @@ -125,11 +125,17 @@ ASSEMBLER BEFORE OPTIMIZATION // A program that uses 65CE02 instructions // Upstart .cpu _65ce02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65ce02.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] main::a#0 = *SCREEN -- vbsaa=_deref_pbsc1 @@ -179,11 +185,17 @@ Score: 24 // A program that uses 65CE02 instructions // Upstart .cpu _65ce02 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cpu-65ce02.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // a = SCREEN[0] diff --git a/src/test/ref/cstyle-decl-function-intrinsic.asm b/src/test/ref/cstyle-decl-function-intrinsic.asm index d215bfb38..ff5dc43ed 100644 --- a/src/test/ref/cstyle-decl-function-intrinsic.asm +++ b/src/test/ref/cstyle-decl-function-intrinsic.asm @@ -1,7 +1,13 @@ // Test declaration of intrinsic without body -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cstyle-decl-function-intrinsic.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code // Definition of main() main: { // } diff --git a/src/test/ref/cstyle-decl-function-intrinsic.log b/src/test/ref/cstyle-decl-function-intrinsic.log index f313fa6dc..32a015e85 100644 --- a/src/test/ref/cstyle-decl-function-intrinsic.log +++ b/src/test/ref/cstyle-decl-function-intrinsic.log @@ -63,10 +63,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test declaration of intrinsic without body // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cstyle-decl-function-intrinsic.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main // Definition of main() main: { @@ -95,10 +101,16 @@ Score: 6 // File Comments // Test declaration of intrinsic without body // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cstyle-decl-function-intrinsic.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main // Definition of main() main: { diff --git a/src/test/ref/cstyle-decl-function.asm b/src/test/ref/cstyle-decl-function.asm index 04b429ef8..9acb332fe 100644 --- a/src/test/ref/cstyle-decl-function.asm +++ b/src/test/ref/cstyle-decl-function.asm @@ -1,8 +1,14 @@ // Test declarations without body -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cstyle-decl-function.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code // Definition of main() main: { // sum('a', 2) diff --git a/src/test/ref/cstyle-decl-function.log b/src/test/ref/cstyle-decl-function.log index 147410289..3348f4fdb 100644 --- a/src/test/ref/cstyle-decl-function.log +++ b/src/test/ref/cstyle-decl-function.log @@ -224,11 +224,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test declarations without body // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cstyle-decl-function.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main // Definition of main() main: { @@ -328,11 +334,17 @@ Score: 48 // File Comments // Test declarations without body // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cstyle-decl-function.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main // Definition of main() main: { diff --git a/src/test/ref/cstyle-decl-var-multiple.asm b/src/test/ref/cstyle-decl-var-multiple.asm index ff5127f53..132f979bd 100644 --- a/src/test/ref/cstyle-decl-var-multiple.asm +++ b/src/test/ref/cstyle-decl-var-multiple.asm @@ -1,8 +1,14 @@ // Test legal definition of multiple local variables with the same name -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cstyle-decl-var-multiple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code // And a little code using them main: { .label c1 = 2 diff --git a/src/test/ref/cstyle-decl-var-multiple.log b/src/test/ref/cstyle-decl-var-multiple.log index 4f2ad0e04..25bbc7a9b 100644 --- a/src/test/ref/cstyle-decl-var-multiple.log +++ b/src/test/ref/cstyle-decl-var-multiple.log @@ -221,11 +221,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test legal definition of multiple local variables with the same name // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cstyle-decl-var-multiple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main // And a little code using them main: { @@ -331,11 +337,17 @@ Score: 1951 // File Comments // Test legal definition of multiple local variables with the same name // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cstyle-decl-var-multiple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main // And a little code using them main: { diff --git a/src/test/ref/cstyle-decl-var.asm b/src/test/ref/cstyle-decl-var.asm index 2f51996bf..045290a12 100644 --- a/src/test/ref/cstyle-decl-var.asm +++ b/src/test/ref/cstyle-decl-var.asm @@ -1,9 +1,15 @@ // Test declarations of variables without definition -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cstyle-decl-var.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // The actual declarations .label SCREEN = $400 +.segment Code // And a little code using them main: { // SCREEN[idx++] = 'c' diff --git a/src/test/ref/cstyle-decl-var.log b/src/test/ref/cstyle-decl-var.log index b046d6653..e6e043184 100644 --- a/src/test/ref/cstyle-decl-var.log +++ b/src/test/ref/cstyle-decl-var.log @@ -141,12 +141,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test declarations of variables without definition // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cstyle-decl-var.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The actual declarations .label SCREEN = $400 +.segment Code // main // And a little code using them main: { @@ -186,12 +192,18 @@ Score: 24 // File Comments // Test declarations of variables without definition // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="cstyle-decl-var.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The actual declarations .label SCREEN = $400 +.segment Code // main // And a little code using them main: { diff --git a/src/test/ref/danny-joystick-problem.asm b/src/test/ref/danny-joystick-problem.asm index a123a87af..134eaca01 100644 --- a/src/test/ref/danny-joystick-problem.asm +++ b/src/test/ref/danny-joystick-problem.asm @@ -1,12 +1,18 @@ // Tests problem writing/reading joystick encountered by Danny Spijksma // https://www.protovision.games/hardw/build4player.php?language=en&fbclid=IwAR1MJLgQjOU0zVa0ax2aNeGa-xVbE9IGY9zC6b6eInTV4HQzoUAoCPoXu14 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="danny-joystick-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 .label SCREEN = $400 +.segment Code main: { // (CIA2->PORT_B) &= 0x7f lda #$7f diff --git a/src/test/ref/danny-joystick-problem.log b/src/test/ref/danny-joystick-problem.log index 05a39f117..7e5a67921 100644 --- a/src/test/ref/danny-joystick-problem.log +++ b/src/test/ref/danny-joystick-problem.log @@ -97,14 +97,20 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests problem writing/reading joystick encountered by Danny Spijksma // https://www.protovision.games/hardw/build4player.php?language=en&fbclid=IwAR1MJLgQjOU0zVa0ax2aNeGa-xVbE9IGY9zC6b6eInTV4HQzoUAoCPoXu14 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="danny-joystick-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 .label SCREEN = $400 +.segment Code // main main: { // [0] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_B) = *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_B) & $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 @@ -149,14 +155,20 @@ Score: 26 // Tests problem writing/reading joystick encountered by Danny Spijksma // https://www.protovision.games/hardw/build4player.php?language=en&fbclid=IwAR1MJLgQjOU0zVa0ax2aNeGa-xVbE9IGY9zC6b6eInTV4HQzoUAoCPoXu14 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="danny-joystick-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 .label SCREEN = $400 +.segment Code // main main: { // (CIA2->PORT_B) &= 0x7f diff --git a/src/test/ref/declared-memory-var-0.asm b/src/test/ref/declared-memory-var-0.asm index b7863433d..3638d1fa5 100644 --- a/src/test/ref/declared-memory-var-0.asm +++ b/src/test/ref/declared-memory-var-0.asm @@ -1,8 +1,14 @@ // Test declaring a variable as "__mem __notssa", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: @@ -21,4 +27,5 @@ main: { // } rts } +.segment Data idx: .byte 0 diff --git a/src/test/ref/declared-memory-var-0.log b/src/test/ref/declared-memory-var-0.log index 15b908df8..32b2193ac 100644 --- a/src/test/ref/declared-memory-var-0.log +++ b/src/test/ref/declared-memory-var-0.log @@ -125,11 +125,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test declaring a variable as "__mem __notssa", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -163,6 +169,7 @@ main: { rts } // File Data +.segment Data idx: .byte 0 ASSEMBLER OPTIMIZATIONS @@ -196,11 +203,17 @@ Score: 301 // File Comments // Test declaring a variable as "__mem __notssa", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -232,5 +245,6 @@ main: { rts } // File Data +.segment Data idx: .byte 0 diff --git a/src/test/ref/declared-memory-var-1.asm b/src/test/ref/declared-memory-var-1.asm index 5a1c8e6f4..777a93806 100644 --- a/src/test/ref/declared-memory-var-1.asm +++ b/src/test/ref/declared-memory-var-1.asm @@ -1,10 +1,16 @@ // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a pointer to a memory variable -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 .label idx_p = idx +.segment Code main: { ldx #0 __b1: @@ -23,4 +29,5 @@ main: { // } rts } +.segment Data idx: .byte 0 diff --git a/src/test/ref/declared-memory-var-1.log b/src/test/ref/declared-memory-var-1.log index 07659db6a..0d5dcf78f 100644 --- a/src/test/ref/declared-memory-var-1.log +++ b/src/test/ref/declared-memory-var-1.log @@ -135,12 +135,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a pointer to a memory variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label idx_p = idx +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -174,6 +180,7 @@ main: { rts } // File Data +.segment Data idx: .byte 0 ASSEMBLER OPTIMIZATIONS @@ -209,12 +216,18 @@ Score: 301 // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a pointer to a memory variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label idx_p = idx +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -246,5 +259,6 @@ main: { rts } // File Data +.segment Data idx: .byte 0 diff --git a/src/test/ref/declared-memory-var-2.asm b/src/test/ref/declared-memory-var-2.asm index 2318c1090..f961ba14d 100644 --- a/src/test/ref/declared-memory-var-2.asm +++ b/src/test/ref/declared-memory-var-2.asm @@ -1,9 +1,15 @@ // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a memory variable containing a pointer -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: @@ -30,4 +36,5 @@ main: { // } rts } +.segment Data cursor: .word SCREEN diff --git a/src/test/ref/declared-memory-var-2.log b/src/test/ref/declared-memory-var-2.log index 8ce675cca..b34518c47 100644 --- a/src/test/ref/declared-memory-var-2.log +++ b/src/test/ref/declared-memory-var-2.log @@ -130,11 +130,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a memory variable containing a pointer // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -176,6 +182,7 @@ main: { rts } // File Data +.segment Data cursor: .word SCREEN ASSEMBLER OPTIMIZATIONS @@ -210,11 +217,17 @@ Score: 536 // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a memory variable containing a pointer // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -254,5 +267,6 @@ main: { rts } // File Data +.segment Data cursor: .word SCREEN diff --git a/src/test/ref/declared-memory-var-3.asm b/src/test/ref/declared-memory-var-3.asm index 7554b9219..1acc1e366 100644 --- a/src/test/ref/declared-memory-var-3.asm +++ b/src/test/ref/declared-memory-var-3.asm @@ -1,9 +1,15 @@ // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a memory variable struct value -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_FOO_THING2 = 1 +.segment Code main: { .label SCREEN = $400 .label barp = bar @@ -16,4 +22,5 @@ main: { // } rts } +.segment Data bar: .byte 'a', 'b' diff --git a/src/test/ref/declared-memory-var-3.log b/src/test/ref/declared-memory-var-3.log index da13fb510..f93a0cd6d 100644 --- a/src/test/ref/declared-memory-var-3.log +++ b/src/test/ref/declared-memory-var-3.log @@ -133,11 +133,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a memory variable struct value // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_FOO_THING2 = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -155,6 +161,7 @@ main: { rts } // File Data +.segment Data bar: .byte 'a', 'b' ASSEMBLER OPTIMIZATIONS @@ -181,11 +188,17 @@ Score: 22 // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a memory variable struct value // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_FOO_THING2 = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -204,5 +217,6 @@ main: { rts } // File Data +.segment Data bar: .byte 'a', 'b' diff --git a/src/test/ref/declared-memory-var-4.asm b/src/test/ref/declared-memory-var-4.asm index f1b2605e7..29f73745b 100644 --- a/src/test/ref/declared-memory-var-4.asm +++ b/src/test/ref/declared-memory-var-4.asm @@ -1,10 +1,16 @@ // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a memory variable struct value - containing a fixed size array -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_FOO_THING2 = 1 .const OFFSET_STRUCT_FOO_THING3 = 2 +.segment Code main: { .label SCREEN = $400 .label barp = bar @@ -29,6 +35,7 @@ main: { // } rts } +.segment Data bar: .byte 'a', 'b' .text "qwe" .byte 0 diff --git a/src/test/ref/declared-memory-var-4.log b/src/test/ref/declared-memory-var-4.log index 448baddbd..ac030c95a 100644 --- a/src/test/ref/declared-memory-var-4.log +++ b/src/test/ref/declared-memory-var-4.log @@ -220,12 +220,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a memory variable struct value - containing a fixed size array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_FOO_THING2 = 1 .const OFFSET_STRUCT_FOO_THING3 = 2 +.segment Code // main main: { .label SCREEN = $400 @@ -267,6 +273,7 @@ main: { rts } // File Data +.segment Data bar: .byte 'a', 'b' .text "qwe" .byte 0 @@ -311,12 +318,18 @@ Score: 242 // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a memory variable struct value - containing a fixed size array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_FOO_THING2 = 1 .const OFFSET_STRUCT_FOO_THING3 = 2 +.segment Code // main main: { .label SCREEN = $400 @@ -358,6 +371,7 @@ main: { rts } // File Data +.segment Data bar: .byte 'a', 'b' .text "qwe" .byte 0 diff --git a/src/test/ref/declared-memory-var-5.asm b/src/test/ref/declared-memory-var-5.asm index 596a48c49..8b5f94874 100644 --- a/src/test/ref/declared-memory-var-5.asm +++ b/src/test/ref/declared-memory-var-5.asm @@ -1,9 +1,15 @@ // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a memory variable struct value -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_FOO_THING2 = 1 +.segment Code main: { .label SCREEN = $400 // SCREEN[i++] = bar.thing1 @@ -15,4 +21,5 @@ main: { // } rts } +.segment Data bar: .byte 'a', 'b' diff --git a/src/test/ref/declared-memory-var-5.log b/src/test/ref/declared-memory-var-5.log index 990cb34de..d73ff3aeb 100644 --- a/src/test/ref/declared-memory-var-5.log +++ b/src/test/ref/declared-memory-var-5.log @@ -109,11 +109,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a memory variable struct value // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_FOO_THING2 = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -130,6 +136,7 @@ main: { rts } // File Data +.segment Data bar: .byte 'a', 'b' ASSEMBLER OPTIMIZATIONS @@ -155,11 +162,17 @@ Score: 22 // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a memory variable struct value // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_FOO_THING2 = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -177,5 +190,6 @@ main: { rts } // File Data +.segment Data bar: .byte 'a', 'b' diff --git a/src/test/ref/declared-memory-var-6.asm b/src/test/ref/declared-memory-var-6.asm index b2bff2918..72d4f2aa8 100644 --- a/src/test/ref/declared-memory-var-6.asm +++ b/src/test/ref/declared-memory-var-6.asm @@ -1,8 +1,14 @@ // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .const reg_zp_flex = '.' .const reg_mem_flex = '.' diff --git a/src/test/ref/declared-memory-var-6.log b/src/test/ref/declared-memory-var-6.log index 9ed93716f..9f4d80b5e 100644 --- a/src/test/ref/declared-memory-var-6.log +++ b/src/test/ref/declared-memory-var-6.log @@ -398,11 +398,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .const reg_zp_flex = '.' @@ -647,11 +653,17 @@ Score: 125 // File Comments // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .const reg_zp_flex = '.' diff --git a/src/test/ref/declared-memory-var-7.asm b/src/test/ref/declared-memory-var-7.asm index acc0a81de..05f06bf80 100644 --- a/src/test/ref/declared-memory-var-7.asm +++ b/src/test/ref/declared-memory-var-7.asm @@ -1,10 +1,16 @@ // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a zeropage notregister variable -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label SCREEN = $400 .label idx = 2 +.segment Code __start: { // idx lda #0 diff --git a/src/test/ref/declared-memory-var-7.log b/src/test/ref/declared-memory-var-7.log index 6a98ec7ea..efec4634d 100644 --- a/src/test/ref/declared-memory-var-7.log +++ b/src/test/ref/declared-memory-var-7.log @@ -155,12 +155,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a zeropage notregister variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label idx = 2 +.segment Code // __start __start: { jmp __init1 @@ -259,12 +265,18 @@ Score: 288 // Test declaring a variable as "memory", meaning it will be stored in memory and accessed through an implicit pointer (using load/store) // Test a zeropage notregister variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label idx = 2 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/declared-memory-var-8.asm b/src/test/ref/declared-memory-var-8.asm index 47b7b4d3d..49db6af2f 100644 --- a/src/test/ref/declared-memory-var-8.asm +++ b/src/test/ref/declared-memory-var-8.asm @@ -1,10 +1,16 @@ // Test declaring a variable as "memory", meaning it will be stored in main memory // Test a fixed main memory address __notssa variable -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label SCREEN = $400 .label idx = $1000 +.segment Code __start: { // idx lda #0 diff --git a/src/test/ref/declared-memory-var-8.log b/src/test/ref/declared-memory-var-8.log index 6417c7f0a..a8c3ed7ca 100644 --- a/src/test/ref/declared-memory-var-8.log +++ b/src/test/ref/declared-memory-var-8.log @@ -153,12 +153,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Test declaring a variable as "memory", meaning it will be stored in main memory // Test a fixed main memory address __notssa variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label idx = $1000 +.segment Code // __start __start: { jmp __init1 @@ -257,12 +263,18 @@ Score: 319 // Test declaring a variable as "memory", meaning it will be stored in main memory // Test a fixed main memory address __notssa variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-memory-var-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label idx = $1000 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/declared-ssa-var-0.asm b/src/test/ref/declared-ssa-var-0.asm index 9e09d944c..11b013106 100644 --- a/src/test/ref/declared-ssa-var-0.asm +++ b/src/test/ref/declared-ssa-var-0.asm @@ -1,12 +1,18 @@ // Tests declaring variables as __ssa / __notssa -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-ssa-var-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label SCREEN1 = $400 .label SCREEN2 = $400+$28 .label SCREEN3 = $400+$50 .label SCREEN4 = $400+$78 .label idx_nssa_g = 2 +.segment Code __start: { // idx_nssa_g lda #0 diff --git a/src/test/ref/declared-ssa-var-0.log b/src/test/ref/declared-ssa-var-0.log index 894bc3613..71f7aad51 100644 --- a/src/test/ref/declared-ssa-var-0.log +++ b/src/test/ref/declared-ssa-var-0.log @@ -483,15 +483,21 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests declaring variables as __ssa / __notssa // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-ssa-var-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN1 = $400 .label SCREEN2 = $400+$28 .label SCREEN3 = $400+$50 .label SCREEN4 = $400+$78 .label idx_nssa_g = 2 +.segment Code // __start __start: { jmp __init1 @@ -754,15 +760,21 @@ Score: 974 // File Comments // Tests declaring variables as __ssa / __notssa // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="declared-ssa-var-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN1 = $400 .label SCREEN2 = $400+$28 .label SCREEN3 = $400+$50 .label SCREEN4 = $400+$78 .label idx_nssa_g = 2 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/deep-nesting.asm b/src/test/ref/deep-nesting.asm index 50d82f6ae..36325d0b7 100644 --- a/src/test/ref/deep-nesting.asm +++ b/src/test/ref/deep-nesting.asm @@ -1,7 +1,13 @@ // Test that the compiler handles deep nesting well -- mainly a performance issue. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="deep-nesting.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 // f1(0) diff --git a/src/test/ref/deep-nesting.log b/src/test/ref/deep-nesting.log index a604705b2..be5354b3a 100644 --- a/src/test/ref/deep-nesting.log +++ b/src/test/ref/deep-nesting.log @@ -7361,10 +7361,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test that the compiler handles deep nesting well -- mainly a performance issue. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="deep-nesting.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -9382,10 +9388,16 @@ Score: 1200 // File Comments // Test that the compiler handles deep nesting well -- mainly a performance issue. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="deep-nesting.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/default-font.asm b/src/test/ref/default-font.asm index 439270dcb..936e70f57 100644 --- a/src/test/ref/default-font.asm +++ b/src/test/ref/default-font.asm @@ -1,8 +1,14 @@ // Show default font on screen -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="default-font.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label screen = 4 .label ch = 3 diff --git a/src/test/ref/default-font.log b/src/test/ref/default-font.log index 6d165273f..902df538b 100644 --- a/src/test/ref/default-font.log +++ b/src/test/ref/default-font.log @@ -455,11 +455,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Show default font on screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="default-font.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label screen = 4 @@ -664,11 +670,17 @@ Score: 4723 // File Comments // Show default font on screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="default-font.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label screen = 4 diff --git a/src/test/ref/deref-to-derefidx-2.asm b/src/test/ref/deref-to-derefidx-2.asm index 0321a3ca5..02a91b9fb 100644 --- a/src/test/ref/deref-to-derefidx-2.asm +++ b/src/test/ref/deref-to-derefidx-2.asm @@ -1,9 +1,15 @@ // Tests optimizing derefs of *(ptr+b) to ptr[b - even when a noop-cast is needed -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="deref-to-derefidx-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 .label screen_idx = 4 +.segment Code main: { // print(msg1) lda #0 @@ -40,5 +46,6 @@ print: { // } rts } +.segment Data msg1: .byte 'a', 'b', 'c', 'd' msg2: .byte '1', '2', '3', '4' diff --git a/src/test/ref/deref-to-derefidx-2.log b/src/test/ref/deref-to-derefidx-2.log index bb7949ee0..df782c4f6 100644 --- a/src/test/ref/deref-to-derefidx-2.log +++ b/src/test/ref/deref-to-derefidx-2.log @@ -223,12 +223,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests optimizing derefs of *(ptr+b) to ptr[b - even when a noop-cast is needed // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="deref-to-derefidx-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label screen_idx = 4 +.segment Code // main main: { // [1] call print @@ -288,6 +294,7 @@ print: { rts } // File Data +.segment Data msg1: .byte 'a', 'b', 'c', 'd' msg2: .byte '1', '2', '3', '4' @@ -329,12 +336,18 @@ Score: 86 // File Comments // Tests optimizing derefs of *(ptr+b) to ptr[b - even when a noop-cast is needed // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="deref-to-derefidx-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label screen_idx = 4 +.segment Code // main main: { // print(msg1) @@ -391,6 +404,7 @@ print: { rts } // File Data +.segment Data msg1: .byte 'a', 'b', 'c', 'd' msg2: .byte '1', '2', '3', '4' diff --git a/src/test/ref/deref-to-derefidx.asm b/src/test/ref/deref-to-derefidx.asm index 0fcadfd7f..0e510e909 100644 --- a/src/test/ref/deref-to-derefidx.asm +++ b/src/test/ref/deref-to-derefidx.asm @@ -1,8 +1,14 @@ // Tests optimizing derefs of *(ptr+b) to ptr[b] -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="deref-to-derefidx.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // print(msg1) ldx #0 @@ -32,5 +38,6 @@ print: { // } rts } +.segment Data msg1: .byte 'a', 'b', 'c', 'd' msg2: .byte '1', '2', '3', '4' diff --git a/src/test/ref/deref-to-derefidx.log b/src/test/ref/deref-to-derefidx.log index f524245d4..e259b9c0c 100644 --- a/src/test/ref/deref-to-derefidx.log +++ b/src/test/ref/deref-to-derefidx.log @@ -206,11 +206,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests optimizing derefs of *(ptr+b) to ptr[b] // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="deref-to-derefidx.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] call print @@ -262,6 +268,7 @@ print: { rts } // File Data +.segment Data msg1: .byte 'a', 'b', 'c', 'd' msg2: .byte '1', '2', '3', '4' @@ -301,11 +308,17 @@ Score: 60 // File Comments // Tests optimizing derefs of *(ptr+b) to ptr[b] // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="deref-to-derefidx.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // print(msg1) @@ -354,6 +367,7 @@ print: { rts } // File Data +.segment Data msg1: .byte 'a', 'b', 'c', 'd' msg2: .byte '1', '2', '3', '4' diff --git a/src/test/ref/derefidx-word-0.asm b/src/test/ref/derefidx-word-0.asm index 6b4df3dd0..2fe2fc498 100644 --- a/src/test/ref/derefidx-word-0.asm +++ b/src/test/ref/derefidx-word-0.asm @@ -1,7 +1,13 @@ // Tests that array-indexing by a word variable is turned into pointer addition -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="derefidx-word-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 .label i = 2 diff --git a/src/test/ref/derefidx-word-0.log b/src/test/ref/derefidx-word-0.log index 2ed015a1d..75d14bb09 100644 --- a/src/test/ref/derefidx-word-0.log +++ b/src/test/ref/derefidx-word-0.log @@ -128,10 +128,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that array-indexing by a word variable is turned into pointer addition // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="derefidx-word-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -219,10 +225,16 @@ Score: 746 // File Comments // Tests that array-indexing by a word variable is turned into pointer addition // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="derefidx-word-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/derefidx-word-1.asm b/src/test/ref/derefidx-word-1.asm index 0ed318725..5f64d7c0d 100644 --- a/src/test/ref/derefidx-word-1.asm +++ b/src/test/ref/derefidx-word-1.asm @@ -1,7 +1,13 @@ // Tests that array-indexing by a constant word is turned into a constant pointer -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="derefidx-word-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 // screen[40*10] = 'a' diff --git a/src/test/ref/derefidx-word-1.log b/src/test/ref/derefidx-word-1.log index 488adce49..c335aff45 100644 --- a/src/test/ref/derefidx-word-1.log +++ b/src/test/ref/derefidx-word-1.log @@ -79,10 +79,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that array-indexing by a constant word is turned into a constant pointer // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="derefidx-word-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -115,10 +121,16 @@ Score: 12 // File Comments // Tests that array-indexing by a constant word is turned into a constant pointer // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="derefidx-word-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/derefidx-word-2.asm b/src/test/ref/derefidx-word-2.asm index d0f092f9b..9f8071c84 100644 --- a/src/test/ref/derefidx-word-2.asm +++ b/src/test/ref/derefidx-word-2.asm @@ -1,7 +1,13 @@ // Tests that array-indexing by a word variable that is a sum of a constant word and a byte is turned back into derefidx -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="derefidx-word-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 ldx #0 diff --git a/src/test/ref/derefidx-word-2.log b/src/test/ref/derefidx-word-2.log index c000d5b33..ff6466adb 100644 --- a/src/test/ref/derefidx-word-2.log +++ b/src/test/ref/derefidx-word-2.log @@ -132,10 +132,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that array-indexing by a word variable that is a sum of a constant word and a byte is turned back into derefidx // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="derefidx-word-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -195,10 +201,16 @@ Score: 161 // File Comments // Tests that array-indexing by a word variable that is a sum of a constant word and a byte is turned back into derefidx // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="derefidx-word-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/divide-2s.asm b/src/test/ref/divide-2s.asm index ce66dc17c..057f695f8 100644 --- a/src/test/ref/divide-2s.asm +++ b/src/test/ref/divide-2s.asm @@ -1,7 +1,13 @@ // Check that division by factors of 2 is converted to shifts -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="divide-2s.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 diff --git a/src/test/ref/divide-2s.log b/src/test/ref/divide-2s.log index 77edee9b7..9d3aebca9 100644 --- a/src/test/ref/divide-2s.log +++ b/src/test/ref/divide-2s.log @@ -241,10 +241,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Check that division by factors of 2 is converted to shifts // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="divide-2s.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -343,10 +349,16 @@ Score: 661 // File Comments // Check that division by factors of 2 is converted to shifts // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="divide-2s.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/double-assignment.asm b/src/test/ref/double-assignment.asm index 6a66510ff..29e63bac8 100644 --- a/src/test/ref/double-assignment.asm +++ b/src/test/ref/double-assignment.asm @@ -1,7 +1,13 @@ // Test that a double-assignment works. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="double-assignment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const a = $c .label screen = $400 diff --git a/src/test/ref/double-assignment.log b/src/test/ref/double-assignment.log index 285a985a7..3e8da43b1 100644 --- a/src/test/ref/double-assignment.log +++ b/src/test/ref/double-assignment.log @@ -107,10 +107,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test that a double-assignment works. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="double-assignment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const a = $c @@ -152,10 +158,16 @@ Score: 16 // File Comments // Test that a double-assignment works. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="double-assignment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const a = $c diff --git a/src/test/ref/double-import.asm b/src/test/ref/double-import.asm index 98e4a4039..4710e2b0a 100644 --- a/src/test/ref/double-import.asm +++ b/src/test/ref/double-import.asm @@ -1,8 +1,14 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="double-import.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const RED = 2 .label BG_COLOR = $d021 +.segment Code main: { // *BG_COLOR = RED lda #RED diff --git a/src/test/ref/double-import.log b/src/test/ref/double-import.log index 9cc30ac68..0f863ff21 100644 --- a/src/test/ref/double-import.log +++ b/src/test/ref/double-import.log @@ -66,12 +66,18 @@ Uplifting [] best 15 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="double-import.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const RED = 2 .label BG_COLOR = $d021 +.segment Code // main main: { // [0] *BG_COLOR = RED -- _deref_pbuc1=vbuc2 @@ -103,12 +109,18 @@ Score: 12 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="double-import.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const RED = 2 .label BG_COLOR = $d021 +.segment Code // main main: { // *BG_COLOR = RED diff --git a/src/test/ref/double-indexing-arrays.asm b/src/test/ref/double-indexing-arrays.asm index 8b434429e..207a77ef1 100644 --- a/src/test/ref/double-indexing-arrays.asm +++ b/src/test/ref/double-indexing-arrays.asm @@ -1,9 +1,15 @@ // Tests that constant offset indexing into arrays is handled correctly -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="double-indexing-arrays.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 .label COLS = $d800 +.segment Code main: { ldx #0 __b1: @@ -49,6 +55,7 @@ main: { // } rts } +.segment Data MAPDATA: .fill $3e8, 0 COLORMAP1: .fill $100, 0 COLORMAP2: .fill $100, 0 diff --git a/src/test/ref/double-indexing-arrays.log b/src/test/ref/double-indexing-arrays.log index 275f997b1..35dbc95ea 100644 --- a/src/test/ref/double-indexing-arrays.log +++ b/src/test/ref/double-indexing-arrays.log @@ -340,12 +340,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that constant offset indexing into arrays is handled correctly // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="double-indexing-arrays.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label COLS = $d800 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -406,6 +412,7 @@ main: { rts } // File Data +.segment Data MAPDATA: .fill $3e8, 0 COLORMAP1: .fill $100, 0 COLORMAP2: .fill $100, 0 @@ -443,12 +450,18 @@ Score: 1266 // File Comments // Tests that constant offset indexing into arrays is handled correctly // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="double-indexing-arrays.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label COLS = $d800 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -515,6 +528,7 @@ main: { rts } // File Data +.segment Data MAPDATA: .fill $3e8, 0 COLORMAP1: .fill $100, 0 COLORMAP2: .fill $100, 0 diff --git a/src/test/ref/duplicate-loop-problem.asm b/src/test/ref/duplicate-loop-problem.asm index 1e39641d3..30ce05091 100644 --- a/src/test/ref/duplicate-loop-problem.asm +++ b/src/test/ref/duplicate-loop-problem.asm @@ -1,9 +1,15 @@ // Duplicate Loop Problem from Richard-William Loerakker // Resulted in infinite loop in loop depth analysis -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="duplicate-loop-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label DC00 = $dc00 +.segment Code main: { __b1: // key = *DC00 diff --git a/src/test/ref/duplicate-loop-problem.log b/src/test/ref/duplicate-loop-problem.log index 384b9aab7..35899ea0b 100644 --- a/src/test/ref/duplicate-loop-problem.log +++ b/src/test/ref/duplicate-loop-problem.log @@ -164,11 +164,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Duplicate Loop Problem from Richard-William Loerakker // Resulted in infinite loop in loop depth analysis // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="duplicate-loop-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label DC00 = $dc00 +.segment Code // main main: { jmp __b1 @@ -232,11 +238,17 @@ Score: 1730 // Duplicate Loop Problem from Richard-William Loerakker // Resulted in infinite loop in loop depth analysis // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="duplicate-loop-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label DC00 = $dc00 +.segment Code // main main: { // main::@1 diff --git a/src/test/ref/dword.asm b/src/test/ref/dword.asm index 62c722308..98b1f6631 100644 --- a/src/test/ref/dword.asm +++ b/src/test/ref/dword.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="dword.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const a = $ee6b2800 .label SCREEN = $400 diff --git a/src/test/ref/dword.log b/src/test/ref/dword.log index 4bd8fcaa6..b67bb5395 100644 --- a/src/test/ref/dword.log +++ b/src/test/ref/dword.log @@ -140,10 +140,16 @@ Allocated (was zp[4]:3) zp[4]:2 [ main::b#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="dword.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const a = $ee6b2800 @@ -226,10 +232,16 @@ Score: 471 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="dword.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const a = $ee6b2800 diff --git a/src/test/ref/empty-function-0.asm b/src/test/ref/empty-function-0.asm index a8d630e7b..dfcd6dec2 100644 --- a/src/test/ref/empty-function-0.asm +++ b/src/test/ref/empty-function-0.asm @@ -1,9 +1,15 @@ // Test removal of empty function -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="empty-function-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const v = 7 .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = v lda #v diff --git a/src/test/ref/empty-function-0.log b/src/test/ref/empty-function-0.log index 18abf94b7..147bc7dc9 100644 --- a/src/test/ref/empty-function-0.log +++ b/src/test/ref/empty-function-0.log @@ -150,12 +150,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test removal of empty function // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="empty-function-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const v = 7 .label SCREEN = $400 +.segment Code // main main: { jmp __b1 @@ -194,12 +200,18 @@ Score: 12 // File Comments // Test removal of empty function // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="empty-function-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const v = 7 .label SCREEN = $400 +.segment Code // main main: { // main::@1 diff --git a/src/test/ref/empty-function-1.asm b/src/test/ref/empty-function-1.asm index 3975f34ef..11775a957 100644 --- a/src/test/ref/empty-function-1.asm +++ b/src/test/ref/empty-function-1.asm @@ -1,8 +1,14 @@ // Test removal of empty function -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="empty-function-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = 'x' lda #'x' diff --git a/src/test/ref/empty-function-1.log b/src/test/ref/empty-function-1.log index 3dd0a11f1..c669316c8 100644 --- a/src/test/ref/empty-function-1.log +++ b/src/test/ref/empty-function-1.log @@ -94,11 +94,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test removal of empty function // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="empty-function-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { jmp __b1 @@ -135,11 +141,17 @@ Score: 12 // File Comments // Test removal of empty function // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="empty-function-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // main::@1 diff --git a/src/test/ref/empty-function-2.asm b/src/test/ref/empty-function-2.asm index b87219678..15a8cb79a 100644 --- a/src/test/ref/empty-function-2.asm +++ b/src/test/ref/empty-function-2.asm @@ -1,8 +1,14 @@ // Test removal of empty function // main() should not be removed! -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="empty-function-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // } rts diff --git a/src/test/ref/empty-function-2.log b/src/test/ref/empty-function-2.log index dff33c09a..965714741 100644 --- a/src/test/ref/empty-function-2.log +++ b/src/test/ref/empty-function-2.log @@ -82,10 +82,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Test removal of empty function // main() should not be removed! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="empty-function-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { jmp __breturn @@ -114,10 +120,16 @@ Score: 6 // Test removal of empty function // main() should not be removed! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="empty-function-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // main::@return diff --git a/src/test/ref/emptyblock-error.asm b/src/test/ref/emptyblock-error.asm index 76fc43f53..51f9bc527 100644 --- a/src/test/ref/emptyblock-error.asm +++ b/src/test/ref/emptyblock-error.asm @@ -1,8 +1,14 @@ // Error cleaning up unused blocks -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="emptyblock-error.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label B = $1000 +.segment Code main: { __b1: // menu() diff --git a/src/test/ref/emptyblock-error.log b/src/test/ref/emptyblock-error.log index d243ff4dc..db14ff69f 100644 --- a/src/test/ref/emptyblock-error.log +++ b/src/test/ref/emptyblock-error.log @@ -190,11 +190,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Error cleaning up unused blocks // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="emptyblock-error.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label B = $1000 +.segment Code // main main: { // [1] phi from main main::@1 to main::@1 [phi:main/main::@1->main::@1] @@ -278,11 +284,17 @@ Score: 8551 // File Comments // Error cleaning up unused blocks // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="emptyblock-error.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label B = $1000 +.segment Code // main main: { // [1] phi from main main::@1 to main::@1 [phi:main/main::@1->main::@1] diff --git a/src/test/ref/encoding-atascii.asm b/src/test/ref/encoding-atascii.asm index e6e82b0ff..9a9c769ce 100644 --- a/src/test/ref/encoding-atascii.asm +++ b/src/test/ref/encoding-atascii.asm @@ -1,8 +1,14 @@ // Tests ATASCII encoding -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="encoding-atascii.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = TEXT[13] lda TEXT+$d @@ -14,5 +20,6 @@ main: { // } rts } +.segment Data TEXT: .text @"hello, world!\$9b" .byte 0 diff --git a/src/test/ref/encoding-atascii.log b/src/test/ref/encoding-atascii.log index f2dc5e883..6752a534b 100644 --- a/src/test/ref/encoding-atascii.log +++ b/src/test/ref/encoding-atascii.log @@ -98,11 +98,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests ATASCII encoding // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="encoding-atascii.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = *(TEXT+$d) -- _deref_pbuc1=_deref_pbuc2 @@ -119,6 +125,7 @@ main: { rts } // File Data +.segment Data TEXT: .text @"hello, world!\$9b" .byte 0 @@ -142,11 +149,17 @@ Score: 20 // File Comments // Tests ATASCII encoding // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="encoding-atascii.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // SCREEN[0] = TEXT[13] @@ -164,6 +177,7 @@ main: { rts } // File Data +.segment Data TEXT: .text @"hello, world!\$9b" .byte 0 diff --git a/src/test/ref/encoding-literal-char.asm b/src/test/ref/encoding-literal-char.asm index 43d1346ff..d4393f59c 100644 --- a/src/test/ref/encoding-literal-char.asm +++ b/src/test/ref/encoding-literal-char.asm @@ -1,7 +1,12 @@ // Tests encoding of literal chars -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="encoding-literal-char.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .encoding "petscii_mixed" .const cpm = 'A' .encoding "petscii_upper" @@ -11,6 +16,7 @@ .encoding "screencode_upper" .const csu = 'A' .label screen = $400 +.segment Code main: { // screen[idx++] = cpm lda #cpm @@ -39,6 +45,7 @@ main: { // } rts } +.segment Data .encoding "petscii_mixed" spm: .text "A" .byte 0 diff --git a/src/test/ref/encoding-literal-char.log b/src/test/ref/encoding-literal-char.log index 60c582f3f..48a9db63a 100644 --- a/src/test/ref/encoding-literal-char.log +++ b/src/test/ref/encoding-literal-char.log @@ -203,9 +203,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests encoding of literal chars // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="encoding-literal-char.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .encoding "petscii_mixed" .const cpm = 'A' @@ -216,6 +221,7 @@ ASSEMBLER BEFORE OPTIMIZATION .encoding "screencode_upper" .const csu = 'A' .label screen = $400 +.segment Code // main main: { // [0] *screen = cpm -- _deref_pbuc1=vbuc2 @@ -249,6 +255,7 @@ main: { rts } // File Data +.segment Data .encoding "petscii_mixed" spm: .text "A" .byte 0 @@ -289,9 +296,14 @@ Score: 62 // File Comments // Tests encoding of literal chars // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="encoding-literal-char.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .encoding "petscii_mixed" .const cpm = 'A' @@ -302,6 +314,7 @@ Score: 62 .encoding "screencode_upper" .const csu = 'A' .label screen = $400 +.segment Code // main main: { // screen[idx++] = cpm @@ -342,6 +355,7 @@ main: { rts } // File Data +.segment Data .encoding "petscii_mixed" spm: .text "A" .byte 0 diff --git a/src/test/ref/enum-0.asm b/src/test/ref/enum-0.asm index bfed1a488..4a64a83d9 100644 --- a/src/test/ref/enum-0.asm +++ b/src/test/ref/enum-0.asm @@ -1,8 +1,14 @@ // Test of simple enum - two-value enum -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const ON = 1 +.segment Code main: { .label SCREEN = $400 // *SCREEN = state diff --git a/src/test/ref/enum-0.log b/src/test/ref/enum-0.log index df0d1959c..1d4b5db30 100644 --- a/src/test/ref/enum-0.log +++ b/src/test/ref/enum-0.log @@ -74,11 +74,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test of simple enum - two-value enum // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const ON = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -114,11 +120,17 @@ Score: 12 // File Comments // Test of simple enum - two-value enum // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const ON = 1 +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/enum-1.asm b/src/test/ref/enum-1.asm index e4e086cc7..4138e0967 100644 --- a/src/test/ref/enum-1.asm +++ b/src/test/ref/enum-1.asm @@ -1,8 +1,14 @@ // Test of simple enum - three-value enum with specified integer values and increment -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const BROKEN = 9 +.segment Code main: { .label SCREEN = $400 // *SCREEN = state diff --git a/src/test/ref/enum-1.log b/src/test/ref/enum-1.log index 08d040142..0de1b2b69 100644 --- a/src/test/ref/enum-1.log +++ b/src/test/ref/enum-1.log @@ -77,11 +77,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test of simple enum - three-value enum with specified integer values and increment // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const BROKEN = 9 +.segment Code // main main: { .label SCREEN = $400 @@ -118,11 +124,17 @@ Score: 12 // File Comments // Test of simple enum - three-value enum with specified integer values and increment // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const BROKEN = 9 +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/enum-2.asm b/src/test/ref/enum-2.asm index 6efcd35b3..249b3e1a6 100644 --- a/src/test/ref/enum-2.asm +++ b/src/test/ref/enum-2.asm @@ -1,8 +1,14 @@ // Test of simple enum - char values with increment -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const B = 'b' +.segment Code main: { .label SCREEN = $400 // *SCREEN = letter diff --git a/src/test/ref/enum-2.log b/src/test/ref/enum-2.log index ca0633c23..29d11397a 100644 --- a/src/test/ref/enum-2.log +++ b/src/test/ref/enum-2.log @@ -75,11 +75,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test of simple enum - char values with increment // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const B = 'b' +.segment Code // main main: { .label SCREEN = $400 @@ -116,11 +122,17 @@ Score: 12 // File Comments // Test of simple enum - char values with increment // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const B = 'b' +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/enum-3.asm b/src/test/ref/enum-3.asm index 934bcc260..a2e8dee06 100644 --- a/src/test/ref/enum-3.asm +++ b/src/test/ref/enum-3.asm @@ -1,8 +1,14 @@ // Test of simple enum - value with complex calculation -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const BROKEN = 4*4+2+1 +.segment Code main: { .label SCREEN = $400 // *SCREEN = state diff --git a/src/test/ref/enum-3.log b/src/test/ref/enum-3.log index bc0ba33ab..09cfc194b 100644 --- a/src/test/ref/enum-3.log +++ b/src/test/ref/enum-3.log @@ -83,11 +83,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test of simple enum - value with complex calculation // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const BROKEN = 4*4+2+1 +.segment Code // main main: { .label SCREEN = $400 @@ -124,11 +130,17 @@ Score: 12 // File Comments // Test of simple enum - value with complex calculation // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const BROKEN = 4*4+2+1 +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/enum-4.asm b/src/test/ref/enum-4.asm index 895b24f3d..f0a0e75a3 100644 --- a/src/test/ref/enum-4.asm +++ b/src/test/ref/enum-4.asm @@ -1,7 +1,13 @@ // Test of simple enum - inline enum definitions -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const ON = 1 .label SCREEN = $400 diff --git a/src/test/ref/enum-4.log b/src/test/ref/enum-4.log index 3210c2554..ca39401b3 100644 --- a/src/test/ref/enum-4.log +++ b/src/test/ref/enum-4.log @@ -70,10 +70,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test of simple enum - inline enum definitions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const ON = 1 @@ -108,10 +114,16 @@ Score: 12 // File Comments // Test of simple enum - inline enum definitions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const ON = 1 diff --git a/src/test/ref/enum-5.asm b/src/test/ref/enum-5.asm index a4997bf1d..152f8535c 100644 --- a/src/test/ref/enum-5.asm +++ b/src/test/ref/enum-5.asm @@ -1,7 +1,13 @@ // Test of simple enum - multiple inline enum definitions -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const ON = 1 .label SCREEN = $400 diff --git a/src/test/ref/enum-5.log b/src/test/ref/enum-5.log index 91b665178..7f1ac6d9d 100644 --- a/src/test/ref/enum-5.log +++ b/src/test/ref/enum-5.log @@ -103,10 +103,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test of simple enum - multiple inline enum definitions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const ON = 1 @@ -161,10 +167,16 @@ Score: 30 // File Comments // Test of simple enum - multiple inline enum definitions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const ON = 1 diff --git a/src/test/ref/enum-6.asm b/src/test/ref/enum-6.asm index c5ef61185..41913e3d4 100644 --- a/src/test/ref/enum-6.asm +++ b/src/test/ref/enum-6.asm @@ -1,7 +1,13 @@ // Test of simple enum - anonymous enum definition -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const OFF = 0 .const ON = 1 diff --git a/src/test/ref/enum-6.log b/src/test/ref/enum-6.log index dffe3b6f7..cd4f343d6 100644 --- a/src/test/ref/enum-6.log +++ b/src/test/ref/enum-6.log @@ -95,10 +95,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test of simple enum - anonymous enum definition // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const OFF = 0 @@ -139,10 +145,16 @@ Score: 18 // File Comments // Test of simple enum - anonymous enum definition // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const OFF = 0 diff --git a/src/test/ref/enum-7.asm b/src/test/ref/enum-7.asm index 7dfaa9958..59c733cfa 100644 --- a/src/test/ref/enum-7.asm +++ b/src/test/ref/enum-7.asm @@ -1,8 +1,14 @@ // Test of simple enum - struct with enum -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const RED = 0 +.segment Code main: { .const button_size = $18 .label SCREEN = $400 diff --git a/src/test/ref/enum-7.log b/src/test/ref/enum-7.log index 2bc2e082a..7e0400704 100644 --- a/src/test/ref/enum-7.log +++ b/src/test/ref/enum-7.log @@ -92,11 +92,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test of simple enum - struct with enum // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const RED = 0 +.segment Code // main main: { .const button_size = $18 @@ -137,11 +143,17 @@ Score: 18 // File Comments // Test of simple enum - struct with enum // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const RED = 0 +.segment Code // main main: { .const button_size = $18 diff --git a/src/test/ref/enum-8.asm b/src/test/ref/enum-8.asm index c88ee4087..20e0ce4fd 100644 --- a/src/test/ref/enum-8.asm +++ b/src/test/ref/enum-8.asm @@ -1,8 +1,14 @@ // Test of simple enum - struct with inline anonymous enum -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const RED = 2 +.segment Code main: { .const button_size = $18 .label SCREEN = $400 diff --git a/src/test/ref/enum-8.log b/src/test/ref/enum-8.log index 86b13896f..61f5227c7 100644 --- a/src/test/ref/enum-8.log +++ b/src/test/ref/enum-8.log @@ -94,11 +94,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test of simple enum - struct with inline anonymous enum // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const RED = 2 +.segment Code // main main: { .const button_size = $18 @@ -137,11 +143,17 @@ Score: 18 // File Comments // Test of simple enum - struct with inline anonymous enum // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="enum-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const RED = 2 +.segment Code // main main: { .const button_size = $18 diff --git a/src/test/ref/euclid-3.asm b/src/test/ref/euclid-3.asm index 86e0317ad..fdf6f76df 100644 --- a/src/test/ref/euclid-3.asm +++ b/src/test/ref/euclid-3.asm @@ -3,12 +3,18 @@ * See https://en.wikipedia.org/wiki/Euclidean_algorithm * Based on facebook post from */ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="euclid-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label print_screen = $400 .label print_line_cursor = 6 .label print_char_cursor = 4 +.segment Code main: { // print_cls() jsr print_cls @@ -236,4 +242,5 @@ print_ln: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/euclid-3.log b/src/test/ref/euclid-3.log index bd5938192..d3973e99c 100644 --- a/src/test/ref/euclid-3.log +++ b/src/test/ref/euclid-3.log @@ -1258,13 +1258,19 @@ ASSEMBLER BEFORE OPTIMIZATION * Based on facebook post from */ // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="euclid-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_line_cursor = 6 .label print_char_cursor = 4 +.segment Code // main main: { // [1] call print_cls @@ -1684,6 +1690,7 @@ print_ln: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -1860,13 +1867,19 @@ Score: 1607 * Based on facebook post from */ // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="euclid-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_line_cursor = 6 .label print_char_cursor = 4 +.segment Code // main main: { // print_cls() @@ -2250,5 +2263,6 @@ print_ln: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/euclid-problem-2.asm b/src/test/ref/euclid-problem-2.asm index 106e68960..d3f09a5dc 100644 --- a/src/test/ref/euclid-problem-2.asm +++ b/src/test/ref/euclid-problem-2.asm @@ -1,9 +1,15 @@ // Demonstrates a problem where wrong alive ranges result in clobbering an alive variable // The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="euclid-problem-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // euclid(128,2) ldx #2 diff --git a/src/test/ref/euclid-problem-2.log b/src/test/ref/euclid-problem-2.log index c9fcb9e6c..80f97fbb5 100644 --- a/src/test/ref/euclid-problem-2.log +++ b/src/test/ref/euclid-problem-2.log @@ -480,11 +480,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Demonstrates a problem where wrong alive ranges result in clobbering an alive variable // The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="euclid-problem-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] call euclid @@ -680,11 +686,17 @@ Score: 472 // Demonstrates a problem where wrong alive ranges result in clobbering an alive variable // The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="euclid-problem-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // euclid(128,2) diff --git a/src/test/ref/euclid-problem.asm b/src/test/ref/euclid-problem.asm index 288104143..ecd85b5f3 100644 --- a/src/test/ref/euclid-problem.asm +++ b/src/test/ref/euclid-problem.asm @@ -1,9 +1,15 @@ // Demonstrates a problem where wrong alive ranges result in clobbering an alive variable // The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="euclid-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label a = 2 ldx #2 diff --git a/src/test/ref/euclid-problem.log b/src/test/ref/euclid-problem.log index 972667400..e3a63a423 100644 --- a/src/test/ref/euclid-problem.log +++ b/src/test/ref/euclid-problem.log @@ -182,11 +182,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Demonstrates a problem where wrong alive ranges result in clobbering an alive variable // The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="euclid-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label a = 2 @@ -287,11 +293,17 @@ Score: 463 // Demonstrates a problem where wrong alive ranges result in clobbering an alive variable // The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="euclid-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label a = 2 diff --git a/src/test/ref/examples/3d/3d.asm b/src/test/ref/examples/3d/3d.asm index 4c0b5aab8..8cb9e3f90 100644 --- a/src/test/ref/examples/3d/3d.asm +++ b/src/test/ref/examples/3d/3d.asm @@ -5,9 +5,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="3d.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const GREEN = 5 .const LIGHT_BLUE = $e .const LIGHT_GREY = $f @@ -37,6 +42,7 @@ .label print_screen = $400 .label sx = 2 .label sy = 3 +.segment Code main: { // asm sei @@ -384,6 +390,7 @@ debug_print_init: { !__b1: // } rts + .segment Data str: .text "sx" .byte 0 str1: .text "sy" @@ -409,6 +416,7 @@ debug_print_init: { str11: .text "yp" .byte 0 } +.segment Code anim: { .label i = 4 lda #0 @@ -1218,6 +1226,7 @@ print_uchar_at: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" // Positions to rotate xs: .byte -$34, -$34, -$34, 0, 0, $34, $34, $34 diff --git a/src/test/ref/examples/3d/3d.log b/src/test/ref/examples/3d/3d.log index 2f9afa227..5817ca3f9 100644 --- a/src/test/ref/examples/3d/3d.log +++ b/src/test/ref/examples/3d/3d.log @@ -4784,9 +4784,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="3d.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const GREEN = 5 .const LIGHT_BLUE = $e @@ -4817,6 +4822,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label print_screen = $400 .label sx = 2 .label sy = 3 +.segment Code // main main: { // asm { sei } @@ -5353,6 +5359,7 @@ debug_print_init: { __breturn: // [76] return rts + .segment Data str: .text "sx" .byte 0 str1: .text "sy" @@ -5378,6 +5385,7 @@ debug_print_init: { str11: .text "yp" .byte 0 } +.segment Code // anim anim: { .label i = 4 @@ -6538,6 +6546,7 @@ print_uchar_at: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" // Positions to rotate xs: .byte -$34, -$34, -$34, 0, 0, $34, $34, $34 @@ -6875,9 +6884,9 @@ Removing instruction jmp __b2 Removing instruction jmp __b6 Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination -Fixing long branch [322] bne __b2 to beq -Fixing long branch [331] bne __b1 to beq -Fixing long branch [969] bne __b1 to beq +Fixing long branch [328] bne __b2 to beq +Fixing long branch [337] bne __b1 to beq +Fixing long branch [977] bne __b1 to beq FINAL SYMBOL TABLE const signed byte* COSH = SINH+$40 @@ -7328,9 +7337,14 @@ Score: 65415 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="3d.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const GREEN = 5 .const LIGHT_BLUE = $e @@ -7361,6 +7375,7 @@ Score: 65415 .label print_screen = $400 .label sx = 2 .label sy = 3 +.segment Code // main main: { // asm @@ -7869,6 +7884,7 @@ debug_print_init: { // } // [76] return rts + .segment Data str: .text "sx" .byte 0 str1: .text "sy" @@ -7894,6 +7910,7 @@ debug_print_init: { str11: .text "yp" .byte 0 } +.segment Code // anim anim: { .label i = 4 @@ -9038,6 +9055,7 @@ print_uchar_at: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" // Positions to rotate xs: .byte -$34, -$34, -$34, 0, 0, $34, $34, $34 diff --git a/src/test/ref/examples/3d/perspective.asm b/src/test/ref/examples/3d/perspective.asm index cd3428283..1ab91a209 100644 --- a/src/test/ref/examples/3d/perspective.asm +++ b/src/test/ref/examples/3d/perspective.asm @@ -5,9 +5,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="perspective.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // The rotated point - updated by calling rotate() .label xr = $f0 .label yr = $f1 @@ -18,6 +23,7 @@ .label print_screen = $400 .label print_char_cursor = 6 .label print_line_cursor = 4 +.segment Code main: { // asm sei @@ -179,6 +185,7 @@ do_perspective: { jsr print_ln // } rts + .segment Data str: .text "(" .byte 0 str1: .text "," @@ -188,6 +195,7 @@ do_perspective: { str5: .text ")" .byte 0 } +.segment Code // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { .const c = ' ' @@ -369,6 +377,7 @@ print_char: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" // Multiplication tables for seriously fast multiplication. // This version is optimized for speed over accuracy diff --git a/src/test/ref/examples/3d/perspective.log b/src/test/ref/examples/3d/perspective.log index 36f688245..43500841b 100644 --- a/src/test/ref/examples/3d/perspective.log +++ b/src/test/ref/examples/3d/perspective.log @@ -1661,9 +1661,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="perspective.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The rotated point - updated by calling rotate() .label xr = $f0 @@ -1675,6 +1680,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label print_screen = $400 .label print_char_cursor = 6 .label print_line_cursor = 4 +.segment Code // main main: { // asm { sei } @@ -1991,6 +1997,7 @@ do_perspective: { __breturn: // [55] return rts + .segment Data str: .text "(" .byte 0 str1: .text "," @@ -2000,6 +2007,7 @@ do_perspective: { str5: .text ")" .byte 0 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { @@ -2289,6 +2297,7 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" // Multiplication tables for seriously fast multiplication. // This version is optimized for speed over accuracy @@ -2587,9 +2596,14 @@ Score: 3091 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="perspective.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The rotated point - updated by calling rotate() .label xr = $f0 @@ -2601,6 +2615,7 @@ Score: 3091 .label print_screen = $400 .label print_char_cursor = 6 .label print_line_cursor = 4 +.segment Code // main main: { // asm @@ -2880,6 +2895,7 @@ do_perspective: { // } // [55] return rts + .segment Data str: .text "(" .byte 0 str1: .text "," @@ -2889,6 +2905,7 @@ do_perspective: { str5: .text ")" .byte 0 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { @@ -3163,6 +3180,7 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" // Multiplication tables for seriously fast multiplication. // This version is optimized for speed over accuracy diff --git a/src/test/ref/examples/atari2600/atari2600-demo.asm b/src/test/ref/examples/atari2600/atari2600-demo.asm index beffc75a0..ece457a0a 100644 --- a/src/test/ref/examples/atari2600/atari2600-demo.asm +++ b/src/test/ref/examples/atari2600/atari2600-demo.asm @@ -11,8 +11,6 @@ .word main // NMI .word main // RESET .word main // IRQ -.segment Code - .const OFFSET_STRUCT_ATARI_TIA_WRITE_PF0 = $d .const OFFSET_STRUCT_ATARI_TIA_WRITE_PF1 = $e .const OFFSET_STRUCT_ATARI_TIA_WRITE_PF2 = $f diff --git a/src/test/ref/examples/atari2600/atari2600-demo.log b/src/test/ref/examples/atari2600/atari2600-demo.log index d386c762b..a23d0aeb7 100644 --- a/src/test/ref/examples/atari2600/atari2600-demo.log +++ b/src/test/ref/examples/atari2600/atari2600-demo.log @@ -476,8 +476,6 @@ ASSEMBLER BEFORE OPTIMIZATION .word main // NMI .word main // RESET .word main // IRQ -.segment Code - // Global Constants & labels .const OFFSET_STRUCT_ATARI_TIA_WRITE_PF0 = $d .const OFFSET_STRUCT_ATARI_TIA_WRITE_PF1 = $e @@ -734,8 +732,6 @@ Score: 8279 .word main // NMI .word main // RESET .word main // IRQ -.segment Code - // Global Constants & labels .const OFFSET_STRUCT_ATARI_TIA_WRITE_PF0 = $d .const OFFSET_STRUCT_ATARI_TIA_WRITE_PF1 = $e diff --git a/src/test/ref/examples/atari2600/atari2600-sprites.asm b/src/test/ref/examples/atari2600/atari2600-sprites.asm index 382e7cd96..84b9fb075 100644 --- a/src/test/ref/examples/atari2600/atari2600-sprites.asm +++ b/src/test/ref/examples/atari2600/atari2600-sprites.asm @@ -11,8 +11,6 @@ .word __start // NMI .word __start // RESET .word __start // IRQ -.segment Code - // The number of CPU cycles per scanline .const CYCLES_PER_SCANLINE = $4c .const OFFSET_STRUCT_ATARI_TIA_WRITE_COLUP0 = 6 diff --git a/src/test/ref/examples/atari2600/atari2600-sprites.log b/src/test/ref/examples/atari2600/atari2600-sprites.log index 18cf305ab..bdb03ae65 100644 --- a/src/test/ref/examples/atari2600/atari2600-sprites.log +++ b/src/test/ref/examples/atari2600/atari2600-sprites.log @@ -822,8 +822,6 @@ ASSEMBLER BEFORE OPTIMIZATION .word __start // NMI .word __start // RESET .word __start // IRQ -.segment Code - // Global Constants & labels // The number of CPU cycles per scanline .const CYCLES_PER_SCANLINE = $4c @@ -1238,8 +1236,6 @@ Score: 10892 .word __start // NMI .word __start // RESET .word __start // IRQ -.segment Code - // Global Constants & labels // The number of CPU cycles per scanline .const CYCLES_PER_SCANLINE = $4c diff --git a/src/test/ref/examples/bresenham/bitmap-bresenham.asm b/src/test/ref/examples/bresenham/bitmap-bresenham.asm index 8c8ceedd3..56fddc3c8 100644 --- a/src/test/ref/examples/bresenham/bitmap-bresenham.asm +++ b/src/test/ref/examples/bresenham/bitmap-bresenham.asm @@ -1,9 +1,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-bresenham.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const VIC_BMM = $20 .const VIC_DEN = $10 .const VIC_RSEL = 8 @@ -16,6 +21,7 @@ .label VICII = $d000 .label SCREEN = $400 .label BITMAP = $2000 +.segment Code main: { // VICII->BORDER_COLOR = 0 lda #0 @@ -527,6 +533,7 @@ bitmap_plot: { // } rts } +.segment Data // Tables for the plotter - initialized by calling bitmap_draw_init(); bitmap_plot_xlo: .fill $100, 0 bitmap_plot_xhi: .fill $100, 0 diff --git a/src/test/ref/examples/bresenham/bitmap-bresenham.log b/src/test/ref/examples/bresenham/bitmap-bresenham.log index 7d3e42072..d93ffe906 100644 --- a/src/test/ref/examples/bresenham/bitmap-bresenham.log +++ b/src/test/ref/examples/bresenham/bitmap-bresenham.log @@ -2810,9 +2810,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-bresenham.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -2826,6 +2831,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label VICII = $d000 .label SCREEN = $400 .label BITMAP = $2000 +.segment Code // main main: { // [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = 0 -- _deref_pbuc1=vbuc2 @@ -3742,6 +3748,7 @@ bitmap_plot: { rts } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_draw_init(); bitmap_plot_xlo: .fill $100, 0 bitmap_plot_xhi: .fill $100, 0 @@ -4202,9 +4209,14 @@ Score: 221360 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="bitmap-bresenham.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -4218,6 +4230,7 @@ Score: 221360 .label VICII = $d000 .label SCREEN = $400 .label BITMAP = $2000 +.segment Code // main main: { // VICII->BORDER_COLOR = 0 @@ -5095,6 +5108,7 @@ bitmap_plot: { rts } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_draw_init(); bitmap_plot_xlo: .fill $100, 0 bitmap_plot_xhi: .fill $100, 0 diff --git a/src/test/ref/examples/chargen/chargen-analysis.asm b/src/test/ref/examples/chargen/chargen-analysis.asm index 35a7f4023..d1c945644 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.asm +++ b/src/test/ref/examples/chargen/chargen-analysis.asm @@ -2,9 +2,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="chargen-analysis.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const KEY_F7 = 3 .const KEY_F1 = 4 .const KEY_F3 = 5 @@ -68,6 +73,7 @@ // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 .label SCREEN = $400 +.segment Code main: { .label sc = 2 .label i = 4 @@ -252,6 +258,7 @@ main: { inc.z sc+1 !: jmp __b1 + .segment Data str: .text "f1" .byte 0 str1: .text "f3" @@ -261,6 +268,7 @@ main: { str3: .text "f7" .byte 0 } +.segment Code // Print a string at a specific screen position // print_str_at(byte* zp(8) str, byte* zp($c) at) print_str_at: { @@ -454,6 +462,7 @@ keyboard_matrix_read: { // } rts } +.segment Data // Keycodes for each screen code character from $00-$3f. // Chars that do not have an unmodified keycode return $3f (representing RUN/STOP). keyboard_char_keycodes: .byte KEY_AT, KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, $3f, KEY_POUND, $3f, KEY_ARROW_UP, KEY_ARROW_LEFT, KEY_SPACE, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, KEY_ASTERISK, KEY_PLUS, KEY_COMMA, KEY_MINUS, KEY_DOT, KEY_SLASH, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_COLON, KEY_SEMICOLON, $3f, KEY_EQUALS, $3f, $3f diff --git a/src/test/ref/examples/chargen/chargen-analysis.log b/src/test/ref/examples/chargen/chargen-analysis.log index bf1afc7b9..c4586a898 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.log +++ b/src/test/ref/examples/chargen/chargen-analysis.log @@ -1933,9 +1933,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="chargen-analysis.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const KEY_F7 = 3 .const KEY_F1 = 4 @@ -2000,6 +2005,7 @@ ASSEMBLER BEFORE OPTIMIZATION // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 .label SCREEN = $400 +.segment Code // main main: { .label sc = 2 @@ -2401,6 +2407,7 @@ main: { __b1_from___b2: // [1] phi main::sc#2 = main::sc#1 [phi:main::@2->main::@1#0] -- register_copy jmp __b1 + .segment Data str: .text "f1" .byte 0 str1: .text "f3" @@ -2410,6 +2417,7 @@ main: { str3: .text "f7" .byte 0 } +.segment Code // print_str_at // Print a string at a specific screen position // print_str_at(byte* zp(8) str, byte* zp($c) at) @@ -2696,6 +2704,7 @@ keyboard_matrix_read: { rts } // File Data +.segment Data // Keycodes for each screen code character from $00-$3f. // Chars that do not have an unmodified keycode return $3f (representing RUN/STOP). keyboard_char_keycodes: .byte KEY_AT, KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, $3f, KEY_POUND, $3f, KEY_ARROW_UP, KEY_ARROW_LEFT, KEY_SPACE, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, KEY_ASTERISK, KEY_PLUS, KEY_COMMA, KEY_MINUS, KEY_DOT, KEY_SLASH, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_COLON, KEY_SEMICOLON, $3f, KEY_EQUALS, $3f, $3f @@ -2856,8 +2865,8 @@ Removing instruction jmp __b12 Removing instruction jmp __b3 Removing instruction jmp __b4 Succesful ASM optimization Pass5NextJumpElimination -Fixing long branch [86] bcc __b2 to bcs Fixing long branch [92] bcc __b2 to bcs +Fixing long branch [98] bcc __b2 to bcs FINAL SYMBOL TABLE const nomodify byte* CHARGEN = (byte*) 53248 @@ -3087,9 +3096,14 @@ Score: 558979 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="chargen-analysis.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const KEY_F7 = 3 .const KEY_F1 = 4 @@ -3154,6 +3168,7 @@ Score: 558979 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 .label SCREEN = $400 +.segment Code // main main: { .label sc = 2 @@ -3498,6 +3513,7 @@ main: { // [1] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [1] phi main::sc#2 = main::sc#1 [phi:main::@2->main::@1#0] -- register_copy jmp __b1 + .segment Data str: .text "f1" .byte 0 str1: .text "f3" @@ -3507,6 +3523,7 @@ main: { str3: .text "f7" .byte 0 } +.segment Code // print_str_at // Print a string at a specific screen position // print_str_at(byte* zp(8) str, byte* zp($c) at) @@ -3789,6 +3806,7 @@ keyboard_matrix_read: { rts } // File Data +.segment Data // Keycodes for each screen code character from $00-$3f. // Chars that do not have an unmodified keycode return $3f (representing RUN/STOP). keyboard_char_keycodes: .byte KEY_AT, KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, $3f, KEY_POUND, $3f, KEY_ARROW_UP, KEY_ARROW_LEFT, KEY_SPACE, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, KEY_ASTERISK, KEY_PLUS, KEY_COMMA, KEY_MINUS, KEY_DOT, KEY_SLASH, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_COLON, KEY_SEMICOLON, $3f, KEY_EQUALS, $3f, $3f diff --git a/src/test/ref/examples/conio/nacht-screen.asm b/src/test/ref/examples/conio/nacht-screen.asm index 76449b077..51d4f616e 100644 --- a/src/test/ref/examples/conio/nacht-screen.asm +++ b/src/test/ref/examples/conio/nacht-screen.asm @@ -1,9 +1,14 @@ // Show a nice screen using conio.h // From CC65 sample "Eine kleine Nachtmusik" by Ullrich von Bassewitz // https://github.com/cc65/cc65/blob/master/samples/nachtm.c -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="nacht-screen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const LIGHT_BLUE = $e // The horizontal line character .const CH_HLINE = $40 @@ -44,6 +49,7 @@ .label conio_scroll_enable = $14 .label XSize = $15 .label YSize = $16 +.segment Code __start: { // conio_cursor_x = 0 lda #0 @@ -317,6 +323,7 @@ MakeNiceScreen: { // for (I = 0, T = Text; I < sizeof (Text) / sizeof (TextDesc); ++I) inc.z I jmp __b1 + .segment Data Text: .byte 2 .text "Wolfgang Amadeus Mozart" .byte 0 @@ -366,6 +373,7 @@ MakeNiceScreen: { .byte 0 .fill $f, 0 } +.segment Code // Return true if there's a key waiting, return false if not kbhit: { // CIA#1 Port A: keyboard matrix columns and joystick #2 diff --git a/src/test/ref/examples/conio/nacht-screen.log b/src/test/ref/examples/conio/nacht-screen.log index 46313c75d..2b320614a 100644 --- a/src/test/ref/examples/conio/nacht-screen.log +++ b/src/test/ref/examples/conio/nacht-screen.log @@ -3287,9 +3287,14 @@ ASSEMBLER BEFORE OPTIMIZATION // From CC65 sample "Eine kleine Nachtmusik" by Ullrich von Bassewitz // https://github.com/cc65/cc65/blob/master/samples/nachtm.c // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="nacht-screen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e // The horizontal line character @@ -3331,6 +3336,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label conio_scroll_enable = $14 .label XSize = $15 .label YSize = $16 +.segment Code // __start __start: { jmp __init1 @@ -3838,6 +3844,7 @@ MakeNiceScreen: { // [83] phi MakeNiceScreen::T#3 = MakeNiceScreen::T#2 [phi:MakeNiceScreen::@18->MakeNiceScreen::@1#0] -- register_copy // [83] phi MakeNiceScreen::I#3 = MakeNiceScreen::I#2 [phi:MakeNiceScreen::@18->MakeNiceScreen::@1#1] -- register_copy jmp __b1 + .segment Data Text: .byte 2 .text "Wolfgang Amadeus Mozart" .byte 0 @@ -3887,6 +3894,7 @@ MakeNiceScreen: { .byte 0 .fill $f, 0 } +.segment Code // kbhit // Return true if there's a key waiting, return false if not kbhit: { @@ -5222,9 +5230,14 @@ Score: 114551 // From CC65 sample "Eine kleine Nachtmusik" by Ullrich von Bassewitz // https://github.com/cc65/cc65/blob/master/samples/nachtm.c // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="nacht-screen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e // The horizontal line character @@ -5266,6 +5279,7 @@ Score: 114551 .label conio_scroll_enable = $14 .label XSize = $15 .label YSize = $16 +.segment Code // __start __start: { // __start::__init1 @@ -5719,6 +5733,7 @@ MakeNiceScreen: { // [83] phi MakeNiceScreen::T#3 = MakeNiceScreen::T#2 [phi:MakeNiceScreen::@18->MakeNiceScreen::@1#0] -- register_copy // [83] phi MakeNiceScreen::I#3 = MakeNiceScreen::I#2 [phi:MakeNiceScreen::@18->MakeNiceScreen::@1#1] -- register_copy jmp __b1 + .segment Data Text: .byte 2 .text "Wolfgang Amadeus Mozart" .byte 0 @@ -5768,6 +5783,7 @@ MakeNiceScreen: { .byte 0 .fill $f, 0 } +.segment Code // kbhit // Return true if there's a key waiting, return false if not kbhit: { diff --git a/src/test/ref/examples/cx16/rasterbars.asm b/src/test/ref/examples/cx16/rasterbars.asm index 95cf26ba3..f9495df76 100644 --- a/src/test/ref/examples/cx16/rasterbars.asm +++ b/src/test/ref/examples/cx16/rasterbars.asm @@ -9,9 +9,6 @@ .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(__start) -.segment Code - - .const VERA_DCSEL = 2 .const VERA_LINE = 2 .const SIZEOF_BYTE = 1 diff --git a/src/test/ref/examples/cx16/rasterbars.log b/src/test/ref/examples/cx16/rasterbars.log index 496f23fd9..8185eec89 100644 --- a/src/test/ref/examples/cx16/rasterbars.log +++ b/src/test/ref/examples/cx16/rasterbars.log @@ -911,9 +911,6 @@ ASSEMBLER BEFORE OPTIMIZATION .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(__start) -.segment Code - - // Global Constants & labels .const VERA_DCSEL = 2 .const VERA_LINE = 2 @@ -1482,9 +1479,6 @@ Score: 5786 .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(__start) -.segment Code - - // Global Constants & labels .const VERA_DCSEL = 2 .const VERA_LINE = 2 diff --git a/src/test/ref/examples/cx16/sprites.asm b/src/test/ref/examples/cx16/sprites.asm index 2a6cbac9a..2fa092ce6 100644 --- a/src/test/ref/examples/cx16/sprites.asm +++ b/src/test/ref/examples/cx16/sprites.asm @@ -9,9 +9,6 @@ .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(__start) -.segment Code - - .const VERA_INC_1 = $10 .const VERA_DCSEL = 2 .const VERA_ADDRSEL = 1 diff --git a/src/test/ref/examples/cx16/sprites.log b/src/test/ref/examples/cx16/sprites.log index 83c1658b4..4c836c5ed 100644 --- a/src/test/ref/examples/cx16/sprites.log +++ b/src/test/ref/examples/cx16/sprites.log @@ -1065,9 +1065,6 @@ ASSEMBLER BEFORE OPTIMIZATION .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(__start) -.segment Code - - // Global Constants & labels .const VERA_INC_1 = $10 .const VERA_DCSEL = 2 @@ -1953,9 +1950,6 @@ Score: 8528 .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(__start) -.segment Code - - // Global Constants & labels .const VERA_INC_1 = $10 .const VERA_DCSEL = 2 diff --git a/src/test/ref/examples/cx16/text.asm b/src/test/ref/examples/cx16/text.asm index 03148f947..eacebb18d 100644 --- a/src/test/ref/examples/cx16/text.asm +++ b/src/test/ref/examples/cx16/text.asm @@ -9,9 +9,6 @@ .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(main) -.segment Code - - .const VERA_INC_1 = $10 .const VERA_ADDRSEL = 1 .const SIZEOF_BYTE = 1 diff --git a/src/test/ref/examples/cx16/text.log b/src/test/ref/examples/cx16/text.log index 867732793..65c4e8dd5 100644 --- a/src/test/ref/examples/cx16/text.log +++ b/src/test/ref/examples/cx16/text.log @@ -524,9 +524,6 @@ ASSEMBLER BEFORE OPTIMIZATION .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(main) -.segment Code - - // Global Constants & labels .const VERA_INC_1 = $10 .const VERA_ADDRSEL = 1 @@ -833,9 +830,6 @@ Score: 1175 .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(main) -.segment Code - - // Global Constants & labels .const VERA_INC_1 = $10 .const VERA_ADDRSEL = 1 diff --git a/src/test/ref/examples/eightqueens/eightqueens-recursive.asm b/src/test/ref/examples/eightqueens/eightqueens-recursive.asm index d0f38de62..89e4729c6 100644 --- a/src/test/ref/examples/eightqueens/eightqueens-recursive.asm +++ b/src/test/ref/examples/eightqueens/eightqueens-recursive.asm @@ -3,9 +3,14 @@ // N Queens Problem is a famous puzzle in which n-queens are to be placed on a nxn chess board such that no two queens are in the same row, column or diagonal. // // This is a recursive solution -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="eightqueens-recursive.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const OFFSET_STRUCT_TIME_OF_DAY_SEC = 1 @@ -36,6 +41,7 @@ .label conio_line_color = $10 // The number of found solutions .label count = $12 +.segment Code __start: { // conio_cursor_x = 0 lda #0 @@ -241,6 +247,7 @@ main: { jsr cputs // } rts + .segment Data s: .text " - n queens problem using backtracking -" .byte 0 s1: .text @"\nnumber of queens:" @@ -252,6 +259,7 @@ main: { s4: .text @".\n" .byte 0 } +.segment Code // Checks is a placement of the queen on the board is legal. // Checks the passed (row, column) against all queens placed on the board on lower rows. // If no conflict for desired position returns 1 otherwise returns 0 @@ -414,6 +422,7 @@ print: { // for(char i=1;i<=QUEENS;++i) inc.z i jmp __b1 + .segment Data s: .text @"\n#" .byte 0 s1: .text @":\n " @@ -425,6 +434,7 @@ print: { s4: .text "-" .byte 0 } +.segment Code // Set the cursor to the specified position // gotoxy(byte zp(2) y) gotoxy: { @@ -1746,6 +1756,7 @@ memset: { !: jmp __b2 } +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of hexadecimal digits diff --git a/src/test/ref/examples/eightqueens/eightqueens-recursive.log b/src/test/ref/examples/eightqueens/eightqueens-recursive.log index c340c1160..24804c488 100644 --- a/src/test/ref/examples/eightqueens/eightqueens-recursive.log +++ b/src/test/ref/examples/eightqueens/eightqueens-recursive.log @@ -8020,9 +8020,14 @@ ASSEMBLER BEFORE OPTIMIZATION // // This is a recursive solution // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="eightqueens-recursive.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -8054,6 +8059,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label conio_line_color = $10 // The number of found solutions .label count = $12 +.segment Code // __start __start: { jmp __init1 @@ -8419,6 +8425,7 @@ main: { __breturn: // [75] return rts + .segment Data s: .text " - n queens problem using backtracking -" .byte 0 s1: .text @"\nnumber of queens:" @@ -8430,6 +8437,7 @@ main: { s4: .text @".\n" .byte 0 } +.segment Code // legal // Checks is a placement of the queen on the board is legal. // Checks the passed (row, column) against all queens placed on the board on lower rows. @@ -8733,6 +8741,7 @@ print: { __b1_from___b14: // [103] phi print::i#2 = print::i#1 [phi:print::@14->print::@1#0] -- register_copy jmp __b1 + .segment Data s: .text @"\n#" .byte 0 s1: .text @":\n " @@ -8744,6 +8753,7 @@ print: { s4: .text "-" .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte zp(2) y) @@ -10713,6 +10723,7 @@ memset: { jmp __b2_from___b3 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of hexadecimal digits @@ -11684,9 +11695,14 @@ Score: 2147483647 // // This is a recursive solution // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="eightqueens-recursive.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -11718,6 +11734,7 @@ Score: 2147483647 .label conio_line_color = $10 // The number of found solutions .label count = $12 +.segment Code // __start __start: { // __start::__init1 @@ -12050,6 +12067,7 @@ main: { // } // [75] return rts + .segment Data s: .text " - n queens problem using backtracking -" .byte 0 s1: .text @"\nnumber of queens:" @@ -12061,6 +12079,7 @@ main: { s4: .text @".\n" .byte 0 } +.segment Code // legal // Checks is a placement of the queen on the board is legal. // Checks the passed (row, column) against all queens placed on the board on lower rows. @@ -12333,6 +12352,7 @@ print: { // [103] phi from print::@14 to print::@1 [phi:print::@14->print::@1] // [103] phi print::i#2 = print::i#1 [phi:print::@14->print::@1#0] -- register_copy jmp __b1 + .segment Data s: .text @"\n#" .byte 0 s1: .text @":\n " @@ -12344,6 +12364,7 @@ print: { s4: .text "-" .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte zp(2) y) @@ -14247,6 +14268,7 @@ memset: { jmp __b2 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of hexadecimal digits diff --git a/src/test/ref/examples/eightqueens/eightqueens.asm b/src/test/ref/examples/eightqueens/eightqueens.asm index 306d88692..464396cb3 100644 --- a/src/test/ref/examples/eightqueens/eightqueens.asm +++ b/src/test/ref/examples/eightqueens/eightqueens.asm @@ -3,9 +3,14 @@ // N Queens Problem is a famous puzzle in which n-queens are to be placed on a nxn chess board such that no two queens are in the same row, column or diagonal. // // This is an iterative solution. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="eightqueens.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c @@ -24,6 +29,7 @@ .label conio_line_color = $1b // The number of found solutions .label count = 2 +.segment Code __start: { // conio_cursor_x = 0 lda #0 @@ -110,6 +116,7 @@ main: { beq __b1 // } rts + .segment Data s: .text " - n queens problem using backtracking -" .byte 0 s1: .text @"\nnumber of queens:" @@ -117,6 +124,7 @@ main: { s2: .text @"\n\nsolutions: " .byte 0 } +.segment Code // Set the cursor to the specified position // gotoxy(byte register(X) y) gotoxy: { @@ -814,6 +822,7 @@ print: { // for(char i=1;i<=QUEENS;++i) inc.z i jmp __b1 + .segment Data s: .text @"\n#" .byte 0 s1: .text @":\n " @@ -823,6 +832,7 @@ print: { s4: .text "-" .byte 0 } +.segment Code // Converts unsigned number value to a string representing it in RADIX format. // If the leading digits are zero they are not included in the string. // - value : The number to be converted to RADIX @@ -1414,6 +1424,7 @@ uctoa_append: { tax jmp __b1 } +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of hexadecimal digits diff --git a/src/test/ref/examples/eightqueens/eightqueens.log b/src/test/ref/examples/eightqueens/eightqueens.log index 9a4f2b8d0..128ea00ee 100644 --- a/src/test/ref/examples/eightqueens/eightqueens.log +++ b/src/test/ref/examples/eightqueens/eightqueens.log @@ -7244,9 +7244,14 @@ ASSEMBLER BEFORE OPTIMIZATION // // This is an iterative solution. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="eightqueens.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -7266,6 +7271,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label conio_line_color = $1b // The number of found solutions .label count = 2 +.segment Code // __start __start: { jmp __init1 @@ -7460,6 +7466,7 @@ main: { __breturn: // [37] return rts + .segment Data s: .text " - n queens problem using backtracking -" .byte 0 s1: .text @"\nnumber of queens:" @@ -7467,6 +7474,7 @@ main: { s2: .text @"\n\nsolutions: " .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -8652,6 +8660,7 @@ print: { __b1_from___b14: // [206] phi print::i#2 = print::i#1 [phi:print::@14->print::@1#0] -- register_copy jmp __b1 + .segment Data s: .text @"\n#" .byte 0 s1: .text @":\n " @@ -8661,6 +8670,7 @@ print: { s4: .text "-" .byte 0 } +.segment Code // ultoa // Converts unsigned number value to a string representing it in RADIX format. // If the leading digits are zero they are not included in the string. @@ -9572,6 +9582,7 @@ uctoa_append: { jmp __b1 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of hexadecimal digits @@ -10479,9 +10490,14 @@ Score: 1603848 // // This is an iterative solution. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="eightqueens.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -10501,6 +10517,7 @@ Score: 1603848 .label conio_line_color = $1b // The number of found solutions .label count = 2 +.segment Code // __start __start: { // __start::__init1 @@ -10661,6 +10678,7 @@ main: { // } // [37] return rts + .segment Data s: .text " - n queens problem using backtracking -" .byte 0 s1: .text @"\nnumber of queens:" @@ -10668,6 +10686,7 @@ main: { s2: .text @"\n\nsolutions: " .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -11757,6 +11776,7 @@ print: { // [206] phi from print::@14 to print::@1 [phi:print::@14->print::@1] // [206] phi print::i#2 = print::i#1 [phi:print::@14->print::@1#0] -- register_copy jmp __b1 + .segment Data s: .text @"\n#" .byte 0 s1: .text @":\n " @@ -11766,6 +11786,7 @@ print: { s4: .text "-" .byte 0 } +.segment Code // ultoa // Converts unsigned number value to a string representing it in RADIX format. // If the leading digits are zero they are not included in the string. @@ -12638,6 +12659,7 @@ uctoa_append: { jmp __b1 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of hexadecimal digits diff --git a/src/test/ref/examples/fastmultiply/fastmultiply8.asm b/src/test/ref/examples/fastmultiply/fastmultiply8.asm index d4c6dd16a..ea3d44783 100644 --- a/src/test/ref/examples/fastmultiply/fastmultiply8.asm +++ b/src/test/ref/examples/fastmultiply/fastmultiply8.asm @@ -5,14 +5,20 @@ // See the following for information about the method // - http://codebase64.org/doku.php?id=base:seriously_fast_multiplication // - http://codebase64.org/doku.php?id=magazines:chacking16 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fastmultiply8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Pointers to a, b and c=a*b .label ap = $fd .label bp = $fe .label cp = $ff .label print_screen = $400 +.segment Code main: { .label at = 3 .label k = 2 @@ -300,6 +306,7 @@ memset: { !: jmp __b1 } +.segment Data print_hextab: .text "0123456789abcdef" vals: .byte -$5f, -$40, -$20, -$10, 0, $10, $20, $40, $5f // mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x). diff --git a/src/test/ref/examples/fastmultiply/fastmultiply8.log b/src/test/ref/examples/fastmultiply/fastmultiply8.log index 6751654ba..070d46cf0 100644 --- a/src/test/ref/examples/fastmultiply/fastmultiply8.log +++ b/src/test/ref/examples/fastmultiply/fastmultiply8.log @@ -1319,15 +1319,21 @@ ASSEMBLER BEFORE OPTIMIZATION // - http://codebase64.org/doku.php?id=base:seriously_fast_multiplication // - http://codebase64.org/doku.php?id=magazines:chacking16 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fastmultiply8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Pointers to a, b and c=a*b .label ap = $fd .label bp = $fe .label cp = $ff .label print_screen = $400 +.segment Code // main main: { .label at = 3 @@ -1803,6 +1809,7 @@ memset: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" vals: .byte -$5f, -$40, -$20, -$10, 0, $10, $20, $40, $5f // mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x). @@ -2056,15 +2063,21 @@ Score: 10149 // - http://codebase64.org/doku.php?id=base:seriously_fast_multiplication // - http://codebase64.org/doku.php?id=magazines:chacking16 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fastmultiply8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Pointers to a, b and c=a*b .label ap = $fd .label bp = $fe .label cp = $ff .label print_screen = $400 +.segment Code // main main: { .label at = 3 @@ -2514,6 +2527,7 @@ memset: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" vals: .byte -$5f, -$40, -$20, -$10, 0, $10, $20, $40, $5f // mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x). diff --git a/src/test/ref/examples/fire/fire.asm b/src/test/ref/examples/fire/fire.asm index b8daf9734..22ac01791 100644 --- a/src/test/ref/examples/fire/fire.asm +++ b/src/test/ref/examples/fire/fire.asm @@ -3,9 +3,14 @@ // Cleanup and porting to CC65 by Ullrich von Bassewitz and Greg King . // Ported to KickC by Jesper Gravgaard. // Original source https://github.com/cc65/cc65/blob/master/samples/fire.c -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fire.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // SID Channel Control Register Noise Waveform .const SID_CONTROL_NOISE = $80 // The colors of the C64 @@ -27,6 +32,7 @@ .label SCREEN2 = $3c00 .label BUFFER = $4000 .label CHARSET = $3000 +.segment Code main: { .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f .const toD0182_return = (>(SCREEN2&$3fff)*4)|(>CHARSET)/4&$f @@ -288,8 +294,10 @@ makecharset: { inc.z font+1 !: jmp __b1 + .segment Data bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } +.segment Code // Animate the fire on the passed screen. Uses BUFFER to store the current values. fire: { .label screen = $b diff --git a/src/test/ref/examples/fire/fire.log b/src/test/ref/examples/fire/fire.log index c9ac50934..22856a61f 100644 --- a/src/test/ref/examples/fire/fire.log +++ b/src/test/ref/examples/fire/fire.log @@ -1651,9 +1651,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Ported to KickC by Jesper Gravgaard. // Original source https://github.com/cc65/cc65/blob/master/samples/fire.c // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fire.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // SID Channel Control Register Noise Waveform .const SID_CONTROL_NOISE = $80 @@ -1676,6 +1681,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN2 = $3c00 .label BUFFER = $4000 .label CHARSET = $3000 +.segment Code // main main: { .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f @@ -2085,8 +2091,10 @@ makecharset: { __b1_from___b2: // [29] phi makecharset::font#2 = makecharset::font#1 [phi:makecharset::@2->makecharset::@1#0] -- register_copy jmp __b1 + .segment Data bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } +.segment Code // fire // Animate the fire on the passed screen. Uses BUFFER to store the current values. fire: { @@ -2353,10 +2361,10 @@ Relabelling long label __b8_from___b6 to __b10 Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination -Fixing long branch [131] bne __b2 to beq -Fixing long branch [136] bne __b2 to beq -Fixing long branch [146] bne __b4 to beq -Fixing long branch [151] bne __b4 to beq +Fixing long branch [137] bne __b2 to beq +Fixing long branch [142] bne __b2 to beq +Fixing long branch [152] bne __b4 to beq +Fixing long branch [157] bne __b4 to beq FINAL SYMBOL TABLE const nomodify byte BLACK = 0 @@ -2488,9 +2496,14 @@ Score: 102503 // Ported to KickC by Jesper Gravgaard. // Original source https://github.com/cc65/cc65/blob/master/samples/fire.c // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fire.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // SID Channel Control Register Noise Waveform .const SID_CONTROL_NOISE = $80 @@ -2513,6 +2526,7 @@ Score: 102503 .label SCREEN2 = $3c00 .label BUFFER = $4000 .label CHARSET = $3000 +.segment Code // main main: { .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f @@ -2905,8 +2919,10 @@ makecharset: { // [29] phi from makecharset::@2 to makecharset::@1 [phi:makecharset::@2->makecharset::@1] // [29] phi makecharset::font#2 = makecharset::font#1 [phi:makecharset::@2->makecharset::@1#0] -- register_copy jmp __b1 + .segment Data bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } +.segment Code // fire // Animate the fire on the passed screen. Uses BUFFER to store the current values. fire: { diff --git a/src/test/ref/examples/font-2x2/font-2x2.asm b/src/test/ref/examples/font-2x2/font-2x2.asm index ebbf21cb7..067335eaf 100644 --- a/src/test/ref/examples/font-2x2/font-2x2.asm +++ b/src/test/ref/examples/font-2x2/font-2x2.asm @@ -1,7 +1,12 @@ // Creates a 2x2 font from the system CHARGEN font and compress it by identifying identical chars -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="font-2x2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // RAM in 0xA000, 0xE000 CHAR ROM in 0xD000 .const PROCPORT_RAM_CHARROM = 1 // BASIC in 0xA000, I/O in 0xD000, KERNEL in 0xE000 @@ -14,6 +19,7 @@ .label SCREEN = $400 .label FONT_ORIGINAL = $2000 .label FONT_COMPRESSED = $2800 +.segment Code main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>FONT_COMPRESSED)/4&$f .label c = 3 @@ -477,5 +483,6 @@ font_find: { inx jmp __b1 } +.segment Data .align $100 FONT_COMPRESSED_MAP: .fill $100, 0 diff --git a/src/test/ref/examples/font-2x2/font-2x2.log b/src/test/ref/examples/font-2x2/font-2x2.log index 5d53b90c3..cac6b1fa8 100644 --- a/src/test/ref/examples/font-2x2/font-2x2.log +++ b/src/test/ref/examples/font-2x2/font-2x2.log @@ -2319,9 +2319,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Creates a 2x2 font from the system CHARGEN font and compress it by identifying identical chars // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="font-2x2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // RAM in 0xA000, 0xE000 CHAR ROM in 0xD000 .const PROCPORT_RAM_CHARROM = 1 @@ -2335,6 +2340,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN = $400 .label FONT_ORIGINAL = $2000 .label FONT_COMPRESSED = $2800 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>FONT_COMPRESSED)/4&$f @@ -3054,6 +3060,7 @@ font_find: { jmp __b1 } // File Data +.segment Data .align $100 FONT_COMPRESSED_MAP: .fill $100, 0 @@ -3181,7 +3188,7 @@ Removing instruction lda #8 Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [185] bne __b1 to beq +Fixing long branch [191] bne __b1 to beq FINAL SYMBOL TABLE const nomodify byte* CHARGEN = (byte*) 53248 @@ -3382,9 +3389,14 @@ Score: 122846 // File Comments // Creates a 2x2 font from the system CHARGEN font and compress it by identifying identical chars // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="font-2x2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // RAM in 0xA000, 0xE000 CHAR ROM in 0xD000 .const PROCPORT_RAM_CHARROM = 1 @@ -3398,6 +3410,7 @@ Score: 122846 .label SCREEN = $400 .label FONT_ORIGINAL = $2000 .label FONT_COMPRESSED = $2800 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>FONT_COMPRESSED)/4&$f @@ -4098,6 +4111,7 @@ font_find: { jmp __b1 } // File Data +.segment Data .align $100 FONT_COMPRESSED_MAP: .fill $100, 0 diff --git a/src/test/ref/examples/helloworld/helloworld.asm b/src/test/ref/examples/helloworld/helloworld.asm index a6bc3c9f3..fcf1afab2 100644 --- a/src/test/ref/examples/helloworld/helloworld.asm +++ b/src/test/ref/examples/helloworld/helloworld.asm @@ -1,7 +1,12 @@ // Functions for performing input and output. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="helloworld.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const LIGHT_BLUE = $e // Color Ram .label COLORRAM = $d800 @@ -16,6 +21,7 @@ .label conio_line_text = 8 // The current color cursor line start .label conio_line_color = $a +.segment Code __start: { // conio_cursor_x = 0 lda #0 @@ -58,9 +64,11 @@ main: { jsr cputs // } rts + .segment Data s: .text @"hello world!\n" .byte 0 } +.segment Code // Set the cursor to the specified position // gotoxy(byte register(X) y) gotoxy: { diff --git a/src/test/ref/examples/helloworld/helloworld.log b/src/test/ref/examples/helloworld/helloworld.log index bd4be4239..29677b7f8 100644 --- a/src/test/ref/examples/helloworld/helloworld.log +++ b/src/test/ref/examples/helloworld/helloworld.log @@ -1361,9 +1361,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Functions for performing input and output. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="helloworld.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e // Color Ram @@ -1379,6 +1384,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label conio_line_text = 8 // The current color cursor line start .label conio_line_color = $a +.segment Code // __start __start: { jmp __init1 @@ -1463,9 +1469,11 @@ main: { __breturn: // [18] return rts + .segment Data s: .text @"hello world!\n" .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -2094,9 +2102,14 @@ Score: 11090 // File Comments // Functions for performing input and output. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="helloworld.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e // Color Ram @@ -2112,6 +2125,7 @@ Score: 11090 .label conio_line_text = 8 // The current color cursor line start .label conio_line_color = $a +.segment Code // __start __start: { // __start::__init1 @@ -2186,9 +2200,11 @@ main: { // } // [18] return rts + .segment Data s: .text @"hello world!\n" .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) diff --git a/src/test/ref/examples/irq/irq-hyperscreen.asm b/src/test/ref/examples/irq/irq-hyperscreen.asm index e28599afb..479de3608 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.asm +++ b/src/test/ref/examples/irq/irq-hyperscreen.asm @@ -2,9 +2,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="irq-hyperscreen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f .const VIC_RSEL = 8 @@ -33,6 +38,7 @@ // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe .label GHOST_BYTE = $3fff +.segment Code // Interrupt Routine 2 irq_bottom_2: { pha diff --git a/src/test/ref/examples/irq/irq-hyperscreen.log b/src/test/ref/examples/irq/irq-hyperscreen.log index c337ee6b5..0c56e800f 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.log +++ b/src/test/ref/examples/irq/irq-hyperscreen.log @@ -235,9 +235,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="irq-hyperscreen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -267,6 +272,7 @@ ASSEMBLER BEFORE OPTIMIZATION // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe .label GHOST_BYTE = $3fff +.segment Code // irq_bottom_2 // Interrupt Routine 2 irq_bottom_2: { @@ -437,9 +443,14 @@ Score: 444 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="irq-hyperscreen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -469,6 +480,7 @@ Score: 444 // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe .label GHOST_BYTE = $3fff +.segment Code // irq_bottom_2 // Interrupt Routine 2 irq_bottom_2: { diff --git a/src/test/ref/examples/mega65/raster65.asm b/src/test/ref/examples/mega65/raster65.asm index b6fd3a7e3..e1243e16b 100644 --- a/src/test/ref/examples/mega65/raster65.asm +++ b/src/test/ref/examples/mega65/raster65.asm @@ -14,9 +14,6 @@ .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(__start) -.segment Code - - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // Bits for the VICII IRQ Status/Enable Registers diff --git a/src/test/ref/examples/mega65/raster65.log b/src/test/ref/examples/mega65/raster65.log index 292f8b381..52d9cebe9 100644 --- a/src/test/ref/examples/mega65/raster65.log +++ b/src/test/ref/examples/mega65/raster65.log @@ -2074,9 +2074,6 @@ ASSEMBLER BEFORE OPTIMIZATION .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(__start) -.segment Code - - // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -3024,9 +3021,9 @@ Removing instruction jmp __b5 Succesful ASM optimization Pass5NextJumpElimination Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [137] bne __b2 to beq -Fixing long branch [147] bcc __b17 to bcs -Fixing long branch [154] bne __b19 to beq +Fixing long branch [134] bne __b2 to beq +Fixing long branch [144] bcc __b17 to bcs +Fixing long branch [151] bne __b19 to beq FINAL SYMBOL TABLE const nomodify struct MOS6526_CIA* CIA1 = (struct MOS6526_CIA*) 56320 @@ -3245,9 +3242,6 @@ Score: 10141 .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(__start) -.segment Code - - // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.asm b/src/test/ref/examples/multiplexer/simple-multiplexer.asm index db1ba75b1..40bf1335f 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.asm +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.asm @@ -2,9 +2,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="simple-multiplexer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const VIC_RST8 = $80 .const VIC_DEN = $10 .const VIC_RSEL = 8 @@ -35,6 +40,7 @@ .label plex_sprite_msb = $a // The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown. .label plex_free_next = $b +.segment Code __start: { // PLEX_SCREEN_PTR = 0x400+0x3f8 lda #<$400+$3f8 @@ -376,6 +382,7 @@ plexShowSprite: { sta SPRITES_XMSB jmp __b2 } +.segment Data // The x-positions of the multiplexer sprites (0x000-0x1ff) PLEX_XPOS: .fill 2*PLEX_COUNT, 0 // The y-positions of the multiplexer sprites. diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.log b/src/test/ref/examples/multiplexer/simple-multiplexer.log index b93ba5f0a..83046d74e 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.log +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.log @@ -1610,9 +1610,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="simple-multiplexer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const VIC_RST8 = $80 .const VIC_DEN = $10 @@ -1644,6 +1649,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label plex_sprite_msb = $a // The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown. .label plex_free_next = $b +.segment Code // __start __start: { jmp __init1 @@ -2199,6 +2205,7 @@ plexShowSprite: { jmp __b2 } // File Data +.segment Data // The x-positions of the multiplexer sprites (0x000-0x1ff) PLEX_XPOS: .fill 2*PLEX_COUNT, 0 // The y-positions of the multiplexer sprites. @@ -2500,9 +2507,14 @@ Score: 58109 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="simple-multiplexer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const VIC_RST8 = $80 .const VIC_DEN = $10 @@ -2534,6 +2546,7 @@ Score: 58109 .label plex_sprite_msb = $a // The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown. .label plex_free_next = $b +.segment Code // __start __start: { // __start::__init1 @@ -3066,6 +3079,7 @@ plexShowSprite: { jmp __b2 } // File Data +.segment Data // The x-positions of the multiplexer sprites (0x000-0x1ff) PLEX_XPOS: .fill 2*PLEX_COUNT, 0 // The y-positions of the multiplexer sprites. diff --git a/src/test/ref/examples/music/music.asm b/src/test/ref/examples/music/music.asm index 1e7bc2471..41045bfdc 100644 --- a/src/test/ref/examples/music/music.asm +++ b/src/test/ref/examples/music/music.asm @@ -2,9 +2,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="music.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_MOS6569_VICII_RASTER = $12 .const OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = $20 // The VIC-II MOS 6567/6569 @@ -13,6 +18,7 @@ .label musicInit = MUSIC // Pointer to the music play routine .label musicPlay = MUSIC+3 +.segment Code // Play the music main: { // (*musicInit)() @@ -33,6 +39,7 @@ main: { dec VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR jmp __b1 } +.segment Data .pc = $1000 "MUSIC" // SID tune at an absolute address MUSIC: diff --git a/src/test/ref/examples/music/music.log b/src/test/ref/examples/music/music.log index 4a361bfb4..edae18eb2 100644 --- a/src/test/ref/examples/music/music.log +++ b/src/test/ref/examples/music/music.log @@ -124,9 +124,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="music.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_MOS6569_VICII_RASTER = $12 .const OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = $20 @@ -136,6 +141,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label musicInit = MUSIC // Pointer to the music play routine .label musicPlay = MUSIC+3 +.segment Code // main // Play the music main: { @@ -163,6 +169,7 @@ main: { jmp __b1 } // File Data +.segment Data .pc = $1000 "MUSIC" // SID tune at an absolute address MUSIC: @@ -199,9 +206,14 @@ Score: 1066 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="music.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_MOS6569_VICII_RASTER = $12 .const OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = $20 @@ -211,6 +223,7 @@ Score: 1066 .label musicInit = MUSIC // Pointer to the music play routine .label musicPlay = MUSIC+3 +.segment Code // main // Play the music main: { @@ -240,6 +253,7 @@ main: { jmp __b1 } // File Data +.segment Data .pc = $1000 "MUSIC" // SID tune at an absolute address MUSIC: diff --git a/src/test/ref/examples/music/music_irq.asm b/src/test/ref/examples/music/music_irq.asm index e8240e68d..483f73f7b 100644 --- a/src/test/ref/examples/music/music_irq.asm +++ b/src/test/ref/examples/music/music_irq.asm @@ -2,9 +2,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="music_irq.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // Bits for the VICII IRQ Status/Enable Registers @@ -25,6 +30,7 @@ .label musicInit = MUSIC // Pointer to the music play routine .label musicPlay = MUSIC+3 +.segment Code // Raster IRQ Routine playing music irq_play: { // (VICII->BORDER_COLOR)++; @@ -74,6 +80,7 @@ main: { // } rts } +.segment Data .pc = $1000 "MUSIC" // SID tune at an absolute address MUSIC: diff --git a/src/test/ref/examples/music/music_irq.log b/src/test/ref/examples/music/music_irq.log index d1833d25d..c8ba56bbd 100644 --- a/src/test/ref/examples/music/music_irq.log +++ b/src/test/ref/examples/music/music_irq.log @@ -163,9 +163,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="music_irq.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -187,6 +192,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label musicInit = MUSIC // Pointer to the music play routine .label musicPlay = MUSIC+3 +.segment Code // irq_play // Raster IRQ Routine playing music irq_play: { @@ -247,6 +253,7 @@ main: { rts } // File Data +.segment Data .pc = $1000 "MUSIC" // SID tune at an absolute address MUSIC: @@ -293,9 +300,14 @@ Score: 110 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="music_irq.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f @@ -317,6 +329,7 @@ Score: 110 .label musicInit = MUSIC // Pointer to the music play routine .label musicPlay = MUSIC+3 +.segment Code // irq_play // Raster IRQ Routine playing music irq_play: { @@ -387,6 +400,7 @@ main: { rts } // File Data +.segment Data .pc = $1000 "MUSIC" // SID tune at an absolute address MUSIC: diff --git a/src/test/ref/examples/nes/nes-conio.asm b/src/test/ref/examples/nes/nes-conio.asm index 33ef337b2..24a8ba93f 100644 --- a/src/test/ref/examples/nes/nes-conio.asm +++ b/src/test/ref/examples/nes/nes-conio.asm @@ -36,8 +36,6 @@ .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - // Standard Controller Right Button .const JOY_RIGHT = 1 // Standard Controller Left Button diff --git a/src/test/ref/examples/nes/nes-conio.log b/src/test/ref/examples/nes/nes-conio.log index 5e26f1d95..b6a6b1408 100644 --- a/src/test/ref/examples/nes/nes-conio.log +++ b/src/test/ref/examples/nes/nes-conio.log @@ -4225,8 +4225,6 @@ ASSEMBLER BEFORE OPTIMIZATION .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - // Global Constants & labels // Standard Controller Right Button .const JOY_RIGHT = 1 @@ -6382,8 +6380,6 @@ Score: 893289 .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - // Global Constants & labels // Standard Controller Right Button .const JOY_RIGHT = 1 diff --git a/src/test/ref/examples/nes/nes-demo.asm b/src/test/ref/examples/nes/nes-demo.asm index a4900bcf1..8b8a39568 100644 --- a/src/test/ref/examples/nes/nes-demo.asm +++ b/src/test/ref/examples/nes/nes-demo.asm @@ -37,8 +37,6 @@ .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - // Standard Controller Right Button .const JOY_RIGHT = 1 // Standard Controller Left Button diff --git a/src/test/ref/examples/nes/nes-demo.log b/src/test/ref/examples/nes/nes-demo.log index 6fd147ab4..292b96ef1 100644 --- a/src/test/ref/examples/nes/nes-demo.log +++ b/src/test/ref/examples/nes/nes-demo.log @@ -2644,8 +2644,6 @@ ASSEMBLER BEFORE OPTIMIZATION .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - // Global Constants & labels // Standard Controller Right Button .const JOY_RIGHT = 1 @@ -3795,8 +3793,6 @@ Score: 4103 .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - // Global Constants & labels // Standard Controller Right Button .const JOY_RIGHT = 1 diff --git a/src/test/ref/examples/nes/nes-dxycp.asm b/src/test/ref/examples/nes/nes-dxycp.asm index 5c0066cd5..39f31fc51 100644 --- a/src/test/ref/examples/nes/nes-dxycp.asm +++ b/src/test/ref/examples/nes/nes-dxycp.asm @@ -36,8 +36,6 @@ .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - .const OFFSET_STRUCT_SPRITEDATA_TILE = 1 .const OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES = 2 .const OFFSET_STRUCT_SPRITEDATA_X = 3 diff --git a/src/test/ref/examples/nes/nes-dxycp.log b/src/test/ref/examples/nes/nes-dxycp.log index 23da6003e..2c7fb3a37 100644 --- a/src/test/ref/examples/nes/nes-dxycp.log +++ b/src/test/ref/examples/nes/nes-dxycp.log @@ -2125,8 +2125,6 @@ ASSEMBLER BEFORE OPTIMIZATION .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - // Global Constants & labels .const OFFSET_STRUCT_SPRITEDATA_TILE = 1 .const OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES = 2 @@ -3205,8 +3203,6 @@ Score: 4702 .byte $01 // 1x 8KB VROM (CHR) .byte %00000001 // Mapper nibble 0000 == No mapping (a simple 16KB PRG + 8KB CHR game) // Mirroring nibble 0001 == Vertical mirroring only -.segment Code - // Global Constants & labels .const OFFSET_STRUCT_SPRITEDATA_TILE = 1 .const OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES = 2 diff --git a/src/test/ref/examples/nmisamples/nmisamples.asm b/src/test/ref/examples/nmisamples/nmisamples.asm index 02fc03fc7..cbee0a956 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.asm +++ b/src/test/ref/examples/nmisamples/nmisamples.asm @@ -1,9 +1,14 @@ // NMI Sample Player using the SID volume register // Code by Scan of Desire (Richard-William Loerakker) // Sample from ART OF NOISE: MOMENTS IN LOVE -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="nmisamples.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f .const SAMPLE_SIZE = $6100 @@ -23,6 +28,7 @@ // The vector used when the KERNAL serves NMI interrupts .label KERNEL_NMI = $318 .label sample = 2 +.segment Code __start: { // sample = SAMPLE lda #(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f .label col = 5 @@ -204,8 +210,10 @@ makecharset: { // for (unsigned char ii = 0; ii < 8; ++ii) inx jmp __b5 + .segment Data bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } +.segment Code // Render plasma to the passed screen doplasma: { .label c1a = 9 @@ -452,9 +460,11 @@ doplasma: { inc.z i ldx.z yval jmp __b1 + .segment Data xbuf: .fill $28, 0 ybuf: .fill $19, 0 } +.segment Code // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) @@ -510,6 +520,7 @@ memset: { !: jmp __b1 } +.segment Data .align $100 SINTABLE: .for(var i=0;i<$100;i++) diff --git a/src/test/ref/examples/plasma/plasma-unroll.log b/src/test/ref/examples/plasma/plasma-unroll.log index bf2709291..347f80146 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.log +++ b/src/test/ref/examples/plasma/plasma-unroll.log @@ -3373,9 +3373,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Ported to KickC by Jesper Gravgaard. // Original source https://github.com/cc65/cc65/blob/master/samples/plasma.c // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="plasma-unroll.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // SID Channel Control Register Noise Waveform .const SID_CONTROL_NOISE = $80 @@ -3403,6 +3408,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label c1B = $e .label c2A = $11 .label c2B = 2 +.segment Code // main main: { .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f @@ -3696,8 +3702,10 @@ makecharset: { // [32] phi makecharset::b#2 = makecharset::b#6 [phi:makecharset::@7->makecharset::@5#0] -- register_copy // [32] phi makecharset::ii#2 = makecharset::ii#1 [phi:makecharset::@7->makecharset::@5#1] -- register_copy jmp __b5 + .segment Data bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } +.segment Code // doplasma // Render plasma to the passed screen doplasma: { @@ -4066,9 +4074,11 @@ doplasma: { // [47] phi doplasma::c1a#2 = doplasma::c1a#1 [phi:doplasma::@2->doplasma::@1#2] -- register_copy // [47] phi doplasma::i#2 = doplasma::i#1 [phi:doplasma::@2->doplasma::@1#3] -- register_copy jmp __b1 + .segment Data xbuf: .fill $28, 0 ybuf: .fill $19, 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -4148,6 +4158,7 @@ memset: { jmp __b1 } // File Data +.segment Data .align $100 SINTABLE: .for(var i=0;i<$100;i++) @@ -4302,8 +4313,8 @@ Relabelling long label __b5_from___b3 to __b4 Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination -Fixing long branch [198] bcc __b2 to bcs -Fixing long branch [216] bcc __b5 to bcs +Fixing long branch [206] bcc __b2 to bcs +Fixing long branch [224] bcc __b5 to bcs FINAL SYMBOL TABLE const nomodify byte BLACK = 0 @@ -4525,9 +4536,14 @@ Score: 95644 // Ported to KickC by Jesper Gravgaard. // Original source https://github.com/cc65/cc65/blob/master/samples/plasma.c // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="plasma-unroll.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // SID Channel Control Register Noise Waveform .const SID_CONTROL_NOISE = $80 @@ -4555,6 +4571,7 @@ Score: 95644 .label c1B = $e .label c2A = $11 .label c2B = 2 +.segment Code // main main: { .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f @@ -4821,8 +4838,10 @@ makecharset: { // [32] phi makecharset::b#2 = makecharset::b#6 [phi:makecharset::@7->makecharset::@5#0] -- register_copy // [32] phi makecharset::ii#2 = makecharset::ii#1 [phi:makecharset::@7->makecharset::@5#1] -- register_copy jmp __b5 + .segment Data bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } +.segment Code // doplasma // Render plasma to the passed screen doplasma: { @@ -5203,9 +5222,11 @@ doplasma: { // [47] phi doplasma::c1a#2 = doplasma::c1a#1 [phi:doplasma::@2->doplasma::@1#2] -- register_copy // [47] phi doplasma::i#2 = doplasma::i#1 [phi:doplasma::@2->doplasma::@1#3] -- register_copy jmp __b1 + .segment Data xbuf: .fill $28, 0 ybuf: .fill $19, 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -5284,6 +5305,7 @@ memset: { jmp __b1 } // File Data +.segment Data .align $100 SINTABLE: .for(var i=0;i<$100;i++) diff --git a/src/test/ref/examples/plasma/plasma.asm b/src/test/ref/examples/plasma/plasma.asm index f9958f5a1..5ce7434eb 100644 --- a/src/test/ref/examples/plasma/plasma.asm +++ b/src/test/ref/examples/plasma/plasma.asm @@ -3,9 +3,14 @@ // Cleanup and porting to CC65 by Ullrich von Bassewitz. // Ported to KickC by Jesper Gravgaard. // Original source https://github.com/cc65/cc65/blob/master/samples/plasma.c -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="plasma.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // SID Channel Control Register Noise Waveform .const SID_CONTROL_NOISE = $80 // The colors of the C64 @@ -33,6 +38,7 @@ .label c1B = $e .label c2A = $11 .label c2B = 5 +.segment Code main: { .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f .const toD0182_return = (>(SCREEN2&$3fff)*4)|(>CHARSET)/4&$f @@ -217,8 +223,10 @@ makecharset: { // for (char ii = 0; ii < 8; ++ii) inx jmp __b5 + .segment Data bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } +.segment Code // Render plasma to the passed screen // doplasma(byte* zp($c) screen) doplasma: { @@ -348,9 +356,11 @@ doplasma: { // for (char i = 0; i < 25; ++i) inc.z i jmp __b1 + .segment Data xbuf: .fill $28, 0 ybuf: .fill $19, 0 } +.segment Code // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) @@ -406,6 +416,7 @@ memset: { !: jmp __b1 } +.segment Data .align $100 SINTABLE: .for(var i=0;i<$100;i++) diff --git a/src/test/ref/examples/plasma/plasma.log b/src/test/ref/examples/plasma/plasma.log index 68d4ffd5e..112197d26 100644 --- a/src/test/ref/examples/plasma/plasma.log +++ b/src/test/ref/examples/plasma/plasma.log @@ -2487,9 +2487,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Ported to KickC by Jesper Gravgaard. // Original source https://github.com/cc65/cc65/blob/master/samples/plasma.c // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="plasma.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // SID Channel Control Register Noise Waveform .const SID_CONTROL_NOISE = $80 @@ -2518,6 +2523,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label c1B = $e .label c2A = $11 .label c2B = 5 +.segment Code // main main: { .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f @@ -2847,8 +2853,10 @@ makecharset: { // [35] phi makecharset::b#2 = makecharset::b#6 [phi:makecharset::@7->makecharset::@5#0] -- register_copy // [35] phi makecharset::ii#2 = makecharset::ii#1 [phi:makecharset::@7->makecharset::@5#1] -- register_copy jmp __b5 + .segment Data bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } +.segment Code // doplasma // Render plasma to the passed screen // doplasma(byte* zp($c) screen) @@ -3035,9 +3043,11 @@ doplasma: { // [51] phi doplasma::c1a#2 = doplasma::c1a#1 [phi:doplasma::@2->doplasma::@1#1] -- register_copy // [51] phi doplasma::i#2 = doplasma::i#1 [phi:doplasma::@2->doplasma::@1#2] -- register_copy jmp __b1 + .segment Data xbuf: .fill $28, 0 ybuf: .fill $19, 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -3117,6 +3127,7 @@ memset: { jmp __b1 } // File Data +.segment Data .align $100 SINTABLE: .for(var i=0;i<$100;i++) @@ -3406,9 +3417,14 @@ Score: 95730 // Ported to KickC by Jesper Gravgaard. // Original source https://github.com/cc65/cc65/blob/master/samples/plasma.c // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="plasma.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // SID Channel Control Register Noise Waveform .const SID_CONTROL_NOISE = $80 @@ -3437,6 +3453,7 @@ Score: 95730 .label c1B = $e .label c2A = $11 .label c2B = 5 +.segment Code // main main: { .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f @@ -3734,8 +3751,10 @@ makecharset: { // [35] phi makecharset::b#2 = makecharset::b#6 [phi:makecharset::@7->makecharset::@5#0] -- register_copy // [35] phi makecharset::ii#2 = makecharset::ii#1 [phi:makecharset::@7->makecharset::@5#1] -- register_copy jmp __b5 + .segment Data bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } +.segment Code // doplasma // Render plasma to the passed screen // doplasma(byte* zp($c) screen) @@ -3931,9 +3950,11 @@ doplasma: { // [51] phi doplasma::c1a#2 = doplasma::c1a#1 [phi:doplasma::@2->doplasma::@1#1] -- register_copy // [51] phi doplasma::i#2 = doplasma::i#1 [phi:doplasma::@2->doplasma::@1#2] -- register_copy jmp __b1 + .segment Data xbuf: .fill $28, 0 ybuf: .fill $19, 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -4012,6 +4033,7 @@ memset: { jmp __b1 } // File Data +.segment Data .align $100 SINTABLE: .for(var i=0;i<$100;i++) diff --git a/src/test/ref/examples/plus4walk/plus4walk.asm b/src/test/ref/examples/plus4walk/plus4walk.asm index 128d4c6ed..95a72fb24 100644 --- a/src/test/ref/examples/plus4walk/plus4walk.asm +++ b/src/test/ref/examples/plus4walk/plus4walk.asm @@ -15,9 +15,6 @@ .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(main) -.segment Code - - .const OFFSET_STRUCT_MOS7360_TED_BG_COLOR = $15 .const OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR = $19 .const OFFSET_STRUCT_MOS7360_TED_RASTER_LO = $1d diff --git a/src/test/ref/examples/plus4walk/plus4walk.log b/src/test/ref/examples/plus4walk/plus4walk.log index 77f83af57..77ce0a3dc 100644 --- a/src/test/ref/examples/plus4walk/plus4walk.log +++ b/src/test/ref/examples/plus4walk/plus4walk.log @@ -1168,9 +1168,6 @@ ASSEMBLER BEFORE OPTIMIZATION .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(main) -.segment Code - - // Global Constants & labels .const OFFSET_STRUCT_MOS7360_TED_BG_COLOR = $15 .const OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR = $19 @@ -1786,9 +1783,6 @@ Score: 6541 .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(main) -.segment Code - - // Global Constants & labels .const OFFSET_STRUCT_MOS7360_TED_BG_COLOR = $15 .const OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR = $19 diff --git a/src/test/ref/examples/rasterbars/raster-bars.asm b/src/test/ref/examples/rasterbars/raster-bars.asm index 708055850..c628385fb 100644 --- a/src/test/ref/examples/rasterbars/raster-bars.asm +++ b/src/test/ref/examples/rasterbars/raster-bars.asm @@ -1,14 +1,20 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="raster-bars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_MOS6569_VICII_RASTER = $12 .const OFFSET_STRUCT_MOS6569_VICII_BG_COLOR = $21 .const OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = $20 // The VIC-II MOS 6567/6569 .label VICII = $d000 +.segment Code main: { // asm sei @@ -88,4 +94,5 @@ raster: { // } rts } +.segment Data rastercols: .byte $b, 0, $b, $b, $c, $b, $c, $c, $f, $c, $f, $f, 1, $f, 1, 1, $f, 1, $f, $f, $c, $f, $c, $c, $b, $c, $b, $b, 0, $b, 0, $ff diff --git a/src/test/ref/examples/rasterbars/raster-bars.log b/src/test/ref/examples/rasterbars/raster-bars.log index 1fc513dc8..914738ebe 100644 --- a/src/test/ref/examples/rasterbars/raster-bars.log +++ b/src/test/ref/examples/rasterbars/raster-bars.log @@ -207,15 +207,21 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="raster-bars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_MOS6569_VICII_RASTER = $12 .const OFFSET_STRUCT_MOS6569_VICII_BG_COLOR = $21 .const OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = $20 // The VIC-II MOS 6567/6569 .label VICII = $d000 +.segment Code // main main: { // asm { sei } @@ -321,6 +327,7 @@ raster: { rts } // File Data +.segment Data rastercols: .byte $b, 0, $b, $b, $c, $b, $c, $c, $f, $c, $f, $f, 1, $f, 1, 1, $f, 1, $f, $f, $c, $f, $c, $c, $b, $c, $b, $b, 0, $b, 0, $ff ASSEMBLER OPTIMIZATIONS @@ -369,15 +376,21 @@ Score: 8340 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="raster-bars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_MOS6569_VICII_RASTER = $12 .const OFFSET_STRUCT_MOS6569_VICII_BG_COLOR = $21 .const OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = $20 // The VIC-II MOS 6567/6569 .label VICII = $d000 +.segment Code // main main: { // asm @@ -485,5 +498,6 @@ raster: { rts } // File Data +.segment Data rastercols: .byte $b, 0, $b, $b, $c, $b, $c, $c, $f, $c, $f, $f, 1, $f, 1, 1, $f, 1, $f, $f, $c, $f, $c, $c, $b, $c, $b, $b, 0, $b, 0, $ff diff --git a/src/test/ref/examples/rotate/rotate.asm b/src/test/ref/examples/rotate/rotate.asm index 3f4c6d2e0..df9bd815e 100644 --- a/src/test/ref/examples/rotate/rotate.asm +++ b/src/test/ref/examples/rotate/rotate.asm @@ -1,7 +1,12 @@ // 2D rotattion of 8 sprites -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="rotate.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -28,6 +33,7 @@ .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 .label COS = SIN+$40 +.segment Code // sin(x) = cos(x+PI/2) main: { // asm @@ -607,6 +613,7 @@ print_char_at: { // } rts } +.segment Data // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). // (SCREEN&$3fff)*4)|(>LOGO)/4&$f // asm @@ -913,6 +919,7 @@ mul16u: { rol.z mb+3 jmp __b1 } +.segment Data .align $100 xsin: .fill 2*XSIN_SIZE, 0 .pc = $2000 "LOGO" diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.log b/src/test/ref/examples/scrolllogo/scrolllogo.log index 622299da8..b8c72a29c 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.log +++ b/src/test/ref/examples/scrolllogo/scrolllogo.log @@ -4361,9 +4361,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="scrolllogo.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_MCM = $10 // The colors of the C64 @@ -4393,6 +4398,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Remainder after unsigned 16-bit division .label rem16u = $1a .label xsin_idx = 6 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>LOGO)/4&$f @@ -5765,6 +5771,7 @@ mul16u: { jmp __b1 } // File Data +.segment Data .align $100 xsin: .fill 2*XSIN_SIZE, 0 .pc = $2000 "LOGO" @@ -6334,9 +6341,14 @@ Score: 43921 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="scrolllogo.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_MCM = $10 // The colors of the C64 @@ -6366,6 +6378,7 @@ Score: 43921 // Remainder after unsigned 16-bit division .label rem16u = $1a .label xsin_idx = 6 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>LOGO)/4&$f @@ -7662,6 +7675,7 @@ mul16u: { jmp __b1 } // File Data +.segment Data .align $100 xsin: .fill 2*XSIN_SIZE, 0 .pc = $2000 "LOGO" diff --git a/src/test/ref/examples/showlogo/showlogo.asm b/src/test/ref/examples/showlogo/showlogo.asm index 253661aca..564fe1bbd 100644 --- a/src/test/ref/examples/showlogo/showlogo.asm +++ b/src/test/ref/examples/showlogo/showlogo.asm @@ -1,9 +1,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="showlogo.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const VIC_MCM = $10 .const VIC_CSEL = 8 // The colors of the C64 @@ -21,6 +26,7 @@ // Color Ram .label COLS = $d800 .label SCREEN = $400 +.segment Code main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>LOGO)/4&$f // VICII->BORDER_COLOR = WHITE @@ -106,6 +112,7 @@ memset: { !: jmp __b2 } +.segment Data .pc = $2000 "LOGO" LOGO: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) diff --git a/src/test/ref/examples/showlogo/showlogo.log b/src/test/ref/examples/showlogo/showlogo.log index d34ae3a41..d948bf29c 100644 --- a/src/test/ref/examples/showlogo/showlogo.log +++ b/src/test/ref/examples/showlogo/showlogo.log @@ -571,9 +571,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="showlogo.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_MCM = $10 .const VIC_CSEL = 8 @@ -592,6 +597,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Color Ram .label COLS = $d800 .label SCREEN = $400 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>LOGO)/4&$f @@ -728,6 +734,7 @@ memset: { jmp __b2_from___b3 } // File Data +.segment Data .pc = $2000 "LOGO" LOGO: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) @@ -826,9 +833,14 @@ Score: 3324 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="showlogo.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_MCM = $10 .const VIC_CSEL = 8 @@ -847,6 +859,7 @@ Score: 3324 // Color Ram .label COLS = $d800 .label SCREEN = $400 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>LOGO)/4&$f @@ -977,6 +990,7 @@ memset: { jmp __b2 } // File Data +.segment Data .pc = $2000 "LOGO" LOGO: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) diff --git a/src/test/ref/examples/sinplotter/sine-plotter.asm b/src/test/ref/examples/sinplotter/sine-plotter.asm index 2870f3b29..bb00b0321 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.asm +++ b/src/test/ref/examples/sinplotter/sine-plotter.asm @@ -1,7 +1,12 @@ // Generate a big sine and plot it on a bitmap -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sine-plotter.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const VIC_BMM = $20 .const VIC_DEN = $10 .const VIC_RSEL = 8 @@ -36,6 +41,7 @@ .label BITMAP = $2000 // Remainder after unsigned 16-bit division .label rem16u = $12 +.segment Code main: { .const vicSelectGfxBank1_toDd001_return = 3 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f @@ -960,6 +966,7 @@ mul16u: { rol.z mb+3 jmp __b1 } +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 diff --git a/src/test/ref/examples/sinplotter/sine-plotter.log b/src/test/ref/examples/sinplotter/sine-plotter.log index 7dc47efb7..5e5a6b323 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.log +++ b/src/test/ref/examples/sinplotter/sine-plotter.log @@ -3993,9 +3993,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Generate a big sine and plot it on a bitmap // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sine-plotter.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -4031,6 +4036,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label BITMAP = $2000 // Remainder after unsigned 16-bit division .label rem16u = $12 +.segment Code // main main: { .const vicSelectGfxBank1_toDd001_return = 3 @@ -5432,6 +5438,7 @@ mul16u: { jmp __b1 } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 @@ -6016,9 +6023,14 @@ Score: 24554 // File Comments // Generate a big sine and plot it on a bitmap // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sine-plotter.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -6054,6 +6066,7 @@ Score: 24554 .label BITMAP = $2000 // Remainder after unsigned 16-bit division .label rem16u = $12 +.segment Code // main main: { .const vicSelectGfxBank1_toDd001_return = 3 @@ -7393,6 +7406,7 @@ mul16u: { jmp __b1 } // File Data +.segment Data // Tables for the plotter - initialized by calling bitmap_init(); bitmap_plot_ylo: .fill $100, 0 bitmap_plot_yhi: .fill $100, 0 diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.asm b/src/test/ref/examples/sinsprites/sinus-sprites.asm index 9fe0c5214..b34446d97 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.asm +++ b/src/test/ref/examples/sinsprites/sinus-sprites.asm @@ -1,9 +1,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinus-sprites.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const sinlen_x = $dd .const sinlen_y = $c5 .const OFFSET_STRUCT_MOS6569_VICII_RASTER = $12 @@ -34,6 +39,7 @@ .label progress_cursor = $a .label sin_idx_x = 4 .label sin_idx_y = 5 +.segment Code main: { // init() jsr init @@ -339,8 +345,10 @@ gen_sprites: { bne __b1 // } rts + .segment Data cml: .text "camelot" } +.segment Code // Initialize the PETSCII progress bar // progress_init(byte* zp($a) line) progress_init: { @@ -499,12 +507,14 @@ gen_sintab: { // for(char i =0; igen_sintab::@1#1] -- register_copy // [118] phi gen_sintab::i#10 = gen_sintab::i#1 [phi:gen_sintab::@22->gen_sintab::@1#2] -- register_copy jmp __b1 + .segment Data f_i: .byte 0, 0, 0, 0, 0 // i * 2 * PI f_min: .byte 0, 0, 0, 0, 0 // amplitude/2 + min f_amp: .byte 0, 0, 0, 0, 0 } +.segment Code // gen_chargen_sprite // Generate a sprite from a C64 CHARGEN character (by making each pixel 3x3 pixels large) // - c is the character to generate @@ -5039,6 +5049,7 @@ progress_inc: { __breturn: // [225] return rts + .segment Data // Progress characters progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0 } @@ -5586,9 +5597,14 @@ Score: 769690 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinus-sprites.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const sinlen_x = $dd .const sinlen_y = $c5 @@ -5620,6 +5636,7 @@ Score: 769690 .label progress_cursor = $a .label sin_idx_x = 4 .label sin_idx_y = 5 +.segment Code // main main: { // init() @@ -6113,8 +6130,10 @@ gen_sprites: { // } // [91] return rts + .segment Data cml: .text "camelot" } +.segment Code // progress_init // Initialize the PETSCII progress bar // progress_init(byte* zp($a) line) @@ -6386,12 +6405,14 @@ gen_sintab: { // [118] phi progress_idx#13 = progress_idx#11 [phi:gen_sintab::@22->gen_sintab::@1#1] -- register_copy // [118] phi gen_sintab::i#10 = gen_sintab::i#1 [phi:gen_sintab::@22->gen_sintab::@1#2] -- register_copy jmp __b1 + .segment Data f_i: .byte 0, 0, 0, 0, 0 // i * 2 * PI f_min: .byte 0, 0, 0, 0, 0 // amplitude/2 + min f_amp: .byte 0, 0, 0, 0, 0 } +.segment Code // gen_chargen_sprite // Generate a sprite from a C64 CHARGEN character (by making each pixel 3x3 pixels large) // - c is the character to generate @@ -6854,6 +6875,7 @@ progress_inc: { // } // [225] return rts + .segment Data // Progress characters progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0 } diff --git a/src/test/ref/fastmultiply-127.asm b/src/test/ref/fastmultiply-127.asm index ff0404d6a..bbcc243c8 100644 --- a/src/test/ref/fastmultiply-127.asm +++ b/src/test/ref/fastmultiply-127.asm @@ -3,12 +3,18 @@ // In this model 255 binary represents 1.0 - meaning that 255*255 = 255 // Uses principles from C=Hacking #16 https://codebase64.org/doku.php?id=magazines:chacking16 // Utilizes the fact that a*b = ((a+b)/2)^2 - ((a-b)/2)^2 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fastmultiply-127.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label print_screen = $400 .label print_char_cursor = 8 .label print_line_cursor = 2 +.segment Code main: { // print_cls() jsr print_cls @@ -137,11 +143,13 @@ main: { jsr print_mulf8s127 // } rts + .segment Data str: .text "unsigned" .byte 0 str1: .text "signed" .byte 0 } +.segment Code // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) @@ -520,6 +528,7 @@ print_sint: { sta.z w+1 jmp __b2 } +.segment Data print_hextab: .text "0123456789abcdef" // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). // f(x) = ( x * x )/4 diff --git a/src/test/ref/fastmultiply-127.log b/src/test/ref/fastmultiply-127.log index 3b71aa306..bc4e4216d 100644 --- a/src/test/ref/fastmultiply-127.log +++ b/src/test/ref/fastmultiply-127.log @@ -2838,13 +2838,19 @@ ASSEMBLER BEFORE OPTIMIZATION // Uses principles from C=Hacking #16 https://codebase64.org/doku.php?id=magazines:chacking16 // Utilizes the fact that a*b = ((a+b)/2)^2 - ((a-b)/2)^2 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fastmultiply-127.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_char_cursor = 8 .label print_line_cursor = 2 +.segment Code // main main: { // [1] call print_cls @@ -3181,11 +3187,13 @@ main: { __breturn: // [46] return rts + .segment Data str: .text "unsigned" .byte 0 str1: .text "signed" .byte 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -3892,6 +3900,7 @@ print_sint: { jmp __b2_from___b4 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). // f(x) = ( x * x )/4 @@ -4336,13 +4345,19 @@ Score: 2177 // Uses principles from C=Hacking #16 https://codebase64.org/doku.php?id=magazines:chacking16 // Utilizes the fact that a*b = ((a+b)/2)^2 - ((a-b)/2)^2 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fastmultiply-127.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_char_cursor = 8 .label print_line_cursor = 2 +.segment Code // main main: { // print_cls() @@ -4608,11 +4623,13 @@ main: { // } // [46] return rts + .segment Data str: .text "unsigned" .byte 0 str1: .text "signed" .byte 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -5254,6 +5271,7 @@ print_sint: { jmp __b2 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). // f(x) = ( x * x )/4 diff --git a/src/test/ref/fibmem.asm b/src/test/ref/fibmem.asm index 22c29b00c..b8c002033 100644 --- a/src/test/ref/fibmem.asm +++ b/src/test/ref/fibmem.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fibmem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // fibs[0] = 0 lda #0 @@ -23,4 +29,5 @@ main: { // } rts } +.segment Data fibs: .fill $f, 0 diff --git a/src/test/ref/fibmem.log b/src/test/ref/fibmem.log index 52f4545c5..81e8adeca 100644 --- a/src/test/ref/fibmem.log +++ b/src/test/ref/fibmem.log @@ -161,10 +161,16 @@ Uplifting [] best 353 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fibmem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [0] *fibs = 0 -- _deref_pbuc1=vbuc2 @@ -202,6 +208,7 @@ main: { rts } // File Data +.segment Data fibs: .fill $f, 0 ASSEMBLER OPTIMIZATIONS @@ -234,10 +241,16 @@ Score: 263 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fibmem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // fibs[0] = 0 @@ -275,5 +288,6 @@ main: { rts } // File Data +.segment Data fibs: .fill $f, 0 diff --git a/src/test/ref/fill-square.asm b/src/test/ref/fill-square.asm index bc9822ca0..be961fa2f 100644 --- a/src/test/ref/fill-square.asm +++ b/src/test/ref/fill-square.asm @@ -1,8 +1,14 @@ // Fill a square on the screen -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fill-square.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label __0 = 3 .label __5 = 3 diff --git a/src/test/ref/fill-square.log b/src/test/ref/fill-square.log index b12460ef7..5c6d46440 100644 --- a/src/test/ref/fill-square.log +++ b/src/test/ref/fill-square.log @@ -248,11 +248,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Fill a square on the screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fill-square.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label __0 = 3 @@ -399,11 +405,17 @@ Score: 3381 // File Comments // Fill a square on the screen // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fill-square.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label __0 = 3 diff --git a/src/test/ref/fillscreen-1.asm b/src/test/ref/fillscreen-1.asm index deb2e7626..2706137ff 100644 --- a/src/test/ref/fillscreen-1.asm +++ b/src/test/ref/fillscreen-1.asm @@ -1,8 +1,14 @@ // Fill screen using an efficient char-based index -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fillscreen-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/fillscreen-1.log b/src/test/ref/fillscreen-1.log index 3b2616115..dd4f6a411 100644 --- a/src/test/ref/fillscreen-1.log +++ b/src/test/ref/fillscreen-1.log @@ -160,11 +160,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Fill screen using an efficient char-based index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fillscreen-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -234,11 +240,17 @@ Score: 341 // File Comments // Fill screen using an efficient char-based index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fillscreen-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/fillscreen-2.asm b/src/test/ref/fillscreen-2.asm index 608f68186..507cc6fa3 100644 --- a/src/test/ref/fillscreen-2.asm +++ b/src/test/ref/fillscreen-2.asm @@ -1,8 +1,14 @@ // Fill screen using an word-based index -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fillscreen-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label i = 2 .label __1 = 4 diff --git a/src/test/ref/fillscreen-2.log b/src/test/ref/fillscreen-2.log index 549b4d216..30d79a9b7 100644 --- a/src/test/ref/fillscreen-2.log +++ b/src/test/ref/fillscreen-2.log @@ -131,11 +131,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Fill screen using an word-based index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fillscreen-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label i = 2 @@ -219,11 +225,17 @@ Score: 696 // File Comments // Fill screen using an word-based index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fillscreen-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label i = 2 diff --git a/src/test/ref/fillscreen-3.asm b/src/test/ref/fillscreen-3.asm index d62c1dd49..81dbe37fd 100644 --- a/src/test/ref/fillscreen-3.asm +++ b/src/test/ref/fillscreen-3.asm @@ -1,8 +1,14 @@ // Fill screen using a pointer -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fillscreen-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label dst = 2 lda #(SCREEN&$3fff)*4)|(>CHARSET)/4&$f // *D018 = toD018(SCREEN, CHARSET) @@ -134,5 +140,6 @@ init_font_hex: { // } rts } +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 diff --git a/src/test/ref/font-hex-show.log b/src/test/ref/font-hex-show.log index b0a57e3aa..da20456d7 100644 --- a/src/test/ref/font-hex-show.log +++ b/src/test/ref/font-hex-show.log @@ -665,13 +665,19 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="font-hex-show.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label D018 = $d018 .label SCREEN = $400 .label CHARSET = $2000 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -875,6 +881,7 @@ init_font_hex: { rts } // File Data +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 @@ -986,13 +993,19 @@ Score: 72379 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="font-hex-show.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label D018 = $d018 .label SCREEN = $400 .label CHARSET = $2000 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -1185,6 +1198,7 @@ init_font_hex: { rts } // File Data +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 diff --git a/src/test/ref/for-empty-increment.asm b/src/test/ref/for-empty-increment.asm index 0db8f14a8..783da4d5e 100644 --- a/src/test/ref/for-empty-increment.asm +++ b/src/test/ref/for-empty-increment.asm @@ -1,7 +1,13 @@ // Tests that for()-loops can have empty increments -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-empty-increment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 diff --git a/src/test/ref/for-empty-increment.log b/src/test/ref/for-empty-increment.log index d5e2533fe..40e9faadc 100644 --- a/src/test/ref/for-empty-increment.log +++ b/src/test/ref/for-empty-increment.log @@ -113,10 +113,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that for()-loops can have empty increments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-empty-increment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -174,10 +180,16 @@ Score: 191 // File Comments // Tests that for()-loops can have empty increments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-empty-increment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/for-empty-init.asm b/src/test/ref/for-empty-init.asm index 09a2f91bc..a98d4bf14 100644 --- a/src/test/ref/for-empty-init.asm +++ b/src/test/ref/for-empty-init.asm @@ -1,7 +1,13 @@ // Tests that for()-loops can have empty inits -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-empty-init.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 diff --git a/src/test/ref/for-empty-init.log b/src/test/ref/for-empty-init.log index 06fc78d9b..98bbc0b44 100644 --- a/src/test/ref/for-empty-init.log +++ b/src/test/ref/for-empty-init.log @@ -113,10 +113,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that for()-loops can have empty inits // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-empty-init.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -174,10 +180,16 @@ Score: 191 // File Comments // Tests that for()-loops can have empty inits // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-empty-init.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/for-ever-2.asm b/src/test/ref/for-ever-2.asm index b3bb3e68b..3a4541d92 100644 --- a/src/test/ref/for-ever-2.asm +++ b/src/test/ref/for-ever-2.asm @@ -1,8 +1,14 @@ // Test a for() loop that runs forever -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-ever-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/for-ever-2.log b/src/test/ref/for-ever-2.log index 57b942c28..2a55739e7 100644 --- a/src/test/ref/for-ever-2.log +++ b/src/test/ref/for-ever-2.log @@ -93,11 +93,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test a for() loop that runs forever // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-ever-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -141,11 +147,17 @@ Score: 140 // File Comments // Test a for() loop that runs forever // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-ever-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/for-ever.asm b/src/test/ref/for-ever.asm index 2d05ca01c..76b08d7f9 100644 --- a/src/test/ref/for-ever.asm +++ b/src/test/ref/for-ever.asm @@ -1,8 +1,14 @@ // Test a for() loop that runs forever -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-ever.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { __b1: // (*SCREEN)++; diff --git a/src/test/ref/for-ever.log b/src/test/ref/for-ever.log index 140adbccc..0ab85334b 100644 --- a/src/test/ref/for-ever.log +++ b/src/test/ref/for-ever.log @@ -71,11 +71,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test a for() loop that runs forever // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-ever.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { jmp __b1 @@ -103,11 +109,17 @@ Score: 90 // File Comments // Test a for() loop that runs forever // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-ever.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // main::@1 diff --git a/src/test/ref/for-two-vars.asm b/src/test/ref/for-two-vars.asm index b738e557b..65e196e5b 100644 --- a/src/test/ref/for-two-vars.asm +++ b/src/test/ref/for-two-vars.asm @@ -1,8 +1,14 @@ // Test a for-loop with two iterating variables // Illustrates that for()-loops currently cannot contain two variable declarations. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-two-vars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label sc = 2 diff --git a/src/test/ref/for-two-vars.log b/src/test/ref/for-two-vars.log index d7d17348b..60bfe6cc0 100644 --- a/src/test/ref/for-two-vars.log +++ b/src/test/ref/for-two-vars.log @@ -147,10 +147,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Test a for-loop with two iterating variables // Illustrates that for()-loops currently cannot contain two variable declarations. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-two-vars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -227,10 +233,16 @@ Score: 476 // Test a for-loop with two iterating variables // Illustrates that for()-loops currently cannot contain two variable declarations. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="for-two-vars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/forced-zeropage.asm b/src/test/ref/forced-zeropage.asm index ab8b76854..d06d4a602 100644 --- a/src/test/ref/forced-zeropage.asm +++ b/src/test/ref/forced-zeropage.asm @@ -1,7 +1,13 @@ // Test some forced zeropage access -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forced-zeropage.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label __1 = 4 .label u = 2 diff --git a/src/test/ref/forced-zeropage.log b/src/test/ref/forced-zeropage.log index f6909ae16..25e40015f 100644 --- a/src/test/ref/forced-zeropage.log +++ b/src/test/ref/forced-zeropage.log @@ -107,10 +107,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test some forced zeropage access // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forced-zeropage.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label __1 = 4 @@ -171,10 +177,16 @@ Score: 74 // File Comments // Test some forced zeropage access // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forced-zeropage.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label __1 = 4 diff --git a/src/test/ref/forclassicmin.asm b/src/test/ref/forclassicmin.asm index d31fd5bb1..2d9c7bcd0 100644 --- a/src/test/ref/forclassicmin.asm +++ b/src/test/ref/forclassicmin.asm @@ -1,8 +1,14 @@ // Minimal classic for() loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forclassicmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/forclassicmin.log b/src/test/ref/forclassicmin.log index 17324ce43..ebd1c8cf4 100644 --- a/src/test/ref/forclassicmin.log +++ b/src/test/ref/forclassicmin.log @@ -120,11 +120,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal classic for() loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forclassicmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -181,11 +187,17 @@ Score: 191 // File Comments // Minimal classic for() loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forclassicmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/forincrementassign.asm b/src/test/ref/forincrementassign.asm index 8dd818853..bd299dea2 100644 --- a/src/test/ref/forincrementassign.asm +++ b/src/test/ref/forincrementassign.asm @@ -1,9 +1,15 @@ // Classic for() does not allow assignment as increment, eg. for(byte i=0;i<40;i=i+2) {} // The following should give a program rendering a char on every second char of the first line - but results in a syntax error -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forincrementassign.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { lda #0 __b1: diff --git a/src/test/ref/forincrementassign.log b/src/test/ref/forincrementassign.log index 10ef1621a..924d069b1 100644 --- a/src/test/ref/forincrementassign.log +++ b/src/test/ref/forincrementassign.log @@ -129,11 +129,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Classic for() does not allow assignment as increment, eg. for(byte i=0;i<40;i=i+2) {} // The following should give a program rendering a char on every second char of the first line - but results in a syntax error // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forincrementassign.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -192,11 +198,17 @@ Score: 211 // Classic for() does not allow assignment as increment, eg. for(byte i=0;i<40;i=i+2) {} // The following should give a program rendering a char on every second char of the first line - but results in a syntax error // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forincrementassign.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/forrangedwords.asm b/src/test/ref/forrangedwords.asm index cd75cd2d3..efc57407c 100644 --- a/src/test/ref/forrangedwords.asm +++ b/src/test/ref/forrangedwords.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forrangedwords.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label w = 2 diff --git a/src/test/ref/forrangedwords.log b/src/test/ref/forrangedwords.log index 0b60a06f9..bfc43a592 100644 --- a/src/test/ref/forrangedwords.log +++ b/src/test/ref/forrangedwords.log @@ -211,10 +211,16 @@ Uplifting [] best 1121 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forrangedwords.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -341,10 +347,16 @@ Score: 951 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forrangedwords.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/forrangemin.asm b/src/test/ref/forrangemin.asm index dd2cb989c..43389b291 100644 --- a/src/test/ref/forrangemin.asm +++ b/src/test/ref/forrangemin.asm @@ -1,9 +1,15 @@ // Minimal range based for() loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forrangemin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN1 = $400 .label SCREEN2 = $500 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/forrangemin.log b/src/test/ref/forrangemin.log index ef918993b..49cdc192a 100644 --- a/src/test/ref/forrangemin.log +++ b/src/test/ref/forrangemin.log @@ -174,12 +174,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal range based for() loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forrangemin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN1 = $400 .label SCREEN2 = $500 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -267,12 +273,18 @@ Score: 316 // File Comments // Minimal range based for() loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forrangemin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN1 = $400 .label SCREEN2 = $500 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/forrangesymbolic.asm b/src/test/ref/forrangesymbolic.asm index efb5d104f..4d34732e5 100644 --- a/src/test/ref/forrangesymbolic.asm +++ b/src/test/ref/forrangesymbolic.asm @@ -1,8 +1,14 @@ // Range-based for does not recognize symbolic constants. // The following should work but gives a not-constant exception -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forrangesymbolic.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label BITMAP = $2000 .label b = 2 diff --git a/src/test/ref/forrangesymbolic.log b/src/test/ref/forrangesymbolic.log index 2c1cdd467..3462306c9 100644 --- a/src/test/ref/forrangesymbolic.log +++ b/src/test/ref/forrangesymbolic.log @@ -125,10 +125,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Range-based for does not recognize symbolic constants. // The following should work but gives a not-constant exception // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forrangesymbolic.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label BITMAP = $2000 @@ -203,10 +209,16 @@ Score: 511 // Range-based for does not recognize symbolic constants. // The following should work but gives a not-constant exception // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="forrangesymbolic.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label BITMAP = $2000 diff --git a/src/test/ref/fragment-synth.asm b/src/test/ref/fragment-synth.asm index 8da8ef15d..234758d2b 100644 --- a/src/test/ref/fragment-synth.asm +++ b/src/test/ref/fragment-synth.asm @@ -1,8 +1,14 @@ // Tests a sub-optimal fragment synthesis // vbuaa=vbuxx_band_pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuc1_band_vbuxx < vbuaa=pbuz1_derefidx_vbuaa_band_vbuxx < vbuaa=pbuz1_derefidx_vbuyy_band_vbuxx < vbuaa=pbuz1_derefidx_vbuyy_band_vbuaa < vbuaa=vbuaa_band_pbuz1_derefidx_vbuyy - clobber:A Y cycles:11.5 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fragment-synth.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 // z[2] = $f0 diff --git a/src/test/ref/fragment-synth.log b/src/test/ref/fragment-synth.log index 514c18cfd..eb2bf566f 100644 --- a/src/test/ref/fragment-synth.log +++ b/src/test/ref/fragment-synth.log @@ -286,10 +286,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests a sub-optimal fragment synthesis // vbuaa=vbuxx_band_pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuc1_band_vbuxx < vbuaa=pbuz1_derefidx_vbuaa_band_vbuxx < vbuaa=pbuz1_derefidx_vbuyy_band_vbuxx < vbuaa=pbuz1_derefidx_vbuyy_band_vbuaa < vbuaa=vbuaa_band_pbuz1_derefidx_vbuyy - clobber:A Y cycles:11.5 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fragment-synth.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -407,10 +413,16 @@ Score: 77 // Tests a sub-optimal fragment synthesis // vbuaa=vbuxx_band_pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuc1_band_vbuxx < vbuaa=pbuz1_derefidx_vbuaa_band_vbuxx < vbuaa=pbuz1_derefidx_vbuyy_band_vbuxx < vbuaa=pbuz1_derefidx_vbuyy_band_vbuaa < vbuaa=vbuaa_band_pbuz1_derefidx_vbuyy - clobber:A Y cycles:11.5 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fragment-synth.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/fragment-variations.asm b/src/test/ref/fragment-variations.asm index 134c69d9c..8d8c2fa89 100644 --- a/src/test/ref/fragment-variations.asm +++ b/src/test/ref/fragment-variations.asm @@ -1,9 +1,15 @@ // Tests that ASM fragment variations works // ASM fragment variations "cast" constants to different types -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fragment-variations.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_DWORD = 4 +.segment Code main: { .label screen = $400 .label __0 = 6 diff --git a/src/test/ref/fragment-variations.log b/src/test/ref/fragment-variations.log index 2cb0cd7e6..d7f3def6e 100644 --- a/src/test/ref/fragment-variations.log +++ b/src/test/ref/fragment-variations.log @@ -272,11 +272,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests that ASM fragment variations works // ASM fragment variations "cast" constants to different types // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fragment-variations.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_DWORD = 4 +.segment Code // main main: { .label screen = $400 @@ -426,11 +432,17 @@ Score: 176 // Tests that ASM fragment variations works // ASM fragment variations "cast" constants to different types // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="fragment-variations.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_DWORD = 4 +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/function-pointer-noarg-2.asm b/src/test/ref/function-pointer-noarg-2.asm index d66d9d1f0..02577b6f3 100644 --- a/src/test/ref/function-pointer-noarg-2.asm +++ b/src/test/ref/function-pointer-noarg-2.asm @@ -1,7 +1,13 @@ // Tests creating and assigning pointers to non-args no-return functions -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="function-pointer-noarg-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/function-pointer-noarg-2.log b/src/test/ref/function-pointer-noarg-2.log index 4b10ce9a0..af478c5ce 100644 --- a/src/test/ref/function-pointer-noarg-2.log +++ b/src/test/ref/function-pointer-noarg-2.log @@ -179,10 +179,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests creating and assigning pointers to non-args no-return functions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="function-pointer-noarg-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -260,10 +266,16 @@ Score: 151 // File Comments // Tests creating and assigning pointers to non-args no-return functions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="function-pointer-noarg-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/function-pointer-noarg-3.asm b/src/test/ref/function-pointer-noarg-3.asm index 7cfa758fc..38c97b573 100644 --- a/src/test/ref/function-pointer-noarg-3.asm +++ b/src/test/ref/function-pointer-noarg-3.asm @@ -1,7 +1,13 @@ // Tests creating and assigning pointers to non-args no-return functions - plus inline kickasm-based calling -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="function-pointer-noarg-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code fn2: { .label BG_COLOR = $d021 // (*BG_COLOR)++; @@ -50,6 +56,7 @@ main: { sta.z f+1 jmp __b4 } +.segment Data // Inline KickAsm function ff: jmp (main.f) diff --git a/src/test/ref/function-pointer-noarg-3.log b/src/test/ref/function-pointer-noarg-3.log index 495147b5d..4c7f333a5 100644 --- a/src/test/ref/function-pointer-noarg-3.log +++ b/src/test/ref/function-pointer-noarg-3.log @@ -218,10 +218,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests creating and assigning pointers to non-args no-return functions - plus inline kickasm-based calling // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="function-pointer-noarg-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // fn2 fn2: { .label BG_COLOR = $d021 @@ -298,6 +304,7 @@ main: { jmp __b4 } // File Data +.segment Data // Inline KickAsm function ff: jmp (main.f) @@ -349,10 +356,16 @@ Score: 2977 // File Comments // Tests creating and assigning pointers to non-args no-return functions - plus inline kickasm-based calling // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="function-pointer-noarg-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // fn2 fn2: { .label BG_COLOR = $d021 @@ -427,6 +440,7 @@ main: { jmp __b4 } // File Data +.segment Data // Inline KickAsm function ff: jmp (main.f) diff --git a/src/test/ref/function-pointer-noarg-call-10.asm b/src/test/ref/function-pointer-noarg-call-10.asm index 64f52b424..2e6412ce6 100644 --- a/src/test/ref/function-pointer-noarg-call-10.asm +++ b/src/test/ref/function-pointer-noarg-call-10.asm @@ -1,9 +1,15 @@ // Tests calling into different function pointers which call a common sub-method -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="function-pointer-noarg-call-10.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label SCREEN = $400 .label idx = 7 +.segment Code __start: { // idx = 0 lda #0 @@ -20,9 +26,11 @@ world: { jsr print // } rts + .segment Data msg: .text "world " .byte 0 } +.segment Code hello: { // print("hello ") lda #PORT_A_DDR = %00000011 diff --git a/src/test/ref/gfxbank.log b/src/test/ref/gfxbank.log index f2cf36d36..5b7d9173a 100644 --- a/src/test/ref/gfxbank.log +++ b/src/test/ref/gfxbank.log @@ -182,13 +182,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test minimization of constants // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="gfxbank.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 +.segment Code // main main: { .const vicSelectGfxBank1_toDd001_return = 3 @@ -248,13 +254,19 @@ Score: 18 // File Comments // Test minimization of constants // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="gfxbank.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 +.segment Code // main main: { .const vicSelectGfxBank1_toDd001_return = 3 diff --git a/src/test/ref/global-label-problem.asm b/src/test/ref/global-label-problem.asm index bddf56827..c68245f7b 100644 --- a/src/test/ref/global-label-problem.asm +++ b/src/test/ref/global-label-problem.asm @@ -1,10 +1,16 @@ // Demonstrates problems with local labels overwriting global labels // This should produce "abca" - but produces "abcc" because the local variable containing "c" overrides the global variable containing "a" -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="global-label-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Screen pointer and index .label SCREEN = $400 +.segment Code main: { // print("a") ldx #0 @@ -23,9 +29,11 @@ main: { jsr print1 // } rts + .segment Data msg1: .text "b" .byte 0 } +.segment Code // print(byte* zp(2) msg) print: { .label msg = 2 @@ -65,6 +73,7 @@ print1: { jsr print // } rts + .segment Data msg: .text "c" .byte 0 } diff --git a/src/test/ref/global-label-problem.log b/src/test/ref/global-label-problem.log index ea68e255c..aa4e1ef64 100644 --- a/src/test/ref/global-label-problem.log +++ b/src/test/ref/global-label-problem.log @@ -326,12 +326,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Demonstrates problems with local labels overwriting global labels // This should produce "abca" - but produces "abcc" because the local variable containing "c" overrides the global variable containing "a" // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="global-label-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Screen pointer and index .label SCREEN = $400 +.segment Code // main main: { // [1] call print @@ -374,9 +380,11 @@ main: { __breturn: // [6] return rts + .segment Data msg1: .text "b" .byte 0 } +.segment Code // print // print(byte* zp(2) msg) print: { @@ -446,6 +454,7 @@ print1: { __breturn: // [18] return rts + .segment Data msg: .text "c" .byte 0 } @@ -510,12 +519,18 @@ Score: 510 // Demonstrates problems with local labels overwriting global labels // This should produce "abca" - but produces "abcc" because the local variable containing "c" overrides the global variable containing "a" // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="global-label-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Screen pointer and index .label SCREEN = $400 +.segment Code // main main: { // print("a") @@ -551,9 +566,11 @@ main: { // } // [6] return rts + .segment Data msg1: .text "b" .byte 0 } +.segment Code // print // print(byte* zp(2) msg) print: { @@ -618,6 +635,7 @@ print1: { // } // [18] return rts + .segment Data msg: .text "c" .byte 0 } diff --git a/src/test/ref/global-pc-multiple.asm b/src/test/ref/global-pc-multiple.asm index bb6ea6ebb..53755321a 100644 --- a/src/test/ref/global-pc-multiple.asm +++ b/src/test/ref/global-pc-multiple.asm @@ -1,9 +1,15 @@ // Test setting the program PC through a #pc directive -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="global-pc-multiple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$2000] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $2000 "Program" .label BG_COLOR = $d021 .label RASTER = $d012 +.segment Code main: { // asm sei diff --git a/src/test/ref/global-pc-multiple.log b/src/test/ref/global-pc-multiple.log index 0923355bb..42e1ffd39 100644 --- a/src/test/ref/global-pc-multiple.log +++ b/src/test/ref/global-pc-multiple.log @@ -139,12 +139,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test setting the program PC through a #pc directive // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="global-pc-multiple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$2000] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $2000 "Program" // Global Constants & labels .label BG_COLOR = $d021 .label RASTER = $d012 +.segment Code // main main: { // asm { sei } @@ -212,12 +218,18 @@ Score: 281 // File Comments // Test setting the program PC through a #pc directive // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="global-pc-multiple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$2000] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $2000 "Program" // Global Constants & labels .label BG_COLOR = $d021 .label RASTER = $d012 +.segment Code // main main: { // asm diff --git a/src/test/ref/global-pc.asm b/src/test/ref/global-pc.asm index 3ac4e79f8..9ab7d45f0 100644 --- a/src/test/ref/global-pc.asm +++ b/src/test/ref/global-pc.asm @@ -1,9 +1,15 @@ // Test setting the program PC through a #pc directive -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="global-pc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$1000] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $1000 "Program" .label BG_COLOR = $d021 .label RASTER = $d012 +.segment Code main: { // asm sei diff --git a/src/test/ref/global-pc.log b/src/test/ref/global-pc.log index 63df829fa..2d3a1679c 100644 --- a/src/test/ref/global-pc.log +++ b/src/test/ref/global-pc.log @@ -90,12 +90,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test setting the program PC through a #pc directive // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="global-pc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$1000] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $1000 "Program" // Global Constants & labels .label BG_COLOR = $d021 .label RASTER = $d012 +.segment Code // main main: { // asm { sei } @@ -131,12 +137,18 @@ Score: 112 // File Comments // Test setting the program PC through a #pc directive // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="global-pc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$1000] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $1000 "Program" // Global Constants & labels .label BG_COLOR = $d021 .label RASTER = $d012 +.segment Code // main main: { // asm diff --git a/src/test/ref/halfscii.asm b/src/test/ref/halfscii.asm index c8328bc7d..b35dc7836 100644 --- a/src/test/ref/halfscii.asm +++ b/src/test/ref/halfscii.asm @@ -1,11 +1,17 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="halfscii.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 .label CHARGEN = $d000 .label PROCPORT = 1 .label D018 = $d018 .label CHARSET4 = $2800 +.segment Code main: { .label __1 = 8 .label __11 = 9 @@ -197,4 +203,5 @@ main: { // } rts } +.segment Data bits_count: .byte 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 diff --git a/src/test/ref/halfscii.log b/src/test/ref/halfscii.log index 648c2477d..e4eb2e160 100644 --- a/src/test/ref/halfscii.log +++ b/src/test/ref/halfscii.log @@ -969,15 +969,21 @@ Allocated (was zp[1]:33) zp[1]:11 [ main::$30 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="halfscii.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label CHARGEN = $d000 .label PROCPORT = 1 .label D018 = $d018 .label CHARSET4 = $2800 +.segment Code // main main: { .label __1 = 8 @@ -1240,6 +1246,7 @@ main: { rts } // File Data +.segment Data bits_count: .byte 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 ASSEMBLER OPTIMIZATIONS @@ -1294,8 +1301,8 @@ Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp __b1 Removing instruction jmp __b11 Succesful ASM optimization Pass5NextJumpElimination -Fixing long branch [127] bcc __b1 to bcs Fixing long branch [133] bcc __b1 to bcs +Fixing long branch [139] bcc __b1 to bcs FINAL SYMBOL TABLE const byte* CHARGEN = (byte*) 53248 @@ -1394,15 +1401,21 @@ Score: 3108 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="halfscii.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label CHARGEN = $d000 .label PROCPORT = 1 .label D018 = $d018 .label CHARSET4 = $2800 +.segment Code // main main: { .label __1 = 8 @@ -1679,5 +1692,6 @@ main: { rts } // File Data +.segment Data bits_count: .byte 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 diff --git a/src/test/ref/helloworld0.asm b/src/test/ref/helloworld0.asm index dab6d0afc..2d293f09d 100644 --- a/src/test/ref/helloworld0.asm +++ b/src/test/ref/helloworld0.asm @@ -1,8 +1,14 @@ // Tests minimal hello world -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="helloworld0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: @@ -16,5 +22,6 @@ main: { // } rts } +.segment Data msg: .text "hello world!" .byte 0 diff --git a/src/test/ref/helloworld0.log b/src/test/ref/helloworld0.log index 2abec1b33..069b9a58a 100644 --- a/src/test/ref/helloworld0.log +++ b/src/test/ref/helloworld0.log @@ -121,11 +121,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests minimal hello world // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="helloworld0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -154,6 +160,7 @@ main: { rts } // File Data +.segment Data msg: .text "hello world!" .byte 0 @@ -187,11 +194,17 @@ Score: 186 // File Comments // Tests minimal hello world // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="helloworld0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -217,6 +230,7 @@ main: { rts } // File Data +.segment Data msg: .text "hello world!" .byte 0 diff --git a/src/test/ref/helloworld2-inline.asm b/src/test/ref/helloworld2-inline.asm index c708e97a7..1ad555b9a 100644 --- a/src/test/ref/helloworld2-inline.asm +++ b/src/test/ref/helloworld2-inline.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="helloworld2-inline.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = $400 +.segment Code main: { .label print22_at = screen+$50 ldx #0 @@ -40,6 +46,7 @@ main: { // for(byte i=0; msg[i]; i++) iny jmp print21___b1 + .segment Data hello: .text "hello world!" .byte 0 } diff --git a/src/test/ref/helloworld2-inline.log b/src/test/ref/helloworld2-inline.log index cf04d46e2..b6ff665d2 100644 --- a/src/test/ref/helloworld2-inline.log +++ b/src/test/ref/helloworld2-inline.log @@ -312,11 +312,17 @@ Uplifting [] best 732 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="helloworld2-inline.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { .label print22_at = screen+$50 @@ -391,6 +397,7 @@ main: { // [2] phi main::print21_j#2 = main::print21_j#1 [phi:main::print21_@2->main::print21_@1#0] -- register_copy // [2] phi main::print21_i#2 = main::print21_i#1 [phi:main::print21_@2->main::print21_@1#1] -- register_copy jmp print21___b1 + .segment Data hello: .text "hello world!" .byte 0 } @@ -448,11 +455,17 @@ Score: 636 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="helloworld2-inline.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { .label print22_at = screen+$50 @@ -522,6 +535,7 @@ main: { // [2] phi main::print21_j#2 = main::print21_j#1 [phi:main::print21_@2->main::print21_@1#0] -- register_copy // [2] phi main::print21_i#2 = main::print21_i#1 [phi:main::print21_@2->main::print21_@1#1] -- register_copy jmp print21___b1 + .segment Data hello: .text "hello world!" .byte 0 } diff --git a/src/test/ref/helloworld2.asm b/src/test/ref/helloworld2.asm index d85ece932..e10c21dc0 100644 --- a/src/test/ref/helloworld2.asm +++ b/src/test/ref/helloworld2.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="helloworld2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = $400 +.segment Code main: { // print2(screen, hello) lda #main::@3#0] -- register_copy jmp __b3 + .segment Data msg: .text "raster lines" .byte 0 } +.segment Code // cls cls: { .label screen = $400 @@ -1907,6 +1915,7 @@ utoa16n: { rts } // File Data +.segment Data // Digits used for utoa() DIGITS: .text "0123456789abcdef" .byte 0 @@ -2119,13 +2128,19 @@ Score: 21718 // File Comments // Testing hex to decimal conversion // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="hex2dec.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label control = $d011 .label raster = $d012 .label BORDER_COLOR = $d020 +.segment Code // main main: { .label __1 = 6 @@ -2293,9 +2308,11 @@ main: { // [27] phi from main::@4 to main::@3 [phi:main::@4->main::@3] // [27] phi main::i#2 = main::i#1 [phi:main::@4->main::@3#0] -- register_copy jmp __b3 + .segment Data msg: .text "raster lines" .byte 0 } +.segment Code // cls cls: { .label screen = $400 @@ -2604,6 +2621,7 @@ utoa16n: { rts } // File Data +.segment Data // Digits used for utoa() DIGITS: .text "0123456789abcdef" .byte 0 diff --git a/src/test/ref/ifmin.asm b/src/test/ref/ifmin.asm index 40fecb7b0..3a89e3771 100644 --- a/src/test/ref/ifmin.asm +++ b/src/test/ref/ifmin.asm @@ -1,8 +1,14 @@ // Minimal if() test -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ifmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/ifmin.log b/src/test/ref/ifmin.log index c9763b7ec..2d4731de1 100644 --- a/src/test/ref/ifmin.log +++ b/src/test/ref/ifmin.log @@ -142,11 +142,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal if() test // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ifmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -216,11 +222,17 @@ Score: 176 // File Comments // Minimal if() test // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ifmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/immzero.asm b/src/test/ref/immzero.asm index d5d92c11f..f9c8e2240 100644 --- a/src/test/ref/immzero.asm +++ b/src/test/ref/immzero.asm @@ -1,7 +1,13 @@ // Tests that immediate zero values are reused - even when assigning to words -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="immzero.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label w = 2 ldx #0 diff --git a/src/test/ref/immzero.log b/src/test/ref/immzero.log index 9c0db4c7b..c9ec30095 100644 --- a/src/test/ref/immzero.log +++ b/src/test/ref/immzero.log @@ -134,10 +134,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that immediate zero values are reused - even when assigning to words // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="immzero.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label w = 2 @@ -214,10 +220,16 @@ Score: 346 // File Comments // Tests that immediate zero values are reused - even when assigning to words // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="immzero.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label w = 2 diff --git a/src/test/ref/importing.asm b/src/test/ref/importing.asm index 0b1b5170d..066a86b26 100644 --- a/src/test/ref/importing.asm +++ b/src/test/ref/importing.asm @@ -1,8 +1,14 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="importing.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const RED = 2 .label BG_COLOR = $d021 +.segment Code main: { .label screen = $400 // *screen = 1 diff --git a/src/test/ref/importing.log b/src/test/ref/importing.log index 92d590cc4..f04a6176e 100644 --- a/src/test/ref/importing.log +++ b/src/test/ref/importing.log @@ -78,12 +78,18 @@ Uplifting [] best 21 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="importing.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const RED = 2 .label BG_COLOR = $d021 +.segment Code // main main: { .label screen = $400 @@ -120,12 +126,18 @@ Score: 18 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="importing.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const RED = 2 .label BG_COLOR = $d021 +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/incd020-2.asm b/src/test/ref/incd020-2.asm index 4c6732a91..fd2db455e 100644 --- a/src/test/ref/incd020-2.asm +++ b/src/test/ref/incd020-2.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="incd020-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { __b1: // (*(unsigned char *)(53280))++; diff --git a/src/test/ref/incd020-2.log b/src/test/ref/incd020-2.log index d565f2772..ffcab0a6a 100644 --- a/src/test/ref/incd020-2.log +++ b/src/test/ref/incd020-2.log @@ -84,10 +84,16 @@ Uplifting [] best 211 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="incd020-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { jmp __b1 @@ -124,10 +130,16 @@ Score: 151 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="incd020-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // main::@1 diff --git a/src/test/ref/incd020.asm b/src/test/ref/incd020.asm index 827ae9674..e227223c6 100644 --- a/src/test/ref/incd020.asm +++ b/src/test/ref/incd020.asm @@ -1,9 +1,15 @@ // Incrementing / decrementing pointer content should result in code modifying the memory location - eg. inc $d020. // Currently it does not but instead leads to just reading the value a few times. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="incd020.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label BG_COLOR = $d020 +.segment Code main: { __b1: // ++*BG_COLOR; diff --git a/src/test/ref/incd020.log b/src/test/ref/incd020.log index 41c18232f..f5b4e2c2e 100644 --- a/src/test/ref/incd020.log +++ b/src/test/ref/incd020.log @@ -84,11 +84,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Incrementing / decrementing pointer content should result in code modifying the memory location - eg. inc $d020. // Currently it does not but instead leads to just reading the value a few times. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="incd020.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label BG_COLOR = $d020 +.segment Code // main main: { jmp __b1 @@ -119,11 +125,17 @@ Score: 150 // Incrementing / decrementing pointer content should result in code modifying the memory location - eg. inc $d020. // Currently it does not but instead leads to just reading the value a few times. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="incd020.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label BG_COLOR = $d020 +.segment Code // main main: { // main::@1 diff --git a/src/test/ref/include-define.asm b/src/test/ref/include-define.asm index 632ad557a..df25223ef 100644 --- a/src/test/ref/include-define.asm +++ b/src/test/ref/include-define.asm @@ -1,8 +1,14 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="include-define.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const x = 'a' .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = x lda #x diff --git a/src/test/ref/include-define.log b/src/test/ref/include-define.log index 0678e4fde..182e8ddf1 100644 --- a/src/test/ref/include-define.log +++ b/src/test/ref/include-define.log @@ -80,12 +80,18 @@ Uplifting [] best 15 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="include-define.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const x = 'a' .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = x -- _deref_pbuc1=vbuc2 @@ -117,12 +123,18 @@ Score: 12 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="include-define.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const x = 'a' .label SCREEN = $400 +.segment Code // main main: { // SCREEN[0] = x diff --git a/src/test/ref/incrementinarray.asm b/src/test/ref/incrementinarray.asm index 08382e41a..408ab0db0 100644 --- a/src/test/ref/incrementinarray.asm +++ b/src/test/ref/incrementinarray.asm @@ -1,11 +1,17 @@ // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="incrementinarray.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label print_screen = $400 .label print_char_cursor = 2 .label print_line_cursor = 4 +.segment Code main: { // print_cls() jsr print_cls @@ -143,5 +149,6 @@ print_char: { // } rts } +.segment Data txt: .text "camelot" .byte 0 diff --git a/src/test/ref/incrementinarray.log b/src/test/ref/incrementinarray.log index 2721b7477..3184c030f 100644 --- a/src/test/ref/incrementinarray.log +++ b/src/test/ref/incrementinarray.log @@ -741,13 +741,19 @@ ASSEMBLER BEFORE OPTIMIZATION // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="incrementinarray.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_char_cursor = 2 .label print_line_cursor = 4 +.segment Code // main main: { // [1] call print_cls @@ -971,6 +977,7 @@ print_char: { rts } // File Data +.segment Data txt: .text "camelot" .byte 0 @@ -1074,13 +1081,19 @@ Score: 9880 // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="incrementinarray.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_char_cursor = 2 .label print_line_cursor = 4 +.segment Code // main main: { // print_cls() @@ -1291,6 +1304,7 @@ print_char: { rts } // File Data +.segment Data txt: .text "camelot" .byte 0 diff --git a/src/test/ref/index-pointer-rewrite-0.asm b/src/test/ref/index-pointer-rewrite-0.asm index aebe59037..58884f987 100644 --- a/src/test/ref/index-pointer-rewrite-0.asm +++ b/src/test/ref/index-pointer-rewrite-0.asm @@ -1,8 +1,14 @@ // Test array index pointer rewriting // 8bit array with 8bit index -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { ldx #0 __b1: @@ -19,4 +25,5 @@ main: { inx jmp __b1 } +.segment Data entities: .fill $19, 0 diff --git a/src/test/ref/index-pointer-rewrite-0.log b/src/test/ref/index-pointer-rewrite-0.log index ac951f3a0..ba79d3fc9 100644 --- a/src/test/ref/index-pointer-rewrite-0.log +++ b/src/test/ref/index-pointer-rewrite-0.log @@ -124,10 +124,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Test array index pointer rewriting // 8bit array with 8bit index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -158,6 +164,7 @@ main: { jmp __b1 } // File Data +.segment Data entities: .fill $19, 0 ASSEMBLER OPTIMIZATIONS @@ -186,10 +193,16 @@ Score: 191 // Test array index pointer rewriting // 8bit array with 8bit index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -219,5 +232,6 @@ main: { jmp __b1 } // File Data +.segment Data entities: .fill $19, 0 diff --git a/src/test/ref/index-pointer-rewrite-1.asm b/src/test/ref/index-pointer-rewrite-1.asm index b38a4352c..d58a12427 100644 --- a/src/test/ref/index-pointer-rewrite-1.asm +++ b/src/test/ref/index-pointer-rewrite-1.asm @@ -1,8 +1,14 @@ // Test array index pointer rewriting // 16bit array with 8bit index -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { ldx #0 __b1: @@ -24,4 +30,5 @@ main: { inx jmp __b1 } +.segment Data entities: .fill 2*$19, 0 diff --git a/src/test/ref/index-pointer-rewrite-1.log b/src/test/ref/index-pointer-rewrite-1.log index eafb78b6c..532eb2a8a 100644 --- a/src/test/ref/index-pointer-rewrite-1.log +++ b/src/test/ref/index-pointer-rewrite-1.log @@ -139,10 +139,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Test array index pointer rewriting // 16bit array with 8bit index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -179,6 +185,7 @@ main: { jmp __b1 } // File Data +.segment Data entities: .fill 2*$19, 0 ASSEMBLER OPTIMIZATIONS @@ -209,10 +216,16 @@ Score: 321 // Test array index pointer rewriting // 16bit array with 8bit index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -248,5 +261,6 @@ main: { jmp __b1 } // File Data +.segment Data entities: .fill 2*$19, 0 diff --git a/src/test/ref/index-pointer-rewrite-2.asm b/src/test/ref/index-pointer-rewrite-2.asm index b4e233134..5a7840113 100644 --- a/src/test/ref/index-pointer-rewrite-2.asm +++ b/src/test/ref/index-pointer-rewrite-2.asm @@ -1,8 +1,14 @@ // Test array index pointer rewriting // 8bit array with 16bit index -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label i = 2 .label __1 = 4 @@ -38,4 +44,5 @@ main: { !: jmp __b1 } +.segment Data entities: .fill $19, 0 diff --git a/src/test/ref/index-pointer-rewrite-2.log b/src/test/ref/index-pointer-rewrite-2.log index a9d093d05..91eb15af3 100644 --- a/src/test/ref/index-pointer-rewrite-2.log +++ b/src/test/ref/index-pointer-rewrite-2.log @@ -132,10 +132,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Test array index pointer rewriting // 8bit array with 16bit index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label i = 2 @@ -187,6 +193,7 @@ main: { jmp __b1 } // File Data +.segment Data entities: .fill $19, 0 ASSEMBLER OPTIMIZATIONS @@ -219,10 +226,16 @@ Score: 651 // Test array index pointer rewriting // 8bit array with 16bit index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label i = 2 @@ -272,5 +285,6 @@ main: { jmp __b1 } // File Data +.segment Data entities: .fill $19, 0 diff --git a/src/test/ref/index-pointer-rewrite-3.asm b/src/test/ref/index-pointer-rewrite-3.asm index 6d617cd0a..710461864 100644 --- a/src/test/ref/index-pointer-rewrite-3.asm +++ b/src/test/ref/index-pointer-rewrite-3.asm @@ -1,8 +1,14 @@ // Test array index pointer rewriting // 16bit array with 16bit index -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label __1 = 4 .label i = 2 @@ -48,4 +54,5 @@ main: { !: jmp __b1 } +.segment Data entities: .fill 2*$19, 0 diff --git a/src/test/ref/index-pointer-rewrite-3.log b/src/test/ref/index-pointer-rewrite-3.log index 65d344f76..40039b3e5 100644 --- a/src/test/ref/index-pointer-rewrite-3.log +++ b/src/test/ref/index-pointer-rewrite-3.log @@ -147,10 +147,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Test array index pointer rewriting // 16bit array with 16bit index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label __1 = 4 @@ -213,6 +219,7 @@ main: { jmp __b1 } // File Data +.segment Data entities: .fill 2*$19, 0 ASSEMBLER OPTIMIZATIONS @@ -246,10 +253,16 @@ Score: 911 // Test array index pointer rewriting // 16bit array with 16bit index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label __1 = 4 @@ -310,5 +323,6 @@ main: { jmp __b1 } // File Data +.segment Data entities: .fill 2*$19, 0 diff --git a/src/test/ref/index-pointer-rewrite-4.asm b/src/test/ref/index-pointer-rewrite-4.asm index 86a74feec..b77f7213a 100644 --- a/src/test/ref/index-pointer-rewrite-4.asm +++ b/src/test/ref/index-pointer-rewrite-4.asm @@ -1,9 +1,15 @@ // Test array index pointer rewriting // 8bit array with 8bit index // Fibonacci calculation uses adjacent indices inside the loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // fibs[0] = 0 lda #0 @@ -29,4 +35,5 @@ main: { inx jmp __b1 } +.segment Data fibs: .fill $19, 0 diff --git a/src/test/ref/index-pointer-rewrite-4.log b/src/test/ref/index-pointer-rewrite-4.log index 5f0f769f3..aa02ea8a0 100644 --- a/src/test/ref/index-pointer-rewrite-4.log +++ b/src/test/ref/index-pointer-rewrite-4.log @@ -172,10 +172,16 @@ ASSEMBLER BEFORE OPTIMIZATION // 8bit array with 8bit index // Fibonacci calculation uses adjacent indices inside the loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [0] *fibs = 0 -- _deref_pbuc1=vbuc2 @@ -215,6 +221,7 @@ main: { jmp __b1 } // File Data +.segment Data fibs: .fill $19, 0 ASSEMBLER OPTIMIZATIONS @@ -246,10 +253,16 @@ Score: 293 // 8bit array with 8bit index // Fibonacci calculation uses adjacent indices inside the loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // fibs[0] = 0 @@ -291,5 +304,6 @@ main: { jmp __b1 } // File Data +.segment Data fibs: .fill $19, 0 diff --git a/src/test/ref/index-pointer-rewrite-5.asm b/src/test/ref/index-pointer-rewrite-5.asm index f8785e0bb..9e8ab50d8 100644 --- a/src/test/ref/index-pointer-rewrite-5.asm +++ b/src/test/ref/index-pointer-rewrite-5.asm @@ -1,10 +1,16 @@ // Test array index pointer rewriting // 16bit array with 8bit index // Fibonacci calculation uses adjacent indices inside the loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_WORD = 2 +.segment Code main: { .label __1 = 3 .label __3 = 4 @@ -61,4 +67,5 @@ main: { inc.z i jmp __b1 } +.segment Data fibs: .fill 2*$19, 0 diff --git a/src/test/ref/index-pointer-rewrite-5.log b/src/test/ref/index-pointer-rewrite-5.log index c8d97705f..60d3a4ec0 100644 --- a/src/test/ref/index-pointer-rewrite-5.log +++ b/src/test/ref/index-pointer-rewrite-5.log @@ -250,11 +250,17 @@ ASSEMBLER BEFORE OPTIMIZATION // 16bit array with 8bit index // Fibonacci calculation uses adjacent indices inside the loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label __1 = 3 @@ -330,6 +336,7 @@ main: { jmp __b1 } // File Data +.segment Data fibs: .fill 2*$19, 0 ASSEMBLER OPTIMIZATIONS @@ -375,11 +382,17 @@ Score: 1001 // 16bit array with 8bit index // Fibonacci calculation uses adjacent indices inside the loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label __1 = 3 @@ -457,5 +470,6 @@ main: { jmp __b1 } // File Data +.segment Data fibs: .fill 2*$19, 0 diff --git a/src/test/ref/index-pointer-rewrite-6.asm b/src/test/ref/index-pointer-rewrite-6.asm index 64cce5383..e27f93a24 100644 --- a/src/test/ref/index-pointer-rewrite-6.asm +++ b/src/test/ref/index-pointer-rewrite-6.asm @@ -1,9 +1,15 @@ // Test array index pointer rewriting // 8bit array with 16bit index // Fibonacci calculation uses adjacent indices inside the loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label i = 2 .label __4 = 4 @@ -66,4 +72,5 @@ main: { !: jmp __b1 } +.segment Data fibs: .fill $19, 0 diff --git a/src/test/ref/index-pointer-rewrite-6.log b/src/test/ref/index-pointer-rewrite-6.log index 2050fb131..6dcef9cb5 100644 --- a/src/test/ref/index-pointer-rewrite-6.log +++ b/src/test/ref/index-pointer-rewrite-6.log @@ -205,10 +205,16 @@ ASSEMBLER BEFORE OPTIMIZATION // 8bit array with 16bit index // Fibonacci calculation uses adjacent indices inside the loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label i = 2 @@ -291,6 +297,7 @@ main: { jmp __b1 } // File Data +.segment Data fibs: .fill $19, 0 ASSEMBLER OPTIMIZATIONS @@ -332,10 +339,16 @@ Score: 1173 // 8bit array with 16bit index // Fibonacci calculation uses adjacent indices inside the loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label i = 2 @@ -417,5 +430,6 @@ main: { jmp __b1 } // File Data +.segment Data fibs: .fill $19, 0 diff --git a/src/test/ref/index-pointer-rewrite-7.asm b/src/test/ref/index-pointer-rewrite-7.asm index 1b07ca5ac..72d1e22d1 100644 --- a/src/test/ref/index-pointer-rewrite-7.asm +++ b/src/test/ref/index-pointer-rewrite-7.asm @@ -1,10 +1,16 @@ // Test array index pointer rewriting // 16bit array with 16bit index // Fibonacci calculation uses adjacent indices inside the loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_WORD = 2 +.segment Code main: { .label __1 = 4 .label __2 = 6 @@ -111,4 +117,5 @@ main: { !: jmp __b1 } +.segment Data fibs: .fill 2*$19, 0 diff --git a/src/test/ref/index-pointer-rewrite-7.log b/src/test/ref/index-pointer-rewrite-7.log index b96dcaf74..925ca379c 100644 --- a/src/test/ref/index-pointer-rewrite-7.log +++ b/src/test/ref/index-pointer-rewrite-7.log @@ -265,11 +265,17 @@ ASSEMBLER BEFORE OPTIMIZATION // 16bit array with 16bit index // Fibonacci calculation uses adjacent indices inside the loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label __1 = 4 @@ -399,6 +405,7 @@ main: { jmp __b1 } // File Data +.segment Data fibs: .fill 2*$19, 0 ASSEMBLER OPTIMIZATIONS @@ -445,11 +452,17 @@ Score: 2281 // 16bit array with 16bit index // Fibonacci calculation uses adjacent indices inside the loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label __1 = 4 @@ -580,5 +593,6 @@ main: { jmp __b1 } // File Data +.segment Data fibs: .fill 2*$19, 0 diff --git a/src/test/ref/index-pointer-rewrite-8.asm b/src/test/ref/index-pointer-rewrite-8.asm index f0ac44fe8..8042be7d6 100644 --- a/src/test/ref/index-pointer-rewrite-8.asm +++ b/src/test/ref/index-pointer-rewrite-8.asm @@ -1,10 +1,16 @@ // Test array index pointer rewriting // struct array with 8bit index -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_BALL_VEL = 1 .const OFFSET_STRUCT_BALL_SYM = 2 +.segment Code main: { ldy #0 __b1: @@ -37,4 +43,5 @@ main: { iny jmp __b1 } +.segment Data balls: .fill 3*$19, 0 diff --git a/src/test/ref/index-pointer-rewrite-8.log b/src/test/ref/index-pointer-rewrite-8.log index c7eba8cd1..065d0eb8d 100644 --- a/src/test/ref/index-pointer-rewrite-8.log +++ b/src/test/ref/index-pointer-rewrite-8.log @@ -174,12 +174,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Test array index pointer rewriting // struct array with 8bit index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_BALL_VEL = 1 .const OFFSET_STRUCT_BALL_SYM = 2 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -228,6 +234,7 @@ main: { jmp __b1 } // File Data +.segment Data balls: .fill 3*$19, 0 ASSEMBLER OPTIMIZATIONS @@ -262,12 +269,18 @@ Score: 626 // Test array index pointer rewriting // struct array with 8bit index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_BALL_VEL = 1 .const OFFSET_STRUCT_BALL_SYM = 2 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -317,5 +330,6 @@ main: { jmp __b1 } // File Data +.segment Data balls: .fill 3*$19, 0 diff --git a/src/test/ref/index-pointer-rewrite-9.asm b/src/test/ref/index-pointer-rewrite-9.asm index 2783f389a..1cbad7185 100644 --- a/src/test/ref/index-pointer-rewrite-9.asm +++ b/src/test/ref/index-pointer-rewrite-9.asm @@ -1,10 +1,16 @@ // Test array index pointer rewriting // struct array with 16bit index -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_BALL_VEL = 1 .const OFFSET_STRUCT_BALL_SYM = 2 +.segment Code main: { .label __2 = 4 .label __8 = 4 @@ -69,4 +75,5 @@ main: { !: jmp __b1 } +.segment Data balls: .fill 3*$19, 0 diff --git a/src/test/ref/index-pointer-rewrite-9.log b/src/test/ref/index-pointer-rewrite-9.log index d978769da..4388bac84 100644 --- a/src/test/ref/index-pointer-rewrite-9.log +++ b/src/test/ref/index-pointer-rewrite-9.log @@ -199,12 +199,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Test array index pointer rewriting // struct array with 16bit index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_BALL_VEL = 1 .const OFFSET_STRUCT_BALL_SYM = 2 +.segment Code // main main: { .label __2 = 4 @@ -287,6 +293,7 @@ main: { jmp __b1 } // File Data +.segment Data balls: .fill 3*$19, 0 ASSEMBLER OPTIMIZATIONS @@ -323,12 +330,18 @@ Score: 1436 // Test array index pointer rewriting // struct array with 16bit index // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-pointer-rewrite-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_BALL_VEL = 1 .const OFFSET_STRUCT_BALL_SYM = 2 +.segment Code // main main: { .label __2 = 4 @@ -411,5 +424,6 @@ main: { jmp __b1 } // File Data +.segment Data balls: .fill 3*$19, 0 diff --git a/src/test/ref/index-sizeof-reuse-2.asm b/src/test/ref/index-sizeof-reuse-2.asm index 0ae4f588f..f70eef5e0 100644 --- a/src/test/ref/index-sizeof-reuse-2.asm +++ b/src/test/ref/index-sizeof-reuse-2.asm @@ -1,10 +1,16 @@ // Test that the multiplication of a idx*sizeof(element) is reused inside loops -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-sizeof-reuse-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label VIC_RASTER = $d012 .label VIC_BG_COLOR = $d020 .label SCREEN = $400 +.segment Code main: { // Move the entities .label line = 3 @@ -89,4 +95,5 @@ main: { inc.z i jmp __b3 } +.segment Data entities: .fill 2*$19, 0 diff --git a/src/test/ref/index-sizeof-reuse-2.log b/src/test/ref/index-sizeof-reuse-2.log index bf51168cb..94df54a93 100644 --- a/src/test/ref/index-sizeof-reuse-2.log +++ b/src/test/ref/index-sizeof-reuse-2.log @@ -325,13 +325,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test that the multiplication of a idx*sizeof(element) is reused inside loops // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-sizeof-reuse-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label VIC_RASTER = $d012 .label VIC_BG_COLOR = $d020 .label SCREEN = $400 +.segment Code // main main: { // Move the entities @@ -446,6 +452,7 @@ main: { jmp __b3 } // File Data +.segment Data entities: .fill 2*$19, 0 ASSEMBLER OPTIMIZATIONS @@ -494,13 +501,19 @@ Score: 15702 // File Comments // Test that the multiplication of a idx*sizeof(element) is reused inside loops // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-sizeof-reuse-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label VIC_RASTER = $d012 .label VIC_BG_COLOR = $d020 .label SCREEN = $400 +.segment Code // main main: { // Move the entities @@ -615,5 +628,6 @@ main: { jmp __b3 } // File Data +.segment Data entities: .fill 2*$19, 0 diff --git a/src/test/ref/index-sizeof-reuse.asm b/src/test/ref/index-sizeof-reuse.asm index 44b0517aa..d8b57da9b 100644 --- a/src/test/ref/index-sizeof-reuse.asm +++ b/src/test/ref/index-sizeof-reuse.asm @@ -1,12 +1,18 @@ // Test that the multiplication of a idx*sizeof(element) is reused inside loops -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-sizeof-reuse.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_ENTITY_X_VEL = 1 .const OFFSET_STRUCT_ENTITY_SYMBOL = 2 .label VIC_RASTER = $d012 .label VIC_BG_COLOR = $d020 .label SCREEN = $400 +.segment Code main: { // Initialize velocities .label v = 2 @@ -131,4 +137,5 @@ main: { inx jmp __b1 } +.segment Data entities: .fill 3*$19, 0 diff --git a/src/test/ref/index-sizeof-reuse.log b/src/test/ref/index-sizeof-reuse.log index df5a2ac08..831abb5cb 100644 --- a/src/test/ref/index-sizeof-reuse.log +++ b/src/test/ref/index-sizeof-reuse.log @@ -494,15 +494,21 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test that the multiplication of a idx*sizeof(element) is reused inside loops // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-sizeof-reuse.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_ENTITY_X_VEL = 1 .const OFFSET_STRUCT_ENTITY_SYMBOL = 2 .label VIC_RASTER = $d012 .label VIC_BG_COLOR = $d020 .label SCREEN = $400 +.segment Code // main main: { // Initialize velocities @@ -671,6 +677,7 @@ main: { jmp __b1 } // File Data +.segment Data entities: .fill 3*$19, 0 ASSEMBLER OPTIMIZATIONS @@ -735,15 +742,21 @@ Score: 17597 // File Comments // Test that the multiplication of a idx*sizeof(element) is reused inside loops // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="index-sizeof-reuse.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_ENTITY_X_VEL = 1 .const OFFSET_STRUCT_ENTITY_SYMBOL = 2 .label VIC_RASTER = $d012 .label VIC_BG_COLOR = $d020 .label SCREEN = $400 +.segment Code // main main: { // Initialize velocities @@ -917,5 +930,6 @@ main: { jmp __b1 } // File Data +.segment Data entities: .fill 3*$19, 0 diff --git a/src/test/ref/infloop-error.asm b/src/test/ref/infloop-error.asm index 9a01b6d0b..9293ddd50 100644 --- a/src/test/ref/infloop-error.asm +++ b/src/test/ref/infloop-error.asm @@ -1,8 +1,14 @@ // Results in infinite compile loop as the compiler keeps trying to remove the same (empty) alias -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="infloop-error.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldy #0 ldx #$ff diff --git a/src/test/ref/infloop-error.log b/src/test/ref/infloop-error.log index 6afb1dcb8..d807e5994 100644 --- a/src/test/ref/infloop-error.log +++ b/src/test/ref/infloop-error.log @@ -254,11 +254,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Results in infinite compile loop as the compiler keeps trying to remove the same (empty) alias // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="infloop-error.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -375,11 +381,17 @@ Score: 460 // File Comments // Results in infinite compile loop as the compiler keeps trying to remove the same (empty) alias // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="infloop-error.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/init-volatiles.asm b/src/test/ref/init-volatiles.asm index dc27f3e38..47e8a9aef 100644 --- a/src/test/ref/init-volatiles.asm +++ b/src/test/ref/init-volatiles.asm @@ -1,8 +1,14 @@ // Illustrates a problem where volatiles with initializers are initialized outside the main()-routine -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="init-volatiles.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label x = 2 +.segment Code __start: { // x = 12 lda #$c diff --git a/src/test/ref/init-volatiles.log b/src/test/ref/init-volatiles.log index 369336e1a..458595651 100644 --- a/src/test/ref/init-volatiles.log +++ b/src/test/ref/init-volatiles.log @@ -129,11 +129,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Illustrates a problem where volatiles with initializers are initialized outside the main()-routine // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="init-volatiles.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label x = 2 +.segment Code // __start __start: { jmp __init1 @@ -214,11 +220,17 @@ Score: 153 // File Comments // Illustrates a problem where volatiles with initializers are initialized outside the main()-routine // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="init-volatiles.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label x = 2 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/initializer-0.asm b/src/test/ref/initializer-0.asm index fa297518b..d3c9b7118 100644 --- a/src/test/ref/initializer-0.asm +++ b/src/test/ref/initializer-0.asm @@ -1,8 +1,14 @@ // Demonstrates initializing an object using = { ... } syntax // Array of chars -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 @@ -20,4 +26,5 @@ main: { // } rts } +.segment Data chars: .byte 1, 2, 3 diff --git a/src/test/ref/initializer-0.log b/src/test/ref/initializer-0.log index 3de455cfc..82ccf58aa 100644 --- a/src/test/ref/initializer-0.log +++ b/src/test/ref/initializer-0.log @@ -136,10 +136,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Demonstrates initializing an object using = { ... } syntax // Array of chars // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -174,6 +180,7 @@ main: { rts } // File Data +.segment Data chars: .byte 1, 2, 3 ASSEMBLER OPTIMIZATIONS @@ -211,10 +218,16 @@ Score: 226 // Demonstrates initializing an object using = { ... } syntax // Array of chars // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -247,5 +260,6 @@ main: { rts } // File Data +.segment Data chars: .byte 1, 2, 3 diff --git a/src/test/ref/initializer-1.asm b/src/test/ref/initializer-1.asm index d29f54bf6..5725b53b4 100644 --- a/src/test/ref/initializer-1.asm +++ b/src/test/ref/initializer-1.asm @@ -1,8 +1,14 @@ // Demonstrates initializing an object using = { ... } syntax // Array of words -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label i = 2 @@ -33,4 +39,5 @@ main: { // } rts } +.segment Data words: .word 1, 2, 3 diff --git a/src/test/ref/initializer-1.log b/src/test/ref/initializer-1.log index b1f12d936..a55785fd2 100644 --- a/src/test/ref/initializer-1.log +++ b/src/test/ref/initializer-1.log @@ -194,10 +194,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Demonstrates initializing an object using = { ... } syntax // Array of words // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -246,6 +252,7 @@ main: { rts } // File Data +.segment Data words: .word 1, 2, 3 ASSEMBLER OPTIMIZATIONS @@ -292,10 +299,16 @@ Score: 501 // Demonstrates initializing an object using = { ... } syntax // Array of words // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -346,5 +359,6 @@ main: { rts } // File Data +.segment Data words: .word 1, 2, 3 diff --git a/src/test/ref/initializer-2.asm b/src/test/ref/initializer-2.asm index 7ee0d0d77..43fdfcd18 100644 --- a/src/test/ref/initializer-2.asm +++ b/src/test/ref/initializer-2.asm @@ -1,9 +1,15 @@ // Demonstrates initializing an array of structs // Array of structs containing chars -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code main: { .label SCREEN = $400 .label i = 2 @@ -32,4 +38,5 @@ main: { // } rts } +.segment Data points: .byte 1, 2, 3, 4, 5, 6 diff --git a/src/test/ref/initializer-2.log b/src/test/ref/initializer-2.log index 3534a5151..51f8190e2 100644 --- a/src/test/ref/initializer-2.log +++ b/src/test/ref/initializer-2.log @@ -181,11 +181,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Demonstrates initializing an array of structs // Array of structs containing chars // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -232,6 +238,7 @@ main: { rts } // File Data +.segment Data points: .byte 1, 2, 3, 4, 5, 6 ASSEMBLER OPTIMIZATIONS @@ -275,11 +282,17 @@ Score: 501 // Demonstrates initializing an array of structs // Array of structs containing chars // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -326,5 +339,6 @@ main: { rts } // File Data +.segment Data points: .byte 1, 2, 3, 4, 5, 6 diff --git a/src/test/ref/initializer-3.asm b/src/test/ref/initializer-3.asm index 4a6c4866f..d7f9c32d2 100644 --- a/src/test/ref/initializer-3.asm +++ b/src/test/ref/initializer-3.asm @@ -1,9 +1,15 @@ // Demonstrates initializing an array of structs // Array of structs containing words -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code main: { .label SCREEN = $400 .label __4 = 3 @@ -48,6 +54,7 @@ main: { // } rts } +.segment Data points: .byte 1 .word 2 .byte 3 diff --git a/src/test/ref/initializer-3.log b/src/test/ref/initializer-3.log index f44c1575b..a169a099c 100644 --- a/src/test/ref/initializer-3.log +++ b/src/test/ref/initializer-3.log @@ -233,11 +233,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Demonstrates initializing an array of structs // Array of structs containing words // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -301,6 +307,7 @@ main: { rts } // File Data +.segment Data points: .byte 1 .word 2 .byte 3 @@ -356,11 +363,17 @@ Score: 896 // Demonstrates initializing an array of structs // Array of structs containing words // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -428,6 +441,7 @@ main: { rts } // File Data +.segment Data points: .byte 1 .word 2 .byte 3 diff --git a/src/test/ref/initializer-4.asm b/src/test/ref/initializer-4.asm index 4c5fd26e2..7a12dd1e4 100644 --- a/src/test/ref/initializer-4.asm +++ b/src/test/ref/initializer-4.asm @@ -1,7 +1,13 @@ // Demonstrates an array with a trailing comma -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 @@ -19,4 +25,5 @@ main: { // } rts } +.segment Data chars: .byte 1, 2, 3 diff --git a/src/test/ref/initializer-4.log b/src/test/ref/initializer-4.log index 28099fea6..cdea5f595 100644 --- a/src/test/ref/initializer-4.log +++ b/src/test/ref/initializer-4.log @@ -135,10 +135,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Demonstrates an array with a trailing comma // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -173,6 +179,7 @@ main: { rts } // File Data +.segment Data chars: .byte 1, 2, 3 ASSEMBLER OPTIMIZATIONS @@ -209,10 +216,16 @@ Score: 226 // File Comments // Demonstrates an array with a trailing comma // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -245,5 +258,6 @@ main: { rts } // File Data +.segment Data chars: .byte 1, 2, 3 diff --git a/src/test/ref/initializer-5.asm b/src/test/ref/initializer-5.asm index 638df6c7e..562cdecde 100644 --- a/src/test/ref/initializer-5.asm +++ b/src/test/ref/initializer-5.asm @@ -1,8 +1,14 @@ // Demonstrates initializing an array of structs - with trailing commas -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code main: { .label SCREEN = $400 .label __4 = 3 @@ -47,6 +53,7 @@ main: { // } rts } +.segment Data points: .byte 1 .word 2 .byte 3 diff --git a/src/test/ref/initializer-5.log b/src/test/ref/initializer-5.log index 2fd46c212..6907fded4 100644 --- a/src/test/ref/initializer-5.log +++ b/src/test/ref/initializer-5.log @@ -232,11 +232,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Demonstrates initializing an array of structs - with trailing commas // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -300,6 +306,7 @@ main: { rts } // File Data +.segment Data points: .byte 1 .word 2 .byte 3 @@ -354,11 +361,17 @@ Score: 896 // File Comments // Demonstrates initializing an array of structs - with trailing commas // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="initializer-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -426,6 +439,7 @@ main: { rts } // File Data +.segment Data points: .byte 1 .word 2 .byte 3 diff --git a/src/test/ref/inline-asm-clobber-none.asm b/src/test/ref/inline-asm-clobber-none.asm index 1f175cbe6..867b344a3 100644 --- a/src/test/ref/inline-asm-clobber-none.asm +++ b/src/test/ref/inline-asm-clobber-none.asm @@ -1,7 +1,13 @@ // Tests that inline ASM JSR clobbers all registers -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-clobber-none.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { lda #0 __b1: diff --git a/src/test/ref/inline-asm-clobber-none.log b/src/test/ref/inline-asm-clobber-none.log index 4d78187b8..14444ecb4 100644 --- a/src/test/ref/inline-asm-clobber-none.log +++ b/src/test/ref/inline-asm-clobber-none.log @@ -214,10 +214,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that inline ASM JSR clobbers all registers // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-clobber-none.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -345,10 +351,16 @@ Score: 44461 // File Comments // Tests that inline ASM JSR clobbers all registers // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-clobber-none.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/inline-asm-clobber.asm b/src/test/ref/inline-asm-clobber.asm index f4c937eb3..513edfe3d 100644 --- a/src/test/ref/inline-asm-clobber.asm +++ b/src/test/ref/inline-asm-clobber.asm @@ -1,8 +1,14 @@ // Tests that inline ASM clobbering is taken into account when assigning registers -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-clobber.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label l = 2 ldx #0 diff --git a/src/test/ref/inline-asm-clobber.log b/src/test/ref/inline-asm-clobber.log index 5cbc64bdf..164511948 100644 --- a/src/test/ref/inline-asm-clobber.log +++ b/src/test/ref/inline-asm-clobber.log @@ -269,11 +269,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that inline ASM clobbering is taken into account when assigning registers // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-clobber.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label l = 2 @@ -428,11 +434,17 @@ Score: 4676 // File Comments // Tests that inline ASM clobbering is taken into account when assigning registers // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-clobber.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label l = 2 diff --git a/src/test/ref/inline-asm-jsr-clobber.asm b/src/test/ref/inline-asm-jsr-clobber.asm index 3a22a041b..a4c544fec 100644 --- a/src/test/ref/inline-asm-jsr-clobber.asm +++ b/src/test/ref/inline-asm-jsr-clobber.asm @@ -1,7 +1,13 @@ // Tests that inline ASM JSR clobbers all registers -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-jsr-clobber.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label i = 2 lda #0 diff --git a/src/test/ref/inline-asm-jsr-clobber.log b/src/test/ref/inline-asm-jsr-clobber.log index 575ed18ae..beecf294d 100644 --- a/src/test/ref/inline-asm-jsr-clobber.log +++ b/src/test/ref/inline-asm-jsr-clobber.log @@ -123,10 +123,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that inline ASM JSR clobbers all registers // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-jsr-clobber.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label i = 2 @@ -186,10 +192,16 @@ Score: 241 // File Comments // Tests that inline ASM JSR clobbers all registers // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-jsr-clobber.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label i = 2 diff --git a/src/test/ref/inline-asm-label.asm b/src/test/ref/inline-asm-label.asm index 3e9a4e06a..1b03dba81 100644 --- a/src/test/ref/inline-asm-label.asm +++ b/src/test/ref/inline-asm-label.asm @@ -1,8 +1,14 @@ // Illustrates how inline assembler use internal labels and external references -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-label.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // asm ldx #0 @@ -15,4 +21,5 @@ main: { // } rts } +.segment Data table: .text "cml!" diff --git a/src/test/ref/inline-asm-label.log b/src/test/ref/inline-asm-label.log index 729272c36..749149df6 100644 --- a/src/test/ref/inline-asm-label.log +++ b/src/test/ref/inline-asm-label.log @@ -67,11 +67,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Illustrates how inline assembler use internal labels and external references // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-label.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // asm { ldx#0 nxt: ldatable,x staSCREEN+1,x inx cpx#4 bnenxt } @@ -89,6 +95,7 @@ main: { rts } // File Data +.segment Data table: .text "cml!" ASSEMBLER OPTIMIZATIONS @@ -110,11 +117,17 @@ Score: 24 // File Comments // Illustrates how inline assembler use internal labels and external references // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-label.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // asm @@ -132,5 +145,6 @@ main: { rts } // File Data +.segment Data table: .text "cml!" diff --git a/src/test/ref/inline-asm-ma-var.asm b/src/test/ref/inline-asm-ma-var.asm index d5739adc9..a89cb2a53 100644 --- a/src/test/ref/inline-asm-ma-var.asm +++ b/src/test/ref/inline-asm-ma-var.asm @@ -1,8 +1,14 @@ // Test access to __ma variable from inline ASM -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-ma-var.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label value = 2 // value = 0 diff --git a/src/test/ref/inline-asm-ma-var.log b/src/test/ref/inline-asm-ma-var.log index 953fd1d53..fe87c58ff 100644 --- a/src/test/ref/inline-asm-ma-var.log +++ b/src/test/ref/inline-asm-ma-var.log @@ -131,11 +131,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test access to __ma variable from inline ASM // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-ma-var.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label value = 2 @@ -205,11 +211,17 @@ Score: 326 // File Comments // Test access to __ma variable from inline ASM // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-ma-var.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label value = 2 diff --git a/src/test/ref/inline-asm-optimized.asm b/src/test/ref/inline-asm-optimized.asm index e2326bcf1..2258f7b75 100644 --- a/src/test/ref/inline-asm-optimized.asm +++ b/src/test/ref/inline-asm-optimized.asm @@ -1,8 +1,14 @@ // Tests that inline assembler is optimized -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-optimized.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // *SCREEN = 0 lda #0 diff --git a/src/test/ref/inline-asm-optimized.log b/src/test/ref/inline-asm-optimized.log index 7d64ad592..1ebf0eacc 100644 --- a/src/test/ref/inline-asm-optimized.log +++ b/src/test/ref/inline-asm-optimized.log @@ -91,11 +91,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that inline assembler is optimized // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-optimized.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = 0 -- _deref_pbuc1=vbuc2 @@ -143,11 +149,17 @@ Score: 28 // File Comments // Tests that inline assembler is optimized // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-optimized.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // *SCREEN = 0 diff --git a/src/test/ref/inline-asm-param.asm b/src/test/ref/inline-asm-param.asm index 7b25ca037..da0b45007 100644 --- a/src/test/ref/inline-asm-param.asm +++ b/src/test/ref/inline-asm-param.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-param.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/inline-asm-param.log b/src/test/ref/inline-asm-param.log index ca159e798..483108357 100644 --- a/src/test/ref/inline-asm-param.log +++ b/src/test/ref/inline-asm-param.log @@ -119,11 +119,17 @@ Uplifting [] best 241 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-param.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -181,11 +187,17 @@ Score: 151 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-param.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/inline-asm-ref-scoped.asm b/src/test/ref/inline-asm-ref-scoped.asm index c33f15693..5a0a6783c 100644 --- a/src/test/ref/inline-asm-ref-scoped.asm +++ b/src/test/ref/inline-asm-ref-scoped.asm @@ -1,7 +1,13 @@ // Tests that references to labels in other scopes is possible from inline ASM -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-ref-scoped.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // asm lda #'c' diff --git a/src/test/ref/inline-asm-ref-scoped.log b/src/test/ref/inline-asm-ref-scoped.log index 5e9db1b6b..0fe922e7f 100644 --- a/src/test/ref/inline-asm-ref-scoped.log +++ b/src/test/ref/inline-asm-ref-scoped.log @@ -91,10 +91,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that references to labels in other scopes is possible from inline ASM // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-ref-scoped.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // asm { lda#'c' stasub.ll+1 } @@ -142,10 +148,16 @@ Score: 30 // File Comments // Tests that references to labels in other scopes is possible from inline ASM // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-ref-scoped.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // asm diff --git a/src/test/ref/inline-asm-refout-const.asm b/src/test/ref/inline-asm-refout-const.asm index 6523a2396..a2655cc69 100644 --- a/src/test/ref/inline-asm-refout-const.asm +++ b/src/test/ref/inline-asm-refout-const.asm @@ -1,8 +1,14 @@ // Illustrates how inline assembler can reference data from the outside program without the data being optimized away as unused -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-refout-const.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // asm ldx #0 @@ -15,4 +21,5 @@ main: { // } rts } +.segment Data table: .text "cml!" diff --git a/src/test/ref/inline-asm-refout-const.log b/src/test/ref/inline-asm-refout-const.log index 264901f67..2204ac91b 100644 --- a/src/test/ref/inline-asm-refout-const.log +++ b/src/test/ref/inline-asm-refout-const.log @@ -67,11 +67,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Illustrates how inline assembler can reference data from the outside program without the data being optimized away as unused // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-refout-const.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // asm { ldx#0 !: ldatable,x staSCREEN+1,x inx cpx#4 bne!- } @@ -89,6 +95,7 @@ main: { rts } // File Data +.segment Data table: .text "cml!" ASSEMBLER OPTIMIZATIONS @@ -110,11 +117,17 @@ Score: 24 // File Comments // Illustrates how inline assembler can reference data from the outside program without the data being optimized away as unused // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-refout-const.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // asm @@ -132,5 +145,6 @@ main: { rts } // File Data +.segment Data table: .text "cml!" diff --git a/src/test/ref/inline-asm-refout-var.asm b/src/test/ref/inline-asm-refout-var.asm index 3692544d5..7e56c1f4c 100644 --- a/src/test/ref/inline-asm-refout-var.asm +++ b/src/test/ref/inline-asm-refout-var.asm @@ -1,8 +1,14 @@ // Illustrates how inline assembler referencing variables is automatically converted to __ma -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-refout-var.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label i = 2 // for(byte i: 0..10) diff --git a/src/test/ref/inline-asm-refout-var.log b/src/test/ref/inline-asm-refout-var.log index 77feeeadf..f2999953e 100644 --- a/src/test/ref/inline-asm-refout-var.log +++ b/src/test/ref/inline-asm-refout-var.log @@ -99,11 +99,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Illustrates how inline assembler referencing variables is automatically converted to __ma // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-refout-var.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label i = 2 @@ -152,11 +158,17 @@ Score: 246 // File Comments // Illustrates how inline assembler referencing variables is automatically converted to __ma // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-refout-var.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label i = 2 diff --git a/src/test/ref/inline-asm-refout.asm b/src/test/ref/inline-asm-refout.asm index 14c10108f..61b01c62b 100644 --- a/src/test/ref/inline-asm-refout.asm +++ b/src/test/ref/inline-asm-refout.asm @@ -1,7 +1,13 @@ // Illustrates how inline assembler can reference data from the outside program -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-refout.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 // *(SCREEN+40) = table[0] @@ -18,4 +24,5 @@ main: { // } rts } +.segment Data table: .text "cml!" diff --git a/src/test/ref/inline-asm-refout.log b/src/test/ref/inline-asm-refout.log index e856da8a7..9f246aebb 100644 --- a/src/test/ref/inline-asm-refout.log +++ b/src/test/ref/inline-asm-refout.log @@ -80,10 +80,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Illustrates how inline assembler can reference data from the outside program // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-refout.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -105,6 +111,7 @@ main: { rts } // File Data +.segment Data table: .text "cml!" ASSEMBLER OPTIMIZATIONS @@ -126,10 +133,16 @@ Score: 32 // File Comments // Illustrates how inline assembler can reference data from the outside program // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-refout.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -152,5 +165,6 @@ main: { rts } // File Data +.segment Data table: .text "cml!" diff --git a/src/test/ref/inline-asm-uses-problem-2.asm b/src/test/ref/inline-asm-uses-problem-2.asm index d6596ead1..1a9093f11 100644 --- a/src/test/ref/inline-asm-uses-problem-2.asm +++ b/src/test/ref/inline-asm-uses-problem-2.asm @@ -1,8 +1,14 @@ // Demonstrates problem with inline ASM usages - and early-detect constants // zp2 should be forced to live at address $fc - but is identified to be constant by Pass1EarlyConstantIdentification -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-uses-problem-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label zp2 = $fc // zp2 = 0x0400 diff --git a/src/test/ref/inline-asm-uses-problem-2.log b/src/test/ref/inline-asm-uses-problem-2.log index f3d1b49a6..fd55c616a 100644 --- a/src/test/ref/inline-asm-uses-problem-2.log +++ b/src/test/ref/inline-asm-uses-problem-2.log @@ -89,10 +89,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Demonstrates problem with inline ASM usages - and early-detect constants // zp2 should be forced to live at address $fc - but is identified to be constant by Pass1EarlyConstantIdentification // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-uses-problem-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label zp2 = $fc @@ -140,10 +146,16 @@ Score: 42 // Demonstrates problem with inline ASM usages - and early-detect constants // zp2 should be forced to live at address $fc - but is identified to be constant by Pass1EarlyConstantIdentification // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm-uses-problem-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label zp2 = $fc diff --git a/src/test/ref/inline-asm.asm b/src/test/ref/inline-asm.asm index 682b4cb35..8d538f445 100644 --- a/src/test/ref/inline-asm.asm +++ b/src/test/ref/inline-asm.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // asm lda #'a' diff --git a/src/test/ref/inline-asm.log b/src/test/ref/inline-asm.log index f1e19eaf2..543d17927 100644 --- a/src/test/ref/inline-asm.log +++ b/src/test/ref/inline-asm.log @@ -62,10 +62,16 @@ Uplifting [] best 37 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // asm { lda#'a' ldx#$ff !: sta$0400,x sta$0500,x sta$0600,x sta$0700,x dex bne!- } @@ -102,10 +108,16 @@ Score: 34 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-asm.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // asm diff --git a/src/test/ref/inline-assignment.asm b/src/test/ref/inline-assignment.asm index 35cda4588..e374cce69 100644 --- a/src/test/ref/inline-assignment.asm +++ b/src/test/ref/inline-assignment.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-assignment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/inline-assignment.log b/src/test/ref/inline-assignment.log index bea778a64..8d4b62e12 100644 --- a/src/test/ref/inline-assignment.log +++ b/src/test/ref/inline-assignment.log @@ -127,11 +127,17 @@ Uplifting [] best 321 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-assignment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -193,11 +199,17 @@ Score: 231 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-assignment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/inline-dword-0.asm b/src/test/ref/inline-dword-0.asm index 5934dd469..bc14e324d 100644 --- a/src/test/ref/inline-dword-0.asm +++ b/src/test/ref/inline-dword-0.asm @@ -1,7 +1,13 @@ // Tests minimal inline dword -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-dword-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const w = $1234*$10000+$5678 .label screen = $400 diff --git a/src/test/ref/inline-dword-0.log b/src/test/ref/inline-dword-0.log index 9093aa777..c84f4df03 100644 --- a/src/test/ref/inline-dword-0.log +++ b/src/test/ref/inline-dword-0.log @@ -88,10 +88,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests minimal inline dword // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-dword-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const w = $1234*$10000+$5678 @@ -132,10 +138,16 @@ Score: 30 // File Comments // Tests minimal inline dword // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-dword-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const w = $1234*$10000+$5678 diff --git a/src/test/ref/inline-function-if.asm b/src/test/ref/inline-function-if.asm index 512b324b5..36767f070 100644 --- a/src/test/ref/inline-function-if.asm +++ b/src/test/ref/inline-function-if.asm @@ -1,8 +1,14 @@ // Test inlining a slightly complex print function (containing an if) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function-if.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = $400 +.segment Code main: { .const toUpper1_ch = 'c' .const toUpper2_ch = 'm' diff --git a/src/test/ref/inline-function-if.log b/src/test/ref/inline-function-if.log index 9b5fc0d52..d9dfbfbab 100644 --- a/src/test/ref/inline-function-if.log +++ b/src/test/ref/inline-function-if.log @@ -251,11 +251,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test inlining a slightly complex print function (containing an if) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function-if.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { .const toUpper1_ch = 'c' @@ -331,11 +337,17 @@ Score: 18 // File Comments // Test inlining a slightly complex print function (containing an if) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function-if.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { .const toUpper1_ch = 'c' diff --git a/src/test/ref/inline-function-level2.asm b/src/test/ref/inline-function-level2.asm index 08917c038..3093680c2 100644 --- a/src/test/ref/inline-function-level2.asm +++ b/src/test/ref/inline-function-level2.asm @@ -1,9 +1,15 @@ // Inline functions in two levels -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function-level2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label cur_line = 2 .label cur_line_1 = 6 +.segment Code main: { .const line1_xpos = 2 .const line1_xadd = $40 diff --git a/src/test/ref/inline-function-level2.log b/src/test/ref/inline-function-level2.log index 8de554224..56063144b 100644 --- a/src/test/ref/inline-function-level2.log +++ b/src/test/ref/inline-function-level2.log @@ -647,12 +647,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Inline functions in two levels // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function-level2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label cur_line = 2 .label cur_line_1 = 6 +.segment Code // main main: { .const line1_xpos = 2 @@ -923,12 +929,18 @@ Score: 2106 // File Comments // Inline functions in two levels // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function-level2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label cur_line = 2 .label cur_line_1 = 6 +.segment Code // main main: { .const line1_xpos = 2 diff --git a/src/test/ref/inline-function-min.asm b/src/test/ref/inline-function-min.asm index 15f2b4ac3..cc7d486f1 100644 --- a/src/test/ref/inline-function-min.asm +++ b/src/test/ref/inline-function-min.asm @@ -1,8 +1,14 @@ // Test minimal inline function -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = $400 +.segment Code main: { .const sum1_a = 2 .const sum1_b = 1 diff --git a/src/test/ref/inline-function-min.log b/src/test/ref/inline-function-min.log index d5d8c6525..6c8e3152b 100644 --- a/src/test/ref/inline-function-min.log +++ b/src/test/ref/inline-function-min.log @@ -274,11 +274,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test minimal inline function // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { .const sum1_a = 2 @@ -383,11 +389,17 @@ Score: 24 // File Comments // Test minimal inline function // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { .const sum1_a = 2 diff --git a/src/test/ref/inline-function-print.asm b/src/test/ref/inline-function-print.asm index 4de7ffd3d..8e11ab3f1 100644 --- a/src/test/ref/inline-function-print.asm +++ b/src/test/ref/inline-function-print.asm @@ -1,8 +1,14 @@ // TEst inlining a slightly complex print function (containing a loop) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function-print.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = $400 +.segment Code main: { .label print2_at = screen+2*$28 ldx #0 @@ -41,6 +47,7 @@ main: { // for(byte i=0; msg[i]; i++) iny jmp print1___b1 + .segment Data hello: .text "hello world!" .byte 0 } diff --git a/src/test/ref/inline-function-print.log b/src/test/ref/inline-function-print.log index cd0fe0202..d2f685822 100644 --- a/src/test/ref/inline-function-print.log +++ b/src/test/ref/inline-function-print.log @@ -316,11 +316,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // TEst inlining a slightly complex print function (containing a loop) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function-print.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { .label print2_at = screen+2*$28 @@ -395,6 +401,7 @@ main: { // [2] phi main::print1_j#2 = main::print1_j#1 [phi:main::print1_@2->main::print1_@1#0] -- register_copy // [2] phi main::print1_i#2 = main::print1_i#1 [phi:main::print1_@2->main::print1_@1#1] -- register_copy jmp print1___b1 + .segment Data hello: .text "hello world!" .byte 0 } @@ -453,11 +460,17 @@ Score: 636 // File Comments // TEst inlining a slightly complex print function (containing a loop) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function-print.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { .label print2_at = screen+2*$28 @@ -527,6 +540,7 @@ main: { // [2] phi main::print1_j#2 = main::print1_j#1 [phi:main::print1_@2->main::print1_@1#0] -- register_copy // [2] phi main::print1_i#2 = main::print1_i#1 [phi:main::print1_@2->main::print1_@1#1] -- register_copy jmp print1___b1 + .segment Data hello: .text "hello world!" .byte 0 } diff --git a/src/test/ref/inline-function.asm b/src/test/ref/inline-function.asm index 1d20b957a..10f6c5e6c 100644 --- a/src/test/ref/inline-function.asm +++ b/src/test/ref/inline-function.asm @@ -1,14 +1,20 @@ // Test inline function // Splits screen so upper half is lower case and lower half lower case -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label RASTER = $d012 .label D018 = $d018 .label BG_COLOR = $d021 .label screen = $400 .label charset1 = $1000 .label charset2 = $1800 +.segment Code main: { .const toD0181_return = screen/$40|charset1/$400 .const toD0182_return = screen/$40|charset2/$400 diff --git a/src/test/ref/inline-function.log b/src/test/ref/inline-function.log index f6dc39434..66f6757da 100644 --- a/src/test/ref/inline-function.log +++ b/src/test/ref/inline-function.log @@ -326,9 +326,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Test inline function // Splits screen so upper half is lower case and lower half lower case // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label RASTER = $d012 .label D018 = $d018 @@ -336,6 +341,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label screen = $400 .label charset1 = $1000 .label charset2 = $1800 +.segment Code // main main: { .const toD0181_return = screen/$40|charset1/$400 @@ -431,9 +437,14 @@ Score: 1972 // Test inline function // Splits screen so upper half is lower case and lower half lower case // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-function.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label RASTER = $d012 .label D018 = $d018 @@ -441,6 +452,7 @@ Score: 1972 .label screen = $400 .label charset1 = $1000 .label charset2 = $1800 +.segment Code // main main: { .const toD0181_return = screen/$40|charset1/$400 diff --git a/src/test/ref/inline-kasm-clobber.asm b/src/test/ref/inline-kasm-clobber.asm index 140793ffc..499ed178f 100644 --- a/src/test/ref/inline-kasm-clobber.asm +++ b/src/test/ref/inline-kasm-clobber.asm @@ -1,8 +1,14 @@ // Tests that inline kickasm supports the clobbering directive -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-clobber.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label l = 3 .label k = 2 diff --git a/src/test/ref/inline-kasm-clobber.log b/src/test/ref/inline-kasm-clobber.log index c8395b5a7..b644473e6 100644 --- a/src/test/ref/inline-kasm-clobber.log +++ b/src/test/ref/inline-kasm-clobber.log @@ -241,11 +241,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that inline kickasm supports the clobbering directive // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-clobber.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label l = 3 @@ -374,11 +380,17 @@ Score: 266411 // File Comments // Tests that inline kickasm supports the clobbering directive // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-clobber.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label l = 3 diff --git a/src/test/ref/inline-kasm-data.asm b/src/test/ref/inline-kasm-data.asm index 504155328..6fcd20b4b 100644 --- a/src/test/ref/inline-kasm-data.asm +++ b/src/test/ref/inline-kasm-data.asm @@ -1,7 +1,13 @@ // Example of inline kickasm data -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-data.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = 2 .label cols = 4 @@ -46,6 +52,7 @@ main: { // } rts } +.segment Data .pc = $1000 "sintab" sintab: .fill 25, 20 + 20*sin(toRadians(i*360/25)) diff --git a/src/test/ref/inline-kasm-data.log b/src/test/ref/inline-kasm-data.log index 52f9d3a5c..240c19479 100644 --- a/src/test/ref/inline-kasm-data.log +++ b/src/test/ref/inline-kasm-data.log @@ -191,10 +191,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Example of inline kickasm data // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-data.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = 2 @@ -258,6 +264,7 @@ main: { rts } // File Data +.segment Data .pc = $1000 "sintab" sintab: .fill 25, 20 + 20*sin(toRadians(i*360/25)) @@ -304,10 +311,16 @@ Score: 846 // File Comments // Example of inline kickasm data // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-data.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = 2 @@ -372,6 +385,7 @@ main: { rts } // File Data +.segment Data .pc = $1000 "sintab" sintab: .fill 25, 20 + 20*sin(toRadians(i*360/25)) diff --git a/src/test/ref/inline-kasm-loop.asm b/src/test/ref/inline-kasm-loop.asm index 230e878a1..79f73a9f4 100644 --- a/src/test/ref/inline-kasm-loop.asm +++ b/src/test/ref/inline-kasm-loop.asm @@ -1,7 +1,13 @@ // Example of inline kickasm in a function -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-loop.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 // *(SCREEN+1000) = 0 diff --git a/src/test/ref/inline-kasm-loop.log b/src/test/ref/inline-kasm-loop.log index 811a028b3..904d26666 100644 --- a/src/test/ref/inline-kasm-loop.log +++ b/src/test/ref/inline-kasm-loop.log @@ -86,10 +86,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Example of inline kickasm in a function // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-loop.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -128,10 +134,16 @@ Score: 268 // File Comments // Example of inline kickasm in a function // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-loop.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/inline-kasm-refout.asm b/src/test/ref/inline-kasm-refout.asm index 5ffc3c235..d6093dbba 100644 --- a/src/test/ref/inline-kasm-refout.asm +++ b/src/test/ref/inline-kasm-refout.asm @@ -1,7 +1,13 @@ // Illustrates how inline kickassembler can reference data from the outside program -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-refout.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 // kickasm @@ -16,4 +22,5 @@ main: { // } rts } +.segment Data table: .text "cml!" diff --git a/src/test/ref/inline-kasm-refout.log b/src/test/ref/inline-kasm-refout.log index 358b1cd63..cb3b2810a 100644 --- a/src/test/ref/inline-kasm-refout.log +++ b/src/test/ref/inline-kasm-refout.log @@ -80,10 +80,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Illustrates how inline kickassembler can reference data from the outside program // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-refout.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -103,6 +109,7 @@ main: { rts } // File Data +.segment Data table: .text "cml!" ASSEMBLER OPTIMIZATIONS @@ -124,10 +131,16 @@ Score: 262 // File Comments // Illustrates how inline kickassembler can reference data from the outside program // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-refout.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -147,5 +160,6 @@ main: { rts } // File Data +.segment Data table: .text "cml!" diff --git a/src/test/ref/inline-kasm-resource.asm b/src/test/ref/inline-kasm-resource.asm index dd1a215d3..e9d4fafba 100644 --- a/src/test/ref/inline-kasm-resource.asm +++ b/src/test/ref/inline-kasm-resource.asm @@ -1,11 +1,17 @@ // Example of inline kickasm resource data -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-resource.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 .label SPRITES_ENABLE = $d015 .label SPRITES_XPOS = $d000 .label SPRITES_YPOS = $d001 +.segment Code main: { // *(SCREEN+0x3f8) = (char)((unsigned int)SPRITE/$40) lda #$ff&SPRITE/$40 @@ -21,6 +27,7 @@ main: { // } rts } +.segment Data .pc = $c00 "SPRITE" SPRITE: .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) diff --git a/src/test/ref/inline-kasm-resource.log b/src/test/ref/inline-kasm-resource.log index f6e6018f5..72828a9d5 100644 --- a/src/test/ref/inline-kasm-resource.log +++ b/src/test/ref/inline-kasm-resource.log @@ -109,14 +109,20 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Example of inline kickasm resource data // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-resource.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label SPRITES_ENABLE = $d015 .label SPRITES_XPOS = $d000 .label SPRITES_YPOS = $d001 +.segment Code // main main: { // [0] *(SCREEN+$3f8) = (byte)(word)SPRITE/$40 -- _deref_pbuc1=vbuc2 @@ -138,6 +144,7 @@ main: { rts } // File Data +.segment Data .pc = $c00 "SPRITE" SPRITE: .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) @@ -174,14 +181,20 @@ Score: 28 // File Comments // Example of inline kickasm resource data // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-kasm-resource.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label SPRITES_ENABLE = $d015 .label SPRITES_XPOS = $d000 .label SPRITES_YPOS = $d001 +.segment Code // main main: { // *(SCREEN+0x3f8) = (char)((unsigned int)SPRITE/$40) @@ -205,6 +218,7 @@ main: { rts } // File Data +.segment Data .pc = $c00 "SPRITE" SPRITE: .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) diff --git a/src/test/ref/inline-pointer-0.asm b/src/test/ref/inline-pointer-0.asm index 8f8bbc8aa..51a1fc60c 100644 --- a/src/test/ref/inline-pointer-0.asm +++ b/src/test/ref/inline-pointer-0.asm @@ -1,7 +1,13 @@ // Tests creating a literal pointer from two bytes -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-pointer-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = 4*$100 // *screen = 'a' diff --git a/src/test/ref/inline-pointer-0.log b/src/test/ref/inline-pointer-0.log index 97b708757..c7bcadb07 100644 --- a/src/test/ref/inline-pointer-0.log +++ b/src/test/ref/inline-pointer-0.log @@ -97,10 +97,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests creating a literal pointer from two bytes // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-pointer-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = 4*$100 @@ -134,10 +140,16 @@ Score: 12 // File Comments // Tests creating a literal pointer from two bytes // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-pointer-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = 4*$100 diff --git a/src/test/ref/inline-pointer-1.asm b/src/test/ref/inline-pointer-1.asm index 93e4ac3f6..402ac0f3c 100644 --- a/src/test/ref/inline-pointer-1.asm +++ b/src/test/ref/inline-pointer-1.asm @@ -1,7 +1,13 @@ // Tests creating a literal pointer from two bytes -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-pointer-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // puta(4, 0x00) ldx #0 diff --git a/src/test/ref/inline-pointer-1.log b/src/test/ref/inline-pointer-1.log index cb7f32d7c..4aef82ef9 100644 --- a/src/test/ref/inline-pointer-1.log +++ b/src/test/ref/inline-pointer-1.log @@ -185,10 +185,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests creating a literal pointer from two bytes // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-pointer-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] call puta @@ -272,10 +278,16 @@ Score: 48 // File Comments // Tests creating a literal pointer from two bytes // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-pointer-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // puta(4, 0x00) diff --git a/src/test/ref/inline-pointer-2.asm b/src/test/ref/inline-pointer-2.asm index d67667b40..4ef7a530e 100644 --- a/src/test/ref/inline-pointer-2.asm +++ b/src/test/ref/inline-pointer-2.asm @@ -1,7 +1,13 @@ // Tests creating a literal pointer from two bytes -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-pointer-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = 4*$100+$28 // *screen = 'a' diff --git a/src/test/ref/inline-pointer-2.log b/src/test/ref/inline-pointer-2.log index 5c0d96a9e..16a3ec071 100644 --- a/src/test/ref/inline-pointer-2.log +++ b/src/test/ref/inline-pointer-2.log @@ -119,10 +119,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests creating a literal pointer from two bytes // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-pointer-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = 4*$100+$28 @@ -156,10 +162,16 @@ Score: 12 // File Comments // Tests creating a literal pointer from two bytes // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-pointer-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = 4*$100+$28 diff --git a/src/test/ref/inline-string-2.asm b/src/test/ref/inline-string-2.asm index 739f9048b..e6b90d586 100644 --- a/src/test/ref/inline-string-2.asm +++ b/src/test/ref/inline-string-2.asm @@ -1,8 +1,14 @@ // Inline Strings in assignments -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-string-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = 2 +.segment Code main: { // print_msg(1) lda #<$400 @@ -38,11 +44,13 @@ print_msg: { jsr print // } rts + .segment Data msg_1: .text "Hello " .byte 0 msg_2: .text "World!" .byte 0 } +.segment Code // print(byte* zp(4) msg) print: { .label msg = 4 diff --git a/src/test/ref/inline-string-2.log b/src/test/ref/inline-string-2.log index 370c31715..f6bd6033a 100644 --- a/src/test/ref/inline-string-2.log +++ b/src/test/ref/inline-string-2.log @@ -359,11 +359,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Inline Strings in assignments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-string-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = 2 +.segment Code // main main: { // [1] call print_msg @@ -435,11 +441,13 @@ print_msg: { __breturn: // [11] return rts + .segment Data msg_1: .text "Hello " .byte 0 msg_2: .text "World!" .byte 0 } +.segment Code // print // print(byte* zp(4) msg) print: { @@ -542,11 +550,17 @@ Score: 612 // File Comments // Inline Strings in assignments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-string-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = 2 +.segment Code // main main: { // print_msg(1) @@ -609,11 +623,13 @@ print_msg: { // } // [11] return rts + .segment Data msg_1: .text "Hello " .byte 0 msg_2: .text "World!" .byte 0 } +.segment Code // print // print(byte* zp(4) msg) print: { diff --git a/src/test/ref/inline-string-3.asm b/src/test/ref/inline-string-3.asm index 3e9087714..2d8a16ab7 100644 --- a/src/test/ref/inline-string-3.asm +++ b/src/test/ref/inline-string-3.asm @@ -1,9 +1,15 @@ // Test assigning address of inline string to pointer // The result should be an labelled .text in the ASM // Erroneously tries to inline the string completely leading to a CompileError -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-string-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label PTR = $9ffe .label SCREEN = $400 @@ -25,5 +31,6 @@ main: { sta SCREEN // } rts + .segment Data STRING: .text "camelot" } diff --git a/src/test/ref/inline-string-3.log b/src/test/ref/inline-string-3.log index 476861841..04472940e 100644 --- a/src/test/ref/inline-string-3.log +++ b/src/test/ref/inline-string-3.log @@ -108,10 +108,16 @@ ASSEMBLER BEFORE OPTIMIZATION // The result should be an labelled .text in the ASM // Erroneously tries to inline the string completely leading to a CompileError // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-string-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label PTR = $9ffe @@ -137,6 +143,7 @@ main: { __breturn: // [4] return rts + .segment Data STRING: .text "camelot" } // File Data @@ -166,10 +173,16 @@ Score: 43 // The result should be an labelled .text in the ASM // Erroneously tries to inline the string completely leading to a CompileError // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-string-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label PTR = $9ffe @@ -198,6 +211,7 @@ main: { // } // [4] return rts + .segment Data STRING: .text "camelot" } // File Data diff --git a/src/test/ref/inline-string-4.asm b/src/test/ref/inline-string-4.asm index f0229f21f..ea7748570 100644 --- a/src/test/ref/inline-string-4.asm +++ b/src/test/ref/inline-string-4.asm @@ -1,17 +1,25 @@ // Test casting the address of an inline string to a dword. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-string-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = $400 +.segment Code main: { .label dw = msg // output(dw) jsr output // } rts + .segment Data msg: .text "camelot" .byte 0 } +.segment Code output: { // *screen = dw lda #SCREEN, >SCREEN+$100, >SCREEN+$200 } diff --git a/src/test/ref/inline-word.log b/src/test/ref/inline-word.log index 1342c128d..db649612a 100644 --- a/src/test/ref/inline-word.log +++ b/src/test/ref/inline-word.log @@ -198,11 +198,17 @@ Allocated (was zp[2]:4) zp[2]:3 [ main::w#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-word.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label w = 3 @@ -259,6 +265,7 @@ main: { __breturn: // [9] return rts + .segment Data his: .byte >SCREEN, >SCREEN+$100, >SCREEN+$200 } // File Data @@ -307,11 +314,17 @@ Score: 3381 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inline-word.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label w = 3 @@ -361,6 +374,7 @@ main: { // } // [9] return rts + .segment Data his: .byte >SCREEN, >SCREEN+$100, >SCREEN+$200 } // File Data diff --git a/src/test/ref/inlinearrayproblem.asm b/src/test/ref/inlinearrayproblem.asm index d9ffb1ca5..137aa7d18 100644 --- a/src/test/ref/inlinearrayproblem.asm +++ b/src/test/ref/inlinearrayproblem.asm @@ -1,10 +1,16 @@ // Arrays / strings allocated inline destroy functions (because they are allocated where the call enters. // The following places the text at the start of the main-function - and JSR's straight into the text - not the code. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inlinearrayproblem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 .label SCREEN2 = $400+$28 +.segment Code main: { ldx #0 __b1: @@ -20,6 +26,7 @@ main: { bne __b1 // } rts + .segment Data txt: .text "qwe" data: .byte 1, 2, 3 } diff --git a/src/test/ref/inlinearrayproblem.log b/src/test/ref/inlinearrayproblem.log index 7f6097a79..dbc149273 100644 --- a/src/test/ref/inlinearrayproblem.log +++ b/src/test/ref/inlinearrayproblem.log @@ -131,12 +131,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Arrays / strings allocated inline destroy functions (because they are allocated where the call enters. // The following places the text at the start of the main-function - and JSR's straight into the text - not the code. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inlinearrayproblem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label SCREEN2 = $400+$28 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -166,6 +172,7 @@ main: { __breturn: // [6] return rts + .segment Data txt: .text "qwe" data: .byte 1, 2, 3 } @@ -204,12 +211,18 @@ Score: 281 // Arrays / strings allocated inline destroy functions (because they are allocated where the call enters. // The following places the text at the start of the main-function - and JSR's straight into the text - not the code. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inlinearrayproblem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label SCREEN2 = $400+$28 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -237,6 +250,7 @@ main: { // } // [6] return rts + .segment Data txt: .text "qwe" data: .byte 1, 2, 3 } diff --git a/src/test/ref/inmem-const-array.asm b/src/test/ref/inmem-const-array.asm index c56716015..0084c3ebd 100644 --- a/src/test/ref/inmem-const-array.asm +++ b/src/test/ref/inmem-const-array.asm @@ -1,9 +1,15 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inmem-const-array.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const WHITE = 1 .const RED = 2 .const GREEN = 5 +.segment Code main: { .label screen = $400 .label cols = $d800 @@ -28,5 +34,6 @@ main: { bne __b1 // } rts + .segment Data colseq: .byte WHITE, RED, GREEN } diff --git a/src/test/ref/inmem-const-array.log b/src/test/ref/inmem-const-array.log index f292c9ed6..9e226c0a8 100644 --- a/src/test/ref/inmem-const-array.log +++ b/src/test/ref/inmem-const-array.log @@ -194,13 +194,19 @@ Uplifting [] best 541 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inmem-const-array.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const WHITE = 1 .const RED = 2 .const GREEN = 5 +.segment Code // main main: { .label screen = $400 @@ -256,6 +262,7 @@ main: { __breturn: // [10] return rts + .segment Data colseq: .byte WHITE, RED, GREEN } // File Data @@ -306,13 +313,19 @@ Score: 361 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inmem-const-array.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const WHITE = 1 .const RED = 2 .const GREEN = 5 +.segment Code // main main: { .label screen = $400 @@ -360,6 +373,7 @@ main: { // } // [10] return rts + .segment Data colseq: .byte WHITE, RED, GREEN } // File Data diff --git a/src/test/ref/inmemarray.asm b/src/test/ref/inmemarray.asm index b24228704..145c5dcfd 100644 --- a/src/test/ref/inmemarray.asm +++ b/src/test/ref/inmemarray.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inmemarray.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 ldy #0 @@ -22,4 +28,5 @@ main: { // } rts } +.segment Data TXT: .byte 3, 1, $d, 5, $c, $f, $14, $20 diff --git a/src/test/ref/inmemarray.log b/src/test/ref/inmemarray.log index e2b1f5670..bcad493ea 100644 --- a/src/test/ref/inmemarray.log +++ b/src/test/ref/inmemarray.log @@ -192,11 +192,17 @@ Uplifting [] best 471 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inmemarray.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -249,6 +255,7 @@ main: { rts } // File Data +.segment Data TXT: .byte 3, 1, $d, 5, $c, $f, $14, $20 ASSEMBLER OPTIMIZATIONS @@ -293,11 +300,17 @@ Score: 291 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inmemarray.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -341,5 +354,6 @@ main: { rts } // File Data +.segment Data TXT: .byte 3, 1, $d, 5, $c, $f, $14, $20 diff --git a/src/test/ref/inmemstring.asm b/src/test/ref/inmemstring.asm index d5a716c6b..ca45f709c 100644 --- a/src/test/ref/inmemstring.asm +++ b/src/test/ref/inmemstring.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inmemstring.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label cursor = 2 lda #1 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inner-index-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { ldx #0 __b1: @@ -35,5 +41,6 @@ main: { inx jmp __b1 } +.segment Data v: .fill 2*5, 0 x: .fill 2*5, 0 diff --git a/src/test/ref/inner-index-problem.log b/src/test/ref/inner-index-problem.log index cd3d11857..2b9458aba 100644 --- a/src/test/ref/inner-index-problem.log +++ b/src/test/ref/inner-index-problem.log @@ -150,10 +150,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Demonstrates a problem with inner indexes into arrays where the elemt size>1 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inner-index-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -201,6 +207,7 @@ main: { jmp __b1 } // File Data +.segment Data v: .fill 2*5, 0 x: .fill 2*5, 0 @@ -232,10 +239,16 @@ Score: 731 // File Comments // Demonstrates a problem with inner indexes into arrays where the elemt size>1 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="inner-index-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -284,6 +297,7 @@ main: { jmp __b1 } // File Data +.segment Data v: .fill 2*5, 0 x: .fill 2*5, 0 diff --git a/src/test/ref/int-conversion.asm b/src/test/ref/int-conversion.asm index 89e713caf..2e8db2ac0 100644 --- a/src/test/ref/int-conversion.asm +++ b/src/test/ref/int-conversion.asm @@ -1,7 +1,12 @@ // Tests different integer literal types -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="int-conversion.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const RED = 2 .const GREEN = 5 .const TYPEID_BYTE = 1 @@ -12,6 +17,7 @@ .const TYPEID_SIGNED_DWORD = 6 .label SCREEN = $400 .label COLS = $d800 +.segment Code main: { .label s = 2 lda #SCREEN)/$40 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f @@ -565,6 +571,7 @@ divr16u: { // } rts } +.segment Data // The coordinates of the lines to animate x_start: .word $a, $14, $1e, $1e y_start: .byte $a, $a, $a, $14 diff --git a/src/test/ref/line-anim.log b/src/test/ref/line-anim.log index 704bc3e83..aa86a8934 100644 --- a/src/test/ref/line-anim.log +++ b/src/test/ref/line-anim.log @@ -2601,9 +2601,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="line-anim.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -2629,6 +2634,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label CIA2 = $dd00 .label BITMAP = $a000 .label SCREEN = $8800 +.segment Code // main main: { .const vicSelectGfxBank1_toDd001_return = 3^(>SCREEN)/$40 @@ -3493,6 +3499,7 @@ divr16u: { rts } // File Data +.segment Data // The coordinates of the lines to animate x_start: .word $a, $14, $1e, $1e y_start: .byte $a, $a, $a, $14 @@ -3692,8 +3699,8 @@ Removing instruction __b5: Succesful ASM optimization Pass5UnusedLabelElimination Removing unreachable instruction rts Succesful ASM optimization Pass5UnreachableCodeElimination -Fixing long branch [225] bmi abs16s1___b1 to bpl -Fixing long branch [234] bmi abs16s2___b1 to bpl +Fixing long branch [231] bmi abs16s1___b1 to bpl +Fixing long branch [240] bmi abs16s2___b1 to bpl FINAL SYMBOL TABLE const byte* BITMAP = (byte*) 40960 @@ -3916,9 +3923,14 @@ Score: 21966 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="line-anim.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const VIC_BMM = $20 .const VIC_DEN = $10 @@ -3944,6 +3956,7 @@ Score: 21966 .label CIA2 = $dd00 .label BITMAP = $a000 .label SCREEN = $8800 +.segment Code // main main: { .const vicSelectGfxBank1_toDd001_return = 3^(>SCREEN)/$40 @@ -4756,6 +4769,7 @@ divr16u: { rts } // File Data +.segment Data // The coordinates of the lines to animate x_start: .word $a, $14, $1e, $1e y_start: .byte $a, $a, $a, $14 diff --git a/src/test/ref/linegen.asm b/src/test/ref/linegen.asm index 7c87d7126..643570f83 100644 --- a/src/test/ref/linegen.asm +++ b/src/test/ref/linegen.asm @@ -3,15 +3,21 @@ // Simple binary division implementation // Follows the C99 standard by truncating toward zero on negative results. // See http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf section 6.5.5 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="linegen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_WORD = 2 .label print_screen = $400 // Remainder after unsigned 16-bit division .label rem16u = $18 .label print_char_cursor = $f .label print_line_cursor = $b +.segment Code main: { .label __28 = $11 .label i = 2 @@ -210,6 +216,7 @@ main: { // for(byte i=0; i<20; i++) inc.z i jmp __b1 + .segment Data lintab1: .fill 2*$14, 0 lintab2: .fill 2*$14, 0 lintab3: .fill 2*$14, 0 @@ -218,6 +225,7 @@ main: { str1: .text " " .byte 0 } +.segment Code // Generate word linear table // lintab - the table to generate into // length - the number of points in a total sine wavelength (the size of the table) @@ -533,4 +541,5 @@ print_char: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/linegen.log b/src/test/ref/linegen.log index 521c80408..09916480a 100644 --- a/src/test/ref/linegen.log +++ b/src/test/ref/linegen.log @@ -2440,9 +2440,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Follows the C99 standard by truncating toward zero on negative results. // See http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf section 6.5.5 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="linegen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 .label print_screen = $400 @@ -2450,6 +2455,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label rem16u = $18 .label print_char_cursor = $f .label print_line_cursor = $b +.segment Code // main main: { .label __28 = $11 @@ -2877,6 +2883,7 @@ main: { __b1_from___b21: // [22] phi main::i#10 = main::i#1 [phi:main::@21->main::@1#0] -- register_copy jmp __b1 + .segment Data lintab1: .fill 2*$14, 0 lintab2: .fill 2*$14, 0 lintab3: .fill 2*$14, 0 @@ -2885,6 +2892,7 @@ main: { str1: .text " " .byte 0 } +.segment Code // lin16u_gen // Generate word linear table // lintab - the table to generate into @@ -3368,6 +3376,7 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -3716,9 +3725,14 @@ Score: 11679 // Follows the C99 standard by truncating toward zero on negative results. // See http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf section 6.5.5 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="linegen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 .label print_screen = $400 @@ -3726,6 +3740,7 @@ Score: 11679 .label rem16u = $18 .label print_char_cursor = $f .label print_line_cursor = $b +.segment Code // main main: { .label __28 = $11 @@ -4080,6 +4095,7 @@ main: { // [22] phi from main::@21 to main::@1 [phi:main::@21->main::@1] // [22] phi main::i#10 = main::i#1 [phi:main::@21->main::@1#0] -- register_copy jmp __b1 + .segment Data lintab1: .fill 2*$14, 0 lintab2: .fill 2*$14, 0 lintab3: .fill 2*$14, 0 @@ -4088,6 +4104,7 @@ main: { str1: .text " " .byte 0 } +.segment Code // lin16u_gen // Generate word linear table // lintab - the table to generate into @@ -4555,5 +4572,6 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/literal-char-minus-number.asm b/src/test/ref/literal-char-minus-number.asm index 0b651bd94..9ba46df4d 100644 --- a/src/test/ref/literal-char-minus-number.asm +++ b/src/test/ref/literal-char-minus-number.asm @@ -1,7 +1,13 @@ // Tests subtracting a number from a literal char -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="literal-char-minus-number.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 // *SCREEN = 'a' - 1 diff --git a/src/test/ref/literal-char-minus-number.log b/src/test/ref/literal-char-minus-number.log index bdb0f20a6..90c654335 100644 --- a/src/test/ref/literal-char-minus-number.log +++ b/src/test/ref/literal-char-minus-number.log @@ -77,10 +77,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests subtracting a number from a literal char // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="literal-char-minus-number.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -113,10 +119,16 @@ Score: 12 // File Comments // Tests subtracting a number from a literal char // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="literal-char-minus-number.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/literal-strings.asm b/src/test/ref/literal-strings.asm index 72be6aa8c..2b3177c3d 100644 --- a/src/test/ref/literal-strings.asm +++ b/src/test/ref/literal-strings.asm @@ -1,8 +1,14 @@ // Tests literal strings with and without zero-termination -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="literal-strings.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: @@ -19,6 +25,7 @@ main: { // } rts } +.segment Data msgz: .text "cml" msg: .text "cml" .byte 0 diff --git a/src/test/ref/literal-strings.log b/src/test/ref/literal-strings.log index a6fad88dd..ec5974b8d 100644 --- a/src/test/ref/literal-strings.log +++ b/src/test/ref/literal-strings.log @@ -124,11 +124,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests literal strings with and without zero-termination // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="literal-strings.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -160,6 +166,7 @@ main: { rts } // File Data +.segment Data msgz: .text "cml" msg: .text "cml" .byte 0 @@ -195,11 +202,17 @@ Score: 281 // File Comments // Tests literal strings with and without zero-termination // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="literal-strings.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -229,6 +242,7 @@ main: { rts } // File Data +.segment Data msgz: .text "cml" msg: .text "cml" .byte 0 diff --git a/src/test/ref/literal-word-pointer-0.asm b/src/test/ref/literal-word-pointer-0.asm index c57fddf5f..70f138d5c 100644 --- a/src/test/ref/literal-word-pointer-0.asm +++ b/src/test/ref/literal-word-pointer-0.asm @@ -1,15 +1,23 @@ // Tests assigning a literal word pointer -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="literal-word-pointer-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // print("qwe") jsr print // } rts + .segment Data str: .text "qwe" .byte 0 } +.segment Code print: { // *(char**)0x80 = (char*)str lda #main::@1] @@ -269,6 +275,7 @@ out: { rts } // File Data +.segment Data msg: .text "hello world!" .byte 0 @@ -315,11 +322,17 @@ Score: 229 // Test effective live range and register allocation // out::c should be a hardware register, main::i should be a hardware register, global idx should be a hardware register // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -364,6 +377,7 @@ out: { rts } // File Data +.segment Data msg: .text "hello world!" .byte 0 diff --git a/src/test/ref/liverange-7.asm b/src/test/ref/liverange-7.asm index 9704e506b..4d5289e58 100644 --- a/src/test/ref/liverange-7.asm +++ b/src/test/ref/liverange-7.asm @@ -1,9 +1,15 @@ // Test effective live range and register allocation // Here main::c, out2::c and out::c can all have the same allocation - and the global idx can be allocated to a hardware register. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 txa diff --git a/src/test/ref/liverange-7.log b/src/test/ref/liverange-7.log index 589b3e582..ffc2b59be 100644 --- a/src/test/ref/liverange-7.log +++ b/src/test/ref/liverange-7.log @@ -266,11 +266,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test effective live range and register allocation // Here main::c, out2::c and out::c can all have the same allocation - and the global idx can be allocated to a hardware register. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -381,11 +387,17 @@ Score: 216 // Test effective live range and register allocation // Here main::c, out2::c and out::c can all have the same allocation - and the global idx can be allocated to a hardware register. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/liverange-8.asm b/src/test/ref/liverange-8.asm index 2bddda80c..844056785 100644 --- a/src/test/ref/liverange-8.asm +++ b/src/test/ref/liverange-8.asm @@ -1,9 +1,15 @@ // Test effective live range and register allocation // Here main::c, out2::c and out::c can all have the same allocation - and the global idx can be allocated to a hardware register. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 txa diff --git a/src/test/ref/liverange-8.log b/src/test/ref/liverange-8.log index da397a6ff..c1f238ef9 100644 --- a/src/test/ref/liverange-8.log +++ b/src/test/ref/liverange-8.log @@ -291,11 +291,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test effective live range and register allocation // Here main::c, out2::c and out::c can all have the same allocation - and the global idx can be allocated to a hardware register. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -427,11 +433,17 @@ Score: 222 // Test effective live range and register allocation // Here main::c, out2::c and out::c can all have the same allocation - and the global idx can be allocated to a hardware register. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/liverange-9.asm b/src/test/ref/liverange-9.asm index 5d9cd2921..0f083eb83 100644 --- a/src/test/ref/liverange-9.asm +++ b/src/test/ref/liverange-9.asm @@ -1,9 +1,15 @@ // Test effective live range and register allocation // Here main::c, outsw::c and outw::c can all have the same allocation -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 ldy #0 diff --git a/src/test/ref/liverange-9.log b/src/test/ref/liverange-9.log index 5d8d0e520..15dd723bc 100644 --- a/src/test/ref/liverange-9.log +++ b/src/test/ref/liverange-9.log @@ -388,11 +388,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test effective live range and register allocation // Here main::c, outsw::c and outw::c can all have the same allocation // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -563,11 +569,17 @@ Score: 182 // Test effective live range and register allocation // Here main::c, outsw::c and outw::c can all have the same allocation // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/liverange-call-problem.asm b/src/test/ref/liverange-call-problem.asm index 934b6a997..455810611 100644 --- a/src/test/ref/liverange-call-problem.asm +++ b/src/test/ref/liverange-call-problem.asm @@ -1,11 +1,17 @@ // Live ranges were not functioning properly, when multiple method calls were chained - each modifying different vars. // w1 and w2 ended up having the same zero-page register as their live range was not propagated properly -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-call-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_WORD = 2 .label w1 = 2 .label w2 = 4 +.segment Code main: { .label SCREEN = $400 // incw1() diff --git a/src/test/ref/liverange-call-problem.log b/src/test/ref/liverange-call-problem.log index cf93cafe1..60a7c3c6b 100644 --- a/src/test/ref/liverange-call-problem.log +++ b/src/test/ref/liverange-call-problem.log @@ -306,13 +306,19 @@ ASSEMBLER BEFORE OPTIMIZATION // Live ranges were not functioning properly, when multiple method calls were chained - each modifying different vars. // w1 and w2 ended up having the same zero-page register as their live range was not propagated properly // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-call-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 .label w1 = 2 .label w2 = 4 +.segment Code // main main: { .label SCREEN = $400 @@ -459,13 +465,19 @@ Score: 110 // Live ranges were not functioning properly, when multiple method calls were chained - each modifying different vars. // w1 and w2 ended up having the same zero-page register as their live range was not propagated properly // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-call-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 .label w1 = 2 .label w2 = 4 +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/liverange-problem-0.asm b/src/test/ref/liverange-problem-0.asm index 7e157b9f9..3a8c05a64 100644 --- a/src/test/ref/liverange-problem-0.asm +++ b/src/test/ref/liverange-problem-0.asm @@ -2,12 +2,18 @@ // SCREEN_1 and SCREEN_2 are both allocated to ZP: 4 // Problem is that outside main() scope statements have zero call-paths and then isStatementAllocationOverlapping() never checks liveranges // CallPath code must be rewritten to use @begin as the outermost call instead of main() -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-problem-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label MEM = 2 .label SCREEN_1 = 4 .label SCREEN_2 = 6 +.segment Code __start: { // malloc() lda #<$400 diff --git a/src/test/ref/liverange-problem-0.log b/src/test/ref/liverange-problem-0.log index b55f89331..ff6e12d36 100644 --- a/src/test/ref/liverange-problem-0.log +++ b/src/test/ref/liverange-problem-0.log @@ -284,13 +284,19 @@ ASSEMBLER BEFORE OPTIMIZATION // Problem is that outside main() scope statements have zero call-paths and then isStatementAllocationOverlapping() never checks liveranges // CallPath code must be rewritten to use @begin as the outermost call instead of main() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-problem-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label MEM = 2 .label SCREEN_1 = 4 .label SCREEN_2 = 6 +.segment Code // __start __start: { // [1] phi from __start to __start::__init1 [phi:__start->__start::__init1] @@ -434,13 +440,19 @@ Score: 98 // Problem is that outside main() scope statements have zero call-paths and then isStatementAllocationOverlapping() never checks liveranges // CallPath code must be rewritten to use @begin as the outermost call instead of main() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange-problem-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label MEM = 2 .label SCREEN_1 = 4 .label SCREEN_2 = 6 +.segment Code // __start __start: { // [1] phi from __start to __start::__init1 [phi:__start->__start::__init1] diff --git a/src/test/ref/liverange.asm b/src/test/ref/liverange.asm index 84d43070e..225d46b24 100644 --- a/src/test/ref/liverange.asm +++ b/src/test/ref/liverange.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label a = 2 diff --git a/src/test/ref/liverange.log b/src/test/ref/liverange.log index a1c41d030..f642c08ed 100644 --- a/src/test/ref/liverange.log +++ b/src/test/ref/liverange.log @@ -283,10 +283,16 @@ Allocated (was zp[1]:5) zp[1]:2 [ main::a#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -392,10 +398,16 @@ Score: 56 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="liverange.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/local-string.asm b/src/test/ref/local-string.asm index 3044fbd0b..60a2e418a 100644 --- a/src/test/ref/local-string.asm +++ b/src/test/ref/local-string.asm @@ -1,7 +1,13 @@ // Local constant strings are placed at the start of the method. This means the generated ASM jumps / calls straignt into the constant string -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="local-string.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 ldx #0 @@ -19,6 +25,7 @@ main: { // screen[i++] = msg[i]; inx jmp __b1 + .segment Data msg: .text "message 2 " .byte 0 } diff --git a/src/test/ref/local-string.log b/src/test/ref/local-string.log index 1502f1456..6be79e25e 100644 --- a/src/test/ref/local-string.log +++ b/src/test/ref/local-string.log @@ -119,10 +119,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Local constant strings are placed at the start of the method. This means the generated ASM jumps / calls straignt into the constant string // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="local-string.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -153,6 +159,7 @@ main: { __b1_from___b2: // [1] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy jmp __b1 + .segment Data msg: .text "message 2 " .byte 0 } @@ -184,10 +191,16 @@ Score: 261 // File Comments // Local constant strings are placed at the start of the method. This means the generated ASM jumps / calls straignt into the constant string // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="local-string.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -217,6 +230,7 @@ main: { // [1] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [1] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy jmp __b1 + .segment Data msg: .text "message 2 " .byte 0 } diff --git a/src/test/ref/localscope-loops.asm b/src/test/ref/localscope-loops.asm index 52c48dd74..2d7a6195d 100644 --- a/src/test/ref/localscope-loops.asm +++ b/src/test/ref/localscope-loops.asm @@ -1,8 +1,14 @@ // Illustrates introducing local scopes inside loops etc -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="localscope-loops.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/localscope-loops.log b/src/test/ref/localscope-loops.log index 811372729..065803e5d 100644 --- a/src/test/ref/localscope-loops.log +++ b/src/test/ref/localscope-loops.log @@ -172,11 +172,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Illustrates introducing local scopes inside loops etc // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="localscope-loops.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -263,11 +269,17 @@ Score: 316 // File Comments // Illustrates introducing local scopes inside loops etc // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="localscope-loops.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/localscope-simple.asm b/src/test/ref/localscope-simple.asm index 5cdfd1401..52ec078f4 100644 --- a/src/test/ref/localscope-simple.asm +++ b/src/test/ref/localscope-simple.asm @@ -1,8 +1,14 @@ // Tests anonymous scopes inside functions -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="localscope-simple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label BG_COLOR = $d021 +.segment Code main: { .const i = 0 .const i1 = 1 diff --git a/src/test/ref/localscope-simple.log b/src/test/ref/localscope-simple.log index c72178c63..0aebfccc8 100644 --- a/src/test/ref/localscope-simple.log +++ b/src/test/ref/localscope-simple.log @@ -71,11 +71,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests anonymous scopes inside functions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="localscope-simple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label BG_COLOR = $d021 +.segment Code // main main: { .const i = 0 @@ -114,11 +120,17 @@ Score: 18 // File Comments // Tests anonymous scopes inside functions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="localscope-simple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label BG_COLOR = $d021 +.segment Code // main main: { .const i = 0 diff --git a/src/test/ref/long-pointer-0.asm b/src/test/ref/long-pointer-0.asm index e4903bccc..d04445ac0 100644 --- a/src/test/ref/long-pointer-0.asm +++ b/src/test/ref/long-pointer-0.asm @@ -1,7 +1,13 @@ // Tests creating a long (32bit) pointer on zeropage for 45GS02 flat memory access -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="long-pointer-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const long_ptr_zp = main::@1#0] -- register_copy // [1] phi main::i#2 = main::i#1 [phi:main::@4->main::@1#1] -- register_copy jmp __b1 + .segment Data str: .text "hello brave new world" .byte 0 } @@ -305,10 +312,16 @@ Score: 651 // Illustrates both break & continue statements in a loop // Prints a message ending at NUL skipping all spaces // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-break-continue.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = 2 @@ -365,6 +378,7 @@ main: { // [1] phi main::screen#2 = main::screen#5 [phi:main::@4->main::@1#0] -- register_copy // [1] phi main::i#2 = main::i#1 [phi:main::@4->main::@1#1] -- register_copy jmp __b1 + .segment Data str: .text "hello brave new world" .byte 0 } diff --git a/src/test/ref/loop-break-nested.asm b/src/test/ref/loop-break-nested.asm index 5fa036bcd..ae5bb53eb 100644 --- a/src/test/ref/loop-break-nested.asm +++ b/src/test/ref/loop-break-nested.asm @@ -1,7 +1,13 @@ // Tests break statement in a simple loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-break-nested.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label line = 2 lda #<$400 diff --git a/src/test/ref/loop-break-nested.log b/src/test/ref/loop-break-nested.log index f4e803f86..500d783d8 100644 --- a/src/test/ref/loop-break-nested.log +++ b/src/test/ref/loop-break-nested.log @@ -220,10 +220,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests break statement in a simple loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-break-nested.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label line = 2 @@ -345,10 +351,16 @@ Score: 3056 // File Comments // Tests break statement in a simple loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-break-nested.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label line = 2 diff --git a/src/test/ref/loop-break.asm b/src/test/ref/loop-break.asm index d178802c0..42a5015c3 100644 --- a/src/test/ref/loop-break.asm +++ b/src/test/ref/loop-break.asm @@ -1,8 +1,14 @@ // Tests break statement in a simple loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-break.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/loop-break.log b/src/test/ref/loop-break.log index c00d31704..243d40099 100644 --- a/src/test/ref/loop-break.log +++ b/src/test/ref/loop-break.log @@ -136,11 +136,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests break statement in a simple loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-break.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -207,11 +213,17 @@ Score: 251 // File Comments // Tests break statement in a simple loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-break.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/loop-continue.asm b/src/test/ref/loop-continue.asm index e806bc642..112b1eb49 100644 --- a/src/test/ref/loop-continue.asm +++ b/src/test/ref/loop-continue.asm @@ -1,8 +1,14 @@ // Tests break statement in a simple loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-continue.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/loop-continue.log b/src/test/ref/loop-continue.log index 8fd585ad6..d965788a9 100644 --- a/src/test/ref/loop-continue.log +++ b/src/test/ref/loop-continue.log @@ -142,11 +142,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests break statement in a simple loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-continue.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -217,11 +223,17 @@ Score: 251 // File Comments // Tests break statement in a simple loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-continue.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/loop-for-continue.asm b/src/test/ref/loop-for-continue.asm index 89c8e0256..0740dc70a 100644 --- a/src/test/ref/loop-for-continue.asm +++ b/src/test/ref/loop-for-continue.asm @@ -1,8 +1,14 @@ // Tests continue statement in a simple for()-loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-for-continue.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldy #0 ldx #0 @@ -28,5 +34,6 @@ main: { inx jmp __b1 } +.segment Data MESSAGE: .text "hello brave new world!" .byte 0 diff --git a/src/test/ref/loop-for-continue.log b/src/test/ref/loop-for-continue.log index f42a8773e..5a7a96b4e 100644 --- a/src/test/ref/loop-for-continue.log +++ b/src/test/ref/loop-for-continue.log @@ -180,11 +180,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests continue statement in a simple for()-loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-for-continue.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -235,6 +241,7 @@ main: { jmp __b1 } // File Data +.segment Data MESSAGE: .text "hello brave new world!" .byte 0 @@ -276,11 +283,17 @@ Score: 391 // File Comments // Tests continue statement in a simple for()-loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-for-continue.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -327,6 +340,7 @@ main: { jmp __b1 } // File Data +.segment Data MESSAGE: .text "hello brave new world!" .byte 0 diff --git a/src/test/ref/loop-for-empty-body.asm b/src/test/ref/loop-for-empty-body.asm index 71ef140ea..1d1489dfb 100644 --- a/src/test/ref/loop-for-empty-body.asm +++ b/src/test/ref/loop-for-empty-body.asm @@ -1,8 +1,14 @@ // Test a for-loop with an empty body -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-for-empty-body.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: @@ -23,5 +29,6 @@ main: { inx jmp __b1 } +.segment Data str: .text "Hello!" .byte 0 diff --git a/src/test/ref/loop-for-empty-body.log b/src/test/ref/loop-for-empty-body.log index f8a297737..5d7239cd0 100644 --- a/src/test/ref/loop-for-empty-body.log +++ b/src/test/ref/loop-for-empty-body.log @@ -138,11 +138,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test a for-loop with an empty body // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-for-empty-body.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -180,6 +186,7 @@ main: { jmp __b1 } // File Data +.segment Data str: .text "Hello!" .byte 0 @@ -213,11 +220,17 @@ Score: 174 // File Comments // Test a for-loop with an empty body // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-for-empty-body.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -253,6 +266,7 @@ main: { jmp __b1 } // File Data +.segment Data str: .text "Hello!" .byte 0 diff --git a/src/test/ref/loop-for-sideeffect.asm b/src/test/ref/loop-for-sideeffect.asm index 843116832..034bf08ca 100644 --- a/src/test/ref/loop-for-sideeffect.asm +++ b/src/test/ref/loop-for-sideeffect.asm @@ -1,9 +1,15 @@ // Test a for()-loop where the condition has a side-effect // Currently not standard C compliant (since the condition is not evaluated before the body) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-for-sideeffect.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { lda #7 __b1: diff --git a/src/test/ref/loop-for-sideeffect.log b/src/test/ref/loop-for-sideeffect.log index 36fbab160..7fb9357f0 100644 --- a/src/test/ref/loop-for-sideeffect.log +++ b/src/test/ref/loop-for-sideeffect.log @@ -146,11 +146,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test a for()-loop where the condition has a side-effect // Currently not standard C compliant (since the condition is not evaluated before the body) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-for-sideeffect.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -222,11 +228,17 @@ Score: 238 // Test a for()-loop where the condition has a side-effect // Currently not standard C compliant (since the condition is not evaluated before the body) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-for-sideeffect.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/loop-memset-min.asm b/src/test/ref/loop-memset-min.asm index 4a59d04f8..57ed6063e 100644 --- a/src/test/ref/loop-memset-min.asm +++ b/src/test/ref/loop-memset-min.asm @@ -1,8 +1,14 @@ // Minimal classic for() loop - coded using while() to test optimization of loop heads -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-memset-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // memset(SCREEN, 'c', 1000) jsr memset diff --git a/src/test/ref/loop-memset-min.log b/src/test/ref/loop-memset-min.log index 98badef2c..b17325967 100644 --- a/src/test/ref/loop-memset-min.log +++ b/src/test/ref/loop-memset-min.log @@ -264,11 +264,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal classic for() loop - coded using while() to test optimization of loop heads // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-memset-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] call memset @@ -367,11 +373,17 @@ Score: 523 // File Comments // Minimal classic for() loop - coded using while() to test optimization of loop heads // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-memset-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // memset(SCREEN, 'c', 1000) diff --git a/src/test/ref/loop-problem.asm b/src/test/ref/loop-problem.asm index cfffd8c56..13e08e48b 100644 --- a/src/test/ref/loop-problem.asm +++ b/src/test/ref/loop-problem.asm @@ -1,8 +1,14 @@ // A simple loop results in NullPointerException during loop analysis -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // *SCREEN = '0' lda #'0' diff --git a/src/test/ref/loop-problem.log b/src/test/ref/loop-problem.log index b94a1e13d..3e9322d36 100644 --- a/src/test/ref/loop-problem.log +++ b/src/test/ref/loop-problem.log @@ -184,11 +184,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // A simple loop results in NullPointerException during loop analysis // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = '0' -- _deref_pbuc1=vbuc2 @@ -293,11 +299,17 @@ Score: 187 // File Comments // A simple loop results in NullPointerException during loop analysis // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // *SCREEN = '0' diff --git a/src/test/ref/loop-problem2.asm b/src/test/ref/loop-problem2.asm index c0eddfdcb..b0e947353 100644 --- a/src/test/ref/loop-problem2.asm +++ b/src/test/ref/loop-problem2.asm @@ -1,8 +1,14 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-problem2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label BORDER_COLOR = $d020 .label SCREEN = $400 +.segment Code main: { // print_cls() jsr print_cls diff --git a/src/test/ref/loop-problem2.log b/src/test/ref/loop-problem2.log index dc7896192..07508a506 100644 --- a/src/test/ref/loop-problem2.log +++ b/src/test/ref/loop-problem2.log @@ -228,12 +228,18 @@ Uplifting [] best 920 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-problem2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label BORDER_COLOR = $d020 .label SCREEN = $400 +.segment Code // main main: { // [1] call print_cls @@ -363,12 +369,18 @@ Score: 794 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-problem2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label BORDER_COLOR = $d020 .label SCREEN = $400 +.segment Code // main main: { // print_cls() diff --git a/src/test/ref/loop-problem3.asm b/src/test/ref/loop-problem3.asm index 42630e2ca..e7fcbf9b7 100644 --- a/src/test/ref/loop-problem3.asm +++ b/src/test/ref/loop-problem3.asm @@ -1,7 +1,13 @@ // A loop that compiles to a wrong sequence - skipping the initilization -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-problem3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label sc = 2 __b3: diff --git a/src/test/ref/loop-problem3.log b/src/test/ref/loop-problem3.log index 5132e05ab..d8f42ba3f 100644 --- a/src/test/ref/loop-problem3.log +++ b/src/test/ref/loop-problem3.log @@ -119,10 +119,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // A loop that compiles to a wrong sequence - skipping the initilization // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-problem3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label sc = 2 @@ -195,10 +201,16 @@ Score: 3650 // File Comments // A loop that compiles to a wrong sequence - skipping the initilization // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-problem3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label sc = 2 diff --git a/src/test/ref/loop-while-continue.asm b/src/test/ref/loop-while-continue.asm index 151a504a9..f59e56ef1 100644 --- a/src/test/ref/loop-while-continue.asm +++ b/src/test/ref/loop-while-continue.asm @@ -1,8 +1,14 @@ // Tests break statement in a simple loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-while-continue.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/loop-while-continue.log b/src/test/ref/loop-while-continue.log index 0f6b13943..08f38090e 100644 --- a/src/test/ref/loop-while-continue.log +++ b/src/test/ref/loop-while-continue.log @@ -138,11 +138,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests break statement in a simple loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-while-continue.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -215,11 +221,17 @@ Score: 1856 // File Comments // Tests break statement in a simple loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-while-continue.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/loop-while-min.asm b/src/test/ref/loop-while-min.asm index 620f4dd4e..46a4794e6 100644 --- a/src/test/ref/loop-while-min.asm +++ b/src/test/ref/loop-while-min.asm @@ -1,8 +1,14 @@ // Minimal classic while() loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-while-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/loop-while-min.log b/src/test/ref/loop-while-min.log index dfd1075bd..6bce88387 100644 --- a/src/test/ref/loop-while-min.log +++ b/src/test/ref/loop-while-min.log @@ -120,11 +120,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal classic while() loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-while-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -181,11 +187,17 @@ Score: 191 // File Comments // Minimal classic while() loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-while-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/loop-while-sideeffect.asm b/src/test/ref/loop-while-sideeffect.asm index 48030be13..546a464ef 100644 --- a/src/test/ref/loop-while-sideeffect.asm +++ b/src/test/ref/loop-while-sideeffect.asm @@ -1,8 +1,14 @@ // Test a while()-loop where the condition has a side-effect -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-while-sideeffect.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { lda #7 __b1: diff --git a/src/test/ref/loop-while-sideeffect.log b/src/test/ref/loop-while-sideeffect.log index c211d6e2e..1a16124e9 100644 --- a/src/test/ref/loop-while-sideeffect.log +++ b/src/test/ref/loop-while-sideeffect.log @@ -135,11 +135,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test a while()-loop where the condition has a side-effect // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-while-sideeffect.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -210,11 +216,17 @@ Score: 238 // File Comments // Test a while()-loop where the condition has a side-effect // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop-while-sideeffect.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/loop100.asm b/src/test/ref/loop100.asm index fd12577da..70be07749 100644 --- a/src/test/ref/loop100.asm +++ b/src/test/ref/loop100.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop100.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/loop100.log b/src/test/ref/loop100.log index 3eb540c49..36e5e5092 100644 --- a/src/test/ref/loop100.log +++ b/src/test/ref/loop100.log @@ -108,10 +108,16 @@ Uplifting [] best 181 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop100.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -163,10 +169,16 @@ Score: 121 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loop100.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/loophead-problem-2.asm b/src/test/ref/loophead-problem-2.asm index 75b18b218..d10c205eb 100644 --- a/src/test/ref/loophead-problem-2.asm +++ b/src/test/ref/loophead-problem-2.asm @@ -1,9 +1,15 @@ // Call returns wrong value // Reported by Clay Cowgill as an NPE (which has been fixed - but this return-value problem has popped up instead) // Caused by constant loop head unroll -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loophead-problem-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 // scan_for_lowest() @@ -67,4 +73,5 @@ scan_for_lowest: { iny jmp __b1 } +.segment Data ball_y: .word $32, $64, -$c8, $c, -$64, $4b, 0, -$79 diff --git a/src/test/ref/loophead-problem-2.log b/src/test/ref/loophead-problem-2.log index e3318fb50..ad863a8d2 100644 --- a/src/test/ref/loophead-problem-2.log +++ b/src/test/ref/loophead-problem-2.log @@ -361,10 +361,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Reported by Clay Cowgill as an NPE (which has been fixed - but this return-value problem has popped up instead) // Caused by constant loop head unroll // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loophead-problem-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -467,6 +473,7 @@ scan_for_lowest: { jmp __b1 } // File Data +.segment Data ball_y: .word $32, $64, -$c8, $c, -$64, $4b, 0, -$79 ASSEMBLER OPTIMIZATIONS @@ -534,10 +541,16 @@ Score: 770 // Reported by Clay Cowgill as an NPE (which has been fixed - but this return-value problem has popped up instead) // Caused by constant loop head unroll // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loophead-problem-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -640,5 +653,6 @@ scan_for_lowest: { jmp __b1 } // File Data +.segment Data ball_y: .word $32, $64, -$c8, $c, -$64, $4b, 0, -$79 diff --git a/src/test/ref/loophead-problem-3.asm b/src/test/ref/loophead-problem-3.asm index 3e8f80467..71d66aacb 100644 --- a/src/test/ref/loophead-problem-3.asm +++ b/src/test/ref/loophead-problem-3.asm @@ -1,10 +1,16 @@ // Program where loop-head optimization produces wrong return value // Reported by Richard-William Loerakker -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loophead-problem-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label BORDER_COLOR = $d020 .label BG_COLOR = $d021 +.segment Code main: { .label result = 2 .label kaputt = $a diff --git a/src/test/ref/loophead-problem-3.log b/src/test/ref/loophead-problem-3.log index f6f83e472..e958214a6 100644 --- a/src/test/ref/loophead-problem-3.log +++ b/src/test/ref/loophead-problem-3.log @@ -371,12 +371,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Program where loop-head optimization produces wrong return value // Reported by Richard-William Loerakker // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loophead-problem-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label BORDER_COLOR = $d020 .label BG_COLOR = $d021 +.segment Code // main main: { .label result = 2 @@ -569,12 +575,18 @@ Score: 1414 // Program where loop-head optimization produces wrong return value // Reported by Richard-William Loerakker // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loophead-problem-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label BORDER_COLOR = $d020 .label BG_COLOR = $d021 +.segment Code // main main: { .label result = 2 diff --git a/src/test/ref/loophead-problem.asm b/src/test/ref/loophead-problem.asm index fac3594c5..af127cbd3 100644 --- a/src/test/ref/loophead-problem.asm +++ b/src/test/ref/loophead-problem.asm @@ -2,10 +2,16 @@ // The result is a NullPointerException // The cause is that the Unroller does not handle the variable opcode correctly. // The Unroller gets the verwions for opcode wrong because it misses the fact that it is modified inside call to popup_selector() -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loophead-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = $400 +.segment Code // Offending unroll variable main: { // screen[40] = opcode diff --git a/src/test/ref/loophead-problem.log b/src/test/ref/loophead-problem.log index 43128327a..311d3ecde 100644 --- a/src/test/ref/loophead-problem.log +++ b/src/test/ref/loophead-problem.log @@ -230,11 +230,17 @@ ASSEMBLER BEFORE OPTIMIZATION // The cause is that the Unroller does not handle the variable opcode correctly. // The Unroller gets the verwions for opcode wrong because it misses the fact that it is modified inside call to popup_selector() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loophead-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main // Offending unroll variable main: { @@ -330,11 +336,17 @@ Score: 233 // The cause is that the Unroller does not handle the variable opcode correctly. // The Unroller gets the verwions for opcode wrong because it misses the fact that it is modified inside call to popup_selector() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loophead-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main // Offending unroll variable main: { diff --git a/src/test/ref/loophead-trivial-1.asm b/src/test/ref/loophead-trivial-1.asm index 40e15ecf6..f35b2c17c 100644 --- a/src/test/ref/loophead-trivial-1.asm +++ b/src/test/ref/loophead-trivial-1.asm @@ -1,10 +1,16 @@ // Test a trivial loop head constant // For trivially constant loop heads for(;;) loops can be written to run body before comparison // The simplest possible for-loop with a constant loop head. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loophead-trivial-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/loophead-trivial-1.log b/src/test/ref/loophead-trivial-1.log index c75e2280a..79c61548d 100644 --- a/src/test/ref/loophead-trivial-1.log +++ b/src/test/ref/loophead-trivial-1.log @@ -118,11 +118,17 @@ ASSEMBLER BEFORE OPTIMIZATION // For trivially constant loop heads for(;;) loops can be written to run body before comparison // The simplest possible for-loop with a constant loop head. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loophead-trivial-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -181,11 +187,17 @@ Score: 191 // For trivially constant loop heads for(;;) loops can be written to run body before comparison // The simplest possible for-loop with a constant loop head. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loophead-trivial-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/loopmin.asm b/src/test/ref/loopmin.asm index 6a51da9e1..8c8ddaaff 100644 --- a/src/test/ref/loopmin.asm +++ b/src/test/ref/loopmin.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { lda #0 ldx #$a diff --git a/src/test/ref/loopmin.log b/src/test/ref/loopmin.log index 6a831e3bb..43dd84b30 100644 --- a/src/test/ref/loopmin.log +++ b/src/test/ref/loopmin.log @@ -176,10 +176,16 @@ Uplifting [] best 386 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -264,10 +270,16 @@ Score: 236 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopmin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/loopnest.asm b/src/test/ref/loopnest.asm index 4a552bd98..e75a1b5c9 100644 --- a/src/test/ref/loopnest.asm +++ b/src/test/ref/loopnest.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopnest.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldy #$64 __b1: diff --git a/src/test/ref/loopnest.log b/src/test/ref/loopnest.log index d8c4e722d..d2d7ad001 100644 --- a/src/test/ref/loopnest.log +++ b/src/test/ref/loopnest.log @@ -179,11 +179,17 @@ Uplifting [] best 2346 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopnest.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -286,11 +292,17 @@ Score: 1353 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopnest.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/loopnest2.asm b/src/test/ref/loopnest2.asm index 3c99cea31..5b553a018 100644 --- a/src/test/ref/loopnest2.asm +++ b/src/test/ref/loopnest2.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopnest2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label j = 3 .label i = 2 diff --git a/src/test/ref/loopnest2.log b/src/test/ref/loopnest2.log index d38bc9a0b..3a89e63c1 100644 --- a/src/test/ref/loopnest2.log +++ b/src/test/ref/loopnest2.log @@ -387,11 +387,17 @@ Uplifting [main] best 23472231 combination zp[1]:2 [ main::i#5 main::i#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopnest2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label j = 3 @@ -637,11 +643,17 @@ Score: 13472235 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopnest2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label j = 3 diff --git a/src/test/ref/loopnest3.asm b/src/test/ref/loopnest3.asm index 6bfa88305..8e8eff7ac 100644 --- a/src/test/ref/loopnest3.asm +++ b/src/test/ref/loopnest3.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopnest3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { lda #0 __b1: diff --git a/src/test/ref/loopnest3.log b/src/test/ref/loopnest3.log index bd4cc68b7..b506c54c5 100644 --- a/src/test/ref/loopnest3.log +++ b/src/test/ref/loopnest3.log @@ -232,11 +232,17 @@ Uplifting [] best 2562 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopnest3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -363,11 +369,17 @@ Score: 1539 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopnest3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/loopsplit.asm b/src/test/ref/loopsplit.asm index 249b16893..1e781d91f 100644 --- a/src/test/ref/loopsplit.asm +++ b/src/test/ref/loopsplit.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopsplit.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldy #0 diff --git a/src/test/ref/loopsplit.log b/src/test/ref/loopsplit.log index 046285d7f..b97545a6c 100644 --- a/src/test/ref/loopsplit.log +++ b/src/test/ref/loopsplit.log @@ -180,10 +180,16 @@ Uplifting [] best 353 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopsplit.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -276,10 +282,16 @@ Score: 260 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="loopsplit.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/ma_coalesce_problem.asm b/src/test/ref/ma_coalesce_problem.asm index 0eeb6d1e4..94629a2e4 100644 --- a/src/test/ref/ma_coalesce_problem.asm +++ b/src/test/ref/ma_coalesce_problem.asm @@ -1,9 +1,15 @@ // Demonstrates problem with __ma coalescing // c1a is erroneously zp-coalesced with c1A -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ma_coalesce_problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { __b1: // c1a = c1A @@ -35,6 +41,7 @@ main: { // for (char i = 0; i < 40; ++i) inc i jmp __b2 + .segment Data c1a: .byte 0 i: .byte 0 } diff --git a/src/test/ref/ma_coalesce_problem.log b/src/test/ref/ma_coalesce_problem.log index 2f53d5f96..a2a8a5d54 100644 --- a/src/test/ref/ma_coalesce_problem.log +++ b/src/test/ref/ma_coalesce_problem.log @@ -158,11 +158,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Demonstrates problem with __ma coalescing // c1a is erroneously zp-coalesced with c1A // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ma_coalesce_problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { jmp __b1 @@ -203,6 +209,7 @@ main: { // [7] main::i = ++ main::i -- vbum1=_inc_vbum1 inc i jmp __b2 + .segment Data c1a: .byte 0 i: .byte 0 } @@ -245,11 +252,17 @@ Score: 4770 // Demonstrates problem with __ma coalescing // c1a is erroneously zp-coalesced with c1A // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ma_coalesce_problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // main::@1 @@ -293,6 +306,7 @@ main: { // [7] main::i = ++ main::i -- vbum1=_inc_vbum1 inc i jmp __b2 + .segment Data c1a: .byte 0 i: .byte 0 } diff --git a/src/test/ref/malloc-0.asm b/src/test/ref/malloc-0.asm index 30f02ca49..cddd0c547 100644 --- a/src/test/ref/malloc-0.asm +++ b/src/test/ref/malloc-0.asm @@ -1,10 +1,16 @@ // Experiments with malloc() - a byte array -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="malloc-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Top of the heap used by malloc() .label HEAP_TOP = $a000 .label BYTES = malloc.return +.segment Code __start: { // malloc(0x100) jsr malloc diff --git a/src/test/ref/malloc-0.log b/src/test/ref/malloc-0.log index 2860c5ab9..aa40d8037 100644 --- a/src/test/ref/malloc-0.log +++ b/src/test/ref/malloc-0.log @@ -283,13 +283,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Experiments with malloc() - a byte array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="malloc-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Top of the heap used by malloc() .label HEAP_TOP = $a000 .label BYTES = malloc.return +.segment Code // __start __start: { // [1] phi from __start to __start::__init1 [phi:__start->__start::__init1] @@ -414,13 +420,19 @@ Score: 185 // File Comments // Experiments with malloc() - a byte array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="malloc-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // Top of the heap used by malloc() .label HEAP_TOP = $a000 .label BYTES = malloc.return +.segment Code // __start __start: { // [1] phi from __start to __start::__init1 [phi:__start->__start::__init1] diff --git a/src/test/ref/malloc-1.asm b/src/test/ref/malloc-1.asm index 3427eccfe..d507ed206 100644 --- a/src/test/ref/malloc-1.asm +++ b/src/test/ref/malloc-1.asm @@ -1,11 +1,17 @@ // Experiments with malloc() - a word array -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="malloc-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const SIZEOF_WORD = 2 // Top of the heap used by malloc() .label HEAP_TOP = $a000 .label WORDS = malloc.return +.segment Code __start: { // malloc(0x200) jsr malloc diff --git a/src/test/ref/malloc-1.log b/src/test/ref/malloc-1.log index b1dbd60f0..78de01b0c 100644 --- a/src/test/ref/malloc-1.log +++ b/src/test/ref/malloc-1.log @@ -309,14 +309,20 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Experiments with malloc() - a word array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="malloc-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 // Top of the heap used by malloc() .label HEAP_TOP = $a000 .label WORDS = malloc.return +.segment Code // __start __start: { // [1] phi from __start to __start::__init1 [phi:__start->__start::__init1] @@ -465,14 +471,20 @@ Score: 590 // File Comments // Experiments with malloc() - a word array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="malloc-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 // Top of the heap used by malloc() .label HEAP_TOP = $a000 .label WORDS = malloc.return +.segment Code // __start __start: { // [1] phi from __start to __start::__init1 [phi:__start->__start::__init1] diff --git a/src/test/ref/mem-alignment.asm b/src/test/ref/mem-alignment.asm index fde9eae7f..40257a0d6 100644 --- a/src/test/ref/mem-alignment.asm +++ b/src/test/ref/mem-alignment.asm @@ -1,7 +1,13 @@ // Test that memory alignment of arrays work -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="mem-alignment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { ldx #0 __b1: @@ -26,6 +32,7 @@ main: { bne __b2 // } rts + .segment Data .align $100 cs: .fill $100, 0 } diff --git a/src/test/ref/mem-alignment.log b/src/test/ref/mem-alignment.log index 787517560..63e73e101 100644 --- a/src/test/ref/mem-alignment.log +++ b/src/test/ref/mem-alignment.log @@ -181,10 +181,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test that memory alignment of arrays work // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="mem-alignment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -235,6 +241,7 @@ main: { __breturn: // [10] return rts + .segment Data .align $100 cs: .fill $100, 0 } @@ -285,10 +292,16 @@ Score: 381 // File Comments // Test that memory alignment of arrays work // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="mem-alignment.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -335,6 +348,7 @@ main: { // } // [10] return rts + .segment Data .align $100 cs: .fill $100, 0 } diff --git a/src/test/ref/memcpy-0.asm b/src/test/ref/memcpy-0.asm index 0ba85c063..6f39f351d 100644 --- a/src/test/ref/memcpy-0.asm +++ b/src/test/ref/memcpy-0.asm @@ -1,7 +1,12 @@ // Test memcpy - copy charset and screen using memcpy() from stdlib string -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="memcpy-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // RAM in 0xA000, 0xE000 CHAR ROM in 0xD000 .const PROCPORT_RAM_CHARROM = 1 // BASIC in 0xA000, I/O in 0xD000, KERNEL in 0xE000 @@ -14,6 +19,7 @@ .label CHARSET = $2000 .label SCREEN = $400 .label SCREEN_COPY = $2400 +.segment Code main: { .const toD0181_return = (>(SCREEN_COPY&$3fff)*4)|(>CHARSET)/4&$f // *D018 = toD018(SCREEN_COPY, CHARSET) diff --git a/src/test/ref/memcpy-0.log b/src/test/ref/memcpy-0.log index 9a5d64f8a..b308ccaba 100644 --- a/src/test/ref/memcpy-0.log +++ b/src/test/ref/memcpy-0.log @@ -446,9 +446,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test memcpy - copy charset and screen using memcpy() from stdlib string // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="memcpy-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // RAM in 0xA000, 0xE000 CHAR ROM in 0xD000 .const PROCPORT_RAM_CHARROM = 1 @@ -462,6 +467,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label CHARSET = $2000 .label SCREEN = $400 .label SCREEN_COPY = $2400 +.segment Code // main main: { .const toD0181_return = (>(SCREEN_COPY&$3fff)*4)|(>CHARSET)/4&$f @@ -668,9 +674,14 @@ Score: 711 // File Comments // Test memcpy - copy charset and screen using memcpy() from stdlib string // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="memcpy-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // RAM in 0xA000, 0xE000 CHAR ROM in 0xD000 .const PROCPORT_RAM_CHARROM = 1 @@ -684,6 +695,7 @@ Score: 711 .label CHARSET = $2000 .label SCREEN = $400 .label SCREEN_COPY = $2400 +.segment Code // main main: { .const toD0181_return = (>(SCREEN_COPY&$3fff)*4)|(>CHARSET)/4&$f diff --git a/src/test/ref/memcpy-1.asm b/src/test/ref/memcpy-1.asm index 00bd5d7d9..57e395387 100644 --- a/src/test/ref/memcpy-1.asm +++ b/src/test/ref/memcpy-1.asm @@ -1,8 +1,14 @@ // Test memcpy on strings ( -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="memcpy-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // Working memory copy of string .label sc = 4 @@ -93,11 +99,13 @@ main: { jsr memcpy // } rts + .segment Data __5: .text "rules" .byte 0 reigns_1: .text "reigns" .byte 0 } +.segment Code // Copy block of memory (forwards) // Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. // memcpy(void* zp($c) destination, void* zp($a) source, word zp($e) num) @@ -142,5 +150,6 @@ memcpy: { !: jmp __b1 } +.segment Data CAMELOT: .text "camelot" .byte 0 diff --git a/src/test/ref/memcpy-1.log b/src/test/ref/memcpy-1.log index 2905dd925..3df56256c 100644 --- a/src/test/ref/memcpy-1.log +++ b/src/test/ref/memcpy-1.log @@ -502,11 +502,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test memcpy on strings ( // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="memcpy-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // Working memory copy of string @@ -653,11 +659,13 @@ main: { __breturn: // [17] return rts + .segment Data __5: .text "rules" .byte 0 reigns_1: .text "reigns" .byte 0 } +.segment Code // memcpy // Copy block of memory (forwards) // Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. @@ -719,6 +727,7 @@ memcpy: { jmp __b1_from___b2 } // File Data +.segment Data CAMELOT: .text "camelot" .byte 0 @@ -818,11 +827,17 @@ Score: 2029 // File Comments // Test memcpy on strings ( // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="memcpy-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // Working memory copy of string @@ -958,11 +973,13 @@ main: { // } // [17] return rts + .segment Data __5: .text "rules" .byte 0 reigns_1: .text "reigns" .byte 0 } +.segment Code // memcpy // Copy block of memory (forwards) // Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. @@ -1023,6 +1040,7 @@ memcpy: { jmp __b1 } // File Data +.segment Data CAMELOT: .text "camelot" .byte 0 diff --git a/src/test/ref/memory-heap.asm b/src/test/ref/memory-heap.asm index 726d5f638..591cff5e8 100644 --- a/src/test/ref/memory-heap.asm +++ b/src/test/ref/memory-heap.asm @@ -1,11 +1,17 @@ // Experiments with malloc() -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="memory-heap.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Top of the heap used by malloc() .label HEAP_TOP = $a000 // Head of the heap. Moved backward each malloc() .label heap_head = 2 +.segment Code main: { .label screen = $400 .label buf1 = 4 diff --git a/src/test/ref/memory-heap.log b/src/test/ref/memory-heap.log index e8a1fb64b..e985a3552 100644 --- a/src/test/ref/memory-heap.log +++ b/src/test/ref/memory-heap.log @@ -436,14 +436,20 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Experiments with malloc() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="memory-heap.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Top of the heap used by malloc() .label HEAP_TOP = $a000 // Head of the heap. Moved backward each malloc() .label heap_head = 2 +.segment Code // main main: { .label screen = $400 @@ -607,14 +613,20 @@ Score: 401 // File Comments // Experiments with malloc() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="memory-heap.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Top of the heap used by malloc() .label HEAP_TOP = $a000 // Head of the heap. Moved backward each malloc() .label heap_head = 2 +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/millfork-benchmarks/linkedlist-kc.asm b/src/test/ref/millfork-benchmarks/linkedlist-kc.asm index 23cb5d688..9dd6c64ee 100644 --- a/src/test/ref/millfork-benchmarks/linkedlist-kc.asm +++ b/src/test/ref/millfork-benchmarks/linkedlist-kc.asm @@ -1,8 +1,13 @@ // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="linkedlist-kc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const OFFSET_STRUCT_NODE_VALUE = 2 .label print_screen = $400 .label last_time = $a @@ -12,6 +17,7 @@ .label print_char_cursor = 6 .label free_ = 4 .label root = 2 +.segment Code __start: { // last_time lda #<0 @@ -276,5 +282,6 @@ print_uchar: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" heap: .fill 4*$fa0, 0 diff --git a/src/test/ref/millfork-benchmarks/linkedlist-kc.log b/src/test/ref/millfork-benchmarks/linkedlist-kc.log index 7e0d3bcc4..00fddf266 100644 --- a/src/test/ref/millfork-benchmarks/linkedlist-kc.log +++ b/src/test/ref/millfork-benchmarks/linkedlist-kc.log @@ -1494,9 +1494,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="linkedlist-kc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_NODE_VALUE = 2 .label print_screen = $400 @@ -1507,6 +1512,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label print_char_cursor = 6 .label free_ = 4 .label root = 2 +.segment Code // __start __start: { jmp __init1 @@ -1950,6 +1956,7 @@ print_uchar: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" heap: .fill 4*$fa0, 0 @@ -2144,9 +2151,14 @@ Score: 14167 // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="linkedlist-kc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_NODE_VALUE = 2 .label print_screen = $400 @@ -2157,6 +2169,7 @@ Score: 14167 .label print_char_cursor = 6 .label free_ = 4 .label root = 2 +.segment Code // __start __start: { // __start::__init1 @@ -2566,6 +2579,7 @@ print_uchar: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" heap: .fill 4*$fa0, 0 diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.asm b/src/test/ref/millfork-benchmarks/plasma-kc.asm index b228f2796..2f622d2fb 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.asm +++ b/src/test/ref/millfork-benchmarks/plasma-kc.asm @@ -1,8 +1,13 @@ // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="plasma-kc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const PAGE1 = SCREEN1>>6&$f0|CHARSET>>$a&$e .const PAGE2 = SCREEN2>>6&$f0|CHARSET>>$a&$e .label VIC_MEMORY = $d018 @@ -19,6 +24,7 @@ .label Ticks = $14 .label Ticks_1 = $16 .label print_char_cursor = $11 +.segment Code __start: { // last_time lda #<0 @@ -485,6 +491,7 @@ print_char: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" .align $100 sinetable: .byte $80, $7d, $7a, $77, $74, $70, $6d, $6a, $67, $64, $61, $5e, $5b, $58, $55, $52, $4f, $4d, $4a, $47, $44, $41, $3f, $3c, $39, $37, $34, $32, $2f, $2d, $2b, $28, $26, $24, $22, $20, $1e, $1c, $1a, $18, $16, $15, $13, $11, $10, $f, $d, $c, $b, $a, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, $a, $b, $c, $d, $f, $10, $11, $13, $15, $16, $18, $1a, $1c, $1e, $20, $22, $24, $26, $28, $2b, $2d, $2f, $32, $34, $37, $39, $3c, $3f, $41, $44, $47, $4a, $4d, $4f, $52, $55, $58, $5b, $5e, $61, $64, $67, $6a, $6d, $70, $74, $77, $7a, $7d, $80, $83, $86, $89, $8c, $90, $93, $96, $99, $9c, $9f, $a2, $a5, $a8, $ab, $ae, $b1, $b3, $b6, $b9, $bc, $bf, $c1, $c4, $c7, $c9, $cc, $ce, $d1, $d3, $d5, $d8, $da, $dc, $de, $e0, $e2, $e4, $e6, $e8, $ea, $eb, $ed, $ef, $f0, $f1, $f3, $f4, $f5, $f6, $f8, $f9, $fa, $fa, $fb, $fc, $fd, $fd, $fe, $fe, $fe, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $fe, $fe, $fe, $fd, $fd, $fc, $fb, $fa, $fa, $f9, $f8, $f6, $f5, $f4, $f3, $f1, $f0, $ef, $ed, $eb, $ea, $e8, $e6, $e4, $e2, $e0, $de, $dc, $da, $d8, $d5, $d3, $d1, $ce, $cc, $c9, $c7, $c4, $c1, $bf, $bc, $b9, $b6, $b3, $b1, $ae, $ab, $a8, $a5, $a2, $9f, $9c, $99, $96, $93, $90, $8c, $89, $86, $83 diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.log b/src/test/ref/millfork-benchmarks/plasma-kc.log index a8a6bdc7e..b51e7f8d3 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.log +++ b/src/test/ref/millfork-benchmarks/plasma-kc.log @@ -2269,9 +2269,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="plasma-kc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const PAGE1 = SCREEN1>>6&$f0|CHARSET>>$a&$e .const PAGE2 = SCREEN2>>6&$f0|CHARSET>>$a&$e @@ -2289,6 +2294,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label Ticks = $14 .label Ticks_1 = $16 .label print_char_cursor = $11 +.segment Code // __start __start: { jmp __init1 @@ -3006,6 +3012,7 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" .align $100 sinetable: .byte $80, $7d, $7a, $77, $74, $70, $6d, $6a, $67, $64, $61, $5e, $5b, $58, $55, $52, $4f, $4d, $4a, $47, $44, $41, $3f, $3c, $39, $37, $34, $32, $2f, $2d, $2b, $28, $26, $24, $22, $20, $1e, $1c, $1a, $18, $16, $15, $13, $11, $10, $f, $d, $c, $b, $a, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, $a, $b, $c, $d, $f, $10, $11, $13, $15, $16, $18, $1a, $1c, $1e, $20, $22, $24, $26, $28, $2b, $2d, $2f, $32, $34, $37, $39, $3c, $3f, $41, $44, $47, $4a, $4d, $4f, $52, $55, $58, $5b, $5e, $61, $64, $67, $6a, $6d, $70, $74, $77, $7a, $7d, $80, $83, $86, $89, $8c, $90, $93, $96, $99, $9c, $9f, $a2, $a5, $a8, $ab, $ae, $b1, $b3, $b6, $b9, $bc, $bf, $c1, $c4, $c7, $c9, $cc, $ce, $d1, $d3, $d5, $d8, $da, $dc, $de, $e0, $e2, $e4, $e6, $e8, $ea, $eb, $ed, $ef, $f0, $f1, $f3, $f4, $f5, $f6, $f8, $f9, $fa, $fa, $fb, $fc, $fd, $fd, $fe, $fe, $fe, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $fe, $fe, $fe, $fd, $fd, $fc, $fb, $fa, $fa, $f9, $f8, $f6, $f5, $f4, $f3, $f1, $f0, $ef, $ed, $eb, $ea, $e8, $e6, $e4, $e2, $e0, $de, $dc, $da, $d8, $d5, $d3, $d1, $ce, $cc, $c9, $c7, $c4, $c1, $bf, $bc, $b9, $b6, $b3, $b1, $ae, $ab, $a8, $a5, $a2, $9f, $9c, $99, $96, $93, $90, $8c, $89, $86, $83 @@ -3307,9 +3314,14 @@ Score: 102109 // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="plasma-kc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const PAGE1 = SCREEN1>>6&$f0|CHARSET>>$a&$e .const PAGE2 = SCREEN2>>6&$f0|CHARSET>>$a&$e @@ -3327,6 +3339,7 @@ Score: 102109 .label Ticks = $14 .label Ticks_1 = $16 .label print_char_cursor = $11 +.segment Code // __start __start: { // __start::__init1 @@ -4022,6 +4035,7 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" .align $100 sinetable: .byte $80, $7d, $7a, $77, $74, $70, $6d, $6a, $67, $64, $61, $5e, $5b, $58, $55, $52, $4f, $4d, $4a, $47, $44, $41, $3f, $3c, $39, $37, $34, $32, $2f, $2d, $2b, $28, $26, $24, $22, $20, $1e, $1c, $1a, $18, $16, $15, $13, $11, $10, $f, $d, $c, $b, $a, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, $a, $b, $c, $d, $f, $10, $11, $13, $15, $16, $18, $1a, $1c, $1e, $20, $22, $24, $26, $28, $2b, $2d, $2f, $32, $34, $37, $39, $3c, $3f, $41, $44, $47, $4a, $4d, $4f, $52, $55, $58, $5b, $5e, $61, $64, $67, $6a, $6d, $70, $74, $77, $7a, $7d, $80, $83, $86, $89, $8c, $90, $93, $96, $99, $9c, $9f, $a2, $a5, $a8, $ab, $ae, $b1, $b3, $b6, $b9, $bc, $bf, $c1, $c4, $c7, $c9, $cc, $ce, $d1, $d3, $d5, $d8, $da, $dc, $de, $e0, $e2, $e4, $e6, $e8, $ea, $eb, $ed, $ef, $f0, $f1, $f3, $f4, $f5, $f6, $f8, $f9, $fa, $fa, $fb, $fc, $fd, $fd, $fe, $fe, $fe, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $fe, $fe, $fe, $fd, $fd, $fc, $fb, $fa, $fa, $f9, $f8, $f6, $f5, $f4, $f3, $f1, $f0, $ef, $ed, $eb, $ea, $e8, $e6, $e4, $e2, $e0, $de, $dc, $da, $d8, $d5, $d3, $d1, $ce, $cc, $c9, $c7, $c4, $c1, $bf, $bc, $b9, $b6, $b3, $b1, $ae, $ab, $a8, $a5, $a2, $9f, $9c, $99, $96, $93, $90, $8c, $89, $86, $83 diff --git a/src/test/ref/millfork-benchmarks/romsum-kc.asm b/src/test/ref/millfork-benchmarks/romsum-kc.asm index 600a5cb85..b16afced6 100644 --- a/src/test/ref/millfork-benchmarks/romsum-kc.asm +++ b/src/test/ref/millfork-benchmarks/romsum-kc.asm @@ -1,8 +1,13 @@ // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="romsum-kc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label rom = $e000 .label print_screen = $400 .label last_time = 9 @@ -10,6 +15,7 @@ .label print_line_cursor = 2 .label Ticks = $b .label Ticks_1 = $d +.segment Code __start: { // last_time lda #<0 @@ -382,6 +388,7 @@ print_char: { // } rts } +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/millfork-benchmarks/romsum-kc.log b/src/test/ref/millfork-benchmarks/romsum-kc.log index 2b51f65ec..b80187666 100644 --- a/src/test/ref/millfork-benchmarks/romsum-kc.log +++ b/src/test/ref/millfork-benchmarks/romsum-kc.log @@ -2048,9 +2048,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="romsum-kc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label rom = $e000 .label print_screen = $400 @@ -2059,6 +2064,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label print_line_cursor = 2 .label Ticks = $b .label Ticks_1 = $d +.segment Code // __start __start: { jmp __init1 @@ -2696,6 +2702,7 @@ print_char: { rts } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits @@ -2973,9 +2980,14 @@ Score: 99336 // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="romsum-kc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label rom = $e000 .label print_screen = $400 @@ -2984,6 +2996,7 @@ Score: 99336 .label print_line_cursor = 2 .label Ticks = $b .label Ticks_1 = $d +.segment Code // __start __start: { // __start::__init1 @@ -3579,6 +3592,7 @@ print_char: { rts } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/millfork-benchmarks/sieve-kc.asm b/src/test/ref/millfork-benchmarks/sieve-kc.asm index e5564cdee..cd99ded1a 100644 --- a/src/test/ref/millfork-benchmarks/sieve-kc.asm +++ b/src/test/ref/millfork-benchmarks/sieve-kc.asm @@ -1,8 +1,13 @@ // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sieve-kc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const COUNT = $4000 .const SQRT_COUNT = $80 .label print_screen = $400 @@ -11,6 +16,7 @@ .label Ticks = 8 .label Ticks_1 = $a .label print_char_cursor = 4 +.segment Code __start: { // last_time lda #<0 @@ -244,6 +250,7 @@ print_char: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" .align $100 Sieve: .fill COUNT, 0 diff --git a/src/test/ref/millfork-benchmarks/sieve-kc.log b/src/test/ref/millfork-benchmarks/sieve-kc.log index dbc3dc86d..2f4d75249 100644 --- a/src/test/ref/millfork-benchmarks/sieve-kc.log +++ b/src/test/ref/millfork-benchmarks/sieve-kc.log @@ -1126,9 +1126,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sieve-kc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const COUNT = $4000 .const SQRT_COUNT = $80 @@ -1138,6 +1143,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label Ticks = 8 .label Ticks_1 = $a .label print_char_cursor = 4 +.segment Code // __start __start: { jmp __init1 @@ -1572,6 +1578,7 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" .align $100 Sieve: .fill COUNT, 0 @@ -1762,9 +1769,14 @@ Score: 6485 // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sieve-kc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const COUNT = $4000 .const SQRT_COUNT = $80 @@ -1774,6 +1786,7 @@ Score: 6485 .label Ticks = 8 .label Ticks_1 = $a .label print_char_cursor = 4 +.segment Code // __start __start: { // __start::__init1 @@ -2159,6 +2172,7 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" .align $100 Sieve: .fill COUNT, 0 diff --git a/src/test/ref/min-fmul-16.asm b/src/test/ref/min-fmul-16.asm index 399a3cec9..996eaf48d 100644 --- a/src/test/ref/min-fmul-16.asm +++ b/src/test/ref/min-fmul-16.asm @@ -1,12 +1,18 @@ // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="min-fmul-16.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label RASTER = $d012 .label BORDER_COLOR = $d020 .label SCREEN = $400 .label print_char_cursor = $c +.segment Code main: { .label a = $4d2 .label b = $929 @@ -369,6 +375,7 @@ print_char: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). // main::@1] @@ -281,11 +287,17 @@ Score: 431 // Test compile-time and run-time multiplication // var*const multiplication - converted to shift/add // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="multiply-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/multiply-2s.asm b/src/test/ref/multiply-2s.asm index ae85a1e14..62936c2a5 100644 --- a/src/test/ref/multiply-2s.asm +++ b/src/test/ref/multiply-2s.asm @@ -1,7 +1,13 @@ // Check that multiplication by factors of 2 is converted to shifts -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="multiply-2s.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 diff --git a/src/test/ref/multiply-2s.log b/src/test/ref/multiply-2s.log index bfc6f5e92..c83344ec0 100644 --- a/src/test/ref/multiply-2s.log +++ b/src/test/ref/multiply-2s.log @@ -241,10 +241,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Check that multiplication by factors of 2 is converted to shifts // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="multiply-2s.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -342,10 +348,16 @@ Score: 641 // File Comments // Check that multiplication by factors of 2 is converted to shifts // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="multiply-2s.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/multiply-ns.asm b/src/test/ref/multiply-ns.asm index da883e701..dc59bf606 100644 --- a/src/test/ref/multiply-ns.asm +++ b/src/test/ref/multiply-ns.asm @@ -1,7 +1,13 @@ // Check that multiplication by constants is converted to shift/add -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="multiply-ns.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label __21 = 2 diff --git a/src/test/ref/multiply-ns.log b/src/test/ref/multiply-ns.log index 08307acab..b88267587 100644 --- a/src/test/ref/multiply-ns.log +++ b/src/test/ref/multiply-ns.log @@ -521,10 +521,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Check that multiplication by constants is converted to shift/add // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="multiply-ns.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -704,10 +710,16 @@ Score: 1911 // File Comments // Check that multiplication by constants is converted to shift/add // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="multiply-ns.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/nes-array.asm b/src/test/ref/nes-array.asm index 268b45849..8c3a1a34a 100644 --- a/src/test/ref/nes-array.asm +++ b/src/test/ref/nes-array.asm @@ -1,9 +1,15 @@ // Test a bit of array code from the NES forum // https://forums.nesdev.com/viewtopic.php?f=2&t=18735 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="nes-array.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_SIGNED_WORD = 2 +.segment Code main: { .label SCREEN = $400 .label y1 = 4 @@ -71,4 +77,5 @@ foo: { // } rts } +.segment Data wow: .word $cafe, $babe, $1234, $5678 diff --git a/src/test/ref/nes-array.log b/src/test/ref/nes-array.log index bb8847bbb..d1e901c10 100644 --- a/src/test/ref/nes-array.log +++ b/src/test/ref/nes-array.log @@ -282,11 +282,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test a bit of array code from the NES forum // https://forums.nesdev.com/viewtopic.php?f=2&t=18735 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="nes-array.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_SIGNED_WORD = 2 +.segment Code // main main: { .label SCREEN = $400 @@ -380,6 +386,7 @@ foo: { rts } // File Data +.segment Data wow: .word $cafe, $babe, $1234, $5678 ASSEMBLER OPTIMIZATIONS @@ -431,11 +438,17 @@ Score: 141 // Test a bit of array code from the NES forum // https://forums.nesdev.com/viewtopic.php?f=2&t=18735 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="nes-array.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_SIGNED_WORD = 2 +.segment Code // main main: { .label SCREEN = $400 @@ -530,5 +543,6 @@ foo: { rts } // File Data +.segment Data wow: .word $cafe, $babe, $1234, $5678 diff --git a/src/test/ref/no-recursion-heavy.asm b/src/test/ref/no-recursion-heavy.asm index 2210d3057..02d492140 100644 --- a/src/test/ref/no-recursion-heavy.asm +++ b/src/test/ref/no-recursion-heavy.asm @@ -1,10 +1,16 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="no-recursion-heavy.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label ba = 2 .label bb = 3 .label bb_1 = 4 .label bc = 5 +.segment Code main: { lda #0 sta.z ba diff --git a/src/test/ref/no-recursion-heavy.log b/src/test/ref/no-recursion-heavy.log index 16b8aadf2..ae8408294 100644 --- a/src/test/ref/no-recursion-heavy.log +++ b/src/test/ref/no-recursion-heavy.log @@ -2705,14 +2705,20 @@ Allocated (was zp[1]:6) zp[1]:5 [ bc#115 bc#174 bc#175 bc#176 bc#177 bc#178 bc#1 ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="no-recursion-heavy.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label ba = 2 .label bb = 3 .label bb_1 = 4 .label bc = 5 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -4104,14 +4110,20 @@ Score: 913 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="no-recursion-heavy.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label ba = 2 .label bb = 3 .label bb_1 = 4 .label bc = 5 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/nomodify-3.asm b/src/test/ref/nomodify-3.asm index 3e4add21f..76c7bb327 100644 --- a/src/test/ref/nomodify-3.asm +++ b/src/test/ref/nomodify-3.asm @@ -1,9 +1,15 @@ // Test that a volatile nomodify-variable works as expected -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="nomodify-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label SCREEN = $400 .label i = 2 +.segment Code __start: { // i = 7 lda #7 diff --git a/src/test/ref/nomodify-3.log b/src/test/ref/nomodify-3.log index d154ce9cb..8d8f3cdc1 100644 --- a/src/test/ref/nomodify-3.log +++ b/src/test/ref/nomodify-3.log @@ -108,12 +108,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test that a volatile nomodify-variable works as expected // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="nomodify-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label i = 2 +.segment Code // __start __start: { jmp __init1 @@ -177,12 +183,18 @@ Score: 30 // File Comments // Test that a volatile nomodify-variable works as expected // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="nomodify-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label i = 2 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/nomodify-4.asm b/src/test/ref/nomodify-4.asm index 9d5cfb3a0..ca2a23321 100644 --- a/src/test/ref/nomodify-4.asm +++ b/src/test/ref/nomodify-4.asm @@ -1,8 +1,14 @@ // Test that a nomodify parameter works -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="nomodify-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // print('a') lda #'a' diff --git a/src/test/ref/nomodify-4.log b/src/test/ref/nomodify-4.log index dcafbe556..fd5af6926 100644 --- a/src/test/ref/nomodify-4.log +++ b/src/test/ref/nomodify-4.log @@ -124,11 +124,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test that a nomodify parameter works // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="nomodify-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] call print @@ -197,11 +203,17 @@ Score: 32 // File Comments // Test that a nomodify parameter works // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="nomodify-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // print('a') diff --git a/src/test/ref/noop-cast-elimination.asm b/src/test/ref/noop-cast-elimination.asm index 1a54de9a3..094e8c4bc 100644 --- a/src/test/ref/noop-cast-elimination.asm +++ b/src/test/ref/noop-cast-elimination.asm @@ -1,7 +1,13 @@ // Test elimination of noop-casts (signed byte to byte) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="noop-cast-elimination.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 .label sw = 2 diff --git a/src/test/ref/noop-cast-elimination.log b/src/test/ref/noop-cast-elimination.log index 4873cbeb3..a47553a04 100644 --- a/src/test/ref/noop-cast-elimination.log +++ b/src/test/ref/noop-cast-elimination.log @@ -155,10 +155,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test elimination of noop-casts (signed byte to byte) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="noop-cast-elimination.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -250,10 +256,16 @@ Score: 706 // File Comments // Test elimination of noop-casts (signed byte to byte) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="noop-cast-elimination.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/norom-charset.asm b/src/test/ref/norom-charset.asm index 3167a8f51..796b3f5ff 100644 --- a/src/test/ref/norom-charset.asm +++ b/src/test/ref/norom-charset.asm @@ -1,10 +1,16 @@ // Generate a charset based on a 5x3 pattern stored in 2 bytes -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="norom-charset.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label VIC_MEMORY = $d018 .label SCREEN = $400 .label CHARSET = $3000 +.segment Code main: { .label charset = 3 .label c = 2 @@ -94,6 +100,7 @@ gen_char3: { // } rts } +.segment Data // Stores chars as 15 bits (in 2 bytes) specifying the 3x5 // The 5x3 char is stored as 5x 3-bit rows followed by a zero. %aaabbbcc cdddeee0 charset_spec_row: .word $f7da, $f7de, $f24e, $d6de diff --git a/src/test/ref/norom-charset.log b/src/test/ref/norom-charset.log index ef4704833..ca0f26ee9 100644 --- a/src/test/ref/norom-charset.log +++ b/src/test/ref/norom-charset.log @@ -546,13 +546,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Generate a charset based on a 5x3 pattern stored in 2 bytes // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="norom-charset.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label VIC_MEMORY = $d018 .label SCREEN = $400 .label CHARSET = $3000 +.segment Code // main main: { .label charset = 3 @@ -711,6 +717,7 @@ gen_char3: { rts } // File Data +.segment Data // Stores chars as 15 bits (in 2 bytes) specifying the 3x5 // The 5x3 char is stored as 5x 3-bit rows followed by a zero. %aaabbbcc cdddeee0 charset_spec_row: .word $f7da, $f7de, $f24e, $d6de @@ -803,13 +810,19 @@ Score: 45574 // File Comments // Generate a charset based on a 5x3 pattern stored in 2 bytes // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="norom-charset.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label VIC_MEMORY = $d018 .label SCREEN = $400 .label CHARSET = $3000 +.segment Code // main main: { .label charset = 3 @@ -957,6 +970,7 @@ gen_char3: { rts } // File Data +.segment Data // Stores chars as 15 bits (in 2 bytes) specifying the 3x5 // The 5x3 char is stored as 5x 3-bit rows followed by a zero. %aaabbbcc cdddeee0 charset_spec_row: .word $f7da, $f7de, $f24e, $d6de diff --git a/src/test/ref/number-conversion.asm b/src/test/ref/number-conversion.asm index b6100cb70..f175ee06b 100644 --- a/src/test/ref/number-conversion.asm +++ b/src/test/ref/number-conversion.asm @@ -1,8 +1,13 @@ // Tests conversion of numbers to correct int types // See https://gitlab.com/camelot/kickc/issues/181 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-conversion.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const TYPEID_SIGNED_BYTE = 2 .const TYPEID_SIGNED_WORD = 4 .const TYPEID_SIGNED_DWORD = 6 @@ -13,6 +18,7 @@ .const GREEN = 5 .label SCREEN = $400 .label COLS = $d800 +.segment Code main: { // assertType(typeid(12sb+12), typeid(signed byte)) ldx #0 diff --git a/src/test/ref/number-conversion.log b/src/test/ref/number-conversion.log index 1b87fde52..5b7aacaf3 100644 --- a/src/test/ref/number-conversion.log +++ b/src/test/ref/number-conversion.log @@ -1363,9 +1363,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests conversion of numbers to correct int types // See https://gitlab.com/camelot/kickc/issues/181 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-conversion.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const TYPEID_SIGNED_BYTE = 2 .const TYPEID_SIGNED_WORD = 4 @@ -1377,6 +1382,7 @@ ASSEMBLER BEFORE OPTIMIZATION .const GREEN = 5 .label SCREEN = $400 .label COLS = $d800 +.segment Code // main main: { // [1] call assertType @@ -2163,9 +2169,14 @@ Score: 506 // Tests conversion of numbers to correct int types // See https://gitlab.com/camelot/kickc/issues/181 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-conversion.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const TYPEID_SIGNED_BYTE = 2 .const TYPEID_SIGNED_WORD = 4 @@ -2177,6 +2188,7 @@ Score: 506 .const GREEN = 5 .label SCREEN = $400 .label COLS = $d800 +.segment Code // main main: { // assertType(typeid(12sb+12), typeid(signed byte)) diff --git a/src/test/ref/number-inference-sum.asm b/src/test/ref/number-inference-sum.asm index 5cf7b7816..2889ab68b 100644 --- a/src/test/ref/number-inference-sum.asm +++ b/src/test/ref/number-inference-sum.asm @@ -1,8 +1,14 @@ // Test inference of number types using a long sum // Currently fails - because the compiler does not handle byte+byte correctly (not truncating the result to 8 bits) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-inference-sum.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const RED = 2 .const b1 = $fa diff --git a/src/test/ref/number-inference-sum.log b/src/test/ref/number-inference-sum.log index fee88662a..ef900564f 100644 --- a/src/test/ref/number-inference-sum.log +++ b/src/test/ref/number-inference-sum.log @@ -144,10 +144,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Test inference of number types using a long sum // Currently fails - because the compiler does not handle byte+byte correctly (not truncating the result to 8 bits) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-inference-sum.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const RED = 2 @@ -203,10 +209,16 @@ Score: 24 // Test inference of number types using a long sum // Currently fails - because the compiler does not handle byte+byte correctly (not truncating the result to 8 bits) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-inference-sum.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const RED = 2 diff --git a/src/test/ref/number-ternary-fail-2.asm b/src/test/ref/number-ternary-fail-2.asm index ab8305f08..03adf0263 100644 --- a/src/test/ref/number-ternary-fail-2.asm +++ b/src/test/ref/number-ternary-fail-2.asm @@ -1,10 +1,16 @@ // Failing number type resolving in ternary operator // Currently fails in the ternary operator with number-issues if integer literal is not specified! -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-ternary-fail-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Top of the heap used by malloc() .label HEAP_TOP = $a000 +.segment Code main: { .label width = $12*2+3 .label height = 6*2+3 diff --git a/src/test/ref/number-ternary-fail-2.log b/src/test/ref/number-ternary-fail-2.log index d72877da3..731d54e31 100644 --- a/src/test/ref/number-ternary-fail-2.log +++ b/src/test/ref/number-ternary-fail-2.log @@ -544,12 +544,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Failing number type resolving in ternary operator // Currently fails in the ternary operator with number-issues if integer literal is not specified! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-ternary-fail-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Top of the heap used by malloc() .label HEAP_TOP = $a000 +.segment Code // main main: { .label width = $12*2+3 @@ -717,12 +723,18 @@ Score: 426 // Failing number type resolving in ternary operator // Currently fails in the ternary operator with number-issues if integer literal is not specified! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-ternary-fail-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Top of the heap used by malloc() .label HEAP_TOP = $a000 +.segment Code // main main: { .label width = $12*2+3 diff --git a/src/test/ref/number-ternary-fail-3.asm b/src/test/ref/number-ternary-fail-3.asm index 9def3d850..c58f27214 100644 --- a/src/test/ref/number-ternary-fail-3.asm +++ b/src/test/ref/number-ternary-fail-3.asm @@ -1,8 +1,14 @@ // Failing number type resolving in ternary operator // Currently fails in the ternary operator with number-issues if integer literal is not specified! -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-ternary-fail-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label BASIC = $a000 .label SCREEN = $400 diff --git a/src/test/ref/number-ternary-fail-3.log b/src/test/ref/number-ternary-fail-3.log index b9d31a409..2ee815ebf 100644 --- a/src/test/ref/number-ternary-fail-3.log +++ b/src/test/ref/number-ternary-fail-3.log @@ -206,10 +206,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Failing number type resolving in ternary operator // Currently fails in the ternary operator with number-issues if integer literal is not specified! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-ternary-fail-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label BASIC = $a000 @@ -309,10 +315,16 @@ Score: 321 // Failing number type resolving in ternary operator // Currently fails in the ternary operator with number-issues if integer literal is not specified! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-ternary-fail-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label BASIC = $a000 diff --git a/src/test/ref/number-ternary-fail.asm b/src/test/ref/number-ternary-fail.asm index 50d4d180a..78a22e0eb 100644 --- a/src/test/ref/number-ternary-fail.asm +++ b/src/test/ref/number-ternary-fail.asm @@ -1,9 +1,15 @@ // Failing number type resolving in ternary operator // Currently fails in the ternary operator with number-issues if integer literal is not specified! -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-ternary-fail.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/number-ternary-fail.log b/src/test/ref/number-ternary-fail.log index 7eda903b7..3043a551d 100644 --- a/src/test/ref/number-ternary-fail.log +++ b/src/test/ref/number-ternary-fail.log @@ -187,11 +187,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Failing number type resolving in ternary operator // Currently fails in the ternary operator with number-issues if integer literal is not specified! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-ternary-fail.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -283,11 +289,17 @@ Score: 296 // Failing number type resolving in ternary operator // Currently fails in the ternary operator with number-issues if integer literal is not specified! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-ternary-fail.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/number-type.asm b/src/test/ref/number-type.asm index 5c1cd6346..a83f361b8 100644 --- a/src/test/ref/number-type.asm +++ b/src/test/ref/number-type.asm @@ -1,7 +1,13 @@ // Tests the number type used for constant expressions -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-type.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // testBytes() jsr testBytes diff --git a/src/test/ref/number-type.log b/src/test/ref/number-type.log index 96661227c..3d5cef1c4 100644 --- a/src/test/ref/number-type.log +++ b/src/test/ref/number-type.log @@ -597,10 +597,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests the number type used for constant expressions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-type.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] call testBytes @@ -746,10 +752,16 @@ Score: 180 // File Comments // Tests the number type used for constant expressions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="number-type.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // testBytes() diff --git a/src/test/ref/operator-lohi-problem-1.asm b/src/test/ref/operator-lohi-problem-1.asm index edc79564c..b7dc91b54 100644 --- a/src/test/ref/operator-lohi-problem-1.asm +++ b/src/test/ref/operator-lohi-problem-1.asm @@ -3,11 +3,17 @@ // which currently relies on getting the type from the literal value. // A fix could be adding support for "declared" types for constant literal values // - enabling the lo/hi to know that their operand is a word (from the cast). -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="operator-lohi-problem-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const DVAL = $20000 .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = <(word)(DVAL/$400) lda #main::@1] @@ -249,10 +255,16 @@ Score: 91 // Examples of unsigned comparisons to values outside the range of unsigned // These should be optimized to constants // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="optimize-unsigned-comparisons.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/overlap-allocation-2.asm b/src/test/ref/overlap-allocation-2.asm index 03c1a1d2e..40aac8fef 100644 --- a/src/test/ref/overlap-allocation-2.asm +++ b/src/test/ref/overlap-allocation-2.asm @@ -1,8 +1,14 @@ // Two levels of functions to test that register allocation handles live ranges and call-ranges optimally to allocate the fewest possible ZP-variables -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="overlap-allocation-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldy #0 __b1: diff --git a/src/test/ref/overlap-allocation-2.log b/src/test/ref/overlap-allocation-2.log index 69be08127..78c40b390 100644 --- a/src/test/ref/overlap-allocation-2.log +++ b/src/test/ref/overlap-allocation-2.log @@ -288,11 +288,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Two levels of functions to test that register allocation handles live ranges and call-ranges optimally to allocate the fewest possible ZP-variables // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="overlap-allocation-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -459,11 +465,17 @@ Score: 303 // File Comments // Two levels of functions to test that register allocation handles live ranges and call-ranges optimally to allocate the fewest possible ZP-variables // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="overlap-allocation-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/overlap-allocation.asm b/src/test/ref/overlap-allocation.asm index e9147d991..eb736c2f2 100644 --- a/src/test/ref/overlap-allocation.asm +++ b/src/test/ref/overlap-allocation.asm @@ -1,9 +1,15 @@ // Allocates ZP to j/k-variables even though all of i, j, k could be allocates to x and be more efficient. // Reason: Pass4RegisterUpliftCombinations.isAllocationOverlapping() believes i/j/k variables overlaps insode plot() -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="overlap-allocation.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: diff --git a/src/test/ref/overlap-allocation.log b/src/test/ref/overlap-allocation.log index 59e5cace5..636ff9cd9 100644 --- a/src/test/ref/overlap-allocation.log +++ b/src/test/ref/overlap-allocation.log @@ -280,11 +280,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Allocates ZP to j/k-variables even though all of i, j, k could be allocates to x and be more efficient. // Reason: Pass4RegisterUpliftCombinations.isAllocationOverlapping() believes i/j/k variables overlaps insode plot() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="overlap-allocation.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -448,11 +454,17 @@ Score: 292 // Allocates ZP to j/k-variables even though all of i, j, k could be allocates to x and be more efficient. // Reason: Pass4RegisterUpliftCombinations.isAllocationOverlapping() believes i/j/k variables overlaps insode plot() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="overlap-allocation.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/parse-negated-struct-ref.asm b/src/test/ref/parse-negated-struct-ref.asm index 3a3a54799..8845d8dac 100644 --- a/src/test/ref/parse-negated-struct-ref.asm +++ b/src/test/ref/parse-negated-struct-ref.asm @@ -1,8 +1,14 @@ // Test parsing a negated struct reference - which causes problems with the ASMREL labels !a++ // https://gitlab.com/camelot/kickc/issues/266 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="parse-negated-struct-ref.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label a = aa @@ -20,4 +26,5 @@ main: { // } rts } +.segment Data aa: .byte 1 diff --git a/src/test/ref/parse-negated-struct-ref.log b/src/test/ref/parse-negated-struct-ref.log index 5fb9e9f6a..226555753 100644 --- a/src/test/ref/parse-negated-struct-ref.log +++ b/src/test/ref/parse-negated-struct-ref.log @@ -127,10 +127,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Test parsing a negated struct reference - which causes problems with the ASMREL labels !a++ // https://gitlab.com/camelot/kickc/issues/266 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="parse-negated-struct-ref.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -159,6 +165,7 @@ main: { rts } // File Data +.segment Data aa: .byte 1 ASSEMBLER OPTIMIZATIONS @@ -190,10 +197,16 @@ Score: 23 // Test parsing a negated struct reference - which causes problems with the ASMREL labels !a++ // https://gitlab.com/camelot/kickc/issues/266 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="parse-negated-struct-ref.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -220,5 +233,6 @@ main: { rts } // File Data +.segment Data aa: .byte 1 diff --git a/src/test/ref/plasma-center.asm b/src/test/ref/plasma-center.asm index d916cc125..2236d1fcd 100644 --- a/src/test/ref/plasma-center.asm +++ b/src/test/ref/plasma-center.asm @@ -1,7 +1,12 @@ // Plasma based on the distance/angle to the screen center -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="plasma-center.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // SID Channel Control Register Noise Waveform .const SID_CONTROL_NOISE = $80 // The colors of the C64 @@ -41,6 +46,7 @@ // Offsets for the sines .label sin_offset_x = 6 .label sin_offset_y = $13 +.segment Code __start: { // malloc(1000) lda #<$3e8 @@ -513,8 +519,10 @@ make_plasma_charset: { // for (char ii = 0; ii < 8; ++ii) inx jmp __b5 + .segment Data bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } +.segment Code // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. // memset(void* zp(4) str, byte register(X) c) memset: { @@ -1094,6 +1102,7 @@ bsearch16u: { tax jmp __b3 } +.segment Data // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i__start::__init1] @@ -6411,8 +6417,10 @@ make_plasma_charset: { // [118] phi make_plasma_charset::b#2 = make_plasma_charset::b#6 [phi:make_plasma_charset::@7->make_plasma_charset::@5#0] -- register_copy // [118] phi make_plasma_charset::ii#2 = make_plasma_charset::ii#1 [phi:make_plasma_charset::@7->make_plasma_charset::@5#1] -- register_copy jmp __b5 + .segment Data bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. // memset(void* zp(4) str, byte register(X) c) @@ -7247,6 +7255,7 @@ bsearch16u: { jmp __b3 } // File Data +.segment Data // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i__start::__init1] @@ -8687,8 +8702,10 @@ make_plasma_charset: { // [118] phi make_plasma_charset::b#2 = make_plasma_charset::b#6 [phi:make_plasma_charset::@7->make_plasma_charset::@5#0] -- register_copy // [118] phi make_plasma_charset::ii#2 = make_plasma_charset::ii#1 [phi:make_plasma_charset::@7->make_plasma_charset::@5#1] -- register_copy jmp __b5 + .segment Data bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. // memset(void* zp(4) str, byte register(X) c) @@ -9501,6 +9518,7 @@ bsearch16u: { jmp __b3 } // File Data +.segment Data // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; imain::@1] @@ -147,6 +152,7 @@ main: { jmp __b1 } // File Data +.segment Data TABLE: .fill $a, 0 ASSEMBLER OPTIMIZATIONS @@ -174,8 +180,13 @@ Score: 191 // File Comments // Tests the target platform ASM6502 // Upstart -.pc = $3000 "Program" + // Generic ASM 6502 +.file [name="platform-asm6502.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Code, Data"] +.segmentdef Code [start=$3000] +.segmentdef Data [startAfter="Code"] // Global Constants & labels +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -205,5 +216,6 @@ main: { jmp __b1 } // File Data +.segment Data TABLE: .fill $a, 0 diff --git a/src/test/ref/platform-default-define.asm b/src/test/ref/platform-default-define.asm index 99b4ae123..e87af921d 100644 --- a/src/test/ref/platform-default-define.asm +++ b/src/test/ref/platform-default-define.asm @@ -1,8 +1,14 @@ // Test the #define for the default platform -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="platform-default-define.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = 'a' lda #'a' diff --git a/src/test/ref/platform-default-define.log b/src/test/ref/platform-default-define.log index fbf97c6f7..c14ec65b9 100644 --- a/src/test/ref/platform-default-define.log +++ b/src/test/ref/platform-default-define.log @@ -73,11 +73,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test the #define for the default platform // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="platform-default-define.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = 'a' -- _deref_pbuc1=vbuc2 @@ -109,11 +115,17 @@ Score: 12 // File Comments // Test the #define for the default platform // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="platform-default-define.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // SCREEN[0] = 'a' diff --git a/src/test/ref/platform-plus4-define.asm b/src/test/ref/platform-plus4-define.asm index 86db7a0a0..1b65406b6 100644 --- a/src/test/ref/platform-plus4-define.asm +++ b/src/test/ref/platform-plus4-define.asm @@ -1,9 +1,14 @@ // Test the #define for the plus4 target platform -.pc = $1001 "Basic" + // Commodore 16 / Plus/4 executable PRG file +.file [name="platform-plus4-define.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$1001] +.segmentdef Code [start=$100d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $100d "Program" - .label SCREEN = $c00 +.segment Code main: { // SCREEN[0] = 'a' lda #'a' diff --git a/src/test/ref/platform-plus4-define.log b/src/test/ref/platform-plus4-define.log index 5a42f2a03..1d8b19c3c 100644 --- a/src/test/ref/platform-plus4-define.log +++ b/src/test/ref/platform-plus4-define.log @@ -73,12 +73,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test the #define for the plus4 target platform // Upstart -.pc = $1001 "Basic" + // Commodore 16 / Plus/4 executable PRG file +.file [name="platform-plus4-define.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$1001] +.segmentdef Code [start=$100d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $100d "Program" - // Global Constants & labels .label SCREEN = $c00 +.segment Code // main main: { // [0] *SCREEN = 'a' -- _deref_pbuc1=vbuc2 @@ -110,12 +115,17 @@ Score: 12 // File Comments // Test the #define for the plus4 target platform // Upstart -.pc = $1001 "Basic" + // Commodore 16 / Plus/4 executable PRG file +.file [name="platform-plus4-define.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$1001] +.segmentdef Code [start=$100d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $100d "Program" - // Global Constants & labels .label SCREEN = $c00 +.segment Code // main main: { // SCREEN[0] = 'a' diff --git a/src/test/ref/plus-0.asm b/src/test/ref/plus-0.asm index d4397c1dd..41f733344 100644 --- a/src/test/ref/plus-0.asm +++ b/src/test/ref/plus-0.asm @@ -1,7 +1,13 @@ // Tests elimination of plus 0 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="plus-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // fill((byte*)$400,'a') ldx #'a' diff --git a/src/test/ref/plus-0.log b/src/test/ref/plus-0.log index 5622b1bb3..465243be8 100644 --- a/src/test/ref/plus-0.log +++ b/src/test/ref/plus-0.log @@ -351,10 +351,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests elimination of plus 0 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="plus-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [1] call fill @@ -513,10 +519,16 @@ Score: 733 // File Comments // Tests elimination of plus 0 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="plus-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // fill((byte*)$400,'a') diff --git a/src/test/ref/plus4-kbhit.asm b/src/test/ref/plus4-kbhit.asm index 34aeafd1b..2e8d65a9d 100644 --- a/src/test/ref/plus4-kbhit.asm +++ b/src/test/ref/plus4-kbhit.asm @@ -7,16 +7,21 @@ // The MOS 7360/8360 TED chip used for graphics and sound in Plus/4 and Commodore 16 // https://www.karlstechnology.com/commodore/TED7360-datasheet.pdf // http://mclauchlan.site.net.au/scott/C=Hacking/C-Hacking12/gfx.html -.pc = $1001 "Basic" + // Commodore 16 / Plus/4 executable PRG file +.file [name="plus4-kbhit.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$1001] +.segmentdef Code [start=$100d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $100d "Program" - .const OFFSET_STRUCT_MOS7360_TED_KEYBOARD_INPUT = 8 // Keyboard Port PIO (P0-P7) // The input latch is part of the TED. .label KEYBOARD_PORT = $fd30 // The TED chip controlling video and sound on the Plus/4 and Commodore 16 .label TED = $ff00 +.segment Code main: { __b1: // kbhit() diff --git a/src/test/ref/plus4-kbhit.log b/src/test/ref/plus4-kbhit.log index 6da85c3c9..a90dacf8e 100644 --- a/src/test/ref/plus4-kbhit.log +++ b/src/test/ref/plus4-kbhit.log @@ -198,10 +198,14 @@ ASSEMBLER BEFORE OPTIMIZATION // https://www.karlstechnology.com/commodore/TED7360-datasheet.pdf // http://mclauchlan.site.net.au/scott/C=Hacking/C-Hacking12/gfx.html // Upstart -.pc = $1001 "Basic" + // Commodore 16 / Plus/4 executable PRG file +.file [name="plus4-kbhit.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$1001] +.segmentdef Code [start=$100d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $100d "Program" - // Global Constants & labels .const OFFSET_STRUCT_MOS7360_TED_KEYBOARD_INPUT = 8 // Keyboard Port PIO (P0-P7) @@ -209,6 +213,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label KEYBOARD_PORT = $fd30 // The TED chip controlling video and sound on the Plus/4 and Commodore 16 .label TED = $ff00 +.segment Code // main main: { // [1] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] @@ -303,10 +308,14 @@ Score: 129 // https://www.karlstechnology.com/commodore/TED7360-datasheet.pdf // http://mclauchlan.site.net.au/scott/C=Hacking/C-Hacking12/gfx.html // Upstart -.pc = $1001 "Basic" + // Commodore 16 / Plus/4 executable PRG file +.file [name="plus4-kbhit.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$1001] +.segmentdef Code [start=$100d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $100d "Program" - // Global Constants & labels .const OFFSET_STRUCT_MOS7360_TED_KEYBOARD_INPUT = 8 // Keyboard Port PIO (P0-P7) @@ -314,6 +323,7 @@ Score: 129 .label KEYBOARD_PORT = $fd30 // The TED chip controlling video and sound on the Plus/4 and Commodore 16 .label TED = $ff00 +.segment Code // main main: { // [1] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] diff --git a/src/test/ref/plus4-keyboard-test.asm b/src/test/ref/plus4-keyboard-test.asm index 4bf5d883a..4902d7723 100644 --- a/src/test/ref/plus4-keyboard-test.asm +++ b/src/test/ref/plus4-keyboard-test.asm @@ -1,16 +1,21 @@ // Test reading keyboard port on the TED of the Plus/4 // C standard library string.h // Functions to manipulate C strings and arrays. -.pc = $1001 "Basic" + // Commodore 16 / Plus/4 executable PRG file +.file [name="plus4-keyboard-test.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$1001] +.segmentdef Code [start=$100d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $100d "Program" - // Keyboard latch .label KEYBOARD_INPUT = $ff08 // Keyboard scan .label KEYBOARD_SCAN = $fd30 // Default address of screen character matrix .label DEFAULT_SCREEN = $c00 +.segment Code main: { .label row = 3 .label y = 2 diff --git a/src/test/ref/plus4-keyboard-test.log b/src/test/ref/plus4-keyboard-test.log index e1e1eda54..c5443d4cd 100644 --- a/src/test/ref/plus4-keyboard-test.log +++ b/src/test/ref/plus4-keyboard-test.log @@ -552,10 +552,14 @@ ASSEMBLER BEFORE OPTIMIZATION // C standard library string.h // Functions to manipulate C strings and arrays. // Upstart -.pc = $1001 "Basic" + // Commodore 16 / Plus/4 executable PRG file +.file [name="plus4-keyboard-test.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$1001] +.segmentdef Code [start=$100d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $100d "Program" - // Global Constants & labels // Keyboard latch .label KEYBOARD_INPUT = $ff08 @@ -563,6 +567,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label KEYBOARD_SCAN = $fd30 // Default address of screen character matrix .label DEFAULT_SCREEN = $c00 +.segment Code // main main: { .label row = 3 @@ -798,10 +803,14 @@ Score: 7354 // C standard library string.h // Functions to manipulate C strings and arrays. // Upstart -.pc = $1001 "Basic" + // Commodore 16 / Plus/4 executable PRG file +.file [name="plus4-keyboard-test.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$1001] +.segmentdef Code [start=$100d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $100d "Program" - // Global Constants & labels // Keyboard latch .label KEYBOARD_INPUT = $ff08 @@ -809,6 +818,7 @@ Score: 7354 .label KEYBOARD_SCAN = $fd30 // Default address of screen character matrix .label DEFAULT_SCREEN = $c00 +.segment Code // main main: { .label row = 3 diff --git a/src/test/ref/pointer-anding.asm b/src/test/ref/pointer-anding.asm index 479262b38..7fc155076 100644 --- a/src/test/ref/pointer-anding.asm +++ b/src/test/ref/pointer-anding.asm @@ -1,8 +1,14 @@ // Test binary ANDing pointers by Clay Cowgill -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-anding.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_SIGNED_WORD = 2 +.segment Code main: { .label __0 = 6 .label vram_ptr = 4 diff --git a/src/test/ref/pointer-anding.log b/src/test/ref/pointer-anding.log index d10bef0f8..9cd5bc6b1 100644 --- a/src/test/ref/pointer-anding.log +++ b/src/test/ref/pointer-anding.log @@ -209,11 +209,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test binary ANDing pointers by Clay Cowgill // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-anding.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_SIGNED_WORD = 2 +.segment Code // main main: { .label __0 = 6 @@ -345,11 +351,17 @@ Score: 1431 // File Comments // Test binary ANDing pointers by Clay Cowgill // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-anding.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_SIGNED_WORD = 2 +.segment Code // main main: { .label __0 = 6 diff --git a/src/test/ref/pointer-cast-2.asm b/src/test/ref/pointer-cast-2.asm index 2f7ffae26..bae319718 100644 --- a/src/test/ref/pointer-cast-2.asm +++ b/src/test/ref/pointer-cast-2.asm @@ -1,7 +1,13 @@ // Tests casting pointer types to other pointer types -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-cast-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label ub_screen = $400 .label sb_screen = $428 diff --git a/src/test/ref/pointer-cast-2.log b/src/test/ref/pointer-cast-2.log index 4993ccb8c..1974a1b78 100644 --- a/src/test/ref/pointer-cast-2.log +++ b/src/test/ref/pointer-cast-2.log @@ -115,10 +115,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests casting pointer types to other pointer types // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-cast-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label ub_screen = $400 @@ -178,10 +184,16 @@ Score: 40 // File Comments // Tests casting pointer types to other pointer types // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-cast-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label ub_screen = $400 diff --git a/src/test/ref/pointer-cast-3.asm b/src/test/ref/pointer-cast-3.asm index c9072e293..ffffd8891 100644 --- a/src/test/ref/pointer-cast-3.asm +++ b/src/test/ref/pointer-cast-3.asm @@ -1,7 +1,13 @@ // Tests casting pointer types to other pointer types -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-cast-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const sb = $ff .label sb_screen = $400 diff --git a/src/test/ref/pointer-cast-3.log b/src/test/ref/pointer-cast-3.log index 3880a7b09..9c7d6c815 100644 --- a/src/test/ref/pointer-cast-3.log +++ b/src/test/ref/pointer-cast-3.log @@ -68,10 +68,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests casting pointer types to other pointer types // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-cast-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const sb = $ff @@ -106,10 +112,16 @@ Score: 12 // File Comments // Tests casting pointer types to other pointer types // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-cast-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const sb = $ff diff --git a/src/test/ref/pointer-cast-4.asm b/src/test/ref/pointer-cast-4.asm index f2e8d393b..670ce3874 100644 --- a/src/test/ref/pointer-cast-4.asm +++ b/src/test/ref/pointer-cast-4.asm @@ -1,7 +1,13 @@ // Tests casting pointer types to other pointer types does not produce any ASM code -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-cast-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label bscreen = $400 .label wscreen = bscreen diff --git a/src/test/ref/pointer-cast-4.log b/src/test/ref/pointer-cast-4.log index 7f554d2c0..47bae75f9 100644 --- a/src/test/ref/pointer-cast-4.log +++ b/src/test/ref/pointer-cast-4.log @@ -135,10 +135,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests casting pointer types to other pointer types does not produce any ASM code // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-cast-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label bscreen = $400 @@ -209,10 +215,16 @@ Score: 291 // File Comments // Tests casting pointer types to other pointer types does not produce any ASM code // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-cast-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label bscreen = $400 diff --git a/src/test/ref/pointer-cast.asm b/src/test/ref/pointer-cast.asm index d46302207..124e0de54 100644 --- a/src/test/ref/pointer-cast.asm +++ b/src/test/ref/pointer-cast.asm @@ -1,7 +1,12 @@ // Tests casting pointer types to other pointer types -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-cast.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_WORD = 2 .const SIZEOF_SIGNED_WORD = 2 .const ub = $29 @@ -12,6 +17,7 @@ .label sb_screen = $428 .label uw_screen = $450 .label sw_screen = $478 +.segment Code main: { // *((byte*)ub_screen) = ub lda #ub diff --git a/src/test/ref/pointer-cast.log b/src/test/ref/pointer-cast.log index d9431a6dd..0be9a3f34 100644 --- a/src/test/ref/pointer-cast.log +++ b/src/test/ref/pointer-cast.log @@ -355,9 +355,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests casting pointer types to other pointer types // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-cast.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 .const SIZEOF_SIGNED_WORD = 2 @@ -369,6 +374,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label sb_screen = $428 .label uw_screen = $450 .label sw_screen = $478 +.segment Code // main main: { // [0] *ub_screen = ub -- _deref_pbuc1=vbuc2 @@ -470,9 +476,14 @@ Score: 150 // File Comments // Tests casting pointer types to other pointer types // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-cast.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 .const SIZEOF_SIGNED_WORD = 2 @@ -484,6 +495,7 @@ Score: 150 .label sb_screen = $428 .label uw_screen = $450 .label sw_screen = $478 +.segment Code // main main: { // *((byte*)ub_screen) = ub diff --git a/src/test/ref/pointer-const-typedef.asm b/src/test/ref/pointer-const-typedef.asm index 664233230..c2d65f377 100644 --- a/src/test/ref/pointer-const-typedef.asm +++ b/src/test/ref/pointer-const-typedef.asm @@ -1,7 +1,12 @@ // Test pointer to const and const pointer combined with typedef -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-const-typedef.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Const pointer .label cp0 = $400 .label cp1 = $400 @@ -15,6 +20,7 @@ .label pc1 = $400 .label pc2 = $400 .label SCREEN = $400 +.segment Code main: { // SCREEN[idx++] = *pc0 lda pc0 diff --git a/src/test/ref/pointer-const-typedef.log b/src/test/ref/pointer-const-typedef.log index 34bf58ccd..6e10913e9 100644 --- a/src/test/ref/pointer-const-typedef.log +++ b/src/test/ref/pointer-const-typedef.log @@ -220,9 +220,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test pointer to const and const pointer combined with typedef // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-const-typedef.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Const pointer .label cp0 = $400 @@ -237,6 +242,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label pc1 = $400 .label pc2 = $400 .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = *pc0 -- _deref_pbuc1=_deref_pbuc2 @@ -302,9 +308,14 @@ Score: 78 // File Comments // Test pointer to const and const pointer combined with typedef // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-const-typedef.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Const pointer .label cp0 = $400 @@ -319,6 +330,7 @@ Score: 78 .label pc1 = $400 .label pc2 = $400 .label SCREEN = $400 +.segment Code // main main: { // SCREEN[idx++] = *pc0 diff --git a/src/test/ref/pointer-const.asm b/src/test/ref/pointer-const.asm index 40ef5c29a..49ef3ed68 100644 --- a/src/test/ref/pointer-const.asm +++ b/src/test/ref/pointer-const.asm @@ -1,11 +1,17 @@ // Test pointer to const and const pointer -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-const.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Const pointer .label SCREEN = $400 // Const pointer to const .label BASIC = $a004 +.segment Code main: { ldx #0 __b1: @@ -38,6 +44,7 @@ main: { inx jmp __b1 } +.segment Data // Pointer to const MSG: .text "hello world!" .byte 0 diff --git a/src/test/ref/pointer-const.log b/src/test/ref/pointer-const.log index 3d2cefd01..2c0e171f2 100644 --- a/src/test/ref/pointer-const.log +++ b/src/test/ref/pointer-const.log @@ -204,14 +204,20 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test pointer to const and const pointer // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-const.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Const pointer .label SCREEN = $400 // Const pointer to const .label BASIC = $a004 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -267,6 +273,7 @@ main: { jmp __b1 } // File Data +.segment Data // Pointer to const MSG: .text "hello world!" .byte 0 @@ -306,14 +313,20 @@ Score: 536 // File Comments // Test pointer to const and const pointer // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-const.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Const pointer .label SCREEN = $400 // Const pointer to const .label BASIC = $a004 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -369,6 +382,7 @@ main: { jmp __b1 } // File Data +.segment Data // Pointer to const MSG: .text "hello world!" .byte 0 diff --git a/src/test/ref/pointer-plus-0.asm b/src/test/ref/pointer-plus-0.asm index e85cb5887..446ff59c1 100644 --- a/src/test/ref/pointer-plus-0.asm +++ b/src/test/ref/pointer-plus-0.asm @@ -1,7 +1,13 @@ // Tests pointer plus 0 elimination -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-plus-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label __0 = 2 @@ -35,6 +41,7 @@ first: { .label return = 2 rts } +.segment Data msg1: .text "hello world!" .byte 0 msg2: .text "goodbye sky?" diff --git a/src/test/ref/pointer-plus-0.log b/src/test/ref/pointer-plus-0.log index 248730e9c..6a9b8ac79 100644 --- a/src/test/ref/pointer-plus-0.log +++ b/src/test/ref/pointer-plus-0.log @@ -222,10 +222,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests pointer plus 0 elimination // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-plus-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -283,6 +289,7 @@ first: { rts } // File Data +.segment Data msg1: .text "hello world!" .byte 0 msg2: .text "goodbye sky?" @@ -325,10 +332,16 @@ Score: 66 // File Comments // Tests pointer plus 0 elimination // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-plus-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -383,6 +396,7 @@ first: { rts } // File Data +.segment Data msg1: .text "hello world!" .byte 0 msg2: .text "goodbye sky?" diff --git a/src/test/ref/pointer-plus-signed-word.asm b/src/test/ref/pointer-plus-signed-word.asm index 9e045eed3..00f1d3cbb 100644 --- a/src/test/ref/pointer-plus-signed-word.asm +++ b/src/test/ref/pointer-plus-signed-word.asm @@ -1,9 +1,15 @@ // Test adding a signed word to a pointer // Fragment pbuz1=pbuc1_plus_vwsz1.asm supplied by Richard-William Loerakker -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-plus-signed-word.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400+$28*$a +.segment Code main: { .label sc = 4 .label i = 2 diff --git a/src/test/ref/pointer-plus-signed-word.log b/src/test/ref/pointer-plus-signed-word.log index 628772587..9fa74c9da 100644 --- a/src/test/ref/pointer-plus-signed-word.log +++ b/src/test/ref/pointer-plus-signed-word.log @@ -137,11 +137,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test adding a signed word to a pointer // Fragment pbuz1=pbuc1_plus_vwsz1.asm supplied by Richard-William Loerakker // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-plus-signed-word.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400+$28*$a +.segment Code // main main: { .label sc = 4 @@ -226,11 +232,17 @@ Score: 671 // Test adding a signed word to a pointer // Fragment pbuz1=pbuc1_plus_vwsz1.asm supplied by Richard-William Loerakker // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-plus-signed-word.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400+$28*$a +.segment Code // main main: { .label sc = 4 diff --git a/src/test/ref/pointer-pointer-1.asm b/src/test/ref/pointer-pointer-1.asm index 349f44656..548725aa6 100644 --- a/src/test/ref/pointer-pointer-1.asm +++ b/src/test/ref/pointer-pointer-1.asm @@ -1,7 +1,13 @@ // Tests a simple pointer to a pointer -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-pointer-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label ppb = pb diff --git a/src/test/ref/pointer-pointer-1.log b/src/test/ref/pointer-pointer-1.log index 46ded8e48..e803a98ca 100644 --- a/src/test/ref/pointer-pointer-1.log +++ b/src/test/ref/pointer-pointer-1.log @@ -89,10 +89,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests a simple pointer to a pointer // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-pointer-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -146,10 +152,16 @@ Score: 44 // File Comments // Tests a simple pointer to a pointer // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-pointer-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/pointer-pointer-2.asm b/src/test/ref/pointer-pointer-2.asm index e2f8b2ea0..e19ea1100 100644 --- a/src/test/ref/pointer-pointer-2.asm +++ b/src/test/ref/pointer-pointer-2.asm @@ -1,8 +1,14 @@ // Tests pointer to pointer in a more complex setup -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-pointer-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label textid = 2 +.segment Code main: { .label text = 5 .label screen = 3 @@ -73,6 +79,7 @@ nexttext: { sta.z textp+1 rts } +.segment Data text1: .text "camelot " .byte 0 text2: .text "rex " diff --git a/src/test/ref/pointer-pointer-2.log b/src/test/ref/pointer-pointer-2.log index 7044bd150..49982351e 100644 --- a/src/test/ref/pointer-pointer-2.log +++ b/src/test/ref/pointer-pointer-2.log @@ -353,11 +353,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests pointer to pointer in a more complex setup // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-pointer-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label textid = 2 +.segment Code // main main: { .label text = 5 @@ -469,6 +475,7 @@ nexttext: { jmp __breturn } // File Data +.segment Data text1: .text "camelot " .byte 0 text2: .text "rex " @@ -538,11 +545,17 @@ Score: 5705 // File Comments // Tests pointer to pointer in a more complex setup // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-pointer-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label textid = 2 +.segment Code // main main: { .label text = 5 @@ -649,6 +662,7 @@ nexttext: { rts } // File Data +.segment Data text1: .text "camelot " .byte 0 text2: .text "rex " diff --git a/src/test/ref/pointer-pointer-3.asm b/src/test/ref/pointer-pointer-3.asm index 4382149f0..1f9b1bfcb 100644 --- a/src/test/ref/pointer-pointer-3.asm +++ b/src/test/ref/pointer-pointer-3.asm @@ -1,10 +1,16 @@ // Tests pointer to pointer in a more complex setup -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-pointer-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label screen1 = $400 .label screen2 = $400+$28 .label screen = 4 +.segment Code __start: { // screen = $400 lda #<$400 diff --git a/src/test/ref/pointer-pointer-3.log b/src/test/ref/pointer-pointer-3.log index eabd7e636..4bbc5e4ae 100644 --- a/src/test/ref/pointer-pointer-3.log +++ b/src/test/ref/pointer-pointer-3.log @@ -194,13 +194,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests pointer to pointer in a more complex setup // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-pointer-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label screen1 = $400 .label screen2 = $400+$28 .label screen = 4 +.segment Code // __start __start: { jmp __init1 @@ -327,13 +333,19 @@ Score: 98 // File Comments // Tests pointer to pointer in a more complex setup // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-pointer-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label screen1 = $400 .label screen2 = $400+$28 .label screen = 4 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/pointer-to-pointer-problem.asm b/src/test/ref/pointer-to-pointer-problem.asm index ea9f870f0..486c217d6 100644 --- a/src/test/ref/pointer-to-pointer-problem.asm +++ b/src/test/ref/pointer-to-pointer-problem.asm @@ -1,9 +1,15 @@ // Demonstrates problem with pointer to pointer -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-to-pointer-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label p1 = 0 .label p2 = 0 +.segment Code main: { // **p1 = **p2 ldy p2 diff --git a/src/test/ref/pointer-to-pointer-problem.log b/src/test/ref/pointer-to-pointer-problem.log index e3cca4be2..bdbadf02c 100644 --- a/src/test/ref/pointer-to-pointer-problem.log +++ b/src/test/ref/pointer-to-pointer-problem.log @@ -72,12 +72,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Demonstrates problem with pointer to pointer // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-to-pointer-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label p1 = 0 .label p2 = 0 +.segment Code // main main: { // [0] *(*p1) = *(*p2) -- _deref_(_deref_qwuc1)=_deref_(_deref_qwuc2) @@ -120,12 +126,18 @@ Score: 49 // File Comments // Demonstrates problem with pointer to pointer // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-to-pointer-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label p1 = 0 .label p2 = 0 +.segment Code // main main: { // **p1 = **p2 diff --git a/src/test/ref/pointer-void-0.asm b/src/test/ref/pointer-void-0.asm index 8d8e60e76..79837f55a 100644 --- a/src/test/ref/pointer-void-0.asm +++ b/src/test/ref/pointer-void-0.asm @@ -1,7 +1,13 @@ // Test simple void pointer (conversion without casting) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-void-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label wp = w diff --git a/src/test/ref/pointer-void-0.log b/src/test/ref/pointer-void-0.log index cb19fa85b..b32a5f80d 100644 --- a/src/test/ref/pointer-void-0.log +++ b/src/test/ref/pointer-void-0.log @@ -94,10 +94,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test simple void pointer (conversion without casting) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-void-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -146,10 +152,16 @@ Score: 23 // File Comments // Test simple void pointer (conversion without casting) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-void-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/pointer-void-1.asm b/src/test/ref/pointer-void-1.asm index 2b6a42d35..9f4ecf3c2 100644 --- a/src/test/ref/pointer-void-1.asm +++ b/src/test/ref/pointer-void-1.asm @@ -1,8 +1,14 @@ // Test simple void pointer - void pointer function -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-void-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label vb = b .label vw = w diff --git a/src/test/ref/pointer-void-1.log b/src/test/ref/pointer-void-1.log index 50513eb5a..8c0526d4f 100644 --- a/src/test/ref/pointer-void-1.log +++ b/src/test/ref/pointer-void-1.log @@ -251,11 +251,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test simple void pointer - void pointer function // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-void-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label vb = b @@ -393,11 +399,17 @@ Score: 111 // File Comments // Test simple void pointer - void pointer function // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-void-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label vb = b diff --git a/src/test/ref/pointer-void-2.asm b/src/test/ref/pointer-void-2.asm index 448274728..7b6599c28 100644 --- a/src/test/ref/pointer-void-2.asm +++ b/src/test/ref/pointer-void-2.asm @@ -1,8 +1,14 @@ // Test simple void pointer - void pointer function -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-void-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label d = 4 .label w = 8 diff --git a/src/test/ref/pointer-void-2.log b/src/test/ref/pointer-void-2.log index b00eed6aa..d1249b782 100644 --- a/src/test/ref/pointer-void-2.log +++ b/src/test/ref/pointer-void-2.log @@ -248,11 +248,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test simple void pointer - void pointer function // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-void-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label d = 4 @@ -384,11 +390,17 @@ Score: 111 // File Comments // Test simple void pointer - void pointer function // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-void-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label d = 4 diff --git a/src/test/ref/pointer-void-3.asm b/src/test/ref/pointer-void-3.asm index 4ff66cb82..fb4dff28c 100644 --- a/src/test/ref/pointer-void-3.asm +++ b/src/test/ref/pointer-void-3.asm @@ -1,9 +1,15 @@ // Test void pointer - issues when assigning returns from malloc() -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-void-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 .label heap_head = 2 +.segment Code main: { .label buf1 = 4 .label buf2 = 6 diff --git a/src/test/ref/pointer-void-3.log b/src/test/ref/pointer-void-3.log index e869ea9dc..d576b3a0b 100644 --- a/src/test/ref/pointer-void-3.log +++ b/src/test/ref/pointer-void-3.log @@ -270,12 +270,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test void pointer - issues when assigning returns from malloc() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-void-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label heap_head = 2 +.segment Code // main main: { .label buf1 = 4 @@ -398,12 +404,18 @@ Score: 106 // File Comments // Test void pointer - issues when assigning returns from malloc() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="pointer-void-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label heap_head = 2 +.segment Code // main main: { .label buf1 = 4 diff --git a/src/test/ref/post-increment-problem-2.asm b/src/test/ref/post-increment-problem-2.asm index e90fed9ca..ae0c41a7d 100644 --- a/src/test/ref/post-increment-problem-2.asm +++ b/src/test/ref/post-increment-problem-2.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="post-increment-problem-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = $400 +.segment Code main: { .label offset = $28*$a ldx #0 diff --git a/src/test/ref/post-increment-problem-2.log b/src/test/ref/post-increment-problem-2.log index dfc30f7a1..cdf582a92 100644 --- a/src/test/ref/post-increment-problem-2.log +++ b/src/test/ref/post-increment-problem-2.log @@ -211,11 +211,17 @@ Uplifting [] best 334 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="post-increment-problem-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { .label offset = $28*$a @@ -304,11 +310,17 @@ Score: 211 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="post-increment-problem-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { .label offset = $28*$a diff --git a/src/test/ref/post-increment-problem-3.asm b/src/test/ref/post-increment-problem-3.asm index 8068c59e3..81c34fa20 100644 --- a/src/test/ref/post-increment-problem-3.asm +++ b/src/test/ref/post-increment-problem-3.asm @@ -1,8 +1,14 @@ // Illustrates a problem with post-incrementing inside the while loop condition // https://gitlab.com/camelot/kickc/-/issues/486 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="post-increment-problem-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // n = *(ptr++) lda mmap @@ -20,4 +26,5 @@ main: { txa jmp __b1 } +.segment Data mmap: .byte 2, $5c, $1a, 3, $60, $1a, 7 diff --git a/src/test/ref/post-increment-problem-3.log b/src/test/ref/post-increment-problem-3.log index 65dcdca8e..5b51bfb15 100644 --- a/src/test/ref/post-increment-problem-3.log +++ b/src/test/ref/post-increment-problem-3.log @@ -130,10 +130,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Illustrates a problem with post-incrementing inside the while loop condition // https://gitlab.com/camelot/kickc/-/issues/486 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="post-increment-problem-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // [0] main::n#0 = *mmap -- vbuaa=_deref_pbuc1 @@ -165,6 +171,7 @@ main: { jmp __b1_from___b2 } // File Data +.segment Data mmap: .byte 2, $5c, $1a, 3, $60, $1a, 7 ASSEMBLER OPTIMIZATIONS @@ -199,10 +206,16 @@ Score: 185 // Illustrates a problem with post-incrementing inside the while loop condition // https://gitlab.com/camelot/kickc/-/issues/486 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="post-increment-problem-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // n = *(ptr++) @@ -233,5 +246,6 @@ main: { jmp __b1 } // File Data +.segment Data mmap: .byte 2, $5c, $1a, 3, $60, $1a, 7 diff --git a/src/test/ref/post-increment-problem-4.asm b/src/test/ref/post-increment-problem-4.asm index 74d36c71f..7314b3a03 100644 --- a/src/test/ref/post-increment-problem-4.asm +++ b/src/test/ref/post-increment-problem-4.asm @@ -1,9 +1,15 @@ // Illustrates a problem with post-incrementing inside the while loop condition // https://gitlab.com/camelot/kickc/-/issues/486 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="post-increment-problem-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label s = 2 ldx #0 @@ -30,5 +36,6 @@ main: { inx jmp __b1 } +.segment Data MESSAGE: .text "hello world!" .byte 0 diff --git a/src/test/ref/post-increment-problem-4.log b/src/test/ref/post-increment-problem-4.log index 86b8c7a7b..300201204 100644 --- a/src/test/ref/post-increment-problem-4.log +++ b/src/test/ref/post-increment-problem-4.log @@ -162,11 +162,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Illustrates a problem with post-incrementing inside the while loop condition // https://gitlab.com/camelot/kickc/-/issues/486 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="post-increment-problem-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label s = 2 @@ -211,6 +217,7 @@ main: { jmp __b1 } // File Data +.segment Data MESSAGE: .text "hello world!" .byte 0 @@ -248,11 +255,17 @@ Score: 471 // Illustrates a problem with post-incrementing inside the while loop condition // https://gitlab.com/camelot/kickc/-/issues/486 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="post-increment-problem-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label s = 2 @@ -296,6 +309,7 @@ main: { jmp __b1 } // File Data +.segment Data MESSAGE: .text "hello world!" .byte 0 diff --git a/src/test/ref/post-increment-problem.asm b/src/test/ref/post-increment-problem.asm index 041e1b332..7ac8e214e 100644 --- a/src/test/ref/post-increment-problem.asm +++ b/src/test/ref/post-increment-problem.asm @@ -1,8 +1,14 @@ // Illustrates a problem with post-incrementing a pointer used in a loop comparison -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="post-increment-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label msg = 2 lda #main::@1#0] -- register_copy jmp __b1 + .segment Data s: .text "time: " .byte 0 s1: .text "qwe " .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -5640,6 +5648,7 @@ memset: { jmp __b2_from___b3 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits @@ -6138,9 +6147,14 @@ Score: 160804 // Tests the speed of printf() // Functions for performing input and output. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="printf-speed.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -6169,6 +6183,7 @@ Score: 160804 .label conio_line_text = $a // The current color cursor line start .label conio_line_color = $c +.segment Code // __start __start: { // __start::__init1 @@ -6373,11 +6388,13 @@ main: { // [21] phi from main::@10 to main::@1 [phi:main::@10->main::@1] // [21] phi main::i#2 = main::i#1 [phi:main::@10->main::@1#0] -- register_copy jmp __b1 + .segment Data s: .text "time: " .byte 0 s1: .text "qwe " .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -7238,6 +7255,7 @@ memset: { jmp __b2 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/printmsg.asm b/src/test/ref/printmsg.asm index ed68442dc..94af783ec 100644 --- a/src/test/ref/printmsg.asm +++ b/src/test/ref/printmsg.asm @@ -1,11 +1,17 @@ // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="printmsg.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label print_screen = $400 .label print_char_cursor = 4 .label print_line_cursor = 6 +.segment Code main: { // print_str(msg) lda #(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .const toD0182_return = (>(BASE_SCREEN&$3fff)*4)|(>BASE_CHARSET)/4&$f @@ -647,6 +653,7 @@ print_char_at: { // } rts } +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... diff --git a/src/test/ref/screen-center-angle.log b/src/test/ref/screen-center-angle.log index e9074755b..341f7e9fc 100644 --- a/src/test/ref/screen-center-angle.log +++ b/src/test/ref/screen-center-angle.log @@ -2618,9 +2618,14 @@ ASSEMBLER BEFORE OPTIMIZATION // C standard library string.h // Functions to manipulate C strings and arrays. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="screen-center-angle.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 @@ -2640,6 +2645,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label CIA2_TIMER_AB = $dd04 .label CHARSET = $2000 .label SCREEN = $2800 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -3566,6 +3572,7 @@ print_char_at: { rts } // File Data +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... @@ -3723,9 +3730,9 @@ Removing instruction jmp __b2 Removing instruction jmp __b3 Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination -Fixing long branch [427] beq __b12 to bne -Fixing long branch [322] bpl __b1 to bmi -Fixing long branch [334] bpl __b4 to bmi +Fixing long branch [433] beq __b12 to bne +Fixing long branch [328] bpl __b1 to bmi +Fixing long branch [340] bpl __b4 to bmi FINAL SYMBOL TABLE const nomodify byte* CHARSET = (byte*) 8192 @@ -3957,9 +3964,14 @@ Score: 1042467 // C standard library string.h // Functions to manipulate C strings and arrays. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="screen-center-angle.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 @@ -3979,6 +3991,7 @@ Score: 1042467 .label CIA2_TIMER_AB = $dd04 .label CHARSET = $2000 .label SCREEN = $2800 +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -4877,6 +4890,7 @@ print_char_at: { rts } // File Data +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... diff --git a/src/test/ref/screen-center-distance.asm b/src/test/ref/screen-center-distance.asm index 5fa323f98..8cf69e4ce 100644 --- a/src/test/ref/screen-center-distance.asm +++ b/src/test/ref/screen-center-distance.asm @@ -1,7 +1,12 @@ // Calculate the distance to the center of the screen - and show it using font-hex -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="screen-center-distance.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_WORD = 2 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 @@ -26,6 +31,7 @@ // Squares for each char value SQUARES[i] = i*i // Initialized by init_squares() .label SQUARES = malloc.return +.segment Code main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .const toD0182_return = (>(BASE_SCREEN&$3fff)*4)|(>BASE_CHARSET)/4&$f @@ -648,6 +654,7 @@ print_char_at: { // } rts } +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/screen-center-distance.log b/src/test/ref/screen-center-distance.log index aceab25e3..3c99603a5 100644 --- a/src/test/ref/screen-center-distance.log +++ b/src/test/ref/screen-center-distance.log @@ -3196,9 +3196,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Calculate the distance to the center of the screen - and show it using font-hex // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="screen-center-distance.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 // Timer Control - Start/stop timer (0:stop, 1: start) @@ -3224,6 +3229,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Squares for each char value SQUARES[i] = i*i // Initialized by init_squares() .label SQUARES = malloc.return +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -4174,6 +4180,7 @@ print_char_at: { rts } // File Data +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 print_hextab: .text "0123456789abcdef" @@ -4581,9 +4588,14 @@ Score: 201167 // File Comments // Calculate the distance to the center of the screen - and show it using font-hex // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="screen-center-distance.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 // Timer Control - Start/stop timer (0:stop, 1: start) @@ -4609,6 +4621,7 @@ Score: 201167 // Squares for each char value SQUARES[i] = i*i // Initialized by init_squares() .label SQUARES = malloc.return +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -5523,6 +5536,7 @@ print_char_at: { rts } // File Data +.segment Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/screen-show-spiral-buckets.asm b/src/test/ref/screen-show-spiral-buckets.asm index e72379939..c1de220d9 100644 --- a/src/test/ref/screen-show-spiral-buckets.asm +++ b/src/test/ref/screen-show-spiral-buckets.asm @@ -1,8 +1,13 @@ // Fill screen using a spiral based on distance-to-center / angle-to-center // Utilizes a bucket sort for identifying the minimum angle/distance -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="screen-show-spiral-buckets.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const SIZEOF_WORD = 2 // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f @@ -39,6 +44,7 @@ .label BUCKETS = $18 // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes) .label BUCKET_IDX = $1f +.segment Code __start: { // malloc(1000) lda #<$3e8 @@ -1155,6 +1161,7 @@ bsearch16u: { tax jmp __b3 } +.segment Data // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i__start::__init1] @@ -6850,6 +6856,7 @@ bsearch16u: { jmp __b3 } // File Data +.segment Data // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i__start::__init1] @@ -9134,6 +9147,7 @@ bsearch16u: { jmp __b3 } // File Data +.segment Data // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i__start::__init1] @@ -5184,6 +5190,7 @@ bsearch16u: { jmp __b3 } // File Data +.segment Data // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i__start::__init1] @@ -6930,6 +6943,7 @@ bsearch16u: { jmp __b3 } // File Data +.segment Data // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; iprint_points::@1#1] -- register_copy // [20] phi print_points::i#10 = print_points::i#1 [phi:print_points::@7->print_points::@1#2] -- register_copy jmp __b1 + .segment Data str: .text " " .byte 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -1940,6 +1948,7 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" // All points points: .fill NUM_POINTS*SIZEOF_POINT, 0 @@ -2150,9 +2159,14 @@ Score: 10419 // }; // Point points[NUM_POINTS]; // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="semi-struct-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The size of a point .const SIZEOF_POINT = 2 @@ -2161,6 +2175,7 @@ Score: 10419 .label print_screen = $400 .label print_line_cursor = 7 .label print_char_cursor = 5 +.segment Code // main // Initialize some points and print them main: { @@ -2345,9 +2360,11 @@ print_points: { // [20] phi print_char_cursor#48 = print_char_cursor#66 [phi:print_points::@7->print_points::@1#1] -- register_copy // [20] phi print_points::i#10 = print_points::i#1 [phi:print_points::@7->print_points::@1#2] -- register_copy jmp __b1 + .segment Data str: .text " " .byte 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -2540,6 +2557,7 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" // All points points: .fill NUM_POINTS*SIZEOF_POINT, 0 diff --git a/src/test/ref/semi-struct-2.asm b/src/test/ref/semi-struct-2.asm index e9bf9d56f..4e9652e40 100644 --- a/src/test/ref/semi-struct-2.asm +++ b/src/test/ref/semi-struct-2.asm @@ -17,9 +17,14 @@ // }; // typedef struct fileentry ENTRY; // ENTRY files[MAX_FILES]; -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="semi-struct-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const KEY_SPACE = $3c // The size of a file ENTRY .const SIZEOF_ENTRY = $12 @@ -34,6 +39,7 @@ .label print_char_cursor = $a .label print_line_cursor = $10 .label print_line_cursor_1 = 4 +.segment Code // Initialize 2 file entries and print them main: { .const fileEntry1_idx = 1 @@ -204,6 +210,7 @@ main: { jsr print_cls // } rts + .segment Data str: .text "** entry 1 **" .byte 0 str1: .text "- press space -" @@ -211,6 +218,7 @@ main: { str2: .text "** entry 2 **" .byte 0 } +.segment Code // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { // CIA1->PORT_A_DDR = $ff @@ -765,6 +773,7 @@ printEntry: { jsr print_ln // } rts + .segment Data str: .text "bufdisk " .byte 0 str1: .text "bufedit " @@ -792,6 +801,7 @@ printEntry: { str12: .text "tlo " .byte 0 } +.segment Code // Determines whether a specific key is currently pressed by accessing the matrix directly // The key is a keyboard code defined from the keyboard matrix by %00rrrccc, where rrr is the row ID (0-7) and ccc is the column ID (0-7) // All keys exist as as KEY_XXX constants. @@ -904,6 +914,7 @@ keyboard_matrix_read: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f diff --git a/src/test/ref/semi-struct-2.log b/src/test/ref/semi-struct-2.log index 0cc9f8b7b..9cc66098c 100644 --- a/src/test/ref/semi-struct-2.log +++ b/src/test/ref/semi-struct-2.log @@ -5044,9 +5044,14 @@ ASSEMBLER BEFORE OPTIMIZATION // typedef struct fileentry ENTRY; // ENTRY files[MAX_FILES]; // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="semi-struct-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const KEY_SPACE = $3c // The size of a file ENTRY @@ -5062,6 +5067,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label print_char_cursor = $a .label print_line_cursor = $10 .label print_line_cursor_1 = 4 +.segment Code // main // Initialize 2 file entries and print them main: { @@ -5421,6 +5427,7 @@ main: { __breturn: // [60] return rts + .segment Data str: .text "** entry 1 **" .byte 0 str1: .text "- press space -" @@ -5428,6 +5435,7 @@ main: { str2: .text "** entry 2 **" .byte 0 } +.segment Code // keyboard_init // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { @@ -6533,6 +6541,7 @@ printEntry: { __breturn: // [223] return rts + .segment Data str: .text "bufdisk " .byte 0 str1: .text "bufedit " @@ -6560,6 +6569,7 @@ printEntry: { str12: .text "tlo " .byte 0 } +.segment Code // keyboard_key_pressed // Determines whether a specific key is currently pressed by accessing the matrix directly // The key is a keyboard code defined from the keyboard matrix by %00rrrccc, where rrr is the row ID (0-7) and ccc is the column ID (0-7) @@ -6737,6 +6747,7 @@ keyboard_matrix_read: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f @@ -7434,9 +7445,14 @@ Score: 3913 // typedef struct fileentry ENTRY; // ENTRY files[MAX_FILES]; // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="semi-struct-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const KEY_SPACE = $3c // The size of a file ENTRY @@ -7452,6 +7468,7 @@ Score: 3913 .label print_char_cursor = $a .label print_line_cursor = $10 .label print_line_cursor_1 = 4 +.segment Code // main // Initialize 2 file entries and print them main: { @@ -7758,6 +7775,7 @@ main: { // } // [60] return rts + .segment Data str: .text "** entry 1 **" .byte 0 str1: .text "- press space -" @@ -7765,6 +7783,7 @@ main: { str2: .text "** entry 2 **" .byte 0 } +.segment Code // keyboard_init // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { @@ -8703,6 +8722,7 @@ printEntry: { // } // [223] return rts + .segment Data str: .text "bufdisk " .byte 0 str1: .text "bufedit " @@ -8730,6 +8750,7 @@ printEntry: { str12: .text "tlo " .byte 0 } +.segment Code // keyboard_key_pressed // Determines whether a specific key is currently pressed by accessing the matrix directly // The key is a keyboard code defined from the keyboard matrix by %00rrrccc, where rrr is the row ID (0-7) and ccc is the column ID (0-7) @@ -8903,6 +8924,7 @@ keyboard_matrix_read: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f diff --git a/src/test/ref/sequence-locality-0.asm b/src/test/ref/sequence-locality-0.asm index 68dbd4f12..ce1ad8a08 100644 --- a/src/test/ref/sequence-locality-0.asm +++ b/src/test/ref/sequence-locality-0.asm @@ -1,7 +1,13 @@ // Tests statement sequence locality of if(cond) { stmt1; } else { stmt2; } -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sequence-locality-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 ldy #0 diff --git a/src/test/ref/sequence-locality-0.log b/src/test/ref/sequence-locality-0.log index b117f08a0..40aa75ddc 100644 --- a/src/test/ref/sequence-locality-0.log +++ b/src/test/ref/sequence-locality-0.log @@ -198,10 +198,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests statement sequence locality of if(cond) { stmt1; } else { stmt2; } // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sequence-locality-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -304,10 +310,16 @@ Score: 406 // File Comments // Tests statement sequence locality of if(cond) { stmt1; } else { stmt2; } // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sequence-locality-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/sequence-locality-1.asm b/src/test/ref/sequence-locality-1.asm index 8393e34af..59188117e 100644 --- a/src/test/ref/sequence-locality-1.asm +++ b/src/test/ref/sequence-locality-1.asm @@ -1,7 +1,13 @@ // Tests statement sequence locality of if(cond) { stmt1; } else { stmt2; } -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sequence-locality-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 ldx #0 diff --git a/src/test/ref/sequence-locality-1.log b/src/test/ref/sequence-locality-1.log index 74789e633..24df79ef6 100644 --- a/src/test/ref/sequence-locality-1.log +++ b/src/test/ref/sequence-locality-1.log @@ -202,10 +202,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests statement sequence locality of if(cond) { stmt1; } else { stmt2; } // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sequence-locality-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -305,10 +311,16 @@ Score: 316 // File Comments // Tests statement sequence locality of if(cond) { stmt1; } else { stmt2; } // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sequence-locality-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/sieve-min.asm b/src/test/ref/sieve-min.asm index 0c33c9181..e396abe5b 100644 --- a/src/test/ref/sieve-min.asm +++ b/src/test/ref/sieve-min.asm @@ -1,8 +1,13 @@ // C standard library string.h // Functions to manipulate C strings and arrays. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sieve-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const COUNT = $4000 /* Up to what number? */ .const SQRT_COUNT = $80 @@ -11,6 +16,7 @@ .label sieve = $1000 .label print_screen = $400 .label print_char_cursor = $a +.segment Code main: { .label i = $a .label sieve_i = 2 @@ -232,4 +238,5 @@ print_uchar: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/sieve-min.log b/src/test/ref/sieve-min.log index 2529cca5e..8d9108a40 100644 --- a/src/test/ref/sieve-min.log +++ b/src/test/ref/sieve-min.log @@ -988,9 +988,14 @@ ASSEMBLER BEFORE OPTIMIZATION // C standard library string.h // Functions to manipulate C strings and arrays. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sieve-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const COUNT = $4000 /* Up to what number? */ @@ -1000,6 +1005,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label sieve = $1000 .label print_screen = $400 .label print_char_cursor = $a +.segment Code // main main: { .label i = $a @@ -1333,6 +1339,7 @@ print_uchar: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -1468,9 +1475,14 @@ Score: 9717 // C standard library string.h // Functions to manipulate C strings and arrays. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sieve-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const COUNT = $4000 /* Up to what number? */ @@ -1480,6 +1492,7 @@ Score: 9717 .label sieve = $1000 .label print_screen = $400 .label print_char_cursor = $a +.segment Code // main main: { .label i = $a @@ -1803,5 +1816,6 @@ print_uchar: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/sieve.asm b/src/test/ref/sieve.asm index ea7e67f23..387081e6e 100644 --- a/src/test/ref/sieve.asm +++ b/src/test/ref/sieve.asm @@ -1,8 +1,13 @@ // C standard library string.h // Functions to manipulate C strings and arrays. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sieve.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Clock cycles per frame (on a C64 PAL) .const CLOCKS_PER_FRAME = $4cc8 // Frames per second (on a C64 PAL) @@ -35,6 +40,7 @@ .label print_char_cursor = $a .label print_line_cursor = $c .label print_char_cursor_1 = $c +.segment Code main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>toD0181_gfx)/4&$f .label toD0181_gfx = $1800 @@ -288,6 +294,7 @@ main: { adc.z i+1 sta.z j+1 jmp __b5 + .segment Data str: .text "Sieve benchmark - calculating primes" .byte 0 str1: .text "between 2 and " @@ -299,6 +306,7 @@ main: { str4: .text "..." .byte 0 } +.segment Code // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) @@ -891,6 +899,7 @@ ultoa_append: { sta.z value+3 jmp __b1 } +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/sieve.log b/src/test/ref/sieve.log index dce3ea38f..05e1ab645 100644 --- a/src/test/ref/sieve.log +++ b/src/test/ref/sieve.log @@ -4027,9 +4027,14 @@ ASSEMBLER BEFORE OPTIMIZATION // C standard library string.h // Functions to manipulate C strings and arrays. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sieve.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Clock cycles per frame (on a C64 PAL) .const CLOCKS_PER_FRAME = $4cc8 @@ -4063,6 +4068,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label print_char_cursor = $a .label print_line_cursor = $c .label print_char_cursor_1 = $c +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>toD0181_gfx)/4&$f @@ -4500,6 +4506,7 @@ main: { adc.z i+1 sta.z j+1 jmp __b5_from___b6 + .segment Data str: .text "Sieve benchmark - calculating primes" .byte 0 str1: .text "between 2 and " @@ -4511,6 +4518,7 @@ main: { str4: .text "..." .byte 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -5401,6 +5409,7 @@ ultoa_append: { jmp __b1 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits @@ -5628,7 +5637,7 @@ Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda.z digit_value+1 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [108] bcc __b2 to bcs +Fixing long branch [114] bcc __b2 to bcs FINAL SYMBOL TABLE const nomodify struct MOS6526_CIA* CIA2 = (struct MOS6526_CIA*) 56576 @@ -5905,9 +5914,14 @@ Score: 82322 // C standard library string.h // Functions to manipulate C strings and arrays. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sieve.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Clock cycles per frame (on a C64 PAL) .const CLOCKS_PER_FRAME = $4cc8 @@ -5941,6 +5955,7 @@ Score: 82322 .label print_char_cursor = $a .label print_line_cursor = $c .label print_char_cursor_1 = $c +.segment Code // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>toD0181_gfx)/4&$f @@ -6337,6 +6352,7 @@ main: { adc.z i+1 sta.z j+1 jmp __b5 + .segment Data str: .text "Sieve benchmark - calculating primes" .byte 0 str1: .text "between 2 and " @@ -6348,6 +6364,7 @@ main: { str4: .text "..." .byte 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -7210,6 +7227,7 @@ ultoa_append: { jmp __b1 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/signed-bytes.asm b/src/test/ref/signed-bytes.asm index 18dc81217..ecb135055 100644 --- a/src/test/ref/signed-bytes.asm +++ b/src/test/ref/signed-bytes.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-bytes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 ldy #0 diff --git a/src/test/ref/signed-bytes.log b/src/test/ref/signed-bytes.log index 48559ac46..4d56956ee 100644 --- a/src/test/ref/signed-bytes.log +++ b/src/test/ref/signed-bytes.log @@ -141,10 +141,16 @@ Uplifting [] best 376 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-bytes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -215,10 +221,16 @@ Score: 316 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-bytes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/signed-char-comparison.asm b/src/test/ref/signed-char-comparison.asm index fedcad0cd..46b85bf94 100644 --- a/src/test/ref/signed-char-comparison.asm +++ b/src/test/ref/signed-char-comparison.asm @@ -1,9 +1,15 @@ // Illustrates problem with > comparison of signed chars. // Reported by Danny Spijksma -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-char-comparison.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #-$80 __b1: diff --git a/src/test/ref/signed-char-comparison.log b/src/test/ref/signed-char-comparison.log index 40225ae6b..880b4d551 100644 --- a/src/test/ref/signed-char-comparison.log +++ b/src/test/ref/signed-char-comparison.log @@ -199,11 +199,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Illustrates problem with > comparison of signed chars. // Reported by Danny Spijksma // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-char-comparison.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -300,11 +306,17 @@ Score: 179 // Illustrates problem with > comparison of signed chars. // Reported by Danny Spijksma // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-char-comparison.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/signed-indexed-subtract.asm b/src/test/ref/signed-indexed-subtract.asm index 7f4be649b..c0368d4cd 100644 --- a/src/test/ref/signed-indexed-subtract.asm +++ b/src/test/ref/signed-indexed-subtract.asm @@ -1,10 +1,16 @@ // Tests that signed indexed subtract works as intended -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-indexed-subtract.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label print_screen = $400 .label print_line_cursor = 3 .label print_char_cursor = 7 +.segment Code main: { .label j = 2 ldy #0 @@ -221,5 +227,6 @@ print_uchar: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" words: .word -$6000, -$600, -$60, -6, 0, 6, $60, $600, $6000 diff --git a/src/test/ref/signed-indexed-subtract.log b/src/test/ref/signed-indexed-subtract.log index 070901f92..219fe748d 100644 --- a/src/test/ref/signed-indexed-subtract.log +++ b/src/test/ref/signed-indexed-subtract.log @@ -1187,13 +1187,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that signed indexed subtract works as intended // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-indexed-subtract.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_line_cursor = 3 .label print_char_cursor = 7 +.segment Code // main main: { .label j = 2 @@ -1584,6 +1590,7 @@ print_uchar: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" words: .word -$6000, -$600, -$60, -6, 0, 6, $60, $600, $6000 @@ -1761,13 +1768,19 @@ Score: 5404 // File Comments // Tests that signed indexed subtract works as intended // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-indexed-subtract.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_line_cursor = 3 .label print_char_cursor = 7 +.segment Code // main main: { .label j = 2 @@ -2124,6 +2137,7 @@ print_uchar: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" words: .word -$6000, -$600, -$60, -6, 0, 6, $60, $600, $6000 diff --git a/src/test/ref/signed-word-minus-byte-2.asm b/src/test/ref/signed-word-minus-byte-2.asm index 0859f1baa..c32eee3ab 100644 --- a/src/test/ref/signed-word-minus-byte-2.asm +++ b/src/test/ref/signed-word-minus-byte-2.asm @@ -1,7 +1,13 @@ // Tests subtracting bytes from signed words -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-word-minus-byte-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 .label w1 = 2 diff --git a/src/test/ref/signed-word-minus-byte-2.log b/src/test/ref/signed-word-minus-byte-2.log index 4665e8fc4..d2fbf8cae 100644 --- a/src/test/ref/signed-word-minus-byte-2.log +++ b/src/test/ref/signed-word-minus-byte-2.log @@ -161,10 +161,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests subtracting bytes from signed words // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-word-minus-byte-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -251,10 +257,16 @@ Score: 591 // File Comments // Tests subtracting bytes from signed words // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-word-minus-byte-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/signed-words.asm b/src/test/ref/signed-words.asm index 0dc795922..a76ab7484 100644 --- a/src/test/ref/signed-words.asm +++ b/src/test/ref/signed-words.asm @@ -1,9 +1,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-words.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const WHITE = 1 .const g = -5 .label SPRITES_XPOS = $d000 @@ -25,6 +30,7 @@ .label xpos = 8 .label ypos = $a .label xvel = 4 +.segment Code main: { // init() jsr init diff --git a/src/test/ref/signed-words.log b/src/test/ref/signed-words.log index 2c28aea0d..6f61fbe94 100644 --- a/src/test/ref/signed-words.log +++ b/src/test/ref/signed-words.log @@ -926,9 +926,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-words.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const WHITE = 1 .const g = -5 @@ -951,6 +956,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label xpos = 8 .label ypos = $a .label xvel = 4 +.segment Code // main main: { // [1] call init @@ -1390,9 +1396,14 @@ Score: 6364 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="signed-words.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const WHITE = 1 .const g = -5 @@ -1415,6 +1426,7 @@ Score: 6364 .label xpos = 8 .label ypos = $a .label xvel = 4 +.segment Code // main main: { // init() diff --git a/src/test/ref/simple-loop.asm b/src/test/ref/simple-loop.asm index 578f6fe52..66157f489 100644 --- a/src/test/ref/simple-loop.asm +++ b/src/test/ref/simple-loop.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="simple-loop.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 diff --git a/src/test/ref/simple-loop.log b/src/test/ref/simple-loop.log index 635453e93..14dcb1943 100644 --- a/src/test/ref/simple-loop.log +++ b/src/test/ref/simple-loop.log @@ -128,10 +128,16 @@ Uplifting [] best 331 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="simple-loop.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -192,10 +198,16 @@ Score: 271 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="simple-loop.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/sinus-basic.asm b/src/test/ref/sinus-basic.asm index bea0ff69d..e24fa012d 100644 --- a/src/test/ref/sinus-basic.asm +++ b/src/test/ref/sinus-basic.asm @@ -1,14 +1,20 @@ // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinus-basic.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Zeropage addresses used to hold lo/hi-bytes of addresses of float numbers in MEM .label memLo = $fe .label memHi = $ff .label print_screen = $400 .label print_line_cursor = 3 .label print_char_cursor = 5 +.segment Code main: { .label f_2pi = $e2e5 .label i = 2 @@ -92,9 +98,11 @@ main: { lda.z print_line_cursor+1 sta.z print_char_cursor+1 jmp __b1 + .segment Data f_i: .byte 0, 0, 0, 0, 0 f_127: .byte 0, 0, 0, 0, 0 } +.segment Code // FAC = unsigned int // Set the FAC (floating point accumulator) to the integer value of a 16bit unsigned int // setFAC(word zp(7) w) @@ -302,4 +310,5 @@ print_char: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/sinus-basic.log b/src/test/ref/sinus-basic.log index 567e8cf1c..60d7520d8 100644 --- a/src/test/ref/sinus-basic.log +++ b/src/test/ref/sinus-basic.log @@ -1279,9 +1279,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinus-basic.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Zeropage addresses used to hold lo/hi-bytes of addresses of float numbers in MEM .label memLo = $fe @@ -1289,6 +1294,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label print_screen = $400 .label print_line_cursor = 3 .label print_char_cursor = 5 +.segment Code // main main: { .label f_2pi = $e2e5 @@ -1482,9 +1488,11 @@ main: { // [6] phi print_char_cursor#34 = print_char_cursor#53 [phi:main::@15->main::@1#1] -- register_copy // [6] phi main::i#10 = main::i#1 [phi:main::@15->main::@1#2] -- register_copy jmp __b1 + .segment Data f_i: .byte 0, 0, 0, 0, 0 f_127: .byte 0, 0, 0, 0, 0 } +.segment Code // setFAC // FAC = unsigned int // Set the FAC (floating point accumulator) to the integer value of a 16bit unsigned int @@ -1804,6 +1812,7 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -2025,9 +2034,14 @@ Score: 4961 // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinus-basic.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // Zeropage addresses used to hold lo/hi-bytes of addresses of float numbers in MEM .label memLo = $fe @@ -2035,6 +2049,7 @@ Score: 4961 .label print_screen = $400 .label print_line_cursor = 3 .label print_char_cursor = 5 +.segment Code // main main: { .label f_2pi = $e2e5 @@ -2192,9 +2207,11 @@ main: { // [6] phi print_char_cursor#34 = print_char_cursor#53 [phi:main::@15->main::@1#1] -- register_copy // [6] phi main::i#10 = main::i#1 [phi:main::@15->main::@1#2] -- register_copy jmp __b1 + .segment Data f_i: .byte 0, 0, 0, 0, 0 f_127: .byte 0, 0, 0, 0, 0 } +.segment Code // setFAC // FAC = unsigned int // Set the FAC (floating point accumulator) to the integer value of a 16bit unsigned int @@ -2505,5 +2522,6 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/sinusgen16.asm b/src/test/ref/sinusgen16.asm index 5ad2ddd30..4c3e5165d 100644 --- a/src/test/ref/sinusgen16.asm +++ b/src/test/ref/sinusgen16.asm @@ -4,9 +4,14 @@ // Generates sine using the series sin(x) = x - x^/3! + x^-5! - x^7/7! ... // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgen16.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 // PI in u[4.28] format @@ -18,6 +23,7 @@ // Remainder after unsigned 16-bit division .label rem16u = $12 .label print_char_cursor = $22 +.segment Code main: { .label wavelength = $78 .label sw = $a @@ -80,12 +86,14 @@ main: { inc.z st1+1 !: jmp __b1 + .segment Data sintab1: .fill 2*$78, 0 str: .text " " .byte 0 str1: .text " " .byte 0 } +.segment Code // Generate signed (large) unsigned int sine table - on the full -$7fff - $7fff range // sintab - the table to generate into // wavelength - the number of sine points in a total sine wavelength (the size of the table) @@ -735,4 +743,5 @@ mul16u: { rol.z mb+3 jmp __b1 } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/sinusgen16.log b/src/test/ref/sinusgen16.log index 3d63cfb83..4ca5426a2 100644 --- a/src/test/ref/sinusgen16.log +++ b/src/test/ref/sinusgen16.log @@ -2901,9 +2901,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgen16.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 @@ -2916,6 +2921,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Remainder after unsigned 16-bit division .label rem16u = $12 .label print_char_cursor = $22 +.segment Code // main main: { .label wavelength = $78 @@ -3031,12 +3037,14 @@ main: { // [4] phi print_char_cursor#20 = print_char_cursor#1 [phi:main::@7->main::@1#0] -- register_copy // [4] phi main::st1#2 = main::st1#1 [phi:main::@7->main::@1#1] -- register_copy jmp __b1 + .segment Data sintab1: .fill 2*$78, 0 str: .text " " .byte 0 str1: .text " " .byte 0 } +.segment Code // sin16s_gen // Generate signed (large) unsigned int sine table - on the full -$7fff - $7fff range // sintab - the table to generate into @@ -4012,6 +4020,7 @@ mul16u: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -4439,9 +4448,14 @@ Score: 19169 // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgen16.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 @@ -4454,6 +4468,7 @@ Score: 19169 // Remainder after unsigned 16-bit division .label rem16u = $12 .label print_char_cursor = $22 +.segment Code // main main: { .label wavelength = $78 @@ -4555,12 +4570,14 @@ main: { // [4] phi print_char_cursor#20 = print_char_cursor#1 [phi:main::@7->main::@1#0] -- register_copy // [4] phi main::st1#2 = main::st1#1 [phi:main::@7->main::@1#1] -- register_copy jmp __b1 + .segment Data sintab1: .fill 2*$78, 0 str: .text " " .byte 0 str1: .text " " .byte 0 } +.segment Code // sin16s_gen // Generate signed (large) unsigned int sine table - on the full -$7fff - $7fff range // sintab - the table to generate into @@ -5500,5 +5517,6 @@ mul16u: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/sinusgen16b.asm b/src/test/ref/sinusgen16b.asm index ab291e1ae..e1a00f59f 100644 --- a/src/test/ref/sinusgen16b.asm +++ b/src/test/ref/sinusgen16b.asm @@ -4,9 +4,14 @@ // Generates sine using the series sin(x) = x - x^/3! + x^-5! - x^7/7! ... // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgen16b.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 // PI in u[4.28] format @@ -22,6 +27,7 @@ // Remainder after unsigned 16-bit division .label rem16u = $17 .label print_char_cursor = $15 +.segment Code main: { .label wavelength = $78 .label sw = $d @@ -99,6 +105,7 @@ main: { bne __b1 // } rts + .segment Data sintab1: .fill 2*$78, 0 sintab2: .fill 2*$78, 0 str: .text " " @@ -106,6 +113,7 @@ main: { str1: .text " " .byte 0 } +.segment Code // Generate signed (large) unsigned int sine table - on the full -$7fff - $7fff range // sintab - the table to generate into // wavelength - the number of sine points in a total sine wavelength (the size of the table) @@ -1005,4 +1013,5 @@ mul16u: { rol.z mb+3 jmp __b1 } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/sinusgen16b.log b/src/test/ref/sinusgen16b.log index ee8c99221..a7fb39881 100644 --- a/src/test/ref/sinusgen16b.log +++ b/src/test/ref/sinusgen16b.log @@ -3855,9 +3855,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgen16b.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 @@ -3874,6 +3879,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Remainder after unsigned 16-bit division .label rem16u = $17 .label print_char_cursor = $15 +.segment Code // main main: { .label wavelength = $78 @@ -4016,6 +4022,7 @@ main: { __breturn: // [20] return rts + .segment Data sintab1: .fill 2*$78, 0 sintab2: .fill 2*$78, 0 str: .text " " @@ -4023,6 +4030,7 @@ main: { str1: .text " " .byte 0 } +.segment Code // sin16s_gen // Generate signed (large) unsigned int sine table - on the full -$7fff - $7fff range // sintab - the table to generate into @@ -5365,6 +5373,7 @@ mul16u: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -5923,9 +5932,14 @@ Score: 21568 // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgen16b.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 @@ -5942,6 +5956,7 @@ Score: 21568 // Remainder after unsigned 16-bit division .label rem16u = $17 .label print_char_cursor = $15 +.segment Code // main main: { .label wavelength = $78 @@ -6067,6 +6082,7 @@ main: { // } // [20] return rts + .segment Data sintab1: .fill 2*$78, 0 sintab2: .fill 2*$78, 0 str: .text " " @@ -6074,6 +6090,7 @@ main: { str1: .text " " .byte 0 } +.segment Code // sin16s_gen // Generate signed (large) unsigned int sine table - on the full -$7fff - $7fff range // sintab - the table to generate into @@ -7371,5 +7388,6 @@ mul16u: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/sinusgen8.asm b/src/test/ref/sinusgen8.asm index 84ded3166..459eff51a 100644 --- a/src/test/ref/sinusgen8.asm +++ b/src/test/ref/sinusgen8.asm @@ -3,9 +3,14 @@ // Generates sine using the series sin(x) = x - x^/3! + x^-5! - x^7/7! ... // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgen8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // PI*2 in u[4.12] format .const PI2_u4f12 = $6488 // PI in u[4.12] format @@ -15,6 +20,7 @@ .const wavelength = $c0 .label print_screen = $400 .label print_char_cursor = 8 +.segment Code main: { .label i = 2 // sin8s_gen(sintab2, wavelength) @@ -45,9 +51,11 @@ main: { bne __b1 // } rts + .segment Data str: .text " " .byte 0 } +.segment Code // Generate signed char sine table - on the full -$7f - $7f range // sintab - the table to generate into // wavelength - the number of sine points in a total sine wavelength (the size of the table) @@ -540,6 +548,7 @@ mul8u: { rol.z mb+1 jmp __b1 } +.segment Data print_hextab: .text "0123456789abcdef" sintab2: .fill $c0, 0 // .fill $c0, round(127.5*sin(i*2*PI/$c0)) diff --git a/src/test/ref/sinusgen8.log b/src/test/ref/sinusgen8.log index aa82e73bb..1faa06037 100644 --- a/src/test/ref/sinusgen8.log +++ b/src/test/ref/sinusgen8.log @@ -2513,9 +2513,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgen8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // PI*2 in u[4.12] format .const PI2_u4f12 = $6488 @@ -2526,6 +2531,7 @@ ASSEMBLER BEFORE OPTIMIZATION .const wavelength = $c0 .label print_screen = $400 .label print_char_cursor = 8 +.segment Code // main main: { .label i = 2 @@ -2592,9 +2598,11 @@ main: { __breturn: // [12] return rts + .segment Data str: .text " " .byte 0 } +.segment Code // sin8s_gen // Generate signed char sine table - on the full -$7f - $7f range // sintab - the table to generate into @@ -3396,6 +3404,7 @@ mul8u: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" sintab2: .fill $c0, 0 // .fill $c0, round(127.5*sin(i*2*PI/$c0)) @@ -3813,9 +3822,14 @@ Score: 14264 // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgen8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // PI*2 in u[4.12] format .const PI2_u4f12 = $6488 @@ -3826,6 +3840,7 @@ Score: 14264 .const wavelength = $c0 .label print_screen = $400 .label print_char_cursor = 8 +.segment Code // main main: { .label i = 2 @@ -3882,9 +3897,11 @@ main: { // } // [12] return rts + .segment Data str: .text " " .byte 0 } +.segment Code // sin8s_gen // Generate signed char sine table - on the full -$7f - $7f range // sintab - the table to generate into @@ -4649,6 +4666,7 @@ mul8u: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" sintab2: .fill $c0, 0 // .fill $c0, round(127.5*sin(i*2*PI/$c0)) diff --git a/src/test/ref/sinusgen8b.asm b/src/test/ref/sinusgen8b.asm index 87dbb7729..394e7f224 100644 --- a/src/test/ref/sinusgen8b.asm +++ b/src/test/ref/sinusgen8b.asm @@ -3,9 +3,14 @@ // Generates sine using the series sin(x) = x - x^/3! + x^-5! - x^7/7! ... // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgen8b.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 // PI in u[4.28] format @@ -23,6 +28,7 @@ // Remainder after unsigned 16-bit division .label rem16u = $19 .label print_char_cursor = $f +.segment Code main: { .label wavelength = $c0 .label __3 = $19 @@ -89,11 +95,13 @@ main: { bne __b1 // } rts + .segment Data sintabb: .fill $c0, 0 sintabw: .fill 2*$c0, 0 str: .text " " .byte 0 } +.segment Code // Generate signed char sine table - on the full -$7f - $7f range // sintab - the table to generate into // wavelength - the number of sine points in a total sine wavelength (the size of the table) @@ -1026,4 +1034,5 @@ mul16u: { rol.z mb+3 jmp __b1 } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/sinusgen8b.log b/src/test/ref/sinusgen8b.log index d24e87b0f..e7e269521 100644 --- a/src/test/ref/sinusgen8b.log +++ b/src/test/ref/sinusgen8b.log @@ -4110,9 +4110,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgen8b.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 @@ -4131,6 +4136,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Remainder after unsigned 16-bit division .label rem16u = $19 .label print_char_cursor = $f +.segment Code // main main: { .label wavelength = $c0 @@ -4242,11 +4248,13 @@ main: { __breturn: // [20] return rts + .segment Data sintabb: .fill $c0, 0 sintabw: .fill 2*$c0, 0 str: .text " " .byte 0 } +.segment Code // sin8s_gen // Generate signed char sine table - on the full -$7f - $7f range // sintab - the table to generate into @@ -5669,6 +5677,7 @@ mul16u: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -6299,9 +6308,14 @@ Score: 27770 // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgen8b.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 @@ -6320,6 +6334,7 @@ Score: 27770 // Remainder after unsigned 16-bit division .label rem16u = $19 .label print_char_cursor = $f +.segment Code // main main: { .label wavelength = $c0 @@ -6422,11 +6437,13 @@ main: { // } // [20] return rts + .segment Data sintabb: .fill $c0, 0 sintabw: .fill 2*$c0, 0 str: .text " " .byte 0 } +.segment Code // sin8s_gen // Generate signed char sine table - on the full -$7f - $7f range // sintab - the table to generate into @@ -7798,5 +7815,6 @@ mul16u: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/sinusgenscale8.asm b/src/test/ref/sinusgenscale8.asm index 752a8242b..460448704 100644 --- a/src/test/ref/sinusgenscale8.asm +++ b/src/test/ref/sinusgenscale8.asm @@ -3,9 +3,14 @@ // Generates sine using the series sin(x) = x - x^/3! + x^-5! - x^7/7! ... // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgenscale8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // PI*2 in u[4.12] format .const PI2_u4f12 = $6488 // PI in u[4.12] format @@ -15,6 +20,7 @@ .label print_screen = $400 .label print_char_cursor = $10 .label print_line_cursor = $a +.segment Code main: { .label tabsize = $14 // print_cls() @@ -23,8 +29,10 @@ main: { jsr sin8u_table // } rts + .segment Data sintab: .fill $14, 0 } +.segment Code // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) @@ -226,6 +234,7 @@ sin8u_table: { inc.z i+1 !: jmp __b1 + .segment Data str: .text "step:" .byte 0 str1: .text " min:" @@ -245,6 +254,7 @@ sin8u_table: { str8: .text " trans: " .byte 0 } +.segment Code // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { .const c = ' ' @@ -751,4 +761,5 @@ mul8u: { rol.z mb+1 jmp __b1 } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/sinusgenscale8.log b/src/test/ref/sinusgenscale8.log index 24790c23e..3e6252a8f 100644 --- a/src/test/ref/sinusgenscale8.log +++ b/src/test/ref/sinusgenscale8.log @@ -3853,9 +3853,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgenscale8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // PI*2 in u[4.12] format .const PI2_u4f12 = $6488 @@ -3866,6 +3871,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label print_screen = $400 .label print_char_cursor = $10 .label print_line_cursor = $a +.segment Code // main main: { .label tabsize = $14 @@ -3887,8 +3893,10 @@ main: { __breturn: // [4] return rts + .segment Data sintab: .fill $14, 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -4290,6 +4298,7 @@ sin8u_table: { // [33] phi sin8u_table::x#10 = sin8u_table::x#1 [phi:sin8u_table::@24->sin8u_table::@1#1] -- register_copy // [33] phi sin8u_table::i#10 = sin8u_table::i#1 [phi:sin8u_table::@24->sin8u_table::@1#2] -- register_copy jmp __b1 + .segment Data str: .text "step:" .byte 0 str1: .text " min:" @@ -4309,6 +4318,7 @@ sin8u_table: { str8: .text " trans: " .byte 0 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { @@ -5177,6 +5187,7 @@ mul8u: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -5757,9 +5768,14 @@ Score: 17567 // Uses the approximation sin(x) = x - x^/6 + x^/128 // Optimization possibility: Use symmetries when generating sine tables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sinusgenscale8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // PI*2 in u[4.12] format .const PI2_u4f12 = $6488 @@ -5770,6 +5786,7 @@ Score: 17567 .label print_screen = $400 .label print_char_cursor = $10 .label print_line_cursor = $a +.segment Code // main main: { .label tabsize = $14 @@ -5787,8 +5804,10 @@ main: { // } // [4] return rts + .segment Data sintab: .fill $14, 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -6139,6 +6158,7 @@ sin8u_table: { // [33] phi sin8u_table::x#10 = sin8u_table::x#1 [phi:sin8u_table::@24->sin8u_table::@1#1] -- register_copy // [33] phi sin8u_table::i#10 = sin8u_table::i#1 [phi:sin8u_table::@24->sin8u_table::@1#2] -- register_copy jmp __b1 + .segment Data str: .text "step:" .byte 0 str1: .text " min:" @@ -6158,6 +6178,7 @@ sin8u_table: { str8: .text " trans: " .byte 0 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { @@ -6975,5 +6996,6 @@ mul8u: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/sizeof-arrays.asm b/src/test/ref/sizeof-arrays.asm index 848056daf..e590e29eb 100644 --- a/src/test/ref/sizeof-arrays.asm +++ b/src/test/ref/sizeof-arrays.asm @@ -1,10 +1,16 @@ // Tests the sizeof() operator on arrays -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-arrays.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_BYTE = 1 .const SIZEOF_WORD = 2 .label SCREEN = $400 +.segment Code main: { .const sz = 7 // SCREEN[idx++] = '0'+sizeof(ba)/sizeof(byte) diff --git a/src/test/ref/sizeof-arrays.log b/src/test/ref/sizeof-arrays.log index 9085c52b0..0808b278c 100644 --- a/src/test/ref/sizeof-arrays.log +++ b/src/test/ref/sizeof-arrays.log @@ -290,13 +290,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests the sizeof() operator on arrays // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-arrays.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_BYTE = 1 .const SIZEOF_WORD = 2 .label SCREEN = $400 +.segment Code // main main: { .const sz = 7 @@ -348,13 +354,19 @@ Score: 42 // File Comments // Tests the sizeof() operator on arrays // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-arrays.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_BYTE = 1 .const SIZEOF_WORD = 2 .label SCREEN = $400 +.segment Code // main main: { .const sz = 7 diff --git a/src/test/ref/sizeof-expr.asm b/src/test/ref/sizeof-expr.asm index c177930d1..2221cd2dc 100644 --- a/src/test/ref/sizeof-expr.asm +++ b/src/test/ref/sizeof-expr.asm @@ -1,12 +1,18 @@ // Tests the sizeof() operator on values/expressions -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-expr.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_BYTE = 1 .const SIZEOF_NUMBER = $ff .const SIZEOF_WORD = 2 .const SIZEOF_POINTER = 2 .label SCREEN = $400 +.segment Code main: { // SCREEN[idx++] = '0'+sizeof(0) lda #'0'+SIZEOF_NUMBER diff --git a/src/test/ref/sizeof-expr.log b/src/test/ref/sizeof-expr.log index 93070d1bd..644afe524 100644 --- a/src/test/ref/sizeof-expr.log +++ b/src/test/ref/sizeof-expr.log @@ -288,15 +288,21 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests the sizeof() operator on values/expressions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-expr.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_BYTE = 1 .const SIZEOF_NUMBER = $ff .const SIZEOF_WORD = 2 .const SIZEOF_POINTER = 2 .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = '0'+SIZEOF_NUMBER -- _deref_pbuc1=vbuc2 @@ -358,15 +364,21 @@ Score: 48 // File Comments // Tests the sizeof() operator on values/expressions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-expr.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_BYTE = 1 .const SIZEOF_NUMBER = $ff .const SIZEOF_WORD = 2 .const SIZEOF_POINTER = 2 .label SCREEN = $400 +.segment Code // main main: { // SCREEN[idx++] = '0'+sizeof(0) diff --git a/src/test/ref/sizeof-in-const-pointer.asm b/src/test/ref/sizeof-in-const-pointer.asm index 63f7d1e31..e1328ed7e 100644 --- a/src/test/ref/sizeof-in-const-pointer.asm +++ b/src/test/ref/sizeof-in-const-pointer.asm @@ -1,10 +1,16 @@ // Support for sizeof() in const pointer definition -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-in-const-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_BYTE = 1 // Commodore 64 processor port .label SCREEN = $400+SIZEOF_BYTE*$64 +.segment Code main: { // SCREEN[0] = 'a' lda #'a' diff --git a/src/test/ref/sizeof-in-const-pointer.log b/src/test/ref/sizeof-in-const-pointer.log index 15c420092..e5b2fde35 100644 --- a/src/test/ref/sizeof-in-const-pointer.log +++ b/src/test/ref/sizeof-in-const-pointer.log @@ -80,13 +80,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Support for sizeof() in const pointer definition // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-in-const-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_BYTE = 1 // Commodore 64 processor port .label SCREEN = $400+SIZEOF_BYTE*$64 +.segment Code // main main: { // [0] *SCREEN = 'a' -- _deref_pbuc1=vbuc2 @@ -119,13 +125,19 @@ Score: 12 // File Comments // Support for sizeof() in const pointer definition // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-in-const-pointer.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_BYTE = 1 // Commodore 64 processor port .label SCREEN = $400+SIZEOF_BYTE*$64 +.segment Code // main main: { // SCREEN[0] = 'a' diff --git a/src/test/ref/sizeof-struct.asm b/src/test/ref/sizeof-struct.asm index 64f2ca5ab..a08bc08d5 100644 --- a/src/test/ref/sizeof-struct.asm +++ b/src/test/ref/sizeof-struct.asm @@ -1,10 +1,16 @@ // Tests the sizeof() operator on structs -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-struct.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_POINT = 2 .const SIZEOF_STRUCT_CIRCLE = 3 .label SCREEN = $400 +.segment Code main: { // Struct Arrays .const NUM_POINTS = 4 diff --git a/src/test/ref/sizeof-struct.log b/src/test/ref/sizeof-struct.log index de98bb11b..31708e037 100644 --- a/src/test/ref/sizeof-struct.log +++ b/src/test/ref/sizeof-struct.log @@ -298,13 +298,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests the sizeof() operator on structs // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-struct.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const SIZEOF_STRUCT_CIRCLE = 3 .label SCREEN = $400 +.segment Code // main main: { // Struct Arrays @@ -367,13 +373,19 @@ Score: 54 // File Comments // Tests the sizeof() operator on structs // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-struct.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const SIZEOF_STRUCT_CIRCLE = 3 .label SCREEN = $400 +.segment Code // main main: { // Struct Arrays diff --git a/src/test/ref/sizeof-types.asm b/src/test/ref/sizeof-types.asm index 8d3aff1f4..b98040cde 100644 --- a/src/test/ref/sizeof-types.asm +++ b/src/test/ref/sizeof-types.asm @@ -1,7 +1,12 @@ // Tests the sizeof() operator on types -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-types.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_BYTE = 1 .const SIZEOF_SIGNED_BYTE = 1 .const SIZEOF_BOOL = 1 @@ -11,6 +16,7 @@ .const SIZEOF_DWORD = 4 .const SIZEOF_SIGNED_DWORD = 4 .label SCREEN = $400 +.segment Code main: { // SCREEN[idx++] = '0'+sizeof(void) lda #'0' diff --git a/src/test/ref/sizeof-types.log b/src/test/ref/sizeof-types.log index 8ed674fb9..d5d07259c 100644 --- a/src/test/ref/sizeof-types.log +++ b/src/test/ref/sizeof-types.log @@ -397,9 +397,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests the sizeof() operator on types // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-types.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_BYTE = 1 .const SIZEOF_SIGNED_BYTE = 1 @@ -410,6 +415,7 @@ ASSEMBLER BEFORE OPTIMIZATION .const SIZEOF_DWORD = 4 .const SIZEOF_SIGNED_DWORD = 4 .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = '0' -- _deref_pbuc1=vbuc2 @@ -511,9 +517,14 @@ Score: 120 // File Comments // Tests the sizeof() operator on types // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sizeof-types.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_BYTE = 1 .const SIZEOF_SIGNED_BYTE = 1 @@ -524,6 +535,7 @@ Score: 120 .const SIZEOF_DWORD = 4 .const SIZEOF_SIGNED_DWORD = 4 .label SCREEN = $400 +.segment Code // main main: { // SCREEN[idx++] = '0'+sizeof(void) diff --git a/src/test/ref/sqr-delta.asm b/src/test/ref/sqr-delta.asm index ff281d254..46481c41e 100644 --- a/src/test/ref/sqr-delta.asm +++ b/src/test/ref/sqr-delta.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sqr-delta.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .label __0 = 6 // ifunc(8) diff --git a/src/test/ref/sqr-delta.log b/src/test/ref/sqr-delta.log index a55ab9930..9e4a0afdc 100644 --- a/src/test/ref/sqr-delta.log +++ b/src/test/ref/sqr-delta.log @@ -292,11 +292,17 @@ Coalescing zero page register [ zp[4]:6 [ ifunc::x#3 ifunc::x#1 ifunc::return#0 ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sqr-delta.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label __0 = 6 @@ -494,11 +500,17 @@ Score: 2065 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="sqr-delta.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .label __0 = 6 diff --git a/src/test/ref/stack-relative-addressing.asm b/src/test/ref/stack-relative-addressing.asm index 809925eab..422e58b2c 100644 --- a/src/test/ref/stack-relative-addressing.asm +++ b/src/test/ref/stack-relative-addressing.asm @@ -1,11 +1,17 @@ // Test stack-relative addressing (for passing parameters through the stack) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stack-relative-addressing.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" /** The hardware stack. The offset 3 is to skip the return address and the fact that the pointer is to the next free position. */ .label STACK = $103 /** The screen. */ .label SCREEN = $400 +.segment Code main: { // asm // Push a few values to the stack diff --git a/src/test/ref/stack-relative-addressing.log b/src/test/ref/stack-relative-addressing.log index 71eec5a39..64e2e5362 100644 --- a/src/test/ref/stack-relative-addressing.log +++ b/src/test/ref/stack-relative-addressing.log @@ -99,14 +99,20 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test stack-relative addressing (for passing parameters through the stack) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stack-relative-addressing.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels /** The hardware stack. The offset 3 is to skip the return address and the fact that the pointer is to the next free position. */ .label STACK = $103 /** The screen. */ .label SCREEN = $400 +.segment Code // main main: { // asm { lda#'1' pha lda#'2' pha lda#'3' pha } @@ -177,14 +183,20 @@ Score: 72 // File Comments // Test stack-relative addressing (for passing parameters through the stack) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stack-relative-addressing.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels /** The hardware stack. The offset 3 is to skip the return address and the fact that the pointer is to the next free position. */ .label STACK = $103 /** The screen. */ .label SCREEN = $400 +.segment Code // main main: { // asm diff --git a/src/test/ref/stars-1.asm b/src/test/ref/stars-1.asm index 2c0efe011..ee1e53ed3 100644 --- a/src/test/ref/stars-1.asm +++ b/src/test/ref/stars-1.asm @@ -1,8 +1,13 @@ // Stars array of struct // Functions for performing input and output. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stars-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c @@ -19,6 +24,7 @@ .label conio_line_text = $14 // The current color cursor line start .label conio_line_color = $16 +.segment Code __start: { // conio_cursor_x = 0 lda #0 @@ -120,11 +126,13 @@ main: { // for( char i=0;i<5;i++) inc.z i jmp __b1 + .segment Data s: .text " " .byte 0 s2: .text @"\n" .byte 0 } +.segment Code // Set the cursor to the specified position // gotoxy(byte register(X) y) gotoxy: { @@ -986,6 +994,7 @@ memset: { !: jmp __b2 } +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/stars-1.log b/src/test/ref/stars-1.log index 5a1db53d1..d43e5288d 100644 --- a/src/test/ref/stars-1.log +++ b/src/test/ref/stars-1.log @@ -5032,9 +5032,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Stars array of struct // Functions for performing input and output. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stars-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -5052,6 +5057,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label conio_line_text = $14 // The current color cursor line start .label conio_line_color = $16 +.segment Code // __start __start: { jmp __init1 @@ -5250,11 +5256,13 @@ main: { // [18] phi main::pStar#2 = main::pStar#1 [phi:main::@8->main::@1#0] -- register_copy // [18] phi main::i#2 = main::i#1 [phi:main::@8->main::@1#1] -- register_copy jmp __b1 + .segment Data s: .text " " .byte 0 s2: .text @"\n" .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -6636,6 +6644,7 @@ memset: { jmp __b2_from___b3 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits @@ -7263,9 +7272,14 @@ Score: 208006 // Stars array of struct // Functions for performing input and output. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stars-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -7283,6 +7297,7 @@ Score: 208006 .label conio_line_text = $14 // The current color cursor line start .label conio_line_color = $16 +.segment Code // __start __start: { // __start::__init1 @@ -7456,11 +7471,13 @@ main: { // [18] phi main::pStar#2 = main::pStar#1 [phi:main::@8->main::@1#0] -- register_copy // [18] phi main::i#2 = main::i#1 [phi:main::@8->main::@1#1] -- register_copy jmp __b1 + .segment Data s: .text " " .byte 0 s2: .text @"\n" .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -8765,6 +8782,7 @@ memset: { jmp __b2 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/stars-2.asm b/src/test/ref/stars-2.asm index 502113c70..0ec5db5be 100644 --- a/src/test/ref/stars-2.asm +++ b/src/test/ref/stars-2.asm @@ -1,8 +1,13 @@ // Stars struct of array // Functions for performing input and output. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stars-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c @@ -19,6 +24,7 @@ .label conio_line_text = $b // The current color cursor line start .label conio_line_color = $d +.segment Code __start: { // conio_cursor_x = 0 lda #0 @@ -93,11 +99,13 @@ main: { // for(char i=0;i<5;i++) inc.z i jmp __b1 + .segment Data s: .text " " .byte 0 s1: .text @"\n" .byte 0 } +.segment Code // Set the cursor to the specified position // gotoxy(byte register(X) y) gotoxy: { @@ -599,6 +607,7 @@ memset: { !: jmp __b2 } +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/stars-2.log b/src/test/ref/stars-2.log index 45f6da3d4..6e7edb4cf 100644 --- a/src/test/ref/stars-2.log +++ b/src/test/ref/stars-2.log @@ -3712,9 +3712,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Stars struct of array // Functions for performing input and output. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stars-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -3732,6 +3737,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label conio_line_text = $b // The current color cursor line start .label conio_line_color = $d +.segment Code // __start __start: { jmp __init1 @@ -3887,11 +3893,13 @@ main: { __b1_from___b6: // [18] phi main::i#2 = main::i#1 [phi:main::@6->main::@1#0] -- register_copy jmp __b1 + .segment Data s: .text " " .byte 0 s1: .text @"\n" .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -4663,6 +4671,7 @@ memset: { jmp __b2_from___b3 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits @@ -5047,9 +5056,14 @@ Score: 137236 // Stars struct of array // Functions for performing input and output. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stars-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 @@ -5067,6 +5081,7 @@ Score: 137236 .label conio_line_text = $b // The current color cursor line start .label conio_line_color = $d +.segment Code // __start __start: { // __start::__init1 @@ -5201,11 +5216,13 @@ main: { // [18] phi from main::@6 to main::@1 [phi:main::@6->main::@1] // [18] phi main::i#2 = main::i#1 [phi:main::@6->main::@1#0] -- register_copy jmp __b1 + .segment Data s: .text " " .byte 0 s1: .text @"\n" .byte 0 } +.segment Code // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) @@ -5946,6 +5963,7 @@ memset: { jmp __b2 } // File Data +.segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits diff --git a/src/test/ref/statement-sequence-1.asm b/src/test/ref/statement-sequence-1.asm index 84831334e..20662c44f 100644 --- a/src/test/ref/statement-sequence-1.asm +++ b/src/test/ref/statement-sequence-1.asm @@ -1,7 +1,13 @@ // Tests statement sequence generation -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="statement-sequence-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldy #0 diff --git a/src/test/ref/statement-sequence-1.log b/src/test/ref/statement-sequence-1.log index 3be68b248..cc2008848 100644 --- a/src/test/ref/statement-sequence-1.log +++ b/src/test/ref/statement-sequence-1.log @@ -209,10 +209,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests statement sequence generation // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="statement-sequence-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -314,10 +320,16 @@ Score: 371 // File Comments // Tests statement sequence generation // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="statement-sequence-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/static-init-code-0.asm b/src/test/ref/static-init-code-0.asm index db831617b..c11728115 100644 --- a/src/test/ref/static-init-code-0.asm +++ b/src/test/ref/static-init-code-0.asm @@ -1,14 +1,20 @@ // Tests static initialization code // Currently placed outside any function scope and pushed into @begin block. // To be put into an initializer function. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="static-init-code-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label SCREEN = $400 // Initialize a volatile ZP-variable (will be done in the initializer) .label c1 = 2 // Initialize another volatile ZP-variable (will be done in the initializer) .label c2 = 3 +.segment Code __start: { // c1 = 'o' lda #'o' diff --git a/src/test/ref/static-init-code-0.log b/src/test/ref/static-init-code-0.log index 3cf13b549..77c17fcff 100644 --- a/src/test/ref/static-init-code-0.log +++ b/src/test/ref/static-init-code-0.log @@ -130,15 +130,21 @@ ASSEMBLER BEFORE OPTIMIZATION // Currently placed outside any function scope and pushed into @begin block. // To be put into an initializer function. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="static-init-code-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 // Initialize a volatile ZP-variable (will be done in the initializer) .label c1 = 2 // Initialize another volatile ZP-variable (will be done in the initializer) .label c2 = 3 +.segment Code // __start __start: { jmp __init1 @@ -212,15 +218,21 @@ Score: 42 // Currently placed outside any function scope and pushed into @begin block. // To be put into an initializer function. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="static-init-code-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 // Initialize a volatile ZP-variable (will be done in the initializer) .label c1 = 2 // Initialize another volatile ZP-variable (will be done in the initializer) .label c2 = 3 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/static-init-code-1.asm b/src/test/ref/static-init-code-1.asm index 003e0db6a..75be8bd5e 100644 --- a/src/test/ref/static-init-code-1.asm +++ b/src/test/ref/static-init-code-1.asm @@ -1,9 +1,15 @@ // Tests static initialization code // No initialization code should call main() directly removing _start() and _init() -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="static-init-code-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = 'o' lda #'o' diff --git a/src/test/ref/static-init-code-1.log b/src/test/ref/static-init-code-1.log index 9ff43c629..74a8e7a8e 100644 --- a/src/test/ref/static-init-code-1.log +++ b/src/test/ref/static-init-code-1.log @@ -82,11 +82,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests static initialization code // No initialization code should call main() directly removing _start() and _init() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="static-init-code-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = 'o' -- _deref_pbuc1=vbuc2 @@ -122,11 +128,17 @@ Score: 18 // Tests static initialization code // No initialization code should call main() directly removing _start() and _init() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="static-init-code-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // SCREEN[0] = 'o' diff --git a/src/test/ref/static-init-code-2.asm b/src/test/ref/static-init-code-2.asm index e6d8a6b0a..d22909d77 100644 --- a/src/test/ref/static-init-code-2.asm +++ b/src/test/ref/static-init-code-2.asm @@ -1,11 +1,17 @@ // Tests static initialization code // No initializer code should be needed (since all values are constant) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="static-init-code-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const c1 = 'o' .const c2 = 'k' .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = c1 lda #c1 diff --git a/src/test/ref/static-init-code-2.log b/src/test/ref/static-init-code-2.log index db72485b9..6c60d71ba 100644 --- a/src/test/ref/static-init-code-2.log +++ b/src/test/ref/static-init-code-2.log @@ -91,13 +91,19 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests static initialization code // No initializer code should be needed (since all values are constant) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="static-init-code-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const c1 = 'o' .const c2 = 'k' .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = c1 -- _deref_pbuc1=vbuc2 @@ -135,13 +141,19 @@ Score: 18 // Tests static initialization code // No initializer code should be needed (since all values are constant) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="static-init-code-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const c1 = 'o' .const c2 = 'k' .label SCREEN = $400 +.segment Code // main main: { // SCREEN[0] = c1 diff --git a/src/test/ref/static-register-optimization-problem.asm b/src/test/ref/static-register-optimization-problem.asm index 85d676565..fcb3e5788 100644 --- a/src/test/ref/static-register-optimization-problem.asm +++ b/src/test/ref/static-register-optimization-problem.asm @@ -1,8 +1,14 @@ // https://gitlab.com/camelot/kickc/issues/336 // ASM Static Register Value analysis erronously believes >-1 == 0 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="static-register-optimization-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 .label lasti = 4 diff --git a/src/test/ref/static-register-optimization-problem.log b/src/test/ref/static-register-optimization-problem.log index 8770af0de..3d0e5c76e 100644 --- a/src/test/ref/static-register-optimization-problem.log +++ b/src/test/ref/static-register-optimization-problem.log @@ -170,10 +170,16 @@ ASSEMBLER BEFORE OPTIMIZATION // https://gitlab.com/camelot/kickc/issues/336 // ASM Static Register Value analysis erronously believes >-1 == 0 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="static-register-optimization-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -281,10 +287,16 @@ Score: 951 // https://gitlab.com/camelot/kickc/issues/336 // ASM Static Register Value analysis erronously believes >-1 == 0 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="static-register-optimization-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/stmt-empty-1.asm b/src/test/ref/stmt-empty-1.asm index a11ff0e62..f9be792b7 100644 --- a/src/test/ref/stmt-empty-1.asm +++ b/src/test/ref/stmt-empty-1.asm @@ -1,8 +1,14 @@ // Test an empty statement ';' -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stmt-empty-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: @@ -23,5 +29,6 @@ main: { inx jmp __b1 } +.segment Data str: .text "Hello!" .byte 0 diff --git a/src/test/ref/stmt-empty-1.log b/src/test/ref/stmt-empty-1.log index 57a36d0f3..81c6d16ee 100644 --- a/src/test/ref/stmt-empty-1.log +++ b/src/test/ref/stmt-empty-1.log @@ -145,11 +145,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test an empty statement ';' // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stmt-empty-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -187,6 +193,7 @@ main: { jmp __b1 } // File Data +.segment Data str: .text "Hello!" .byte 0 @@ -220,11 +227,17 @@ Score: 174 // File Comments // Test an empty statement ';' // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stmt-empty-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -260,6 +273,7 @@ main: { jmp __b1 } // File Data +.segment Data str: .text "Hello!" .byte 0 diff --git a/src/test/ref/stmt-empty.asm b/src/test/ref/stmt-empty.asm index c1ba2b34e..88972a6b6 100644 --- a/src/test/ref/stmt-empty.asm +++ b/src/test/ref/stmt-empty.asm @@ -1,7 +1,13 @@ // Test an empty statement ';' -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stmt-empty.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = 2 lda #<$400 diff --git a/src/test/ref/stmt-empty.log b/src/test/ref/stmt-empty.log index 681c272dd..1031dff2f 100644 --- a/src/test/ref/stmt-empty.log +++ b/src/test/ref/stmt-empty.log @@ -116,10 +116,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test an empty statement ';' // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stmt-empty.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = 2 @@ -190,10 +196,16 @@ Score: 536 // File Comments // Test an empty statement ';' // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="stmt-empty.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = 2 diff --git a/src/test/ref/strcpy-0.asm b/src/test/ref/strcpy-0.asm index 863fe0a95..b9d5a047b 100644 --- a/src/test/ref/strcpy-0.asm +++ b/src/test/ref/strcpy-0.asm @@ -1,8 +1,14 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="strcpy-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label dst1 = $400 .label dst2 = $428 +.segment Code main: { // str_cpy(dst1, "hello") lda #main::@1] @@ -163,6 +169,7 @@ main: { jmp __b1 } // File Data +.segment Data MESSAGE: .text @"\r\f\n\"'\\" .byte 0 @@ -193,11 +200,17 @@ Score: 261 // File Comments // Test using some simple supported string escapes \r \f \n \' \" // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -228,6 +241,7 @@ main: { jmp __b1 } // File Data +.segment Data MESSAGE: .text @"\r\f\n\"'\\" .byte 0 diff --git a/src/test/ref/string-escapes-1.asm b/src/test/ref/string-escapes-1.asm index a17e1983e..de41d648e 100644 --- a/src/test/ref/string-escapes-1.asm +++ b/src/test/ref/string-escapes-1.asm @@ -1,7 +1,13 @@ // Test using some simple supported string escape \n in both string and char -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label cursor = 6 .label msg = 2 @@ -65,5 +71,6 @@ main: { sta.z line+1 jmp __b5 } +.segment Data MESSAGE: .text @"hello\nworld" .byte 0 diff --git a/src/test/ref/string-escapes-1.log b/src/test/ref/string-escapes-1.log index 7bb024491..18e2e41b6 100644 --- a/src/test/ref/string-escapes-1.log +++ b/src/test/ref/string-escapes-1.log @@ -221,10 +221,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test using some simple supported string escape \n in both string and char // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label cursor = 6 @@ -317,6 +323,7 @@ main: { jmp __b5_from___b3 } // File Data +.segment Data MESSAGE: .text @"hello\nworld" .byte 0 @@ -368,10 +375,16 @@ Score: 1271 // File Comments // Test using some simple supported string escape \n in both string and char // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label cursor = 6 @@ -462,6 +475,7 @@ main: { jmp __b5 } // File Data +.segment Data MESSAGE: .text @"hello\nworld" .byte 0 diff --git a/src/test/ref/string-escapes-2.asm b/src/test/ref/string-escapes-2.asm index ff20135a6..9e45bce98 100644 --- a/src/test/ref/string-escapes-2.asm +++ b/src/test/ref/string-escapes-2.asm @@ -1,8 +1,14 @@ // Test using some simple supported string escape characters in PETSCII -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label memA = $ff +.segment Code main: { .label i = 2 lda #0 @@ -33,6 +39,7 @@ chrout: { // } rts } +.segment Data .encoding "petscii_mixed" MESSAGE: .text @"hello\nworld\\" .byte 0 diff --git a/src/test/ref/string-escapes-2.log b/src/test/ref/string-escapes-2.log index 395503e60..c2b669ce0 100644 --- a/src/test/ref/string-escapes-2.log +++ b/src/test/ref/string-escapes-2.log @@ -168,11 +168,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test using some simple supported string escape characters in PETSCII // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label memA = $ff +.segment Code // main main: { .label i = 2 @@ -226,6 +232,7 @@ chrout: { rts } // File Data +.segment Data .encoding "petscii_mixed" MESSAGE: .text @"hello\nworld\\" .byte 0 @@ -267,11 +274,17 @@ Score: 407 // File Comments // Test using some simple supported string escape characters in PETSCII // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label memA = $ff +.segment Code // main main: { .label i = 2 @@ -322,6 +335,7 @@ chrout: { rts } // File Data +.segment Data .encoding "petscii_mixed" MESSAGE: .text @"hello\nworld\\" .byte 0 diff --git a/src/test/ref/string-escapes-3.asm b/src/test/ref/string-escapes-3.asm index f5f8e5a2c..9dcc69631 100644 --- a/src/test/ref/string-escapes-3.asm +++ b/src/test/ref/string-escapes-3.asm @@ -1,11 +1,17 @@ // Test using some simple supported string escape \n in both string and char // Uses encoding PETSCII mixed -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .encoding "petscii_mixed" .const CH = '\n' .label SCREEN = $400 +.segment Code main: { .label cursor = 6 .label msg = 2 @@ -74,5 +80,6 @@ main: { sta.z line+1 jmp __b6 } +.segment Data MESSAGE: .text @"hello\nworld" .byte 0 diff --git a/src/test/ref/string-escapes-3.log b/src/test/ref/string-escapes-3.log index 339229d24..9f4aa2bc7 100644 --- a/src/test/ref/string-escapes-3.log +++ b/src/test/ref/string-escapes-3.log @@ -252,13 +252,19 @@ ASSEMBLER BEFORE OPTIMIZATION // Test using some simple supported string escape \n in both string and char // Uses encoding PETSCII mixed // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .encoding "petscii_mixed" .const CH = '\n' .label SCREEN = $400 +.segment Code // main main: { .label cursor = 6 @@ -359,6 +365,7 @@ main: { jmp __b6_from___b4 } // File Data +.segment Data MESSAGE: .text @"hello\nworld" .byte 0 @@ -418,13 +425,19 @@ Score: 1297 // Test using some simple supported string escape \n in both string and char // Uses encoding PETSCII mixed // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .encoding "petscii_mixed" .const CH = '\n' .label SCREEN = $400 +.segment Code // main main: { .label cursor = 6 @@ -523,6 +536,7 @@ main: { jmp __b6 } // File Data +.segment Data MESSAGE: .text @"hello\nworld" .byte 0 diff --git a/src/test/ref/string-escapes-4.asm b/src/test/ref/string-escapes-4.asm index ebd60aa9f..bdf1719d9 100644 --- a/src/test/ref/string-escapes-4.asm +++ b/src/test/ref/string-escapes-4.asm @@ -1,12 +1,18 @@ // Test using some simple supported string escape // Uses \xnn to add chars by hex-code -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .encoding "screencode_upper" .const CH = '\$de' .label SCREEN1 = $400 .label SCREEN2 = $428 +.segment Code main: { // *((char*)0xd018) = 0x17 // Show mixed chars on screen @@ -42,6 +48,7 @@ chrout: { // } rts } +.segment Data .encoding "petscii_mixed" MSG1: .text "cAmElot" .byte 0 diff --git a/src/test/ref/string-escapes-4.log b/src/test/ref/string-escapes-4.log index 9acc50357..7fe0a72ea 100644 --- a/src/test/ref/string-escapes-4.log +++ b/src/test/ref/string-escapes-4.log @@ -193,14 +193,20 @@ ASSEMBLER BEFORE OPTIMIZATION // Test using some simple supported string escape // Uses \xnn to add chars by hex-code // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .encoding "screencode_upper" .const CH = '\$de' .label SCREEN1 = $400 .label SCREEN2 = $428 +.segment Code // main main: { // [0] *((byte*) 53272) = $17 -- _deref_pbuc1=vbuc2 @@ -261,6 +267,7 @@ chrout: { rts } // File Data +.segment Data .encoding "petscii_mixed" MSG1: .text "cAmElot" .byte 0 @@ -307,14 +314,20 @@ Score: 640 // Test using some simple supported string escape // Uses \xnn to add chars by hex-code // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .encoding "screencode_upper" .const CH = '\$de' .label SCREEN1 = $400 .label SCREEN2 = $428 +.segment Code // main main: { // *((char*)0xd018) = 0x17 @@ -373,6 +386,7 @@ chrout: { rts } // File Data +.segment Data .encoding "petscii_mixed" MSG1: .text "cAmElot" .byte 0 diff --git a/src/test/ref/string-escapes-5.asm b/src/test/ref/string-escapes-5.asm index 4264f496f..30175dfc7 100644 --- a/src/test/ref/string-escapes-5.asm +++ b/src/test/ref/string-escapes-5.asm @@ -1,10 +1,16 @@ // Test using some simple supported string escape // Uses \xnn to add chars by hex-code that do not exist with the encoding. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const CH = '\$ff' .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: @@ -25,5 +31,6 @@ main: { inx jmp __b1 } +.segment Data MESSAGE: .text @"q\$ffw\$60e\$ddr" .byte 0 diff --git a/src/test/ref/string-escapes-5.log b/src/test/ref/string-escapes-5.log index 44906cb29..413f1a060 100644 --- a/src/test/ref/string-escapes-5.log +++ b/src/test/ref/string-escapes-5.log @@ -141,12 +141,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Test using some simple supported string escape // Uses \xnn to add chars by hex-code that do not exist with the encoding. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const CH = '\$ff' .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -184,6 +190,7 @@ main: { jmp __b1 } // File Data +.segment Data MESSAGE: .text @"q\$ffw\$60e\$ddr" .byte 0 @@ -217,12 +224,18 @@ Score: 267 // Test using some simple supported string escape // Uses \xnn to add chars by hex-code that do not exist with the encoding. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-escapes-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const CH = '\$ff' .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -258,6 +271,7 @@ main: { jmp __b1 } // File Data +.segment Data MESSAGE: .text @"q\$ffw\$60e\$ddr" .byte 0 diff --git a/src/test/ref/string-pointer-problem.asm b/src/test/ref/string-pointer-problem.asm index 902cd9441..50a6eb4ae 100644 --- a/src/test/ref/string-pointer-problem.asm +++ b/src/test/ref/string-pointer-problem.asm @@ -1,17 +1,25 @@ // Test adding integer index to a pointer that is a literal string // https://gitlab.com/camelot/kickc/issues/315 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-pointer-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label process_name = $400 +.segment Code main: { // set_process_name("keyboard") jsr set_process_name // } rts + .segment Data name: .text "keyboard" .byte 0 } +.segment Code set_process_name: { .label j = 2 .label __1 = 4 diff --git a/src/test/ref/string-pointer-problem.log b/src/test/ref/string-pointer-problem.log index 710d596ad..3a722d0c5 100644 --- a/src/test/ref/string-pointer-problem.log +++ b/src/test/ref/string-pointer-problem.log @@ -185,11 +185,17 @@ ASSEMBLER BEFORE OPTIMIZATION // Test adding integer index to a pointer that is a literal string // https://gitlab.com/camelot/kickc/issues/315 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-pointer-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label process_name = $400 +.segment Code // main main: { // [1] call set_process_name @@ -201,9 +207,11 @@ main: { __breturn: // [2] return rts + .segment Data name: .text "keyboard" .byte 0 } +.segment Code // set_process_name set_process_name: { .label j = 2 @@ -308,11 +316,17 @@ Score: 948 // Test adding integer index to a pointer that is a literal string // https://gitlab.com/camelot/kickc/issues/315 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="string-pointer-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label process_name = $400 +.segment Code // main main: { // set_process_name("keyboard") @@ -323,9 +337,11 @@ main: { // } // [2] return rts + .segment Data name: .text "keyboard" .byte 0 } +.segment Code // set_process_name set_process_name: { .label j = 2 diff --git a/src/test/ref/strip.asm b/src/test/ref/strip.asm index 5144f1389..ac69a0532 100644 --- a/src/test/ref/strip.asm +++ b/src/test/ref/strip.asm @@ -1,8 +1,14 @@ // Tests of strip() function from https://news.ycombinator.com/item?id=12080871 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="strip.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = 6 +.segment Code main: { // strip(msg1, ' ') ldx #' ' @@ -107,6 +113,7 @@ print: { // } rts } +.segment Data msg1: .text "hello world!" .byte 0 msg2: .text "goodbye blue sky!" diff --git a/src/test/ref/strip.log b/src/test/ref/strip.log index be1656779..418fdd1bf 100644 --- a/src/test/ref/strip.log +++ b/src/test/ref/strip.log @@ -425,11 +425,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests of strip() function from https://news.ycombinator.com/item?id=12080871 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="strip.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = 6 +.segment Code // main main: { // [1] call strip @@ -609,6 +615,7 @@ print: { rts } // File Data +.segment Data msg1: .text "hello world!" .byte 0 msg2: .text "goodbye blue sky!" @@ -697,11 +704,17 @@ Score: 1423 // File Comments // Tests of strip() function from https://news.ycombinator.com/item?id=12080871 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="strip.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = 6 +.segment Code // main main: { // strip(msg1, ' ') @@ -862,6 +875,7 @@ print: { rts } // File Data +.segment Data msg1: .text "hello world!" .byte 0 msg2: .text "goodbye blue sky!" diff --git a/src/test/ref/strncat-0.asm b/src/test/ref/strncat-0.asm index d06d37ed6..0ce087969 100644 --- a/src/test/ref/strncat-0.asm +++ b/src/test/ref/strncat-0.asm @@ -1,8 +1,14 @@ // Test strncat() implementation -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="strncat-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // strncat(build, hello, 5) lda #BORDER = 0 lda #0 diff --git a/src/test/ref/struct-pointer-to-member.log b/src/test/ref/struct-pointer-to-member.log index c4c419b8f..5e85cb838 100644 --- a/src/test/ref/struct-pointer-to-member.log +++ b/src/test/ref/struct-pointer-to-member.log @@ -90,15 +90,21 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Support for pointer to struct member // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-pointer-to-member.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_SCREEN_COLORS_BG0 = 1 // Commodore 64 processor port .label COLORS = $d020 // The background color .label BG_COLOR = COLORS+OFFSET_STRUCT_SCREEN_COLORS_BG0 +.segment Code // main main: { // [0] *((byte*)COLORS) = 0 -- _deref_pbuc1=vbuc2 @@ -135,15 +141,21 @@ Score: 18 // File Comments // Support for pointer to struct member // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-pointer-to-member.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_SCREEN_COLORS_BG0 = 1 // Commodore 64 processor port .label COLORS = $d020 // The background color .label BG_COLOR = COLORS+OFFSET_STRUCT_SCREEN_COLORS_BG0 +.segment Code // main main: { // COLORS->BORDER = 0 diff --git a/src/test/ref/struct-pos-fill.asm b/src/test/ref/struct-pos-fill.asm index c217d5402..51660ea3d 100644 --- a/src/test/ref/struct-pos-fill.asm +++ b/src/test/ref/struct-pos-fill.asm @@ -1,8 +1,13 @@ // Example of structs that can be optimized by going planar // https://cc65.github.io/mailarchive/2010-09/8593.html?fbclid=IwAR1IF_cTdyWcFeKU93VfL2Un1EuLjkGh7O7dQ4EVj4kpJzJAj01dbmEFQt8 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-pos-fill.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_POS_Y = 1 .const XSPACE = $14 .const YSPACE = $14 @@ -10,6 +15,7 @@ .label idx = 4 .label y = 5 .label line = 2 +.segment Code main: { lda #0 sta.z y @@ -58,4 +64,5 @@ main: { iny jmp __b3 } +.segment Data p: .fill 2*$40, 0 diff --git a/src/test/ref/struct-pos-fill.log b/src/test/ref/struct-pos-fill.log index 9cd188ee8..c0770e0fe 100644 --- a/src/test/ref/struct-pos-fill.log +++ b/src/test/ref/struct-pos-fill.log @@ -457,9 +457,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Example of structs that can be optimized by going planar // https://cc65.github.io/mailarchive/2010-09/8593.html?fbclid=IwAR1IF_cTdyWcFeKU93VfL2Un1EuLjkGh7O7dQ4EVj4kpJzJAj01dbmEFQt8 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-pos-fill.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POS_Y = 1 .const XSPACE = $14 @@ -468,6 +473,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label idx = 4 .label y = 5 .label line = 2 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -556,6 +562,7 @@ main: { jmp __b3 } // File Data +.segment Data p: .fill 2*$40, 0 ASSEMBLER OPTIMIZATIONS @@ -617,9 +624,14 @@ Score: 5181 // Example of structs that can be optimized by going planar // https://cc65.github.io/mailarchive/2010-09/8593.html?fbclid=IwAR1IF_cTdyWcFeKU93VfL2Un1EuLjkGh7O7dQ4EVj4kpJzJAj01dbmEFQt8 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-pos-fill.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POS_Y = 1 .const XSPACE = $14 @@ -628,6 +640,7 @@ Score: 5181 .label idx = 4 .label y = 5 .label line = 2 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -714,5 +727,6 @@ main: { jmp __b3 } // File Data +.segment Data p: .fill 2*$40, 0 diff --git a/src/test/ref/struct-ptr-0.asm b/src/test/ref/struct-ptr-0.asm index d1a977b29..08d2236da 100644 --- a/src/test/ref/struct-ptr-0.asm +++ b/src/test/ref/struct-ptr-0.asm @@ -1,8 +1,14 @@ // Minimal struct - array of struct -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code main: { .label SCREEN = $400 .label __4 = 2 @@ -45,4 +51,5 @@ main: { // } rts } +.segment Data points: .fill 2*4, 0 diff --git a/src/test/ref/struct-ptr-0.log b/src/test/ref/struct-ptr-0.log index 12a805539..5752112df 100644 --- a/src/test/ref/struct-ptr-0.log +++ b/src/test/ref/struct-ptr-0.log @@ -238,11 +238,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - array of struct // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -312,6 +318,7 @@ main: { rts } // File Data +.segment Data points: .fill 2*4, 0 ASSEMBLER OPTIMIZATIONS @@ -361,11 +368,17 @@ Score: 746 // File Comments // Minimal struct - array of struct // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -433,5 +446,6 @@ main: { rts } // File Data +.segment Data points: .fill 2*4, 0 diff --git a/src/test/ref/struct-ptr-1.asm b/src/test/ref/struct-ptr-1.asm index eaf7a4121..2bbfdad98 100644 --- a/src/test/ref/struct-ptr-1.asm +++ b/src/test/ref/struct-ptr-1.asm @@ -1,8 +1,14 @@ // Minimal struct - array of struct - near pointer math indexing -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFS_Y = 1 +.segment Code main: { .label SCREEN = $400 ldx #0 @@ -45,4 +51,5 @@ main: { // } rts } +.segment Data points: .fill 2*4, 0 diff --git a/src/test/ref/struct-ptr-1.log b/src/test/ref/struct-ptr-1.log index af01f8de8..f969cf533 100644 --- a/src/test/ref/struct-ptr-1.log +++ b/src/test/ref/struct-ptr-1.log @@ -258,11 +258,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - array of struct - near pointer math indexing // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFS_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -330,6 +336,7 @@ main: { rts } // File Data +.segment Data points: .fill 2*4, 0 ASSEMBLER OPTIMIZATIONS @@ -378,11 +385,17 @@ Score: 666 // File Comments // Minimal struct - array of struct - near pointer math indexing // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFS_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -450,5 +463,6 @@ main: { rts } // File Data +.segment Data points: .fill 2*4, 0 diff --git a/src/test/ref/struct-ptr-10.asm b/src/test/ref/struct-ptr-10.asm index 2429fa520..eb1ed23ff 100644 --- a/src/test/ref/struct-ptr-10.asm +++ b/src/test/ref/struct-ptr-10.asm @@ -1,9 +1,15 @@ // Minimal struct - array with 256+ structs -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-10.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code main: { .label SCREEN = $400 .label __2 = 6 @@ -94,4 +100,5 @@ main: { // } rts } +.segment Data points: .fill 2*$1f4, 0 diff --git a/src/test/ref/struct-ptr-10.log b/src/test/ref/struct-ptr-10.log index 142ebfcf0..29493304a 100644 --- a/src/test/ref/struct-ptr-10.log +++ b/src/test/ref/struct-ptr-10.log @@ -231,12 +231,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - array with 256+ structs // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-10.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -360,6 +366,7 @@ main: { rts } // File Data +.segment Data points: .fill 2*$1f4, 0 ASSEMBLER OPTIMIZATIONS @@ -416,12 +423,18 @@ Score: 1986 // File Comments // Minimal struct - array with 256+ structs // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-10.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -538,5 +551,6 @@ main: { rts } // File Data +.segment Data points: .fill 2*$1f4, 0 diff --git a/src/test/ref/struct-ptr-11.asm b/src/test/ref/struct-ptr-11.asm index 5d136adae..488b6ab02 100644 --- a/src/test/ref/struct-ptr-11.asm +++ b/src/test/ref/struct-ptr-11.asm @@ -1,10 +1,16 @@ // Minimal struct - array of 3-byte structs (required *3) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-11.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_POINT = 3 .const OFFSET_STRUCT_POINT_Y = 1 .const OFFSET_STRUCT_POINT_Z = 2 +.segment Code main: { .label SCREEN = $400 .label __0 = 3 @@ -58,4 +64,5 @@ main: { // } rts } +.segment Data points: .fill 3*4, 0 diff --git a/src/test/ref/struct-ptr-11.log b/src/test/ref/struct-ptr-11.log index 1be5b168a..58e1f3b69 100644 --- a/src/test/ref/struct-ptr-11.log +++ b/src/test/ref/struct-ptr-11.log @@ -248,13 +248,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - array of 3-byte structs (required *3) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-11.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 3 .const OFFSET_STRUCT_POINT_Y = 1 .const OFFSET_STRUCT_POINT_Z = 2 +.segment Code // main main: { .label SCREEN = $400 @@ -339,6 +345,7 @@ main: { rts } // File Data +.segment Data points: .fill 3*4, 0 ASSEMBLER OPTIMIZATIONS @@ -393,13 +400,19 @@ Score: 1036 // File Comments // Minimal struct - array of 3-byte structs (required *3) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-11.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 3 .const OFFSET_STRUCT_POINT_Y = 1 .const OFFSET_STRUCT_POINT_Z = 2 +.segment Code // main main: { .label SCREEN = $400 @@ -480,5 +493,6 @@ main: { rts } // File Data +.segment Data points: .fill 3*4, 0 diff --git a/src/test/ref/struct-ptr-12-ref.asm b/src/test/ref/struct-ptr-12-ref.asm index 64db3d755..a9e56cd71 100644 --- a/src/test/ref/struct-ptr-12-ref.asm +++ b/src/test/ref/struct-ptr-12-ref.asm @@ -1,7 +1,13 @@ // Reference file for Minimal struct - using address-of -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-12-ref.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label q = p diff --git a/src/test/ref/struct-ptr-12-ref.log b/src/test/ref/struct-ptr-12-ref.log index 01dce9fa0..1b04b9e54 100644 --- a/src/test/ref/struct-ptr-12-ref.log +++ b/src/test/ref/struct-ptr-12-ref.log @@ -106,10 +106,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Reference file for Minimal struct - using address-of // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-12-ref.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -161,10 +167,16 @@ Score: 30 // File Comments // Reference file for Minimal struct - using address-of // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-12-ref.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/struct-ptr-12.asm b/src/test/ref/struct-ptr-12.asm index d8bf32cb7..ef31a3bd8 100644 --- a/src/test/ref/struct-ptr-12.asm +++ b/src/test/ref/struct-ptr-12.asm @@ -1,9 +1,15 @@ // Minimal struct - using address-of -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-12.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code main: { .label SCREEN = $400 .label q = p @@ -24,4 +30,5 @@ main: { // } rts } +.segment Data __0: .byte 2, 3 diff --git a/src/test/ref/struct-ptr-12.log b/src/test/ref/struct-ptr-12.log index ca80b1501..4f21e2b06 100644 --- a/src/test/ref/struct-ptr-12.log +++ b/src/test/ref/struct-ptr-12.log @@ -126,12 +126,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - using address-of // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-12.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -157,6 +163,7 @@ main: { rts } // File Data +.segment Data __0: .byte 2, 3 ASSEMBLER OPTIMIZATIONS @@ -183,12 +190,18 @@ Score: 37 // File Comments // Minimal struct - using address-of // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-12.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -216,5 +229,6 @@ main: { rts } // File Data +.segment Data __0: .byte 2, 3 diff --git a/src/test/ref/struct-ptr-13.asm b/src/test/ref/struct-ptr-13.asm index 600683f0c..a9755c2b9 100644 --- a/src/test/ref/struct-ptr-13.asm +++ b/src/test/ref/struct-ptr-13.asm @@ -1,9 +1,15 @@ // Minimal struct - modifying pointer to struct in memory using arrow operator -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-13.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_POINT_Y = 1 .label points = $1000 +.segment Code main: { .label SCREEN = $400 // points->x += 5 diff --git a/src/test/ref/struct-ptr-13.log b/src/test/ref/struct-ptr-13.log index b6f24c0db..d971e9e6b 100644 --- a/src/test/ref/struct-ptr-13.log +++ b/src/test/ref/struct-ptr-13.log @@ -175,12 +175,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - modifying pointer to struct in memory using arrow operator // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-13.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 .label points = $1000 +.segment Code // main main: { .label SCREEN = $400 @@ -228,12 +234,18 @@ Score: 46 // File Comments // Minimal struct - modifying pointer to struct in memory using arrow operator // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-13.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 .label points = $1000 +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/struct-ptr-14.asm b/src/test/ref/struct-ptr-14.asm index 56ed72cf8..09a8d56f7 100644 --- a/src/test/ref/struct-ptr-14.asm +++ b/src/test/ref/struct-ptr-14.asm @@ -1,9 +1,15 @@ // Minimal struct - using address-of and passing it to a function -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-14.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code main: { .label SCREEN = $400 .label q = p @@ -36,4 +42,5 @@ set: { // } rts } +.segment Data __0: .byte 2, 3 diff --git a/src/test/ref/struct-ptr-14.log b/src/test/ref/struct-ptr-14.log index 48ada4219..98df2bfa5 100644 --- a/src/test/ref/struct-ptr-14.log +++ b/src/test/ref/struct-ptr-14.log @@ -196,12 +196,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - using address-of and passing it to a function // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-14.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -246,6 +252,7 @@ set: { rts } // File Data +.segment Data __0: .byte 2, 3 ASSEMBLER OPTIMIZATIONS @@ -278,12 +285,18 @@ Score: 60 // File Comments // Minimal struct - using address-of and passing it to a function // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-14.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -330,5 +343,6 @@ set: { rts } // File Data +.segment Data __0: .byte 2, 3 diff --git a/src/test/ref/struct-ptr-15.asm b/src/test/ref/struct-ptr-15.asm index cf8dee4c7..c0047c7fc 100644 --- a/src/test/ref/struct-ptr-15.asm +++ b/src/test/ref/struct-ptr-15.asm @@ -1,10 +1,16 @@ // Minimal struct - using pointers to nested structs -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-15.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_CIRCLE = 3 .const OFFSET_STRUCT_CIRCLE_CENTER = 1 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code main: { .label SCREEN = $400 .label __28 = 6 @@ -78,4 +84,5 @@ main: { // } rts } +.segment Data circles: .fill 3*2, 0 diff --git a/src/test/ref/struct-ptr-15.log b/src/test/ref/struct-ptr-15.log index 54bdda66c..b08732bee 100644 --- a/src/test/ref/struct-ptr-15.log +++ b/src/test/ref/struct-ptr-15.log @@ -454,13 +454,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - using pointers to nested structs // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-15.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_CIRCLE = 3 .const OFFSET_STRUCT_CIRCLE_CENTER = 1 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -554,6 +560,7 @@ main: { rts } // File Data +.segment Data circles: .fill 3*2, 0 ASSEMBLER OPTIMIZATIONS @@ -609,13 +616,19 @@ Score: 1082 // File Comments // Minimal struct - using pointers to nested structs // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-15.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_CIRCLE = 3 .const OFFSET_STRUCT_CIRCLE_CENTER = 1 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -718,5 +731,6 @@ main: { rts } // File Data +.segment Data circles: .fill 3*2, 0 diff --git a/src/test/ref/struct-ptr-16.asm b/src/test/ref/struct-ptr-16.asm index 7892bfe40..b2688bcf9 100644 --- a/src/test/ref/struct-ptr-16.asm +++ b/src/test/ref/struct-ptr-16.asm @@ -1,12 +1,18 @@ // Demonstrates problem with returning a dereferenced pointer to a struct -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-16.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 .label p0 = $a000 .label p1 = $b000 .label p2 = $e000 +.segment Code main: { .label __1_x = 2 .label __1_y = 3 diff --git a/src/test/ref/struct-ptr-16.log b/src/test/ref/struct-ptr-16.log index f7953c070..b9ddbc5ac 100644 --- a/src/test/ref/struct-ptr-16.log +++ b/src/test/ref/struct-ptr-16.log @@ -494,15 +494,21 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Demonstrates problem with returning a dereferenced pointer to a struct // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-16.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 .label p0 = $a000 .label p1 = $b000 .label p2 = $e000 +.segment Code // main main: { .label __1_x = 2 @@ -709,15 +715,21 @@ Score: 463 // File Comments // Demonstrates problem with returning a dereferenced pointer to a struct // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-16.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 .label p0 = $a000 .label p1 = $b000 .label p2 = $e000 +.segment Code // main main: { .label __1_x = 2 diff --git a/src/test/ref/struct-ptr-17.asm b/src/test/ref/struct-ptr-17.asm index 30dda1f39..b2d6e26a2 100644 --- a/src/test/ref/struct-ptr-17.asm +++ b/src/test/ref/struct-ptr-17.asm @@ -1,9 +1,15 @@ // Demonstrates problem with returning a struct into a dereferenced pointer to a struct -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-17.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 +.segment Code main: { .label __1_x = 2 // get(0) diff --git a/src/test/ref/struct-ptr-17.log b/src/test/ref/struct-ptr-17.log index a846eac6a..a3f82d416 100644 --- a/src/test/ref/struct-ptr-17.log +++ b/src/test/ref/struct-ptr-17.log @@ -323,12 +323,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Demonstrates problem with returning a struct into a dereferenced pointer to a struct // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-17.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 +.segment Code // main main: { .label __1_x = 2 @@ -463,12 +469,18 @@ Score: 381 // File Comments // Demonstrates problem with returning a struct into a dereferenced pointer to a struct // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-17.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 +.segment Code // main main: { .label __1_x = 2 diff --git a/src/test/ref/struct-ptr-18.asm b/src/test/ref/struct-ptr-18.asm index 46fe75179..efe791f20 100644 --- a/src/test/ref/struct-ptr-18.asm +++ b/src/test/ref/struct-ptr-18.asm @@ -1,10 +1,16 @@ // Demonstrates problem with passing struct array element as parameter to call -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-18.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 +.segment Code main: { .label i = 2 // points[0] = { 1, 2 } @@ -58,6 +64,7 @@ print: { // } rts } +.segment Data points: .fill 2*2, 0 __0: .byte 1, 2 __1: .byte 3, 4 diff --git a/src/test/ref/struct-ptr-18.log b/src/test/ref/struct-ptr-18.log index d3d95402b..4ab2f07c9 100644 --- a/src/test/ref/struct-ptr-18.log +++ b/src/test/ref/struct-ptr-18.log @@ -310,13 +310,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Demonstrates problem with passing struct array element as parameter to call // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-18.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 +.segment Code // main main: { .label i = 2 @@ -397,6 +403,7 @@ print: { rts } // File Data +.segment Data points: .fill 2*2, 0 __0: .byte 1, 2 __1: .byte 3, 4 @@ -456,13 +463,19 @@ Score: 528 // File Comments // Demonstrates problem with passing struct array element as parameter to call // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-18.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 +.segment Code // main main: { .label i = 2 @@ -543,6 +556,7 @@ print: { rts } // File Data +.segment Data points: .fill 2*2, 0 __0: .byte 1, 2 __1: .byte 3, 4 diff --git a/src/test/ref/struct-ptr-19.asm b/src/test/ref/struct-ptr-19.asm index 4b90c17e0..7cd7c2648 100644 --- a/src/test/ref/struct-ptr-19.asm +++ b/src/test/ref/struct-ptr-19.asm @@ -1,11 +1,17 @@ // Demonstrates problem with passing struct pointer deref as parameter to call -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-19.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 .label idx = 2 +.segment Code main: { .label ptr = point .label point = 3 @@ -46,4 +52,5 @@ print: { // } rts } +.segment Data __0: .byte 1, 2 diff --git a/src/test/ref/struct-ptr-19.log b/src/test/ref/struct-ptr-19.log index 784f2db1a..2bbf6b572 100644 --- a/src/test/ref/struct-ptr-19.log +++ b/src/test/ref/struct-ptr-19.log @@ -267,14 +267,20 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Demonstrates problem with passing struct pointer deref as parameter to call // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-19.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 .label idx = 2 +.segment Code // main main: { .label ptr = point @@ -342,6 +348,7 @@ print: { rts } // File Data +.segment Data __0: .byte 1, 2 ASSEMBLER OPTIMIZATIONS @@ -394,14 +401,20 @@ Score: 83 // File Comments // Demonstrates problem with passing struct pointer deref as parameter to call // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-19.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 .label idx = 2 +.segment Code // main main: { .label ptr = point @@ -469,5 +482,6 @@ print: { rts } // File Data +.segment Data __0: .byte 1, 2 diff --git a/src/test/ref/struct-ptr-2.asm b/src/test/ref/struct-ptr-2.asm index 9d315f114..a86a1a275 100644 --- a/src/test/ref/struct-ptr-2.asm +++ b/src/test/ref/struct-ptr-2.asm @@ -1,8 +1,14 @@ // Minimal struct - array of struct - far pointer math indexing -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFS_Y = 1 +.segment Code main: { .label SCREEN = $400 .label point_i = 2 @@ -65,4 +71,5 @@ main: { // } rts } +.segment Data points: .fill 2*4, 0 diff --git a/src/test/ref/struct-ptr-2.log b/src/test/ref/struct-ptr-2.log index 52d4c170d..365895748 100644 --- a/src/test/ref/struct-ptr-2.log +++ b/src/test/ref/struct-ptr-2.log @@ -305,11 +305,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - array of struct - far pointer math indexing // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFS_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -397,6 +403,7 @@ main: { rts } // File Data +.segment Data points: .fill 2*4, 0 ASSEMBLER OPTIMIZATIONS @@ -451,11 +458,17 @@ Score: 1046 // File Comments // Minimal struct - array of struct - far pointer math indexing // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFS_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -545,5 +558,6 @@ main: { rts } // File Data +.segment Data points: .fill 2*4, 0 diff --git a/src/test/ref/struct-ptr-20.asm b/src/test/ref/struct-ptr-20.asm index f841aeaa5..281e4d3f5 100644 --- a/src/test/ref/struct-ptr-20.asm +++ b/src/test/ref/struct-ptr-20.asm @@ -1,10 +1,16 @@ // Demonstrates problem with conditions using negated struct references -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-20.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_SETTING = 2 .const OFFSET_STRUCT_SETTING_ID = 1 .label SCREEN = $400 +.segment Code main: { .const len = 3*SIZEOF_STRUCT_SETTING/SIZEOF_STRUCT_SETTING .label setting = 2 @@ -48,4 +54,5 @@ main: { !: jmp __b1 } +.segment Data settings: .byte 0, 'a', 1, 'b', 0, 'c' diff --git a/src/test/ref/struct-ptr-20.log b/src/test/ref/struct-ptr-20.log index f7e6ce14c..160c55ae3 100644 --- a/src/test/ref/struct-ptr-20.log +++ b/src/test/ref/struct-ptr-20.log @@ -260,13 +260,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Demonstrates problem with conditions using negated struct references // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-20.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_SETTING = 2 .const OFFSET_STRUCT_SETTING_ID = 1 .label SCREEN = $400 +.segment Code // main main: { .const len = 3*SIZEOF_STRUCT_SETTING/SIZEOF_STRUCT_SETTING @@ -335,6 +341,7 @@ main: { jmp __b1 } // File Data +.segment Data settings: .byte 0, 'a', 1, 'b', 0, 'c' ASSEMBLER OPTIMIZATIONS @@ -379,13 +386,19 @@ Score: 771 // File Comments // Demonstrates problem with conditions using negated struct references // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-20.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_SETTING = 2 .const OFFSET_STRUCT_SETTING_ID = 1 .label SCREEN = $400 +.segment Code // main main: { .const len = 3*SIZEOF_STRUCT_SETTING/SIZEOF_STRUCT_SETTING @@ -450,5 +463,6 @@ main: { jmp __b1 } // File Data +.segment Data settings: .byte 0, 'a', 1, 'b', 0, 'c' diff --git a/src/test/ref/struct-ptr-21.asm b/src/test/ref/struct-ptr-21.asm index 697bbe425..5117f9332 100644 --- a/src/test/ref/struct-ptr-21.asm +++ b/src/test/ref/struct-ptr-21.asm @@ -1,9 +1,15 @@ // Demonstrates problem with conditions using negated struct references -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-21.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_SETTING_BUF = 1 .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: @@ -30,6 +36,7 @@ main: { inx jmp __b1 } +.segment Data seq: .word 1, 2, 3 settings: .byte 3 .word seq diff --git a/src/test/ref/struct-ptr-21.log b/src/test/ref/struct-ptr-21.log index 7c1e8d33c..416ab50c0 100644 --- a/src/test/ref/struct-ptr-21.log +++ b/src/test/ref/struct-ptr-21.log @@ -183,12 +183,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Demonstrates problem with conditions using negated struct references // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-21.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_SETTING_BUF = 1 .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -230,6 +236,7 @@ main: { jmp __b1 } // File Data +.segment Data seq: .word 1, 2, 3 settings: .byte 3 .word seq @@ -264,12 +271,18 @@ Score: 571 // File Comments // Demonstrates problem with conditions using negated struct references // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-21.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_SETTING_BUF = 1 .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -310,6 +323,7 @@ main: { jmp __b1 } // File Data +.segment Data seq: .word 1, 2, 3 settings: .byte 3 .word seq diff --git a/src/test/ref/struct-ptr-22.asm b/src/test/ref/struct-ptr-22.asm index 3dc758600..f978aaedc 100644 --- a/src/test/ref/struct-ptr-22.asm +++ b/src/test/ref/struct-ptr-22.asm @@ -1,11 +1,17 @@ // Demonstrates problem with missing parenthesis in double-dereferencing // https://gitlab.com/camelot/kickc/issues/270 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-22.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label print_screen = $400 .label print_char_cursor = 4 .label print_line_cursor = 6 +.segment Code main: { .label __13 = 6 // file->bufEdit = 0x4000 @@ -69,11 +75,13 @@ main: { jsr print_ln // } rts + .segment Data str: .text "$0000=" .byte 0 str1: .text "$4004=" .byte 0 } +.segment Code // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) @@ -198,5 +206,6 @@ print_char: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" files: .fill 2*$a, 0 diff --git a/src/test/ref/struct-ptr-22.log b/src/test/ref/struct-ptr-22.log index 2eb24925e..1176f66e2 100644 --- a/src/test/ref/struct-ptr-22.log +++ b/src/test/ref/struct-ptr-22.log @@ -1002,13 +1002,19 @@ ASSEMBLER BEFORE OPTIMIZATION // Demonstrates problem with missing parenthesis in double-dereferencing // https://gitlab.com/camelot/kickc/issues/270 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-22.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_char_cursor = 4 .label print_line_cursor = 6 +.segment Code // main main: { .label __13 = 6 @@ -1126,11 +1132,13 @@ main: { __breturn: // [17] return rts + .segment Data str: .text "$0000=" .byte 0 str1: .text "$4004=" .byte 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -1326,6 +1334,7 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" files: .fill 2*$a, 0 @@ -1465,13 +1474,19 @@ Score: 1497 // Demonstrates problem with missing parenthesis in double-dereferencing // https://gitlab.com/camelot/kickc/issues/270 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-22.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_char_cursor = 4 .label print_line_cursor = 6 +.segment Code // main main: { .label __13 = 6 @@ -1576,11 +1591,13 @@ main: { // } // [17] return rts + .segment Data str: .text "$0000=" .byte 0 str1: .text "$4004=" .byte 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -1768,6 +1785,7 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" files: .fill 2*$a, 0 diff --git a/src/test/ref/struct-ptr-23.asm b/src/test/ref/struct-ptr-23.asm index 660c663dc..9beb4a393 100644 --- a/src/test/ref/struct-ptr-23.asm +++ b/src/test/ref/struct-ptr-23.asm @@ -1,10 +1,16 @@ // Example of a struct containing an array -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-23.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_PERSON = 5 .const OFFSET_STRUCT_PERSON_INITIALS = 1 .label SCREEN = $400 +.segment Code main: { .label person = persons+SIZEOF_STRUCT_PERSON // print_person(person) @@ -82,6 +88,7 @@ print_person: { // } rts } +.segment Data persons: .byte 1 .text "jgr" .byte 0, 8 diff --git a/src/test/ref/struct-ptr-23.log b/src/test/ref/struct-ptr-23.log index acd4aadcf..452d958f0 100644 --- a/src/test/ref/struct-ptr-23.log +++ b/src/test/ref/struct-ptr-23.log @@ -367,13 +367,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Example of a struct containing an array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-23.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_PERSON = 5 .const OFFSET_STRUCT_PERSON_INITIALS = 1 .label SCREEN = $400 +.segment Code // main main: { .label person = persons+SIZEOF_STRUCT_PERSON @@ -475,6 +481,7 @@ print_person: { rts } // File Data +.segment Data persons: .byte 1 .text "jgr" .byte 0, 8 @@ -536,13 +543,19 @@ Score: 159 // File Comments // Example of a struct containing an array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-23.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_PERSON = 5 .const OFFSET_STRUCT_PERSON_INITIALS = 1 .label SCREEN = $400 +.segment Code // main main: { .label person = persons+SIZEOF_STRUCT_PERSON @@ -652,6 +665,7 @@ print_person: { rts } // File Data +.segment Data persons: .byte 1 .text "jgr" .byte 0, 8 diff --git a/src/test/ref/struct-ptr-24.asm b/src/test/ref/struct-ptr-24.asm index fbdf23fc1..c44cf9279 100644 --- a/src/test/ref/struct-ptr-24.asm +++ b/src/test/ref/struct-ptr-24.asm @@ -1,9 +1,15 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-24.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_FILEENTRY = 2 .label filesEnd = 0 .label dir = 0 +.segment Code main: { .label file = 2 lda #<0 diff --git a/src/test/ref/struct-ptr-24.log b/src/test/ref/struct-ptr-24.log index e1155e3b5..42d271619 100644 --- a/src/test/ref/struct-ptr-24.log +++ b/src/test/ref/struct-ptr-24.log @@ -185,13 +185,19 @@ Coalescing zero page register [ zp[2]:2 [ main::file#2 main::file#1 ] ] with [ z ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-24.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_FILEENTRY = 2 .label filesEnd = 0 .label dir = 0 +.segment Code // main main: { .label file = 2 @@ -299,13 +305,19 @@ Score: 528 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-24.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_FILEENTRY = 2 .label filesEnd = 0 .label dir = 0 +.segment Code // main main: { .label file = 2 diff --git a/src/test/ref/struct-ptr-25.asm b/src/test/ref/struct-ptr-25.asm index 7761eae52..cc781e47a 100644 --- a/src/test/ref/struct-ptr-25.asm +++ b/src/test/ref/struct-ptr-25.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-25.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = *fileCur lda $1010-1 diff --git a/src/test/ref/struct-ptr-25.log b/src/test/ref/struct-ptr-25.log index b1e8e0035..74462c9f4 100644 --- a/src/test/ref/struct-ptr-25.log +++ b/src/test/ref/struct-ptr-25.log @@ -258,11 +258,17 @@ Uplifting [] best 47 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-25.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { jmp __b1 @@ -300,11 +306,17 @@ Score: 14 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-25.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // main::@1 diff --git a/src/test/ref/struct-ptr-26.asm b/src/test/ref/struct-ptr-26.asm index 24752b7c0..55281f695 100644 --- a/src/test/ref/struct-ptr-26.asm +++ b/src/test/ref/struct-ptr-26.asm @@ -1,10 +1,16 @@ // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-26.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label print_screen = $400 .label print_char_cursor = 2 +.segment Code main: { .label file = $4000 .label uSize = 4 @@ -83,4 +89,5 @@ print_char: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/struct-ptr-26.log b/src/test/ref/struct-ptr-26.log index b637d96bd..29ba5e25b 100644 --- a/src/test/ref/struct-ptr-26.log +++ b/src/test/ref/struct-ptr-26.log @@ -469,12 +469,18 @@ ASSEMBLER BEFORE OPTIMIZATION // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-26.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_char_cursor = 2 +.segment Code // main main: { .label file = $4000 @@ -597,6 +603,7 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -669,12 +676,18 @@ Score: 161 // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-26.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_char_cursor = 2 +.segment Code // main main: { .label file = $4000 @@ -796,5 +809,6 @@ print_char: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/struct-ptr-28.asm b/src/test/ref/struct-ptr-28.asm index 174f71819..1e326b2db 100644 --- a/src/test/ref/struct-ptr-28.asm +++ b/src/test/ref/struct-ptr-28.asm @@ -1,12 +1,18 @@ // Example of a struct containing an array // It works on the surface - but illustrates the problem with structs containing arrays treating them like pointers. // https://gitlab.com/camelot/kickc/issues/314 -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-28.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_PERSON = $11 .const OFFSET_STRUCT_PERSON_NAME = 1 .label SCREEN = $400 +.segment Code main: { .label jesper = 8 .label henriette = $19 @@ -95,6 +101,7 @@ print_person: { iny jmp __b1 } +.segment Data DIGIT: .text "0123456789" .byte 0 __0: .byte 4 diff --git a/src/test/ref/struct-ptr-28.log b/src/test/ref/struct-ptr-28.log index e9095689c..e3194d340 100644 --- a/src/test/ref/struct-ptr-28.log +++ b/src/test/ref/struct-ptr-28.log @@ -376,13 +376,19 @@ ASSEMBLER BEFORE OPTIMIZATION // It works on the surface - but illustrates the problem with structs containing arrays treating them like pointers. // https://gitlab.com/camelot/kickc/issues/314 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-28.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_PERSON = $11 .const OFFSET_STRUCT_PERSON_NAME = 1 .label SCREEN = $400 +.segment Code // main main: { .label jesper = 8 @@ -507,6 +513,7 @@ print_person: { jmp __b1 } // File Data +.segment Data DIGIT: .text "0123456789" .byte 0 __0: .byte 4 @@ -580,13 +587,19 @@ Score: 772 // It works on the surface - but illustrates the problem with structs containing arrays treating them like pointers. // https://gitlab.com/camelot/kickc/issues/314 // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-28.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_PERSON = $11 .const OFFSET_STRUCT_PERSON_NAME = 1 .label SCREEN = $400 +.segment Code // main main: { .label jesper = 8 @@ -714,6 +727,7 @@ print_person: { jmp __b1 } // File Data +.segment Data DIGIT: .text "0123456789" .byte 0 __0: .byte 4 diff --git a/src/test/ref/struct-ptr-3.asm b/src/test/ref/struct-ptr-3.asm index 03239ce3f..cf7959ce5 100644 --- a/src/test/ref/struct-ptr-3.asm +++ b/src/test/ref/struct-ptr-3.asm @@ -1,9 +1,15 @@ // Minimal struct - accessing pointer to struct in memory -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code main: { .label SCREEN = $400 // SCREEN[0] = (*points).x diff --git a/src/test/ref/struct-ptr-3.log b/src/test/ref/struct-ptr-3.log index 66e90bd58..be19d1390 100644 --- a/src/test/ref/struct-ptr-3.log +++ b/src/test/ref/struct-ptr-3.log @@ -191,12 +191,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - accessing pointer to struct in memory // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -241,12 +247,18 @@ Score: 38 // File Comments // Minimal struct - accessing pointer to struct in memory // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/struct-ptr-30.asm b/src/test/ref/struct-ptr-30.asm index ad0c3a13b..3ba3ca809 100644 --- a/src/test/ref/struct-ptr-30.asm +++ b/src/test/ref/struct-ptr-30.asm @@ -1,11 +1,17 @@ // Test a struct array initialized with to few members (zero-filled for the rest) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-30.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_POINT_Y = 1 .const SIZEOF_STRUCT_POINT = 3 .label SCREEN = $400 .label idx = 3 +.segment Code main: { .label i = 2 lda #0 @@ -63,6 +69,7 @@ print: { // } rts } +.segment Data points: .byte 1 .word $83f .byte 3 diff --git a/src/test/ref/struct-ptr-30.log b/src/test/ref/struct-ptr-30.log index 6eecd24a4..b241c41ac 100644 --- a/src/test/ref/struct-ptr-30.log +++ b/src/test/ref/struct-ptr-30.log @@ -326,14 +326,20 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test a struct array initialized with to few members (zero-filled for the rest) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-30.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 .const SIZEOF_STRUCT_POINT = 3 .label SCREEN = $400 .label idx = 3 +.segment Code // main main: { .label i = 2 @@ -420,6 +426,7 @@ print: { rts } // File Data +.segment Data points: .byte 1 .word $83f .byte 3 @@ -491,14 +498,20 @@ Score: 639 // File Comments // Test a struct array initialized with to few members (zero-filled for the rest) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-30.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 .const SIZEOF_STRUCT_POINT = 3 .label SCREEN = $400 .label idx = 3 +.segment Code // main main: { .label i = 2 @@ -588,6 +601,7 @@ print: { rts } // File Data +.segment Data points: .byte 1 .word $83f .byte 3 diff --git a/src/test/ref/struct-ptr-31.asm b/src/test/ref/struct-ptr-31.asm index 89262d3cc..6fc424bf9 100644 --- a/src/test/ref/struct-ptr-31.asm +++ b/src/test/ref/struct-ptr-31.asm @@ -1,10 +1,16 @@ // Example of a struct containing an array -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-31.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_PERSON = $11 .const OFFSET_STRUCT_PERSON_NAME = 1 .label SCREEN = $400 +.segment Code main: { // print_person(persons) ldx #0 @@ -77,6 +83,7 @@ print_person: { iny jmp __b1 } +.segment Data persons: .byte 4 .text "jesper" .byte 0 diff --git a/src/test/ref/struct-ptr-31.log b/src/test/ref/struct-ptr-31.log index dae6f4558..2089f3b76 100644 --- a/src/test/ref/struct-ptr-31.log +++ b/src/test/ref/struct-ptr-31.log @@ -355,13 +355,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Example of a struct containing an array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-31.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_PERSON = $11 .const OFFSET_STRUCT_PERSON_NAME = 1 .label SCREEN = $400 +.segment Code // main main: { // [1] call print_person @@ -472,6 +478,7 @@ print_person: { jmp __b1 } // File Data +.segment Data persons: .byte 4 .text "jesper" .byte 0 @@ -540,13 +547,19 @@ Score: 740 // File Comments // Example of a struct containing an array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-31.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_PERSON = $11 .const OFFSET_STRUCT_PERSON_NAME = 1 .label SCREEN = $400 +.segment Code // main main: { // print_person(persons) @@ -657,6 +670,7 @@ print_person: { jmp __b1 } // File Data +.segment Data persons: .byte 4 .text "jesper" .byte 0 diff --git a/src/test/ref/struct-ptr-32.asm b/src/test/ref/struct-ptr-32.asm index 473540742..a5c2179e5 100644 --- a/src/test/ref/struct-ptr-32.asm +++ b/src/test/ref/struct-ptr-32.asm @@ -1,10 +1,16 @@ // Example of a struct containing an array -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-32.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_PERSON = $10 .const OFFSET_STRUCT_PERSON_NAME = 1 .const OFFSET_STRUCT_PERSON_AGE = $e +.segment Code main: { .label SCREEN = $400 .label person = persons+SIZEOF_STRUCT_PERSON @@ -39,4 +45,5 @@ main: { // } rts } +.segment Data persons: .fill $10*2, 0 diff --git a/src/test/ref/struct-ptr-32.log b/src/test/ref/struct-ptr-32.log index 4bf0b3721..307bb0bdb 100644 --- a/src/test/ref/struct-ptr-32.log +++ b/src/test/ref/struct-ptr-32.log @@ -286,13 +286,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Example of a struct containing an array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-32.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_PERSON = $10 .const OFFSET_STRUCT_PERSON_NAME = 1 .const OFFSET_STRUCT_PERSON_AGE = $e +.segment Code // main main: { .label SCREEN = $400 @@ -332,6 +338,7 @@ main: { rts } // File Data +.segment Data persons: .fill $10*2, 0 ASSEMBLER OPTIMIZATIONS @@ -358,13 +365,19 @@ Score: 70 // File Comments // Example of a struct containing an array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-32.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_PERSON = $10 .const OFFSET_STRUCT_PERSON_NAME = 1 .const OFFSET_STRUCT_PERSON_AGE = $e +.segment Code // main main: { .label SCREEN = $400 @@ -411,5 +424,6 @@ main: { rts } // File Data +.segment Data persons: .fill $10*2, 0 diff --git a/src/test/ref/struct-ptr-33.asm b/src/test/ref/struct-ptr-33.asm index c3fd8349b..4c756a8b1 100644 --- a/src/test/ref/struct-ptr-33.asm +++ b/src/test/ref/struct-ptr-33.asm @@ -1,9 +1,15 @@ // Example of a struct containing an array -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-33.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_PERSON = $10 .const OFFSET_STRUCT_PERSON_NAME = 1 +.segment Code main: { .label SCREEN = $400 .label person = persons+SIZEOF_STRUCT_PERSON @@ -16,6 +22,7 @@ main: { // } rts } +.segment Data persons: .byte 7 .text "jesper" .byte 0 diff --git a/src/test/ref/struct-ptr-33.log b/src/test/ref/struct-ptr-33.log index a654b0d8a..a05719923 100644 --- a/src/test/ref/struct-ptr-33.log +++ b/src/test/ref/struct-ptr-33.log @@ -139,12 +139,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Example of a struct containing an array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-33.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_PERSON = $10 .const OFFSET_STRUCT_PERSON_NAME = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -162,6 +168,7 @@ main: { rts } // File Data +.segment Data persons: .byte 7 .text "jesper" .byte 0 @@ -196,12 +203,18 @@ Score: 22 // File Comments // Example of a struct containing an array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-33.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_PERSON = $10 .const OFFSET_STRUCT_PERSON_NAME = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -220,6 +233,7 @@ main: { rts } // File Data +.segment Data persons: .byte 7 .text "jesper" .byte 0 diff --git a/src/test/ref/struct-ptr-34.asm b/src/test/ref/struct-ptr-34.asm index 6afd00832..e0634e12b 100644 --- a/src/test/ref/struct-ptr-34.asm +++ b/src/test/ref/struct-ptr-34.asm @@ -1,9 +1,15 @@ // Example of a struct containing an array -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-34.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 .label idx = 2 +.segment Code main: { .const jesper_id = 4 .const henriette_id = 7 @@ -39,9 +45,11 @@ main: { jsr print_person // } rts + .segment Data jesper_name: .fill $10, 0 henriette_name: .fill $10, 0 } +.segment Code // print_person(byte register(X) person_id, byte* zp(3) person_name) print_person: { .label person_name = 3 @@ -81,6 +89,7 @@ print_person: { iny jmp __b1 } +.segment Data DIGIT: .text "0123456789" .byte 0 __0: .text "jesper" diff --git a/src/test/ref/struct-ptr-34.log b/src/test/ref/struct-ptr-34.log index 998367325..17994898a 100644 --- a/src/test/ref/struct-ptr-34.log +++ b/src/test/ref/struct-ptr-34.log @@ -341,12 +341,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Example of a struct containing an array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-34.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label idx = 2 +.segment Code // main main: { .const jesper_id = 4 @@ -399,9 +405,11 @@ main: { __breturn: // [4] return rts + .segment Data jesper_name: .fill $10, 0 henriette_name: .fill $10, 0 } +.segment Code // print_person // print_person(byte register(X) person_id, byte* zp(3) person_name) print_person: { @@ -460,6 +468,7 @@ print_person: { jmp __b1 } // File Data +.segment Data DIGIT: .text "0123456789" .byte 0 __0: .text "jesper" @@ -527,12 +536,18 @@ Score: 418 // File Comments // Example of a struct containing an array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-34.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label idx = 2 +.segment Code // main main: { .const jesper_id = 4 @@ -584,9 +599,11 @@ main: { // } // [4] return rts + .segment Data jesper_name: .fill $10, 0 henriette_name: .fill $10, 0 } +.segment Code // print_person // print_person(byte register(X) person_id, byte* zp(3) person_name) print_person: { @@ -649,6 +666,7 @@ print_person: { jmp __b1 } // File Data +.segment Data DIGIT: .text "0123456789" .byte 0 __0: .text "jesper" diff --git a/src/test/ref/struct-ptr-4.asm b/src/test/ref/struct-ptr-4.asm index a9d7c01ae..5b119c2dc 100644 --- a/src/test/ref/struct-ptr-4.asm +++ b/src/test/ref/struct-ptr-4.asm @@ -1,10 +1,16 @@ // Minimal struct - accessing pointer to struct in memory in a loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label POINTS = $1000 +.segment Code main: { // Print points .label SCREEN = $400 diff --git a/src/test/ref/struct-ptr-4.log b/src/test/ref/struct-ptr-4.log index 883388859..63074c32f 100644 --- a/src/test/ref/struct-ptr-4.log +++ b/src/test/ref/struct-ptr-4.log @@ -330,13 +330,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - accessing pointer to struct in memory in a loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label POINTS = $1000 +.segment Code // main main: { // Print points @@ -506,13 +512,19 @@ Score: 1456 // File Comments // Minimal struct - accessing pointer to struct in memory in a loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label POINTS = $1000 +.segment Code // main main: { // Print points diff --git a/src/test/ref/struct-ptr-5.asm b/src/test/ref/struct-ptr-5.asm index 6fc12b63f..1c4879d7c 100644 --- a/src/test/ref/struct-ptr-5.asm +++ b/src/test/ref/struct-ptr-5.asm @@ -1,10 +1,16 @@ // Minimal struct - simple linked list implemented using pointers -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_ENTRY = 3 .const OFFSET_STRUCT_ENTRY_NEXT = 1 .label ENTRIES = $1000 +.segment Code main: { // Run through the linked list .label SCREEN = $400 diff --git a/src/test/ref/struct-ptr-5.log b/src/test/ref/struct-ptr-5.log index b443c9641..eef600e99 100644 --- a/src/test/ref/struct-ptr-5.log +++ b/src/test/ref/struct-ptr-5.log @@ -406,13 +406,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - simple linked list implemented using pointers // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_ENTRY = 3 .const OFFSET_STRUCT_ENTRY_NEXT = 1 .label ENTRIES = $1000 +.segment Code // main main: { // Run through the linked list @@ -566,13 +572,19 @@ Score: 1203 // File Comments // Minimal struct - simple linked list implemented using pointers // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_ENTRY = 3 .const OFFSET_STRUCT_ENTRY_NEXT = 1 .label ENTRIES = $1000 +.segment Code // main main: { // Run through the linked list diff --git a/src/test/ref/struct-ptr-6.asm b/src/test/ref/struct-ptr-6.asm index 93f231747..5dd80d259 100644 --- a/src/test/ref/struct-ptr-6.asm +++ b/src/test/ref/struct-ptr-6.asm @@ -1,9 +1,15 @@ // Minimal struct - accessing pointer to struct in memory using arrow operator -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code main: { .label SCREEN = $400 // SCREEN[0] = points->x diff --git a/src/test/ref/struct-ptr-6.log b/src/test/ref/struct-ptr-6.log index fbb2fdaac..4a4476cd3 100644 --- a/src/test/ref/struct-ptr-6.log +++ b/src/test/ref/struct-ptr-6.log @@ -191,12 +191,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - accessing pointer to struct in memory using arrow operator // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -241,12 +247,18 @@ Score: 38 // File Comments // Minimal struct - accessing pointer to struct in memory using arrow operator // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/struct-ptr-7.asm b/src/test/ref/struct-ptr-7.asm index 91092eacc..d29f3d3df 100644 --- a/src/test/ref/struct-ptr-7.asm +++ b/src/test/ref/struct-ptr-7.asm @@ -1,9 +1,15 @@ // Minimal struct - direct (constant) array access -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code main: { .label SCREEN = $400 // points[0].x = 2 @@ -33,4 +39,5 @@ main: { // } rts } +.segment Data points: .fill 2*2, 0 diff --git a/src/test/ref/struct-ptr-7.log b/src/test/ref/struct-ptr-7.log index 7e2023fec..08304133c 100644 --- a/src/test/ref/struct-ptr-7.log +++ b/src/test/ref/struct-ptr-7.log @@ -273,12 +273,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - direct (constant) array access // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -313,6 +319,7 @@ main: { rts } // File Data +.segment Data points: .fill 2*2, 0 ASSEMBLER OPTIMIZATIONS @@ -336,12 +343,18 @@ Score: 62 // File Comments // Minimal struct - direct (constant) array access // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -383,5 +396,6 @@ main: { rts } // File Data +.segment Data points: .fill 2*2, 0 diff --git a/src/test/ref/struct-ptr-8.asm b/src/test/ref/struct-ptr-8.asm index 51d682cfb..aeaf539a3 100644 --- a/src/test/ref/struct-ptr-8.asm +++ b/src/test/ref/struct-ptr-8.asm @@ -1,8 +1,14 @@ // Minimal struct - variable array access -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code main: { .label SCREEN = $400 .label i = 2 @@ -60,4 +66,5 @@ main: { // } rts } +.segment Data points: .fill 2*2, 0 diff --git a/src/test/ref/struct-ptr-8.log b/src/test/ref/struct-ptr-8.log index 3ac08c3b5..38276a290 100644 --- a/src/test/ref/struct-ptr-8.log +++ b/src/test/ref/struct-ptr-8.log @@ -306,11 +306,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - variable array access // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -397,6 +403,7 @@ main: { rts } // File Data +.segment Data points: .fill 2*2, 0 ASSEMBLER OPTIMIZATIONS @@ -456,11 +463,17 @@ Score: 1076 // File Comments // Minimal struct - variable array access // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -550,5 +563,6 @@ main: { rts } // File Data +.segment Data points: .fill 2*2, 0 diff --git a/src/test/ref/struct-ptr-9.asm b/src/test/ref/struct-ptr-9.asm index 2ed5eb862..0d8188681 100644 --- a/src/test/ref/struct-ptr-9.asm +++ b/src/test/ref/struct-ptr-9.asm @@ -1,9 +1,15 @@ // Minimal struct - array access with struct value copying (and initializing) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code main: { .label SCREEN = $400 .label i1 = 2 @@ -43,4 +49,5 @@ main: { // } rts } +.segment Data points: .fill 2*2, 0 diff --git a/src/test/ref/struct-ptr-9.log b/src/test/ref/struct-ptr-9.log index 044a6d878..3314039bb 100644 --- a/src/test/ref/struct-ptr-9.log +++ b/src/test/ref/struct-ptr-9.log @@ -208,12 +208,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal struct - array access with struct value copying (and initializing) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -281,6 +287,7 @@ main: { rts } // File Data +.segment Data points: .fill 2*2, 0 ASSEMBLER OPTIMIZATIONS @@ -328,12 +335,18 @@ Score: 716 // File Comments // Minimal struct - array access with struct value copying (and initializing) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-ptr-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 +.segment Code // main main: { .label SCREEN = $400 @@ -396,5 +409,6 @@ main: { rts } // File Data +.segment Data points: .fill 2*2, 0 diff --git a/src/test/ref/struct-unwinding-1.asm b/src/test/ref/struct-unwinding-1.asm index fa1a3836e..1fce39877 100644 --- a/src/test/ref/struct-unwinding-1.asm +++ b/src/test/ref/struct-unwinding-1.asm @@ -1,10 +1,16 @@ // Test combining unwind structs with classic structs -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-unwinding-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 +.segment Code main: { .label p1 = 2 // p1 = { 1, 2 } @@ -55,4 +61,5 @@ main: { // } rts } +.segment Data __0: .byte 1, 2 diff --git a/src/test/ref/struct-unwinding-1.log b/src/test/ref/struct-unwinding-1.log index 796ef6c7c..5297ce2e2 100644 --- a/src/test/ref/struct-unwinding-1.log +++ b/src/test/ref/struct-unwinding-1.log @@ -245,13 +245,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test combining unwind structs with classic structs // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-unwinding-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 +.segment Code // main main: { .label p1 = 2 @@ -312,6 +318,7 @@ main: { rts } // File Data +.segment Data __0: .byte 1, 2 ASSEMBLER OPTIMIZATIONS @@ -345,13 +352,19 @@ Score: 107 // File Comments // Test combining unwind structs with classic structs // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-unwinding-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 +.segment Code // main main: { .label p1 = 2 @@ -419,5 +432,6 @@ main: { rts } // File Data +.segment Data __0: .byte 1, 2 diff --git a/src/test/ref/struct-unwinding-2.asm b/src/test/ref/struct-unwinding-2.asm index 5564e58fd..1e7457304 100644 --- a/src/test/ref/struct-unwinding-2.asm +++ b/src/test/ref/struct-unwinding-2.asm @@ -1,11 +1,17 @@ // Test combining unwind structs with classic structs // Function calls parameter passing -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-unwinding-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 +.segment Code main: { .const p2_x = 3 .const p2_y = 4 @@ -83,4 +89,5 @@ print2: { // } rts } +.segment Data __0: .byte 1, 2 diff --git a/src/test/ref/struct-unwinding-2.log b/src/test/ref/struct-unwinding-2.log index 3f372333f..bf6800769 100644 --- a/src/test/ref/struct-unwinding-2.log +++ b/src/test/ref/struct-unwinding-2.log @@ -328,13 +328,19 @@ ASSEMBLER BEFORE OPTIMIZATION // Test combining unwind structs with classic structs // Function calls parameter passing // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-unwinding-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 +.segment Code // main main: { .const p2_x = 3 @@ -461,6 +467,7 @@ print2: { rts } // File Data +.segment Data __0: .byte 1, 2 ASSEMBLER OPTIMIZATIONS @@ -531,13 +538,19 @@ Score: 149 // Test combining unwind structs with classic structs // Function calls parameter passing // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="struct-unwinding-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 .label SCREEN = $400 +.segment Code // main main: { .const p2_x = 3 @@ -656,5 +669,6 @@ print2: { rts } // File Data +.segment Data __0: .byte 1, 2 diff --git a/src/test/ref/subexpr-optimize-0.asm b/src/test/ref/subexpr-optimize-0.asm index dd07ce97d..5cc836ef1 100644 --- a/src/test/ref/subexpr-optimize-0.asm +++ b/src/test/ref/subexpr-optimize-0.asm @@ -1,8 +1,14 @@ // Tests optimization of identical sub-expressions // The two examples of i*2 is detected as identical leading to optimized ASM where *2 is only calculated once -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label __1 = 4 .label screen = 2 diff --git a/src/test/ref/subexpr-optimize-0.log b/src/test/ref/subexpr-optimize-0.log index fc66ce158..a5a765248 100644 --- a/src/test/ref/subexpr-optimize-0.log +++ b/src/test/ref/subexpr-optimize-0.log @@ -187,10 +187,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests optimization of identical sub-expressions // The two examples of i*2 is detected as identical leading to optimized ASM where *2 is only calculated once // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label __1 = 4 @@ -285,10 +291,16 @@ Score: 701 // Tests optimization of identical sub-expressions // The two examples of i*2 is detected as identical leading to optimized ASM where *2 is only calculated once // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label __1 = 4 diff --git a/src/test/ref/subexpr-optimize-1.asm b/src/test/ref/subexpr-optimize-1.asm index b0feb073f..b2f2eb624 100644 --- a/src/test/ref/subexpr-optimize-1.asm +++ b/src/test/ref/subexpr-optimize-1.asm @@ -1,7 +1,13 @@ // A sub-expression that should not be optimized (+1 to a pointer) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 diff --git a/src/test/ref/subexpr-optimize-1.log b/src/test/ref/subexpr-optimize-1.log index 8b5093af9..268ce0157 100644 --- a/src/test/ref/subexpr-optimize-1.log +++ b/src/test/ref/subexpr-optimize-1.log @@ -211,10 +211,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // A sub-expression that should not be optimized (+1 to a pointer) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -283,10 +289,16 @@ Score: 471 // File Comments // A sub-expression that should not be optimized (+1 to a pointer) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/subexpr-optimize-2.asm b/src/test/ref/subexpr-optimize-2.asm index b84023c49..943683c5f 100644 --- a/src/test/ref/subexpr-optimize-2.asm +++ b/src/test/ref/subexpr-optimize-2.asm @@ -1,7 +1,13 @@ // Tests optimization of identical sub-expressions -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = 3 .label i = 2 diff --git a/src/test/ref/subexpr-optimize-2.log b/src/test/ref/subexpr-optimize-2.log index a20aa6524..d3debc013 100644 --- a/src/test/ref/subexpr-optimize-2.log +++ b/src/test/ref/subexpr-optimize-2.log @@ -214,10 +214,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests optimization of identical sub-expressions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = 3 @@ -323,10 +329,16 @@ Score: 871 // File Comments // Tests optimization of identical sub-expressions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = 3 diff --git a/src/test/ref/subexpr-optimize-3.asm b/src/test/ref/subexpr-optimize-3.asm index 1ba4a3991..27b13d5a5 100644 --- a/src/test/ref/subexpr-optimize-3.asm +++ b/src/test/ref/subexpr-optimize-3.asm @@ -1,7 +1,13 @@ // Tests optimization of identical sub-expressions -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label __4 = 4 .label screen = 2 diff --git a/src/test/ref/subexpr-optimize-3.log b/src/test/ref/subexpr-optimize-3.log index e6c46b966..e432db37f 100644 --- a/src/test/ref/subexpr-optimize-3.log +++ b/src/test/ref/subexpr-optimize-3.log @@ -236,10 +236,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests optimization of identical sub-expressions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label __4 = 4 @@ -347,10 +353,16 @@ Score: 891 // File Comments // Tests optimization of identical sub-expressions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label __4 = 4 diff --git a/src/test/ref/subexpr-optimize-4.asm b/src/test/ref/subexpr-optimize-4.asm index 1f21deafc..6c66c4478 100644 --- a/src/test/ref/subexpr-optimize-4.asm +++ b/src/test/ref/subexpr-optimize-4.asm @@ -1,7 +1,13 @@ // Tests optimization of identical sub-expressions -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label __6 = 4 .label screen = 2 diff --git a/src/test/ref/subexpr-optimize-4.log b/src/test/ref/subexpr-optimize-4.log index 8d01c9c6d..6b7962ebd 100644 --- a/src/test/ref/subexpr-optimize-4.log +++ b/src/test/ref/subexpr-optimize-4.log @@ -351,10 +351,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests optimization of identical sub-expressions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label __6 = 4 @@ -513,10 +519,16 @@ Score: 1101 // File Comments // Tests optimization of identical sub-expressions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="subexpr-optimize-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label __6 = 4 diff --git a/src/test/ref/summin.asm b/src/test/ref/summin.asm index afb460bbd..dc3523b75 100644 --- a/src/test/ref/summin.asm +++ b/src/test/ref/summin.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="summin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = $400 +.segment Code main: { .label s1 = 2 .label s3 = 3 diff --git a/src/test/ref/summin.log b/src/test/ref/summin.log index 92d05c5cd..c3648669e 100644 --- a/src/test/ref/summin.log +++ b/src/test/ref/summin.log @@ -330,11 +330,17 @@ Allocated (was zp[1]:9) zp[1]:3 [ main::s3#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="summin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { .label s1 = 2 @@ -469,11 +475,17 @@ Score: 74 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="summin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { .label s1 = 2 diff --git a/src/test/ref/switch-0.asm b/src/test/ref/switch-0.asm index cf33286bf..43d460afa 100644 --- a/src/test/ref/switch-0.asm +++ b/src/test/ref/switch-0.asm @@ -1,8 +1,14 @@ // Tests simple switch()-statement // Expected output 'd1444d' -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="switch-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 diff --git a/src/test/ref/switch-0.log b/src/test/ref/switch-0.log index e345fb4eb..2938fbab3 100644 --- a/src/test/ref/switch-0.log +++ b/src/test/ref/switch-0.log @@ -204,10 +204,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests simple switch()-statement // Expected output 'd1444d' // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="switch-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -326,10 +332,16 @@ Score: 641 // Tests simple switch()-statement // Expected output 'd1444d' // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="switch-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/switch-1.asm b/src/test/ref/switch-1.asm index 9c3fc49fd..1bc79185f 100644 --- a/src/test/ref/switch-1.asm +++ b/src/test/ref/switch-1.asm @@ -1,8 +1,14 @@ // Tests simple switch()-statement - including a continue statement for the enclosing loop // Expected output 'a1aa1a' (numbers should be inverted) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="switch-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 diff --git a/src/test/ref/switch-1.log b/src/test/ref/switch-1.log index cc2af2827..1bbbbed0d 100644 --- a/src/test/ref/switch-1.log +++ b/src/test/ref/switch-1.log @@ -174,10 +174,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests simple switch()-statement - including a continue statement for the enclosing loop // Expected output 'a1aa1a' (numbers should be inverted) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="switch-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -275,10 +281,16 @@ Score: 466 // Tests simple switch()-statement - including a continue statement for the enclosing loop // Expected output 'a1aa1a' (numbers should be inverted) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="switch-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/switch-2.asm b/src/test/ref/switch-2.asm index afaadcbad..cb7955513 100644 --- a/src/test/ref/switch-2.asm +++ b/src/test/ref/switch-2.asm @@ -1,7 +1,13 @@ // Tests simple switch()-statement - not inside a loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="switch-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const b = 1 .label SCREEN = $400 diff --git a/src/test/ref/switch-2.log b/src/test/ref/switch-2.log index 0ada250b1..2ecaefb88 100644 --- a/src/test/ref/switch-2.log +++ b/src/test/ref/switch-2.log @@ -116,10 +116,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests simple switch()-statement - not inside a loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="switch-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const b = 1 @@ -160,10 +166,16 @@ Score: 12 // File Comments // Tests simple switch()-statement - not inside a loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="switch-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const b = 1 diff --git a/src/test/ref/switch-4.asm b/src/test/ref/switch-4.asm index 994e755f5..f4dcd6074 100644 --- a/src/test/ref/switch-4.asm +++ b/src/test/ref/switch-4.asm @@ -1,8 +1,14 @@ // Tests simple switch()-statement - switch without default // Expected output " 1 4 " -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="switch-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 diff --git a/src/test/ref/switch-4.log b/src/test/ref/switch-4.log index 88aee6075..06f42d188 100644 --- a/src/test/ref/switch-4.log +++ b/src/test/ref/switch-4.log @@ -157,10 +157,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests simple switch()-statement - switch without default // Expected output " 1 4 " // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="switch-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -245,10 +251,16 @@ Score: 291 // Tests simple switch()-statement - switch without default // Expected output " 1 4 " // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="switch-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/ternary-1.asm b/src/test/ref/ternary-1.asm index af2248b31..2d77a4b98 100644 --- a/src/test/ref/ternary-1.asm +++ b/src/test/ref/ternary-1.asm @@ -1,7 +1,13 @@ // Tests the ternary operator -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 diff --git a/src/test/ref/ternary-1.log b/src/test/ref/ternary-1.log index 83aacb474..cfec5f4a1 100644 --- a/src/test/ref/ternary-1.log +++ b/src/test/ref/ternary-1.log @@ -162,10 +162,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests the ternary operator // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -252,10 +258,16 @@ Score: 256 // File Comments // Tests the ternary operator // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/ternary-2.asm b/src/test/ref/ternary-2.asm index fe24191c5..6946a8859 100644 --- a/src/test/ref/ternary-2.asm +++ b/src/test/ref/ternary-2.asm @@ -1,7 +1,13 @@ // Tests the ternary operator - when the condition is constant -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 // SCREEN[0] = true?'a':'b' diff --git a/src/test/ref/ternary-2.log b/src/test/ref/ternary-2.log index 6a2145981..c32b6d413 100644 --- a/src/test/ref/ternary-2.log +++ b/src/test/ref/ternary-2.log @@ -142,10 +142,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests the ternary operator - when the condition is constant // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -191,10 +197,16 @@ Score: 18 // File Comments // Tests the ternary operator - when the condition is constant // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/ternary-3.asm b/src/test/ref/ternary-3.asm index e72c005d5..898e5491d 100644 --- a/src/test/ref/ternary-3.asm +++ b/src/test/ref/ternary-3.asm @@ -1,7 +1,13 @@ // Tests the ternary operator - when the condition is constant -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 diff --git a/src/test/ref/ternary-3.log b/src/test/ref/ternary-3.log index 664e05870..b832ff370 100644 --- a/src/test/ref/ternary-3.log +++ b/src/test/ref/ternary-3.log @@ -387,10 +387,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests the ternary operator - when the condition is constant // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -581,10 +587,16 @@ Score: 490 // File Comments // Tests the ternary operator - when the condition is constant // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/ternary-4.asm b/src/test/ref/ternary-4.asm index ee8dc148a..1f6927fbf 100644 --- a/src/test/ref/ternary-4.asm +++ b/src/test/ref/ternary-4.asm @@ -1,7 +1,13 @@ // Tests the ternary operator - complex nested conditional operators -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label b = 2 diff --git a/src/test/ref/ternary-4.log b/src/test/ref/ternary-4.log index 1d20beeba..f4a8aa094 100644 --- a/src/test/ref/ternary-4.log +++ b/src/test/ref/ternary-4.log @@ -394,10 +394,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests the ternary operator - complex nested conditional operators // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -568,10 +574,16 @@ Score: 5551 // File Comments // Tests the ternary operator - complex nested conditional operators // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/ternary-inference.asm b/src/test/ref/ternary-inference.asm index f15099c44..e5c1a2e88 100644 --- a/src/test/ref/ternary-inference.asm +++ b/src/test/ref/ternary-inference.asm @@ -1,7 +1,13 @@ // Type inference into the ternary operator -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-inference.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 ldx #0 diff --git a/src/test/ref/ternary-inference.log b/src/test/ref/ternary-inference.log index 12001873e..8614433dd 100644 --- a/src/test/ref/ternary-inference.log +++ b/src/test/ref/ternary-inference.log @@ -188,10 +188,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Type inference into the ternary operator // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-inference.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -284,10 +290,16 @@ Score: 336 // File Comments // Type inference into the ternary operator // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="ternary-inference.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/test-comments-block.asm b/src/test/ref/test-comments-block.asm index a4400ca83..ac07b65f6 100644 --- a/src/test/ref/test-comments-block.asm +++ b/src/test/ref/test-comments-block.asm @@ -1,13 +1,19 @@ /* Tests that block comments are compiled correctly * Has a bunch of comments that will be moved into the generated ASM */ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-block.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // One of the bytes used for addition .const a = 'a' // The C64 screen .label SCREEN = $400 +.segment Code /* The program entry point */ main: { ldx #0 diff --git a/src/test/ref/test-comments-block.log b/src/test/ref/test-comments-block.log index 55a73a01d..3bfc7873d 100644 --- a/src/test/ref/test-comments-block.log +++ b/src/test/ref/test-comments-block.log @@ -235,14 +235,20 @@ ASSEMBLER BEFORE OPTIMIZATION * Has a bunch of comments that will be moved into the generated ASM */ // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-block.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // One of the bytes used for addition .const a = 'a' // The C64 screen .label SCREEN = $400 +.segment Code // main /* The program entry point */ main: { @@ -358,14 +364,20 @@ Score: 271 * Has a bunch of comments that will be moved into the generated ASM */ // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-block.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // One of the bytes used for addition .const a = 'a' // The C64 screen .label SCREEN = $400 +.segment Code // main /* The program entry point */ main: { diff --git a/src/test/ref/test-comments-global.asm b/src/test/ref/test-comments-global.asm index 046253f5f..39a10bba5 100644 --- a/src/test/ref/test-comments-global.asm +++ b/src/test/ref/test-comments-global.asm @@ -1,9 +1,15 @@ // Tests that global variables with initializer gets their comments -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-global.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // The screen (should become a var-comment in ASM) .label screen = 2 +.segment Code __start: { // screen = 0x0400 lda #<$400 diff --git a/src/test/ref/test-comments-global.log b/src/test/ref/test-comments-global.log index ec5796b94..053a71b9e 100644 --- a/src/test/ref/test-comments-global.log +++ b/src/test/ref/test-comments-global.log @@ -103,12 +103,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that global variables with initializer gets their comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-global.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // The screen (should become a var-comment in ASM) .label screen = 2 +.segment Code // __start __start: { jmp __init1 @@ -186,12 +192,18 @@ Score: 60 // File Comments // Tests that global variables with initializer gets their comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-global.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels // The screen (should become a var-comment in ASM) .label screen = 2 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/test-comments-loop.asm b/src/test/ref/test-comments-loop.asm index 26c1827d4..27d9c7b22 100644 --- a/src/test/ref/test-comments-loop.asm +++ b/src/test/ref/test-comments-loop.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-loop.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 diff --git a/src/test/ref/test-comments-loop.log b/src/test/ref/test-comments-loop.log index 902b42b9a..3c298a60d 100644 --- a/src/test/ref/test-comments-loop.log +++ b/src/test/ref/test-comments-loop.log @@ -112,10 +112,16 @@ Uplifting [] best 251 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-loop.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -175,10 +181,16 @@ Score: 161 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-loop.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/test-comments-single.asm b/src/test/ref/test-comments-single.asm index a0b1094e9..23bfc1471 100644 --- a/src/test/ref/test-comments-single.asm +++ b/src/test/ref/test-comments-single.asm @@ -1,12 +1,18 @@ // Tests that single-line comments are compiled correctly // Has a bunch of comments that will be moved into the generated ASM -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-single.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // One of the bytes used for addition .const a = 'a' // The C64 screen .label SCREEN = $400 +.segment Code // The program entry point main: { ldx #0 diff --git a/src/test/ref/test-comments-single.log b/src/test/ref/test-comments-single.log index 0b7c63a9b..72804ae25 100644 --- a/src/test/ref/test-comments-single.log +++ b/src/test/ref/test-comments-single.log @@ -234,14 +234,20 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests that single-line comments are compiled correctly // Has a bunch of comments that will be moved into the generated ASM // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-single.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // One of the bytes used for addition .const a = 'a' // The C64 screen .label SCREEN = $400 +.segment Code // main // The program entry point main: { @@ -355,14 +361,20 @@ Score: 271 // Tests that single-line comments are compiled correctly // Has a bunch of comments that will be moved into the generated ASM // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-single.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // One of the bytes used for addition .const a = 'a' // The C64 screen .label SCREEN = $400 +.segment Code // main // The program entry point main: { diff --git a/src/test/ref/test-comments-usage.asm b/src/test/ref/test-comments-usage.asm index 633137b83..a9eaba84b 100644 --- a/src/test/ref/test-comments-usage.asm +++ b/src/test/ref/test-comments-usage.asm @@ -1,8 +1,14 @@ // Tests that single-line comments are only included once in the output -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-usage.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code // The program entry point main: { // *SCREEN = 'a' diff --git a/src/test/ref/test-comments-usage.log b/src/test/ref/test-comments-usage.log index afdcfa34d..25bf3c4c7 100644 --- a/src/test/ref/test-comments-usage.log +++ b/src/test/ref/test-comments-usage.log @@ -66,11 +66,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that single-line comments are only included once in the output // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-usage.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main // The program entry point main: { @@ -103,11 +109,17 @@ Score: 12 // File Comments // Tests that single-line comments are only included once in the output // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comments-usage.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main // The program entry point main: { diff --git a/src/test/ref/test-comparisons-sword.asm b/src/test/ref/test-comparisons-sword.asm index a041f0c8e..b5360a579 100644 --- a/src/test/ref/test-comparisons-sword.asm +++ b/src/test/ref/test-comparisons-sword.asm @@ -1,7 +1,12 @@ // Test signed word comparisons -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comparisons-sword.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const LT = 0 .const LE = 1 .const GT = 2 @@ -15,6 +20,7 @@ .label print_screen = $400 .label print_line_cursor = 7 .label print_char_cursor = $d +.segment Code main: { .label w1 = $f .label w2 = $11 @@ -286,6 +292,7 @@ compare: { lda #>ops_6 sta.z ops+1 jmp __b6 + .segment Data ops_1: .text "!=" .byte 0 ops_2: .text "==" @@ -299,6 +306,7 @@ compare: { ops_6: .text "< " .byte 0 } +.segment Code // Print a newline print_ln: { __b1: @@ -458,5 +466,6 @@ print_uchar: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" swords: .word -$6fed, $12, $7fed diff --git a/src/test/ref/test-comparisons-sword.log b/src/test/ref/test-comparisons-sword.log index 8f98c95da..3862cd3e7 100644 --- a/src/test/ref/test-comparisons-sword.log +++ b/src/test/ref/test-comparisons-sword.log @@ -2152,9 +2152,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test signed word comparisons // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comparisons-sword.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const LT = 0 .const LE = 1 @@ -2169,6 +2174,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label print_screen = $400 .label print_line_cursor = 7 .label print_char_cursor = $d +.segment Code // main main: { .label w1 = $f @@ -2692,6 +2698,7 @@ compare: { lda #>ops_6 sta.z ops+1 jmp __b6 + .segment Data ops_1: .text "!=" .byte 0 ops_2: .text "==" @@ -2705,6 +2712,7 @@ compare: { ops_6: .text "< " .byte 0 } +.segment Code // print_ln // Print a newline print_ln: { @@ -2974,6 +2982,7 @@ print_uchar: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" swords: .word -$6fed, $12, $7fed @@ -3146,9 +3155,9 @@ Removing instruction jmp __b4 Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #3 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [104] beq __b1 to bne -Fixing long branch [108] beq __b2 to bne -Fixing long branch [112] beq __b3 to bne +Fixing long branch [110] beq __b1 to bne +Fixing long branch [114] beq __b2 to bne +Fixing long branch [118] beq __b3 to bne FINAL SYMBOL TABLE const nomodify byte EQ = 4 @@ -3299,9 +3308,14 @@ Score: 793661 // File Comments // Test signed word comparisons // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comparisons-sword.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const LT = 0 .const LE = 1 @@ -3316,6 +3330,7 @@ Score: 793661 .label print_screen = $400 .label print_line_cursor = 7 .label print_char_cursor = $d +.segment Code // main main: { .label w1 = $f @@ -3775,6 +3790,7 @@ compare: { lda #>ops_6 sta.z ops+1 jmp __b6 + .segment Data ops_1: .text "!=" .byte 0 ops_2: .text "==" @@ -3788,6 +3804,7 @@ compare: { ops_6: .text "< " .byte 0 } +.segment Code // print_ln // Print a newline print_ln: { @@ -4039,6 +4056,7 @@ print_uchar: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" swords: .word -$6fed, $12, $7fed diff --git a/src/test/ref/test-comparisons-word.asm b/src/test/ref/test-comparisons-word.asm index a870163b6..9fbe580b6 100644 --- a/src/test/ref/test-comparisons-word.asm +++ b/src/test/ref/test-comparisons-word.asm @@ -1,9 +1,14 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comparisons-word.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // empty circle .const FF = $57 // filled circle @@ -11,6 +16,7 @@ .label print_screen = $400 .label print_line_cursor = 7 .label print_char_cursor = $d +.segment Code main: { .label w1 = $f .label w2 = $11 @@ -285,6 +291,7 @@ compare: { lda #>ops_6 sta.z ops+1 jmp __b6 + .segment Data ops_1: .text "!=" .byte 0 ops_2: .text "==" @@ -298,6 +305,7 @@ compare: { ops_6: .text "< " .byte 0 } +.segment Code // Print a newline print_ln: { __b1: @@ -428,5 +436,6 @@ print_uchar: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" words: .word $12, $3f34, $cfed diff --git a/src/test/ref/test-comparisons-word.log b/src/test/ref/test-comparisons-word.log index 3471a8267..b47e46807 100644 --- a/src/test/ref/test-comparisons-word.log +++ b/src/test/ref/test-comparisons-word.log @@ -2041,9 +2041,14 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comparisons-word.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // empty circle .const FF = $57 @@ -2052,6 +2057,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label print_screen = $400 .label print_line_cursor = 7 .label print_char_cursor = $d +.segment Code // main main: { .label w1 = $f @@ -2587,6 +2593,7 @@ compare: { lda #>ops_6 sta.z ops+1 jmp __b6 + .segment Data ops_1: .text "!=" .byte 0 ops_2: .text "==" @@ -2600,6 +2607,7 @@ compare: { ops_6: .text "< " .byte 0 } +.segment Code // print_ln // Print a newline print_ln: { @@ -2811,6 +2819,7 @@ print_uchar: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" words: .word $12, $3f34, $cfed @@ -2971,9 +2980,9 @@ Removing instruction jmp __b4 Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #3 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [100] beq __b1 to bne -Fixing long branch [104] beq __b2 to bne -Fixing long branch [108] beq __b3 to bne +Fixing long branch [106] beq __b1 to bne +Fixing long branch [110] beq __b2 to bne +Fixing long branch [114] beq __b3 to bne FINAL SYMBOL TABLE const nomodify byte FF = $57 @@ -3116,9 +3125,14 @@ Score: 793615 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comparisons-word.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // empty circle .const FF = $57 @@ -3127,6 +3141,7 @@ Score: 793615 .label print_screen = $400 .label print_line_cursor = 7 .label print_char_cursor = $d +.segment Code // main main: { .label w1 = $f @@ -3595,6 +3610,7 @@ compare: { lda #>ops_6 sta.z ops+1 jmp __b6 + .segment Data ops_1: .text "!=" .byte 0 ops_2: .text "==" @@ -3608,6 +3624,7 @@ compare: { ops_6: .text "< " .byte 0 } +.segment Code // print_ln // Print a newline print_ln: { @@ -3809,6 +3826,7 @@ print_uchar: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" words: .word $12, $3f34, $cfed diff --git a/src/test/ref/test-comparisons.asm b/src/test/ref/test-comparisons.asm index af0ac6a39..b50f0f7fb 100644 --- a/src/test/ref/test-comparisons.asm +++ b/src/test/ref/test-comparisons.asm @@ -1,11 +1,17 @@ // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comparisons.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label print_screen = $400 .label print_line_cursor = 6 .label print_char_cursor = $a +.segment Code main: { .label b = $c .label a = 2 @@ -473,6 +479,7 @@ main: { lda.z print_line_cursor+1 sta.z print_char_cursor+1 jmp __b1 + .segment Data cs: .byte 7, $c7, $37, $97, $67 op: .text "< " .byte 0 @@ -485,6 +492,7 @@ main: { op16: .text "==" .byte 0 } +.segment Code // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) @@ -634,4 +642,5 @@ print_str: { !: jmp __b1 } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/test-comparisons.log b/src/test/ref/test-comparisons.log index a4c0663a4..883ee9b03 100644 --- a/src/test/ref/test-comparisons.log +++ b/src/test/ref/test-comparisons.log @@ -3540,13 +3540,19 @@ ASSEMBLER BEFORE OPTIMIZATION // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comparisons.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_line_cursor = 6 .label print_char_cursor = $a +.segment Code // main main: { .label b = $c @@ -4574,6 +4580,7 @@ main: { // [2] phi print_char_cursor#100 = print_char_cursor#150 [phi:main::@68->main::@1#2] -- register_copy // [2] phi main::a#10 = main::a#1 [phi:main::@68->main::@1#3] -- register_copy jmp __b1 + .segment Data cs: .byte 7, $c7, $37, $97, $67 op: .text "< " .byte 0 @@ -4586,6 +4593,7 @@ main: { op16: .text "==" .byte 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -4850,6 +4858,7 @@ print_str: { jmp __b1_from___b3 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -5317,13 +5326,19 @@ Score: 15209 // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-comparisons.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_line_cursor = 6 .label print_char_cursor = $a +.segment Code // main main: { .label b = $c @@ -6217,6 +6232,7 @@ main: { // [2] phi print_char_cursor#100 = print_char_cursor#150 [phi:main::@68->main::@1#2] -- register_copy // [2] phi main::a#10 = main::a#1 [phi:main::@68->main::@1#3] -- register_copy jmp __b1 + .segment Data cs: .byte 7, $c7, $37, $97, $67 op: .text "< " .byte 0 @@ -6229,6 +6245,7 @@ main: { op16: .text "==" .byte 0 } +.segment Code // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { @@ -6473,5 +6490,6 @@ print_str: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/test-division.asm b/src/test/ref/test-division.asm index 8ad5bd09a..dfcff4c6f 100644 --- a/src/test/ref/test-division.asm +++ b/src/test/ref/test-division.asm @@ -1,7 +1,12 @@ // Test the binary division library -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-division.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label print_screen = $400 .label print_line_cursor = 4 .label print_char_cursor = $c @@ -9,6 +14,7 @@ .label rem16u = $a // Remainder after signed 16 bit division .label rem16s = $a +.segment Code main: { // print_cls() jsr print_cls @@ -105,9 +111,11 @@ test_8u: { lda.z print_line_cursor+1 sta.z print_char_cursor+1 jmp __b1 + .segment Data dividends: .byte $ff, $ff, $ff, $ff, $ff, $ff divisors: .byte 5, 7, $b, $d, $11, $13 } +.segment Code test_16u: { .label dividend = 6 .label divisor = 8 @@ -188,9 +196,11 @@ test_16u: { bne __b1 // } rts + .segment Data dividends: .word $ffff, $ffff, $ffff, $ffff, $ffff, $ffff divisors: .word 5, 7, $b, $d, $11, $13 } +.segment Code test_8s: { .label dividend = 3 .label divisor = $12 @@ -257,9 +267,11 @@ test_8s: { bne __b1 // } rts + .segment Data dividends: .byte $7f, -$7f, -$7f, $7f, $7f, $7f divisors: .byte 5, 7, -$b, -$d, $11, $13 } +.segment Code test_16s: { .label dividend = 6 .label divisor = $14 @@ -336,9 +348,11 @@ test_16s: { bne __b1 // } rts + .segment Data dividends: .word $7fff, $7fff, -$7fff, -$7fff, $7fff, -$7fff divisors: .word 5, -7, $b, -$d, -$11, $13 } +.segment Code // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { .const c = ' ' @@ -851,6 +865,7 @@ divr16s: { ldy #1 jmp __b2 } +.segment Data print_hextab: .text "0123456789abcdef" str: .text " / " .byte 0 diff --git a/src/test/ref/test-division.log b/src/test/ref/test-division.log index 1aabc63b8..716e4b669 100644 --- a/src/test/ref/test-division.log +++ b/src/test/ref/test-division.log @@ -5127,9 +5127,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test the binary division library // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-division.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_line_cursor = 4 @@ -5138,6 +5143,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label rem16u = $a // Remainder after signed 16 bit division .label rem16s = $a +.segment Code // main main: { // [1] call print_cls @@ -5368,9 +5374,11 @@ test_8u: { // [15] phi print_char_cursor#144 = print_char_cursor#187 [phi:test_8u::@11->test_8u::@1#1] -- register_copy // [15] phi test_8u::i#10 = test_8u::i#1 [phi:test_8u::@11->test_8u::@1#2] -- register_copy jmp __b1 + .segment Data dividends: .byte $ff, $ff, $ff, $ff, $ff, $ff divisors: .byte 5, 7, $b, $d, $11, $13 } +.segment Code // test_16u test_16u: { .label dividend = 6 @@ -5536,9 +5544,11 @@ test_16u: { __breturn: // [72] return rts + .segment Data dividends: .word $ffff, $ffff, $ffff, $ffff, $ffff, $ffff divisors: .word 5, 7, $b, $d, $11, $13 } +.segment Code // test_8s test_8s: { .label dividend = 3 @@ -5690,9 +5700,11 @@ test_8s: { __breturn: // [101] return rts + .segment Data dividends: .byte $7f, -$7f, -$7f, $7f, $7f, $7f divisors: .byte 5, 7, -$b, -$d, $11, $13 } +.segment Code // test_16s test_16s: { .label dividend = 6 @@ -5854,9 +5866,11 @@ test_16s: { __breturn: // [131] return rts + .segment Data dividends: .word $7fff, $7fff, -$7fff, -$7fff, $7fff, -$7fff divisors: .word 5, -7, $b, -$d, -$11, $13 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { @@ -6751,6 +6765,7 @@ divr16s: { jmp __b2 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" str: .text " / " .byte 0 @@ -7466,9 +7481,14 @@ Score: 31445 // File Comments // Test the binary division library // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-division.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_line_cursor = 4 @@ -7477,6 +7497,7 @@ Score: 31445 .label rem16u = $a // Remainder after signed 16 bit division .label rem16s = $a +.segment Code // main main: { // print_cls() @@ -7670,9 +7691,11 @@ test_8u: { // [15] phi print_char_cursor#144 = print_char_cursor#187 [phi:test_8u::@11->test_8u::@1#1] -- register_copy // [15] phi test_8u::i#10 = test_8u::i#1 [phi:test_8u::@11->test_8u::@1#2] -- register_copy jmp __b1 + .segment Data dividends: .byte $ff, $ff, $ff, $ff, $ff, $ff divisors: .byte 5, 7, $b, $d, $11, $13 } +.segment Code // test_16u test_16u: { .label dividend = 6 @@ -7817,9 +7840,11 @@ test_16u: { // } // [72] return rts + .segment Data dividends: .word $ffff, $ffff, $ffff, $ffff, $ffff, $ffff divisors: .word 5, 7, $b, $d, $11, $13 } +.segment Code // test_8s test_8s: { .label dividend = 3 @@ -7949,9 +7974,11 @@ test_8s: { // } // [101] return rts + .segment Data dividends: .byte $7f, -$7f, -$7f, $7f, $7f, $7f divisors: .byte 5, 7, -$b, -$d, $11, $13 } +.segment Code // test_16s test_16s: { .label dividend = 6 @@ -8092,9 +8119,11 @@ test_16s: { // } // [131] return rts + .segment Data dividends: .word $7fff, $7fff, -$7fff, -$7fff, $7fff, -$7fff divisors: .word 5, -7, $b, -$d, -$11, $13 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { @@ -8926,6 +8955,7 @@ divr16s: { jmp __b2 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" str: .text " / " .byte 0 diff --git a/src/test/ref/test-interrupt-notype.asm b/src/test/ref/test-interrupt-notype.asm index d8e8ab87f..0cbb4ae17 100644 --- a/src/test/ref/test-interrupt-notype.asm +++ b/src/test/ref/test-interrupt-notype.asm @@ -1,9 +1,15 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-interrupt-notype.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label KERNEL_IRQ = $314 .label BG_COLOR = $d020 .label FGCOL = $d021 +.segment Code irq: { // (*BG_COLOR)++; inc BG_COLOR diff --git a/src/test/ref/test-interrupt-notype.log b/src/test/ref/test-interrupt-notype.log index b6eccfdbe..a29090543 100644 --- a/src/test/ref/test-interrupt-notype.log +++ b/src/test/ref/test-interrupt-notype.log @@ -106,13 +106,19 @@ Uplifting [] best 148 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-interrupt-notype.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label KERNEL_IRQ = $314 .label BG_COLOR = $d020 .label FGCOL = $d021 +.segment Code // irq irq: { // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry @@ -164,13 +170,19 @@ Score: 142 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-interrupt-notype.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label KERNEL_IRQ = $314 .label BG_COLOR = $d020 .label FGCOL = $d021 +.segment Code // irq irq: { // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry diff --git a/src/test/ref/test-interrupt-volatile-write.asm b/src/test/ref/test-interrupt-volatile-write.asm index e983b27be..f11101432 100644 --- a/src/test/ref/test-interrupt-volatile-write.asm +++ b/src/test/ref/test-interrupt-volatile-write.asm @@ -1,11 +1,17 @@ // Tests that volatile variables can be both read & written inside & outside interrupts // Currently fails because the modification is optimized away -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-interrupt-volatile-write.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label KERNEL_IRQ = $314 .label BG_COLOR = $d020 .label col = 2 +.segment Code __start: { // col = 0 lda #0 diff --git a/src/test/ref/test-interrupt-volatile-write.log b/src/test/ref/test-interrupt-volatile-write.log index 4806d11f0..6528533b6 100644 --- a/src/test/ref/test-interrupt-volatile-write.log +++ b/src/test/ref/test-interrupt-volatile-write.log @@ -203,13 +203,19 @@ ASSEMBLER BEFORE OPTIMIZATION // Tests that volatile variables can be both read & written inside & outside interrupts // Currently fails because the modification is optimized away // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-interrupt-volatile-write.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label KERNEL_IRQ = $314 .label BG_COLOR = $d020 .label col = 2 +.segment Code // __start __start: { jmp __init1 @@ -329,13 +335,19 @@ Score: 922 // Tests that volatile variables can be both read & written inside & outside interrupts // Currently fails because the modification is optimized away // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-interrupt-volatile-write.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label KERNEL_IRQ = $314 .label BG_COLOR = $d020 .label col = 2 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/test-interrupt-volatile.asm b/src/test/ref/test-interrupt-volatile.asm index 17846b3da..c16dc6297 100644 --- a/src/test/ref/test-interrupt-volatile.asm +++ b/src/test/ref/test-interrupt-volatile.asm @@ -1,9 +1,15 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-interrupt-volatile.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label KERNEL_IRQ = $314 .label BG_COLOR = $d020 .label col = 2 +.segment Code __start: { // col = 0 lda #0 diff --git a/src/test/ref/test-interrupt-volatile.log b/src/test/ref/test-interrupt-volatile.log index 2c77798c8..8ba0782c5 100644 --- a/src/test/ref/test-interrupt-volatile.log +++ b/src/test/ref/test-interrupt-volatile.log @@ -140,13 +140,19 @@ Uplifting [] best 192 combination zp[1]:2 [ col ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-interrupt-volatile.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label KERNEL_IRQ = $314 .label BG_COLOR = $d020 .label col = 2 +.segment Code // __start __start: { jmp __init1 @@ -230,13 +236,19 @@ Score: 150 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-interrupt-volatile.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label KERNEL_IRQ = $314 .label BG_COLOR = $d020 .label col = 2 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/test-interrupt.asm b/src/test/ref/test-interrupt.asm index d8e8ab87f..49ce35348 100644 --- a/src/test/ref/test-interrupt.asm +++ b/src/test/ref/test-interrupt.asm @@ -1,9 +1,15 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-interrupt.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label KERNEL_IRQ = $314 .label BG_COLOR = $d020 .label FGCOL = $d021 +.segment Code irq: { // (*BG_COLOR)++; inc BG_COLOR diff --git a/src/test/ref/test-interrupt.log b/src/test/ref/test-interrupt.log index b6eccfdbe..8fe914bd8 100644 --- a/src/test/ref/test-interrupt.log +++ b/src/test/ref/test-interrupt.log @@ -106,13 +106,19 @@ Uplifting [] best 148 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-interrupt.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label KERNEL_IRQ = $314 .label BG_COLOR = $d020 .label FGCOL = $d021 +.segment Code // irq irq: { // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry @@ -164,13 +170,19 @@ Score: 142 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-interrupt.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label KERNEL_IRQ = $314 .label BG_COLOR = $d020 .label FGCOL = $d021 +.segment Code // irq irq: { // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry diff --git a/src/test/ref/test-kasm-pc.asm b/src/test/ref/test-kasm-pc.asm index 5f6d71f9a..3adc3b310 100644 --- a/src/test/ref/test-kasm-pc.asm +++ b/src/test/ref/test-kasm-pc.asm @@ -1,7 +1,13 @@ // Test inline KickAssembler code with PC location specification -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-kasm-pc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label BORDER_COLOR = $d020 ldx #0 @@ -13,6 +19,7 @@ main: { inx jmp __b2 } +.segment Data .pc = $2000 "TABLE" TABLE: .byte 1, 2, 3 diff --git a/src/test/ref/test-kasm-pc.log b/src/test/ref/test-kasm-pc.log index 81e0e6ae4..2b0ec6790 100644 --- a/src/test/ref/test-kasm-pc.log +++ b/src/test/ref/test-kasm-pc.log @@ -111,10 +111,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test inline KickAssembler code with PC location specification // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-kasm-pc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label BORDER_COLOR = $d020 @@ -139,6 +145,7 @@ main: { jmp __b1 } // File Data +.segment Data .pc = $2000 "TABLE" TABLE: .byte 1, 2, 3 @@ -173,10 +180,16 @@ Score: 155 // File Comments // Test inline KickAssembler code with PC location specification // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-kasm-pc.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label BORDER_COLOR = $d020 @@ -198,6 +211,7 @@ main: { jmp __b2 } // File Data +.segment Data .pc = $2000 "TABLE" TABLE: .byte 1, 2, 3 diff --git a/src/test/ref/test-kasm.asm b/src/test/ref/test-kasm.asm index 293b837c7..640d49f7e 100644 --- a/src/test/ref/test-kasm.asm +++ b/src/test/ref/test-kasm.asm @@ -1,7 +1,13 @@ // Test inline KickAssembler code -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-kasm.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { __b1: // kickasm @@ -10,6 +16,7 @@ main: { jmp __b1 } +.segment Data // KickAsm data initializer A: .byte 1, 2, 3 diff --git a/src/test/ref/test-kasm.log b/src/test/ref/test-kasm.log index c073fbb9b..a3bce55e9 100644 --- a/src/test/ref/test-kasm.log +++ b/src/test/ref/test-kasm.log @@ -80,10 +80,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test inline KickAssembler code // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-kasm.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { jmp __b1 @@ -96,6 +102,7 @@ main: { jmp __b1 } // File Data +.segment Data // KickAsm data initializer A: .byte 1, 2, 3 @@ -118,10 +125,16 @@ Score: 2590 // File Comments // Test inline KickAssembler code // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-kasm.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // main::@1 @@ -134,6 +147,7 @@ main: { jmp __b1 } // File Data +.segment Data // KickAsm data initializer A: .byte 1, 2, 3 diff --git a/src/test/ref/test-keyboard-space.asm b/src/test/ref/test-keyboard-space.asm index e1b7ee733..1e789f464 100644 --- a/src/test/ref/test-keyboard-space.asm +++ b/src/test/ref/test-keyboard-space.asm @@ -16,9 +16,14 @@ // |6. | #%10111111 (191/$bf) | / ($2f)| ^ ($1e)| = ($3d)|RGHT-SH($ )| HOME ($ )| ; ($3b)| * ($2a)| £ ($1c)| // |7. | #%01111111 (127/$7f) | STOP ($ )| q ($11)|COMMODR($ )| SPACE ($20)| 2 ($32)|CONTROL($ )| <- ($1f)| 1 ($31)| // +----+----------------------+------------+------------+------------+------------+------------+------------+------------+------------+ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-keyboard-space.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const KEY_SPACE = $3c .const GREEN = 5 .const BLUE = 6 @@ -29,6 +34,7 @@ .label BG_COLOR = $d021 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 +.segment Code main: { // keyboard_init() jsr keyboard_init @@ -95,6 +101,7 @@ keyboard_matrix_read: { // } rts } +.segment Data // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) diff --git a/src/test/ref/test-keyboard-space.log b/src/test/ref/test-keyboard-space.log index 54b8bd78a..2cee44203 100644 --- a/src/test/ref/test-keyboard-space.log +++ b/src/test/ref/test-keyboard-space.log @@ -401,9 +401,14 @@ ASSEMBLER BEFORE OPTIMIZATION // |7. | #%01111111 (127/$7f) | STOP ($ )| q ($11)|COMMODR($ )| SPACE ($20)| 2 ($32)|CONTROL($ )| <- ($1f)| 1 ($31)| // +----+----------------------+------------+------------+------------+------------+------------+------------+------------+------------+ // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-keyboard-space.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const KEY_SPACE = $3c .const GREEN = 5 @@ -415,6 +420,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label BG_COLOR = $d021 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 +.segment Code // main main: { // [1] call keyboard_init @@ -517,6 +523,7 @@ keyboard_matrix_read: { rts } // File Data +.segment Data // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) @@ -607,9 +614,14 @@ Score: 1141 // |7. | #%01111111 (127/$7f) | STOP ($ )| q ($11)|COMMODR($ )| SPACE ($20)| 2 ($32)|CONTROL($ )| <- ($1f)| 1 ($31)| // +----+----------------------+------------+------------+------------+------------+------------+------------+------------+------------+ // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-keyboard-space.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const KEY_SPACE = $3c .const GREEN = 5 @@ -621,6 +633,7 @@ Score: 1141 .label BG_COLOR = $d021 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 +.segment Code // main main: { // keyboard_init() @@ -722,6 +735,7 @@ keyboard_matrix_read: { rts } // File Data +.segment Data // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) diff --git a/src/test/ref/test-keyboard.asm b/src/test/ref/test-keyboard.asm index 9876c7010..1f538ecf8 100644 --- a/src/test/ref/test-keyboard.asm +++ b/src/test/ref/test-keyboard.asm @@ -1,7 +1,12 @@ // Test keyboard input - in the keyboard matrix and mapping screen codes to key codes -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-keyboard.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const KEY_3 = 8 .const KEY_W = 9 .const KEY_A = $a @@ -58,6 +63,7 @@ .label RASTER = $d012 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 +.segment Code main: { .label sc = 2 .label screen = 5 @@ -270,6 +276,7 @@ keyboard_key_pressed: { // } rts } +.segment Data // Keycodes for each screen code character from $00-$3f. // Chars that do not have an unmodified keycode return $3f (representing RUN/STOP). keyboard_char_keycodes: .byte KEY_AT, KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, $3f, KEY_POUND, $3f, KEY_ARROW_UP, KEY_ARROW_LEFT, KEY_SPACE, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, KEY_ASTERISK, KEY_PLUS, KEY_COMMA, KEY_MINUS, KEY_DOT, KEY_SLASH, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_COLON, KEY_SEMICOLON, $3f, KEY_EQUALS, $3f, $3f diff --git a/src/test/ref/test-keyboard.log b/src/test/ref/test-keyboard.log index b2086e8b9..c17580d72 100644 --- a/src/test/ref/test-keyboard.log +++ b/src/test/ref/test-keyboard.log @@ -1045,9 +1045,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test keyboard input - in the keyboard matrix and mapping screen codes to key codes // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-keyboard.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const KEY_3 = 8 .const KEY_W = 9 @@ -1105,6 +1110,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label RASTER = $d012 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 +.segment Code // main main: { .label sc = 2 @@ -1441,6 +1447,7 @@ keyboard_key_pressed: { rts } // File Data +.segment Data // Keycodes for each screen code character from $00-$3f. // Chars that do not have an unmodified keycode return $3f (representing RUN/STOP). keyboard_char_keycodes: .byte KEY_AT, KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, $3f, KEY_POUND, $3f, KEY_ARROW_UP, KEY_ARROW_LEFT, KEY_SPACE, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, KEY_ASTERISK, KEY_PLUS, KEY_COMMA, KEY_MINUS, KEY_DOT, KEY_SLASH, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_COLON, KEY_SEMICOLON, $3f, KEY_EQUALS, $3f, $3f @@ -1518,8 +1525,8 @@ Removing instruction jmp __b5 Removing instruction jmp __b6 Removing instruction jmp __b12 Succesful ASM optimization Pass5NextJumpElimination -Fixing long branch [75] bcc __b2 to bcs Fixing long branch [81] bcc __b2 to bcs +Fixing long branch [87] bcc __b2 to bcs FINAL SYMBOL TABLE const nomodify struct MOS6526_CIA* CIA1 = (struct MOS6526_CIA*) 56320 @@ -1671,9 +1678,14 @@ Score: 57707 // File Comments // Test keyboard input - in the keyboard matrix and mapping screen codes to key codes // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-keyboard.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const KEY_3 = 8 .const KEY_W = 9 @@ -1731,6 +1743,7 @@ Score: 57707 .label RASTER = $d012 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 +.segment Code // main main: { .label sc = 2 @@ -2057,6 +2070,7 @@ keyboard_key_pressed: { rts } // File Data +.segment Data // Keycodes for each screen code character from $00-$3f. // Chars that do not have an unmodified keycode return $3f (representing RUN/STOP). keyboard_char_keycodes: .byte KEY_AT, KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, $3f, KEY_POUND, $3f, KEY_ARROW_UP, KEY_ARROW_LEFT, KEY_SPACE, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, KEY_ASTERISK, KEY_PLUS, KEY_COMMA, KEY_MINUS, KEY_DOT, KEY_SLASH, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_COLON, KEY_SEMICOLON, $3f, KEY_EQUALS, $3f, $3f diff --git a/src/test/ref/test-lohiconst.asm b/src/test/ref/test-lohiconst.asm index 4480d95e1..6c49d2b62 100644 --- a/src/test/ref/test-lohiconst.asm +++ b/src/test/ref/test-lohiconst.asm @@ -1,8 +1,14 @@ // PI in u[4.28] format -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-lohiconst.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const PI_u4f28 = $3243f6a9 +.segment Code main: { .label SCREEN = $400 // SCREEN[0] = > > PI_u4f28 diff --git a/src/test/ref/test-lohiconst.log b/src/test/ref/test-lohiconst.log index f5779a5ff..8796b829d 100644 --- a/src/test/ref/test-lohiconst.log +++ b/src/test/ref/test-lohiconst.log @@ -96,11 +96,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // PI in u[4.28] format // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-lohiconst.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const PI_u4f28 = $3243f6a9 +.segment Code // main main: { .label SCREEN = $400 @@ -143,11 +149,17 @@ Score: 30 // File Comments // PI in u[4.28] format // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-lohiconst.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const PI_u4f28 = $3243f6a9 +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/test-lowhigh.asm b/src/test/ref/test-lowhigh.asm index 89466ba2f..72823776d 100644 --- a/src/test/ref/test-lowhigh.asm +++ b/src/test/ref/test-lowhigh.asm @@ -1,13 +1,19 @@ // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-lowhigh.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label print_screen = $400 .label print_line_cursor = $10 .label print_char_cursor = $e .label print_char_cursor_1 = $10 .label print_line_cursor_1 = 6 +.segment Code main: { .label __3 = 8 .label __6 = $e @@ -322,4 +328,5 @@ memset: { !: jmp __b1 } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/test-lowhigh.log b/src/test/ref/test-lowhigh.log index 966ae8dfc..efb7fe1c7 100644 --- a/src/test/ref/test-lowhigh.log +++ b/src/test/ref/test-lowhigh.log @@ -1394,15 +1394,21 @@ ASSEMBLER BEFORE OPTIMIZATION // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-lowhigh.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_line_cursor = $10 .label print_char_cursor = $e .label print_char_cursor_1 = $10 .label print_line_cursor_1 = 6 +.segment Code // main main: { .label __3 = 8 @@ -1940,6 +1946,7 @@ memset: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -2139,15 +2146,21 @@ Score: 8692 // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-lowhigh.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_line_cursor = $10 .label print_char_cursor = $e .label print_char_cursor_1 = $10 .label print_line_cursor_1 = 6 +.segment Code // main main: { .label __3 = 8 @@ -2647,5 +2660,6 @@ memset: { jmp __b1 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/test-multiply-16bit.asm b/src/test/ref/test-multiply-16bit.asm index 443b49d01..cd38fb733 100644 --- a/src/test/ref/test-multiply-16bit.asm +++ b/src/test/ref/test-multiply-16bit.asm @@ -1,11 +1,17 @@ // Test the fast multiplication library -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="test-multiply-16bit.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label BG_COLOR = $d021 .label print_screen = $400 .label print_char_cursor = $16 .label print_line_cursor = $10 +.segment Code main: { // *BG_COLOR = 5 lda #5 @@ -301,9 +307,11 @@ mul16u_compare: { // print_ln() jsr print_ln rts + .segment Data str1: .text "word multiply results match!" .byte 0 } +.segment Code // Perform many possible word multiplications (slow and fast) and compare the results mul16s_compare: { .label a = 4 @@ -432,9 +440,11 @@ mul16s_compare: { // print_ln() jsr print_ln rts + .segment Data str1: .text "signed word multiply results match!" .byte 0 } +.segment Code // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { .const c = ' ' @@ -817,9 +827,11 @@ mul16u_error: { jsr print_ln // } rts + .segment Data str: .text "multiply mismatch " .byte 0 } +.segment Code // Print a newline print_ln: { __b1: @@ -1182,9 +1194,11 @@ mul16s_error: { jsr print_ln // } rts + .segment Data str: .text "signed word multiply mismatch " .byte 0 } +.segment Code // Print a single char // print_char(byte register(A) ch) print_char: { @@ -1322,6 +1336,7 @@ print_uchar: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). // print_ln#1] -- register_copy jsr print_ln jmp __breturn + .segment Data str1: .text "word multiply results match!" .byte 0 } +.segment Code // mul16s_compare // Perform many possible word multiplications (slow and fast) and compare the results mul16s_compare: { @@ -6214,9 +6222,11 @@ mul16s_compare: { // [193] phi print_line_cursor#45 = print_line_cursor#0 [phi:mul16s_compare::@14->print_ln#1] -- register_copy jsr print_ln jmp __breturn + .segment Data str1: .text "signed word multiply results match!" .byte 0 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { @@ -6783,9 +6793,11 @@ mul16u_error: { __breturn: // [192] return rts + .segment Data str: .text "multiply mismatch " .byte 0 } +.segment Code // print_ln // Print a newline print_ln: { @@ -7355,9 +7367,11 @@ mul16s_error: { __breturn: // [266] return rts + .segment Data str: .text "signed word multiply mismatch " .byte 0 } +.segment Code // print_char // Print a single char // print_char(byte register(A) ch) @@ -7621,6 +7635,7 @@ print_uchar: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). // print_ln#1] -- register_copy jsr print_ln rts + .segment Data str1: .text "word multiply results match!" .byte 0 } +.segment Code // mul16s_compare // Perform many possible word multiplications (slow and fast) and compare the results mul16s_compare: { @@ -9123,9 +9146,11 @@ mul16s_compare: { // [193] phi print_line_cursor#45 = print_line_cursor#0 [phi:mul16s_compare::@14->print_ln#1] -- register_copy jsr print_ln rts + .segment Data str1: .text "signed word multiply results match!" .byte 0 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { @@ -9654,9 +9679,11 @@ mul16u_error: { // } // [192] return rts + .segment Data str: .text "multiply mismatch " .byte 0 } +.segment Code // print_ln // Print a newline print_ln: { @@ -10180,9 +10207,11 @@ mul16s_error: { // } // [266] return rts + .segment Data str: .text "signed word multiply mismatch " .byte 0 } +.segment Code // print_char // Print a single char // print_char(byte register(A) ch) @@ -10422,6 +10451,7 @@ print_uchar: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). // mulf_tables_cmp::@1#0] -- register_copy // [52] phi mulf_tables_cmp::kc_sqr#2 = mulf_tables_cmp::kc_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#1] -- register_copy jmp __b1 + .segment Data str: .text "multiply tables match!" .byte 0 str1: .text "multiply table mismatch at " @@ -6063,6 +6070,7 @@ mulf_tables_cmp: { str2: .text " / " .byte 0 } +.segment Code // mul8u_compare // Perform all possible byte multiplications (slow and fast) and compare the results mul8u_compare: { @@ -6248,9 +6256,11 @@ mul8u_compare: { // [166] phi print_line_cursor#47 = print_line_cursor#10 [phi:mul8u_compare::@13->print_ln#1] -- register_copy jsr print_ln jmp __breturn + .segment Data str: .text "multiply results match!" .byte 0 } +.segment Code // mul8s_compare // Perform all possible signed byte multiplications (slow and fast) and compare the results mul8s_compare: { @@ -6435,9 +6445,11 @@ mul8s_compare: { __b3_from___b8: // [121] phi mul8s_compare::b#10 = mul8s_compare::b#1 [phi:mul8s_compare::@8->mul8s_compare::@3#0] -- register_copy jmp __b3 + .segment Data str: .text "signed multiply results match!" .byte 0 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { @@ -6910,9 +6922,11 @@ mul8u_error: { __breturn: // [224] return rts + .segment Data str: .text "multiply mismatch " .byte 0 } +.segment Code // muls8s // Slow multiplication of signed bytes // Perform a signed multiplication by repeated addition/subtraction @@ -7282,9 +7296,11 @@ mul8s_error: { __breturn: // [282] return rts + .segment Data str: .text "signed multiply mismatch " .byte 0 } +.segment Code // print_char // Print a single char // print_char(byte register(A) ch) @@ -7591,6 +7607,7 @@ print_sint: { jmp __b2_from___b4 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). // mulf_tables_cmp::@1#0] -- register_copy // [52] phi mulf_tables_cmp::kc_sqr#2 = mulf_tables_cmp::kc_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#1] -- register_copy jmp __b1 + .segment Data str: .text "multiply tables match!" .byte 0 str1: .text "multiply table mismatch at " @@ -8945,6 +8969,7 @@ mulf_tables_cmp: { str2: .text " / " .byte 0 } +.segment Code // mul8u_compare // Perform all possible byte multiplications (slow and fast) and compare the results mul8u_compare: { @@ -9105,9 +9130,11 @@ mul8u_compare: { // [166] phi print_line_cursor#47 = print_line_cursor#10 [phi:mul8u_compare::@13->print_ln#1] -- register_copy jsr print_ln rts + .segment Data str: .text "multiply results match!" .byte 0 } +.segment Code // mul8s_compare // Perform all possible signed byte multiplications (slow and fast) and compare the results mul8s_compare: { @@ -9274,9 +9301,11 @@ mul8s_compare: { // [121] phi from mul8s_compare::@8 to mul8s_compare::@3 [phi:mul8s_compare::@8->mul8s_compare::@3] // [121] phi mul8s_compare::b#10 = mul8s_compare::b#1 [phi:mul8s_compare::@8->mul8s_compare::@3#0] -- register_copy jmp __b3 + .segment Data str: .text "signed multiply results match!" .byte 0 } +.segment Code // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { @@ -9700,9 +9729,11 @@ mul8u_error: { // } // [224] return rts + .segment Data str: .text "multiply mismatch " .byte 0 } +.segment Code // muls8s // Slow multiplication of signed bytes // Perform a signed multiplication by repeated addition/subtraction @@ -10027,9 +10058,11 @@ mul8s_error: { // } // [282] return rts + .segment Data str: .text "signed multiply mismatch " .byte 0 } +.segment Code // print_char // Print a single char // print_char(byte register(A) ch) @@ -10315,6 +10348,7 @@ print_sint: { jmp __b2 } // File Data +.segment Data print_hextab: .text "0123456789abcdef" // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). // main::@1] @@ -327,13 +333,19 @@ Score: 10110 // File Comments // NullPointerException using current_movedown_rate in the main loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="tetris-npe.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const RATE = $32 .label RASTER = $d012 .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/textbox.asm b/src/test/ref/textbox.asm index 22b569dde..5ce94f00c 100644 --- a/src/test/ref/textbox.asm +++ b/src/test/ref/textbox.asm @@ -2,10 +2,16 @@ // Commodore 64 Registers and Constants // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="textbox.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = $400 +.segment Code main: { .label wait = 3 .label x = 2 @@ -634,6 +640,7 @@ draw_window: { inx jmp __b1 } +.segment Data text: .text "this is a small test with word wrap, if a word is too long it moves it to the next line. isn't that supercalifragilisticexpialidocious? i think it's cool!" .byte 0 text2: .text "textbox by scan of desire" diff --git a/src/test/ref/textbox.log b/src/test/ref/textbox.log index d2f24593d..3a37ed131 100644 --- a/src/test/ref/textbox.log +++ b/src/test/ref/textbox.log @@ -2275,11 +2275,17 @@ ASSEMBLER BEFORE OPTIMIZATION // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="textbox.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { .label wait = 3 @@ -3130,6 +3136,7 @@ draw_window: { jmp __b1_from___b2 } // File Data +.segment Data text: .text "this is a small test with word wrap, if a word is too long it moves it to the next line. isn't that supercalifragilisticexpialidocious? i think it's cool!" .byte 0 text2: .text "textbox by scan of desire" @@ -3239,9 +3246,9 @@ Removing instruction jmp __b2 Succesful ASM optimization Pass5NextJumpElimination Removing instruction ldy.z i Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [231] bne __b1 to beq -Fixing long branch [326] bcc __b2 to bcs -Fixing long branch [369] bcc __b5 to bcs +Fixing long branch [237] bne __b1 to beq +Fixing long branch [332] bcc __b2 to bcs +Fixing long branch [375] bcc __b5 to bcs FINAL SYMBOL TABLE void draw_window(byte draw_window::x1 , byte draw_window::y1 , byte draw_window::x2 , byte draw_window::y2) @@ -3427,11 +3434,17 @@ Score: 154230 // The MOS 6526 Complex Interface Adapter (CIA) // http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="textbox.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { .label wait = 3 @@ -4284,6 +4297,7 @@ draw_window: { jmp __b1 } // File Data +.segment Data text: .text "this is a small test with word wrap, if a word is too long it moves it to the next line. isn't that supercalifragilisticexpialidocious? i think it's cool!" .byte 0 text2: .text "textbox by scan of desire" diff --git a/src/test/ref/tod-1.asm b/src/test/ref/tod-1.asm index 7663dfba9..58e7cb1b5 100644 --- a/src/test/ref/tod-1.asm +++ b/src/test/ref/tod-1.asm @@ -4,9 +4,14 @@ // See https://github.com/cc65/cc65/blob/master/include/conio.h // // Currently C64/PLUS4/VIC20 platforms are supported -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="tod-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const LIGHT_BLUE = $e .const OFFSET_STRUCT_TIME_OF_DAY_SEC = 1 .const OFFSET_STRUCT_TIME_OF_DAY_MIN = 2 @@ -32,6 +37,7 @@ .label conio_line_text = 8 // The current color cursor line start .label conio_line_color = $a +.segment Code __start: { // conio_cursor_x = 0 lda #0 @@ -525,6 +531,7 @@ memset: { !: jmp __b2 } +.segment Data // The buffer used by tod_str() tod_buffer: .text "00:00:00:00" .byte 0 diff --git a/src/test/ref/tod-1.log b/src/test/ref/tod-1.log index b9574c47f..25b41b0c3 100644 --- a/src/test/ref/tod-1.log +++ b/src/test/ref/tod-1.log @@ -2092,9 +2092,14 @@ ASSEMBLER BEFORE OPTIMIZATION // // Currently C64/PLUS4/VIC20 platforms are supported // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="tod-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_TIME_OF_DAY_SEC = 1 @@ -2121,6 +2126,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label conio_line_text = 8 // The current color cursor line start .label conio_line_color = $a +.segment Code // __start __start: { jmp __init1 @@ -2833,6 +2839,7 @@ memset: { jmp __b2_from___b3 } // File Data +.segment Data // The buffer used by tod_str() tod_buffer: .text "00:00:00:00" .byte 0 @@ -3151,9 +3158,14 @@ Score: 106431 // // Currently C64/PLUS4/VIC20 platforms are supported // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="tod-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_TIME_OF_DAY_SEC = 1 @@ -3180,6 +3192,7 @@ Score: 106431 .label conio_line_text = 8 // The current color cursor line start .label conio_line_color = $a +.segment Code // __start __start: { // __start::__init1 @@ -3892,6 +3905,7 @@ memset: { jmp __b2 } // File Data +.segment Data // The buffer used by tod_str() tod_buffer: .text "00:00:00:00" .byte 0 diff --git a/src/test/ref/tod018-problem.asm b/src/test/ref/tod018-problem.asm index 3e2e63990..edf6b336a 100644 --- a/src/test/ref/tod018-problem.asm +++ b/src/test/ref/tod018-problem.asm @@ -1,7 +1,13 @@ // Tests a problem with tod018 not calculating types correctly -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="tod018-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const d018val = >screen&$3fff .label D018 = $d018 diff --git a/src/test/ref/tod018-problem.log b/src/test/ref/tod018-problem.log index a4dc4f0e4..5891b525f 100644 --- a/src/test/ref/tod018-problem.log +++ b/src/test/ref/tod018-problem.log @@ -76,10 +76,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests a problem with tod018 not calculating types correctly // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="tod018-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const d018val = >screen&$3fff @@ -116,10 +122,16 @@ Score: 12 // File Comments // Tests a problem with tod018 not calculating types correctly // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="tod018-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const d018val = >screen&$3fff diff --git a/src/test/ref/toupper-1.asm b/src/test/ref/toupper-1.asm index c48b29144..656194689 100644 --- a/src/test/ref/toupper-1.asm +++ b/src/test/ref/toupper-1.asm @@ -1,7 +1,12 @@ // Test toupper() -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="toupper-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const LIGHT_BLUE = $e // Color Ram .label COLORRAM = $d800 @@ -16,6 +21,7 @@ .label conio_line_text = 8 // The current color cursor line start .label conio_line_color = $a +.segment Code __start: { // conio_cursor_x = 0 lda #0 diff --git a/src/test/ref/toupper-1.log b/src/test/ref/toupper-1.log index 903b931c6..d23a51cc2 100644 --- a/src/test/ref/toupper-1.log +++ b/src/test/ref/toupper-1.log @@ -1750,9 +1750,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test toupper() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="toupper-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e // Color Ram @@ -1768,6 +1773,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label conio_line_text = 8 // The current color cursor line start .label conio_line_color = $a +.segment Code // __start __start: { jmp __init1 @@ -2730,9 +2736,14 @@ Score: 14626 // File Comments // Test toupper() // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="toupper-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const LIGHT_BLUE = $e // Color Ram @@ -2748,6 +2759,7 @@ Score: 14626 .label conio_line_text = 8 // The current color cursor line start .label conio_line_color = $a +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/travis1.asm b/src/test/ref/travis1.asm index 03e0b14c8..3fbf1f436 100644 --- a/src/test/ref/travis1.asm +++ b/src/test/ref/travis1.asm @@ -1,11 +1,17 @@ // Adding a missing word-fragment for Travis Fisher -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="travis1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const READY_FRAMES = 5 .label print_screen = $400 .label print_char_cursor = 5 .label print_line_cursor = 7 +.segment Code main: { .label i = 2 lda #0 @@ -51,9 +57,11 @@ main: { lda.z print_line_cursor+1 sta.z print_char_cursor+1 jmp __b1 + .segment Data str: .text "ready!" .byte 0 } +.segment Code game_ready: { // if (action_count == 0) cpx #0 @@ -76,9 +84,11 @@ game_ready: { !: // } rts + .segment Data str: .text "ready" .byte 0 } +.segment Code // Print a zero-terminated string followed by a newline // print_str_ln(byte* zp(3) str) print_str_ln: { diff --git a/src/test/ref/travis1.log b/src/test/ref/travis1.log index b4090b26b..018f3283e 100644 --- a/src/test/ref/travis1.log +++ b/src/test/ref/travis1.log @@ -828,14 +828,20 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Adding a missing word-fragment for Travis Fisher // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="travis1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const READY_FRAMES = 5 .label print_screen = $400 .label print_char_cursor = 5 .label print_line_cursor = 7 +.segment Code // main main: { .label i = 2 @@ -916,9 +922,11 @@ main: { // [1] phi print_line_cursor#26 = print_line_cursor#15 [phi:main::@5->main::@1#2] -- register_copy // [1] phi print_char_cursor#37 = print_char_cursor#50 [phi:main::@5->main::@1#3] -- register_copy jmp __b1 + .segment Data str: .text "ready!" .byte 0 } +.segment Code // game_ready game_ready: { // [12] if(action_count#15!=0) goto game_ready::@3 -- vbuxx_neq_0_then_la1 @@ -967,9 +975,11 @@ game_ready: { __breturn: // [18] return rts + .segment Data str: .text "ready" .byte 0 } +.segment Code // print_str_ln // Print a zero-terminated string followed by a newline // print_str_ln(byte* zp(3) str) @@ -1206,14 +1216,20 @@ Score: 8716 // File Comments // Adding a missing word-fragment for Travis Fisher // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="travis1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const READY_FRAMES = 5 .label print_screen = $400 .label print_char_cursor = 5 .label print_line_cursor = 7 +.segment Code // main main: { .label i = 2 @@ -1290,9 +1306,11 @@ main: { // [1] phi print_line_cursor#26 = print_line_cursor#15 [phi:main::@5->main::@1#2] -- register_copy // [1] phi print_char_cursor#37 = print_char_cursor#50 [phi:main::@5->main::@1#3] -- register_copy jmp __b1 + .segment Data str: .text "ready!" .byte 0 } +.segment Code // game_ready game_ready: { // if (action_count == 0) @@ -1334,9 +1352,11 @@ game_ready: { // } // [18] return rts + .segment Data str: .text "ready" .byte 0 } +.segment Code // print_str_ln // Print a zero-terminated string followed by a newline // print_str_ln(byte* zp(3) str) diff --git a/src/test/ref/true-inline-words.asm b/src/test/ref/true-inline-words.asm index 4ee6fe3cb..f0f7b2b86 100644 --- a/src/test/ref/true-inline-words.asm +++ b/src/test/ref/true-inline-words.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="true-inline-words.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { // constant byte array .const b = 4 @@ -29,5 +35,6 @@ main: { lda #5 sta BG_COLOR rts + .segment Data bs: .byte 'c', 'm' } diff --git a/src/test/ref/true-inline-words.log b/src/test/ref/true-inline-words.log index 9005cb7bf..9c7f3d737 100644 --- a/src/test/ref/true-inline-words.log +++ b/src/test/ref/true-inline-words.log @@ -190,10 +190,16 @@ Uplifting [] best 43 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="true-inline-words.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // constant byte array @@ -230,6 +236,7 @@ main: { lda #5 sta BG_COLOR jmp __breturn + .segment Data bs: .byte 'c', 'm' } // File Data @@ -265,10 +272,16 @@ Score: 40 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="true-inline-words.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { // constant byte array @@ -306,6 +319,7 @@ main: { lda #5 sta BG_COLOR rts + .segment Data bs: .byte 'c', 'm' } // File Data diff --git a/src/test/ref/type-inference.asm b/src/test/ref/type-inference.asm index 4db532e67..090086067 100644 --- a/src/test/ref/type-inference.asm +++ b/src/test/ref/type-inference.asm @@ -1,7 +1,13 @@ // Test inference of integer types in expressions -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="type-inference.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 .label __0 = 2 diff --git a/src/test/ref/type-inference.log b/src/test/ref/type-inference.log index 73b9213e2..0a7f1c22f 100644 --- a/src/test/ref/type-inference.log +++ b/src/test/ref/type-inference.log @@ -148,10 +148,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test inference of integer types in expressions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="type-inference.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -227,10 +233,16 @@ Score: 391 // File Comments // Test inference of integer types in expressions // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="type-inference.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/type-mix.asm b/src/test/ref/type-mix.asm index 1e7deafa9..e5ddf6a56 100644 --- a/src/test/ref/type-mix.asm +++ b/src/test/ref/type-mix.asm @@ -1,7 +1,13 @@ // Tests that mixing types can synthesize a fragment correctly -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="type-mix.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label w = 2 diff --git a/src/test/ref/type-mix.log b/src/test/ref/type-mix.log index 15422e4a0..2d8d2fa57 100644 --- a/src/test/ref/type-mix.log +++ b/src/test/ref/type-mix.log @@ -152,10 +152,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests that mixing types can synthesize a fragment correctly // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="type-mix.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -240,10 +246,16 @@ Score: 431 // File Comments // Tests that mixing types can synthesize a fragment correctly // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="type-mix.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/type-signed.asm b/src/test/ref/type-signed.asm index 4b2b01ab4..7859f7308 100644 --- a/src/test/ref/type-signed.asm +++ b/src/test/ref/type-signed.asm @@ -1,10 +1,16 @@ // Tests the special "signed" / "unsigned" without a simple type name -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="type-signed.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label print_screen = $400 .label print_line_cursor = $b .label print_char_cursor = 9 +.segment Code main: { .label a = 2 .label b = 4 @@ -177,4 +183,5 @@ print_uchar: { // } rts } +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/type-signed.log b/src/test/ref/type-signed.log index 9e1d08720..8f024befa 100644 --- a/src/test/ref/type-signed.log +++ b/src/test/ref/type-signed.log @@ -838,13 +838,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests the special "signed" / "unsigned" without a simple type name // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="type-signed.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_line_cursor = $b .label print_char_cursor = 9 +.segment Code // main main: { .label a = 2 @@ -1148,6 +1154,7 @@ print_uchar: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -1280,13 +1287,19 @@ Score: 5263 // File Comments // Tests the special "signed" / "unsigned" without a simple type name // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="type-signed.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label print_screen = $400 .label print_line_cursor = $b .label print_char_cursor = 9 +.segment Code // main main: { .label a = 2 @@ -1566,5 +1579,6 @@ print_uchar: { rts } // File Data +.segment Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/typedef-0.asm b/src/test/ref/typedef-0.asm index 9db7cc730..99436bd7e 100644 --- a/src/test/ref/typedef-0.asm +++ b/src/test/ref/typedef-0.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .const b = 'a' .label SCREEN = $400 diff --git a/src/test/ref/typedef-0.log b/src/test/ref/typedef-0.log index bd64087bd..2071bc78f 100644 --- a/src/test/ref/typedef-0.log +++ b/src/test/ref/typedef-0.log @@ -66,10 +66,16 @@ Uplifting [] best 15 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const b = 'a' @@ -103,10 +109,16 @@ Score: 12 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .const b = 'a' diff --git a/src/test/ref/typedef-1.asm b/src/test/ref/typedef-1.asm index 4d47999ef..48b6398da 100644 --- a/src/test/ref/typedef-1.asm +++ b/src/test/ref/typedef-1.asm @@ -1,7 +1,13 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const OFFSET_STRUCT_POINTDEF_Y = 1 +.segment Code main: { .const p_x = 4 .const p_y = 7 diff --git a/src/test/ref/typedef-1.log b/src/test/ref/typedef-1.log index be10ec58a..b06a96439 100644 --- a/src/test/ref/typedef-1.log +++ b/src/test/ref/typedef-1.log @@ -103,11 +103,17 @@ Uplifting [] best 21 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINTDEF_Y = 1 +.segment Code // main main: { .const p_x = 4 @@ -147,11 +153,17 @@ Score: 18 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const OFFSET_STRUCT_POINTDEF_Y = 1 +.segment Code // main main: { .const p_x = 4 diff --git a/src/test/ref/typedef-2.asm b/src/test/ref/typedef-2.asm index 78b44ee6b..0bd5dc95e 100644 --- a/src/test/ref/typedef-2.asm +++ b/src/test/ref/typedef-2.asm @@ -1,8 +1,14 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .label SCREEN = $400 .label ptr = 2 +.segment Code __start: { // ptr = 0x1000 lda #<$1000 diff --git a/src/test/ref/typedef-2.log b/src/test/ref/typedef-2.log index d6491b828..185146951 100644 --- a/src/test/ref/typedef-2.log +++ b/src/test/ref/typedef-2.log @@ -134,12 +134,18 @@ Uplifting [__start] best 73 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label ptr = 2 +.segment Code // __start __start: { jmp __init1 @@ -205,12 +211,18 @@ Score: 34 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label ptr = 2 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/typedef-3.asm b/src/test/ref/typedef-3.asm index 93c14ca33..f998d8056 100644 --- a/src/test/ref/typedef-3.asm +++ b/src/test/ref/typedef-3.asm @@ -1,8 +1,14 @@ // Typedef an array -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: @@ -16,6 +22,7 @@ main: { // } rts } +.segment Data a: .text "cml" .byte 0 .fill 3, 0 diff --git a/src/test/ref/typedef-3.log b/src/test/ref/typedef-3.log index f16056f89..688b7669b 100644 --- a/src/test/ref/typedef-3.log +++ b/src/test/ref/typedef-3.log @@ -116,11 +116,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Typedef an array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -149,6 +155,7 @@ main: { rts } // File Data +.segment Data a: .text "cml" .byte 0 .fill 3, 0 @@ -183,11 +190,17 @@ Score: 186 // File Comments // Typedef an array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -213,6 +226,7 @@ main: { rts } // File Data +.segment Data a: .text "cml" .byte 0 .fill 3, 0 diff --git a/src/test/ref/typedef-4.asm b/src/test/ref/typedef-4.asm index 777058ede..645b3ec4b 100644 --- a/src/test/ref/typedef-4.asm +++ b/src/test/ref/typedef-4.asm @@ -1,10 +1,16 @@ // Typedef const/volatile type -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" .const c = 'c' .label SCREEN = $400 .label v = 2 +.segment Code __start: { // v = 'v' lda #'v' diff --git a/src/test/ref/typedef-4.log b/src/test/ref/typedef-4.log index 5ae4b41e3..b330fb0d4 100644 --- a/src/test/ref/typedef-4.log +++ b/src/test/ref/typedef-4.log @@ -117,13 +117,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Typedef const/volatile type // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const c = 'c' .label SCREEN = $400 .label v = 2 +.segment Code // __start __start: { jmp __init1 @@ -191,13 +197,19 @@ Score: 36 // File Comments // Typedef const/volatile type // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(__start) -.pc = $80d "Program" // Global Constants & labels .const c = 'c' .label SCREEN = $400 .label v = 2 +.segment Code // __start __start: { // __start::__init1 diff --git a/src/test/ref/typedef-5.asm b/src/test/ref/typedef-5.asm index 9349c673c..9869651b5 100644 --- a/src/test/ref/typedef-5.asm +++ b/src/test/ref/typedef-5.asm @@ -1,10 +1,16 @@ // Typedef a const/volatile type and instantiate a pointer to it -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 .label cp = $a003 .label vp = $a004 +.segment Code main: { // SCREEN[0] = *cp lda cp diff --git a/src/test/ref/typedef-5.log b/src/test/ref/typedef-5.log index 2ca554324..ec94b3e74 100644 --- a/src/test/ref/typedef-5.log +++ b/src/test/ref/typedef-5.log @@ -92,13 +92,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Typedef a const/volatile type and instantiate a pointer to it // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label cp = $a003 .label vp = $a004 +.segment Code // main main: { // [0] *SCREEN = *cp -- _deref_pbuc1=_deref_pbuc2 @@ -135,13 +141,19 @@ Score: 22 // File Comments // Typedef a const/volatile type and instantiate a pointer to it // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label cp = $a003 .label vp = $a004 +.segment Code // main main: { // SCREEN[0] = *cp diff --git a/src/test/ref/typedef-6.asm b/src/test/ref/typedef-6.asm index 52125c8a8..b103639d3 100644 --- a/src/test/ref/typedef-6.asm +++ b/src/test/ref/typedef-6.asm @@ -1,10 +1,16 @@ // Typedef pointer to const/volatile type and instantiate it -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 .label cp = $a003 .label vp = $a004 +.segment Code main: { // SCREEN[0] = *cp lda cp diff --git a/src/test/ref/typedef-6.log b/src/test/ref/typedef-6.log index f72b0a20a..5ec7612ca 100644 --- a/src/test/ref/typedef-6.log +++ b/src/test/ref/typedef-6.log @@ -92,13 +92,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Typedef pointer to const/volatile type and instantiate it // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label cp = $a003 .label vp = $a004 +.segment Code // main main: { // [0] *SCREEN = *cp -- _deref_pbuc1=_deref_pbuc2 @@ -135,13 +141,19 @@ Score: 22 // File Comments // Typedef pointer to const/volatile type and instantiate it // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label cp = $a003 .label vp = $a004 +.segment Code // main main: { // SCREEN[0] = *cp diff --git a/src/test/ref/typedef-7.asm b/src/test/ref/typedef-7.asm index 19b8edf19..4c05d73ec 100644 --- a/src/test/ref/typedef-7.asm +++ b/src/test/ref/typedef-7.asm @@ -1,10 +1,16 @@ // Typedef pointer to const/volatile type and instantiate it to const variable -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 .label cp = $a003 .label vp = $a004 +.segment Code main: { // SCREEN[0] = *cp lda cp diff --git a/src/test/ref/typedef-7.log b/src/test/ref/typedef-7.log index 397749345..835762b84 100644 --- a/src/test/ref/typedef-7.log +++ b/src/test/ref/typedef-7.log @@ -85,13 +85,19 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Typedef pointer to const/volatile type and instantiate it to const variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label cp = $a003 .label vp = $a004 +.segment Code // main main: { // [0] *SCREEN = *cp -- _deref_pbuc1=_deref_pbuc2 @@ -128,13 +134,19 @@ Score: 22 // File Comments // Typedef pointer to const/volatile type and instantiate it to const variable // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typedef-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label cp = $a003 .label vp = $a004 +.segment Code // main main: { // SCREEN[0] = *cp diff --git a/src/test/ref/typeid-plus-byte-problem.asm b/src/test/ref/typeid-plus-byte-problem.asm index ed7b232ff..7705478f0 100644 --- a/src/test/ref/typeid-plus-byte-problem.asm +++ b/src/test/ref/typeid-plus-byte-problem.asm @@ -1,8 +1,14 @@ // Test that byte+byte creates a byte - even when there is a value overflow -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typeid-plus-byte-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { .const ubc1 = $c+$d+$e .const ubc2 = $fa diff --git a/src/test/ref/typeid-plus-byte-problem.log b/src/test/ref/typeid-plus-byte-problem.log index 4557f11ac..499c146e5 100644 --- a/src/test/ref/typeid-plus-byte-problem.log +++ b/src/test/ref/typeid-plus-byte-problem.log @@ -89,11 +89,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test that byte+byte creates a byte - even when there is a value overflow // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typeid-plus-byte-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .const ubc1 = $c+$d+$e @@ -129,11 +135,17 @@ Score: 12 // File Comments // Test that byte+byte creates a byte - even when there is a value overflow // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typeid-plus-byte-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { .const ubc1 = $c+$d+$e diff --git a/src/test/ref/typeid-plus-bytes.asm b/src/test/ref/typeid-plus-bytes.asm index d7de62c2c..93c324a87 100644 --- a/src/test/ref/typeid-plus-bytes.asm +++ b/src/test/ref/typeid-plus-bytes.asm @@ -1,11 +1,17 @@ // Test that plus creates the expected type for all legal combinations of bytes (signed/unsigned - constant/variable) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typeid-plus-bytes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const TYPEID_BYTE = 1 .const TYPEID_SIGNED_BYTE = 2 .label SCREEN = $400 .label SSCREEN = $400 +.segment Code main: { // testUnsigned() jsr testUnsigned diff --git a/src/test/ref/typeid-plus-bytes.log b/src/test/ref/typeid-plus-bytes.log index c8ff88e29..3335a1994 100644 --- a/src/test/ref/typeid-plus-bytes.log +++ b/src/test/ref/typeid-plus-bytes.log @@ -1197,14 +1197,20 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test that plus creates the expected type for all legal combinations of bytes (signed/unsigned - constant/variable) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typeid-plus-bytes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const TYPEID_BYTE = 1 .const TYPEID_SIGNED_BYTE = 2 .label SCREEN = $400 .label SSCREEN = $400 +.segment Code // main main: { // [1] call testUnsigned @@ -1523,14 +1529,20 @@ Score: 336 // File Comments // Test that plus creates the expected type for all legal combinations of bytes (signed/unsigned - constant/variable) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typeid-plus-bytes.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const TYPEID_BYTE = 1 .const TYPEID_SIGNED_BYTE = 2 .label SCREEN = $400 .label SSCREEN = $400 +.segment Code // main main: { // testUnsigned() diff --git a/src/test/ref/typeid-simple.asm b/src/test/ref/typeid-simple.asm index 1c7d37b02..dae8c57e7 100644 --- a/src/test/ref/typeid-simple.asm +++ b/src/test/ref/typeid-simple.asm @@ -1,7 +1,12 @@ // Test typeid() of the different types -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typeid-simple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const TYPEID_VOID = 0 .const TYPEID_BYTE = 1 .const TYPEID_SIGNED_BYTE = 2 @@ -19,6 +24,7 @@ .const TYPEID_POINTER_BOOL = $17 .const TYPEID_POINTER_PROCEDURE = $1f .const TYPEID_POINTER_POINTER_BYTE = $21 +.segment Code main: { .label SCREEN = $400 // SCREEN[idx++] = typeid(void) diff --git a/src/test/ref/typeid-simple.log b/src/test/ref/typeid-simple.log index e5a2c37e7..2e0ea36e4 100644 --- a/src/test/ref/typeid-simple.log +++ b/src/test/ref/typeid-simple.log @@ -492,9 +492,14 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test typeid() of the different types // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typeid-simple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const TYPEID_VOID = 0 .const TYPEID_BYTE = 1 @@ -513,6 +518,7 @@ ASSEMBLER BEFORE OPTIMIZATION .const TYPEID_POINTER_BOOL = $17 .const TYPEID_POINTER_PROCEDURE = $1f .const TYPEID_POINTER_POINTER_BYTE = $21 +.segment Code // main main: { .label SCREEN = $400 @@ -655,9 +661,14 @@ Score: 176 // File Comments // Test typeid() of the different types // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typeid-simple.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const TYPEID_VOID = 0 .const TYPEID_BYTE = 1 @@ -676,6 +687,7 @@ Score: 176 .const TYPEID_POINTER_BOOL = $17 .const TYPEID_POINTER_PROCEDURE = $1f .const TYPEID_POINTER_POINTER_BYTE = $21 +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/typeinference-problem.asm b/src/test/ref/typeinference-problem.asm index db84454bd..bad4a9ab8 100644 --- a/src/test/ref/typeinference-problem.asm +++ b/src/test/ref/typeinference-problem.asm @@ -1,7 +1,13 @@ // java.lang.NullPointerException during Pass2TypeInference.java -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typeinference-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code // Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/2) and g(x) = f(1-x) main: { ldy #0 @@ -21,4 +27,5 @@ main: { // } rts } +.segment Data table: .fill $100, 0 diff --git a/src/test/ref/typeinference-problem.log b/src/test/ref/typeinference-problem.log index 4fd1d5f92..fc231cc44 100644 --- a/src/test/ref/typeinference-problem.log +++ b/src/test/ref/typeinference-problem.log @@ -137,10 +137,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // java.lang.NullPointerException during Pass2TypeInference.java // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typeinference-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main // Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/2) and g(x) = f(1-x) main: { @@ -175,6 +181,7 @@ main: { rts } // File Data +.segment Data table: .fill $100, 0 ASSEMBLER OPTIMIZATIONS @@ -208,10 +215,16 @@ Score: 241 // File Comments // java.lang.NullPointerException during Pass2TypeInference.java // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="typeinference-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main // Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/2) and g(x) = f(1-x) main: { @@ -244,5 +257,6 @@ main: { rts } // File Data +.segment Data table: .fill $100, 0 diff --git a/src/test/ref/unary-plus.asm b/src/test/ref/unary-plus.asm index 6dee0b0cf..b4279d51e 100644 --- a/src/test/ref/unary-plus.asm +++ b/src/test/ref/unary-plus.asm @@ -1,8 +1,14 @@ // Test unary plus -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unary-plus.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_SIGNED_WORD = 2 +.segment Code main: { .const i = 3 .const j = 3 diff --git a/src/test/ref/unary-plus.log b/src/test/ref/unary-plus.log index c8e658d65..d933d6752 100644 --- a/src/test/ref/unary-plus.log +++ b/src/test/ref/unary-plus.log @@ -135,11 +135,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test unary plus // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unary-plus.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_SIGNED_WORD = 2 +.segment Code // main main: { .const i = 3 @@ -192,11 +198,17 @@ Score: 42 // File Comments // Test unary plus // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unary-plus.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_SIGNED_WORD = 2 +.segment Code // main main: { .const i = 3 diff --git a/src/test/ref/uninitialized.asm b/src/test/ref/uninitialized.asm index 9c38cd461..b1549ce53 100644 --- a/src/test/ref/uninitialized.asm +++ b/src/test/ref/uninitialized.asm @@ -1,9 +1,15 @@ // Tests uninitialized values of variables. -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="uninitialized.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const b = 0 .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = b lda #b diff --git a/src/test/ref/uninitialized.log b/src/test/ref/uninitialized.log index bfd7e23ce..47c5f68ef 100644 --- a/src/test/ref/uninitialized.log +++ b/src/test/ref/uninitialized.log @@ -145,12 +145,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests uninitialized values of variables. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="uninitialized.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const b = 0 .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = b -- _deref_pbuc1=vbuc2 @@ -199,12 +205,18 @@ Score: 30 // File Comments // Tests uninitialized values of variables. // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="uninitialized.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const b = 0 .label SCREEN = $400 +.segment Code // main main: { // SCREEN[0] = b diff --git a/src/test/ref/unroll-for-min.asm b/src/test/ref/unroll-for-min.asm index 653d2a073..dfd3ee6c2 100644 --- a/src/test/ref/unroll-for-min.asm +++ b/src/test/ref/unroll-for-min.asm @@ -1,7 +1,13 @@ // Minimal unrolled ranged for() loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-for-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 // SCREEN[i] = 'a' diff --git a/src/test/ref/unroll-for-min.log b/src/test/ref/unroll-for-min.log index 07a50a082..88df902cc 100644 --- a/src/test/ref/unroll-for-min.log +++ b/src/test/ref/unroll-for-min.log @@ -164,10 +164,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal unrolled ranged for() loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-for-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -225,10 +231,16 @@ Score: 20 // File Comments // Minimal unrolled ranged for() loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-for-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/unroll-loop-modifyvar.asm b/src/test/ref/unroll-loop-modifyvar.asm index 20348e1ea..0186b5049 100644 --- a/src/test/ref/unroll-loop-modifyvar.asm +++ b/src/test/ref/unroll-loop-modifyvar.asm @@ -1,7 +1,13 @@ // An unrolled loop modifying a var used later -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-loop-modifyvar.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 // SCREEN[a]=a diff --git a/src/test/ref/unroll-loop-modifyvar.log b/src/test/ref/unroll-loop-modifyvar.log index 60cf1e7a3..fd41b24b6 100644 --- a/src/test/ref/unroll-loop-modifyvar.log +++ b/src/test/ref/unroll-loop-modifyvar.log @@ -386,10 +386,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // An unrolled loop modifying a var used later // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-loop-modifyvar.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -516,10 +522,16 @@ Score: 78 // File Comments // An unrolled loop modifying a var used later // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-loop-modifyvar.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/unroll-screenfill-for-double.asm b/src/test/ref/unroll-screenfill-for-double.asm index 59373ed5b..ac7875e17 100644 --- a/src/test/ref/unroll-screenfill-for-double.asm +++ b/src/test/ref/unroll-screenfill-for-double.asm @@ -1,7 +1,13 @@ // Fills the screen using two unrolled ranged for()-loops -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-screenfill-for-double.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 // (SCREEN+line*40)[x] = x diff --git a/src/test/ref/unroll-screenfill-for-double.log b/src/test/ref/unroll-screenfill-for-double.log index b9f414d93..5bdf4e186 100644 --- a/src/test/ref/unroll-screenfill-for-double.log +++ b/src/test/ref/unroll-screenfill-for-double.log @@ -1441,10 +1441,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Fills the screen using two unrolled ranged for()-loops // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-screenfill-for-double.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -2555,10 +2561,16 @@ Score: 512 // File Comments // Fills the screen using two unrolled ranged for()-loops // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-screenfill-for-double.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/unroll-screenfill-for.asm b/src/test/ref/unroll-screenfill-for.asm index 902f46a59..829b74faa 100644 --- a/src/test/ref/unroll-screenfill-for.asm +++ b/src/test/ref/unroll-screenfill-for.asm @@ -1,7 +1,13 @@ // Fills the screen using an unrolled inner ranged for()-loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-screenfill-for.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 diff --git a/src/test/ref/unroll-screenfill-for.log b/src/test/ref/unroll-screenfill-for.log index 915c542cb..a2d4964fe 100644 --- a/src/test/ref/unroll-screenfill-for.log +++ b/src/test/ref/unroll-screenfill-for.log @@ -838,10 +838,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Fills the screen using an unrolled inner ranged for()-loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-screenfill-for.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -1105,10 +1111,16 @@ Score: 1841 // File Comments // Fills the screen using an unrolled inner ranged for()-loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-screenfill-for.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/unroll-screenfill-while.asm b/src/test/ref/unroll-screenfill-while.asm index b05572a22..eeaa3bdde 100644 --- a/src/test/ref/unroll-screenfill-while.asm +++ b/src/test/ref/unroll-screenfill-while.asm @@ -1,7 +1,13 @@ // Fills the screen using an unrolled inner while()-loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-screenfill-while.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 ldx #0 diff --git a/src/test/ref/unroll-screenfill-while.log b/src/test/ref/unroll-screenfill-while.log index 88cb5716c..45bed5d7b 100644 --- a/src/test/ref/unroll-screenfill-while.log +++ b/src/test/ref/unroll-screenfill-while.log @@ -865,10 +865,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Fills the screen using an unrolled inner while()-loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-screenfill-while.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -1132,10 +1138,16 @@ Score: 1841 // File Comments // Fills the screen using an unrolled inner while()-loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-screenfill-while.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/unroll-while-min.asm b/src/test/ref/unroll-while-min.asm index f71b43f52..26e49d9cb 100644 --- a/src/test/ref/unroll-while-min.asm +++ b/src/test/ref/unroll-while-min.asm @@ -1,7 +1,13 @@ // Minimal unrolled while() loop -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-while-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 // SCREEN[i++] = 'a' diff --git a/src/test/ref/unroll-while-min.log b/src/test/ref/unroll-while-min.log index d0e905138..937b15ec7 100644 --- a/src/test/ref/unroll-while-min.log +++ b/src/test/ref/unroll-while-min.log @@ -162,10 +162,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Minimal unrolled while() loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-while-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -214,10 +220,16 @@ Score: 16 // File Comments // Minimal unrolled while() loop // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unroll-while-min.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/unused-irq.asm b/src/test/ref/unused-irq.asm index c4a09d106..bb788c06a 100644 --- a/src/test/ref/unused-irq.asm +++ b/src/test/ref/unused-irq.asm @@ -1,9 +1,15 @@ // Unused interrupts pointing to each other but never used from main loop - should be optimized away -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unused-irq.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 .label HARDWARE_IRQ = $fffe +.segment Code // Unused Interrupt Routine irq2: { // *HARDWARE_IRQ = &irq1 diff --git a/src/test/ref/unused-irq.log b/src/test/ref/unused-irq.log index a5fd01d9e..1aaee6d46 100644 --- a/src/test/ref/unused-irq.log +++ b/src/test/ref/unused-irq.log @@ -111,12 +111,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Unused interrupts pointing to each other but never used from main loop - should be optimized away // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unused-irq.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label HARDWARE_IRQ = $fffe +.segment Code // irq2 // Unused Interrupt Routine irq2: { @@ -187,12 +193,18 @@ Score: 96 // File Comments // Unused interrupts pointing to each other but never used from main loop - should be optimized away // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unused-irq.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label HARDWARE_IRQ = $fffe +.segment Code // irq2 // Unused Interrupt Routine irq2: { diff --git a/src/test/ref/unused-method.asm b/src/test/ref/unused-method.asm index c024d75b2..6c25efc61 100644 --- a/src/test/ref/unused-method.asm +++ b/src/test/ref/unused-method.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unused-method.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label screen = $400 // screen[0] = 1 diff --git a/src/test/ref/unused-method.log b/src/test/ref/unused-method.log index e2d0c8254..826122d49 100644 --- a/src/test/ref/unused-method.log +++ b/src/test/ref/unused-method.log @@ -77,10 +77,16 @@ Uplifting [] best 15 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unused-method.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 @@ -112,10 +118,16 @@ Score: 12 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unused-method.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/unused-vars.asm b/src/test/ref/unused-vars.asm index 8739e7b0d..40c7e9a6a 100644 --- a/src/test/ref/unused-vars.asm +++ b/src/test/ref/unused-vars.asm @@ -1,8 +1,14 @@ // used vars -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unused-vars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // used vars .const col = 2 diff --git a/src/test/ref/unused-vars.log b/src/test/ref/unused-vars.log index 65bad11ec..5f65bc5d5 100644 --- a/src/test/ref/unused-vars.log +++ b/src/test/ref/unused-vars.log @@ -237,11 +237,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // used vars // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unused-vars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // used vars @@ -309,11 +315,17 @@ Score: 231 // File Comments // used vars // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unused-vars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // used vars diff --git a/src/test/ref/unusedblockproblem.asm b/src/test/ref/unusedblockproblem.asm index 527cc9a56..4899ae2f8 100644 --- a/src/test/ref/unusedblockproblem.asm +++ b/src/test/ref/unusedblockproblem.asm @@ -1,7 +1,13 @@ // Problem with eliminating unused blocks/vars after the infinite loop (symbol line#2 not removed from symbol table) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unusedblockproblem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 __b1: diff --git a/src/test/ref/unusedblockproblem.log b/src/test/ref/unusedblockproblem.log index d4430970d..16a637591 100644 --- a/src/test/ref/unusedblockproblem.log +++ b/src/test/ref/unusedblockproblem.log @@ -108,10 +108,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Problem with eliminating unused blocks/vars after the infinite loop (symbol line#2 not removed from symbol table) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unusedblockproblem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -141,10 +147,16 @@ Score: 90 // File Comments // Problem with eliminating unused blocks/vars after the infinite loop (symbol line#2 not removed from symbol table) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="unusedblockproblem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 diff --git a/src/test/ref/useglobal.asm b/src/test/ref/useglobal.asm index ea72293cc..a7a6296cc 100644 --- a/src/test/ref/useglobal.asm +++ b/src/test/ref/useglobal.asm @@ -1,8 +1,14 @@ // Tests procedures using global variables (should not fail) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="useglobal.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // *SCREEN = 1 lda #1 diff --git a/src/test/ref/useglobal.log b/src/test/ref/useglobal.log index 3faf1da68..dcb3d44ed 100644 --- a/src/test/ref/useglobal.log +++ b/src/test/ref/useglobal.log @@ -80,11 +80,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests procedures using global variables (should not fail) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="useglobal.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = 1 -- _deref_pbuc1=vbuc2 @@ -116,11 +122,17 @@ Score: 12 // File Comments // Tests procedures using global variables (should not fail) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="useglobal.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // *SCREEN = 1 diff --git a/src/test/ref/useuninitialized.asm b/src/test/ref/useuninitialized.asm index a871c330a..cf9810632 100644 --- a/src/test/ref/useuninitialized.asm +++ b/src/test/ref/useuninitialized.asm @@ -1,9 +1,15 @@ // Use an uninitialized variable - should use the default value (0)! -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="useuninitialized.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const b = 3 .const s = 1 +.segment Code main: { .label screen = $400 // *screen = b diff --git a/src/test/ref/useuninitialized.log b/src/test/ref/useuninitialized.log index 80721774f..aa753b703 100644 --- a/src/test/ref/useuninitialized.log +++ b/src/test/ref/useuninitialized.log @@ -164,12 +164,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Use an uninitialized variable - should use the default value (0)! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="useuninitialized.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const b = 3 .const s = 1 +.segment Code // main main: { .label screen = $400 @@ -209,12 +215,18 @@ Score: 18 // File Comments // Use an uninitialized variable - should use the default value (0)! // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="useuninitialized.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const b = 3 .const s = 1 +.segment Code // main main: { .label screen = $400 diff --git a/src/test/ref/var-export.asm b/src/test/ref/var-export.asm index 2e8dd2c29..546e1b3f1 100644 --- a/src/test/ref/var-export.asm +++ b/src/test/ref/var-export.asm @@ -1,8 +1,14 @@ // Test the export directive usable for ensuring a data variable is always added to the output - even if it is never used -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-export.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { // SCREEN[0] = 'x' lda #'x' @@ -10,5 +16,6 @@ main: { // } rts } +.segment Data MESSAGE: .text "camelot!" .byte 0 diff --git a/src/test/ref/var-export.log b/src/test/ref/var-export.log index e706f60b2..c1aac802d 100644 --- a/src/test/ref/var-export.log +++ b/src/test/ref/var-export.log @@ -81,11 +81,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test the export directive usable for ensuring a data variable is always added to the output - even if it is never used // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-export.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [0] *SCREEN = 'x' -- _deref_pbuc1=vbuc2 @@ -98,6 +104,7 @@ main: { rts } // File Data +.segment Data MESSAGE: .text "camelot!" .byte 0 @@ -120,11 +127,17 @@ Score: 12 // File Comments // Test the export directive usable for ensuring a data variable is always added to the output - even if it is never used // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-export.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // SCREEN[0] = 'x' @@ -137,6 +150,7 @@ main: { rts } // File Data +.segment Data MESSAGE: .text "camelot!" .byte 0 diff --git a/src/test/ref/var-forward-problem.asm b/src/test/ref/var-forward-problem.asm index 7aef3442b..447f44de4 100644 --- a/src/test/ref/var-forward-problem.asm +++ b/src/test/ref/var-forward-problem.asm @@ -1,9 +1,15 @@ // Illustrates the problem with variable forward references not working -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-forward-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const b = 'a' .label screen = $400 +.segment Code main: { // *screen = b lda #b diff --git a/src/test/ref/var-forward-problem.log b/src/test/ref/var-forward-problem.log index 5e4394a8b..3b6b459f8 100644 --- a/src/test/ref/var-forward-problem.log +++ b/src/test/ref/var-forward-problem.log @@ -69,12 +69,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Illustrates the problem with variable forward references not working // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-forward-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const b = 'a' .label screen = $400 +.segment Code // main main: { // [0] *screen = b -- _deref_pbuc1=vbuc2 @@ -107,12 +113,18 @@ Score: 12 // File Comments // Illustrates the problem with variable forward references not working // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-forward-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const b = 'a' .label screen = $400 +.segment Code // main main: { // *screen = b diff --git a/src/test/ref/var-forward-problem2.asm b/src/test/ref/var-forward-problem2.asm index 7aef3442b..ea8ac14b3 100644 --- a/src/test/ref/var-forward-problem2.asm +++ b/src/test/ref/var-forward-problem2.asm @@ -1,9 +1,15 @@ // Illustrates the problem with variable forward references not working -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-forward-problem2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const b = 'a' .label screen = $400 +.segment Code main: { // *screen = b lda #b diff --git a/src/test/ref/var-forward-problem2.log b/src/test/ref/var-forward-problem2.log index d53fadc36..3fb4e24ef 100644 --- a/src/test/ref/var-forward-problem2.log +++ b/src/test/ref/var-forward-problem2.log @@ -136,12 +136,18 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Illustrates the problem with variable forward references not working // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-forward-problem2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const b = 'a' .label screen = $400 +.segment Code // main main: { // [0] *screen#0 = b#0 -- _deref_pbuc1=vbuc2 @@ -176,12 +182,18 @@ Score: 12 // File Comments // Illustrates the problem with variable forward references not working // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-forward-problem2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const b = 'a' .label screen = $400 +.segment Code // main main: { // *screen = b diff --git a/src/test/ref/var-init-problem.asm b/src/test/ref/var-init-problem.asm index 088fb2603..ba647db87 100644 --- a/src/test/ref/var-init-problem.asm +++ b/src/test/ref/var-init-problem.asm @@ -1,8 +1,14 @@ // Variables without initialization causes problems when compiling -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-init-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = $400 +.segment Code main: { // *screen = 'a' lda #'a' diff --git a/src/test/ref/var-init-problem.log b/src/test/ref/var-init-problem.log index 03d320074..419469bd6 100644 --- a/src/test/ref/var-init-problem.log +++ b/src/test/ref/var-init-problem.log @@ -105,11 +105,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Variables without initialization causes problems when compiling // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-init-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { // [0] *screen#0 = 'a' -- _deref_pbuc1=vbuc2 @@ -142,11 +148,17 @@ Score: 12 // File Comments // Variables without initialization causes problems when compiling // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-init-problem.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label screen = $400 +.segment Code // main main: { // *screen = 'a' diff --git a/src/test/ref/var-register-noarg.asm b/src/test/ref/var-register-noarg.asm index e1714e8d8..c26c1676b 100644 --- a/src/test/ref/var-register-noarg.asm +++ b/src/test/ref/var-register-noarg.asm @@ -1,8 +1,14 @@ // Test declaring a variable as register with no information about which register (for compatibility with standard C) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-register-noarg.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 +.segment Code main: { ldx #0 __b1: @@ -23,6 +29,7 @@ main: { inx jmp __b1 } +.segment Data .encoding "screencode_upper" MSG: .text "CAMELOT!" .byte 0 diff --git a/src/test/ref/var-register-noarg.log b/src/test/ref/var-register-noarg.log index c069bfbcd..2e5e7a615 100644 --- a/src/test/ref/var-register-noarg.log +++ b/src/test/ref/var-register-noarg.log @@ -141,11 +141,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test declaring a variable as register with no information about which register (for compatibility with standard C) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-register-noarg.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -180,6 +186,7 @@ main: { jmp __b1 } // File Data +.segment Data .encoding "screencode_upper" MSG: .text "CAMELOT!" .byte 0 @@ -212,11 +219,17 @@ Score: 276 // File Comments // Test declaring a variable as register with no information about which register (for compatibility with standard C) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-register-noarg.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -251,6 +264,7 @@ main: { jmp __b1 } // File Data +.segment Data .encoding "screencode_upper" MSG: .text "CAMELOT!" .byte 0 diff --git a/src/test/ref/var-register-zp-3.asm b/src/test/ref/var-register-zp-3.asm index e085f13d9..682420f61 100644 --- a/src/test/ref/var-register-zp-3.asm +++ b/src/test/ref/var-register-zp-3.asm @@ -1,8 +1,14 @@ // Test declaring a variable as register on a specific ZP address -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="var-register-zp-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label screen = $400 +.segment Code main: { // print2(screen, "hello") lda #main::@1] @@ -267,6 +273,7 @@ move_enemy: { rts } // File Data +.segment Data OBJ_WORLD_X: .fill 2*MAX_OBJECTS, 0 ASSEMBLER OPTIMIZATIONS @@ -314,11 +321,17 @@ Score: 202 // File Comments // Adding a missing word-fragment for Travis Fisher // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="wfragment1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const MAX_OBJECTS = $10 +.segment Code // main main: { // [1] phi from main to main::@1 [phi:main->main::@1] @@ -364,5 +377,6 @@ move_enemy: { rts } // File Data +.segment Data OBJ_WORLD_X: .fill 2*MAX_OBJECTS, 0 diff --git a/src/test/ref/word-array-0.asm b/src/test/ref/word-array-0.asm index eb132c418..4ca4b2a96 100644 --- a/src/test/ref/word-array-0.asm +++ b/src/test/ref/word-array-0.asm @@ -1,8 +1,14 @@ // Tests a simple word array -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-array-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_WORD = 2 +.segment Code main: { .label SCREEN = $400+6*$28 .label words = $400 diff --git a/src/test/ref/word-array-0.log b/src/test/ref/word-array-0.log index 68529f58a..a9c316db0 100644 --- a/src/test/ref/word-array-0.log +++ b/src/test/ref/word-array-0.log @@ -179,11 +179,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests a simple word array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-array-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label SCREEN = $400+6*$28 @@ -258,11 +264,17 @@ Score: 62 // File Comments // Tests a simple word array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-array-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label SCREEN = $400+6*$28 diff --git a/src/test/ref/word-array-1.asm b/src/test/ref/word-array-1.asm index 79783eb00..fa8842aa5 100644 --- a/src/test/ref/word-array-1.asm +++ b/src/test/ref/word-array-1.asm @@ -1,7 +1,13 @@ // Tests a simple word array -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-array-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label w = 3 @@ -41,6 +47,7 @@ main: { bne __b1 // } rts + .segment Data // Clever word array that represents C64 numbers 0-7 words: .word $3031, $3233, $3435, $3637 } diff --git a/src/test/ref/word-array-1.log b/src/test/ref/word-array-1.log index d70b5a452..40bc60c06 100644 --- a/src/test/ref/word-array-1.log +++ b/src/test/ref/word-array-1.log @@ -203,10 +203,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests a simple word array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-array-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -265,6 +271,7 @@ main: { __breturn: // [13] return rts + .segment Data // Clever word array that represents C64 numbers 0-7 words: .word $3031, $3233, $3435, $3637 } @@ -321,10 +328,16 @@ Score: 641 // File Comments // Tests a simple word array // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-array-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -385,6 +398,7 @@ main: { // } // [13] return rts + .segment Data // Clever word array that represents C64 numbers 0-7 words: .word $3031, $3233, $3435, $3637 } diff --git a/src/test/ref/word-array-2.asm b/src/test/ref/word-array-2.asm index 731166910..7ba24c894 100644 --- a/src/test/ref/word-array-2.asm +++ b/src/test/ref/word-array-2.asm @@ -1,8 +1,14 @@ // Tests a word-array with 128+ elements -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-array-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_WORD = 2 +.segment Code main: { .label SCREEN = $400 .label __0 = 2 @@ -62,4 +68,5 @@ main: { // } rts } +.segment Data words: .fill 2*$100, 0 diff --git a/src/test/ref/word-array-2.log b/src/test/ref/word-array-2.log index c9e431f95..8d8443ad4 100644 --- a/src/test/ref/word-array-2.log +++ b/src/test/ref/word-array-2.log @@ -233,11 +233,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests a word-array with 128+ elements // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-array-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label SCREEN = $400 @@ -319,6 +325,7 @@ main: { rts } // File Data +.segment Data words: .fill 2*$100, 0 ASSEMBLER OPTIMIZATIONS @@ -362,11 +369,17 @@ Score: 1092 // File Comments // Tests a word-array with 128+ elements // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-array-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label SCREEN = $400 @@ -446,5 +459,6 @@ main: { rts } // File Data +.segment Data words: .fill 2*$100, 0 diff --git a/src/test/ref/word-pointer-compound.asm b/src/test/ref/word-pointer-compound.asm index d42655364..45167efae 100644 --- a/src/test/ref/word-pointer-compound.asm +++ b/src/test/ref/word-pointer-compound.asm @@ -1,8 +1,14 @@ // Test word pointer compound assignment -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-compound.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_WORD = 2 +.segment Code main: { .label SCREEN = $400 ldx #0 @@ -48,5 +54,6 @@ main: { sta SCREEN+5 // } rts + .segment Data words: .word $3031, $3233, $3435 } diff --git a/src/test/ref/word-pointer-compound.log b/src/test/ref/word-pointer-compound.log index 735883a97..81a61ff2e 100644 --- a/src/test/ref/word-pointer-compound.log +++ b/src/test/ref/word-pointer-compound.log @@ -302,11 +302,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Test word pointer compound assignment // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-compound.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label SCREEN = $400 @@ -370,6 +376,7 @@ main: { __breturn: // [18] return rts + .segment Data words: .word $3031, $3233, $3435 } // File Data @@ -421,11 +428,17 @@ Score: 449 // File Comments // Test word pointer compound assignment // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-compound.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label SCREEN = $400 @@ -496,6 +509,7 @@ main: { // } // [18] return rts + .segment Data words: .word $3031, $3233, $3435 } // File Data diff --git a/src/test/ref/word-pointer-iteration-0.asm b/src/test/ref/word-pointer-iteration-0.asm index e22d6cfb8..214494cbc 100644 --- a/src/test/ref/word-pointer-iteration-0.asm +++ b/src/test/ref/word-pointer-iteration-0.asm @@ -1,8 +1,14 @@ // Tests simple word pointer iteration -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-iteration-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_WORD = 2 +.segment Code main: { .label SCREEN = $400+$28*6 // <*wp diff --git a/src/test/ref/word-pointer-iteration-0.log b/src/test/ref/word-pointer-iteration-0.log index 250cba459..4d00ac8a7 100644 --- a/src/test/ref/word-pointer-iteration-0.log +++ b/src/test/ref/word-pointer-iteration-0.log @@ -194,11 +194,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests simple word pointer iteration // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-iteration-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label SCREEN = $400+$28*6 @@ -266,11 +272,17 @@ Score: 54 // File Comments // Tests simple word pointer iteration // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-iteration-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label SCREEN = $400+$28*6 diff --git a/src/test/ref/word-pointer-iteration.asm b/src/test/ref/word-pointer-iteration.asm index 20782c24c..497227fd4 100644 --- a/src/test/ref/word-pointer-iteration.asm +++ b/src/test/ref/word-pointer-iteration.asm @@ -1,8 +1,14 @@ // Tests simple word pointer iteration -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-iteration.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_WORD = 2 +.segment Code main: { .label SCREEN = $400 .label w = 5 @@ -54,6 +60,7 @@ main: { bne __b1 // } rts + .segment Data // Clever word array that represents C64 numbers 0-7 words: .word $3130, $3332, $3534, $3736 } diff --git a/src/test/ref/word-pointer-iteration.log b/src/test/ref/word-pointer-iteration.log index 59fc41516..c4fe994be 100644 --- a/src/test/ref/word-pointer-iteration.log +++ b/src/test/ref/word-pointer-iteration.log @@ -210,11 +210,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests simple word pointer iteration // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-iteration.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label SCREEN = $400 @@ -286,6 +292,7 @@ main: { __breturn: // [13] return rts + .segment Data // Clever word array that represents C64 numbers 0-7 words: .word $3130, $3332, $3534, $3736 } @@ -344,11 +351,17 @@ Score: 946 // File Comments // Tests simple word pointer iteration // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-iteration.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label SCREEN = $400 @@ -423,6 +436,7 @@ main: { // } // [13] return rts + .segment Data // Clever word array that represents C64 numbers 0-7 words: .word $3130, $3332, $3534, $3736 } diff --git a/src/test/ref/word-pointer-math-0.asm b/src/test/ref/word-pointer-math-0.asm index 382c863ef..c02adba7d 100644 --- a/src/test/ref/word-pointer-math-0.asm +++ b/src/test/ref/word-pointer-math-0.asm @@ -1,8 +1,14 @@ // Tests simple word pointer math -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-math-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_WORD = 2 +.segment Code main: { .label SCREEN = $400+6*$28 .label words = $400 diff --git a/src/test/ref/word-pointer-math-0.log b/src/test/ref/word-pointer-math-0.log index 366ff1241..25be26451 100644 --- a/src/test/ref/word-pointer-math-0.log +++ b/src/test/ref/word-pointer-math-0.log @@ -188,11 +188,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests simple word pointer math // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-math-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label SCREEN = $400+6*$28 @@ -267,11 +273,17 @@ Score: 62 // File Comments // Tests simple word pointer math // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-math-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .label SCREEN = $400+6*$28 diff --git a/src/test/ref/word-pointer-math-1.asm b/src/test/ref/word-pointer-math-1.asm index f03cc766e..9ce40f89a 100644 --- a/src/test/ref/word-pointer-math-1.asm +++ b/src/test/ref/word-pointer-math-1.asm @@ -1,8 +1,14 @@ // Tests word pointer math - subtracting two word pointers -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-math-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .const SIZEOF_WORD = 2 +.segment Code main: { .const wd = (w2-w1)/SIZEOF_WORD .label SCREEN = $400 diff --git a/src/test/ref/word-pointer-math-1.log b/src/test/ref/word-pointer-math-1.log index 47df1172b..97459b06e 100644 --- a/src/test/ref/word-pointer-math-1.log +++ b/src/test/ref/word-pointer-math-1.log @@ -91,11 +91,17 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests word pointer math - subtracting two word pointers // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-math-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .const wd = (w2-w1)/SIZEOF_WORD @@ -138,11 +144,17 @@ Score: 18 // File Comments // Tests word pointer math - subtracting two word pointers // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-math-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 +.segment Code // main main: { .const wd = (w2-w1)/SIZEOF_WORD diff --git a/src/test/ref/word-pointer-math.asm b/src/test/ref/word-pointer-math.asm index 3631b8476..5980d2e50 100644 --- a/src/test/ref/word-pointer-math.asm +++ b/src/test/ref/word-pointer-math.asm @@ -1,7 +1,13 @@ // Tests simple word pointer math -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-math.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label SCREEN = $400 .label w = 3 @@ -43,6 +49,7 @@ main: { bne __b1 // } rts + .segment Data // Clever word array that represents C64 numbers 0-7 words: .word $3130, $3332, $3534, $3736 } diff --git a/src/test/ref/word-pointer-math.log b/src/test/ref/word-pointer-math.log index 2feb9ecdc..fde44a237 100644 --- a/src/test/ref/word-pointer-math.log +++ b/src/test/ref/word-pointer-math.log @@ -209,10 +209,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests simple word pointer math // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-math.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -271,6 +277,7 @@ main: { __breturn: // [13] return rts + .segment Data // Clever word array that represents C64 numbers 0-7 words: .word $3130, $3332, $3534, $3736 } @@ -326,10 +333,16 @@ Score: 671 // File Comments // Tests simple word pointer math // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="word-pointer-math.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label SCREEN = $400 @@ -392,6 +405,7 @@ main: { // } // [13] return rts + .segment Data // Clever word array that represents C64 numbers 0-7 words: .word $3130, $3332, $3534, $3736 } diff --git a/src/test/ref/wordexpr.asm b/src/test/ref/wordexpr.asm index 6ff612b22..34fcff3e2 100644 --- a/src/test/ref/wordexpr.asm +++ b/src/test/ref/wordexpr.asm @@ -1,7 +1,13 @@ // Expressions based on bytes but resulting in words are as words - eg. b = b + 40*8; -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="wordexpr.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label b = 2 ldx #0 diff --git a/src/test/ref/wordexpr.log b/src/test/ref/wordexpr.log index 562df95d2..bc03b1fce 100644 --- a/src/test/ref/wordexpr.log +++ b/src/test/ref/wordexpr.log @@ -139,10 +139,16 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Expressions based on bytes but resulting in words are as words - eg. b = b + 40*8; // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="wordexpr.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label b = 2 @@ -219,10 +225,16 @@ Score: 351 // File Comments // Expressions based on bytes but resulting in words are as words - eg. b = b + 40*8; // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="wordexpr.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label b = 2 diff --git a/src/test/ref/zeropage-detect-advanced.asm b/src/test/ref/zeropage-detect-advanced.asm index b313fb87b..bfb9ed8c7 100644 --- a/src/test/ref/zeropage-detect-advanced.asm +++ b/src/test/ref/zeropage-detect-advanced.asm @@ -1,8 +1,14 @@ // Illustrates a problem where absolute addressing is used for zeropage-access // This is caused by the compiler believing the pointer is into memory" (not knowing the upper part is 0x00 ) -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="zeropage-detect-advanced.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label c = t .label t = 2 diff --git a/src/test/ref/zeropage-detect-advanced.log b/src/test/ref/zeropage-detect-advanced.log index 230d27bf6..a81ce1aa2 100644 --- a/src/test/ref/zeropage-detect-advanced.log +++ b/src/test/ref/zeropage-detect-advanced.log @@ -84,10 +84,16 @@ ASSEMBLER BEFORE OPTIMIZATION // Illustrates a problem where absolute addressing is used for zeropage-access // This is caused by the compiler believing the pointer is into memory" (not knowing the upper part is 0x00 ) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="zeropage-detect-advanced.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label c = t @@ -135,10 +141,16 @@ Score: 31 // Illustrates a problem where absolute addressing is used for zeropage-access // This is caused by the compiler believing the pointer is into memory" (not knowing the upper part is 0x00 ) // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="zeropage-detect-advanced.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label c = t diff --git a/src/test/ref/zeropage-sinus.asm b/src/test/ref/zeropage-sinus.asm index 64a3a0880..b4e014e2a 100644 --- a/src/test/ref/zeropage-sinus.asm +++ b/src/test/ref/zeropage-sinus.asm @@ -1,14 +1,20 @@ // Attempt to store and use a sine on zeropage // $00/$11 is carefully chosen to be $ff - which plays well with the processor port -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="zeropage-sinus.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // The offset of the sprite pointers from the screen start address .const SPRITE_PTRS = $3f8 .label SPRITES_XPOS = $d000 .label SPRITES_YPOS = $d001 .label SPRITES_ENABLE = $d015 .label SCREEN = $400 +.segment Code main: { // asm // Stop interrupts @@ -99,6 +105,7 @@ restoreZeropage: { // } rts } +.segment Data // A 256-byte (co)sine (with $ff in the first two entries) .align $100 SINTABLE: diff --git a/src/test/ref/zeropage-sinus.log b/src/test/ref/zeropage-sinus.log index 2d729f793..42bebcf51 100644 --- a/src/test/ref/zeropage-sinus.log +++ b/src/test/ref/zeropage-sinus.log @@ -286,9 +286,14 @@ ASSEMBLER BEFORE OPTIMIZATION // Attempt to store and use a sine on zeropage // $00/$11 is carefully chosen to be $ff - which plays well with the processor port // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="zeropage-sinus.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The offset of the sprite pointers from the screen start address .const SPRITE_PTRS = $3f8 @@ -296,6 +301,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label SPRITES_YPOS = $d001 .label SPRITES_ENABLE = $d015 .label SCREEN = $400 +.segment Code // main main: { // asm { sei } @@ -423,6 +429,7 @@ restoreZeropage: { rts } // File Data +.segment Data // A 256-byte (co)sine (with $ff in the first two entries) .align $100 SINTABLE: @@ -489,9 +496,14 @@ Score: 379 // Attempt to store and use a sine on zeropage // $00/$11 is carefully chosen to be $ff - which plays well with the processor port // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="zeropage-sinus.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels // The offset of the sprite pointers from the screen start address .const SPRITE_PTRS = $3f8 @@ -499,6 +511,7 @@ Score: 379 .label SPRITES_YPOS = $d001 .label SPRITES_ENABLE = $d015 .label SCREEN = $400 +.segment Code // main main: { // asm @@ -624,6 +637,7 @@ restoreZeropage: { rts } // File Data +.segment Data // A 256-byte (co)sine (with $ff in the first two entries) .align $100 SINTABLE: diff --git a/src/test/ref/zpparammin.asm b/src/test/ref/zpparammin.asm index f5f48a659..2462c52b5 100644 --- a/src/test/ref/zpparammin.asm +++ b/src/test/ref/zpparammin.asm @@ -1,8 +1,14 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="zpparammin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" .label SCREEN = $400 .label SCREEN2 = $400+$28 +.segment Code main: { .label i = 2 lda #0 diff --git a/src/test/ref/zpparammin.log b/src/test/ref/zpparammin.log index a0fe4d4ef..d90b27427 100644 --- a/src/test/ref/zpparammin.log +++ b/src/test/ref/zpparammin.log @@ -401,12 +401,18 @@ Uplifting [sum2] best 1001 combination reg byte a [ sum2::return#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="zpparammin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label SCREEN2 = $400+$28 +.segment Code // main main: { .label i = 2 @@ -588,12 +594,18 @@ Score: 805 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="zpparammin.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels .label SCREEN = $400 .label SCREEN2 = $400+$28 +.segment Code // main main: { .label i = 2 diff --git a/src/test/ref/zpptr.asm b/src/test/ref/zpptr.asm index 3a6f6d841..6995f4112 100644 --- a/src/test/ref/zpptr.asm +++ b/src/test/ref/zpptr.asm @@ -1,6 +1,12 @@ -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="zpptr.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" +.segment Code main: { .label zpptr = $1000 .label zpptr2 = 4 diff --git a/src/test/ref/zpptr.log b/src/test/ref/zpptr.log index 663bed698..c077186be 100644 --- a/src/test/ref/zpptr.log +++ b/src/test/ref/zpptr.log @@ -264,10 +264,16 @@ Allocated (was zp[2]:7) zp[2]:6 [ main::w#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="zpptr.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label zpptr = $1000 @@ -425,10 +431,16 @@ Score: 68411 // File Comments // Upstart -.pc = $801 "Basic" + // Commodore 64 PRG executable file +.file [name="zpptr.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic :BasicUpstart(main) -.pc = $80d "Program" // Global Constants & labels +.segment Code // main main: { .label zpptr = $1000