Этюды — Abzac


PeriodicalsAbzac2001 No. 5 → Этюды

Этюды

На этот раз мы сделали подборку различных подпрограммок по работе с адресами в экранной области. Конечно же асам программирования все это давно известно, но вот начинающим наверняка будет полезно.


Процедура расчета адреса в файле атрибутов из координат:

На входе: D-X, E-Y


ATR_1   LD A,E
        ADD A,A
        ADD A,A
        ADD A,A
        LD L,A
        LD H,#16
        ADD HL,HL
        ADD HL,HL
        LD A,L
        OR A
        LD L,A
        RET

Второй вариант:

На входе: H-X, L-Y


ATR_2   LD A,H
        ADD HL,HL
        ADD HL,HL
        ADD HL,HL
        LD H,#16
        ADD HL,HL
        ADD HL,HL
        ADD A,L
        LD L,A
        RET

На выходе обеих процедур в HL будет содержаться адрес файла атрибутов.


Решить противоположную задачу можно так:

На входе: HL-адрес


CRDS    LD A,L
        AND #1F
        ADD HL,HL
        ADD HL,HL
        ADD HL,HL
        LD L,H
        LD H,A
        LD A,L
        AND #1F
        LD L,A
        RET

На выходе: H-X, L-Y.


И еще одна простенькая процедура для расчета адреса в экранном файле из адреса в файле атрибутов:

На входе: HL-адрес в файле атрибутов.


ATR_SCR LD A,H
        ADD A,A
        ADD A,A
        ADD A,A
        AND #7F
        LD H,A
        RET

На выходе: HL-адрес экранного файла.


Процедура для расчета адреса в экранном файле из координат.

На входе: HL-координаты в знакоместах.


SCR_ADR LD A,L
        AND 7
        RRCA
        RRCA
        RRCA
        ADD A,H
        LD H,L
        LD L,A
        LD A,H
        AND #18
        OR #40
        LD H,A
        RET

На выходе: HL-адрес в экранном файле.


Процедура для расчета адреса в экранном файле из координат. Часто применяется при выводе спрайтв.

На входе: D-X (в знакоместах), E-Y (в пикселях).


SCRadr2 LD A,E
        AND 7
        LD C,A
        LD A,E
        AND 192
        RRCA
        RRCA
        RRCA
        OR #40
        OR C
        LD H,A
        LD A,E
        AND 56
        RLCA
        RLCA
        OR D
        LD L,A
        RET

На выходе: HL-адрес в экранном файле.


Процедура для перехода на одну пиксельную линию в экране ниже. Так же, как и предыдущая процедура, часто применяется при выводе спрайтов.

На входе: HL-адрес в экранном файле.


LINE_HL INC     H
        LD      A,H
        AND     7
        RET     NZ
        LD      A,L
        ADD     A,32
        LD      L,A
        RET     C
        LD      A,H
        SUB     8
        LD      H,A
        RET

На выходе: HL-адрес в экранном файле ниже на пиксель от исходного.


При подготовке рубрики были использованы материалы журнала ZX-Ревю и собственные наработки.