После публикации предыдущего поста я вернулся к вопросу эмуляции графики. Если бы я вел журнал действий "дата-действие-результат/облом", то выросла бы депрессивная и скучная статья, поэтому будет лучше, если опишу пытки как есть. Игру landing можно найти на Github и запустить в эмуляторе Simh, хотя можно запустить сразу, почитав документацию. Я запустил файлы, поиграл, разбил пепелац и вернулся к кодингу. Основная беда - ассемблер MACRO11, который выблевает только файл .obj, над которым уже можно проделать нужные действия, используя LINK11, который толком не портирован под венду. Зато есть скрипт obj2bin.pl, который я не смог запустить на разных версиях Perl.
Первая задача - компиляция программы, выдающей Hello, world!, принесла кучу обломов. Я стал искать разные варианты и получил утилиту obj2bin. Использовал для simh предложенный файл test.ini:
LOAD hello.bin
На этой команде simh выдал ошибку загрузки.Стал разбираться, в чем причина: нужен файл формата .lda. Нашел и скомпилировал на Сигавне утилиты конверсии и получил массу ошибок - либо ошибка чтения либо неверная контрольная сумма при загрузке. Толком не разобравшись, я написал свою утилиту, которая формирует нужные поля правильно и после правок кода подсчета контрольной суммы, получил результат:
Осталось разобраться, почему файл не запускается командой run. "Я подумаю об этом завтра"(с).
Поиски информации на Яндексе привели к диалогу с Алиса AI, которая была настолько мила, что привела пример печати фразы с использованием VT-11.И эти примеры не заработали. Я взял фрагмент кода из lunar.mac, скомпилировал, запустил и увидел фрагмент на экране. Остатки дня были потрачены на попытки запустить программу. Вечером стал разбираться с форматом .lda и нашел причину: я взял код программы, которая записывает финальный блок формата, в котором хранится адрес запуска программы и считает неверную контрольную сумму.
Утром, после прогулки, в голову пришла другая идея: попробовать расположить Display List по адресу 2000o. Написал код и стал изучать файл DEC-11-HVTGA-A-D VT11 Graphic Display Processor.pdf, нашел пример программы, вбил слова и увидел на экране прямоугольник. Остался текст, который никак не появлялся. Снова обратился к Алисе и получил ответ и другой пример программы:
Я решил облегчить жизнь и задал вопрос создания программы, которая бы кодировала или декодировала текст в слова или обратно. Программа сработала, как нужно.
Войдя во вкус я озадачил Алису еще одним вопросом : нужна утилита, которая бы декодировала слова из Display List для VT-11 и расшифровывала значения по битам. Вот так занудно это выглядит:
100000₈ = 1 000 000 000 000 000₂ = 0x8000 — это инструкция Set Graphic Mode, устанавливающая символьный режим (Character Mode) без изменения параметров отображения.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│ 1 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │
└───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
└─┬─┘ └─────┬─────┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └───┬───┘
│ Mode(13:11) │ │ │ │ │ │ LINE(1:0)
│ 000 = Character │ │ │ │ │ │
Inst I=0 INT=000 LPEN=0 LP=0 BLKEN=0 BLK=0 LINEN=0 LINE=00
(15=1) (no load) (no load) (no load) (no load)
Расшифровка полей
Бит(ы) Значение Поле Расшифровка
15 1 Instruction Это команда (не данные)
14 0 Set Graphic Mode Установка графического режима
13:11 000 Data Mode Character Mode — символьный режим
10 0 I (intensity enable) Яркость не загружать (сохранить прежнюю)
9:7 000 INT (не загружается, т.к. бит 10 = 0)
6 0 LPEN Флаг светового пера не загружать
5 0 LP (не загружается, т.к. бит 6 = 0)
4 0 BLKEN Мигание не загружать
3 0 BLK (не загружается, т.к. бит 4 = 0)
2 0 LINEN Тип линии не загружать
1:0 00 LINE (не загружается, т.к. бит 2 = 0)
Сводка режимов данных (биты 13:11)
Код Режим
000 Character (символьный)
001 Short Vector (короткий вектор)
010 Long Vector (длинный вектор)
011 Point (точка)
100 Relative Point (относительная точка)
101 Graphplot X/Y (графопостроение)
110 Spare (резерв)
Итог
SET CHARACTER MODE — переключить VT-11 в символьный режим, оставив все параметры отображения (яркость, световое перо, мигание, тип линии) без изменений. После этой команды дисплей ожидает слова данных, содержащие пары 7-битных ASCII-кодов символов — по два символа на слово.
Это «минимальная» команда смены режима: только смена типа данных, без настройки сопутствующих параметров.
Получил исходник и помаялся с компиляцией - мне хотелось, чтобы UTF-8 печатался в командной строке. Хрен там, пришлос
ь перевести текстовые сообщения на инглезе.
Теперь есть готовые инструменты для разработки, которые вместе с примерами здесь.
Бонус - скриншотик диалога:




Комментарии
Отправить комментарий