Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 
Показаны сообщения с ярлыком ЛИК. Показать все сообщения
Показаны сообщения с ярлыком ЛИК. Показать все сообщения

воскресенье, 19 января 2025 г.

В каком состоянии мой Эмулятор ЛИКа

Привет мир! 

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

Ссылка на Github

Предыдущие посты по теме ЛИКа

среда, 25 января 2023 г.

Моя версия эмулятора ЛИКа - или почему инженеры делают то, что делают

Мой герой - инженер. Именно ботаны двигают этот мир вперед. 88й год, бытовой самодельный компьютер "Специалист". Небыло не то что "войти в IT" небыло вообще никаких "интернетов" (разработка той самой Всемирной Паутины Веб, или сокращенно WWW, началось годом спустя в 89м). Небыло никакой какой-либо комерческой выгоды. Но у уважающего себя инженера дома был бытовой компьютер (БК), собранный собственноручно по схемам из журналов Радио. Потому что мог. Спасибо Папе, что привил мне любовь к этому делу. (на видео не мой Папа, но мой был таким же чудным).

Поделюсь своей историей, которую хочется продолжать. Если я уйду когда-нибудь из IT, то из кодинга оставлю себе мой ЛИК и все, что с ним связано. Сейчас я пишу эмулятор, делаю реверс инжиниринг реального компа, который совсем недавно попал мне в руки. Делаю это все со скоростью улитки, смакуя каждый момент. Как та вкусняшка, которую хочется есть самой маленькой ложечкой, растирая языком по небу каждый новый кусочек. Конечно на любой проект нужно время, а его как всегда мало. Но даже если бы его было в избытке, мой первый компьютер - штука особенная. Это то, что возвращает магию.

Первым компьютером у меня был Синклер. И конечно же Синклер этот использовался для игр. Их было очень много. Даже в эпоху Дэнди у меня (и всех до кого я мог дотянуться) небыло столько картриджей. Ко мне домой приходли мои одноклассники. Мы все первоклашки. Какая домашка? Мы играли каждый день после уроков. Я был крут. У меня дома было что-то, что ни у кого небыло. Напомню, это были 90е. 1992 год, кажется. И конечно же я успешно забил на учебу. Оценки упали. А Синклер был продан. Травмирующий опыт. Была игрушка и ее забрали. Не делайте так родители, никогда.

Вторым моим компьютером был ЛИК. Производства Черновицкого завода Электронмаш. Чернобелый. С маленьким пузатым экраном. Тоже с записью на магнитофон (чуть позже покажу как звучала эта музыка байтов). И конечно же первым делом этот бытовой (как его называли) компьютер использовался мной для игр. Папа по выходным осваивал встроенный Бейсик. Первая его программа - нарисованный герб Украины. А я игрался. Игрался, пока качество кассетной записи не худшилось настолько, что воспроизвести игры больше не получалось. Это было всеобщее горе.

Но ничего не поделать - компьютер есть, потребность ковырять его никуда не делась. Мы с Папой стали изучать Бейсик вместе. Очень скоро я превзошел Папу и пошел дальше. Началось все из того, что мне захотелось собрать коллекцию всех runtime-ошибок существующих в Бейсике. Но не все из них было понятно как достать. Только краткое описание в руководстве по эксплуатации давали хоть какие-то зацепки.


Как говорится: нифига не понятно, но очень интересно. Одни ошибки попадались чаще всего - 02, например. Другие все никак не поддавались. Так я изучил почти все функции языка и многие corner-кейзы их использования.

Оставалось всего несколько команд в бейсике, которые по моему были самые магические и непостижимые. Просматривая исходные коды игр на бейсике (а это был мой любимый квест, ведь столько всего можно узнать в чужом исходном коде работающей игры) я часто натыкался на эти команды и понимал, что за ними кроется все самое интересное - звук, красивая растровая графика, более удобный ввод/вывод. Они мне открылись не сразу. Все что я мог - менять циферки аргументов и смотреть как компу отшибает мозги, либо что-то происходит необычное. Использовать это повторно нельзя было. Magic одним словом. Но очень любопытно. 

Потом поломался и Бейсик. Он был записан в ПЗУ. И что-то там видимо перетерлось, т.к. контрольные суммы стали выдавать другое значение - что говорило мне о том, что ПЗУ накрылась. Где накрылась не понятно. Что с этим делать так же не понятно. Больно.

