1 Отредактировано garnizon (23-02-2024 00:51)

Тема: Контроллер принтера от Агат-9

http://agatcomp.ru/agat/Hardware/IO/io9.shtml

Есть мнение, что Яч принтера разрабатывалась с прицелом на большие возможности, вечный этот Агатовский идеализм.
В том числе и прошивка имеет больше возможностей чем принято думать. Например работа в режиме Apple, печать рисунка 256х256 с настройками.
Кстати, драйвер рассчитывает, что можно прочитать текущий режим ДК, и умеет управлять памятью девятки.
Так что на семерке процедура печати графики скорее всего завесит машину.
То есть, драйвер читает режим ДК, определяет, какая текстовая страница включена, находит, где ее данные в памяти, и потом печатает.


Изучая шнурки агатовские для принтеров, официальные. Оказалось что используются только:
- Data 0 - Data 7(А2-А9),
- strobe(В9),
- busy(С9),
- иногда int(В8).

И еще, почти всегда, на массе с2,с3, с5-с8, а С4 на +5 :




Avivanov76 подсказал:

- C4 и C7 это кодировки. Кои/Гост/CPA-80/FX-85

- C5 инвертирует все разряды данных. Видимо, были принтеры, которым линию А нужно было инвертировать.
- С8 отвечает за полярность сигнала Busy.
Если на c8 подать +5 вольт, то сигнал Busy будет при чтении инвертироваться.



Остается непонятным, зачем во всех известных кабелях, стабильно контакты C2, C3, C6 на массе ?

Прикол еще в том, что кабеля для ППИ и Агат-7 имеют такие же децимальные номера, в соответствии с моделью принтера.
Вероятно такой "стандарт", в распределении на линиях С и В, использовался и в драйвере для ППИ официальном.



http://agatcomp.ru/agat/Hardware/IO/io9/174_2s.png

2 Отредактировано garnizon (29-02-2024 15:14)

Re: Контроллер принтера от Агат-9

Из документации Агат-Автор , версия для Агат-7 ППИ:

В СПТ "АГАТ-АВТОР" предусмотрена возможность подключения печатающих устройств, принимающих данные по параллельным интерфейсам различных типов. Выбор режима работы программы осуществляется распайкой специальных перемычек на разъеме кабеля, подключаемом к ПЭВМ "АГАТ" и выбором соответствующих интерфейсу выходных контактов. В таблице 1 приведено назначение сигналов на контактах разъема интерфейсной ячейки ПЭВМ "АГАТ" при работе СПТ. Логический уровень "1" соответствует 0В, логический "0"- +5В (2,4-4,0В).
При использовании потенциальной готовности (BUZY/READY) STROBE выдается при условии READY=1 и выдерживается в "1" около 15 мксек (интерфейсы типа "Centronix", IRPR). При использовании импульсной готовности STROBE выдается при условии ACK=1 и снимается при получении ACK=0 (DZM).
СПТ обеспечивает при выдаче на печатающее устройство возможность выбора одного из двух кодов символов, отличающихся расположением русских букв в последовательности латинского (АБЦДЕ...) или русского (АБВГД...) алфавита. Выбор кода производится подачей соответствующего уровня на контакты C7 и С4. Кодировки символов в используемых кодах приведены в таблицах 2, 3 и 4.
Предусмотрено использование двух наборов управляющих символов для изменения шрифта печати. Выбор одного из этих наборов производится уровнем на контакте C3. Кодировка управляющих последовательностей приведена в табл. 5.

                                                   Таблица 1
           Сигналы обмена с печатающим устройством

