ZX-Ревю 1995 №2 1994 г.

Читатель-читателю - Драйвер последовательного интерфейса для ZX-WORD.


    Драйвер последовательного
     интерфейса  для 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             ;                                         



СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Enlight '96 - отчет
Реклама - Реклама и объявления...
Видео на спеке - В этой статье речь пойдет о том, как на спеке с памятью 128 килобайт организовать реактивный показ видео в высоком разрешении.
Балдежник - Анекдоты.
Дискуссия - Рецензия.

В этот день...   21 ноября