1 Отредактировано garnizon (09-10-2021 00:43)

Тема: Prince of Persia на Агате

Время от времени, на различных площадках возникает вопрос о работоспособности Prince of Persia на Агате.
Даже говорят что у она написана под графический режим, которого нет на Агате.
На самом деле, сама игра под 280х192, и только стартовая заставка в DHires, и еще вроде когда падаешь или удар получаешь - на мгновение режим LoRes появляется (просто красный целиком экран).

Мы в школе играли на девятке. Но в какую-то Cracked версию. И я вот что помню: там была надпись с словом RAM.
Может быть это как раз буржуи сами под более легкие Эплы переделывали. Но играли мы вроде с допозу128.
Причем в момент появления заставки, была надпись "тут была красивая картинка" :)
Еще запомнилось что играть получалось только с джоя.

Вопрос вот в чем, а кто-то еще играл в принца на агате? Может помнит что это была за версия, не от USN ли?

Глянул на ftp://ftp.apple.asimov.net/pub/apple_II/, просто скачал файл site_index.txt и поиском в нем нашел огромную кучу хакерских версий.
Насколько я понимаю, версия должна заработать на ][+  с Sanurn card, тогда и на Агате пойдет.

http://agatcomp.ru/agat/Software/Game/Gamez/End11.png

2

Re: Prince of Persia на Агате

Можно проверить на эмуляторе.

3

Re: Prince of Persia на Агате

https://github.com/jmechner/Prince-of-Persia-Apple-II

4 Отредактировано electroscat (22-07-2023 09:21)

Re: Prince of Persia на Агате

Приветствую дорогие коллеги !

Поделюсь выводами проделанных экспериментов, результатом которых должен был стать запуск "принца персии" на Агате 9.
Первое что сделал - прошелся по самым разнообразным нашим и зарубежным рессурсам в поисках образов дисков принца версии 1989 года. Нашел около 10 комплектов на разных рессурсах. Далее, выяснилось что часть из низ не комплектна, папример несколько раз попадался архив без первого диска, только второй и третий. В итоге определилось 7 полных комплектов. Вот тут в архиве можно их скачать: https://disk.yandex.ru/d/Xe_s0pSAiRdmgg.

ЗАпускать их пытался сначала на Агате 9. В итоге, в папках  1 - 3 образы рекламирующие некоторый Nebrasca Cement. Причем бегущая строка рекламирующая некую организацию в которой долго рассказывается о том, примерно кк была взломана игра - запускается только на AppleIIe - на Агате 9 запуск происходит сразу с информации о игре и хакерах в виде графичекой картинки. После программа требует второй диск, после вставки которого на Агате 9 мы видим мешанину из текстовых символов после появления которой все виснет, а на Apple IIе появляется заставка игры. То есть, игра работоспособна на Apple IIe - но на агате в следствии того что нет режима графики двойной плотности - посте попытки переключиться в этот режим и вывести в память изображение в этом режиме агат виснет.  Похоже эта версия вполне мога бы работать на агате, если переделать ее чтобы она не использовала режим двойной плотности и не выводила в память несуществующей области дисплея изображение.

https://i.ibb.co/bFRmrbD/03-AIIe.jpg https://i.ibb.co/hsf8b6d/01.jpg https://i.ibb.co/znky0SF/02.jpg

В папке 4 и 5 лежит следующая версия игры. Она в отличии от первой -  на Агате 9 сразу заявляет о том, что не работает на обычном AppleII.

https://i.ibb.co/vPymzS1/02-A9.jpg

А на Apple IIe после старта появляется текстовая типа табличка, в кторорй написана разная информация об игре и о том, кто ее взломал.

https://i.ibb.co/wy54mj4/01.jpg

И далее игра работает нормально..

https://i.ibb.co/Wxwc36q/03.jpg
https://i.ibb.co/JzCt1GW/4.jpg

Тут есть нюанс, на экране с текстом говорится что нужен компьютер с двумя дисководами, во втором приводе должен стоять диск 3.. И тогда все работает.

И папки 6 и 7 содержат еще одну версию, которая содержит вообще не рабочюю программу, она виснет на третьем перемещении головы по диску сразу после старта не выводя на экран никакой информации на чем угодно.

Так же я пытался комбинировать, то есть запускать одну версию и давать ей второй диск от другой версии.. Понятно что положительных результатов эти действия никаких не имели.

Получается что версия Принца, которая запускалась на Агате - утеряна..
Для того чтобы запустить на агате Принца Персии - нужна версия в которой нет перехода в режим двойной плотности и загрузки изображения в этом режиме.
С тем, что доступны исходники принца на гитхабе, на мой взгляд проще воспольдоваться этим вариантом, то есть, разобраться в исходниках и убрать от туда переход в неподдерживаемый режим, чем предотвратить зависание Агата.
Есть еще второй вариант - вполне вероятно все же где то на каких то дискетах, которые до сих пор не попали в редакцию agatcomp.ru все таки еще есть версия игры именно для Агата. По этому, если вы нашли у себя какие то диски для Агата - пожалуйста, передайте их на считывание !!!

5

Re: Prince of Persia на Агате

Кстати, по мимо исходников автор принца персии выложил и подробный коммент по исходникам в PDF. Так что можно смело браться за работу, если есть свободное время )))

