..............	; Печатаемый символ в регистре A,
	CP	0	; сравниваем его с кодом предыдущего
LAST_S	EQU	$-1	; символа (хранится в самой команде).
	JR	Z,GO_PRN	; Если совпали, выводим содержимое
			; буфера, иначе запоминаем 
	LD	(LAST_S),A	; код символа и формируем его 
	...............	; изображение в буфере.
GO_PRN	...............	; Вывод на экран содержимого буфера.
Еще один способ уменьшения размера шрифта, который может использоваться совместно с предыдущим - удаление из него неиспользуемых символов. Для этого можно воспользоваться такой процедурой:
SOURCE	EQU	#8000	; Адрес исходного шрифта (256 символов).
DESTINY	EQU	#C000	; Адрес преобразованного шрифта.
HIGH	EQU	8	; Сколько байт занимает один символ.

	ORG	#6000

	LD	IX,TAB_DEL
	LD	HL,SOURCE
	LD	DE,DESTINY
	XOR	A			; Текущий символ.

NEXT_S	PUSH	AF
	CALL	CHECK
	LD	BC,HIGH
	JR	NZ,NO_LDIR
	LDIR				; Обнуление BC.
NO_LDIR	ADD	HL,BC
	POP	AF
	INC	A
	JR	NZ,NEXT_S

	RET
; Таблица удаляемых символов представлена в виде битового 
; массива размером в 256 бит (32 байта). Если элемент массива ; равен единице, соответствующий символ будет удален из шрифта.

TAB_DEL	DB %00000000,%00000000
	DB %00000000,%00000000
	DB %00000000,%00000000
	DB %00000000,%00000000
	DB %00000000,%00000000
	DB %00000000,%00000000
	DB %00000000,%00000000
	DB %00000000,%00000000
	DB %00000000,%00000000
	DB %00000000,%00000000
	DB %00000000,%00000000
	DB %00000000,%00000000
	DB %00000000,%00000000
	DB %00000000,%00000000
	DB %00000000,%00000000
	DB %00000000,%00000000

; Процедура CHECK предназначена для работы с битовыми
; массивами длиной до 256 элементов.
;
; Вход: IX - адрес массива;
;       A - номер элемента.
; Выход: если соотв. элемент массива равен 0, то флаг Z установлен.
;       Значение A изменено.
;
; Если заменить команду BIT на SET или RES, можно не только
; проверять значения элементов массива, но и изменять их.

CHECK	PUSH	AF		; Сохранили номер элемента.

; Работа с элементом массива происходит с помощью 
; команды BIT N,(IX+S), которая перед этим формируется в памяти. ; Значения N и S вычисляются по формуле: S = старшие 5 битов номера элемента ; (номер байта в массиве, где находится нужный элемент),
; N = 8 - младшие 3 бита номера элемента (номер бита в байте массива; ; элементы располагаются в байте слева направо, а биты нумеруются наоборот).
; Команда занимает в памяти 4 байта и выглядит так:
;
; #DD #CB S %01NNN110
; 
; Здесь:
; #DD и #CB - префиксы
; S - смещение
; %01 - для BIT, %11 - для SET, %10 - для RES
; NNN - номер бита
; 110 - общая часть для BIT, SET, RES
;
	AND	7
	RLCA
	RLCA
	RLCA
	XOR	%01111110	; %11111110 для SET, %10111110 для RES
	LD	(CHECK_1+3),A
	POP	AF
	RRCA
	RRCA
	RRCA
	AND	%00011111
	LD	(CHECK_1+2),A
CHECK_1	BIT	0,(IX)

	RET