--------------------------------------------------------------
!Конт.!Наименование сигнала!Обозначение!Примечание           !
--------------------------------------------------------------
!А2-А9!Код символа         !DATA0-DATA7!Уровень 0 В на С6 зада-
!     !                    !_____ _____!ет выдачу прямого кода,
!     !                    !DATA0-DATA7!уровень 5 В - обратного
--------------------------------------------------------------
!B9   !Строб готовности    !______     !Прямой сигнал на B7
!     !данных              !STROBE     !
--------------------------------------------------------------
!B8   !Инициализация печа- !____       !Прямой сигнал на B6
!     !тающего устройства  !INIT       !
--------------------------------------------------------------
!B7   !Строб готовности    !           !Инверсный сигнал на
!     !данных              !STROBE     !B9
--------------------------------------------------------------
!B6   !Инициализация печа- !           !Инверсный сигнал на
!     !тающего устройства  !INIT       !B8
--------------------------------------------------------------
!B3   !Четность данных     !EVEN       !Вычисляется после
---------------------------------------!инверсии по сигналу
!B2   !Нечетность данных   !ODD        !на C6
--------------------------------------------------------------
!C9   !Готовность печатаю- !READY, ___ !Тип сигнала задается
!     !щего устройства к   !BUZY,  ACK !уровнем на С5: 0 В -по-
!     !приему очередного   !ACK        !тенциал BUZY/READY,___
!     !байта данных        !           !5 В - импульс  ACK/ACK,
!     !                    !           !полярность - уровнем на
!     !                    !           !C8: 0 В - BUZY/ACK,___
!     !                    !           !  5 В -  READY или ACK
--------------------------------------------------------------
!C8   !Выбор полярности    !ABRLEV     !0 В - BUZY или ACK___
!     !сигнала готовности  !           !5 В -  READY или  ACK
--------------------------------------------------------------
!C7,C4!Выбор кода данных   !ALF        !10 - код CPA-80
!     !"0"-0 В, "1"-5 В    !           !00 - код КОИ-8
!     !                    !           !11 - код FX-85
--------------------------------------------------------------
!C6   !Выбор инверсии      !INVD       !0 В - прямой код,
!     !данных              !           !5 В - инверсный
---------------------------------------!----------------------
!C5   !Выбор типа готовно- !A/BR       !0 В - потенциал (BUZY)
!     !сти к приему данных !           !5 В - импульс (ACK)
--------------------------------------------------------------
!С3   !Выбор комплекта     !CNTRLESC   !0 В - CPA-80, FX-85,
!     !управляющих кодов   !           !Jeminy, 5 В - D100
--------------------------------------------------------------
!C10  !Земля сигналов      !GND        !
--------------------------------------------------------------
!A1   !+5 В                !+5         !
--------------------------------------------------------------
Уровень 0 В задается перемычкой на C10,
уровень 5 В - резистором 1 кОм на А1.

3

Re: Контроллер принтера от Агат-9

А вот уже из документации на ТОР для яч принтера Агат-9

ТОР предусматривает возможность подключения печатающих устройств, принимающих данные по параллельным интерфейсам различных типов. Выбор режима работы программы осуществляется распайкой специальных перемычек на разъеме кабеля, подключаемом к ПЭВМ "АГАТ" и выбором соответствующих интерфейсу выходных контактов. В таблице 1 приведено назначение сигналов на контактах разъема интерфейсной ячейки ПЭВМ "АГАТ" при работе ТОР. Логический уровень "1" соответствует 0В, логический "0"- +5В (2,4-4,0В).
При использовании потенциальной готовности (BUZY/READY) STROBE выдается при условии READY=1 и выдерживается в "1" около 15 мксек (интерфейсы типа "Centronix", IRPR). При использовании импульсной готовности STROBE выдается при условии ACK=1 и снимается при получении ACK=0 (DZM).
ТОР обеспечивает при выдаче на печатающее устройство возможность выбора одного из двух кодов символов, отличающихся расположением русских букв в последовательности латинского (АБЦДЕ...) или русского (АБВГД...) алфавита. Выбор кода производится подачей соответствующего уровня на контакты C7 и С4.

                                                  Таблица 1
           Сигналы обмена с печатающим устройством

