Продолжаем оживлять старое железо. После PDP-11 приступаем к «калькулятору» HP 9830B. Много тяжелых картинок. Курсивом — мои комментарии.
Калькулятор HP 9830B с поддержкой BASIC'a
В 1976 был представлен HP 9830B, обновленная версия (больше памяти) HP9830A, выпущенного в 1972. Цена самого калькулятора была $8350. Дополнительный модуль принтера, располагаемый сверху, продавался еще за $3350.
Для всего модельного ряда HP98x0 использовался один и тот же тип 16битного процессора, реализованного на дискретной TTL-логике, которая размещалась большей частью на четырех платах. Для упрощения схемы, ALU был сделан последовательным.
Статья описывает историю превращения устройства из пыльного ящика со сломанными кнопками в полностью рабочий калькулятор.
Что мы имеем
Наш экземпляр использовался ранее в бухгалтерии и пришёл к нам с двумя большими накопителями на картриджах, сходных с HP7900 и DEC RK05 (я думаю, что это HP 9880, который поддерживал 2 картриджа диаметром 36см — один в качестве постоянного хранилища, второй как съёмное). Бухгалтерское прошлое подтверждается наклейками для клавиатуры и надписями на картриджах.
Калькулятор какое-то время пробыл в пыльном складском помещении, но первая очевидная проблема была с клавишами — четыре их них были сломаны, а трех, с верхнего ряда, не было вовсе. «DELETE LINE», «END» и цифра 5.
Я смог приобрести набор клавиш для клавиатуры терминала HP264x, но среди них не было «DELETE LINE» и «END». Но удача мне благоволила, и «DELETE LINE» выслал коллекционер из Голландии, а «END» пришла из Канады. Спасибо за это!
Вернувшись к проблеме сломанных кнопок, я связался с Cherry (производят клавиатуры, довольно неплохие, кстати), но я не смог получить никакой полезной информации (удивительно, если бы смог, так как Cherry в конце 70х перебазировались в Германию). Они даже не смогли распознать, что это за клавиши, несмотря на присутствие надписи «CHERRY».
Я попытался их починить самостоятельно. Взял струнную проволоку и загнул её в виде буквы U, затем, с помощью паяльника, вплавил её в пластик кнопки. Однако 100% совпадения с оригиналом добиться не удалось.
Получилось на полмиллиметра выше, но мне это не принципиально. Главное, что выглядит конструкция достаточно прочно и не должна сломаться так просто. Однако закончился этот этап восстановления тем, что коллекционер из Канады был настолько добр, что прислал еще пять клавиш под замену. Поэтому мне не пришлось испытать кнопки собственной починки.
Схемы
Тони Дуэль (Tony Duell) составил электрические схемы для большого числа машин от HP. Что очень мне помогло, так как доступно только несколько оригинальных схем от компании. В отличие от DEC, HP никогда их не публиковала. Я связался с Тони и получил отличное руководство по ремонту калькуляторов серии HP98x0 (этот файл был в формате PostScript и весил совсем немного, но я сконвертировал его в PDF, поэтому размер значительно увеличился). Кроме этого, я скачал электронные схемы, сделанные Тони. В поисках материалов о HP9830, я наткнулся на отличную страничку Брента и на эмулятор данного калькулятора.
Проверяем блок питания
После того как очистил блок от пыли, я начал мегомметром (специальный прибор, который, как ни странно, измеряет большие сопротивления) проверять изоляцию трансформатора, следуя советам из руководства Тони. Никаких отклонений. Затем я медленно запустил машину через трансформатор с плавной регулировкой (вынув предварительно все платы, кроме модуля PSU). Измерение напряжения на выходах блока питания дало правильные значения. Но оказалось, что на +5V коммутатор нужно подать минимальную нагрузку, так же как и на выходную цепь 19.5V. Про второе я бы узнал, если бы изучил схему, прежде чем подавать питание. 19.5V генерируется цепью источника тока, и, без нагрузки, просто отдаёт нерегулируемое напряжение. Подключение резистора на 1 кОм и платы ROM в качестве искусственной нагрузки даёт 5.01V. 19.5V должна корректироваться через стабилитрон до 16V, но, без нагрузки на этой цепи, выходные 16V начинают расти. Я думаю, что, в конце концов, сработает цепь защиты от перегрузок, но в тестах с вариаком («трансформатор с плавной регулировкой» долго писать, поэтому часто используют и кальку) ни разу до этого не доходило.
Работает?
Так как все измерения напряжения были корректны, то я вставил карты обратно и нажал кнопку включения. Удивительно, что я получил хоть что-то!
А после нажатия случайной клавиши и затем «EXECUTE», я увидел такую строку:
Качество
Мне кажется, что неплохо было бы показать внутренности HP9830. Поэтому я сделал общий вид всех плат калькулятора. Они прекрасны.
Все карты позолочены. Фантастика! Отличное качество.
Первым и вторым рядами представлена подсистема памяти с основной платой, содержащей DRAM на TMS4060 4k NMOS чипах. Третий ряд — контроллеры дисплея и кассет. Четвертый ряд заполнен процессорными картами, а последний содержит сам дисплей и блок PSU. Насколько я знаю, HP9830B отличается от HP9830A только платой памяти (во втором ряду, слева) и платой адресации (первый ряд, слева).
Сборка клавиатуры
Как только я получил клавишные крышки и переключатели, я смог пересобрать клавиатуру:
Накопитель на магнитной ленте
Я нажал на кнопку перемотки, но из внешних проявлений был только звук вращения, хотя самого движения не было. Я думаю, что еще должен был бы быть щелкающий звук от соленоидов. Раз его нет, то это значит, что либо произошёл сбой, либо их заклинило. Когда я вскрыл модуль привода, то обнаружил, что резиновая накладки на колёсиках были сильно изношены, поэтому мне, как минимум, нужно было исправить этот недочёт.
Новые сложности
Новые o-ring'и (уплотнительное кольцо, та самая резинка на колесиках) прибыли и были установлены заместо старых. Лампочка для определения ракорда (leader lamp, не уверен, что есть русский термин. На магнитных лентах в первых и последних Nмм нет рабочего слоя, и когда пленка перематывается, она подсвечивается такой лампой, а когда встречается пустая область, сигнализирующая о начале или конце ленты, детектор срабатывает и останавливает перемотку) была повреждена, и я заменил её белым светодиодом (да, я знаю, что на его месте должна быть небольшая лампа накаливания 5V 60mA, но я могу спорить, что, если бы светодиоды были доступны в 1972 году, то HP использовала бы их). Теперь перемотка заработала, а соленоиды, действительно, просто заклинило.
Я так же попробовал команду «MARK» (магнитная лента содержит несколько файлов в плоской структуре, команда MARK XX, YY создаёт XX файлов, длиной YY. Вообще странно начинать тестирование именно с этой команды, потому что она задействует огромное число блоков всего компьютера), но привод продолжал вращаться до тех пор, пока он в какой-то момент не остановился, а машина перестала реагировать на внешние команды.
После перезагрузки я заметил то, что машина ошибается даже в простой арифметике. На 2+2 отвечает 8.4444444, но 3+1 даёт 6.4444444. Довольно странно. Эта часть на калькуляторе должна работать безукоризненно.
Просто набирая числа и нажимая «EXECUTE», я получил странный результат.
0 превращался в 2, 1 в 3, 7 в 9, но 8 в 32.9444444, а 9 в 33.9444444.
18 в 20, 19 в 21, однако 20 в 42, 11 в 33, 30 в 52, 1000 в 3222.
SQR(2) вернуло 2.22636363, а 2^2 дало 41.96520965.
Что происходит?
Несмотря на всё это, я могу написать простенькую программку на BASIC'e, а-ля:
10 DISP "HELLO WORLD"
20 GOTO 10
И она отработает корректно!
Выглядит так, как будто калькулятор добавляет 2 к каждой цифре числа, но если при этом происходит переполнение (8+2), то получается какое-то странное число с плавающей точкой.
Проблема точно не в клавиатурном модуле, потому что номера строк для BASIC'a вводятся корректно. Кроме того, кнопка AUTO# (AUTO# XX, YY, где XX — начальный номер строки, а YY — шаг увеличения. Нажимаем AUTO# + 10,5 + EXECUTE получаем номер строки 10, AUTO# + EXECUTE выводит 15, в следующий раз 20, затем 25, и так далее) тоже работает как надо, то есть простейшая целочисленная арифметика в порядке.
Возможно, такое поведение идёт от чисел с плавающей точкой? Я считаю, что подсистема памяти работает без сбоев, поскольку она может хранить программу на BASIC'e и исполнять её.
Я, всё же, до конца не был уверен, проблема ли в ROM или в RAM, пока не перевёл калькулятор в режим FLOAT11 (числа с плавающей точной, 11 значимых цифр после точки) и не ввёл 1000000. Я получил число 3.22222222222+E6, в котором экспонента отображается правильно, а вот мантисса некорректна во всех цифрах. Этот факт, в совокупности с добавлением двойки к цифрам (22222 превращается в 44444), направил мой взор на ALU ROM'ы.
Я проверил BCD ROM, но его дамп абсолютно идентичен тому, что предоставил Тони. Забавно то, что машина может исполнять программы BASIC'a не задействуя этот блок!
Затем я проследил за основным ALU ROM, Первые 128 полубайт (под ROM были взяты Intel 3601, 4-bit x 256) считались нормально, но последние 128 были просто про-OR-ены с первой частью памяти. Поглядев в схему, можно увидеть, что верхняя часть адресов используется при установленном BCD-сигнале (в схеме так прямо и стоит, A7 подтянутый на BCD). Теперь появился смысл в том, что BCD-арифметика не работает, хотя с обычной всё нормально.
Я заказал чип из Болгарии, причём его программирование было включено в цену! Хотя, я думаю, можно было бы сделать это и на моём программаторе Data IO 29B. У меня были сложности с программированием некоторых микросхем от Harris и, к тому же, я никогда не пробовал программировать на нём чипы от Signetics.
Запускаем снова
82S126 прибыл из Болгарии, а Николай хорошо справился с его программированием. Я проверил чип на Data IO, и он подтвердил, что всё ОК.
Впаиваем его в нужное место, и мой HP9830B опять возвращается к жизни! Теперь он должен уметь считать правильно.
Я могу продолжать с того места, на котором остановился в прошлый раз, когда обнаружил этот баг. А именно запуск накопителя на магнитных лентах. К сожалению, работает он не очень здорово.
Ввод команды «MARK» по-прежнему заставляет его вращаться какое-то время, затем остановка и подвисшая система. Повторяем все операции по его включению заново.
Запуская другие команды, связанные с работой привода, вроде TLIST, STORE, FIND, получал в ответ ERROR 58, что похоже на общую ошибку. И такое сообщение выводится сразу же, калькулятор даже не пытается ничего делать.
Меня немного удивляет тот факт, что команда «MARK» исполняется, но никогда не завершается. Чего ждёт машина? Так как REWIND работает, я думаю, что EOT/BOT LDR (его я упоминал в ремарке про лампочку, LDR это просто фоторезистор. EOT — End of Tape, BOT — Beginning of Tape, но здесь эти термины некорректны. В формате ленты они выполняют другую роль. Здесь правильнее говорить о ракорде, clear-leader) детектор не сбоит.
BOT сенсор
Я думал, что замена лампы накаливания на LED пройдёт без проблем. Но теперь мне пришло в голову, что возможно свет слишком ярок. Это приводит к ошибочному срабатыванию фоторезистора. Суровая правда мне открылась в тот момент, когда лента остановилась на середине во время перемотки, а я нажал на кнопку REWIND снова (и держал её). Привод перематывал очень медленно, настолько же медленно как и на ракордах. Тогда я извлёк кассету и вставил её обратно, и она какое-то время перематывалась нормально. Я предполагаю, что в результате таких манёвров кассета заняла чуть-чуть другое положение.
Резистор с немного большим сопротивлением решил проблему. Теперь кассета проматывалась много раз подряд без всяких остановок.
Но основная проблема с командами для работы с магнитной ленты решена не была.
Мне нужны удлинительные платы для того, чтобы я мог подключить щупы логического анализатора. Сильно раздражает то, что очень много различных форм-факторов под разъемы. Шесть или семь видов удлинительных плат необходимо дабы покрыть все варианты. После того, как решил прибегнуть к логическому анализатору, я заказал изготовление таких плат у Джона Нери из США.
HP9810
Мы контактировали с Шведской Морской Администрацией, ибо там находился компьютер от HP, судьбу которого нас просили взять в свои руки. После того, как я об этом узнал, лучшим решением было съездить в Норрчёпинг и взглянуть на него. Во время осмотра я заметил маркировку HP9810! Я привёз его домой и почистил. Он был очень пыльным. Я медленно подавал напряжение через вариак и следил за состоянием блока питания. Он был в хорошей форме. Но, к сожалению, только это и радовало. Компьютер был мёртв со всеми подключенными картами, и это не была вина PSU, который, возможно, не мог выдержать полную нагрузку, ибо все измерения напряжения давали верный результат, даже с набором карт. Проверка процессорных карт на работающем HP9830 выявила неисправность плат операционного автомата и тактового генератора. Другие две платы работали вроде нормально. Переброска заведомо рабочих карт с HP9830 не принесла успеха. Единственное проявление состояло в включении лампочки STATUS спустя какое-то время. Исходя из этого я решил, что здесь присутствуют множественные неисправности. Поэтому я пока его отложил и приступил к чистке принтера HP9866 (верхняя часть 9830B, отдельный модуль), который принёс со склада домой.
Накопитель на магнитных лентах заработал!
HP9866 тоже был полностью в пыли. Я проформировал конденсаторы. Все они были в замечательном состоянии. Поэтому я запустил блок питания. Никаких очевидных неполадок. Кнопка «LOAD» работала, и я успешно загрузил бумагу в принтер.
Соединил его с 9830. Он не заработал. Так как и принтер, и ленточный привод зависели от одной процессорной платы ввода/вывода, то я поменял её на карту из HP9810A. Ну, принтеру это не особо помогло, зато заработал привод!
Я, наконец-то, смог успешно выполнить команду «MARK», что заключалось в остановке спустя небольшой интервал, вместо того чтобы проматываться до конца ленты. У меня получилось записать на кассету небольшую программу на BASIC'e и загрузить её обратно!
Отлаживаем принтер
Я подсоединил щупы анализатора к шине адреса микро-кода HP9866, которая выведена как часть тестовой площадки на управляющей плате. Я активно использовал схемы, нарисованные Тони на основе его обратного инжиниринга данного модуля.
Для понимания того, что происходит внутри принтера, я снова воспользовался помощью Тони — он проделал отличную работу по описанию микро-кода. Я оставлю это здесь:
HP9866 Control State Machine
----------------------------
** Character Entry **
00 : 20 if(Stb/) goto (00,02) , ClrFlg
Start of main loop (also entry point on power on). Clear interface flag
(not busy) Wait for strobe pulse on interface
02 : 2B goto (06)
06 : C2 if(PrtChar) goto (12,11) , InClk
Load chracter into input register, set interface flag flip-flop
(indicating printer busy). Test if it is a printable character (including
linefeed). If not, ignore it.
12 : F4 if(LF/) goto (19,1B)
Is it a linefeed?
1B : CF if(Empty/) goto (17,15)
Input character is a linefeed. Is the line buffer empty? If so, just feed
the paper, if not, do a full print cycle.
19 : C1 if(Start/) goto (14,11)
It's not a linefeed. Is the line buffer full (that is character counter = 0
and empty/ flip-flop set). If so, ignore it (truncate the line)
14 : 9D goto (0D) , SClk
Line buffer is not full, store new character in the shift register
0D : C4 goto (11) , PHOut
Increment the character counter, set empty/ flip-flop, and end this character
11 : C0 if(Stb/) goto (10,11)
End of character processing. Loop until strobe is inactive
10 : 00 goto (00) , ClrFlg
Clear interface flag and round again.
** Print cycle **
Now to actually print a line. Begin by filling the unused space in the data
shift register with spaces
17 : 89 if(Start/) goto (04,05) , ForceSpace
Set the data input flip-flops to a space character. Exit from loop when the
line buffer is full (effectively a while(buffer not full) loop).
04 : 10 goto (08) , SClk
Load a space into the next buffer location
08 : EF goto (17) , PHClk
Increment character counter and round again.
The line buffer is now ready, so print it.
05 : E6 goto (13) , Autofeed
Advance the paper one dot line
13 : E3 if(Timing) goto (16,13)
Loop until U26b times out to give the motor time to move
16 : 3E if(Row7) goto (0B,0E) , InClk
Is this the end of the printed character (7 rows of dots printed)? If so,
goto the paper feed routine, starting by incrementing the row counter.
0B : 7B goto (1E)
1E : 84 goto (01) , RowClk
Increment row counter. This also controls the RotEn line so as to go into
printing mode
01 : 50 goto (18)
18 : BF goto (0F) , PHClk
Clock the 5 bits for the current row of the current character into the
printhead shift registers.
0F : DA if(char0/) goto (1A,1D)
Is the line completed? This will skip the 4-chracter rotation at the end
of the complete print line, so as to leave the line buffer in the same
state at the start and end of a line. Thus each row of dots comes from
the same chracters in the same positions.
1A : AF goto (07)
07 : 59 goto (1C) , ForceSpace
No, start to roate the line buffer by 4 characters. Now ForceSpace/ had a
second meaning. It increments the '4 character' counter U17a/b
1C : A7 if(LnFlg) goto (07,03) , SClk
Rotate the line buffer and round again if it's not been done 4 times
(print every 4th character on each pass)
03 : D8 if(newbank/) goto (18,1D)
Has a complete bank been loaded? If not, go back and load the next
character.
1D : 32 goto (0A) , PHOut
A complete bank has been loaded, so trigger printhead timing monostable
and print this bank of dots.
0A : 31 if(Timing) goto (0C,0A)
Wait for U26a to time out (this bank has been printed).
0C : 8C if(firstbank/) goto (01,05) , SClk
Rotate the line buffer by one character to get the next quarter of a line
into postion. Has the character counter wrapped around so all banks have
been done? If so, back round, advance the paper and start the next dot
line. If not, then round again to start the next bank of data
** Paper feed **
This routine advances the paper by enough dot lines to complete the
character and inter-row space
15 : 94 goto (09) , Autofeed
Clock the stepper motor counter
09 : 93 if(Timing) goto (0E,09)
Loop until monostable U26b times out (to give motor time to move)
0E : FF goto (1F) , RowClk
Increment dot row counter
1F : C5 if(RotEn) goto (15,11)
Round again if dot row counter has not got back to 0 (RotEn = 1).
Otherwise go to end of character processing
Пожалуй, оставлю это без перевода, хотя почитать довольно занятно. Разве что, дам пояснения по формату. Общая структура — «ID состояния: опкод список_действий». Каждое действие это: 1. if (XXX) goto (YY, ZZ) — XXX представляет собой сигнал, если есть завершающий слеш, то это сигнал с активно-низким уровнем, переход на YY, если XXX ложно, иначе на ZZ; 2. goto(XX) — просто переход на XX; 3. Всё остальное это установка в высокий уровень сигнала с заданным именем
Когда с калькулятора посылается команда принтеру на печать, то это выглядит как серии строб-импульсов. Каждая серия представляет один символ, который обрабатывается микро-кодом.
Я получил последовательность состояний «00, 02, 06, 12, 19, 14, 0D, 11, 10, 00», которая неплохо совпадает с тем, чем нужно. Как только детектируется символ LF (приведена не полная последовательность, а только её начала, поэтому в примере после состояния 12 идёт на 1B, а 19, как должно было бы быть при LF'e), конечный автомат переключается на новый тракт, который заканчивается ожиданием в состоянии 13 до тех пор, пока активен сигнал Timing. После окончания ожидания следует прыжок в состояние 16. Начиная с этого момента, происходит зацикливание «16, 0B, 1E, 01, 18, 0F, 1A, 07, 1C, 03», а затем опять 18 и на новый круг.
Сразу же проверил сигнал newbank/ (который участвует в условии перехода из состояния 03), но он переключается как и должен исходя из входных сигналов. Однако, во время выполнения микро-инструкции для состояния 03, на вход 74150 (простенький мультиплексор) подаётся 8, вместо ожидаемого 0. Похоже, что сигнал RotEn/, который подаётся на вход D4 мультиплексора всегда находится на высоком уровне. Проверка сигнала RotEn, подаваемого на инвертор 7404, даёт нам то, что он всегда на низком уровне (на самом деле мы, просто-напросто, проверяем все элементы на пути сигнала, дабы убедиться что они не сбоят). RotEn приходит с платы операционного автомата, тестированием которой я сейчас и займусь.
Плата ревизии B!
Следующим шагом было отслеживание сигнала в операционном аппарате до чипа U19, но внезапно обнаружилось, что такой микросхемы не было на плате! До этого у меня не было нужды в проверке того, что электронный схема соответствует именно этой плате. Я просто предполагал, что это так. В моём HP9866 было два отличных от схемы модуля — вышеупомянутый операционный автомат 09866-66591 и управляющая плата 09866-66592. Причина различий была в том, что у меня находился HP9866B, а схемы были составлены для HP9866A!
Операционный автомат имел другую ROM для кодирования символов — SCM3632 от Motorola, с HP ID равным 1818-0167. Использовалось два учетверённых сдвиговых регистра TMS3120 (quadruple, четыре регистра с отдельными ножками в одном корпусе) от Texas Instruments вместо трёх MM5052.
Я решил, что в HP изменили только разводку платы, но сигналы для коннектора с кросс-платой оставили те же. Быстрое тестирование сигнала RotEn выявило то, что он идёт от шестого пина микросхемы U8, которой является 1820-0071. Гугл сообщил мне, что это 7440. Вполне согласуется со схемой, которую сделал Тони.
Управляющая плата. Я не могу точно сказать, что в ней поменялось. Однако ROM микрокода имеет ту же номенклатуру, что и на схеме, поэтому мои измышления, сделанные раннее, должны быть по-прежнему верны. То есть входные сигналы и управляющие коды должны подаваться на 74150 те, о которых я и думал.
Последующим этапом должны стать измерения сигналов на микросхемах U8, U3 (7490) и на U13 с номером 1820-0174, за которым скрывается 7404.
Новый сбой
Во время отладки принтера, внезапно, с калькулятора перестали приходить строб-импульсы. Я сразу же попробовал, работает ли другой модуль ввода/вывода — ленточный привод. Он не работал… Напомню, что я ранее заменил карту в 9830 платой из 9810, так как она работала лучше. Однако, по всей видимости, теперь сбоит и она.
Приступим к отладке этой платы. После чтения руководства от Тони и изучения схем, у меня появилась идея о том, что некорректно определяется флаг использование ленты, который идёт через сигнал Bus_IO_Rd/ (nCFI в более новой версии схемы от Brent'a). После этого он проходит трёхвходовый NAND-вентиль 7410, моностабильный мультивибратор 74121, триггер 7474, и затем уже генерируется I/O-флаг на выходе вентиля 7453. Поэтому я подключил щупы анализатора к этим микросхемам, обозначенным как U7, U8, U9 и U13.
Кстати, обратите внимание на использование удлинительных плат. Теперь, при необходимости, легко можно подвести щупы к контактам коннектора с кросс-платой.
У анализатора HP1664 сработал триггер на спад сигнала с пина 9 на чипе U7. Выходной сигнал на пине 1 микросхемы U8 (74121) был весьма занимательным.
Похоже, что этот сигнал всегда на низком уровне, хотя неинвертированный выход исправен (pin1 = NOT pin6 для 74121, и, судя по картинке, U8 6 в порядке). Замена на 74121 с другой платы (очень досадно то, что в моём относительно большом наборе чипов 74XX не было 74121, хотя присутствовали 74122 и 74123) дала значительно лучший результат.
Теперь команды для привода заработали точно так же, как и с картой-заменой из 9810 (до того, как и она сломалась).
Возвращаясь к принтеру
До того, как плата I/O вышла из строя, я отслеживал сигнал RotEn, который никогда не менялся. Сигнал генерировался платой операционного автомата, которая отличалась от используемых мною схем.
Поэтому я нарисовал свой собственный актуальный вариант.
Я подключил анализатор к U3, U7, U8, U13 и U14. Сразу же по включении принтера, заметил, что выходной пин 4 на U13 (инвертор 7404) постоянно переключался с одного уровня на другой, в то время как на вход подавался сигнал Qd с 7490, который был всегда низким. Это определенно неверное поведение.
После замены 7404 новым чипом, принтер стал протягивать бумагу, линия за линией, а не висеть в ожидании, как раньше. Он ничего не печатал, потому что я демонтировал печатающую головку и её блок питания, дабы не допустить никакого потенциального ущерба в случае, если логика неисправна.
Снова в работе!
Я только проверил сигнал bank, который выбирает какую группу игл в головке задействовать (Плата, отвечающая непосредственно за работу с иглами, была одна, но она содержала 4 группы по 5 игл, так как символы задавались матрицей 5x7. Для оптимизации по температуре и энергопотреблению, инженеры решили задействовать эти группы последовательно. Группа 1 печатает строки для символов в позиции 1, 5, 9, ..., 79, группа 2 — 2, 6,… 78, и так далее. То есть, фактически, делается четыре прохода. Этот сигнал как раз и задаёт номер прохода.). Всё было в порядке. Смутило только то, что маркировка отмечала расположение первого пина в противоположном от того, где он должен быть, конце коннектора.Тем не менее, я вернул печатающую головку на место и протестировал принтер. Он работал!
Я сделал небольшое видео с информацией о калькуляторе и об его ремонте.
Интересно посмотреть последнюю часть видео, где показан процесс работы.
Заменённые детали
Я заменил следующие компоненты:
- Два лампы для индикаторов
- Лампа в приводе магнитных лент
- BCD ALU 256 x 4 PROM на плате операционного автомата в калькуляторе
- 74121 на процессорной плате ввода/вывода
- 7404 на плате операционного автомата в принтере
- Пять сломанных клавиш
- Три потерянных клавиши
- Два o-ring'a для колесиков в накопителе на магнитных лентах
Дальнейшие планы
У меня еще есть дисковая подсистема из двух тяжелых приводов под 14"-картриджи (и плюс палета под фиксированное хранилище), двух тяжелых блоков питания, управляющего модуля, кабелей и ROM-картриджа. Всё это находится на складе, но я, пожалуй, оставлю это на следующие годы.
Ссылки на полезные материалы
- hpmuseum.net has this good page on the HP9830
- Repair guide for the HP98x0 that Tony Duell has written
- Hand drawn schematics of the HP9830A made by Tony Duell
- Brent Hilpert has this very good page on the HP9830 with schematics and a lot more
- A repair guide for the HP9866A written by Tony Duell
- Hand drawn schematics for the HP9866A made by Tony Duell
- A HP9830 emulator
- hp9830.com
- A web page by Rob Ferguson who also restored a HP9830
- HP98xx story
- hpmusuem.org page on the HP9830
- Andreas page on the HP9810
Автор: mark_ablov