Inferno #06
03 декабря 2004
  Железо  

Железо - Описание блока памяти от принтера Robotron CM 6329.01 M. Часть 2.


Аппаратное обеспечениеПериферийное оборудованиеВвод-выводПринтеры

  Про неисправность принтера
   Принтер не реагирует на внешние данные (не считая нормальные,
редко ошибочные действия при нажатии его кнопок) и выдает 3 "за- 
прещающих" сигнала: пассивный сигнал выбора - неготовность прин- 
тера к работе, невыбор принтера или даже его отсутствие (получив 
этот сигнал,современный компьютер выдает сообщение об отсутствии 
принтера);активный сигнал занятости - неготовность принять инфо- 
рмацию (автоматически формируется при невыборе,поэтому здесь всё 
логично); активный сигнал ошибки - или обрыв бумаги (если датчик 
разблокирован и бумага ранее была), или приём недопустимой инст- 
рукции (с кодом ESC ), или механическая неисправность - заклинил 
механизм подачи головки (он снабжен стробоскопическим датчиком). 
   Интересно, что при внешней "неготовности" и "ошибке" сам при-
нтер  после включения тестируется и переходит в режим готовности
"ONLINE", не  выдавая  сигнал ошибки. Получается, что CENTRONICS 
либо  выдаёт неверные данные, либо неверно программируется самим
принтером  из-за  неисправности  принтера. Конечно, оба  события
не маловероятны, но есть другие любопытные факты.
   Speccy  часто  использует  упрощённый  протокол параллельного
обмена по LPT: кроме общего провода (и его же как экрана,если он
есть), разумеется, идут  8 бит шины данных и всего 2 управляющих
сигнала: STROBE на принтер, для передачи байта данных, и BUSY от
принтера  для регистрации его занятости, чтобы приостановить или
остановить  печать. На практике BUSY можно не использовать, если
передавать данные сравнительно медленно (например,из BASIC ),то-
гда  принтер будет успевать разгружать свой буфер. По статистике
90% стандартных матричных принтеров с LPT портом отлично работа- 
ют по упрощённой схеме (а 80% по медленной,без BUSY ),а из оста-
льных 10% ещё 2% можно заставить работать без изменения в схеме,
более хитрым программным алгоритмом, хотя в этом случае возможны
некорректные моменты (программа может начать печатать, даже если
принтер не включен),и надо соблюдать определенные правила работы
с принтером. По сути, почти все стандартные сигналы порта LPT на
Speccy даже не подключены, и их физически нельзя задействовать. 
   Из сказаного выше ясно, что при испытании данного принтера на
компьютерах системы Speccy можно получить прямой доступ к LPT по
упрощённому алгоритму,поскольку почти все сигналы порта "аппара-
тно игнорируются",сигнал неготовности (при неисправности принте-
ра) попросту не виден,и можно печатать,не обращая на него внима-
ния (вернее, пробовать передавать данные, как будто принтер выб-
ран и полностью исправен,наперекор его сигналам). Хотя мы прини-
маем от него сигнал занятости,мы также можем его проигнорировать
(это  наше дело, как мы реагируем на внешние сигналы), поскольку
занятость на некоторых (очень редких) принтерах может обозначать
отработку  графического  режима  и приём блока данных для печати
(вероятно, так и происходит на моем принтере DAEWOO ).
   Я так и сделал - попробовал печатать не обращая внимания,ведь
сам принтер логически подготовился к приему данных после включе-
ния - встал  в режим "ONLINE". Но ничего не получилось! На байты
не реагировал,что склоняет нас к неисправности интерфейса; одна-
ко я не исключал и аппаратно-программную настройку,блокировку...
   Покопался в инструкции,не нашёл ничего запретного в положении
перемычек, проверил блокировку с датчика открытой крышки,обнару-
жил датчик - геркон, разрешил звуковой сигнал перемычкой,но при-
нтер не отрабатывал байт BELL, и я ничего не слышал.
   На всякой случай решил перевключить кнопкой режим "ONLINE", и
при  нажатии  услышал сигнал. Повторил несколько раз - при выкл.
"ONLINE" раздавался звук. Первая мысль:разблокировал перемычкой, 
а принтер всегда пищит при таких нажатиях (запрограммирован).
   Снова попробовал передать код BELL, но принтер молчал.На вся-
кий случай снова перенажал "ONLINE" и, к своему удивлению, звука
не услышал, но принтер при этом продвинул бумагу немного вперед.
   Сперва подумал, что это какой-то глюк принтера,ведь звук я не