ђ›››››‘››››››››››››››››››››‘›››››››››››‘›››››››››››››››››››››››’
|Конт.|Наименование сигнала|Обозначение|Примечание             |
“›››››”››››››››››››››››››››”›››››››››››”›››››››››››››››››››››››њ
|А2›А9|Код символа         |DATA0›DATA7|Уровень 0 В на С6 зада›|
|     |                    “›››››››››››њет выдачу прямого кода,|
|     |                    |DATA0›DATA7|уровень 5 В › обратного|
“›››››”››››››››››››››››››››”›››››››››››”›››››››››››››››››››››››њ
|B9   |Строб готовности    |______     |Прямой сигнал на B7    |
|     |данных              |STROBE     |                       |
“›››››”››››››››››››››››››››”›››››››››››”›››››››››››››››››››››››њ
|B8   |Инициализация печа› |____       |Прямой сигнал на B6    |
|     |тающего устройства  |INIT       |                       |
“›››››”››››››››››››››››››››”›››››››››››”›››››››››››››››››››››››њ
|B7   |Строб готовности    |           |Инверсный сигнал на    |
|     |данных              |STROBE     |B9                     |
“›››››”››››››››››››››››››››”›››››››››››”›››››››››››››››››››››››њ
|B6   |Инициализация печа› |           |Инверсный сигнал на    |
|     |тающего устройства  |INIT       |B8                     |
“›››››”››››››››››››››››››››”›››››››››››”›››››››››››››››››››››››њ
|B3   |Четность данных     |EVEN       |Вычисляется после      |
“›››››”››››››››››››››››››››”›››››››››››њинверсии по сигналу    |
|B2   |Нечетность данных   |ODD        |на C6                  |
“›››››”››››››››››››››››››››”›››››››››››”›››››››››››››››››››››››њ
|C9   |Готовность печатаю› |READY, ___ |Тип сигнала задается   |
|     |щего устройства к   |BUZY,  ACK |уровнем на С5: 0 В ›по›|
|     |приему очередного   |ACK        |тенциал BUZY/READY,___ |
|     |байта данных        |           |5 В › импульс  ACK/ACK,|
|     |                    |           |полярность › уровнем на|
|     |                    |           |C8: 0 В › BUZY/ACK,___ |
|     |                    |           |  5 В ›  READY или ACK |
“›››››”››››››››››››››››››››”›››››››››››”›››››››››››››››››››››››њ
|C8   |Выбор полярности    |ABRLEV     |0 В › BUZY или ACK___  |
|     |сигнала готовности  |           |5 В ›  READY или  ACK  |
“›››››”››››››››››››››››››››”›››››››››››”›››››››››››››››››››››››њ
|C7,C4|Выбор кода данных   |ALF        |00 › код КОИ›8         |
|     |"0"›0 В, "1"›5 В    |           |01 - код ГОСТ          |
|     |                    |           |10 › код CPA›80        |
|     |                    |           |11 › код FX›85         |
“›››››”››››››››››››››››››››”›››››››››››”›››››››››››››››››››››››њ
|C6   |Выбор инверсии      |INVD       |0 В › прямой код,      |
|     |данных              |           |5 В › инверсный        |
“›››››”››››››››››››››››››››”›››››››››››”›››››››››››››››››››››››њ
|C5   |Выбор типа готовно› |A/BR       |0 В › потенциал (BUZY) |
|     |сти к приему данных |           |5 В › импульс (ACK)    |
“›››››”››››››››››››››››››››”›››››››››››”›››››››››››››››››››››››њ
|C10  |Земля сигналов      |GND        |                       |
“›››››”››››››››››››››››››››”›››››››››››”›››››››››››››››››››››››њ
|A1   |+5 В                |+5         |                       |
ќ›››››ћ››››››››››››››››››››ћ›››››››››››ћ›››››››››››››››››››››››џ
Уровень 0 В задается перемычкой на C10,
уровень 5 В › резистором 1 кОм на А1.

4 Отредактировано Voldemar0 (01-03-2024 08:04)

Re: Контроллер принтера от Агат-9

Будущим копателям темы:

Немного расширим вопрос до ППИ семёрки и Агат-автор для уточнения.
Семёрочный agawt (это имя исполняемого файла в первой семёрочной версии) более-менее документирован по части кабелей и был разработан там же, где остальное "официальное" ПО и железо Агата.
Бейсик-60 поддержки принтера почти не имел или имел, но недокументированную (сторонними прогами, возможно). "Школьница" от новосибирцев печатать тоже умела, но драйвер у неё был попроще.

Так вот агат-авторов было на семёрке по крайней мере две основных версии:
1) На основе dos3.3. Немного названия команд поправили, немного логику работы. И добавили очень простенький механизм выбора файла из каталога "стрелками" (без явного ввода имени).
Никаких рамок или чего-то ещё похожего там не было, Диалог с ДОС был именно командной строкой.
Загрузка так же как и Basic-60 - из файла.

