Вход

Просмотр полной версии : XONIX под СМ-4



tnt23
12.11.2012, 19:36
Коллеги, помогите найти исходные тексты игры XONIX под СМ-4?

Patron
12.11.2012, 22:24
А чем XONIX для СМ-4 отличается от XONIX для ДВК ?

tnt23
12.11.2012, 22:42
А чем XONIX для СМ-4 отличается от XONIX для ДВК ?

Не знаю. На ДВК что было - Рафос, Фодос, RT11? Если ничем не отличается, то тоже подойдет :)

Вдруг есть сорцы других игр детства - тоже было бы зело прельстивно!

Patron
12.11.2012, 23:26
Если ничем не отличается, то тоже подойдетВ закромах обнаружилось несколько вариантов игры XONIX (http://zx.pk.ru/attachment.php?attachmentid=38244).

Похоже, что там есть варианты для ДВК, для СМ и для УКНЦ.

Понравившийся можно дизассемблировать - родных исходников XONIX в природе пока не встречалось.
...

tnt23
12.11.2012, 23:59
Спасибо. Понятно, конечно, что можно дизассемблировать, но все же исходников бы...

form
13.11.2012, 16:17
А чем 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, посмотрим...

Patron
13.11.2012, 18:33
Я заметил два отличия в поведении терминалов, которые влияют на работу игр:

1. Фиксируется ли курсор в крайних позициях строки или переходит в [конец предыдущей]/[начало следующей].

2. Происходит ли перевод строки при выводе последнего символа в последней строке или курсор переходит в начало экрана.

Кроме того, стандарт VT требует, чтобы при прямом позиционировании курсора - он не смещался в сторону недостижимой координаты ( это, например, позволяет родному драйверу SL производить прямое позиционирование курсора в строке по X, не зная положения строки на экране по Y ).

Как ни странно - некторые терминалы, при наличии в адресе прямого позиционирования недостижимой координаты - смещают курсор на соответствующий край экрана. На таких терминалах может работать только советский SL, который двигает курсор по строке без использования ESC-кодов прямого позиционирования.

form
13.11.2012, 19:54
Происходит ли перевод строки при выводе последнего символа в последней строке или курсор переходит в начало экрана.

Стандартный 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 позиционирование выполняется только после полной отработки последовательности. Видимо поочередное было только в тех у которых курсор мигал :)

Patron
13.11.2012, 21:01
Видимо поочередное было только в тех у которых курсор мигалВот как выглядит обработка кодов прямого позиционирования курсора в КСМ:



; Обработка 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

form
13.11.2012, 21:02
Понравившийся можно дизассемблировать

Х-хы.
Прилагаю одну маленькую подпрограммку из XONIXа. Интересно, кому удастся без мата дочитать до конца? :)

form
13.11.2012, 21:04
Вот как выглядит обработка кодов прямого позиционирования курсора в КСМ

Лень мне смотреть. Вариантов может быть множество, но так или иначе, никакого стандарта на VT52 нет и точное поведение предсказать не получится :)
Вот VT100 уже попадает под стандарты.

form
13.11.2012, 21:58
Разобрал немного архив, выложенный выше. В общем XONIX1.SAV - лучший вариант для дизассемблирования. Видимо самый грамотный и по размеру меньше всех (хотя фич видимо больше). А самое главное - работает через честные директивы и запускается в многотерминальной системе :)

Правда задержки реализованы циклами и потому (в отличие от гада который я из RSXного делал) работать на консоли параллельно ему не получится. Но открыть редактором какой-нибудь текст на отдельном терминале и поиграть на консоли параллельно - вполне :)

Использует непечатные с точки зрения VT52 символы. Навскидку ткнулся, что-то переделал - окружение показалось. Самого себя не вижу - видимо как раз хашиком был :)

На фотке запуск на TT3: в многотерминальной системе...

form
13.11.2012, 23:35
Начал разбор дизассемблера. По ходу дела возникла потребность запустить чтобы перед глазами было, а перегружаться лень (разборки как обычно делаю в RSX). Запихал в приватный диск RTEM, подцепил эмелятор VT52 на порт - пашет :)

hobot
17.11.2012, 10:05
Вот что то такое в архиве валяется давно !!!
Только вот файл с исходником возможно "битый" или содержит "недопустимые символы". И какие конкретно для успешной компиляции нужны библиотеки неведомо.
Из перечисленных EXTERNAL - в архиве прилеплен BOX.(MAC,PAS), на том же диске лежали и там ещё PITON.PAS имеется )))

http://images.netbynet.ru/direct/0717edb60f50823e08d34b0099a4acee.png

http://images.netbynet.ru/direct/b0cd0076fa9e75888a053d6729e76055.png

hobot
17.11.2012, 12:04
Ага! Откопался 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;
------------------------ это только заголовок
в прилепленном архиве исходник целиком.

hobot
17.11.2012, 12:06
вообще наверное про Паскаль после этого (http://zx.pk.ru/showpost.php?p=545716&postcount=285) поста наверное отдельную тему в пору
завести - столько версий разных откопалось, затерялся "графический" вариант
учебного Паскаля от ИТО для УК-НЦ, отыщу и наверное что-то такое и будет )))

l--------------------------
Символьный (без граф. в оформлении) вариант учебного паскаля для ДВК нашёлся, а вот графический я совсем недавно
на каких-то дисках у себя в эмуле запускал ( с целью проверки ), вспомню найду.

hobot
19.11.2012, 10:49
в архиве прилеплен BOX.(MAC,PAS)
BOX - несказанно порадовал!!!

http://images.netbynet.ru/direct/bdb2bdc60226c1b220d198c7fcea3e3a.png

Окошечки!!! ) Круто! )))