Приложение доведено до бета-версии. Я бы даже сказал, final beta. Папка со всем необходимым доступна здесь:
https://www.dropbox.com/sh/e6jta6fm7m7a ... aKJ1a?dl=0
Что изменилось по сравнению с начальной концепцией.
Тумблер выключения. Поскольку iOS-приложение не может завершать себя, он теперь не закрывает приложение, а всего лишь действительно выключает устройство. Гаснут все табло и индикаторы, устройство перестаёт реагировать на всё, кроме включения питания. Поведение в выключенном состоянии реалистичное: можно всё нажимать и переключать, оно будет нажиматься и переключаться, но это ни к чему не приведёт. Однако при включении питания конфигурация тумблеров будет опознана правильно, и все нужные режимы выставятся.
При этом, поскольку бэйсик-программу (пока она ещё не стала самостоятельным приложением) завершать всё-таки как-то надо, оставлена такая неявная возможность. При включенном устройстве (индикатор на тумблере питания светится красным) и в режиме ожидания (кнопка RUN/STOP в зелёном состоянии) можно коснуться пальцем левого нижнего угла экрана — самый-самый уголок, — и тогда программа завершится.
Исчезла за ненадобностью кнопка ресета. Чтобы сбросить устройство в ноль, достаточно его выключить и включить обратно.
Реалистично реализована работа со внешней памятью. Она теперь скидывается не во внутренний массив программы, а в файл, и сохраняется там даже если приложение будет перезапущено. Не говоря уже о включении-выключении устройства. Изначально там хранится пресловутая программка печати всех шестнадцатеричных чисел от 0 до F.
Добавлены примеры демонстрационных программ. При включенном устройстве в режиме ожидания можно коснуться символа книги на справочной панели с кодами-командами, и откроются три примера. Если коснуться нужного, то он загрузится в память. Если передумали — коснитесь книги ещё раз, и примеры скроются. Первый пример — та же самая печать чисел, второй пример — числа Фибоначчи, третий пример — двойной проход по коду программы со сдвигом. Грязная программистская технология, но когда-то подобное реально использовалось, ибо иначе не получалось.
Табло на отладочной панели DEBUG теперь используется не только при отладке, но и для некоторых информационных сообщений. Типа того, что память сброшена на диск и т.п.
Добавлены кнопки очистки „принтера“ и копирования „принтера“ в буфер обмена. В первой как бы нет прямой необходимости (принтер очищается автоматически при включении питания и запуске программы), но такую кнопку захотели тестеры. Аргументация: „непустое поле принтера меня может отвлекать, хочу иметь возможность очистить его в любой угодный мне момент“. Копирование в буфер раньше выполнялось автоматически, но тестеры логично заметили „пусть лучше буфер не портится без моего ведома и желания“. Обе кнопки расположены справа от принтера: прямоугольник с диагональной стрелкой — „перевод страницы“ (=очистка поля), заполненные странички — копирование в буфер.
Добавлен тумблер автоматического ввода кодов в память. Если он включен, то нажатие кнопки на клавиатуре INPUT DATA не только заносит соответствующий код по текущему адресу в регистре IP, но и автоматически увеличивает этот регистр на единицу. Таким образом, чтобы ввести программу в память с бумажки, достаточно просто последовательно нащёлкать нужные символы подряд на клавиатуре, не отвлекаясь на манипуляции с установкой IP. Тестеры предлагали сделать такой режим ввода единственно возможным, я не согласился из соображений исторической достоверности. Сделал тумблер, и пусть каждый выбирает себе желаемое.
В данный момент весь интерфейс имеет Retina-разрешение. Основной фон — панель устройства 1000х700@144DPI при этом неприлично тянет аж на полтора мегабайта. При 72DPI — в три раза меньше. Вот думаю, нужна ли тут ретина… В динамических элементах (кнопки, тумблеры, табло) нужна без вопросов, а тут не знаю. С интересом выслушаю чужие соображения.
Забавно, что на iPad2 работает быстрее, чем на iPad3. (: Не очень намного, но заметить можно.
В общем, как-то вот так оно получилось. Вопросы, пожелания, жалобы принимаются.