2) На основе ДОС из ИКП. Я так думаю. Этот агавт был встроен в ИКП, при выборе имени файлов рисует рамки из тире и плюсиков, Диалог с ДОС через простое меню (даже форматирования диска нет, так же как и команд защиты файла от модификации). Загрузка из абсолютных секторов.

Так вот драйвера принтеров там были разные. Похоже, что версия 1 использует свой собственный персональный драйвер, а версия 2 - вероятно, либо тот же, который может использовать ИКП-бейсик либо какой-то совсем свой, сильно переделанный.

Найти драйвер в версии 1 мне довелось очень давно, ещё в 90-е, когда я пытался заставить наш принтер печатать кириллицу. Его процедура DOOUT находится по адресу $F778, а ныне у нас есть даже её исходник (нередко встречающийся в крупных коллекциях файл AGAU.FORM). Эта процедура печатает символ с учётом всех настроек порта, но она не инициализирует ВВ55 - это происходит где-то в другом месте.

Так как это всё - регионы ЭмПЗУ семёрки, где есть несколько банков памяти, приведу несколько строк начала процедуры, для удобства идентификации (нулевой банк ЭмПЗУ):

                         DOOUT:                   # F778
F778 -   C9 8D ..   "I."    CMP   #8D        <==
F77A -   D0 02 ..   "P."    BNE   DOOUT2
F77C -   A9 8A ..   ")."    LDA   #8A
                         DOOUT2:
F77E -   49 80 ..   "i."    EOR   #80
F780 -   48 .. ..   "h"     PHA   

Насколько я понимаю, в этой версии нет проверки наличия ППИ, т.е. если вы задаёте порт (а вы его именно задаёте при настройке режима печати), то печать туда пойдёт безусловно.

А вот в версии два - там чёрт ногу сломит :)

В исходнике это выглядит так:

 DO AGAT9
DOOUT LDX #3 COUT WITH CODING
 STX PRINTER
TOPRINTER JMP (PRINTER)
 ELSE
DOOUT EQU $B800
 FIN

А где же исходник по адресу $b800 ? А нету  :))
Вероятно, он компилировался где-то отдельно, возможно, входит в состав ИКП-ДОС.

На самом деле он выглядит в загрузочном виде так:

B800 -   48 .. ..   "h"     PHA   
B801 -   AD 00 C2   "-.B"   LDA   C200
B804 -   8D 0F B8   "..8"   STA   B80F
B807 -   8D E1 C2   ".АB"   STA   C2E1
B80A -   68 .. ..   "х"     PLA   
B80B -   20 00 EE   "..Н"   JSR   DOOUT      <==
B80E -   8D 00 C2   "..B"   STA   C200
B811 -   60 .. ..   "ю"     RTS   

Теперь как выглядит начало этого кода (первый банк ЭмПЗУ):

                         DOOUT:
EE00 -   38 .. ..   "."     SEC              <==
EE01 -   48 .. ..   "h"     PHA   
EE02 -   86 34 ..   ".."    STX   34
EE04 -   84 35 ..   ".."    STY   35
EE06 -   49 8D ..   "i."    EOR   #8D
EE08 -   D0 0B ..   "P."    BNE   EE15

Я не нашел где находится этот кусок кода в исходниках - тут надо какой-то скрипт придумывать, который будет искать фрагмент кода по группе строк. Но наверняка где-то он есть.

Также для версии 2 мне известно расположение процедуры инициализации ППИ: $EEB1 - сразу за DOOUT.

Ещё интересно вот что: версия 2 пытается при загрузке (ещё до вывода главного меню) искать ячейку ППИ в ходе обычного изучения оборудования. Но на экране настройки параметров печати выбор слота ППИ (пункт "м") всё так же остался. У меня эмуль не умеет изображать ППИ, но я вручную указал слот 5, поставил ловушку на обращение к порту и... эмуль словил код, который пытался зайти на несуществующий слот 0.
Логика не ясна!
Возможно, что в этой версии, если задать порт, в котором автопоиск не нашел модуля, авторы предполагали, что вывод пойдёт на экран (условно слот 0 считается в меню настроек выводом на экран - превью такое себе прикольное). Но это где-то не срабатывает так, как задумано.

Предлагаю желащим продолжить раскопки.
Чисто визуально, драйвер из версии 1 заметно короче, к тому же исходник немного прокомментирован, так что прикладываю его к этому сообщению.

Post's attachments

Attachment icon AGAU.FORM.txt 1.06 kb, 74 downloads since 2024-02-29 

5

Re: Контроллер принтера от Агат-9

Ковыряние в прошивке ячейки принтера для Агат-9 привело к неожиданному результату: оказалось, что за основу был взят так называемый "Единый драйвер устройства печати", написанный для семерочной версии Рапиры и ячейки ППИ (RAPAPER27.3.FIL)
Во всяком случае, процедуры перекодировки символов и вывода символа на принтер совпали на 100%.

Самое забавное тут именно в том, что код работает с ячейкой принтера как с ППИ.
Это приводит к забавным результатам.

Например, управляющие сигналы для принтера должна выдавать К555ТМ8. Она содержит 4 триггера и с шины данных берутся старшие разряды. Но код выдает все 8 разрядов данных! Часть разрядов, естественно, пропадает. Например, пропадает бит четности, который подсчитывает прошивка. (Кстати, в интерфейсе Centronics такого сигнала нет, так что непонятно, какое устройство его должно использовать.)

Другой прикол связан с полярностью сигналов. Инверсный сигнал Strobe должен выдаваться на линию B9. Но на плате принтера он подключен к прямому выходу ТМ8. Тем не менее, прошивка формирует инверсный сигнал на этом выходе. Соответственно, на инверсном выходе ТМ8 получается прямой сигнал.

В то же время, ВВ55 ничего инвертировать не может, поэтому в драйвере предусмотрено формирование прямого сигнала Strobe. И он выдается на линию B7. В результате, плата принтера формирует две пары сигналов Strobe: прямой на линиях B7 и B5, и инверсный на линиях B9 и B3.

Назначение входных сигналов, получаемых с линий C полностью совпадает. Я, правда, не увидел, чтобы код использовал линию C3. То, что я написал про линию C5 оказалось неправильно - за инверсию данных отвечает сигнал C6.

Единственное заметное отличие в коде прошивки - выкинута инициализация ВВ55. Ну это и понятно.

***

Понятное дело, что этот драйвер - это только часть прошивки. Там есть еще программа печати растрового изображения.
Так вот, она полностью игнорирует сигналы на линиях C. И вообще не факт, что она на всех указанных принтерах будет работать. Потому что не у всех принтеров ESC-коды одинаковые, а тут они захардкожены.

Еще есть часть, отвечающая за режим Apple. Видимо, там происходит все тоже самое, что в режиме Агат, но добавляется режим эхо, когда символы дублируются на экране.

***

P.S.
Очень меня заинтриговал заголовок драйвера:

; EДИHЫЙ ДPAЙBEP УCTPOЙCTBA ПEЧATИ
; (D-100, CPA-80, EPSON FX-85, FX800)
; ДЛЯ CИCTEM "ШKOЛЬHИЦA" И "ACCEMБЛEP 80"

Что за "Ассемблер 80"? На Агате, получается, можно было писать код для КР580ВМ80?
Может, еще и плата на ВМ80 была? :)

6

Re: Контроллер принтера от Агат-9

Разбирал тут код загрузчика ИКП-7 и нашел вот такой код (комментарии мои):

        LDA    DATA_C60C   ; байт прошивки со смещением $0C
        CMP    #$F0        ; контроллер 140К
        BEQ    CODE_3B42
        CMP    #$BD        ; контроллер 840К
        BEQ    CODE_3B42
        CMP    #$4B        ; контроллер принтера девятки
        PHP
        JSR    SUB_3BED
        TAX
        PLP
        BEQ    PrinterFound
        LDA    DATA_C082, X
        CMP    #$FF        ; ячейка ППИ
        BEQ    CODE_3B34

PrinterFound
        JSR    SUB_3BA0

То есть, в семерочном ИКП встроено определение платы принтера и все компоненты ИКП (Бейсик, Рапира, Агат-автор, Ассемблер), в теории должны с этой платой работать.

