Odyssey Magazine
#02
14 июля 1997 |
|
Почта - Печать строки 32-х символьным шрифтом.
Печать строки 32-х символьным шрифтом. Нижний байт знакогенератора должен быть пустой. Процедура печати символа непосредственно интегрирована в печать строки для получе- ния максимальной скорости. Использование печати символа какой-либо точкой входа в теле процедуры печати строки достаточно затруднительно. hl-адрес начала строки b - длина строки =32 всегда. Прекращает печать по достижении #0D или предельной длины строки. c -позиция Y. Позиция X жестко определена =0,хотя можно без труда при чтении адреса из таблицы прибавить необходимый X. После такой моди- фикации становится возможной печать оди- ночного символа с любыми координатами, по- лагая b=1. Предложенное не было сделано мною, т.к. процедура разрабатывалась исключительно для печати с 0-й позиции по X. PRLINE LD HL,LINE PUSH HL LD C,10 LD B,32 LD A,C ;инициализация LD H,0 ;адреса.Адрес ADD A,A ;в экране чита- LD L,A ;ется один раз LD DE,TABST ;для всех симво- ADD HL,DE ;лов строки LD E,(HL) ;<здесь возможна INC HL ;<доработка LD D,(HL) ;адрес (0,Y)-в BC POP HL SSM1 LD A,(HL) ;чтение строки CP #0D ;выход,если конец RET Z PUSH DE ;в de-экранный EXX ;адрес POP BC PR LD L,A ;расчет координат LD H,0 ;символа в наборе LD DE,FONTST-256 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,DE ;адрес символа DEFS 6,#7E,#23,#02,#04 ; LD A,(HL) ; INC HL Блок повторен RAS-1 ; LD (BC),A раз ; INC B / LD A,(HL) LD (BC),A EXX INC HL ;приб. указатель INC E ;коорд x=x+1 DJNZ SSM1 RET ;вых.,если строка ;длиннее 32 симв. FONTST EQU 15360+256+1 ;чтобы не загружать знакогенератор с ;пустым последним байтом, он формируется ;смещением указателя на 1 LINE DEFM ' PROBE OF 32 SYMBOLS PRIN TING. ' ;пробная строка ;таблица для скроллингов и печати TABST DEFB #00,#40,#20,#40,#40,#40,#60, #40,#80,#40,#A0,#40,#C0,#40, #E0,#40 DEFB #00,#48,#20,#48,#40,#48,#60, #48,#80,#48,#A0,#48,#C0,#48, #E0,#48 DEFB #00,#50,#20,#50,#40,#50,#60, #50,#80,#50,#A0,#50,#C0,#50, #E0,#50 TABEN EQU $-1 Печать 64 символа в строке нисколько не более сложна, чем печать 32 символа. Быст- рота печати сильно зависит от того, как хранится знакогенератор. Хуже всего дело обстоит при использовании шрифта типа "TASM", где в одном знакоместе хранится 2 символа. например: 12 34 56 78 90 ... AB CD EF .... В наиболее неудачном случае приходится ро- тировать байт 4 раза и накладывать маску (зависит от способа ротации). Более быстрым является дублирование: 11 22 33 44 55 66 77 88 99 00 ... В этом случае знакогенератор менее компак- тен, хотя и не превосходит размерами 32-х символьный. Печать сводится к определению типа накладываемой маски, т. е. фактически это 32-х симв. печать с затиранием одного или другого полубайта. Какой именно зати- рать, определяется из четности X-координа- ты нециклическим сдвигом в флаг C. В ре- гистре остается координата для 32-х сим- вольной печати. Это намного более удобно по алгоритму, чем для знакогенеранора типа "TASM". Вариант с таким модернизированным фонтом один из самых оптимальных в приме- нении, но не по скорости. Наиболее скоростным является способ печати с применением 2-х фонтов. От вышеприведен- ного этот метод отличает только отсутствие необходимости накладывать на байты символа маску, т.к. там все и без того уже чисто. Т.е. процедура печати 64 символа в строке может быть сведена к обычной печати 32-сомвола, но с переставлением указателя на фонт или применения двух идентичных процедур с разными указателями и выбор од- ной из процедур по мере надобности. Эту процедуру я и прилагаю в формате TASM 3.0. Приводить эту программу в тексте нет необходимости, так как она ничем осо- бенно не отличается от печати 32-симв. Вообще говоря, к этому тексту я постараюсь приложить все исходники с надеждой, что по дороге они не потеряются.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября