Печать текста 64 символа в строке
Материал из SpeccyWiki
Версия от 12:40, 7 августа 2012; Andrew771 (обсуждение | вклад)
Печать текста 64 символа в строке - процедура для печати текста шрифтом 4х8 пикселей на экране ZX Spectrum, таким образом умещается до 64 символа в одной строке экрана. Процедура часто используется в различных просмотрщиках, редакторах текста и программного кода, играх. В данной реализации процедуры шрифт задается 6-байтными последовательностями для каждого символа (2-7 строки пикселей). 1 и 8 строки пикселей остаются пустыми. Каждая последовательность байтов для символа содержит одинаковые начертания символа в первой половине и во второй половине знакоместа экрана. Процедура автоматически определяет, в какой половине знакоместа выводить символ.
; пример вызова процедуры
ld hl,string_01 ; строка string_01
ld b,5 ; строка экрана
ld c,8 ; столбец экрана
call print64
ret
string_01 defb 12,s__p,s__r,s__i,s__v,s__e,s__t,szpt,s_sp,s__m,s__i,s__r,svsk ; строка "ПРИВЕТ, МИР!"
; процедура печати строки текста 64 символа в строке шрифтом 4х8 без атрибутов
; входные параметры: hl=адрес текста строки с количеством и кодами символов, b=строка экрана, c=столбец экрана
; выходные параметры: нет
print64 ld a,b
ld d,a
rrca
rrca
rrca
and a,224
add a,c
ld e,a
ld a,d
and 24
or 64
ld d,a
ld a,(hl)
print64_3 push af
inc hl
push hl
ld l,(hl)
ld h,0
add hl,hl
ld c,l
ld b,h
add hl,hl
add hl,bc
ld bc,font64
add hl,bc
push de
ld b,6
print64_1 inc d
ld a,(hl)
and #f0
ld (de),a
inc hl
djnz print64_1
pop de
pop hl
pop af
dec a
ret z
push af
inc hl
push hl
ld l,(hl)
ld h,0
add hl,hl
ld c,l
ld b,h
add hl,hl
add hl,bc
ld bc,font64
add hl,bc
push de
ld b,6
print64_2 inc d
ld a,(hl)
and #0f
ld c,a
ld a,(de)
or c
ld (de),a
inc hl
djnz print64_2
pop de
pop hl
pop af
dec a
inc de
jp nz,print64_3
ret
; коды символов для шрифта 4х8
s__0 equ 0
s__1 equ 1
s__2 equ 2
s__3 equ 3
s__4 equ 4
s__5 equ 5
s__6 equ 6
s__7 equ 7
s__8 equ 8
s__9 equ 9
s_sp equ 10
s__a equ 11
s__b equ 12
...
; шрифт 4х8
font64
defb #44,#AA,#AA,#AA,#AA,#44 ; 0
defb #44,#CC,#44,#44,#44,#EE ; 1
defb #44,#AA,#22,#44,#88,#EE ; 2
defb #EE,#22,#44,#22,#22,#CC ; 3
defb #22,#66,#AA,#EE,#22,#22 ; 4
defb #EE,#88,#CC,#22,#22,#CC ; 5
defb #66,#88,#CC,#AA,#AA,#44 ; 6
defb #EE,#22,#44,#88,#88,#88 ; 7
defb #44,#AA,#44,#AA,#AA,#44 ; 8
defb #44,#AA,#AA,#66,#22,#CC ; 9
defb #00,#00,#00,#00,#00,#00 ; space
defb #66,#AA,#AA,#EE,#AA,#AA ; А
defb #EE,#88,#CC,#AA,#AA,#CC ; Б
...