Модификация шрифта — Abzac


PeriodicalsAbzac2005 No. 25 → Модификация шрифта

Модификация шрифта

Предлагаем вашему вниманию, несколько интересных процедур, которые <превращают> стандартный шрифт из ПЗУ, в шрифт, пригодный для печати 64-х символов в строке (один символ - 4х8 пикселей).

Вообще-то, все эти процедуры были написаны специально для наших демок 512 байт, и работали только при определенных условиях.

Но во время подготовки данной статьи, мы решили доработать их и сделать более универсальными.

font    EQU #7000;адрес 
    ;размещения 
    ;шрифта (2048 байт)
    ORG #6000
    LD  HL,font+32
    LD  DE,#3d00
cy  LD  BC,#300
    LD  A,(DE)
    RLA
cy2 RLA
    JR  NC,cy3
    RL  C
    RLA
    JR  cy4
cy3 RLA
    RL  C
cy4 DJNZ    cy2
    LD  (HL),C
    INC H
    INC DE
    LD  A,H
    CP  font/256+8
    JR  NZ,cy
    LD  H,font/256
    INC L
    JR  NZ,cy

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

    LD  HL,ftab
    LD  DE,font+512+32
dorf    LD  B,(HL)
    INC HL
    LD  C,(HL)
    INC HL
    INC DE
    DJNZ    $-1
    LD  A,(DE)
    XOR C
    LD  (DE),A
    LD  A,(HL)
    OR  A
    JR  NZ,dorf

Посмотреть получившийся шрифт (см. рисунок внизу страницы), можно перебросив его на экран, LDIR'ом. HL, font, DE, #4000, BC, 2048, LDIR.
И напоследок, третья процедура, при помощи которой, вы сможете напечатать текст на экране (HL, адрес экрана (#4000), DE, адрес текста, CALL wyw):

wyw LD  A,(DE)
    INC DE
    OR  A
    RET Z
    CP  32
    JR  NC,$+4
    LD  A,32
    LD  C,A
    LD  A,(DE)
    INC DE
    PUSH    AF,HL,DE
    CP  32
    JR  NC,$+4
    LD  A,32
    LD  E,A
    LD  B,font/256
    LD  D,B
    LD  A,(BC)
    LD  (HL),A
    LD  A,(DE)
    RLD
    INC H
    INC D
    INC B
    LD  A,B
    CP  font/256+8
    JR  NZ,$-11
    POP DE,HL,AF
    INC L
    OR  A
    JR  NZ,wyw
    RET

Ниже находится таблица для второй процедуры. Вы можете поэкспериментировать с BIN числами, изменяя их, вы измените вид некоторых созданных символов.

ftab    DB  5,%00000100
    DB  1,%00000011
    DB  4,%00000110
    DB  20,%00000110
    DB  15,%00000010
    DB  30,%00000011
    DB  8,%00000101
    DB  1,%00000001
    DB  206,%00000001
    DB  23,%00000011
    DB  13,%00000101
    DB  192,%00000010
    DB  22,%00000110
    DB  22,%00000001
    DB  211,%00000001
    DB  7,%00000110
    DB  250,%00000100
    DB  4,%00000110
    DB  20,%00000110
    DB  49,%00000101,0

Весь код занимает 145 байт  (все три процедуры + таблица).

https://zxpress.ru/images/periodicals/articles/original/108.gif

Алексей Червов, Владислав Ювженко,
г. Красноярск