Расчет адреса символов по координатам для экрана ZX Spectrum

 Иногда для меня забавно заглянуть в папку проектов и найти старое и забытое. Исходник найден где-то на форуме:

device zxspectrum128
        ORG #6000
begin
ld b,0
ylp: ld c,0
xlp:
ld a,b
or 64
and %11111000
ld h,a
ld a,b
and 7
rrca
rrca
rrca
or c
ld l,a
chlp: ld a,h
xor l
ld (hl),a
inc h
ld a,h
and 7
jr nz,chlp
inc c
bit 5,c
jr z,xlp
inc b
ld a,b
cp 24
jr nz,ylp
jr $
end
display /d,end-begin
savesna "!void.sna",begin
;1000 FOR b=0 TO 21: FOR c=0 TO 31
;1001 LET a=64:            REM  ld   a,%01000000     ;calc char address in display file
;1002 LET a=a+b:           REM  or   b               ;B =row
;1003 LET a=INT (a/8)*8:   REM  and  %11111000
;1004 LET h=a:             REM  ld   h,a             ;H =010ssppp
;1005 LET a=b:             REM  ld   a,b
;1006 LET a=a-INT (a/8)*8: REM  and  %00000111
;1007                     REM { rrca
;1008 LET a=a*32:         REM { rrca
;1009                     REM { rrca
;1010 LET a=a+c:           REM  or   c               ;C =column
;1011 LET l=a:             REM  ld   l,a             ;L =rrrccccc
;1012 LET hl=h*256+l: POKE hl,255
;1013 NEXT c: NEXT b: STOP

Дополнение Забыл про одну процедуру, которая отличается(Venom strikes back):

; HL adress from DE
sub_999E:
ld hl, 4000h
ld a, d
and 18h
or h
ld h, a
ld a, d
and 7
ld d, a
srl d
rr l
srl d
rr l
srl d
rr l
add hl, de
ret
Дополнение 17-07-2023. Покопался в дизассемблере ROM:

Разобраться с параметрами несложно.

Комментарии