отключал, но потом вспомнил,что последним я передал код 10, т.е.
перевод строки.Несколько раз нажав "ONLINE", я убедился,что при-
нтер  его отрабатывает, а передав BELL, по нажатию той же кнопки
услышал звук. Получается интересная штука: принтер выдаёт запре-
щающие  работу  сигналы, сам находится в готовности к работе, на
входную  информацию  никак не реагирует, но при нажатии "ONLINE"
(причем при выключении этого режима) отрабатывает последний при-
нятый байт (и,как выяснилось,отпечатывает,если символ).Это гово-
рит  о как минимум частично работающем интерфейсе, т.к. данные и
строб (специально  проверил  фиксацию  очередного байта стробом)
через  него проходят. Возможно, он неверно программируется, если
какие-то разряды или сигналы управления не приходят из принтера?
   Для проверки этого стал передавать на принтер последовательно
байты 32...255. Ниже располагаются управляющие коды,и нет смысла
лишний раз их трогать,т.к.диапазоном 32...63 5 младших бит и так
будут проверены.Нелегкая это была затея,ведь после передачи каж-
дого байта его надо было "заметить" принтеру,для чего нажималась
кнопка  "ONLINE", и  после печати символа надо было снова нажать
"ONLINE" и передавать следующий байт. Принтер исправно печатал. 
   Отпечатав таблицу,я к удивлению обнаружил,что она по сути по-
вторяется,это говорило о игнорировании 7-го (старшего) бита дан-
ных,если он вообще проходил через интерфейс.К тому же,по паспор-
ту таблица символов действительно была 7-битной. Но возможно,это
"злое" совпадение:неиспользуемый бит в обрыве и не связан с при-
нтером.Тогда можно предположить,что порт интерфейса программиру-
ется неверно (7-й бит может означать необходимые режимы работы),
и он не принимает поток данных, а в силу ошибочного режима пере-
дает  лишь последний (хотя это обстоятельство зависит от кнопки,
которая не связана с интерфейсом напрямую, опрашивается програм- 
мой отдельно,может быть, логика сигналов ошибочно совпадает - но 
3 совпадения крайне маловероятны). Проверить это можно,используя 
графический режим. Но в инструкции было предупреждение о принте-
рах  с  7 иглами, там как раз выпадает старший бит - и вообще не
проверишь его прохождение (т.к.системе он вообще не нужен). Были
сомнения и по поводу включения графического режима. Обычно прин-
тер как бы зависает,принимая весь набор графических данных,а по-
том все их разом печатает, но в нашем случае, с такой "насильст-
венной" побайтной  отработкой, как бы не наткнуться на системную
ошибку принтера (типа:прерывание потока графических данных,выход
из режима печати по кнопке "ONLINE" ). Но всё решил эксперимент.
   Я передал включение графического режима (байты 27,75,11,0 ) с
распечаткой 11 графических байт,на что принтер,как обычно,не ре-
агировал. Затем  стал  передавать  сами графические байты (решил
передать "лесенку" - последовательный перебор всех бит, и полную
черту,а в начале и конце пустое место,т.е.байты 0,1,2,4,8,16,32,
64,128,255,0 ).Принтер распечатал их,как всегда,поодиночке,кроме 
первого и последнего нулей,нормально отработал графический режим
и вышел из него (я послал код звука для проверки).Но на лесенке,
из-за  засохшей краски, точки были очень нечёткими, и хотя все 8
виднелись, я решил перестраховаться и передать ещё 7 графических
байт в том же режиме: байты 27,75,7,0,0,%01010101,0,%10101010,0,
255,0 (символ % обозначает запись в двоичной форме, после % идут 
биты от старшего к младшему). В итоге получилось,что каждая игла 
печатала через одну, с промежуточным расстоянием, и сначала рас-
печатались 4 иглы, начиная с нижней,а затем другие,начаная с ве-
рхней,и потом все 8. За счёт расстояния между печатающими иглами
и сдвига  бит печати (и расстояния между позициями печати), было
чётко  видно  отпечаток, и можно было сказать - все 8 бит данных
попали в принтер,обрыва нет,а интерфейс по шине данных исправен.
   Радовало,что принтер в состоянии печатать все: и текст,и гра-
фику, но то,как это нужно делать,огорчало,ведь почти каждый байт
(кроме управляющих) отрабатывался  несколько  секунд, и печатать
решились бы  только большие энтузиасты или "туристы" из интереса
"не просто так кнопочки понажимать". Конечно,вполне реально соб-
рать маленькую схемку, которая после приёма байта "нажмёт" кноп-
ку, но она должна нажать её еще раз только после отработки теку-
щего байта,а время отработки зависит как от байта,так и от пози-
ции печати,можно ввести стандартную задержку,но 5 секунд на байт
(если не больше) - не слишком впечатляющая скорость печати.
   Разбирать принтер пока не хотел (ПЗУ не исключал),а интерфейс
трижды проверил - все соединения в норме. Осталось только анали-
зировать и предполагать.Итак,допустим,интерфейс неисправен и вы-
даёт ложные сигналы,а сам принтер готов печатать,но из-за неисп-
равности не получает данных. Тогда возможны варианты: неисправна
только  главная  микросхема интерфейса (предположительно, это не
только порт ввода/вывода,но и формирователь сигнала прерывания);
неисправны ещё и дополнительные микросхемы (через которые сигна-
лы проходят к компу).Надо сказать,на тот момент я не был уверен,
что в принтере установлен Z80, но аналогию сигналов ясно видел.
   Если посмотреть на схему интерфейса CENTRONICS, видно,что че-
рез вспомогательные микросхемы  происходит только обмен сигналов
(сигналы,взятые из главного чипа и прошедшие мелкую логику,обра- 
тно в главный чип не возвращаются). Это значит,что отказ простых 
микросхем не изменит логику приема байта вообще никак,кроме того
факта, что байт либо будет передан,либо нет,и передан с ошибкой,
либо верно (смотря какие логические элементы откажут), т.е.прин-
тер программно не может "узнать", "проверить" и "использовать" в
своей работе то, что прочие микросхемы интерфейса неисправны. Он
берёт данные из главного чипа и лишь его может контролировать. А
вот данные,поступившие неверно (из-за неисправности мелкой логи-
ки), он увидит, но примет за верные данные.
   Теперь разберемся с этими,возможно,"неверными" данными (пред-
положим,что именно из-за них система не работает,как надо). Есть
4 сигнала  и  шина данных. Сигнал STROBE и ШД полностью проходят 
на основании печатных экспериментов (строб идёт к одной лишь но-
жке главного чипа и,следовательно,точно доходит,внутри - в самом 
главном чипе - он может работать неверно,но это уже не неисправ- 
ность "проходных микросхем"). Остальные 3 сигнала  под вопросом, 
т.к. моей  системой  вообще не выдаются и висят (по умолчанию) в
неактивном состоянии. Но все эти сигналы,какие бы они (при неис-
правности  "проходных" микрух) в главный чип ни поступали, можно
блокировать  перемычками, и принтер не будет на них реагировать,
т.е.их состояние не имеет значения (упрощенный протокол обмена).
Ну,а с выходными (от принтера) сигналами все проще: пройдя "про-
ходные" микрухи,в принтер они не возвращаются,и ему "всё равно",
что с ними, а я просто игнорирую их состояние, выдавая данные на
принтер,как если бы он был полностью исправен. Отсюда вывод:даже
если  все  прочие микрухи интерфейса неисправны и поэтому выдают
ложные  сигналы, принтер  обязан  нормально печатать поступающие
данные,т.к.шина данных и строб работают,а другие сигналы принтер
не видит, и иные игнорирует на основании перемычек. Но раз он не
печатает, можно  предположить: неисправен главный чип интерфейса
или неисправен сам принтер.
   Теперь рассмотим предполагаемую логику работы принтера,а так-
же прием и отработку байт.Итак,включаем принтер. Порт интерфейса
программируется, и  часть  его "внешних" входов работает на ввод
(шина  данных  и 3 управляющих сигнала), а часть на вывод, кроме
того,он программируется на логику "захвата" байта и формирования
прерывания по какому-либо событию - которым, собственно,является
приём очередного байта. Это предположение основывается на сигна-
лах,приходящих на интерфейс.Аналогично происходит программирова-
ние  внутренних портов принтера, отвечающих за индикацию/динамик
(вывод), кнопки/перемычки (ввод),двигатели и иглы (вывод),но уже
со своей логикой работы (в сравнении с интерфейсом CENTRONICS ).
   Как правило, в подобных системах часто используют прерывания.
Прерывание - это реакция процессора на внешний сигнал.При выпол-
нении основной задачи процессор может получить сигнал прерывания
(есть специальный вход) и прервать выполнение основной программы
(разумеется,не посреди команды,а между ними),перейти к программе
обработки  прерывания, а после вернуться из неё и продолжить вы-
полнение основной задачи. Есть разные режимы прерываний и разные
способы их обработки.По специальной команде прерывания можно за-
претить, и процессор не будет обращать на них внимание (отвлека-
ться  от основной задачи), другой командой можно их разрешить. В
зависимости от режимов, сигналы прерывания могут приводить к вы-
полнению самых разных действий в программе. С помощью них возмо-
жно  мультизадачное  (почти параллельное)  выполнение процессов.
Вполне логично использование прерываний и в данном принтере.
   Логика действий принтера примерно такова:тестируется память и
механизм  (если что неисправно, выдаётся сигнал ошибки и система
зависает)  после  проверяются клавиши, и, если какие-либо из них
нажаты, происходит  выполнение внутреннего теста, с проверкой по
клавишам на его остановку, иначе программируются порты,сканирую-
тся клавиши, перемычки, и выдаётся индикация, а также происходит
отработка изменений на клавишах/перемычках,т.е.процессор крутит-
ся в основной задаче - обработка своего интерфейса ввода (клавиш
и перемычек). Логично, ведь неизвестно,когда именно пользователь
начнёт передавать данные для печати, и нет смысла впустую прове-
рять интерфейс на неизвестные данные (в том числе помехи подклю-
чения). Когда  на интерфейс  приходит передаваемый байт (т.е. не
просто поступает некая новая информация, но еще и стробируется -
то, что  именно поступила), порт запоминает его в своем регистре
(это  факт на основании испытаний) и формирует сигнал (подтверж-
дающий прием байта) передающему устройству, а также активизирует
сигнал занятости (ведь байт,хоть поступил,но пока еще не обрабо-
тан). Вместе  с  этим порт формирует прерывание процессора. Про-
цессор (если не слишком занят более приоритетным делом) обращает
внимание  на этот факт и переходит к подпрограмме обработки пре-
рываний, вначале которой проверяет настройки перемычек и систем-
ных переменых, и на основании этого принимает байт,помещая его в
буфер, а может,сразу обрабатывая,после чего снимает сигнал заня-
тости  (чтобы внешнее устройство могло послать следующий байт) и
выходит из программы обработки прерывания,возвращаясь к основной
задаче. Достоверность подобных действий очень высока, по крайней
мере, факт использования прерываний.
   Позднее,вдохновлённый сравнительно простым ремонтом подобного
принтера,я разобрал этот,хорошенько осмотрел,почистил,проспирто-
вал и проверил. Интересно, что при внешней запыленности принтера
плата  была  почти в идеальном состоянии (был слабый серый налёт
рядом  с разъёмом интерфейса, почерневшие от налёта ножки одного 
резистора, немного окислен один предохранитель,но все исправны и 
вроде все фирменные). В общем, "ремонт" ничего  не дал, все было 
в порядке, и принтер после этого вовсе не стал работать лучше.
   Именно тогда я нашёл еще 2 аналогичных порта (как в интерфей-
се) и ещё 2 специализированных чипа,которые,предположительно,яв-
ляются программируемыми таймерами - прерывателями и могут форми-
ровать сигналы для режима ПДП и многозадачных прерываний,для от-
работки печати,включая временные интервалы для механизма. Но то-
чно сказать,что делают эти чипы,не могу,т.к.никакой документации
на них у меня нету, ясно лишь, что они используют вышеупомянутые
сигналы и,скорее всего,имеют связь с микропроцессором Z80 (в од-
ном микропроцессорном комплекте). А у нас в страну,как известно,
Z80 тайком привозили,об остальных не думали (были не нужны),т.е. 
они малоизвестны.
   В итоге: по схеме налазился, натестился... По сути, полностью
подтвердил  свою теорию использования прерываний. Почти все сиг-
налы интерфейса,одноимённые,идут к Z80 и приходят (обрывов нет).
Итак, теория  неисправности  следующая  (возможную неисправность
простых микросхем интерфейса для статистики исключать не буду,но 
даже  в этом случае не одни они виноваты, и не в первую очередь, 
хотя почти уверен,что они работают): неисправность главного чипа 
интерфейса; неисправность  аналогичного чипа принтера; неисправ-
ность другого чипа принтера; прочая неисправность всей системы в
целом  (мелочи, в том числе маленькие микросхемы, блок памяти, а
также  процессор  -  короче, ничего  не  исключаю - эдакий ОБЩИЙ 
случай); неисправность  ПЗУ (практически только потеря некоторых 
данных - много и не надо,мало,но метко...). Порядок перечисления 
не является  приоритетным! Также следует вспомнить прошлое этого
принтера, а именно то,что он изначально не был определён как ра-
бочий (хотя тест всегда проходил),т.е.нельзя исключать неисправ-
ность  с самого  начала - какой-либо брак (я отнесу это к ОБЩЕМУ
случаю). Но я предпочел бы,чтобы он был исправен,либо неисправна
память. Хотя что проще: перепаять маленький чип  или перепрошить
ПЗУ? Первое проще, но если чип не маленький,то где его достанешь
- о нём ничего неизвестно, не смоделировать - только менять!
   В  пользу  главного  чипа  интерфейса  CENTRONICS говорит его
способность  фиксировать  и передавать байт данных процессору, а
также реакция на большинство входных сигналов со стороны принте-
ра (хотя не все их можно проверить). Рассмотрим эти сигналы.
   Адреса A0 и A1, поступающие на входы выбора регистров порта -
