Коллеги, помогите найти исходные тексты игры 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)