Коллеги, помогите найти исходные тексты игры XONIX под СМ-4?
Коллеги, помогите найти исходные тексты игры XONIX под СМ-4?
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
А чем XONIX для СМ-4 отличается от XONIX для ДВК ?
В закромах обнаружилось несколько вариантов игры XONIX.
Похоже, что там есть варианты для ДВК, для СМ и для УКНЦ.
Понравившийся можно дизассемблировать - родных исходников XONIX в природе пока не встречалось.
...
Навскидку одно отличие знаю (в том числе для тетрисов итд), правда не столько ДВК от СМ-4 сколько для VT52/CM7209 от 15ИЭ в режиме VT52 - некоторые проги переделывали с использованием символа <DEL> который на стандартных/полностью совместимых VT52 не отображается
---------- Post added at 19:17 ---------- Previous post was at 19:14 ----------
Когда-то писал свой, но потом лень стало думать над алгоритмом закрашивания - оставалось немного до ухода на гражданку
Будет время, может раскурочаю как гада да сделаю для RT/RSX.
Залил выложенное выше на 11/83, посмотрим...
Последний раз редактировалось form; 13.11.2012 в 16:28.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Спасибо. Понятно, конечно, что можно дизассемблировать, но все же исходников бы...
Я заметил два отличия в поведении терминалов, которые влияют на работу игр:
1. Фиксируется ли курсор в крайних позициях строки или переходит в [конец предыдущей]/[начало следующей].
2. Происходит ли перевод строки при выводе последнего символа в последней строке или курсор переходит в начало экрана.
Кроме того, стандарт VT требует, чтобы при прямом позиционировании курсора - он не смещался в сторону недостижимой координаты ( это, например, позволяет родному драйверу SL производить прямое позиционирование курсора в строке по X, не зная положения строки на экране по Y ).
Как ни странно - некторые терминалы, при наличии в адресе прямого позиционирования недостижимой координаты - смещают курсор на соответствующий край экрана. На таких терминалах может работать только советский SL, который двигает курсор по строке без использования ESC-кодов прямого позиционирования.
Стандартный VT52 не переводит строку при достижении правой границы, номер строки тут пофигу. В 15ИЭ поведение настраивается. Иногда здесь наступают на другие грабли: SET TT WRAP устанавливает софтовый автоперевод в конце строки (разумеется это не влияет на прямую работу с регистрами терминала).
Стандарта как такового на поведение для VT52 нет. Более того, родной VT52 и вроде CM7209 выставляют координату сразу как только символ для нее получают - то есть <ESX>Y, <y> (курсор прыгает на строку), <x> (курсор прыгает на колонку). При этом если символ неверный или запредельный, он учитывается, но игнорируется, таким образом можно в принципе позиционироваться на строку или на колонку не меняя второй позиции, но это не документировано и по-моему ни в одном эмуляторе (а также в VT52 режиме VT1xx/VT2xx терминалов) не реализовано. Ну и да - некоторые прыгают в конец если символ выходит за пределы.
Видел реализации где неверный символ игнорировался полностью - то есть даже не учитывается и следующий правильный продолжит с того места где остановились.
DECовский SL не использует <ESC> последовательности для позиционирования курсора (для шага назад используется код <BS>, для шага вперед - текущий символ) и не позволяет вводить за пределами строки (даже если подсказка заканчивается недалеко от конца строки).
Еще он использует <ESC>K для отсечения конца строки.
---------- Post added at 22:12 ---------- Previous post was at 22:01 ----------
...или в оригинале тоже неверный символ игнорится и не ломает последовательность... надо проверить, а то подзабыл уже
---------- Post added at 22:54 ---------- Previous post was at 22:12 ----------
Проверил поведение на своем CM7209. Запредельные координаты учитываются, но не выполняют позиционирования (позиционирование на 10,90 спозиционирует на 10 строку). Левые (CTRL) символы просто игнорируются и не ломают последовательности. На моем CM7209 позиционирование выполняется только после полной отработки последовательности. Видимо поочередное было только в тех у которых курсор мигал
Последний раз редактировалось form; 13.11.2012 в 19:09.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Вот как выглядит обработка кодов прямого позиционирования курсора в КСМ:
Код:; Обработка Esc Y (позиционирование курсора) 066A CD 0920 call L_0920 ; Прочесть очередной символ 066D CD 0939 call L_0939 ; Получить адрес курсора 0670 36 20 mvi m,&H20 ; Погасить курсор 0672 FE 20 cmpi &H20 ; Код символа < 32 ? 0674 FA 0682 jm L_0682 ; Да - не обрабатывать 0677 FE 38 cmpi &H38 ; Код символа >= 56 ? 0679 F2 0682 jp L_0682 ; Да - не обрабатывать 067C D6 20 sui &H20 ; Вычесть 32 067E 47 mov b,a ; Новая координата Y 067F CD 0939 call L_0939 ; Получить новый адрес курсора 0682 36 7F L_0682 mvi m,&H7F ; Высветить курсор 0684 CD 0920 call L_0920 ; Прочесть очередной символ 0687 CD 0939 call L_0939 ; Получить адрес курсора 068A 36 20 mvi m,&H20 ; Погасить курсор 068C FE 20 cmpi &H20 ; Код символа < 32 ? 068E FA 069C jm L_069C ; Да - не обрабатывать 0691 FE 70 cmpi &H70 ; Код символа >= 102 ? 0693 F2 069C jp L_069C ; Да - не обрабатывать 0696 D6 20 sui &H20 ; Вычесть 32 0698 4F mov c,a ; Новая координата X 0699 CD 0939 call L_0939 ; Получить новый адрес курсора 069C 36 7F L_069C mvi m,&H7F ; Высветить курсор 069E C3 008E jmp L_008E
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)