Ковырять чесалось. А потому мое внимание привлек раздел руководства по экплуатации, которое про встроенный ассемблер. Я понимал, что Бейсик - это интерпретатор языка более высокого уровня в машинный код. Я понимал, что процессор выполняет инструкции, которые записаны байтами в оперативной или постоянной памяти. Часть этих байт - инструкции, часть собственно данные. Время пришло.

В  понимании мне помогла директива дизассемблирования. Она магическое шестнадцатеричное число приводила в чуть более осмысленный код. Но по прежнему этот код ни о чем не говорящий. Создать их каталог была моя задача. С этого начинается любое исследование. Там же я заметил первые закономерности. Старший байт, младший байт. Регистры. Запись/чтение в память. Руководство давало не очень подробное, но все же какое-то объяснение.
Если ты когда-то смотрел/а фильм Прибытие. Все было именно так. Встреча с пришельцами инопланетянами говорящими на непонятном языке. Они пришли что-то мне дать. Что именно - я должен разгадать. Каждый день я просыпался и все, что хотел - еще немного поговорить с ними. Я делал это весь день и пол ночи. Отвлекаясь только на еду и сон. Это был 5й класс школы на секунду.

Фильм кстати очень рекомендую для многократного пересмотра. 

Разбирая команду за командой, вскоре не осталось ни одной команды, которую я бы не понимал. Ассемблер оказался куда проще и грандиознее, чем бейсик. Я писал свои программы. Отлаживал их. Писал инструменты для написания программ и их отлаживания. Отлаживал эти инструменты. Обрастал кодом. Как положено.

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

Первая игра конечно же Клад. И она считалась. Вторая игра. Считалась. Третья. Считалась. Все, что я не пробовал - все считалось. И работало. С любой из 20 кассет, в любом месте что ни брал - все считывалось без ошибков. Напомню, к этому времени на кассетах почти ничего не читалось, т.к. их качество оказалось ужасное и мы с Папой пропустили момент когда надо было переписать на новые. Конечно же я не мог дождаться возвращения Папы с работы. Он плакал. То ли от гордости за меня, то ли за вторую жизнь всем нашим наработкам. Он так и не сказал, но где-то тут я четко понимал, что уже взрослый я, а ребенок он. Мы всю ночь переписывали все игры на новые кассеты. Все восстановили. С тех пор я знаю. Как бы безнадежным не казалось дело - пока есть с чем работать, информацию можно восстановить.  

Так как у меня появились новые-старые игры. Я начал их изучать. Это было не просто. Но постепенно они открывали свои шестнадцатеричные секреты. Подпрограммы Загрузчика. Подпрограммы Монитора. Разные полезные штуки вычлененные из игр. Самая моя большая гордость - это додебажиться до той процедуры, которая отвечает за звучание кринжового голоса говорящего "BUDY" во время заставки одноименной игры. Удаление всего лишнего, так что остается всего 25-30 байт кода. И реализация на основе этого кода диктофона. Мой комп превратился в диктофон, где секунд 5-7 звука записывалось из микрофона в 48 килобайт оперативной памяти. А потом это все RAW воспроизводилось на динамик. И затем снова перезаписывалось с микрофона. Качество конечно было неахти, но все было слышно. После этого я понял - что могу все. Вот прям все.

Затем мой комп поломался вовсе. И я остался с паяльником. Погрузился в мир логических элементов и строил разные примитивные схемки. Читал про моделирование компьютера подобного моему в книге. Паял много. Запах канифоли в носу как сейчас. Светил светодиодами. Обжигал пальцы. Пока не увлекся Химией в 9м классе. 

Конечно я хотел вернуться в эти воспоминания. Я долго искал возможности приобрести компьютер ЛИК. А тем временем я пытался по фоткам плат, доступным схемам сделать свою реплику. Об этом кстати писал в блоге тоже.

Только в позапрошлом году мне удалось на форуме таких же инженеров ценителей ретро компов как и я купить один. 7 лет я за ним охотился. И наконец-то он у меня. Я смотрю на него, он смотрит на меня. Паяльник я уже купил. Скоро он откроет мне все свои тайны. Осцилограф только надо освоить. И купить перед тем.

Был период погружения в уже существуюшие эмуляторы один из которых позволил поиграть в мою любимую игру Клад.

