nolist

org &2000
run $

di

ld de,pal1
ld bc,&7f00
ld l,4
palloop:
out (c),c:ld a,(de):inc e:out (c),a:inc c
dec l
jr nz,palloop

initBaseSine:
        ld hl,sinedata0
        ld de,sinedata+127
        exx
        ld bc,sinedata+128
        ld de,sinedata+255
        exx

        ld b,64
        loop_sine_make:
            ld a,(hl):inc hl
            ld (de),a:dec e

            exx
            ld l,a:ld a,255:sub l
            ld (bc),a:inc c
            ld (de),a:dec e
            exx

        dec b
        jr nz,loop_sine_make

ld de,sinedata+64
ld bc,64
lddr

copyTileLines:
ld hl,tileGfx1:ld de,tiles:push de:ld bc,8:ldir
pop hl:ld d,h:ld e,l
ld b,8
copyTiles8:
ld c,8
copyTileLines8:
ld a,(hl):ld (de),a:inc e:ld a,l:inc a:and 7:ld l,a
dec c
jr nz,copyTileLines8
inc l
dec b
jr nz,copyTiles8

; CRTC one char line repeat
ld bc,&bc04:out (c),c
xor a:inc b:out (c),a

loop:
copyTileOffs:
ld d,tiles/256
ld ix,tileOffsY+80
ld hl,&C000
ld a,(nframe):and 1:jr nz,tiles80
ld hl,&C050
tiles80:
ld a,(ix):and 56
ld e,a

ld bc,2048
loopi:
ld a,(de):inc e:ld (hl),a:set 3,h
ld a,(de):inc e:ld (hl),a:add hl,bc
ld a,h:or a
jr nz,loopi
ld bc,-16384+1:add hl,bc

dec ixl
jr nz,tiles80

moveTileOffs:
ld hl,tileOffsY+1
ld b,80

ld d,sinedata/256
ld a,(nframe):add a:ld e,a
tilesMove80:
ld a,(de)
ld (hl),a:inc l
ld a,e:add 8:ld e,a
dec b
jr nz,tilesMove80

ld hl,nframe:inc (hl)
jr loop

tileGfx1:
db 160,90,175,255,255,175,90,160


sinedata0:
db 128,131,134,137,140,143,146,149,152,155,158,162,165,167,170,173
db 176,179,182,185,188,190,193,196,198,201,203,206,208,211,213,215
db 218,220,222,224,226,228,230,232,234,235,237,238,240,241,243,244
db 245,246,248,249,250,250,251,252,253,253,254,254,254,255,255,255

pal1:
db &44,&5d,&5f,&5b

list
aend:
nolist

nframe:


org &1800
tiles:

org &1900
tileOffsY:

org &1a00
sinedata: