zHz00 Untitled

четверг, 06 июля 2017
23:59 Адресная книга
Обнаружил у себя в закромах родины собственноручно написанный эмулятор калькулятора МК-52 под калькулятор же МК-85. В виде листинга на пяти листах. Написанного от руки.

И вспомнил, как я его писал. Ещё в школе.

МК-52 -- программируемый советский микрокалькулятор. Он программируется в шестнадцатеричных кодах. Для их ввода можно воспользоваться клавиатурой, на которой написаны разные действия. Это помогает вводить программу и записывать на бумагу. На бумаге пишут, к примеру:

1 2 В↑ + С/П

Это значит, сложить 1+2 и закончить программу.

А в памяти (и встроенном просмотрщике программы) это отображается так:

50 10 0E 02 01 (читать надо справа налево)

МК-85 более крутой, он поддерживает Бейсик. Писать эмулятор на Бейсике извращение ещё то. Нет, место, где хранить программу в кодах -- есть. Вопрос, как её выполнять?

Допустим, в переменной D хранится код очередной операции. И её надо выполнить. Что же делать?

Логика подсказывает простой дедовский способ:

100 IF D=0 THEN ...
101 IF D=1 THEN ...

И тут меня ждала засада. В двух частях:
1. В МК-85М всего 5317 байт (!) памяти. Да, бейсик представляется в байт-коде, т.е. каждое ключевое слово идёт как 1 байт. Но всё равно памяти мало.
2. Скорость выполнения программ будет просто умопомрачительной, т.к. чтобы выбрать правильное действие, надо пробежать в среднем по половине проверок. А работает калькулятор так, что добавка даже 2-3 строчек, выполняющих простые операции -- заметна.

Короче говоря, мне не хватало десятка килобайт и быстродействие хорошо было бы увеличить раз эдак в сто...

Потом я прочитал интересную вещь. Оказывается в Бейсике МК-85 команды GOTO и GOSUB (подпрограмма) могли принимать не только число. Но и переменную. И даже выражение.

Это и был ключ к тому, как всё уместить в 5317 байт.

100 GOSUB D+1000
//...
1000 (действие1):RETURN
1001 (действие2):RETURN
//и так далее для всех ~200 кодов операций

@темы: Программирование, Говнокод

URL
Вот скачал себе оффлайнового клиента. Постоянно забываю, ...
Я не хочу быть дворцом для вечно здравствующих. ...
Никогда не пейте пиво на скорость с канадскими девушками,...
Скоро домой.
Внезапно и некстати закончились инет средства, и мы оказа...
вчера полночи смотрела старые отельские фотографии, у нас...
Добавить комментарий

Расширенная форма

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail