Важная информация

User Tag List

Страница 1 из 10 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 92

Тема: УКНЦ параллельный порт

  1. #1
    Veteran Аватар для nzeemin
    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    1,995
    Спасибо Благодарностей отдано 
    1,059
    Спасибо Благодарностей получено 
    1,223
    Поблагодарили
    478 сообщений
    Mentioned
    15 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию УКНЦ параллельный порт

    Просветите кто-нибудь подробно про параллельный порт УКНЦ.
    Вот что имеем из ТО:
    7.4.4. Регистры параллельного программируемого интерфейса
    Программисту устройство параллельного программируемого интерфейса представлено четырьмя байтовыми регистрами (все регистры имеют формат 0-7 бит) с адресами:
    177100 - порт А
    W/R 177101 - порт B
    177102 - порт С
    177103 - управляющий байт
    Все разряды портов выведены на интерфейсный разъем.
    Особенностью работы с регистрами является требование обращения к указанным адресам с передачей информации в младшем байте (в т.ч. по нечетным адресам).
    Подробно работа с микросхемой описана в ОАБ.142.400
    Также имеем код ПЗУ:
    Код:
    ; П/п вывода символа на принтер
    135722$:MOV	R5,-(SP)
    	MOV	SP,R5
    	BIT	#2,177101$	; Принтер в состоянии ON-LINE ?
    	BEQ	136000$		; Нет
    135736$:BIT	#200,177101$	; Бит подтверждения сброшен ?
    	BNE	135736$		; Нет
    	MOV	4(R5),177100$	; Послать код символа на линию данных
    	BIC	#200,177102$	; Установить сигнал строба
    135762$:BIT	#200,177101$	; Получен сигнал подтверждения ?
    	BEQ	135762$		; Нет
    	MOV	#200,177102$	; Сбросить сигнал строба
    136000$:JMP	136056$
    ; П/п инициализации параллельного порта
    136004$:MOV	R5,-(SP)
    	MOV	SP,R5
    	MOV	#174,177103$
    	MOV	#200,177102$
    	JMP	136056$
    Порты 177100--177102 -- это порты A-C микросхемы 580ВВ55, а порт 177103 -- это управляющий байт ВВ55. Все данные этих четырёх портов передаются инверсно (особенность шины данных).
    Код:
    177100 -- порт A -- output: данные
    177101 -- порт B -- input
      bit 0   - A4 -- конец бумаги
      bit 1   - A0 -- on-line -- готовность приёмника
      bit 3   - A2 -- ошибка принтера
      bit 7   - AC -- запрос передачи
    177102 -- порт C -- 
     upper output
      bit 7   - SC -- strobe
     lower input
    177103 -- управляющий байт ВВ55
      bit 7   - Mode set flag (1=active)
      bit 6-5 - Group A Mode selection
      bit 4   - Port A direction (1=input 0=output)
      bit 3   - Port C upper direction (1=input 0=output)
      bit 2   - Group B Mode selection
      bit 1   - Port B direction (1=input 0=output)
      bit 0   - Port C lower direction (1=input 0=output)
    При инициализации порта байтом #174 в ВВ55 приходят биты 10000011, т.е. задаётся режим:
    port A output, port C upper output, port B input, port C lower input.

    В принципе, на этом уже можно написать эмуляцию принтера, но если захочется чего-то большего -- нужен будет маппинг остальных сигналов на порты ВВ55.
    Последний раз редактировалось nzeemin; 12.06.2011 в 19:19. Причина: по комментариям Alex_K

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,208
    Спасибо Благодарностей отдано 
    345
    Спасибо Благодарностей получено 
    606
    Поблагодарили
    398 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В принципе самый минимум описан правильно. Тут главное разделить аппаратную часть (сама микросхема 580ВВ55А) и протокол принтера ИРПР, который делается программным способом. Соответственно существуют драйверы, которые реализуют протокол Centronix.

    Сама аппаратная реализация сделана на микросхеме 580ВВ55А, которая является 8-разрядной и к тому же с прямой логикой (в отличии от инверсной шины QBUS). Т.к. микросхема 8-разрядная, то старший байт не используется, а адреса регистров кратны единице, а не двум. Микросхема 580ВВ55А имеет четыре регистра - порт A, порт B, порт C и управляющий байт. Соответственно:
    177100 - порт A
    177101 - порт B
    177102 - порт C
    177103 - управляющий байт
    Обращение к этим регистрам должно быть пословным, при этом старший байт всегда читается как ноль. В случае байтового чтения нормально читаются только регистры 177100 и 177102, при байтовом чтении 177101 и 177103 всегда читается ноль. При байтовой записи также нормально записываются только 177100 и 177102, а в 177101 и 177103 всегда пишется ноль.
    Управляющий байт задает режимы работы портов. В УКНЦ задаются - порт A на запись, порт B на чтение, младшая часть порта C (разряды 0-3) на чтение, старшая часть порта C (разряды 4-7) на запись. Осуществляется это записью в порт значения 0174, соответственно в прямом коде это будет 0x83. Эти двенадцать линий выводятся на разъем ПУ, к которому подключается принтер. А вот уже реализация отдельных разрядов портов зависит от используемого интерфейса (ИРПР, ИРПР-М, Centronix) и принтера. В УКНЦ программным способом реализован интерфейс ИРПР (он же IFSP) для принтера Robotron.
    Для начала надо ознакомится с реализацией интерфейса ИРПР из документации к принтеру Robotron (стр. 63-65). Саму документацию выкладывал KALDYH в этой теме. В УКНЦ соответственно в порт A записывается код символа для вывода. Т.к. ИРПР также инверсный, как и QBUS, то записывается прямой код символа, для Centronix'а надо записывать инверсный код. В порту B используются только биты 0 (конец бумаги, сигнал A4), 1 (готовность приемника, сигнал A0), 3 (ошибка принтера, сигнал A2) и 7 (запрос передачи, сигнал AC). В порту С используется только бит 7 (строб, сигнал SC).
    Для минимума реализации в порту B можно использовать только биты 1 и 7, в порту C - бит 7. Если виртуальный принтер в эмуляторе включен, то должен быть установлен сигнал A0 (бит 1 порта B). При готовности приема символа принтер сбрасывает сигнал AC (бит 7 порта B). Этот сигнал сбрасывается принтером только при установленном сигнале строба SC (бит 7 порта C), вот поэтому при инициализации туда и записывается 0200. Далее в порт A записывается символ и сбрасывается бит 7 в порту C. В ответ на это принтер принимает переданный символ и устанавливает бит 7 порта B. В ответ на это надо установить бит 7 порта C, после чего принтер сбрасывает бит 7 в порту B. Готовы к приему следующего символа.

  4. #3
    Veteran Аватар для nzeemin
    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    1,995
    Спасибо Благодарностей отдано 
    1,059
    Спасибо Благодарностей получено 
    1,223
    Поблагодарили
    478 сообщений
    Mentioned
    15 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Alex_K, отличное описание, с этим уже можно сделать эмуляцию ИРПР как минимум.
    Ещё пара вопросов:
    1. Что выдаётся при чтении из портов 177100 и 177103?
    2. Какова обычно скорость передачи данных? Ну или более конкретно, сколько времени должно проходить между сбросом строба (на линиях данных выставлен байт) до выставления подтверждения приёма?

  5. #4
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,208
    Спасибо Благодарностей отдано 
    345
    Спасибо Благодарностей получено 
    606
    Поблагодарили
    398 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    Alex_K, отличное описание, с этим уже можно сделать эмуляцию ИРПР как минимум.
    Ещё пара вопросов:
    1. Что выдаётся при чтении из портов 177100 и 177103?
    2. Какова обычно скорость передачи данных? Ну или более конкретно, сколько времени должно проходить между сбросом строба (на линиях данных выставлен байт) до выставления подтверждения приёма?
    1. Из 177100 читается тоже, что в него и записали. После инициализации через регистр 177103 в нем оказывается 0377. По чтению 177103 не определен. Но как показывает практика читается из него то же, что из 177102. Кстати записать в 177102 можно только биты 4-7, они же и прочитаются. Биты 0-3 в подключении не используются, соответственно читается ноль.

    2. А скорость передачи данных зависит от принтера. Сперва он может быстренько заполнить свой буфер, а потом будут небольшие паузы во время печати. Так что здесь завязываться на какие-то времена не стоит, это не дисковод и не стык С2. Чем быстрее, тем лучше. Есть протокол ИРПР, вот по нему можно и работать.

  6. #5
    Veteran Аватар для nzeemin
    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    1,995
    Спасибо Благодарностей отдано 
    1,059
    Спасибо Благодарностей получено 
    1,223
    Поблагодарили
    478 сообщений
    Mentioned
    15 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В принципе, в черновом варианте уже реализовал.
    Например, из кассетного Бейсика команда LPRINT "A" выдаёт последовательность байт:
    <41><0d><0a><0d>

    Почему-то при запуске эмулятора на принтер уходит байт 0, возможно так и должно быть, но скорее всего это неправильное начальное состояние регистров.
    UPD: Да, действительно, неправильная инициализация была.
    Последний раз редактировалось nzeemin; 12.06.2011 в 21:23.

  7. #6
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,208
    Спасибо Благодарностей отдано 
    345
    Спасибо Благодарностей получено 
    606
    Поблагодарили
    398 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    Почему-то при запуске эмулятора на принтер уходит байт 0, возможно так и должно быть, но скорее всего это неправильное начальное состояние регистров.
    Такого не должно быть. Он уходит во время работы п/п инициализации по адресу 136004? Если так, то неправильно обрабатываются сигналы. Значение бита 7 в порту C вначале равно нулю и оно не дает установится сигналу готовность к приему в принтере. Когда при инициализации этот бит устанавливается в 1, то и принтер тогда сбрасывает бит 7 в порту B, что означает готовность к приему.

  8. #7
    Veteran Аватар для nzeemin
    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    1,995
    Спасибо Благодарностей отдано 
    1,059
    Спасибо Благодарностей получено 
    1,223
    Поблагодарили
    478 сообщений
    Mentioned
    15 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Alex_K, с нулём в начале вроде как разобрался.

    С этими байтиками для принтера конечно много чего можно интересного сделать. Но за сегодня-завтра я скорее всего успею только сделать так чтобы они в файлик сваливались.

  9. #8
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,208
    Спасибо Благодарностей отдано 
    345
    Спасибо Благодарностей получено 
    606
    Поблагодарили
    398 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    С этими байтиками для принтера конечно много чего можно интересного сделать. Но за сегодня-завтра я скорее всего успею только сделать так чтобы они в файлик сваливались.
    Да этого вроде как и достаточно. А уже потом можно применить всякие конвертеры, либо делать программу просмотра в графическом виде (а это эмулятор принтера).

  10. #9
    Veteran Аватар для nzeemin
    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    1,995
    Спасибо Благодарностей отдано 
    1,059
    Спасибо Благодарностей получено 
    1,223
    Поблагодарили
    478 сообщений
    Mentioned
    15 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Во вложении -- версия с минимальной поддержкой принтера.
    В меню Emulator появился пункт Parallel. При включении пункта создаётся файл printer.log. Состояние пункта сохраняется между запусками. Соответственно, при следующем запуске файл перетирается -- будьте осторожны. Flush (сброс буфера в файл на диске) делается при приостановке эмулятора и при закрытии программы.

    UPD: http://ukncbtl.googlecode.com/files/UKNCBTL-beta20.zip
    Последний раз редактировалось nzeemin; 21.06.2011 в 21:58.

  11. #10
    Master
    Регистрация
    05.03.2010
    Адрес
    Санкт-Петербург
    Сообщений
    781
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Получил в printer.log запись "funkcionalxnyj test uk nc"

    Цитата Сообщение от nzeemin Посмотреть сообщение
    Flush (сброс буфера в файл на диске) делается при приостановке эмулятора и при закрытии программы.
    вот тут я чего-то не понял, что и как ?

Страница 1 из 10 12345 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. порт принтера?
    от Atari в разделе Несортированное железо
    Ответов: 0
    Последнее: 03.04.2011, 17:13
  2. Порт управления ПЗУ
    от skyther в разделе Память
    Ответов: 5
    Последнее: 23.04.2007, 19:09
  3. Лишний порт
    от Jukov в разделе Несортированное железо
    Ответов: 2
    Последнее: 17.12.2005, 15:01
  4. порт lpt
    от iliasam в разделе Устройства ввода
    Ответов: 15
    Последнее: 24.05.2005, 00:20

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •