.CHARSET 1251 ; Оптимизация программы quinemk, опубликованной Дробышевым на сайте pmk.arbinada.com ; Занимает ячейки 0..72, 73 шага .ORG 0 Cx M6 ; PPM 9030 ; Индексный регистр 0 (Универсальный байтовый буфер) считаем равным нулю EE 3 M5 M4 ; R4, R5 := 1000 ; .NUMT A8 8 MB ; Для экономии места адрес A8 рассчитан вручную A8: RM6 PPM 9039 ; Преобразование кода команды в мнемонику (Универсальный байтовый буфер) CX PPM 9031 ; Индексный регистр 1 (Универсальный байтовый буфер) 32 KM5 + ; Записываем два пробела перед мнемоникой CopyM: FANS KM5 ; Копируем мнемонику PPRM 9034 ; Чтение по индексному регистру 1, автоинкремент (Универсальный байтовый буфер) KNOT FX=0 CopyM ; Проверка на 255 RM6 KPRGM ; Считываем КОП из ячейки R6 KRM6 ; Inc(R6) Cx 80 - KX>=0B ; 50 С/П FX!=0 Done ; С/П завершает вывод 5 - KX!=0B ; 55 К ЭКР 11 - FX>=0 TwoBytes ; 60 ИП0 144 - KX>=0B ; F0 начало трёхшаговых команд (РРП, РРИП) KRM6 ; Пропуск ещё 2 шагов (трёхшаговая команда) TwoBytes: KRM6 KGOTOB ; Пропуск ещё 1 шага (двухшаговая команда) Done: KM5 ; Завершаем исходный текст кодом 0 Print: 6 FEXP M0 ; R0 := 403 Delay: FL0 Delay ; Задержка 180 мс (плохо сработает на эмуляторе) 10 KM4 ; LF, Inc(R4) RM4 PPM 9027 ; Вывод строки из памяти данных (Строка комментариев) KSCR ; Обновление экрана RM5 - Fx=0 Print ; Весь исходный текст вывели? R/S ; Остановка .ENDP