© Иван Рощин, Москва
| ZXNet | : 500:95/462.53 |
| : bestview@mtu-net.ru | |
| WWW | : http://www.ivr.da.ru |
(«Радиолюбитель. Ваш
компьютер» 10/2000, под псевдонимом BV_Creator)
(Первоначальная версия в ZX News #50)
Дата последнего редактирования: 4.05.2003.
Иногда возникает необходимость распечатать содержимое монохромного спектрумовского экрана в увеличенном виде. Это очень просто сделать с помощью моей процедуры, которая перекодирует экранный файл в текстовый псевдографический файл, а его уже легко можно распечатать на любом принтере.
При перекодировании каждым двум находящимся друг под другом пикселам
исходного изображения ставится в соответствие один из четырёх символов текста:
#20 (пробел) когда оба пиксела выключены, #DC
)
)
)
После печати полученного таким образом текстового файла у меня получалось изображение формата A2. Изображение можно увеличивать или уменьшать, изменяя размер шрифта.
Кстати, обратите внимание: пикселы, которые были белыми на экране, будут чёрными на бумаге, и наоборот, то есть изображение получится инвертированным. Если это нежелательно, достаточно изменить порядок символов в преобразующей процедуре (метка DECODE) на обратный.
Если печать производится на принтере с узкой кареткой, и изображение не умещается по ширине листа бумаги, его легко можно порезать на куски в любом текстовом редакторе и печатать по частям.
Видно, что печатать изображение в текстовом формате может быть в некоторых
случаях гораздо удобнее, чем в графическом, особенно если печать производится
не на
Перед запуском процедуры с адреса #4000 должна располагаться исходная
картинка, а после запуска с адреса #8000 будет сформирован текст длиной #6100
байтов. Этот текст нужно записать на диск, а потом (если печать будет
производиться на PC) переписать на дискету
Между прочим, эту процедуру можно использовать не только в случаях, когда нужно напечатать картинку. Не секрет, что в текстовых файлах иногда используют псевдографические картинки (обычно создаваемые в текстовом редакторе). Так вот, теперь вы можете нарисовать нужную картинку (разумеется, небольшого размера) в графическом редакторе, со всеми удобствами, а затем преобразовать её в текстовый формат.
Длина процедуры всего 103 байта, и её можно ещё уменьшить. Я нарочно не стал этого делать, чтобы не затруднить понимание логики работы процедуры.
Вы можете попробовать улучшить эту процедуру, исходя из своих потребностей.
Например, можно сделать так, чтобы преобразовывался не весь экран, а лишь его
часть с заданными координатами; можно с помощью других псевдографических
символов
,
,
)
Текст процедуры преобразования:
DESTIN EQU #8000
LD DE,#00BF ;Координаты.
LD HL,DESTIN ;Адрес txt.
LD B,128
LP_MAIN PUSH BC ;Главный цикл.
LP_2 CALL GET_P
ADD A,A
LD B,A
INC D
CALL GET_P
DEC D
ADD A,B
EXX
LD HL,DECODE
LD D,0
LD E,A
ADD HL,DE
LD A,(HL)
EXX
LD (HL),A
INC HL
DEC E
LD A,E
CP -1
JR NZ,LP_2
INC D
INC D
LD E,191
LD (HL),13 ;Код
INC HL ;перевода
LD (HL),10 ;строки.
INC HL
POP BC
DJNZ LP_MAIN
RET
;---------------------------------------
DECODE DB #20,#DC,#DF,#DB ;Символы.
;---------------------------------------
;Процедура GET_P - узнать цвет точки.
;
;Вход: DE - координаты точки (X,Y).
;Выход: A - цвет (0 или 1).
;
;Значения других регистров не меняются.
GET_P PUSH HL
PUSH DE
PUSH BC
LD A,E
AND A
RRA
SCF
RRA
AND A
RRA
XOR E
AND #F8
XOR E
LD H,A
LD A,D
RLCA
RLCA
RLCA
XOR E
AND #C7
XOR E
RLCA
RLCA
LD L,A
LD A,D
AND 7
LD B,A
INC B
LD A,1
LOOP RRCA
DJNZ LOOP
LD B,(HL)
AND B
POP BC
POP DE
POP HL
CP 0
RET Z
LD A,1
RET