половина их вариантов полностью исправна, т.к. позволяет и прог-
раммировать порт (пусть и неверно), и читать из него принимаемую
информацию, но есть тёмное место в вариантах доступа к регистрам
порта. A6  поступает  на  вход  CS; не  будь он рабочим, с порта
вообще ничего не прочитаешь. Сигнал RD - именно он читает посту-
пивший байт,без него никак.Сигнал IORQ отвечает за доступ к пор-
ту (а не к памяти) и дублирует сигнал CS (позволяя управлять вы-
бором  порта  по  разным адресам, без CS пришлось бы смешивать 2
сигнала мелкой логикой, и подавать на IORQ как один сигнал выбо-
ра),и значит,вход работает.Сигнал CP тоже работает,т.к.благодаря
входной тактовой частоте и происходит автономный захват поступа-
ющего байта, по сигналу STROBE.
   Остаются  две  тёмные  лошадки: M1 и IEO. М1 должен (в данном
случае) сбрасывать сигнал INT, чтобы процессор не среагировал на
него дважды (процессор, получив INT, среагирует не сразу, но INT
можо сбросить, только когда среагирует, иначе процессор этот INT
пропустит), для  подтверждения своей реакции процессор формирует
комбинацию  IORQ  и  M1, которая  распознаётся портом, сбрасывая
INT ). По идее, этот вход должен быть исправен, т.к. участвует в 
окончании формирования прерывания,но по его пассивному состоянию
выделяется комбинация записи в порт (методом исключения,т.к.сиг-
нал WR на порт не подается),и если запись не срабатывает как на-
до, то порт либо вообще не запрограммируешь, либо можно это сде-
лать  неверно (оба эти варианта крайне маловероятны - хотя факт:
порт программируется,но действует неверно),другое дело,что неве-
рная дешифрация  сигнала M1 (при неисправности чипа порта) может
постоянно сбрасывать INT так,что процессор его не замечает (сли-
шком короткий INT ).Сигнал IEO приходит,если,конечно,его уровень
соответствует разрешению выдачи прерывания;возможно,требуется не
просто уровень,а импульс,т.е. IEO под вопросом,как и аналогичный
чип в принтере,с которого сюда поступает IEO (возможно,неверно).
   Собственно,на основании изученной схемы можно очень достовер-
но заявить:принтер не печатает,т.к.его процессор не прерывается.
Это подтвердил один эксперимент.Поскольку во время работы интер-
фейс  CENTRONICS находится внутри принтера, нет возможности про-
верить действующие в нем сигналы. Я разобрал интерфейс и вывел 2
проводка: сигналы  INT (выходит с чипа) и IEO (приходит на чип).
Во время испытаний я подавал байты на принтер и мерял эти сигна-
лы. Выяснилось,что при передачи байта состояние сигналов абсолю-
тно не меняется, а вот при нажатии кнопки "ONLINE" чип вырабаты-
вает INT, и байт отрабатывается  принтером (это видно по слабому
изменению напряжения сигнала, т.к.зафиксировать короткий импульс
тестером невозможно). Другой сигнал тоже меняется,причём один из
них меняется более заметно, а другой едва-едва (уже не помню,ка-
кой как,но факт,что они меняются).Это полностью подтверждает мою
теорию использования прерываний в нашем случае. Всё логично: при
нажатии кнопки формируется прерывание, и процессор обращает вни-
мание  на поступивший байт. Вернее логично лишь последнее, а вот
взаимосвязь нажатия кнопки с возникновением сигнала прерывания,в
чипе интерфейса - весьма странный факт. В таком случае INT кноп-
кой  может  вырабатываться по двум причинам: 1. на чип поступает
сигнал из принтера, обозначающий разрешение прерывания,и чип от- 
рабатывает  импульс прерывания; 2. при выходе из режима "ONLINE" 
процессор  обращается к порту интерфейса, чтобы его перепрограм- 
мировать, ведь  принтер  не  должен  принимать  байты вне режима 
"ONLINE", и при этом вырабатывается INT. Замечу,что в любом слу- 
чае это событие странное - печать байта при выходе из режима пе-
чати. Конечно,можно вспомнить,что большинство принтеров,принимая
строку текста, вообще не двигаются,а отпечатывают её,только при-
няв код перевода строки или код возврата каретки,что расценивают
как  окончание  принятой строки, либо строка распечатывается при
выходе из "ONLINE" (столько байт, сколько успело принять устрой-
ство), хотя  наверное, это  происходит  при  новом входе в режим
"ONLINE" (как после заправки бумаги, если она кончилась, а текст 
недопечатан). С этой  позиции можно (хотя под вопросом) сказать,
что наш принтер пытается распечатать строку, которую он так и не
принял,а заодно и последний принятый байт,зафиксированый в реги-
стре порта - что ему всё-таки удаётся.
   Получается,что чип интерфейса CENTRONICS как минимум частично