А еще год назад я нашел вот тут эмулятор Специалиста (старший брат ЛИКа) написанного на джаве. Он был переделан из эмулятора Синклера, о чем и как Автор интересно пишет на страничках форума. И пару недель рефакторингов (о которых обязательно расскажу позже, т.к. есть и тут чем похвастать) и я пришел к своему очередному pet-проекту эмулятору ЛИКа

Первый запуск старого кода. Запуск на этом коде ПЗУшек ЛИКа. Исправление команд, т.к. изначально использовался Z80 (синклер) вместо i8080 (ЛИК). Успешный запуск Бейсика. Отладка команд на Экзорцисте. Запуск игры Клад. Оптимизация видео. Адаптация клавиатуры. И много много юнит и интеграционных тестов.

А вот всего неделю назад я достал тот самый бит информации из недр моего эмулятора ЛИКа и услышал звучание нескольких моих любимых игр. Я до сих пор помню эти мелодии. Я их столько раз слышал в детстве на магнитофоне. Каждый раз, когда ты хотел поиграть в любимую игру - надо было прослушать ее на магнитофоне. Иногда несколько раз, пока не загрузится без ошибок. Все помню. До мурашек. Послушай как звучит моя любимая игра Клад.

В туду еще много всего. Кому это нужно? Да никому. Может быть кто-то еще через 10 лет наткнется на мои наскальные рисунки и порадуется им так же как и я. 

Я точно знаю, что сделаю реплику. Я точно знаю, что дизассемблирую и разберусь в том, как устроена игра Клад. И напишу пару своих уровней. Я точно знаю, что разберусь со звуком (над ним сейчас работаю) и он не будет звучать кринжово. И много всего, что еще придет в голову в процессе.  Ведь самураю не нужна цель. Только путь.

Почему? Потому что могу.

пятница, 10 августа 2018 г.

Реверсинжиниринг БК ЛИК

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

Я начинал свой путь с модификации Специалиста - Лик, разработанного Черновицким заводом "Электронмаш" в Украине. 

На данный момент у меня есть желание систематизировать все, что накоплено по этому чудному радиоконструктору дабы оно находилось в одном месте. Буду обновлять этот пост новыми новостями. 
  1. Мануал о том, как быстро запустить любую игру с помощью эмулятора Виктора Пыхонина.
  2. Архив программ для ПК "Лик". Прислан А.Болтаевским. Инструкции по запуску в эмуляторе Специалиста в самом архиве. Взято тут
  3. Прошивки ПЗУ для "Специалиста" (9(!) разных Мониторов) в том числе и "ЛИК". Взято тут
  4. Архивы игровых программ для "Специалиста" (они так же подходят для ЛИКа) раздватричетыреВзято тут
  5. Руководство пользователя ПК "Лик" взято так же у Виктора Пыхонина
  6. Подборка программ для ЛИКа от Александра Болтаевского
  7. Описание на Википедии
  8. Краткий обзор Лика со схемой, руководством и фотографиями
  9. Еще одна подборка программ и игр для ЛИКа: раздватри взятые тут
  10. Радиоконструктор "Бытовое электронно-вычислительное устройство ЛИК". Руководство по эксплуатации ДАЯ 4.075.005 РЭ содержащее схему в хорошем разрешении
  11. Схема ЛИК из этого руководства, отдельно в максимально найденном разрешении
  12. Описание применения. Руководство оператора. Руководство программиста. Скан-черновик лежит тут
  13. Фотографии в хорошем разрешении (спасибо xlat) лежат тут
  14. DipTrace схема. Я уперся в ограничение на некоммерческую версию в 2000 контактов, а потому она завершена всего на 98% - не подключены 3 ПЗУ'шки и логика в части контроллера ввода-вывода. Тем не менее схема будет лежать и обновляться тут, а вот и компоненты используемые в проекте.
  15. Некоторые исправления ошибок, выявленных в ходе перегона схемы в DipTrace. Внимание, так как проект на стадии разработки, я уверен что на каждой схеме (и моих исправлениях) накоплены ошибки, которые планируется в ходе "реверсинжиниринга" исправить. Это значит, что наработки вы используете на свой страх и риск - "как есть", без каких-либо гарантий. 
  16. Так же нашел чудную фришную программу Logisim в которой можно изучать логику работы различных схем. Напиcана она на java и запускается одним кликом по jar после установки Java (JDK или JRE) последней версии. Я только начал в ней глубже исследовать схему - и она будет лежать и обновляться тут. В этой же папке есть пару скриншотов для наглядности и сама программа.
  17. Подборка всего, что было найдено за 2 бессонные ночи в одном месте (постоянно обновляется) на случай креша тех или иных сайтов. Жаль, но многие сайты уже не работают - их можно найти только в вебархиве и то не полностью, потому я позволил себе сохранить то что касается ЛИКа в отдельном месте.
