Драйвер последовательного
интерфейса для ZX-WORD
---------------------------------
(С) Плахотниченко А.С.,
Стадник С.В.,г.Туапсе,1995.
----------------------------------
Драйвер предназначен для рабо-
ты редактора "ZX-WORD" с принте-
ром ROBOTRON CM6329.01M или
CM6329.02M, подключенного через
интерфейс RS232C(V24).
CM6329.01M - очень хороший
принтер, но с одним недостатком:
он поддерживает кодировку КОИ-7,
из-за чего становится проблемой
печать текстовых файлов в альтер-
нативной или основной кодировке.
Еще одна проблема заключается в
том, что в большинстве случаев он
поставляется с интерфейсом V24
(RS232C), а большинство редакто-
ров для SPECCY рассчитаны на ра-
боту с интерфейсом CENTRONICS.
Программа состоит из двух час-
тей:
- первая часть (строки 10-900)
выполняет перекодирование русских
букв из альтернативной (основной)
кодироики в КОИ-7, а также перек-
лючает русскую и латинскую табли-
цы в принтере в зависимости от
кода символа и текущей таблицы;
- вторая часть (строки 910 -
1280) представляет собой процеду-
ру вывода байта, содержащегося в
аккумуляторе, на принтер. Рассчи-
тана на простой интерфейс RS232C,
подключенный к порту #FB (номер
порта можно легко изменить). Порт
#FB - стандартный порт компьютера
"ТАГАНРОГ-128". Скорость передачи
- 1200 бод по следующему протоко-
лу: один стартовый бит (1), затем
8 бит данных и один стоповый бит
(0).
---------------------------------------------------------------------
10 ORG 23296 ;буфер принтера
20 DEFB 0,0,0 ;
30 VHOD CP 127 ;точка входа процедуры печати
40 JR C,MM1 ;если код>127 и <176, то
50 CP 176 ;прибавить 48 (преобразование
60 JR NC,MM1 ;основной кодировки в альтернативную
70 ADD A,48 ;
80 MM1 CP 128 ;если код>=128, то М2 (русская буква)
90 JR NC,M2 ;
100 PUSH AF ;
110 LD A,(NTAB) ;в А-код таблицы(0-лат.,1-рус.)
120 AND A ;
130 JR Z,M1 ;если не 0, то установка латинской
140 CALL SETIT ;таблицы (SETIT)
150 M1 POP AF ;
160 JR PREXIT ;печать и выход
170 M2 CP 176 ;если код<176, то
180 JR C,PREXIT ;печать и выход
190 CP 241 ;если код>241, то
200 JR NC,PREXIT ;печать и выход
210 PUSH AF ;начало обработки русского символа
220 LD A,(NTAB) ;в А-код таблицы
230 AND A ;если 0, то установка русской
240 JR NZ,M3 ;таблицы (SETRT)
250 CALL SETRT ;
260 M3 POP AF ;
270 CP 202 ;нет в ROBOTRONе большого
280 JR NZ,M4 ;твердого знака
290 LD A,#27 ;заменяем на апостроф
300 JR PREXIT ;
310 M4 CP 240 ;меняем Е на Е
320 JR NZ,M5 ;
330 LD A,#65 ;
340 JR PREXIT ;
350 M5 CP 241 ;меняем е на е
360 JR NZ,M6 ;
370 LD A,#45 ;
380 JR PREXIT ;
390 M6 SUB 176 ;вычислить сдвиг от начала
400 PUSH AF ;таблицы перекодировки
410 XOR A ;
420 LD (SHIFT),A ;обнулить сдвиг
430 POP AF ;
440 CP 32 ;если сдвиг<32, то обход
450 JR C,M7 ;иначе-вычитаем 32
460 SUB 32 ;(обработка маленьких букв)
470 PUSH AF ;
480 LD A,#20 ;признак маленьких букв
490 LD (SHIFT),A ;
500 POP AF ;
510 M7 PUSH HL ;
520 LD HL,ADRTAB ;в HL-адрес таблицы перекодировки
530 ADD A,L ;складываем сдвиг(в А) и начало
540 LD L,A ;таблицы
550 JR NC,M8 ;
560 INC H ;
570 M8 LD A,(HL) ;в А-готовый для печати символ
580 LD HL,SHIFT ;в HL-адрес сдвига
590 SUB (HL) ;вычесть из кода сдвиг
600 POP HL ;(0-большие буквы,32-маленькие)
610 PREXIT CALL BEGIN ;печать символа
620 RET ;выход
630 SETIT LD A,27 ;процедура переключения принтера
640 CALL PREXIT ;на латинскую таблицу(КОИ-7 Н0)
650 LD A,#52 ;
660 CALL PREXIT ;
670 XOR A ;
680 CALL PREXIT ;
690 XOR A ;заносим в NTAB 0-признак
700 LD (NTAB),A ;ыатинской таблицы
710 RET ;
720 SETRT LD A,27 ;процедура переключкния принтера
730 CALL PREXIT ;на русскую твблицу(КОИ-7 Н1)
740 LD A,#52 ;
750 CALL PREXIT ;
760 LD A,1 ;
770 CALL PREXIT ;
780 LD A,1 ;1-признак русской таблицы
790 LD (NTAB),A ;
800 RET ;
810 NTAB DEFB 0 ;номер таблицы(0-лат.,1-рус.)
820 SHIFT DEFB 0 ;сдвиг в таблице перекодировки
830 ADRTAB DEFB #61,#62,#77,#67 ;таблица перекодировки
840 DEFB #64,#65,#76,#7A ;(только большие буквы,
850 DEFB #69,#6A,#6B,#6C ;а маленькие-вычисляются,
860 DEFB #6D,#6E,#6F,#70 ;вычитая 32)
870 DEFB #72,#73,#74,#75 ;
880 DEFB #66,#68,#63,#7E ;
890 DEFB #7B,#7D,#7F,#79 ;
900 DEFB #78,#7C,#60,#71 ;
910 BEGIN PUSH AF ;начало процедуры печати для RS232C
920 LOOP1 CALL 8020 ;проверка на нажатие BREAK
930 JR C,INPUT ;если не нажат-идем дальше
940 POP AF ;если нажат-возврат в редактор
950 SCF ;с установкой флага С
960 JR EXIT ;
970 INPUT IN A,(#FB) ;проверка готовности принтера
980 RRA ;(бит 0 порта #FB)
990 JR NC,LOOP1 ;
1000 DI ;если принтер готов, то печать
1010 LD A,#01 ;стартовый бит(вывод на печать-
1020 OUT (#FB),A ;в бит 0 порта #FB)
1030 CALL LOOP2 ;задержка
1040 POP DE ;
1050 LD E,#08 ;цикл-печатаем 8 бит
1060 LOOP3 RR D ;
1070 JR C,NOL ;если 0-выводим 0
1080 LD A,#01 ;если 1-выводим 1
1090 OUT (#FB),A ;
1100 JR LOOP4 ;
1110 NOL NOP ;
1120 XOR A ;
1130 OUT (#FB),A ;
1140 LOOP4 CALL LOOP2 ;
1150 DEC E ;
1160 JR NZ,LOOP3 ;
1170 XOR A ;выводим стоповый бит
1180 OUT (#FB),A ;
1190 CALL LOOP2 ;
1200 EXIT EI ;возврат в редактор
1210 RET ;
1220 LOOP2 PUSH BC ;задержка для скорости
1230 LD BC,55553 ;печати 1200 бод
1240 LOOP5 DJNZ LOOP5 ;
1250 DEC C ;
1260 JR NZ,LOOP5 ;
1270 POP BC ;
1280 RET ;
1290 BEND END ;