https://www.jordanmechner.com/downloads/popsource.pdf

6

Re: Prince of Persia на Агате

Мне не ясно, как неподдерживаемый режим может ломать загрузку на Агате ?
Ведь регионы памяти те же - всё видео в младших 32 кб. Т.е. запись видео выполняется в обычные регионы ОЗУ по обычным вполне адресам ?
А то, что программный переключатель не срабатывает - так чем это сломает загрузку ?

Я могу попробовать отследить что именно приводит к зависанию, но даст ли это простое решение - неизвестно.

Так же я не вполне понял:

- т.е. оригинала нет вообще ( кроме опубликованных исходников ) ?
- есть только ломанные разными командами версии ?
- есть ли информация о том, с какой ломанной версии лучше начать работу (т.е. которая чётко заводится на эпле и имеет максимум "правильности" (чем бы это ни было) ?

7

Re: Prince of Persia на Агате

Voldemar0 пишет:

Мне не ясно, как неподдерживаемый режим может ломать загрузку на Агате ?
Ведь регионы памяти те же - всё видео в младших 32 кб. Т.е. запись видео выполняется в обычные регионы ОЗУ по обычным вполне адресам ?
А то, что программный переключатель не срабатывает - так чем это сломает загрузку ?

Возможно проблема в нехватке ОЗУ все же, а не в том, что нет граф. режима. Тем не менее, как работает этот режим я не до конца понимаю. Возможно в Агате память в которую записывается картинка - используется еще под что либо, и это что либо, точнее его отсутствие не дает продолжать работу, могу только предполагать.. Именно после попытки загрузить это изображение происходит зависание. Но может быть и что то еще после подгрузки графики вызывает зависание.Помоему Игорь писал о том, что в версии игры работающей на Агате была надпись - на этом месте была красивая картинка, возможно как то это влияет все же.

Voldemar0 пишет:

Я могу попробовать отследить что именно приводит к зависанию, но даст ли это простое решение - неизвестно.

Если у вас есть возможность отследить момент где что то идет не так - это будет очень круто !
Вполне вероятно что версию которая не сообщаети о том что нужет именно AIIe или AIIc - вполне устроит модуль ДОЗУ А9 - и она сможет работать на А9 с ДОЗУ.

Voldemar0 пишет:

Так же я не вполне понял:

- т.е. оригинала нет вообще ( кроме опубликованных исходников ) ?

Получается что так. Это максимум что я смог найти, я мониторил и зарубежные рессурсы и рускоязычные, это практически все что я нашел. Есть еще версия на образе для 3.5" 800 к дисковода походу AppleIIGS. Но эту версию я не могу открыть в имеющихся у меня эмуляторах.


Voldemar0 пишет:

- есть только ломанные разными командами версии ?

Да, первые три версии - это вариант от одной команды взломщиков, и следующие две версии - это от другой комманды, В варианте от первой комманлы комп не заявляет что нужен именно AIIe. Вторая заявляет на агате с ходу и далее все...
Про последние две папки - я не знаю, запустить не получилось, на одном и том же моменте все виснет, на первом диске в самом начале. Может есть смысл сравнить эти места с другими версиями и там будет видна некоторая ошибка в файловой системе,....

Voldemar0 пишет:

- есть ли информация о том, с какой ломанной версии лучше начать работу (т.е. которая чётко заводится на эпле и имеет максимум "правильности" (чем бы это ни было) ?

Первая и вторая версии на AIIe (в эмуле точнее) работают отлично, по крайней мере первый уровень. То есть движок в порядке. Думаю самая первая версия предпочтительнее, потому что она на агате не отказывается работать и не заявляет что нужна более крутая машина или 128к памяти.

8

Re: Prince of Persia на Агате

Возможно виснет все же от нехватки памяти, ибо Агат-9 с ДОЗУ это все таки не 128к а 96к или меньше. Даже если отключена проверка которая во второй версии выдает сообщение о том что нужен AIIe со 128к памяти, памяти вполне может таки не хватать.

9

Re: Prince of Persia на Агате

Voldemar0 пишет:

Мне не ясно, как неподдерживаемый режим может ломать загрузку на Агате ?

Если учесть, как он реализован в Apple IIe, то запросто. Там ведь память, фактически, делится на два блока по 64 КБайт.
Эти блоки доступны по адресам $00-$FF и $100-$FFFF.
Для режима Double Hires нужно 16 Кбайт ОЗУ. При этом память экрана делится на две половинки по 8 Кбайт.
Первая половинка находится в 1 блоке, вторая во втором.

В результате, чтобы загрузить картинку, надо к адресам $100-$FFFF сначала подключить первый блок и загрузить 8 КБайт картинки. Потом к адресам $100-$FFFF подключить второй блок и загрузить следующие 8 КБайт.

Вот на этом листании страниц все может легко навернуться: игрушка думает, что она переключила страницы и начинает грузить что-то новое, а на девятке страница остается старая и новые данные затирают то, что было раньше загружено.

Так что, на мой взгляд, игрушку надо основательно перебирать в плане того, как она с памятью работает. Это не пару байт пропатчить.

Voldemar0 пишет:

оригинала нет вообще ( кроме опубликованных исходников ) ?

Оригинал физически наверно где-то есть, но он защищен и использует фирменную RWTS18 от Broderbund (6 секторов по 768 байт).
Вообще, про загрузку можно тут почитать https://fabiensanglard.net/prince_of_pe … _boot2.php

10 Отредактировано Voldemar0 (27-07-2023 05:15)

Re: Prince of Persia на Агате

С утра не спалось, успел найти следующее:

Девятка, переведённая в режим эпл-совместимости.
Каталог PRINCE_01_W_AIIe_Nebrasca_Cement:

> После программа требует второй диск, после вставки которого на Агате 9 мы видим мешанину из текстовых символов после появления которой все виснет,

Второй диск читается группами треков (по возрастанию, но не подряд; примерно так: 0-1, 5-10, 17-19, ..-34), последним читается трек 34.

В коде есть много обращений к неким регистрам C002-C005 и вроде было ещё C013.
Не знаю, что это, но в Агате это не обслуживается вроде ?

Незадолго до зависания путь проца выглядит так:

F9A3-  20 EB F9    ".КЫ"    JSR   F9EB
F9EB-  8D 03 C0    "..@"    STA   C003
F9EE-  8D 05 C0    "..@"    STA   C005
F9F1-  60 .. ..    "ю"      RTS   
F9A6-  A9 01 ..    ")."     LDA   #01
F9A8-  8D 39 02    "..."    STA   0239
F9AB-  A9 D0 ..    ")P"     LDA   #D0
F9AD-  8D F6 03    ".Ж."    STA   03F6
F9B0-  20 F2 F9    ".РЫ"    JSR   F9F2
F9F2-  8D 02 C0    "..@"    STA   C002
F9F5-  8D 04 C0    "..@"    STA   C004
F9F8-  60 .. ..    "ю"      RTS   
F9B3-  4C 06 49    "l.i"    JMP   4906
4906-  18 .. ..    "."      CLC   
4907-  90 73 ..    ".с"     BCC   497C
497C-  8D 09 C0    "..@"    STA   C009
497F-  2C 83 C0    "..@"    BIT   C083
4982-  2C 83 C0    "..@"    BIT   C083
4985-  A9 D0 ..    ")P"     LDA   #D0
4987-  A2 20 ..    ""."     LDX   #20
4989-  A0 50 ..    " p"     LDY   #50
498B-  20 46 49    ".fi"    JSR   4946  - это процедура MOVE - копирование региона памяти
....

Процедура, которая ломает всё:

497C -   8D 09 C0   "..@"   STA   C009
497F -   2C 83 C0   "..@"   BIT   C083
4982 -   2C 83 C0   "..@"   BIT   C083
4985 -   A9 D0 ..   ")P"    LDA   #D0
4987 -   A2 20 ..   ""."    LDX   #20
4989 -   A0 50 ..   " p"    LDY   #50
498B -   20 46 49   ".fi"   JSR   Move
498E -   2C 8B C0   "..@"   BIT   C08B
4991 -   2C 8B C0   "..@"   BIT   C08B
4994 -   A9 D0 ..   ")P"    LDA   #D0
4996 -   A2 50 ..   ""p"    LDX   #50
4998 -   A0 60 ..   " ю"    LDY   #60
499A -   20 46 49   ".fi"   JSR   Move
499D -   A9 F0 ..   ")П"    LDA   #F0
499F -   8D FE FF   ".ЧЪ"   STA   FFFE
49A2 -   A9 04 ..   ")."    LDA   #04
49A4 -   8D FF FF   ".ЪЪ"   STA   FFFF
49A7 -   8D 08 C0   "..@"   STA   C008
49AA -   A9 F0 ..   ")П"    LDA   #F0
49AC -   8D FE FF   ".ЧЪ"   STA   FFFE
49AF -   A9 04 ..   ")."    LDA   #04
49B1 -   8D FF FF   ".ЪЪ"   STA   FFFF
49B4 -   60 .. ..   "ю"     RTS   

Последний RTS возвращает управление на адрес F8D6, но там уже всё пусто и проц попадает на BRK.
Похоже, этот адрес портится первым же JSR Move.

До того, как испортится, выглядит так:

F8D3 -   20 E3 FD   ".ЦЩ"   JSR   FDE3 - это чтение второго диска
F8D6 -   20 19 FA   "..З"   JSR   FA19 - эта команда уже оказывается сломанной к моменту исполнения :((
F8D9 -   20 D5 04   ".U."   JSR   04D5
F8DC -   20 09 20   "..."   JSR   2009
F8DF -   A9 00 ..   ")."    LDA   #00
F8E1 -   85 9F ..   ".."    STA   9F
F8E3 -   A9 01 ..   ")."    LDA   #01
F8E5 -   8D 03 02   "..."   STA   0203
F8E8 -   4C 96 FC   "l.Э"   JMP   FC96

11 Отредактировано avivanov76 (28-07-2023 01:53)

Re: Prince of Persia на Агате

Voldemar0 пишет:

В коде есть много обращений к неким регистрам C002-C005 и вроде было ещё C013.
Не знаю, что это, но в Агате это не обслуживается вроде ?

Вообще, эти переключатели в книжках по Apple IIe описаны, но я тут краткую выдержку сделал:

Чтение ячеек $C000-$C00F возвращает содержимое буфера и бит готовности клавиатуры.
Следующие переключатели срабатывают только на запись:

$C000  80STOREOFF     Переключатель видеостраниц выполняет переключение
                      между 1-й и 2-й видеостраницами.

$C001  80STOREON      Переключатель видеостраниц выполняет переключение 
                      между основной и дополнительной страницами ОЗУ.
                      Включение 2-й видеостраницы в текстовых режимах
                      и графических режимах низкого разрешения
                      подключает к адресам $0400-$07FF дополнительную
                      страницу ОЗУ.
                      Включение 2-й видеостраницы в графических режимах
                      высокого разрешения подключает к адресам $2000-$3FFF
                      дополнительную страницу ОЗУ.

$C002  RAMRDOFF       При выполнении чтения по адресам $0200-$BFFF
                      будет использоваться основная страница ОЗУ

$C003  RAMRDON        При выполнении чтения по адресам $0200-$BFFF
                      будет использоваться дополнительная страница ОЗУ

$C004  RAMWRTOFF      При выполнении записи по адресам $0200-$BFFF
                      будет использоваться основная страница ОЗУ

$C005  RAMWRTON       При выполнении записи по адресам $0200-$BFFF
                      будет использоваться дополнительная страница ОЗУ

$C006  INTCXROMOFF    Подключает к адресам $C100-$CFFF ПЗУ слотов

$C007  INTCXROMON     Подключает к адресам $C100-$CFFF встроенное ПЗУ APPLE

$C008  ALTZPOFF       Подключает к адресам $0000-$01FF основную страницу ОЗУ

$C009  ALTZPON        Подключает к адресам $0000-$01FF дополнительную
                      страницу ОЗУ

$C00A  SLOTC3ROMOFF   Подключает к адресам $C300-$C3FF ПЗУ слота

$C00B  SLOTC3ROMON    Подключает к адресам $C300-$C3FF встроенное ПЗУ APPLE

$C00C  80COLOFF       Выключает 80-колоночный текстовый режим

$C00D  80COLON        Включает 80-колоночный текстовый режим

$C00E  ALTCHARSETOFF  Подключает основной набор символов текстового режима

$C00F  ALTCHARSETON   Подключает дополнительный набор символов текстового
                      режима


Запись в ячейки $C010-$C01F сбрасывает бит готовности клавиатуры.
Чтение ячеек $C010-$C01F возвращает следующие значения:

$C010              Возвращает бит готовности клавиатуры и сбрасывает его.

$C011  BSRBANK2    Если бит 7=1, значит к адресам $D000-$DFFF подключен
                   второй банк language card

$C012  BSRREADRAM  Если бит 7=1, значит чтение из language card разрешено

$C013  RAMRD       Если бит 7=1, значит чтение по адресам $0200-$BFFF
                   производится из дополнительной страницы ОЗУ

$C014  RAMWRT      Если бит 7=1, значит запись по адресам $0200-$BFFF
                   производится в дополнительную страницы ОЗУ

$C015  INTCXROM    Если бит 7=1, значит к адресам $C100-$CFFF подключено
                   встроенное ПЗУ

$C016  ALTZP       Если бит 7=1, значит к адресам $0000-$01FF подключена
                   дополнительная страница ОЗУ

$C017  SLOTC3ROM   Если бит 7=1, значит к адресам $C300-$C3FF подключено
                   встроенное ПЗУ

$C018  80STORE     Если бит 7=1, значит переключатель видеостраниц
                   выполняет переключение между основной и дополнительной
                   страницами ОЗУ.

$C019  VERTBLANK   Если бит 7=1, значит в данный момент активен
                   кадровый гасящий импульс (обратный ход развертки)

$C01A  TEXT        Если бит 7=1, значит включен текстовый режим,
                   Если бит 7=0, значит включен графический режим.

$C01B  MIXED       Если бит 7=1, значит включен смешанный
                   текстово/графический режим

$C01C  PAGE2       Если бит 7=1, значит включена 2-я видеостраница, либо
                   к адресам видеопамяти подключена дополнительная страница
                   ОЗУ.

$C01D  HIRES       Если бит 7=1, значит включен графический режим высокого
                   Разрешения.

$C01E  ALTCHARSET  Если бит 7=1, значит используется дополнительный набор
                   символов текстового режима

$C01F  80COL       Если бит 7=1, значит включен 80-колоночный текстовый режим

12

Re: Prince of Persia на Агате

Попробовал обойти Move, код пошел исполняться дальше и упал теперь на следующей же команде:

F8D9-  20 D5 04    ".U."    JSR   04D5
04D5-  4C 5F 0D    "l.."    JMP   0D5F
0D5F-  FF 80 80    "Ъ.."    INS   8080, X - недокументированная команда и за ней ещё куча мусора

13

Re: Prince of Persia на Агате

Ого, дело сдвинулось! слежу с интересом.

14

Re: Prince of Persia на Агате

Смотрите какая информация появилась: "Принц Персии хочет Apple IIe. А у него память организована иначе, чем в Apple II+, который может эмулировать Агат. Ну и режима Double HiRes в Агате нет.
И никакими дополнительными платами это не решается."...
Меня терзают смутные соомненья....