Просмотр полной версии : XONIX под СМ-4
Коллеги, помогите найти исходные тексты игры XONIX под СМ-4?
А чем XONIX для СМ-4 отличается от XONIX для ДВК ?
А чем XONIX для СМ-4 отличается от XONIX для ДВК ?
Не знаю. На ДВК что было - Рафос, Фодос, RT11? Если ничем не отличается, то тоже подойдет :)
Вдруг есть сорцы других игр детства - тоже было бы зело прельстивно!
Если ничем не отличается, то тоже подойдетВ закромах обнаружилось несколько вариантов игры XONIX (http://zx.pk.ru/attachment.php?attachmentid=38244).
Похоже, что там есть варианты для ДВК, для СМ и для УКНЦ.
Понравившийся можно дизассемблировать - родных исходников XONIX в природе пока не встречалось.
...
Спасибо. Понятно, конечно, что можно дизассемблировать, но все же исходников бы...
А чем XONIX для СМ-4 отличается от XONIX для ДВК ?
Навскидку одно отличие знаю (в том числе для тетрисов итд), правда не столько ДВК от СМ-4 сколько для VT52/CM7209 от 15ИЭ в режиме VT52 - некоторые проги переделывали с использованием символа <DEL> который на стандартных/полностью совместимых VT52 не отображается :)
---------- Post added at 19:17 ---------- Previous post was at 19:14 ----------
Понравившийся можно дизассемблировать
Когда-то писал свой, но потом лень стало думать над алгоритмом закрашивания - оставалось немного до ухода на гражданку :)
Будет время, может раскурочаю как гада да сделаю для RT/RSX.
Залил выложенное выше на 11/83, посмотрим...
Я заметил два отличия в поведении терминалов, которые влияют на работу игр:
1. Фиксируется ли курсор в крайних позициях строки или переходит в [конец предыдущей]/[начало следующей].
2. Происходит ли перевод строки при выводе последнего символа в последней строке или курсор переходит в начало экрана.
Кроме того, стандарт VT требует, чтобы при прямом позиционировании курсора - он не смещался в сторону недостижимой координаты ( это, например, позволяет родному драйверу SL производить прямое позиционирование курсора в строке по X, не зная положения строки на экране по Y ).
Как ни странно - некторые терминалы, при наличии в адресе прямого позиционирования недостижимой координаты - смещают курсор на соответствующий край экрана. На таких терминалах может работать только советский SL, который двигает курсор по строке без использования ESC-кодов прямого позиционирования.
Происходит ли перевод строки при выводе последнего символа в последней строке или курсор переходит в начало экрана.
Стандартный VT52 не переводит строку при достижении правой границы, номер строки тут пофигу. В 15ИЭ поведение настраивается. Иногда здесь наступают на другие грабли: SET TT WRAP устанавливает софтовый автоперевод в конце строки (разумеется это не влияет на прямую работу с регистрами терминала).
Кроме того, стандарт VT требует, чтобы при прямом позиционировании курсора - он не смещался в сторону недостижимой координаты ( это, например, позволяет родному драйверу SL производить прямое позиционирование курсора в строке по X, не зная положения строки на экране по Y ).
Стандарта как такового на поведение для VT52 нет. Более того, родной VT52 и вроде CM7209 выставляют координату сразу как только символ для нее получают - то есть <ESX>Y, <y> (курсор прыгает на строку), <x> (курсор прыгает на колонку). При этом если символ неверный или запредельный, он учитывается, но игнорируется, таким образом можно в принципе позиционироваться на строку или на колонку не меняя второй позиции, но это не документировано и по-моему ни в одном эмуляторе (а также в VT52 режиме VT1xx/VT2xx терминалов) не реализовано. Ну и да - некоторые прыгают в конец если символ выходит за пределы.
Видел реализации где неверный символ игнорировался полностью - то есть даже не учитывается и следующий правильный продолжит с того места где остановились.
Как ни странно - некторые терминалы, при наличии в адресе прямого позиционирования недостижимой координаты - смещают курсор на соответствующий край экрана. На таких терминалах может работать только советский SL, который двигает курсор по строке без использования ESC-кодов прямого позиционирования.
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 позиционирование выполняется только после полной отработки последовательности. Видимо поочередное было только в тех у которых курсор мигал :)
Видимо поочередное было только в тех у которых курсор мигалВот как выглядит обработка кодов прямого позиционирования курсора в КСМ:
; Обработка 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
Понравившийся можно дизассемблировать
Х-хы.
Прилагаю одну маленькую подпрограммку из XONIXа. Интересно, кому удастся без мата дочитать до конца? :)
Вот как выглядит обработка кодов прямого позиционирования курсора в КСМ
Лень мне смотреть. Вариантов может быть множество, но так или иначе, никакого стандарта на VT52 нет и точное поведение предсказать не получится :)
Вот VT100 уже попадает под стандарты.
Разобрал немного архив, выложенный выше. В общем XONIX1.SAV - лучший вариант для дизассемблирования. Видимо самый грамотный и по размеру меньше всех (хотя фич видимо больше). А самое главное - работает через честные директивы и запускается в многотерминальной системе :)
Правда задержки реализованы циклами и потому (в отличие от гада который я из RSXного делал) работать на консоли параллельно ему не получится. Но открыть редактором какой-нибудь текст на отдельном терминале и поиграть на консоли параллельно - вполне :)
Использует непечатные с точки зрения VT52 символы. Навскидку ткнулся, что-то переделал - окружение показалось. Самого себя не вижу - видимо как раз хашиком был :)
На фотке запуск на TT3: в многотерминальной системе...
Начал разбор дизассемблера. По ходу дела возникла потребность запустить чтобы перед глазами было, а перегружаться лень (разборки как обычно делаю в RSX). Запихал в приватный диск RTEM, подцепил эмелятор VT52 на порт - пашет :)
Вот что то такое в архиве валяется давно !!!
Только вот файл с исходником возможно "битый" или содержит "недопустимые символы". И какие конкретно для успешной компиляции нужны библиотеки неведомо.
Из перечисленных EXTERNAL - в архиве прилеплен BOX.(MAC,PAS), на том же диске лежали и там ещё PITON.PAS имеется )))
http://images.netbynet.ru/direct/0717edb60f50823e08d34b0099a4acee.png
http://images.netbynet.ru/direct/b0cd0076fa9e75888a053d6729e76055.png
Ага! Откопался RANDOM.PAS
(*$E+ *)
TYPE
UNSIGNED=0..65535;
FUNCTION RANDOM(VAR SEED:UNSIGNED):REAL;
BEGIN { Random }
SEED := (SEED * 13077 + 6925) MOD 32768;
RANDOM := SEED / 32768.0
END { Random };
BEGIN
END.
<...>
PROGRAM RAND;
VAR
SEED:0..65535;
I:INTEGER;
FUNCTION RANDOM:REAL;
BEGIN /* RANDOM */
SEED:=(SEED*13077+6925)MOD 32768;
RANDOM:=SEED/32768.0
END /* RANDOM */;
BEGIN
FOR I:=1 TO 20 DO WRITELN(RANDOM)
END.
Прилеплю сюда до кучи (что-бы просто не искать потом)
и PITON.PAS - хотя совсем недавно где-то я его видел? Кажется
на дискете АДОС для УК-НЦ?
PROGRAM PITON; (*$A-*) (*$T-*)
VAR X,Y:ARRAY[1..100] OF INTEGER;
LV,LF,ER,GX,GY,ZX,ZY,D,I,S,KR,SCOR,HI,K,L:INTEGER;
PROM,LIT:CHAR;
RPR: REAL;
------------------------ это только заголовок
в прилепленном архиве исходник целиком.
вообще наверное про Паскаль после этого (http://zx.pk.ru/showpost.php?p=545716&postcount=285) поста наверное отдельную тему в пору
завести - столько версий разных откопалось, затерялся "графический" вариант
учебного Паскаля от ИТО для УК-НЦ, отыщу и наверное что-то такое и будет )))
l--------------------------
Символьный (без граф. в оформлении) вариант учебного паскаля для ДВК нашёлся, а вот графический я совсем недавно
на каких-то дисках у себя в эмуле запускал ( с целью проверки ), вспомню найду.
в архиве прилеплен BOX.(MAC,PAS)
BOX - несказанно порадовал!!!
http://images.netbynet.ru/direct/bdb2bdc60226c1b220d198c7fcea3e3a.png
Окошечки!!! ) Круто! )))
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot