mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-11-25 20:32:25 +00:00
Implementation of the layers in VERA is working now in text mode!
Added a number of new methods in conio to accommodate this. screenlayer() setscreenlayermapbase() getscreenlayermapbase() screenlayerenable() screenlayerdisable() screenlayerenabled()
This commit is contained in:
parent
218eb1a9db
commit
9fd668bba5
694
src/main/fragment/cache/fragment-cache-wdc65c02.asm
vendored
694
src/main/fragment/cache/fragment-cache-wdc65c02.asm
vendored
@ -1497,3 +1497,697 @@ cpy #0
|
||||
bne {la1}
|
||||
//FRAGMENT vbuyy=_dec_vbuyy
|
||||
dey
|
||||
//FRAGMENT pbuz1=qbuc1_derefidx_vbuz2
|
||||
ldy {z2}
|
||||
lda {c1},y
|
||||
sta {z1}
|
||||
lda {c1}+1,y
|
||||
sta {z1}+1
|
||||
//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 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 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_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 vbuxx_ge_vbuz1_then_la1
|
||||
cpx {z1}
|
||||
bcs {la1}
|
||||
//FRAGMENT vbuz1_ge_vbuxx_then_la1
|
||||
lda {z1}
|
||||
stx $ff
|
||||
cmp $ff
|
||||
bcs {la1}
|
||||
//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_ge_vbuz1_then_la1
|
||||
cpy {z1}
|
||||
bcs {la1}
|
||||
//FRAGMENT 0_eq_vbuyy_then_la1
|
||||
cpy #0
|
||||
beq {la1}
|
||||
//FRAGMENT vbuyy_lt_vbuc1_then_la1
|
||||
cpy #{c1}
|
||||
bcc {la1}
|
||||
//FRAGMENT vbuxx=vbuaa
|
||||
tax
|
||||
//FRAGMENT pbuz1=_deref_qbuc1
|
||||
lda {c1}
|
||||
sta {z1}
|
||||
lda {c1}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT pbuz1=_ptr_vbuz2
|
||||
lda {z2}
|
||||
sta {z1}
|
||||
lda #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vbuz2_plus_vwuc1
|
||||
lda {z2}
|
||||
clc
|
||||
adc #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT pbuz1=pbuz2_plus_vwuz3
|
||||
lda {z2}
|
||||
clc
|
||||
adc {z3}
|
||||
sta {z1}
|
||||
lda {z2}+1
|
||||
adc {z3}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT pbuz1=_ptr_vbuaa
|
||||
sta {z1}
|
||||
lda #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT pbuz1=_ptr_vbuxx
|
||||
stx {z1}
|
||||
ldx #0
|
||||
stx {z1}+1
|
||||
//FRAGMENT pbuz1=_ptr_vbuyy
|
||||
sty {z1}
|
||||
ldy #0
|
||||
sty {z1}+1
|
||||
//FRAGMENT pbuz1=pbuz2_plus_vwuz1
|
||||
lda {z1}
|
||||
clc
|
||||
adc {z2}
|
||||
sta {z1}
|
||||
lda {z1}+1
|
||||
adc {z2}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT pbuz1=pbuz1_plus_vbuaa
|
||||
clc
|
||||
adc {z1}
|
||||
sta {z1}
|
||||
bcc !+
|
||||
inc {z1}+1
|
||||
!:
|
||||
//FRAGMENT vwuz1=vbuaa
|
||||
sta {z1}
|
||||
lda #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vwuz2_rol_1
|
||||
lda {z2}
|
||||
asl
|
||||
sta {z1}
|
||||
lda {z2}+1
|
||||
rol
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vwuz1_rol_1
|
||||
asl {z1}
|
||||
rol {z1}+1
|
||||
//FRAGMENT _deref_pbuz1=vbuz2
|
||||
lda {z2}
|
||||
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 vbuaa=vbuyy
|
||||
tya
|
||||
//FRAGMENT vbuz1=vbuz2_rol_7
|
||||
lda {z2}
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta {z1}
|
||||
//FRAGMENT vbuaa=vbuz1_rol_7
|
||||
lda {z1}
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
//FRAGMENT vbuxx=vbuz1_rol_7
|
||||
lda {z1}
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
tax
|
||||
//FRAGMENT vbuyy=vbuz1_rol_7
|
||||
lda {z1}
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
tay
|
||||
//FRAGMENT vwuz1=_word__deref_pbuz2
|
||||
ldy #0
|
||||
lda ({z2}),y
|
||||
sta {z1}
|
||||
lda #0
|
||||
sta {z1}+1
|
||||
//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 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 pwuz1=pwuc1
|
||||
lda #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=pwuz2_derefidx_vbuz3
|
||||
ldy {z3}
|
||||
lda ({z2}),y
|
||||
sta {z1}
|
||||
iny
|
||||
lda ({z2}),y
|
||||
sta {z1}+1
|
||||
//FRAGMENT vbuaa_eq_vbuc1_then_la1
|
||||
cmp #{c1}
|
||||
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 vwuz1=_word__deref_pbuz1
|
||||
ldy #0
|
||||
lda ({z1}),y
|
||||
sta {z1}
|
||||
lda #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vwuz1_rol_4
|
||||
asl {z1}
|
||||
rol {z1}+1
|
||||
asl {z1}
|
||||
rol {z1}+1
|
||||
asl {z1}
|
||||
rol {z1}+1
|
||||
asl {z1}
|
||||
rol {z1}+1
|
||||
//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 vwuz1=vwuz2_plus_vwuz3
|
||||
lda {z2}
|
||||
clc
|
||||
adc {z3}
|
||||
sta {z1}
|
||||
lda {z2}+1
|
||||
adc {z3}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT pbuz1=pbuz1_plus_vwuz2
|
||||
lda {z1}
|
||||
clc
|
||||
adc {z2}
|
||||
sta {z1}
|
||||
lda {z1}+1
|
||||
adc {z2}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vwuz2_plus_vwuz1
|
||||
lda {z1}
|
||||
clc
|
||||
adc {z2}
|
||||
sta {z1}
|
||||
lda {z1}+1
|
||||
adc {z2}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT vbuz1=_hi_vwuz2
|
||||
lda {z2}+1
|
||||
sta {z1}
|
||||
//FRAGMENT vwuz1=vwuz2_plus_vbuz3
|
||||
lda {z3}
|
||||
clc
|
||||
adc {z2}
|
||||
sta {z1}
|
||||
lda #0
|
||||
adc {z2}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT vbuz1=_lo_vwuz2
|
||||
lda {z2}
|
||||
sta {z1}
|
||||
//FRAGMENT vbuz1=vbuz2_bor_vbuc1
|
||||
lda #{c1}
|
||||
ora {z2}
|
||||
sta {z1}
|
||||
//FRAGMENT vbuaa=_hi_vwuz1
|
||||
lda {z1}+1
|
||||
//FRAGMENT vbuxx=_hi_vwuz1
|
||||
ldx {z1}+1
|
||||
//FRAGMENT vwuz1=vwuz2_plus_vbuaa
|
||||
clc
|
||||
adc {z2}
|
||||
sta {z1}
|
||||
lda #0
|
||||
adc {z2}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vwuz2_plus_vbuxx
|
||||
txa
|
||||
clc
|
||||
adc {z2}
|
||||
sta {z1}
|
||||
lda #0
|
||||
adc {z2}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vwuz2_plus_vbuyy
|
||||
tya
|
||||
clc
|
||||
adc {z2}
|
||||
sta {z1}
|
||||
lda #0
|
||||
adc {z2}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT vbuaa=_lo_vwuz1
|
||||
lda {z1}
|
||||
//FRAGMENT vbuxx=_lo_vwuz1
|
||||
ldx {z1}
|
||||
//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 vbuxx=vbuxx_bor_vbuc1
|
||||
txa
|
||||
ora #{c1}
|
||||
tax
|
||||
//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 vbuyy=vbuyy_bor_vbuc1
|
||||
tya
|
||||
ora #{c1}
|
||||
tay
|
||||
//FRAGMENT vbuyy=_lo_vwuz1
|
||||
ldy {z1}
|
||||
//FRAGMENT vbuyy=_hi_vwuz1
|
||||
ldy {z1}+1
|
||||
//FRAGMENT vwuz1=vwuz1_plus_vwuz2
|
||||
lda {z1}
|
||||
clc
|
||||
adc {z2}
|
||||
sta {z1}
|
||||
lda {z1}+1
|
||||
adc {z2}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vwuz1_plus_vbuaa
|
||||
clc
|
||||
adc {z1}
|
||||
sta {z1}
|
||||
bcc !+
|
||||
inc {z1}+1
|
||||
!:
|
||||
//FRAGMENT vwuz1=vbuz2_plus_vwuz3
|
||||
lda {z2}
|
||||
clc
|
||||
adc {z3}
|
||||
sta {z1}
|
||||
lda #0
|
||||
adc {z3}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vbuaa_plus_vwuz2
|
||||
clc
|
||||
adc {z2}
|
||||
sta {z1}
|
||||
lda #0
|
||||
adc {z2}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vbuxx_plus_vwuz2
|
||||
txa
|
||||
clc
|
||||
adc {z2}
|
||||
sta {z1}
|
||||
lda #0
|
||||
adc {z2}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vbuyy_plus_vwuz2
|
||||
tya
|
||||
clc
|
||||
adc {z2}
|
||||
sta {z1}
|
||||
lda #0
|
||||
adc {z2}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vbuaa_plus_vwuz1
|
||||
clc
|
||||
adc {z1}
|
||||
sta {z1}
|
||||
bcc !+
|
||||
inc {z1}+1
|
||||
!:
|
||||
//FRAGMENT vwuz1=_deref_pbuz2_rol_1
|
||||
ldy #0
|
||||
lda ({z2}),y
|
||||
asl
|
||||
sta {z1}
|
||||
lda #0
|
||||
rol
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=_deref_pbuz1_rol_1
|
||||
ldy #0
|
||||
lda ({z1}),y
|
||||
asl
|
||||
sta {z1}
|
||||
lda #0
|
||||
rol
|
||||
sta {z1}+1
|
||||
//FRAGMENT vbuz1=vbuz2_band_vbuc1
|
||||
lda #{c1}
|
||||
and {z2}
|
||||
sta {z1}
|
||||
//FRAGMENT vbuz1=_deref_pbuc1_band_pbuc2_derefidx_vbuz2
|
||||
lda {c1}
|
||||
ldy {z2}
|
||||
and {c2},y
|
||||
sta {z1}
|
||||
//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor__deref_pbuc2
|
||||
lda {c1}
|
||||
ora {c2}
|
||||
sta {c1}
|
||||
//FRAGMENT vbuz1=_bnot__deref_pbuc1
|
||||
lda {c1}
|
||||
eor #$ff
|
||||
sta {z1}
|
||||
//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuz1
|
||||
lda {c1}
|
||||
and {z1}
|
||||
sta {c1}
|
||||
//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=vbuaa_band_vbuc1
|
||||
and #{c1}
|
||||
sta {z1}
|
||||
//FRAGMENT vbuaa=vbuaa_band_vbuc1
|
||||
and #{c1}
|
||||
//FRAGMENT vbuxx=vbuaa_band_vbuc1
|
||||
and #{c1}
|
||||
tax
|
||||
//FRAGMENT vbuyy=vbuaa_band_vbuc1
|
||||
and #{c1}
|
||||
tay
|
||||
//FRAGMENT vbuz1=vbuxx_band_vbuc1
|
||||
txa
|
||||
and #{c1}
|
||||
sta {z1}
|
||||
//FRAGMENT vbuaa=vbuxx_band_vbuc1
|
||||
txa
|
||||
and #{c1}
|
||||
//FRAGMENT vbuxx=vbuxx_band_vbuc1
|
||||
txa
|
||||
and #{c1}
|
||||
tax
|
||||
//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
|
||||
tya
|
||||
and #{c1}
|
||||
tax
|
||||
//FRAGMENT vbuyy=vbuyy_band_vbuc1
|
||||
tya
|
||||
and #{c1}
|
||||
tay
|
||||
//FRAGMENT vbuz1=_deref_pbuc1_band_pbuc2_derefidx_vbuaa
|
||||
tay
|
||||
lda {c1}
|
||||
and {c2},y
|
||||
sta {z1}
|
||||
//FRAGMENT vbuz1=_deref_pbuc1_band_pbuc2_derefidx_vbuxx
|
||||
lda {c1}
|
||||
and {c2},x
|
||||
sta {z1}
|
||||
//FRAGMENT vbuz1=_deref_pbuc1_band_pbuc2_derefidx_vbuyy
|
||||
lda {c1}
|
||||
and {c2},y
|
||||
sta {z1}
|
||||
//FRAGMENT vbuaa=_deref_pbuc1_band_pbuc2_derefidx_vbuz1
|
||||
lda {c1}
|
||||
ldy {z1}
|
||||
and {c2},y
|
||||
//FRAGMENT vbuaa=_deref_pbuc1_band_pbuc2_derefidx_vbuaa
|
||||
tay
|
||||
lda {c1}
|
||||
and {c2},y
|
||||
//FRAGMENT vbuaa=_deref_pbuc1_band_pbuc2_derefidx_vbuxx
|
||||
lda {c1}
|
||||
and {c2},x
|
||||
//FRAGMENT vbuaa=_deref_pbuc1_band_pbuc2_derefidx_vbuyy
|
||||
lda {c1}
|
||||
and {c2},y
|
||||
//FRAGMENT vbuxx=_deref_pbuc1_band_pbuc2_derefidx_vbuz1
|
||||
lda {c1}
|
||||
ldx {z1}
|
||||
and {c2},x
|
||||
tax
|
||||
//FRAGMENT vbuxx=_deref_pbuc1_band_pbuc2_derefidx_vbuaa
|
||||
tax
|
||||
lda {c1}
|
||||
and {c2},x
|
||||
tax
|
||||
//FRAGMENT vbuxx=_deref_pbuc1_band_pbuc2_derefidx_vbuxx
|
||||
lda {c1}
|
||||
and {c2},x
|
||||
tax
|
||||
//FRAGMENT vbuxx=_deref_pbuc1_band_pbuc2_derefidx_vbuyy
|
||||
lda {c1}
|
||||
and {c2},y
|
||||
tax
|
||||
//FRAGMENT vbuyy=_deref_pbuc1_band_pbuc2_derefidx_vbuz1
|
||||
lda {c1}
|
||||
ldy {z1}
|
||||
and {c2},y
|
||||
tay
|
||||
//FRAGMENT vbuyy=_deref_pbuc1_band_pbuc2_derefidx_vbuaa
|
||||
tay
|
||||
lda {c1}
|
||||
and {c2},y
|
||||
tay
|
||||
//FRAGMENT vbuyy=_deref_pbuc1_band_pbuc2_derefidx_vbuxx
|
||||
lda {c1}
|
||||
and {c2},x
|
||||
tay
|
||||
//FRAGMENT vbuyy=_deref_pbuc1_band_pbuc2_derefidx_vbuyy
|
||||
lda {c1}
|
||||
and {c2},y
|
||||
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 _deref_pbuc1=_deref_pbuc1_band_vbuaa
|
||||
and {c1}
|
||||
sta {c1}
|
||||
//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuxx
|
||||
txa
|
||||
and {c1}
|
||||
sta {c1}
|
||||
//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuyy
|
||||
tya
|
||||
and {c1}
|
||||
sta {c1}
|
||||
|
@ -82,14 +82,14 @@ char * const VERA_IRQLINE_L = 0x9f28;
|
||||
// Bit 2: Chroma Disable Setting 'Chroma Disable' disables output of chroma in NTSC composite mode and will give a better picture on a monochrome display. (Setting this bit will also disable the chroma output on the S-video output.)
|
||||
// Bit 0-1: Output Mode 0: Video disabled, 1: VGA output, 2: NTSC composite, 3: RGB interlaced, composite sync (via VGA connector)
|
||||
char * const VERA_DC_VIDEO = 0x9f29;
|
||||
char VERA_SPRITES_ENABLE = 0x40;
|
||||
char VERA_LAYER1_ENABLE = 0x20;
|
||||
char VERA_LAYER0_ENABLE = 0x10;
|
||||
char VERA_CROMA_DISABLE = 0x04;
|
||||
char VERA_OUTPUT_DISABLE = 0x00;
|
||||
char VERA_OUTPUT_VGA = 0x01;
|
||||
char VERA_OUTPUT_NTSC = 0x02;
|
||||
char VERA_OUTPUT_RGB = 0x03;
|
||||
const char VERA_SPRITES_ENABLE = 0x40;
|
||||
const char VERA_LAYER1_ENABLE = 0x20;
|
||||
const char VERA_LAYER0_ENABLE = 0x10;
|
||||
const char VERA_CROMA_DISABLE = 0x04;
|
||||
const char VERA_OUTPUT_DISABLE = 0x00;
|
||||
const char VERA_OUTPUT_VGA = 0x01;
|
||||
const char VERA_OUTPUT_NTSC = 0x02;
|
||||
const char VERA_OUTPUT_RGB = 0x03;
|
||||
// $9F2A DC_HSCALE (DCSEL=0) Active Display H-Scale
|
||||
char * const VERA_DC_HSCALE = 0x9f2a;
|
||||
// $9F2B DC_VSCALE (DCSEL=0) Active Display V-Scale
|
||||
@ -132,7 +132,7 @@ char const VERA_L0_CONFIG_HEIGHT_256 = 0xC0;
|
||||
char const VERA_L0_CONFIG_HEIGHT_MASK = 0xC0;
|
||||
unsigned int const VERA_L0_CONFIG_HEIGHT[4] = { 32, 64, 128, 256 };
|
||||
// $9F2E L0_MAPBASE Layer 0 Map Base Address (16:9)
|
||||
char * const VERA_L0_MAPBASE = 0x9f2e;
|
||||
unsigned byte * const VERA_L0_MAPBASE = 0x9f2e;
|
||||
// $9F2F L0_TILEBASE Layer 0 Tile Base
|
||||
// Bit 2-7: Tile Base Address (16:11)
|
||||
// Bit 1: Tile Height (0:8 pixels, 1:16 pixels)
|
||||
|
@ -6,10 +6,22 @@
|
||||
#define CONIO_WIDTH conio_screen_width
|
||||
// The screen height
|
||||
#define CONIO_HEIGHT conio_screen_height
|
||||
// The text screen address
|
||||
char * const CONIO_SCREEN_TEXT = DEFAULT_SCREEN;
|
||||
// The text screen base address, which is a 16:0 bit value in VERA VRAM.
|
||||
// That is 128KB addressable space, thus 17 bits in total.
|
||||
// CONIO_SCREEN_TEXT contains bits 15:0 of the address.
|
||||
// CONIO_SCREEN_BANK contains bit 16, the the 64K memory bank in VERA VRAM (the upper 17th bit).
|
||||
// !!! note that these values are not const for the cx16!
|
||||
// This conio implements the two layers of VERA, which can be layer 0 or layer 1.
|
||||
// Configuring conio to output to a different layer, will change these fields to the address base
|
||||
// configured using VERA_L0_MAPBASE = 0x9f2e or VERA_L1_MAPBASE = 0x9f35.
|
||||
// Using the function setscreenlayer(layer) will re-calculate using CONIO_SCREEN_TEXT and CONIO_SCREEN_BASE
|
||||
// based on the values of VERA_L0_MAPBASE or VERA_L1_MAPBASE, mapping the base address of the selected layer.
|
||||
// The function setscreenlayermapbase(layer,mapbase) allows to configure bit 16:9 of the
|
||||
// mapbase address of the time map in VRAM of the selected layer VERA_L0_MAPBASE or VERA_L1_MAPBASE.
|
||||
char* CONIO_SCREEN_TEXT = DEFAULT_SCREEN;
|
||||
byte CONIO_SCREEN_BANK = 0; // Default screen of the CX16 emulator uses memory bank 0 for text.
|
||||
// The color screen address
|
||||
char * const CONIO_SCREEN_COLORS = COLORRAM;
|
||||
char* const CONIO_SCREEN_COLORS = COLORRAM;
|
||||
// The default text color
|
||||
const char CONIO_TEXTCOLOR_DEFAULT = WHITE;
|
||||
// The default back color
|
||||
@ -23,13 +35,16 @@ void conio_x16_init() {
|
||||
// Position cursor at current line
|
||||
char * const BASIC_CURSOR_LINE = 0xD6;
|
||||
char line = *BASIC_CURSOR_LINE;
|
||||
screensize( &conio_screen_width, &conio_screen_height );
|
||||
screensize(&conio_screen_width, &conio_screen_height);
|
||||
screenlayer(1);
|
||||
setscreenlayermapbase(0,0x00);
|
||||
setscreenlayermapbase(1,0x00);
|
||||
if(line>=CONIO_HEIGHT) line=CONIO_HEIGHT-1;
|
||||
gotoxy(0, line);
|
||||
}
|
||||
|
||||
// Return true if there's a key waiting, return false if not
|
||||
unsigned char kbhit (void) {
|
||||
unsigned char kbhit(void) {
|
||||
// CIA#1 Port A: keyboard matrix columns and joystick #2
|
||||
char* const CIA1_PORT_A = 0xdc00;
|
||||
// CIA#1 Port B: keyboard matrix rows and joystick #1.
|
||||
@ -88,11 +103,14 @@ __ma unsigned byte conio_scroll_enable = 1;
|
||||
__ma unsigned byte conio_screen_width = 0;
|
||||
// Variable holding the screen height;
|
||||
__ma unsigned byte conio_screen_height = 0;
|
||||
// Variable holding the screen layer on the VERA card with which conio interacts;
|
||||
__ma unsigned byte conio_screen_layer = 1;
|
||||
//
|
||||
__ma unsigned byte* conio_screen_layer_mapbase[2] = {VERA_L0_MAPBASE, VERA_L1_MAPBASE};
|
||||
|
||||
// clears the screen and moves the cursor to the upper left-hand corner of the screen.
|
||||
void clrscr(void) {
|
||||
char* line_text = CONIO_SCREEN_TEXT;
|
||||
char* line_cols = CONIO_SCREEN_COLORS;
|
||||
unsigned int conio_width = VERA_L1_CONFIG_WIDTH[ ( (*VERA_L1_CONFIG) & VERA_L1_CONFIG_WIDTH_MASK ) >> 4 ];
|
||||
unsigned int conio_height = VERA_L1_CONFIG_HEIGHT[ ( (*VERA_L1_CONFIG) & VERA_L1_CONFIG_HEIGHT_MASK ) >> 6 ];
|
||||
char color = ( conio_backcolor << 4 ) | conio_textcolor;
|
||||
@ -103,7 +121,7 @@ void clrscr(void) {
|
||||
// Set address
|
||||
*VERA_ADDRX_L = <ch;
|
||||
*VERA_ADDRX_M = >ch;
|
||||
*VERA_ADDRX_H = VERA_INC_1;
|
||||
*VERA_ADDRX_H = CONIO_SCREEN_BANK | VERA_INC_1;
|
||||
for( char c=0;c<conio_width; c++ ) {
|
||||
// Set data
|
||||
*VERA_DATA0 = ' ';
|
||||
@ -114,12 +132,10 @@ void clrscr(void) {
|
||||
//line_cols[c] = conio_textcolor;
|
||||
}
|
||||
line_text += 256;
|
||||
line_cols += 256;
|
||||
}
|
||||
conio_cursor_x = 0;
|
||||
conio_cursor_y = 0;
|
||||
conio_line_text = CONIO_SCREEN_TEXT;
|
||||
conio_line_color = CONIO_SCREEN_COLORS;
|
||||
}
|
||||
|
||||
// Set the cursor to the specified position
|
||||
@ -130,15 +146,77 @@ void gotoxy(unsigned byte x, unsigned byte y) {
|
||||
conio_cursor_y = y;
|
||||
unsigned int line_offset = (unsigned int)y << 8;
|
||||
conio_line_text = CONIO_SCREEN_TEXT + line_offset;
|
||||
conio_line_color = CONIO_SCREEN_COLORS + line_offset;
|
||||
}
|
||||
|
||||
// Set the layer with which the conio will interact.
|
||||
// - layer: value of 0 or 1.
|
||||
void screenlayer(unsigned byte layer) {
|
||||
if(layer > 1)
|
||||
layer = 1;
|
||||
conio_screen_layer = layer;
|
||||
unsigned byte* addr = conio_screen_layer_mapbase[layer];
|
||||
unsigned int addr_i = *addr << 1;
|
||||
CONIO_SCREEN_BANK = >addr_i;
|
||||
CONIO_SCREEN_TEXT = addr_i << 8;
|
||||
}
|
||||
|
||||
// Set the base of the map layer with which the conio will interact.
|
||||
// - layer: Value of 0 or 1.
|
||||
// - mapbase: Specifies the base address of the tile map.
|
||||
// Note that the register only specifies bits 16:9 of the address,
|
||||
// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes.
|
||||
void setscreenlayermapbase(unsigned byte layer, unsigned byte mapbase) {
|
||||
if(layer > 1)
|
||||
layer = 1;
|
||||
unsigned byte* addr = conio_screen_layer_mapbase[layer];
|
||||
*addr = mapbase;
|
||||
}
|
||||
|
||||
// Get the base of the map layer with which the conio will interact.
|
||||
// - layer: Value of 0 or 1.
|
||||
// - return: Returns the base address of the tile map.
|
||||
// Note that the register is a byte, specifying only bits 16:9 of the address,
|
||||
// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes.
|
||||
unsigned byte getscreenlayermapbase(unsigned byte layer) {
|
||||
if(layer > 1)
|
||||
layer = 1;
|
||||
unsigned byte* mapbase = conio_screen_layer_mapbase[layer];
|
||||
return *mapbase;
|
||||
}
|
||||
|
||||
|
||||
// Enable the layer to be displayed on the screen.
|
||||
// - layer: 0 or 1.
|
||||
void screenlayerenable(unsigned byte layer) {
|
||||
unsigned char enable[2] = { VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE };
|
||||
layer &= $1;
|
||||
*VERA_DC_VIDEO |= enable[layer];
|
||||
}
|
||||
|
||||
// Disable the layer to be displayed on the screen.
|
||||
// - layer: 0 or 1.
|
||||
void screenlayerdisable(unsigned byte layer) {
|
||||
const unsigned byte disable[2] = { VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE };
|
||||
layer &= $1;
|
||||
*VERA_DC_VIDEO &= ~disable[layer];
|
||||
}
|
||||
|
||||
|
||||
// Is the layer displayed on the screen?
|
||||
// - returns: 1 if layer is displayed on the screen, 0 if not.
|
||||
unsigned byte screenlayerenabled(unsigned byte layer) {
|
||||
const unsigned byte enabled[2] = { VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE };
|
||||
layer &= $1;
|
||||
return *VERA_DC_VIDEO & enabled[layer];
|
||||
}
|
||||
|
||||
|
||||
// Return the current screen size.
|
||||
void screensize(unsigned byte* x, unsigned byte* y) {
|
||||
// VERA returns in VERA_DC_HSCALE the value of 128 when 80 columns is used in text mode,
|
||||
// and the value of 64 when 40 columns is used in text mode.
|
||||
// Basically, 40 columns mode in the VERA is a double scan mode.
|
||||
// Same for the VERA_DC_VSCALE mode.
|
||||
// Same for the VERA_DC_VSCALE mode, but then the subdivision is 60 or 30 rows.
|
||||
// I still need to test the other modes, but this will suffice for now for the pure text modes.
|
||||
char hscale = (*VERA_DC_HSCALE) >> 7;
|
||||
*x = 40 << hscale;
|
||||
@ -171,16 +249,18 @@ inline unsigned byte wherey(void) {
|
||||
// Moves the cursor forward. Scrolls the entire screen if needed
|
||||
void cputc(char c) {
|
||||
char color = ( conio_backcolor << 4 ) | conio_textcolor;
|
||||
unsigned byte* conio_addr = CONIO_SCREEN_TEXT;
|
||||
conio_addr += conio_cursor_y*256;
|
||||
conio_addr += conio_cursor_x << 1;
|
||||
if(c=='\n') {
|
||||
cputln();
|
||||
} else {
|
||||
// Select DATA0
|
||||
*VERA_CTRL &= ~VERA_ADDRSEL;
|
||||
// Set address
|
||||
char lx = conio_cursor_x << 1;
|
||||
*VERA_ADDRX_L = <(conio_line_text+lx);
|
||||
*VERA_ADDRX_M = >(conio_line_text+lx);
|
||||
*VERA_ADDRX_H = VERA_INC_1;
|
||||
*VERA_ADDRX_L = <conio_addr;
|
||||
*VERA_ADDRX_M = >conio_addr;
|
||||
*VERA_ADDRX_H = CONIO_SCREEN_BANK | VERA_INC_1;
|
||||
*VERA_DATA0 = c;
|
||||
*VERA_DATA0 = color;
|
||||
|
||||
|
53
src/test/kc/examples/cx16/veralayers.c
Normal file
53
src/test/kc/examples/cx16/veralayers.c
Normal file
@ -0,0 +1,53 @@
|
||||
#include <printf.h>
|
||||
|
||||
void main() {
|
||||
textcolor(BLUE);
|
||||
backcolor(BLACK);
|
||||
clrscr();
|
||||
// This statement sets the base of the display layer 1 at VRAM address 0x0200
|
||||
setscreenlayermapbase(0,0x20);
|
||||
screenlayer(0);
|
||||
clrscr();
|
||||
screenlayer(1);
|
||||
|
||||
gotoxy(0,0);
|
||||
|
||||
gotoxy(0,16);
|
||||
textcolor(RED);
|
||||
unsigned int width = screensizex();
|
||||
unsigned int height = screensizey();
|
||||
printf("vera card width = %u; height = %u\n", width, height);
|
||||
|
||||
printf("dc video = %x\n", *VERA_DC_VIDEO);
|
||||
printf("vera card layer 0 enabled = %x\n", screenlayerenabled(0));
|
||||
printf("vera card mapbase layer 0 = %x\n", getscreenlayermapbase(0));
|
||||
printf("l0 config = %x\n", *VERA_L0_CONFIG);
|
||||
printf("l0 tilebase = %x\n", *VERA_L0_TILEBASE);
|
||||
printf("l0 vscroll l = %x\n", *VERA_L0_HSCROLL_L);
|
||||
printf("l0 vscroll h = %x\n", *VERA_L0_HSCROLL_H);
|
||||
printf("vera card layer 1 enabled = %x\n", screenlayerenabled(1));
|
||||
printf("vera card mapbase layer 1 = %x\n", getscreenlayermapbase(1));
|
||||
printf("l1 config = %x\n", *VERA_L1_CONFIG);
|
||||
printf("l1 tilebase = %x\n", *VERA_L1_TILEBASE);
|
||||
printf("l1 vscroll l = %x\n", *VERA_L1_HSCROLL_L);
|
||||
printf("l1 vscroll h = %x\n", *VERA_L1_HSCROLL_H);
|
||||
|
||||
textcolor(BLUE);
|
||||
//disablescreenlayer1();
|
||||
screenlayerenable(0);
|
||||
printf("dc video = %x\n", *VERA_DC_VIDEO);
|
||||
printf("vera card layer 0 enabled = %x\n", screenlayerenabled(0));
|
||||
printf("vera card layer 1 enabled = %x\n", screenlayerenabled(1));
|
||||
printf("vera card mapbase layer 0 = %x\n", getscreenlayermapbase(0));
|
||||
printf("vera card mapbase layer 1 = %x\n", getscreenlayermapbase(1));
|
||||
printf("vera card mapbase layer 1 = %x\n", getscreenlayermapbase(1));
|
||||
|
||||
screenlayer(0);
|
||||
gotoxy(0,0);
|
||||
textcolor(GREEN);
|
||||
*VERA_L0_CONFIG = *VERA_L1_CONFIG;
|
||||
*VERA_L0_TILEBASE = *VERA_L1_TILEBASE;
|
||||
printf("this is printed on layer 0");
|
||||
|
||||
//screenlayerdisable(0);
|
||||
}
|
Loading…
Reference in New Issue
Block a user