исправен, т.к. даже формирует прерывание, хотя и не всегда,когда
это  надо. Конечно, остается вероятность его частичной неисправ-
ности, а  также неисправности подобного чипа в самом принтере, с
которого  на  этот поступает сигнал IEO, а также других, которые
формируют подобный сигнал изначально. Можно предположить и такую
неисправность:внутренний порт не позволяет полностью увидеть со-
стояние перемычек. Те из них, которые блокируют неиспользуемые в
интерфейсе сигналы, не проверяются, и принтер считает что блоки-
ровки нет, и ждет соответствующие сигналы с компьютера. Но этому
противоречит то,что нужные сигналы поступали от современного ко-
мпьютера и не дали результат,а также то,что раз уж вход блокиро-
ван (по причине отсутствия необходимых сигналов), то какого тог-
да ... происходит распечатка хотя бы одного байта со входа,пусть
и последнего...Всё это наталкивает на мысль о неверно запрограм-
мированном порте (не исключая его неисправность),из-за чего при-
нтер не работает как надо. Учитывая общее количество портов - их
5, достаточно любой не так запрограммировать при включении,чтобы 
появились  сюрпризы. Хотя  двое по большей части программируются
верно, иначе движение механизма, а также индикация,клавиши и пе-
ремычки, нормально бы не контролировались. Ещё один факт, равно-
правно говорящий и о неправильном программировании интерфейса, и
о возможной его неисправности, заключён в том,что порт не только
не  вырабатывает сигнал прерывания (на что может быть и аппарат-
ная причина - не поступает должный сигнал IEO из принтера), но и
выдаёт  неверные данные, которые так или иначе идут с нормальной
шины  данных. Вопрос: откуда  они берутся? Либо они искажаются в
самом порте из-за его неисправности, либо действительно так про-
граммируется порт - т.е. неверно. Здесь можно предположить и то,
что  прошивка не подходит для данного интерфейса - указан интер-
фейс IFSP, а у нас CENTRONICS, и поэтому на порт приходит невер-
ная информация (для другого интерфейса она верна).
   Вообще, это  странно, ведь сам интерфейс - отдельный, съемный
модуль,подключаемый по стандартным сигналам,и общий способ обме-
на данными используется для всех моделей интерфейсов,но програм-
мироваться они могут, конечно,по разному,смотря какая логика пе-
редачи,но раз предусмотрен съёмный модуль,значит,по необходимос-
ти его можно заменить (всё равно что штекер вставить),и печатать
с другого  источника, по  другому  протоколу. По идее, при такой
простой замене не следует лезть в принтер и менять прошивку.Про-
шивка  сама должна определить тип интерфейса (раз это не предус-
мотрено перемычками),ведь на разъеме интерфейса много пустых ко-
нтактов,которые можно использовать для автоконфигурации при под-
ключении. Однако  если  сравнивать схемы интерфейсов, то у обоих
прочие контакты не используются,и автоконфигурация таким образом
невозможна, но инициализация портов - опрос их сразу после вклю-
чения - даст разный результат у разных интерфейсов,что позволяет
их отличить. Правда, можно предположить,что на такую удобную - с
автоконфигурацией - прошивку просто не хватило места, или сведе-
ний,или упростили. Иначе глупо получается: интерфейс надо менять
вместе с прошивкой, так случайно и таблицу с кириллицей поменять
можно, или променять...
   Берём  схемы  обоих интерфейсов и сверяем на основании логики