Из дальнейших планов:
  1. Найти по сарафану в Черновцах образец ЛИКа и сделать реверсинждиниринг по печатной платы - инфы о ней кроме как схемы и расположения элементов и 2-3 фоток в сети я не нашел, и то пришлось вложить в это 1 ночь.
  2. Так же стоит устранить неточности в документации, которые я еще в школьном возрасте выявил и предложить оцифрованный и более современный формат.
  3. После хочу собрать этот компьютер собственноручно (радиодетали уже заказаны и в пути).
  4. Следом хочу реализовать программатор и сделать копии ПЗУшек, которые у меня остались с тем, чтобы навести порядок в этой области (ROM для эмуляторов есть, но не факт что оригинальные).
  5. Так же игрушки и программы - все будут собраны в одном месте.
  6. Хочу так же реанимировать все, что у нас сохранилось на кассетах (я их хранил последние 15-20 лет).
  7. Есть в тетрадках некоторые заготовки, которыми могу и хочу поделиться. Мелочь, но тоже пригодится.
  8. Так же у меня начат эмулятор на java его хочется продолжать и закончить просто потому что "можется".
  9. Что всплывет по ходу дела так же скорее всего захочется реализовать.
Конечно же время на это не океан, но это проект для души, а потому он будет регулярно пополняться самым ценным активом. 

Что касается сборки. Микросхемы уже приехали. Приобрел 4 комплекта прозапас. 
Ищу кто бы мог продать/подарить/позаимствовать ЛИК дабы я мог аккуратно изучить печатную плату и дорожки. Было бы минимально достаточно, если бы кто-то из числа счастливых владельцев ЛИКа сфотографировал(а) бы мне обратную сторону платы и переднюю сторону платы (эту сторону с максимально различных ракурсов). Цель - максимально подглядеть расположение дорожек. А если у кого-то есть не паянная плата - отсканировать ее было бы пределом мечтания.

Из следующих шагов: 
  1. Закончить схему в DipTrace
  2. Развести дорожки в DipTrace максимально приближенные к оригиналу
  3. Продолжать исследовать логику работы в Logisim
  4. Максимально отдебажить проект, выявить очепятки и попробовать собрать первую версию
Спасибо за интерес к теме. 
Чего-нибудь неожиданно-приятного нам. 

P/S/ Для любителей игры Клад, в нем есть одна хитрость. Если запускать программу с J0000 с последующим ресетом и далее с J4567 то можно будет сразу стартовать игру со следующего уровня, на котором играли в прошлый запуск. Reset Монитора и очередная команда J4567 запустит уже очередной уровень. Подобрано "патологоанатомом" школьником опытным путем с мыслью "а что если..." в ходе очередного "там там тадам там тадам тадам тадааам"...

Steps to reproduce:
  1. Reset
  2. Загрузить игру в память любым способом (Alt-F3 или I= в http://emu80.org эмуляторе)
  3. J <ВК>
  4. Видим заставку
  5. Reset
  6. J3456
  7. выбираем скорость игры
  8. загрузился уровень 1й - играем
  9. если надоело, Reset
  10. J3456
  11. выбираем скорость игры
  12. загрузился уровень 2й - играем
  13. если надоело, Reset
  14. goto 7)

воскресенье, 28 февраля 2010 г.

Кто помнит Черновицкий "Электронмаш"? Кто помнит Бытовой Компьютер "Лик"? Кто помнит игру "Клад"? Я знаю как вернуть молодость!

Привет. Сегодня мне хочется поделиться опытом работы с эмуляторами совковых компьютеров на базе микропроцессора КР580ВМ80. С одного такого компьютера я начал путешествие в увлекательный мир программирования. Тогда я был в 6 классе. И это были самые бессонные ночи! :) Но наша задача сегодня не программирование, а игра. Запустим игру Клад и пройдем первых 3 уровня! Помнишь картинку?
Сейчас мы будем играть! Интересно? Читаем дальше...