Со скуки взялся за код, вот что вышло. Как видно, с цветами нужно поработать.
device zxspectrum128
; ORG #5800
; db 0,1,9,1+3*8,3*9,5+3*8,6*9,4
ORG #6000
begin
;draw grid
ld hl,$4000
lp1:
ld a,h
rra
sbc a,a
xor $55
lp2:
ld (hl),a
inc l
jr nz,lp2
inc h
ld a,h
cp $58
jr nz,lp1
; generate sintab
exx
ld bc,$8000
exx
ld hl, 0
ld de,hl
gens:
ld a, h
cp 64/4
ex de, hl
ld bc, 8
jr c, bra1
and a
sbc hl, bc
jr bra2
bra1:
add hl, bc
bra2:
ex de, hl
add hl, de
ld a,h
exx
ld (bc),a
inc c
exx
jr nz,gens
;copy color tab
ld de,#8100
ld a,64
lp3: ld hl,col_b
ld bc,col_e-col_b
ldir
dec a
jr nz,lp3
; plasma go!
plas:
v1: ld bc,0
inc c
dec b
ld (v1+1),bc
ld hl,$01FF
ld d,$82
call calc
v2: ld bc,0
dec c,c
inc b
ld (v2+1),bc
ld hl,$0201
ld d,$83
call calc
;draw on screen
ei:halt
ld hl,$8200
exx
ld h,$81
ld bc,$5800
exx
pllp1:
ld de,$8300
pllp2:
ld a,(de)
inc e
add a,(hl)
exx
; srl a
ld l,a
ld a,(hl)
ld (bc),a
inc bc
ld a,c
and 31
exx
jr nz,pllp2
inc hl
exx
ld a,b
exx
cp $5b
jr nz,pllp1
jp plas
calc:;B.C=start values,H.L=deltas
ld e,0
ld a,h,(cv1+1),a
ld a,l,(cv2+1),a
ld h,$80
clp:
ld l,c,a,(hl)
ld l,b
add a,(hl)
ld (de),a
ld a,c
cv1: add a,0
ld c,a
ld a,b
cv2: add a,0
ld b,a
inc e
bit 5,e
jr z,clp
ret
col_b:
; db 0,1,9,1+3*8,3*9,5+3*8,6*9,4
db 0,0
db 1,1
db 9,9
db 25,25
db 27,27
db 29,29
db 54,54
db 4,4
col_e:
end
display /d,end-begin
savesna "!void.sna",begin
; ORG #5800
; db 0,1,9,1+3*8,3*9,5+3*8,6*9,4
ORG #6000
begin
;draw grid
ld hl,$4000
lp1:
ld a,h
rra
sbc a,a
xor $55
lp2:
ld (hl),a
inc l
jr nz,lp2
inc h
ld a,h
cp $58
jr nz,lp1
; generate sintab
exx
ld bc,$8000
exx
ld hl, 0
ld de,hl
gens:
ld a, h
cp 64/4
ex de, hl
ld bc, 8
jr c, bra1
and a
sbc hl, bc
jr bra2
bra1:
add hl, bc
bra2:
ex de, hl
add hl, de
ld a,h
exx
ld (bc),a
inc c
exx
jr nz,gens
;copy color tab
ld de,#8100
ld a,64
lp3: ld hl,col_b
ld bc,col_e-col_b
ldir
dec a
jr nz,lp3
; plasma go!
plas:
v1: ld bc,0
inc c
dec b
ld (v1+1),bc
ld hl,$01FF
ld d,$82
call calc
v2: ld bc,0
dec c,c
inc b
ld (v2+1),bc
ld hl,$0201
ld d,$83
call calc
;draw on screen
ei:halt
ld hl,$8200
exx
ld h,$81
ld bc,$5800
exx
pllp1:
ld de,$8300
pllp2:
ld a,(de)
inc e
add a,(hl)
exx
; srl a
ld l,a
ld a,(hl)
ld (bc),a
inc bc
ld a,c
and 31
exx
jr nz,pllp2
inc hl
exx
ld a,b
exx
cp $5b
jr nz,pllp1
jp plas
calc:;B.C=start values,H.L=deltas
ld e,0
ld a,h,(cv1+1),a
ld a,l,(cv2+1),a
ld h,$80
clp:
ld l,c,a,(hl)
ld l,b
add a,(hl)
ld (de),a
ld a,c
cv1: add a,0
ld c,a
ld a,b
cv2: add a,0
ld b,a
inc e
bit 5,e
jr z,clp
ret
col_b:
; db 0,1,9,1+3*8,3*9,5+3*8,6*9,4
db 0,0
db 1,1
db 9,9
db 25,25
db 27,27
db 29,29
db 54,54
db 4,4
col_e:
end
display /d,end-begin
savesna "!void.sna",begin
Комментарии
Отправить комментарий