nolist
VRAMLINES_C000 equ &4200
SINEDATA equ &8000
AMP equ 14
BASE equ 128
org &4000
run $
nframe:
xor a
call &bc0e
di
ld h,BASE
ld l,0 ; Optional, works well with other values
ld iyh,BASE*2 and 255 ; For symmetry
ld de,AMP*&3f + AMP/2
ld bc,-AMP
ld ix,SINEDATA + &80
singen
ld a,iyh
sub h
ld (ix+0),a
ld (ix-&80),h
add hl,de
ex de,hl
add hl,bc
ex de,hl
inc ixl
jr nz,singen
; -- Done --
ld de,&C008+640: ld hl,VRAMLINES_C000
;call generate_vram80
ld c,80
ld a,25
rows25:
ex af,af'
push de
ld b,8
lines8:
ld (hl),e:inc hl:ld (hl),d:inc hl
ld a,d:add 8:ld d,a
dec b
jr nz,lines8
pop de
ex de,hl:add hl,bc:ex de,hl
ex af,af'
dec a
jr nz,rows25
loop:
ld hl,nframe
inc (hl)
ld b,(hl)
ld hl,VRAMLINES_C000
ld ixl,96
pixY:
ld e,(hl):inc hl:ld d,(hl):inc hl
push hl
ld c,64
pixX:
ld h,SINEDATA/256
ld a,ixl:ld l,a:ld a,(hl)
ld l,c:ld l,(hl):add l:add b
ld l,a
srl l
ld a,b
cp 128
jr c,you
srl l
you:
ld a,l
and a,15
ld (de),a:inc de
dec c
jr nz,pixX
pop hl
dec ixl
jr nz,pixY
jr loop
list
aend:
nolist