Получается, что не только какие-то программы, но и официальный софт эту плату поддерживает. И наверно, не совсем правильно считать эту плату именно девяточной. Она была универсальной.

7 Отредактировано Voldemar0 (29-03-2024 21:55)

Re: Контроллер принтера от Агат-9

> То есть, в семерочном ИКП встроено определение платы принтера и все компоненты ИКП (Бейсик, Рапира, Агат-автор, Ассемблер), в теории должны с этой платой работать.

Я не уверен, что это так.

Все компоненты ИКП когда-то (до ИКП) писались под семёрку разными авторами. И нет никакого ощущения, что они как-то пытались "синхронизовать" архитектуру своих произведений.

Когда мне в коллекциях встречались "исходники ИКП", они, обычно, включают в себя всё, что связано с Бейсиком, могут встречатся куски Агат-автора и, конечно, копировщика ИКП. Но исходники Школьницы (т.е. Рапира и Ассемблер) найти много сложнее. Я не уверен, что они у нас вообще полностью есть (хотя некоторые куски Рапиры всплывают то тут то там).

Когда-то я пытался разобраться в скрипте, который собирает ИКП-диск, и из него следовало, что Школьница просто посекторно копировалась с другого диска, в то время как части бейсика, начального меню и копировщика записывались из свежих К-файлов.

Из этого я предполагаю, что автор загрузчика ИКП (Кривцов ?) вполне мог воткнуть в загрузчик детектор оборудования и даже использовать его в бейсике и копировщике, может быть даже в Агат-авторе, но вполне возможно, что Школьница его не использует, а сама определяет конфиг и поддерживает то, что умеет.

Второй вариант: сперва всё разрабатывалось в ИКП под девятку, потом, когда ИКП потащили под семёрку, не стали убирать поддержку принтерного порта "девятки". Ну как бы есть и ладно - не мешает же.

Во всяком случае, в принтерной части Ассемблера / ДОК, в семёрочной, до-ИКПшной, я не помню кода, который бы мог работать с принтерным портом, только с ППИ (было дело - ковырялся в нём когда-то). Было бы интересно это уточнить. Вход в драйвер в этой версии находится примерно по адресу $b46e, $b48f.

8

Re: Контроллер принтера от Агат-9

> Что за "Ассемблер 80"? На Агате, получается, можно было писать код для КР580ВМ80?
> Может, еще и плата на ВМ80 была? :)

Настоящая инструкция содержит указания по эксплуатации и хранению магнитных носителей "Система программирования на языке ассемблер микропроцессора 
КР580 для ПЭВМ "АГАТ" (СПА580).

Хотя эта инструкция именно по вопросам хранения и использования _дискет_, а не СПА.
Так что особо интересности не представляет :(.

9

Re: Контроллер принтера от Агат-9

Voldemar0 пишет:

Я не уверен, что это так.

Все компоненты ИКП когда-то (до ИКП) писались под семёрку разными авторами. И нет никакого ощущения, что они как-то пытались "синхронизовать" архитектуру своих произведений.

Тут вся фишка в том, что плата принтера по назначению регистров практически полностью совпадает с регистрами КР580ВВ55 ППИ. Это подтверждается драйвером принтера от семерки, запихнутом в ПЗУ почти без изменений. То есть, при использовании одинаковых шлейфов, код для платы ППИ будет работать с платой принтера.

Есть, правда один побочный эффект - выполнение кода инициализации КР580ВВ55 приведет к подключению ПЗУ к адресам $C800 - $CFFF на плате принтера. Но вряд ли это что-то может сломать. Обычно платы, которые этой областью пользуются, прежде чем ее использовать выключают чужие ПЗУ через обращение к $CFFF.

Voldemar0 пишет:

Из этого я предполагаю, что автор загрузчика ИКП (Кривцов ?) вполне мог воткнуть в загрузчик детектор оборудования и даже использовать его в бейсике и копировщике, может быть даже в Агат-авторе, но вполне возможно, что Школьница его не использует, а сама определяет конфиг и поддерживает то, что умеет.

Про Рапиру из ИКП могу сказать, что она оборудование не детектит и ожидает номер слота принтера в ячейке $4B. Загрузчик ИКП как раз этот адрес и устанавливает.

Вообще, загрузчик ИКП, как мне показалось после чтения документов Цикозы - это загрузчик Школьницы на стероидах :) Там добавилось графическое меню, изменился формат таблиц загрузки, но по сути там все то же самое. Подозреваю, что и детектор оборудования в нем присутствует, то есть, работает все примерно так же.