работы  сигналов при передачи данных и соответствия используемых
битов  порта. Вывод: да, очень даже похоже на правду. Если прог-
раммировать наш CENTRONICS на готовность к приему данных по про-
токолу  IFSP, то порт выдаст сигнал невыбора (в IFSP это как раз
готовность), а  сигнал  ошибки  у CENTRONICS опять же нормален -
"безошибочен" - для IFSP. Насчет сигнала занятости:он не сбрасы-
вается потому, что порт программирует вывод сброса занятости как
вход (для IFSP ), и пассивная единица входа нулём,конечно же, не
станет. При этом байты не принимаются, т.к. все управляющие биты
не  поступают в порт (эти входы оказываются соединены со входами
мелкой логики, которые сами ждут сигнал с порта, и в итоге такие
"многовходные" точки схемы висят в пассивной единице (уровень не
подключенного входа ТТЛ - единица,но он чувствителен к помехам).
В общем, очень похоже, что виновата прошивка, и принтер програм-
мирует  наш  CENTRONICS как IFSP, и поэтому он работает неверно.
Под вопросом лишь то,что принтеру удаётся распечатать один (пос-
ледний) байт. Это можно объяснить как помехами на свободных вхо-
дах (как бы не подключенных, согласно нашей теории с прошивкой),
вызывающими ложное срабатывание комбинации управляющих сигналов,
так  и всё же какой либо неисправностью системы, либо особеннос-
тями неверного программирования порта, его отличительной логикой
работы при этом.
   Процессор явно исправен, т.к.делает свое дело. Конечно,нельзя
его  исключать, но  слишком хорошо состояние платы и условия его
эксплуатации. В  моей  практике ни один ещё не сдох, хотя были и
замыкания выходов. Говорят, у кого-то горели, но при таких испы-
таниях, которые этому принтеру и не снились.
   Разумеется, неправильное программирование возможно и при сти-
рании ПЗУ,ведь тогда программа будет выполнятся неверно.В пользу
этой версии также говорят некоторые, очень редкие, сбои в работе
принтера - ведь что-то за ними стоит, может, конечно,застаивание
механизма,или плохой контакт при подключении интерфейса,но ниче-
го нельзя исключать,в том числе и порчу прошивки ПЗУ. Взять хотя
бы  мой принтер. Сначала отказала подача назад (хотя механически
всё  исправно и всё равно куда крутится). Потом появились сбои в
положении строк, потом стала срываться инициализация при включе-
нии, в итоге он либо вообще не стал тестироваться, либо механизм
"сходил с ума". Я надеялся, что это не ПЗУ, составил схему,пола-
зил, что мог - проверил,но большие чипы нельзя просто так прове-
рить тестером, ведь состояние их сигналов может быть неверно за-
программировано, и  надо  либо операться на 100%-ую логику теста
ПЗУ, которого у меня, конечно,нет,либо полностью доверять содер-
жимому прошивки,и,кроме прочего,абсолютно знать его логику (что-
бы знать, какие чипы, когда и как программируются,и на основании
этого их проверять). В итоге той истории я нашёл справочные дан-
ные на ПЗУ К573РФ8 (32 килоБайта) и выяснил что она хранит всего
лишь 25 тысяч часов и в выключеном, и во включеном состоянии,ну,
пусть даже 3 года, а прошло уже почти 7 лет - перекрыто 2 срока.
Потом  мне  распечатали  содержимое  этого ПЗУ и скинули файл на
диск.От программы,конечно,многое осталось,но было столько всякой
ерунды,что о нормальной логике работы можно и не говорить (я ди-
зассемблировал  тот  код). Местами  байты были полностью стёрты,
причём ближе к концу памяти потери возрастали.Сейчас тот принтер
лежит  в  шкафу, будучи  полностью исправным, и нет прошивки для
него. Хотя ассемблер мне доступен,я не знаю все особености прог-
раммирования  механизма, и поэтому можно потратить много времени
впустую, даже имея шанс повредить саму механику при испытании. В
общем, я хотел бы достать нормальное ПЗУ с прошивкой, и даже ру-
блей за 100 (хотя принтер мне за 200 достался, и денег не жалко,
что-то я всё же на нём печатал), но пока негде, по интернету ещё
не пробовал смотреть,хотя шансы весьма большие. Но в целом готов
лично  отвести (в пределах Рязани) тому, кто сумеет использовать
по назначению. Просто жалко систему выкидывать. Когда-нибудь со-
беру программатор и попробую оживить...
   Есть еще один интересный факт.В моем компе впаяна без панель-
ки ПЗУ К573РФ5. Это  почти "аналог нашего случая". У ней и объем
такой  же, и цоколёвка как у РФ2, отличается лишь электрическими
параметрами (прожорливость). В частности,время хранения информа-
ции у нее такое же - 12 лет,но во включенном состоянии не 3, а 6
лет (вдвое больше,чем у РФ2 ).Но если вспомнить,как я гонял свой
Speccy, в  том  числе круглосуточно, то мой компьютер проработал 
уже 2 года непрерывно (если не больше),что сокращает общее время
хранения до 8 лет,а прошло уже лет 11, т.е.уже 3 года как данные
могут стреться. Однако тесты (есть специальные программы с конт-
рольной  суммой)  пока говорят об исправности. Но даже если этот
чип сотрётся (я не могу его прошить - выпаивать надо, а качество
монтажа такое,что дорожки просто поотлетают), мне это не помеша-
ет. Конечно,стандартные BASIC функции печати будут работать пло-
хо - глючить,но я их не использую,и не использует ни одна совре-
менная программа, везде есть свой драйвер. Наверное, поэтому ПЗУ
как  бы находится в выключеном состоянии (процессор к нему обра-
щается  очень  редко), и это увеличивает время хранения, но срок
наверняка уже прошёл,и в течение примерно 10 лет информация хотя
бы отчасти испортится.
   В пользу исправности ПЗУ данного принтера говорит и то, что в
его  тесте все символы печатаются нормально, и по их изображению
потерь данных не видно. Но что такое символы? Всего лишь десятая
часть ПЗУ, и находится, она в отдельной микросхеме,возможно,про-
шитой позднее, и,соответственно,с бОльшим запасом времени хране-
ния. Кроме того, "операционка принтера" при  работе  выполняется
постоянно и всё то время, пока принтер просто включен, а символы
извлекаются  только  при печати, т.е. используются реже. Поэтому
хранящая их микросхема находится в "полуспящем" состоянии,и дан-
ные в ней теряются меньше, хранятся дольше...
   В итоге приходим к тому,что перед непосредственным ремонтом -
анализом работы чипов принтера, надо убедиться в исправности его
ПЗУ (корректности хранимых там данных), путем эксперимента с его
заменой, а уж если ПЗУ в порядке,ломать голову над самим принте-
ром (возможо, сравнивая с рабочим оригиналом).
   На  практике, при  ремонте  многих Speccy, я часто подозревал
потери  данных в их главном ПЗУ (импортная 27C512 на 64 кБайта),
но  ни  разу это не подтвердилось! По сути у меня нет справочных
данных на эти чипы. А неисправности были в простых причинах.При-
чём я слышал, что эти чипы очень надёжные и по сути не "стирают-
ся"  сами  по  себе. Но по статистике нельзя это исключать, ведь
микруха  стираемая. И лишь год назад мои подозрения насчет одной
такой импортной микрухи подтвердились, но только путем замены,и,
как оказалось, её последний раз еле прошили (была отчасти с бра-
ком). [Ред.: У меня было 2 таких случая. ]
   Так  что я склонен предполагать неправильное программирование
интерфейса  CENTRONICS - по причине внутренней неисправности или
потери  данных (либо их несовместимости) в ПЗУ. По крайней мере,
на 50% интерфейс исправен (на 50% уверен, что полностью).
 

   Файл создан в редакторе ACE0.85, на системе Pentagon 128, по-
следняя редакция файла 24 августа 2004 года. 

KSA-7G 



Другие статьи номера:

Inferno - Вступление от редактора.

Интервью - интервью с AIG - кодером из группы MKHG.

Sofтинка - ACE 0.888: отличия от 0.666

Sofтинка - макро-ассемблер отладчик ALASM 4.47: отличия от 4.44

For Coderz - Арифметическое кодирование.

Inferno - Авторы журнала.

Sofтинка - BGE 4 графический редактор для ZX.

События - The Compo 2: результаты голосования.

For Coderz - Декомпиляция программ - оживление старых прог.

Inferno - Ошибки в предыдущих номерах.

For Coderz - Маленькие программерские хитрости.

DIY - Схема моего электрофумигатора.

Gameland - о пройденных играх: Imperia 2, Hexagonal Filler, From Beyond.

Железо - устройство расширенной клавиатуры (58 клавиш).

Gamedev - Игровой цикл - цикл, внутри которого вызываются все подпрограммы игры.

Gameland - прохождение Lords of Time от Level 9.

For Coderz - Макросы ч.2 - облегчаем себе жизнь при программировании.

Inferno - Письма в редакцию.

Gameland - прохождение уровней игры Чёрный Ворон.

For Coderz - Описание модульной структуры программ.

Inferno - Об оболочке.

Sofтинка - преимущества упаковочного алгоритма Optimal LZH.

События - серпуховский фестиваль ParaDiGMus party 2003. Как это было.

События - серпуховский фестиваль ParaDiGMus party 2003. Afterparty.

Gameland - прохождение игры The Price of Magik от Level 9.

Железо - Описание блока памяти от принтера Robotron CM 6329.01 M. Часть 1.

Железо - Описание блока памяти от принтера Robotron CM 6329.01 M. Часть 2.

Реклама - реклама и объявления.

DIY - советы по ремонту часов, Dream Cast и джойстика.

Интервью - Интервью с Shaitan/Stars of Keladan: Interred Inferno.

Gameland - прохождение игры Snowball от Level 9.

Железо - Видеомагнитофон GoldStar RN800AW Art vision. История ремонта.

Железо - Видеомагнитофон GoldStar RN800AW Art vision. Советы по разборке и ремонту.

Интервью - интервью с музыкантом Visual^Extreme (Сергей Агапов).

Gamedev - о сборке игры Wolfenstein 2004. Часть 1.

Gamedev - о сборке игры Wolfenstein 2004. Часть 2.

For Coderz - Как получить на звуковом устройстве больше бит.


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

Похожие статьи:
Капля припоя - о матричных принтерах.
Soft group - Кое-что о подключении принтера. Порты устройств компьютера ZX-SPECTRUM.
Железо - Описание блока памяти от принтера Robotron CM 6329.01 M. Часть 1.

В этот день...   17 июля