tVIstec 20 by Orb [web]
//*****************************************************************************
//* tVIsteC 20
//*
//* 256 byte twister for vc 20 with sound
//* assembles fine with kickassembler
//*
//* ultra^orb 20131115
//*
//* (c) 2013 orb
//*****************************************************************************
.pc = $1001 "Basic Program"
:BasicUpstart($100d)
.pc =$100d "Program"
.var tmp1 = $40
.var scrpos = $40
.var tmp2 = $44
.var tmp3 = $42
.var adr1 = $46
.var tmp4 = $48
.var tmp5 = $49
.var tmp6 = $4a
.var incy = $4b
.var off1 = 108
.var off2 = 105
.var colorram = $9600
.var delbuf1 = $1200
.var delbuf2 = $1300
.var delbuf3 = $1400
.var sinpostab = $1500
.var sinbittab = $1600
.var sintab = $1700
.var screenmem = $0200
.var charmem = $1800
// use bittabe from the char rom... saves 8 bytes
.var bittab = $8268
start:
sei
// init memory
// clears $1200-$8000
// inits color ram
// and fills the screen memory with the correct chars
lda #$12
sta adr1+1
ldy #$00
tya
initmem:
sta colorram,y
sta (adr1),y
pha
tya
sta screenmem,y
pla
dey
bne initmem
inc adr1+1
bpl initmem
iny
sty tmp1+1
// creates the 3 sin tables
// a normal sintable
// a bit set sintable
// and a position sintable
// that speeds up drawing alot
ldx #128
stx $900f
createsin:
// tmp1 = tmp1 - 4
// tmp2 = tmp2 + tmp1
lda tmp1
sbc #4
sta tmp1
bcs *+4
dec tmp1+1
adc tmp2
sta tmp2
lda tmp2+1
adc tmp1+1
sta tmp2+1
// save sine value
jsr storesin
txa
pha
ora #$80
tax
// create neg sine value
lda tmp2+1
eor #$ff
jsr storesin
pla
tax
dex
bne createsin
mainloop:
// setup screen
ldx #6
setup:
lda vdat-1,x
sta $9000-1,x
dex
bne setup
// setup draw loop
stx scrpos
ldx #32
stx tmp2+1
ldx #>charmem
stx scrpos+1
lda incy
adc #3
sta incy
drawer2:
lda #08
sta tmp2
drawer:
//clear old stuff
ldx tmp4
lda #0
ldy delbuf1,x
sta (scrpos),y
ldy delbuf2,x
sta (scrpos),y
ldy delbuf3,x
sta (scrpos),y
lda incy
adc sintab,x
sta $900c
sta tmp5
// draw the 3 lines
jsr plot
sta delbuf1,x
sta $900e
lda tmp5
adc #85
jsr plot
sta delbuf2,x
lda tmp5
adc #170
jsr plot
sta delbuf3,x
inc scrpos //next line
inc tmp4
dec incy
dec tmp2
bne drawer //loop 8 lines
lda scrpos //next char block
clc
adc #64-8
sta scrpos
bcc *+4
inc scrpos+1
dec tmp2+1 //loop 32 lines
bne drawer2
beq mainloop
storesin:
sta sintab-1,x
clc
adc #$20
pha
and #$7
tay
lda bittab,y
sta sinbittab-1,x
pla
and #$f8
sta sinpostab-1,x
rts
plot:
tax
sec
sbc #off1
cmp #256-off2-off1
bcc nodraw
lda sintab,x
ldy sinpostab,x
lda sinbittab,x
sta (scrpos),y
nodraw:
tya
ldx tmp4
rts
vdat:
.byte $1a,$17,$88,32<<1,$00,$8e
end:
.print end-start
.print end-$1001+2[ back to the prod ]
