Киберманьяк - это человек,
который программирует все, что шевелится,
а то что не шевелится - расшевеливает
и тоже программирует!
Сам придумал
Данное произведение представляет из себя собрание фактов из моего опыта работы с самодельным компьютером "Специалист", а так как основная масса событий происходила давно, то это в некотором роде мемуар. Для понимания отдельных фактов желательно быть в курсе некоторых моментов изготовления таких устройств, но необязательно. Четкого хронологического порядка в изложении нет, да я уже и не помню все точно что за чем произошло.
Компьютер "Специалист" был разработан Волковым из города Днепродзержинска и опубликован в журнале "Моделист-конструктор" в 1987 году. Этим компьютером я занимался в период с 1989 по 1998 год, еще пару лет он использовался для игр.
Если Вам покажется что-либо странным в описанных случаях - прошу учесть, что в то время, когда я собирал этот компьютер, я был студентом нетехнической специальности, и у меня не было никого поблизости, с кем бы я мог проконсультироваться, не было необходимой литературы, приборов, да и вообще - это было просто хобби, правда, сильно меня втянувшее. Если Вы не согласны с моим мнением по каким-либо вопросам - Вы можете иметь по этим вопросам свое личное мнение.
Может, некоторые решения, которые я использовал, являются банальными, но до многих из них мне приходилось доходить своим умом, и я надеюсь, что кому-нибудь они могут быть интересны. В любом случае - приятного чтения!
Несмотря на то, что моя мать работала инженером на ВЦ, тема ЭВМ в раннем детстве меня не интересовала. Это были шкафы с лампочками, которые нельзя было трогать, которые гудели и трещали, печатая огромные простыни со всякими неинтересными табличками. Единственное, что меня привлекало - перфокарты! Это была отличная плотная бумага для всяких поделок! :)
Однажды в школе меня заинтересовало, чего это несколько ребят воткнулись в калькулятор? В первый раз что-ли его увидели? Однако, когда мне объяснили, что этому калькулятору можно указать последовательность действий, которую можно потом выполнить одним нажатием на кнопку - меня это впечатлило! Еще не понимая всех возможностей, я загорелся желанием иметь такой же аппарат. Прожужжав уши родителям о неоценимой пользе такого устройства в учёбе, в свете приближающегося Нового года я получил от Деда Мороза свой первый ПК - программируемый калькулятор Б3-34! Бомбой в этом процессе стали вскоре появившиеся игры для этого калькулятора в журнале "Техника-Молодежи", особенно мой любимый "Лунолет-3".
Возможности калькулятора меня вполне устраивали, хотя начали быстро стеснять размеры памяти, а также расстраивало отсутствие возможности сохранять данные и программу перед выключением. Также хотелось иметь хотя бы один какой-нибудь внешний портик. Несмотря на появление в журналах схем всяких устройств, которые позволяли программировать калькулятор извне, я не стал этим заниматься - появление в журналах "Радио" схемы ПК "Радио-86РК", а затем в "Моделисте-Конструкторе" - "Специалиста" определило для меня новое направление. Из этих двух вариантов я выбрал "Специалист", так как у него была точечная графика и не было ВГ75 - микросхемы на тот момент дефицитной и соответственно дорогой.
Послешкольные пертурбации и напряженная учеба на первом курсе отодвинули ПК на задний план. И вот, будучи на каникулах, я решил-таки собрать "Специалист". В эту пору появился и "Спектрум", однако я лично о нем знал мало, поэтому решил не связываться, тем более что и стоил он значительно дороже, в основном из-за процессора и 2-х 8 кб ПЗУ-х, обычно импортных. Опыт по сборке таких устройств у меня был практически нулевой - единственное, что я собрал к тому времени - электронные часы на серии К176 на готовой плате, но это меня не смущало. Купив на "туче" все необходимое, включая плату, я морально созрел. Видя перед собой ПК, но только по частям, я не удержался - выпил пива и спаял ПК за одну ночь. И, естественно, он не заработал. Блиц-криг не удался - так я и забрал его с собой в общежитие для "доводки".
"Доводка" состояла из двух этапов. Первый этап - однажды моему другу отец принес с работы попользоваться осциллограф - я к нему пришел со своей платой и "потыкал" в разных местах... В одном месте меня смутил низкий уровень импульсов по сравнению с другими точками - пройдя глазом вдоль дорожки я обнаружил малозаметную заусеницу, подчистив которую я получил импульсы нормального уровня. Придя домой я обнаружил, что у моего компьютера появился видеосигнал! Правда, весь экран был заполнен мусором и мерцал, но если я удерживал кнопку "Сброс" - мерцание прекращалось. Однако приближалась сессия - и снова комп был отложен...
Второй этап - приехав домой на зимние каникулы, я продолжил "запуск".
Во-первых, "мерцание" части экрана при "работе" процессора навело меня на
мысль поискать причину в области процессор-память, и эта мысль оказалась
успешной - я обнаружил замыкание двух дорожек около одной из микросхем памяти
РУ5, причем наплыв настолько был похож на штатную дорожку, что я несколько раз
перепроверил, пока его обрезал. Результат не заставил себя ждать: после сброса
экран "стирался" клеточками в шахматном порядке. Поняв, что дело в адресах, я
прозвонил адресные шины после шинных формирователей АП16 и обнаружил замыкание
двух из них. Попытки найти соединения между дорожками не увенчались успехом -
но, процарапав промежуток между ними по всей длине, удалось убрать короткое
замыкание. Очевидно, был недотрав. И вот: долгожданная надпись "
ПРОГРАММА?
" на экране! Радости не было конца! Однако компьютер не читал
не только программы с кассеты, которую мне записали друзья, но даже и то, что
писал на пленку сам, хотя это было испытано на новом магнитофоне!.. Воевать
было некогда, каникулы кончились - снова в путь!
Проконсультировавшись со "специалистами", я узнал много способов повысить надежность узла считывания, в т.ч. и с такими схемами, что я не решился повторять. Вернувшись в общежитие, я еще некоторое время пытался забороть узел чтения, подозревая, что проблема именно в нем - но дорожки поотпадали, а успешного чтения так и не было. Тем временем, благодаря наличию встроенного Монитора, я изучал компьютер, его ПЗУ, а также начал пробовать писать программы прямо в машинных кодах. Однако неожиданно почил мой телевизор "Электрон" - и вновь все отложилось до летних каникул.
Летом наконец-то сделал компьютеру фанерный корпус, открытый спереди и сзади (в будущем планировалось сделать переднюю панель, но это будущее еще не наступило). Один месяц в рамках работы в стройотряде мне пришлось целый месяц сидеть в общежитии на вахте. Грех было не воспользоваться такой возможностью! Меня посетила авантюрная мысль - сидя на вахте я вручную выписал в тетрадку все содержимое ПЗУ, а затем так же вручную дизассемблировал. По ходу мне прояснились очень многие вопросы, а также я узнал много нового о Мониторе (журнал с его описанием появился у меня спустя пару лет) - это оказалось полезной школой и наиболее точной документацией к ПЗУ - в последствии я часто обращался к этой тетрадке для справки.
Осенью я решил вновь попробовать чтение, тем более что у меня уже была кассета с несколькими программами. Одолжив магнитофон у друга я начал экспериментировать с чтением... Каково же было мое удивление, когда программы стали устойчиво читаться после подбора константы чтения! И это на старом магнитофоне! Затем я попробовал свой бобинный "Маяк" не первой свежести - надо же! И здесь получилось! Позже я узнал, что надежность работы компьютера с магнитофоном зависила более от равномерности подачи ленты, чем от частотных характеристик трактов записи и воспроизведения... Это мне стоило раскуроченного участка платы, нескольких покореженных операционников и потери большого количества времени... Хотя с другой стороны у меня был веский повод пописать программы в машинных кодах, которые, как ни странно, работали: по экрану летала летающая тарелка, которая управлялась клавишами со стрелками... Как бы там ни было - узел компьютер-магнитофон был побежден. В дальнейшем у меня появился кассетный Маяк-240 с "памятью", а также я стал считывать данные не с линейного выхода, а с выхода усилителя мощности, подбирая громкость и тембр - это позволило довести надежность работы с кассетой до уровня, сравнимого с надежностью работы с дискетой. Возможно, что качественная работа магнитофона и наличие электронного диска в дальнейшем явились причиной того, что я так и не собрался делать контроллер дисковода, хотя все для него у меня имелось.
Имея несколько игр на кассете ("Марс", "Звездные войны" с Бураном, "Шахматы") и редактор с ассемблером начал постепенно осваивать компьютер. Знакомые тоже проявили интерес к играм (тогда это был единственный компьютер в нашем общежитии) - из журналов дружно набивали дампы "Пещеры" и "Зоопарка". Постепенно количество игр у меня увеличивалось. Основным моим "занятием" была борьба за вечную или как минимум долгую жизнь. Некоторые игры поддавались мгновенно даже спросонья, а с некоторыми пришлось и попотеть. Особенно сложно было копать программы большого объема, однако спасало то, что код у них обычно располагался в начале, а в конце - схемы лабиринтов и графика, благодаря чему я грузил отладчик прямо им в "тело" и затем спокойно копался. Большая "практика", невысокие возможности компьютера для отладки и простая система команд процессора привели к тому, что я улавливал код по дампу и часто даже не нуждался в отладчике (дизассемблером я вообще для этих целей не пользовался).
Однажды подвернулась программа "Небоскреб" - мой сосед по комнате не вылезал из нее и наконец объявил, что он ее прошел - это было предметом его огромной гордости...Я сказал ему, что пройду ее за час, и сел анализировать код. Не найдя никаких подходящих декрементов и вычитаний единицы, а также загрузки 5 (начальное количество жизней) я понял, что дело не просто... Тогда я нашел все места, где выводился звук. Повызывав эти места, я нашел место, где игрался похоронный марш - звук при потере жизни. Осталось только найти в программе откуда вызывалось это место - и там я обнаружил, что из какого-то странного числа вычитается другое странное число, и через 5 вычитаний результат становится нулевым. Заменив второе странное число на "0" я получил "вечную жизнь" и "без напряга" прошел небоскреб. Так или иначе - результат был достигнут минут за 40.
Параллельно я осваивал программирование: первые программы состояли из одной команды: сначала NOP, а затем - RET. Для меня это была бомба по сравнению с написанием программ в кодах! Одновременно я случайно узнал, что "Шахматы" внутри себя содержат "Бейсик" (отдельного у меня вначале не было) - "выдрать" бейсик оказалось несложно. Однако поработав с ним я сразу же столкнулся с его недостатками: мантисса 6 цифр, не было возможности использовать целые числа с меньшим расходом памяти, отсутствовал способ сохранения и загрузки данных (для решения последней проблемы я даже разработал самодельную внешнюю программку). Также скорость работы интерпретатора была существенным минусом: однажды я написал на бейсике игру "Эволюция", которая выводила поле в текстовом формате... Понаблюдав за медленно сменяющимися экранами, я тут же написал такую же на ассемблере - здесь жизнь уже просто "кишела"!
В варианте ПК "Специалист", который у меня был, в качестве памяти использовались микросхемы 64Кх1 565РУ5, 16Кб из которых перекрывалось адресами ПЗУ и портов. Отбросив 12 кб видео ОЗУ от адресного пространства в 48 кб мы получим 36 кб - память, которой мы пользуемся. На этом фоне 16 кб, "гуляющие" в скрытой области ОЗУ - огромная роскошь! Нужно было обязательно добраться до этой страницы!
Несмотря на то, что у меня не было полной схемы компьютера, я постепенно начал понимать как он работает (схема, которую мне дал один знакомый, была неполной не хватало нескольких частей, а от исходной "журнальной" схемы было несколько незначительных отличий). В схеме использовался дополнительный коммутатор адресов КП2. Как я догадался, этот "лишний" коммутатор предназначался для возможности замены "битой" страницы 16 кб (при наличии таковой) на верхнюю неиспользуемую страницу, которая перекрывалась адресами ПЗУ и портов, и хотя схема работала неправильно, она позволяла заменять все нижние страницы одновременно на одну верхнюю, что навело меня на мысль о том, как к ней проще всего добраться. Но если я подключу эту страницу таким способом, то основная память станет недоступной, т.е. программа, которая должна будет общаться с этой областью памяти, должна быть в области ПЗУ... Так у меня появился программатор и две подпрограммы в ПЗУ - читающая и записывающая байты и блоки в новую область. Переключение данного диска решил выполнять с помощью свободного вывода системного порта ВВ55 - к нему подключил ключ на ЛА3, который также учитывал обращение процессора к РУ5 (открывание АП16). Заработало!!!! Однако когда я заполнил диск полностью и попробовал считать, то заметил, что конец блока испорчен. Оказалось, что при обращении к портам и ПЗУ ключи ОЗУ АП16 не открывались, однако адрес и сигналы чтения/записи передавались все равно - это приводило к тому, что при записи чего-либо в порты в смежные ячейки в верхней странице РУ5 записывался мусор. Это было мгновенно устранено другим аналогичным ключом на ЛА3, который блокировал прохождение сигнала записи, если не было обращение к РУ5, а заодно один из входов ЛА3 был выведен на кнопку, которой можно было вообще заблокировать запись туда, оставив возможность только чтения.
Итак, "диск" есть, но как им пользоваться? Тогда я не решился сразу написать некую даже примитивную дисковую ОС для этого диска, а пошел сначала по более простому пути: составил программу, которую записал в ПЗУ, составил 16 кб блок из программ: редактор "Микрон", ассемблер, дизассемблер, отладчик, программатор ПЗУ и корректор дампа, и записал этот блок на кассету. Теперь, начав работать с компьютером, я загружал этот блок с магнитофона, а затем перегонял его в верхнюю память, после чего блокировал туда запись. Теперь мне не нужно было после каждого зависания компьютера мотать пленку на магнитофоне, загружать то редактор, то еще чего - все это было доступно из электронного "диска" немедленно - нужно было только запустить программу из ПЗУ и нажать нужную цифру. Подключение электронного диска индицировалось дополнительным светодиодом, что вносило определенный шарм. Наличие блокировки записи вместе с уникальной схемой компьютера "Специалист" не позволял обычным сбоям повредить информацию на электронном "диске", что сделало работу комфортной и эффективной.
Первая моя клавиатура была сделана из клавиш от сломаных настольных калькуляторов. Причем от нескольких, поэтому клавиши были разных цветов. Поскольку надписи у них были одинаковые - только цифры и знаки операций, я распределил кнопки по цветам. Надписи на клавишах мне было делать недосуг, тем более что я очень быстро запомнил расположение нужных мне символов, а затем, когда появился текстовый редактор - и всех остальных. Так я и печатал вслепую, удивляя несведущих, до тех пор, пока мне не подарили наклейки на клавиши.
Следующей клавиатурой была уже герконовая, сделанная из разобранной болгарской клавиатуры от неизвестной мне машины - комфорт был непревзойденным!
Решил я собрать еще один компьютер... Спаял более аккуратно, однако все равно он сразу не заработал. Но у меня уже был такой же работающий - как сравнить? Есть у меня кварц на 8 кгц. Когда-то в детстве я мечтал собрать часы с генератором на нем - от этой идеи сохранился делитель на 8000 из четырех счетчиков на картонке. Замечательно! К этому делителю я подпаял наушник и стал тыкать в испытуемую плату и в работающую, сравнивая звук. И нашел в одном месте различие, далее по схеме нашел короткое на плате, после его устранения компьютер сразу же заработал! Кроме того, позже при отладке я еще тыкал видеовходом от телевизора и сравнивал характер полос. Пошаговик также я собрал, но он мне особенно не помог, а также я написал программу, которая выдавала "тактовые" импульсы на свободной ВВ55 и одновременно собирала уровни с 16 входов, которые отображала в текстовом виде: "_" для "0" и "П" для "1". Эта программа уже не прижилась, так как сделал я ее уже под конец занятия этим делом, к тому же проблемы часто возникали именно при работе на нормальной частоте, а оценить фронты и уровни таким устройством было невозможно. Но что-то в ней такое все-таки было...
Как известно, оригинальный компьютер "Специалист" имел графику с 1 битом на точку. Цветного телевизора у меня не было, но красивые картинки в книжках и журналах возбуждали желание иметь хотя бы 2 бита на точку для передачи градаций серого. Схема "цветной" доработки из журнала меня не устроила - цвет задавался на весь байт - на 8 точек сразу, а не на каждую точку индивидуально. Первым моим экспериментом была попытка смешать видеосигнал от двух компьютеров. Это мне удалось: со второй платы снимался кварц и туда подавались тактовые импульсы с первого (главного) компьютера - это позволяло синхронизировать компьютеры, а совмещение картинки выполнялось схемой сравнения - на входы ЛП5 (исключающее "или") подавались кадровые синхроимпульсы с обеих плат, а выход коммутировал подачу тактовых импульсов с главной платы на ведомую, таким образом за пару первых кадров (т.е. незаметно) платы синхронизировались - результат был получен. Однако у меня не было программного обеспечения для рисования на соответствующей "технике", и система была разобрана.
"Родной" загрузчик компьютера "Специалист" после сброса ожидал загрузки программы с магнитофона. Обычно это было неудобно при наличии Монитора в ПЗУ - требовало лишних нажатий клавиш, поэтому загрузчик часто корректировался для немедленного запуска Монитора сразу после рестарта. Я тоже не был исключением, однако вскоре я столкнулся с ситуацией, в которой данный алгоритм оказался очень удобным.
Постепенно у меня накопилось несколько рабочих плат, однако у меня был только один телевизор и одна клавиатура, но мне хотелось попробовать использовать "простаивавшее оборудование". Но как связать компьютеры между собой? Конечно, лучшим вариантом был бы параллельный канал через дополнительный порт ВВ55, однако для этого нужены были шлейф, распайка разъёмов, написание программы, отладка... А мне хотелось побыстрее. И тут меня посетила мысль: за 5 минут был изготовлен перекрестный шнур из трёх проводов - всё, что было нужно для соединения магнитофонных выходов двух компютеров с противоположными входами. На этом аппаратная часть была закончена, осталось только написать программную. Теперь, после сброса ведомого компьютера, в котором стоял "родной" загрузчик, в него "записывалась" и автоматически запускалась программа, которая выполняла связь с ведущим компьютером, считывая команды с "магнитофона", роль которого и выполнял ведущий компьютер.
Правда, реального применения этому я не нашел, для теста ведомый компьютер пересылал в ведущий содержимое своего ПЗУ, но это уже была "локальная сеть" за 5 минут. Также этим способом я пользовался для быстрой пересылки программ с одного компьютера в другой, когда в дальнейшем работал с "Радио-86РК.
Постепенно я разжился еще двумя ПК: "Радио-86 РК" ("Согдиана") и "Львов ПК-01".Несмотря на меньшую производительность и отсутствие точечной графики у "Радио-86РК" меня впечатлила скорость работы ПК в текстовом режиме - "Специалист" выводил текст значительно медленней, вырисовывая символы, тем более что ради 64 символов в строке 3/4 символов перекрывали соседние байты, из-за чего приходилось выполнять сдвиги и наложения, что еще более замедляло вывод текста на экран. Кстати, "Оконный монитор" для "Специалиста" имел режим 48 символов в строке со знакоместом 8х8 бит - вывод текста в этом режиме был ощутимо быстрее, однако все равно уступал "Радио-86РК".
У "Львова" имелся встроенный, довольно хороший Бейсик и формат записи на ленту, несовместимый с Радио-86РК и Специалистом, что не позволило легко организовать их эффективное взаимодействие. Экран 256х256, вылезающий за края и так уже суженного экрана телевизора, программный бордюр и 24 символа в строке вызывали отрицательные эмоции. Однако архитектура его меня очень привлекла: полное использование 64кб ОЗУ, доступность всех нижних 48кб. Использование контроллера шины ВК28 позволяло разделить адресацию памяти и внешних устройств. Все шины были выведены на разъем, что позволяло в случае необходимости легко расширить конигурацию. Приятной была тактовая частота у процессора - 2.22 МГц. Что меня несколько удивило в этой довольно грамотной машине - одна из микросхем ПЗУ была полностью записана нулями - я так понял, что это результат работы разработчиков ПО, так как контрольные суммы ПЗУ индицировались автотестом как нормальные.
В общем, эти два ПК отправились на полку с вероятным использованием в будущем (правда, пока оно не наступило).
Также довольно поздно я узнал о существовании компьютера "ЮТ-88" из попавших ко мне журналов. Вживую я его не видел, но думаю, это была очень хорошая задумка, так как крайняя аскетичность базового варианта должна была быть более легкой в изготовлении и отладке для начинающих.
За окном господствовал "Спектрум" со всеми своими клонами, а "Специалист" уходил в забытие - практически невозможно было с кем-то посоветоваться или обменяться опытом. Но у этого влияния были и хорошие стороны! Какие-то знакомые знакомых моих знакомых поотдавали мне сначала пустые, а чуть позже даже две собранные работающие платы. Однажды я, будучи на рынке, купил три пустых платы (1 "Специалиста" и 2 "Радио-86РК") практически за бесценок. К продавцу я применил железный аргумент: "Кроме меня их у вас никто не купит!.." Подействовало.
Посещали ли меня мысли о сборке "Спектрума"? Конечно! Я даже обзавелся процессором, парой схем и даже платой. Ознакомившись с возможностями процессора Z80, я естественно позавидовал, однако к тому времени уже кое-чего понимал в схемах. Посмотрев те, что у меня были, я обнаружил, что процессор тормозится видеоконтроллером, т.е. преимущества в частоте снижались, каких-либо других преимуществ в схеме я не заметил. Поработав на 40-кнопочной клаве с интеллектуальной сменой режимов, я ощутил себя роботом.. Цвет меня не интересовал, так как у меня был только черно-белый телевизор. Однажды один знакомый гордо показал мне редактор для паскаля для "Спектрума" с подсветкой синтаксиса, у которого к тому же еще было 64 символа в строке, но увидев шрифт 3х7 я прослезился. Он был очень удивлен, когда я ему сказал, что 64 символа в строке - обычный режим для "Специалиста". Одно время я мечтал заменить 580ВМ80 в "Специалисте" на Z80, но на последний у меня не было диаграмм работы шины, поэтому я не решился, а готовой схемы замены у меня не было.
Может показаться, что я противник "Спектрума" - это не так. На меня хорошее впечатление произвел его вариант "Робик" - хороший дизайн, герконовая клавиатура. Просто я в нем не увидел каких-либо преимуществ по сравнению со "Специалистом". О том, что на "Спектрум" имеется большое количество ПО я, конечно, знал, но в те годы я не придавал этому особого значения. В последствии я выменял "Спектрум", правда, ни разу еще его не включал - так он и ждет на полке своего часа.
Также была у меня мысль собрать клон IBM PC, но мысль не реализовалась - сохранились только полусобранные платы. Меня отговорил один знакомый - сказал, что это будет еще один "Специалист", только чуть круче. Я и сам это позже почувствовал.
Не могу не отметить компьютер "Арго", который я чуть было не купил. Делали его в Киеве. Центральный процессор - Z80. Память -128К. Графика - не помню параметров, но в тексте выдавал 80 символов в строке. На борту имел только 2К (?) ПЗУ с загрузчиком, но умел эмулировать "Спектрум" (загружался программный эмулятор), а также для него была версия СР/М-80, и была возможность автоматической работы с магнитофоном (требовалась возможность электронного управления и импульсы от счетчика) - кассета сначала "форматировалась", а затем запись и чтение производились автоматически поблочно. Все это я узнал из руководства к ПК, но покупать его не стал, так как это было в комиссионном магазине, и кассеты у них не оказалось. Также не было и принципиальной схемы.
Однажды грязь, скопившаяся на плате компьютера, вывела меня из себя - я отсоединил провода, вынул микросхемы, которые стояли на панельках, и отнес плату на кухню, где на глазах ошарашенных иностранных студентов тщательно вымыл ее в раковине. После просушки на плате проступили белые пятна, и работать она не стала. Тогда я взял одеколон (спирта не было под рукой) и тщательно протер плату тампоном. Плата согласилась поработать, и работала после этого еще много лет, напоминая мне об одеколоне каждый раз, кода мне нужно было на ней попаять.
Также никогда не забуду непредвиденный краш-тест для своего ПК. Ехал я, значит, из дому, после зимних каникул. Уже подходил к общежитию, да вот беда - подскользнулся и упал... Вроде бы ничего необычного, да только в одной руке была большая сумка с трехлитровой банкой, в другой - тоже большая сумка, с маленьким телевизором внутри, а на спине - рюкзак с компьютером. На него то я и упал, подняв руки кверху... В общем, все обошлось - никто не пострадал, все осталось целым. Вот что значит корпус из фанеры!
С источниками питания у меня всегда были проблемы. Обычно они жутко грелись, но при этом сохранялись пульсации, с которыми я боролся обилием конденсаторов на плате. Как-никак, серии 155 и 556 не отличались низким потреблением. И хотя сам ПК работал достаточно надежно (к тому же, я и питание держал на уровне 5.5 вольт), то на экране телевизора я наблюдал плывущие волны, что меня очень смущало. Однажды я применил очень простое решение: на одной микросхеме 155ТЛ2 "собрал" три повторителя, подал на них цифровые сигналы кадрового и строчного синхроимпульсов и видео, а на выходе собрал смеситель, аналогичный тому, что имелся на плате. Микросхему запитал через маленький дроссель, повесив на нее отдельный конденсатор - с тех пор я забыл, что такое волны на экране...
Интуитивно я чувствовал, что ПК "Специалист" можно улучшить: добавить памяти, новые порты, и т.д., и сделать это несложно. Однако куда все это лепить? О том, что такое "микросхемы верхом" я уже знал, но это явно был не выход. К созданию плат своими силами у меня не было никакого желания, да и опыта не было. И здесь мне пришла в голову интересная мысль: все, что нужно было сделать на плате расширения, уже было на плате ПК, а пустые платы для "Специалиста" у меня были. Сказано - сделано. Взяв собранную работающую плату, я прикрепил к ней пустую, где впаял РУ5, а на места для ПЗУ - статическую память 537РУ10. Также установил туда дополнительный порт ВВ55, на который перенес переключение банков памяти, а также разместил несколько микросхем, которые участвовали в коммутации. После этого адресные шины РУ5 основной платы соединил с аналогичными дополнительной, а также подключил КМОП память дополнительной платы к ПЗУ основной.
С помощью дополнительной коммутации сократил адресное пространство, которое выделялось портам, с 4 кб до 256 байт. Это позволило добавить две дополнительные микросхемы РУ10, которые постоянно находились подключенными, занимая 4 кб - 256 байт вершины адресного пространства - они в основном и использовались для программ, выполняющих пересылку данных между банками памяти. Как и первый 16 кб диск, новые электронные диски имели блокировку от записи, включающуюся переключателями на клавиатуре. В общем, аппаратно машина получилась более мощной по сравнению с базовым вариантом, но не хватало ПО для использования новых возможностей. Но на него так и не хватило времени.
Возможность замены ПЗУ на КМОП ОЗУ позволило мне использовать другие мониторы и загрузчики, из которых более всего понравился "Оконный монитор". Работа монитора в ОЗУ позволила его быстро подкорректировать - у него были изначально некоторые недостатки эстетического характера. Также перетрансляция отладчика для работы его из верхнего адресного пространства позволила комфортно отлаживать большие приложения, находясь "вне" их.
Одной из нереализованных возможностей этого компьютера было получение двух бит на точку. Так как два банка РУ5 сканировались параллельно, можно было одновременно получать бит изображения как из основной области памяти, так и из параллельной. Но во время переезда этот компьютер был поврежден, и его я так и не восстановил...
О Форте я узнал довольно давно, особенно увлекли меня книжки "Язык программирования ФОРТ" и "Построение экспертных систем". Форта у меня не было, но о его возможностях я догадывался по опыту калькулятора Б3-34, язык программирования которого можно было бы назвать вариантом Форта. По окончании института, когда я уже имел 386 машину, в мои руки попал замечательный GP-FORTH, который я изучал в отладчике, еще не имея опыта программирования на ассемблере х86. Но это был в начале просто интерес.
Попав далее на работу в село, я снова остался с моим "Специалистом" - 386-ю машину, которая стоила "бешеные" деньги, было решено оставить дома у родителей. Однако по работе мне частенько было нужно сбивать всякие циферки, и делать это на калькуляторе, имея рядом компьютер, было обидно. Однако решать такие вопросы на ассемблере, который не поддерживал ни макросы, ни определения структур, и так далее, о чем тогда я даже не знал - было крайне сложно. Решать эти вопросы на Бейсике также не представлялось возможным, так как в нем не было средств для сохранения и загрузки данных, а поддержка только плавающего формата не позволяла мне создавать массивы необходимого размера.
То есть, мне нужен был язык программирования высокого уровня, помещающийся на моей машине, с возможностями, приближенными к ассемблеру. Было очевидно - все это можно было разрешить при помощи языка "Форт". Но где его взять?
В книжке имелся интерпретатор языка "Форт" для 8086 процессора, однако в этом ассемблере я плохо разбирался, поэтому просто "переложить" на 8080 мне не удалось. Хорошую службу мне сослужили описание адресного интерпретатора из GP-FORTH и экскурс в структуру Форта в книжке по созданию экспертных систем, но ключевую роль сыграла статья в одном журнале - ничего нового я из нее не узнал, но там была фраза: "При определенной усидчивости интерпретатор Форта может написать даже школьник". Это меня задело - чем я хуже школьника? И я засел...
И у меня получилось! Правда, его я так и не закончил - на это имелись разные причины. Во-первых, первым "тормозом" было то, что закончился отпуск. Далее были причины посерьезнее: Редактор "Микрон" с ассемблером, которым я пользовался, имел буфер для текста 20 кб и буфер для кода - почти 4 кб. Проблемы начались, когда текст стал достигать границы буфера - приходилось расширять его, выискивая и меняя адреса в коде редактора и ассемблера, а также я удалил все коментарии, минимально использовал пробелы, чтобы максимально сократить текст. Уже подумывал о том, как разделить проект на соединяемые блоки. В конце концов, моя деревенская эпопея кончилась - я пересел вновь за свой 386 и начал познавать FoxPro...
Тем не менее, код Форта достиг 3 кб, интерпретатор работал исправно, только не было еще слов для компиляции, создания ветвлений, циклов и прочих высокоуровневых, которые на самом деле не были сложны, но у меня уже не было достаточно времени для занятия этим делом. Новые слова уже можно было создавать словом CREATE.
Главной проблемой, которую я решил за пару дней и которой очень гордился, была процедура деления 32-битного числа на 16-битное. Без нее я даже не мог распечатать десятичные числа, а это для меня было обязательным условием - ведь я планировал считать статистику. Эта процедура использовала все регистры процессора, включая вершину стека. Даже бит результата временно сохранялся во флаге переноса. Правда, впоследствии я обнаружил, что она корректна только для 15-битного делителя, однако для операций с 16-битными знаковыми числами, которые предварительно превращались в 15-битные беззнаковые, это ограничение становилось малосущественным. Процедуры умножения я тогда взял из журнала МПСС ("Микропроцессорные средства и системы" - хороший был журнальчик, особенно поначалу).
Программа беззнакового деления 32-битного числа на 15-битное:
MVI A,33
UDM1: DCR A
JZ UDM6
XCHG
DAD H
XCHG
RAL
XTHL
DAD H
RAR
JNC UDM2
INX H
UDM2: XTHL
DAD H
RAL
JNC UDM3
INX H
UDM3: ORA A
RAR
PUSH H
PUSH PSW
MOV A,L
SUB C
MOV L,A
MOV A,H
SBB B
MOV H,A
JNC UDM4
POP PSW
JC UDM5
POP H
JMP UDM1
UDM4: POP PSW
UDM5: INX SP
INX SP
INX D
JMP UDM1
UDM6:
И хотя мне не пришлось применить Форт на практике, я до сих пор считаю, что если нужно иметь язык высокого уровня для машины с малой памятью, причем на этой же машине придется и программы писать на нем, да еще желательно и операционную систему минимальную, да еще и железом управлять - лучше Форт-системы в этом случае ничего не придумаешь.
FORTH, который удалось считать с кассеты и даже портировать на FASM, можно посмотреть здесь.
Работая на "Специалисте", я ощущал потребность в расширении его свойств. Основными пожеланиями были:
В принципе не много. Но "Специалист" этого не позволял, даже расширенный. Хотя по частям все это позволяли другие ПК, которые я имел. Было решено "скрестить" несколько одноплатных компьютеров в один, имея возможность программно переключать экран и клавиатуру, а также возможность взаимного управления и передачи данных. Архитектура виделась таковой:
Под это дело я даже успел сделать шасси... но - даже не суждено было появиться наметкам схемы по причине пересадки на 386 ПК... Ну что ж, по крайней мере идея была, полагаю, неплохая.
Сейчас я не пользуюсь "Специалистом" и его "братьями" и "сестрами", но храню то, что от них у меня осталось. Конечно, время, сырость и пыль гаража имеют силу над ними - не все можно восстановить, но потенциал, хранящийся в коробках, тетрадках и папках позволяет в нужный момент вернуть эту технику к жизни за короткое время.
Какой смысл? Смыслов много, все перечислить трудно. Как минимум, в наше время, "ненасытное" к гигагерцам и терабайтам иногда хочется столкнуться с чем-то простым и насквозь понятным, вроде велосипеда или коромысла. Например, с ПК "Специалист"...