Взлом карманного компьютера "Электроника МК-85"

Электроника МК-85 это советский карманный компьютер. Не калькулятор, не записная книжка, не бейсик машина. На нам можно программировать в машинных кодах. В компьютере установлен 16 битный процессор с системой команд PDP-11, процессор работает на частоте 2 МГц. В компьютере установлено ОЗУ объемом 2 или 6 килобайт, жидкокристаллический экран 60x7 точек, в ПЗУ объемом 32 Килобайта записан Бейсик, калькулятор и какие то неинтересные нам программы. Компьютер может работать в режимах: экономии и турбо. В режиме экономии компьютер потребляет до 20 мВт и может работать от аккумулятора от 80 до 220 часов.

Всё это очень здорово. Расстраивает только одна мелочь. Подключить МК-85 к компьютеру или каким либо внешним устройствам невозможно, так как у компьютера нет ни одного внешнего информационного разъёма. Проблема не в электронике, как раз в схеме компьютера предусмотрен внешний разъем, просто разъем не был установлен и разъем не был поддержан программно. Все (первые) программы и данные вводятся с клавиатуры и хранятся в памяти компьютера, пока не разрядится аккумулятор.

С одной стороны, работать на таком маленьком экране 60x7 точек неудобно, с другой стороны, это был самый доступный карманный компьютер в СССР. Он поступил в продажу в 1986 году и стоил всего 145 рублей. Это было дешевле любого компьютера.

Компьютер выполняет программы на Бейсике и хоть это было не предусмотрено разработчиками, но еще и в машинном коде. Запуск собственного машинного кода стал возможен благодаря ошибке в подпрограмме обработки нажатия кнопки [AC]. Если во время выполнения команды INPUT нажать клавишу [AC], а затем клавишу [EXE], то интерпретатор Бейсика сделает JMP на символ Бейсик программы следующий за выполнявшейся командой INPUT.

Чуть подробнее. Во время редактирования Бейсик программы нажатие на клавишу [EXE] приводит к запуску подпрограммы в машинных кодах по адресу сохраненному в слове памяти 8258h. Обычно в этом слове находится правильный адрес и нажатие на [EXE] ни к чему плохому не приводит. Но если прервать выполнение команды INPUT нажав кнопку [AC], то в ячейку 8258h адрес нужной функции не записывается. Во время выполнения программы эта ячейка используется для хранения временных переменных. Функция INPUT там сохраняет адрес следующей команды Бейсик программы. Разработчики сэкономили 2 байта, но чего то не учли.

А теперь кратко. Пишем в программе «1 INPUT», а дальше вводим машинный код. При запусе программы нажимаем [AC], [EXE].

Традиционно, первая программа, которую пишет каждый программист, начиная изучать новое железо или новый язык программирования это программа, выводящая на экран текст “Hello World”.

Вот пример такой программы. Программа написана начиная с адреса 826Bh, потому что это это адрес программы P0 в памяти компьютера. Эту программу надо вводить как программу P0, как обычную программу на Бейсике. Первая проблема написания программы в машинных кодах в том, что не все нужные символы можно ввести с клавиатуры. Вторая проблема в том, что получившаяся каша должна быть похожа на Бейсик программу, что бы компьютер сохранил её в своей памяти.

2020-09-29-14-40-15

Символы вводимые в английской раскладке клавиатуры обозначены черным цветом, в русской раскладке обозначены красным цветом, графические символы обозначены зеленым цветом, команды Бейска обозначены синим цветом. Будьте предельно внимательны при вводе, некоторые русские и английские буквы неразличимы на экране компьютера, но имеют разные коды.

Для запуска программы введите RUN. Когда команда INPUT предложит ввести значение с клавиатуры, нажмите [AC]. После того как дисплей очистится и снова появится курсор, нажмите [EXE]. Запустится введенная программа. На экране будет выводиться прокручивающийся текст «HELLO=WORLD!=». Остановить программу можно нажав клавишу [STOP], а затем [AC].

Шестнадцатеричный дамп оперативной памяти компьютера после ввода этой программы:

2020-09-29-14-41-33

Запущено на реальном железе.



Ну а дальше можно разработать программу загружающую любые данные с любого интерфейса.

Внутренности (кликабельно)





Схема. Все предельно просто.

2 комментария

avatar
Это Ваш экземпляр МК85? Неоднократно уже рассматривал возможность симулировать 1806ВМ2 на чем нибудь сильно мало потребляющем, либо stm32l либо msp430fr. Но памяти под переход на инструкцию нужно 64К как минимум. Эмуляцию через FPGA делал, но жрет это все адски! А так да МК85 привлекает до сих пор. На нем даже Пhинц Персии запускали :)) своеобразный конечно.
  • SAA
  • 0
avatar
Да, мой.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.