Печать текста 64 символа в строке

Материал из SpeccyWiki
Перейти к: навигация, поиск

Печать текста 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		; Б
		...