Есть у ZX Spectrum адрес процедуры для построения точки - 8933(C=X,B=Y,5C7D=COORDS), но в коде программы добавлено преобразование адресов координат под нужные. Эту несправедливость можно обойти:
device zxspectrum128
ORG #6000
begin
ld bc,0
ld d,160
ylp
ld e,4
xlp:
push bc,de
ld a,b
call $22B0; A=Y,C=X
call $22EC
pop de,bc
inc c
dec e
jr nz,xlp
inc b
dec d
jr nz,ylp
jr $
end
display /d,end-begin
savesna "!void.sna",begin
ORG #6000
begin
ld bc,0
ld d,160
ylp
ld e,4
xlp:
push bc,de
ld a,b
call $22B0; A=Y,C=X
call $22EC
pop de,bc
inc c
dec e
jr nz,xlp
inc b
dec d
jr nz,ylp
jr $
end
display /d,end-begin
savesna "!void.sna",begin
Тут явный перебор, поэтому над кодом надо поработать:
device zxspectrum128
ORG #6000
begin
call draw
jr $
draw
ld hl,0 ;x,dx
ld de,256/3
exx
ld hl,0; Y,dy
ld de,256/4
exx
dlp:
exx
add hl,de
ld a,h
exx
cp 192
ret nc
add hl,de
ret c
ld c,h
push hl,de
exx
push hl,de
exx
call $22B0; A=Y,C=X
call $22EC
exx
pop de,hl
exx
pop de,hl
jr dlp
end
display /d,end-begin
savesna "!void.sna",begin
ORG #6000
begin
call draw
jr $
draw
ld hl,0 ;x,dx
ld de,256/3
exx
ld hl,0; Y,dy
ld de,256/4
exx
dlp:
exx
add hl,de
ld a,h
exx
cp 192
ret nc
add hl,de
ret c
ld c,h
push hl,de
exx
push hl,de
exx
call $22B0; A=Y,C=X
call $22EC
exx
pop de,hl
exx
pop de,hl
jr dlp
end
display /d,end-begin
savesna "!void.sna",begin
А если подумать, то не нужно сохранять HL', DE' на стеке, они не портятся.
Комментарии
Отправить комментарий