10 Отредактировано Voldemar0 (30-03-2024 07:49)

Re: Контроллер принтера от Агат-9

> То есть, при использовании одинаковых шлейфов, код для платы ППИ будет работать с платой принтера.

Меня одно исключение смущает: вв55 умела побитно управлять регистром C. У принтерного порта замена регистра - только целиком. Т.е. если драйвер использует команды вроде lda #$08 / sta C083,X то с принтерным портом это не прокатит.

Плюс к тому, вв55 умеет аппаратное квитирование, это у принтерного порта тоже нет.

Вот посмотрел код семёрочного не-икпшного ДОК, там вижу пару команд:
B4BF-  A9 AB       LDA  #AB   
B4C1-  9D 83 C0    STA  C083,X

B4E9-  A9 89       LDA  #89
B4EB-  9D 83 C0    STA  C083,X

Это похоже на настройку режимов вв55; не знаю, почему команд две.
Надо выяснить, какие режимы они включают.
Как мне помнится, старший бит = 1 - это настройка вв55, а =0 - управление.

11

Re: Контроллер принтера от Агат-9

Voldemar0 пишет:

Меня одно исключение смущает: вв55 умела побитно управлять регистром C. У принтерного порта замена регистра - только целиком. Т.е. если драйвер использует команды вроде lda #$08 / sta C083,X то с принтерным портом это не прокатит.

Плюс к тому, вв55 умеет аппаратное квитирование, это у принтерного порта тоже нет.

Тут все определяется распайкой шлейфов.

Шлейфы задают назначение регистров. И большинство шлейфов распаяно так, что через порт A данные выводятся на принтер, через порт B выводятся управляющие сигналы (strobe, init), а через порт C читается сигнал busy и параметры настройки принтера.

У КР580ВВ55 стробирование работает только на порту C. Причем, 4 линии работают на ввод, 4 на вывод. И это конфликтует с распайкой шлейфов, где все линии порта C считаются работающими на ввод и большая часть линий посажена на землю.

Короче, если использовать стробирование со стандартными шлейфами, то ВВ55 скорее всего погорит.

Побитовое управление реализовать можно, но технически оно только добавляет работы программисту - придется выковыривать параметры настройки и сигнал busy поштучно, вместо того, чтобы прочитать их за одну команду.

B4E9-  A9 89       LDA  #89
B4EB-  9D 83 C0    STA  C083,X

Этот код есть и в "Едином драйвере устройства печати". Он включает порты A и B на вывод, а C - на ввод.

B4BF-  A9 AB       LDA  #AB   
B4C1-  9D 83 C0    STA  C083,X

А вот этот код довольно странный.

Он включает режим 1 (со стробированием) и на порту A и на порту B. И со стандартными шлейфами он, похоже, не будет работать. Кроме того, там выше ($B4B5) жестко задан порт #$50. Возможно, это на эмуляторе так оборудование детектится, но может быть это какой-то патч в коде и вывод должен идти вовсе не на принтер.

12

Re: Контроллер принтера от Агат-9

> Кроме того, там выше ($B4B5) жестко задан порт #$50.

Сама по себе константа эта (точнее, весь код блока) хранится в секторе 3/5. И там именно $50.
Но какая-то странная настройка этого кода всё таки есть:

Эта часть в меню (Рапира/Отладочный комплек/Копирование), сектор 0/7:

0FCF-  A9 50 ..    ")p"     LDA   #50
0FD1-  85 4B ..    ".k"     STA   4B

Это уже в самом ДОК (сектор 3/5):

2794-  A5 4B ..    "%k"     LDA   4B
2796-  8D B6 B4    ".64"    STA   B4B6

У меня в эмуле принтера нет, возможно, что если бы был, то где-то что-то срабатывало бы по другому.