Вход

Просмотр полной версии : Портирование Prince of Persia на другие платформы



CityAceE
18.10.2021, 12:39
Неужели Принца до сих пор не портировали на MSX?

Отправлено с моего SM-G955F через Tapatalk

grf
18.10.2021, 14:38
Неужели Принца до сих пор не портировали на MSX?



непорядок! :)

CityAceE
18.10.2021, 14:44
grf, я думаю, что после такого великолепного порта на БК, портировать Принца на MSX дело техники ;) Вся графика и алгоритмы имеются. Да? ;)

grf
18.10.2021, 14:57
grf, я думаю, что после такого великолепного порта на БК, портировать Принца на MSX дело техники ;) Вся графика и алгоритмы имеются. Да? ;)

Имеются, но там совсем другой ассемблер и аппаратура :)

ivagor
18.10.2021, 16:01
На msx(2) удобнее портировать с sam coupe или даже c atm (но atmовская графика не так удачно подходит).

TomaTLAB
18.10.2021, 16:05
Его тогда уж проще со спековского римейка портировать. Вместе с клэшингом :D

goodboy
18.10.2021, 17:13
а чё не с SegaMasterSystem ?

CityAceE
18.10.2021, 18:14
Удобнее портировать с той платформы, с которой есть исходный код. В данном случае автору порта для БК будет гораздо проще освоить новый ассемблер и ахрихтектуру MSX, чем условному любителю MSX копаться в бинарниках игры пусть и под тот же Z80. К тому же, при всём уважении к Nicodim'у и его порту на ZX Spectrum игра всё-таки получилась сыроватой, с небольшой долей багов. Под АТМ, вроде исходников не выкладывали. C SMS было бы круче всего портировать, так как там игра "фирменная", но опять же - нет исходников. А под Sam Cope, если мне не изменяет память, полную версию Принца так и не выпустили. А так-то есть ещё фирменная версия под GameBoy и его урезанный Z80.

А ведь Джордан Мекнер относительно недавно (10 лет назад) нашёл диски с исходниками оригинально игры под Apple II и обнародовал их (https://github.com/jmechner/Prince-of-Persia-Apple-II). Очевидно, что это самый лучший источник для порта.

ivagor
18.10.2021, 19:12
А под Sam Cope, если мне не изменяет память, полную версию Принца так и не выпустили.
По принцу не специалист, но пишут (https://www.youtube.com/watch?v=pu4utj0eZ9k), что главное отличие - более простые охранники.


Удобнее портировать с той платформы, с которой есть исходный код. В данном случае автору порта для БК будет гораздо проще освоить новый ассемблер и ахрихтектуру MSX, чем условному любителю MSX копаться в бинарниках игры пусть и под тот же Z80.
За других сказать не могу, но мне было бы проще портануть с sam coupe на msx2 без исходников, чем с БК с исходником. И графику можно взять без изменений.

goodboy
18.10.2021, 20:10
условному любителю MSX копаться в бинарниках игры пусть и под тот же Z80
ну например HackerVBI перенёс несколько игр на TSconfig практически не меняя код (только перенаправил ввод/вывод)
на хайпе есть подробные статьи.

CityAceE
18.10.2021, 20:49
Ну это если исполняемый код будет работать по тем же адресам, что и в оригинальной платформе. Я не знаю как устроена память в MSX, но думаю, что её организация сильно отличается от того же Sam Coupe.

b2m
18.10.2021, 21:01
Я не знаю как устроена память в MSX, но думаю, что её организация сильно отличается от того же Sam Coupe.
Отличается, но есть и общее - память разбита на 4 окна по 16 Кб.

ivagor
18.10.2021, 21:32
У sama внутреннее озу фактически переключается по 32 Кб (если не брать во внимание возможности LMPR по переключению половин озу/пзу) и это на первый взгляд можно сэмулировать msx2шным маппером с 16 Кб страницами.

grf
19.10.2021, 04:07
По принцу не специалист, но пишут (https://www.youtube.com/watch?v=pu4utj0eZ9k), что главное отличие - более простые охранники.
.

Посмотрел. Это очень странный порт:

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

И это при том, что комп имеет минимум 256к ОЗУ

ivagor
19.10.2021, 07:47
Тут еще смотря с чем сравнивать, некоторые отличия характерны и для версий на других компах. Например таймера нет на amstrad cpc, а вот на sam coupe он по крайней мере в одном месте был. В любом случае решать тому, кто будет портировать (если вдруг кто-то будет, что маловероятно), насколько критичны перечисленные недостатки и насколько важна простота портирования.

CityAceE
19.10.2021, 12:06
Вот карта памяти для оригинального Принца:

https://pic.maxiol.com/thumbs2/1634633844.3280329131.pop.png (https://pic.maxiol.com/?v=1634633844.3280329131.pop.png&dp=2)
ivagor, как ты считаешь, на Специалисте MX теоретически можно было бы написать полноценного Принца Персии с нормальной графикой, всеми уровнями и т.д.?

У меня есть две особенные игры: Batty и Prince of Persia. Над Batty для Специалиста я уже поработал :) А для Спектрумовского Принца карту уровней сделал (https://maps.speccy.cz/map.php?id=PrinceofPersia). Но у меня пока не было пересечения Принца и Специалиста ;)

goodboy
19.10.2021, 12:10
мне кажется есть разница в понятиях - порт (точный перенос алгоритмов) и игра по-мотивам

CityAceE
19.10.2021, 12:31
goodboy, конечно, есть! Я за точный порт на основе авторских исходников.

goodboy
19.10.2021, 12:48
ещё можно попытаться глянуть на версию с AmstradCPC

ivagor
19.10.2021, 13:12
на Специалисте MX теоретически можно было бы написать полноценного Принца Персии с нормальной графикой, всеми уровнями и т.д.?
Так или иначе портировать принца на MX теоретически можно, а насчет полноценнности игры и нормальности графики это уже вопросы спорные. Версии для разных компов довольно сильно отличаются.
Более-менее реально было бы портануть на mx или вектор с pmd85, но к сожалению проект того порта похоже не будет завершен в обозримом будущем.

^m00h^
19.10.2021, 13:13
Удобнее портировать с той платформы, с которой есть исходный код. В данном случае автору порта для БК будет гораздо проще освоить новый ассемблер и ахрихтектуру MSX, чем условному любителю MSX копаться в бинарниках игры пусть и под тот же Z80. К тому же, при всём уважении к Nicodim'у и его порту на ZX Spectrum игра всё-таки получилась сыроватой, с небольшой долей багов. Под АТМ, вроде исходников не выкладывали. C SMS было бы круче всего портировать, так как там игра "фирменная", но опять же - нет исходников. А под Sam Cope, если мне не изменяет память, полную версию Принца так и не выпустили. А так-то есть ещё фирменная версия под GameBoy и его урезанный Z80.

А ведь Джордан Мекнер относительно недавно (10 лет назад) нашёл диски с исходниками оригинально игры под Apple II и обнародовал их (https://github.com/jmechner/Prince-of-Persia-Apple-II). Очевидно, что это самый лучший источник для порта.

Вот на Sam Coupe, с финалом: https://youtu.be/pu4utj0eZ9k
на MSX есть демо-версия 2007 года: https://www.youtube.com/watch?v=29X12K4Sy5M

CityAceE
19.10.2021, 13:55
Ранее никогда не сталкивался с 6502 и вот сейчас бегло посмотрел систему команд процессора 6502, и мне показалось, что там чуть ли не в лоб можно конвертировать текст программы в i8080/Z80. Или это заблуждение? Но ведь Alone Coder как-то перенёс Super Mario Bros. с NES на ATM, используя оригинальный код с 6502.

ivagor
19.10.2021, 14:12
Вот на Sam Coupe, с финалом:
Эта ссылка уже была (https://zx-pk.ru/threads/33823-portirovanie-prince-of-persia-na-drugie-platformy.html?p=1133528&viewfull=1#post1133528)

- - - Добавлено - - -


на MSX есть демо-версия 2007 года
Для V9990

goodboy
19.10.2021, 14:21
6502, и мне показалось, что там чуть ли не в лоб можно конвертировать текст программы в i8080/Z80
посмотри в комплекте с Tasm`ом https://vtrd.in/system/TASM_412.ZIP 6502 конвертор

CityAceE
19.10.2021, 14:29
на MSX есть демо-версия 2007 года
Похоже, что пытались портировать со SNES. Я проходил SNES'овскую версию, причём на настоящей японской SNES в год выхода игры (1992). Считаю, что это лучший Принц Персии среди всех платформ и версий. Там даже лабиринты расширены по сравнению с оригинальной игрой. Ну и графика со звуком выгодно отличаются от всех остальных версий.


https://www.youtube.com/watch?v=0q_6tOpnquI


https://www.youtube.com/watch?v=K9XYgkPOUOw

Black Cat / Era CG
19.10.2021, 14:33
на MSX есть демо-версия 2007 года: https://www.youtube.com/watch?v=29X12K4Sy5MО! Отсебятинки понавпихали! Бедный Прынц.

- - - Добавлено - - -


Похоже, что пытались портировать со SNES. Я проходил SNES'овскую версию, причём на настоящей японской SNES в год выхода игры (1992). Считаю, что это лучший Принц Персии среди всех платформ и версий. Там даже лабиринты расширены по сравнению с оригинальной игрой. Ну и графика со звуком выгодно отличаются от всех остальных версий.То есть отсебятины больше крыши?
Имхо, есть две версии. Оригинал по Яблоко, и по сути ремейк под ДОС. Все остальное пахнет либо кривостью, либо обилием отсебятины.

CityAceE
19.10.2021, 14:59
6502 конвертор
Вот что он из себя представляет:


;
; Cross-Assembler for 6502 series
; Copyright (C) 1997 by Rst7/CBS
;
;-----------------------------------------
; Variable Section
;-----------------------------------------
;
ENABLE.ADDR.MODE EQU 0
OpCode EQU 0
;
;-----------------------------------------
; Parser Section
;-----------------------------------------
;
DEFMAC AdressingError
DISPLAY AdressingError
ENDMAC
;
DEFMAC PARSE_IMD
.IF ENABLE.ADDR.MODE&1
AdressingError
.ELSE
DEFB OpCode|#08
\r DEFB \n\s ; %...
.ENDIF
ENDMAC
;
DEFMAC PARSE_SX
.IF ENABLE.ADDR.MODE&2
AdressingError
.ELSE
DEFB OpCode|#00
\r DEFB \n\s ; (...,X)
.ENDIF
ENDMAC
;
DEFMAC PARSE_SY
.IF ENABLE.ADDR.MODE&4
AdressingError
.ELSE
DEFB OpCode|#10
\r DEFB \n\s ; (...),Y
.ENDIF
ENDMAC
;
DEFMAC PARSE_IX
.IF ENABLE.ADDR.MODE&8
AdressingError
.ELSE
.IF \0&#FF00
DEFB OpCode|#14
\r DEFB \0 ; ...,X ZERO
.ELSE
DEFB OpCode|#1C
\r DEFW \0 ; ...,X Norm
.ENDIF
ENDMAC
;
DEFMAC PARSE_IY
.IF ENABLE.ADDR.MODE&16
AdressingError
.ELSE
DEFB OpCode|#18
\r DEFW \0 ; ...,Y
.ENDIF
ENDMAC
;
DEFMAC PARSE_ABSOLUTE
\r .IF ENABLE.ADDR.MODE&32
AdressingError
.ELSE
.IF \0&#FF00
DEFB OpCode|#04
\r DEFB \0 ; ... ZERO
.ELSE
DEFB OpCode|#0C
\r DEFW \0 ; ... Norm
.ENDIF
ENDMAC
;
DEFMAC PARSE_ACC
.IF ENABLE.ADDR.MODE&64
AdressingError
.ELSE
DEFB OpCode|#08
.ENDIF
ENDMAC
;
DEFMAC PARSE
\r .IF " \0"-" "
PARSE_ACC
.ENDIF
\r .IF "\c"-"%"
PARSE_IMD \s
.ENDIF
.IF "\c"-"("|(" \1"-"X)")
PARSE_SX \s,
.ENDIF
.IF "\c"-"("|("\1 "-"Y ")
PARSE_SY \s)
.ENDIF
.IF "\c"-"("
AdressingError
.ENDIF
.IF "\1 "-"X "
PARSE_IX \s,
.ENDIF
.IF "\1 "-"Y "
PARSE_IY \s,
.ENDIF
;
PARSE_ABSOLUTE \s
ENDMAC
;
;-----------------------------------------
; Command Section
;-----------------------------------------
;
DEFMAC ADC
ENABLE.ADDR.MODE = #3F
OpCode = #61
\r PARSE \s
ENDMAC
;
DEFMAC AND
ENABLE.ADDR.MODE = #3F
OpCode = #21
\r PARSE \s
ENDMAC
;
DEFMAC CMP
ENABLE.ADDR.MODE = #3F
OpCode = #C1
\r PARSE \s
ENDMAC
;
DEFMAC EOR
ENABLE.ADDR.MODE = #3F
OpCode = #41
\r PARSE \s
ENDMAC
;
DEFMAC LDA
ENABLE.ADDR.MODE = #3F
OpCode = #A1
\r PARSE \s
ENDMAC
;
DEFMAC ORA
ENABLE.ADDR.MODE = #3F
OpCode = #01
\r PARSE \s
ENDMAC
;
DEFMAC SBC
ENABLE.ADDR.MODE = #3F
OpCode = #E1
\r PARSE \s
ENDMAC
;
DEFMAC STA
ENABLE.ADDR.MODE = #3E
OpCode = #81
\r PARSE \s
ENDMAC
;
DEFMAC BRK
DEFB #00
ENDMAC
;
DEFMAC CLC
DEFB #18
ENDMAC
;
DEFMAC CLD
DEFB #D8
ENDMAC
;
DEFMAC CLI
DEFB #58
ENDMAC
;
DEFMAC CLV
DEFB #B8
ENDMAC
;
DEFMAC DEX
DEFB #CA
ENDMAC
;
DEFMAC DEY
DEFB #88
ENDMAC
;
DEFMAC INX
DEFB #E8
ENDMAC
;
DEFMAC INY
DEFB #C8
ENDMAC
;
DEFMAC NOP
DEFB #EA
ENDMAC
;
DEFMAC PHA
DEFB #48
ENDMAC
;
DEFMAC PHP
DEFB #08
ENDMAC
;
DEFMAC PLA
DEFB #68
ENDMAC
;
DEFMAC PLP
DEFB #28
ENDMAC
;
DEFMAC RTI
DEFB #40
ENDMAC
;
DEFMAC RTS
DEFB #60
ENDMAC
;
DEFMAC SEC
DEFB #38
ENDMAC
;
DEFMAC SED
DEFB #F8
ENDMAC
;
DEFMAC SEI
DEFB #78
ENDMAC
;
DEFMAC TAX
DEFB #AA
ENDMAC
;
DEFMAC TAY
DEFB #A8
ENDMAC
;
DEFMAC TXA
DEFB #8A
ENDMAC
;
DEFMAC TYA
DEFB #98
ENDMAC
;
DEFMAC TSX
DEFB #BA
ENDMAC
;
DEFMAC TXS
DEFB #9A
ENDMAC
;
DEFMAC ASL
ENABLE.ADDR.MODE = 64+32+8
OpCode = #02
\r PARSE \s
ENDMAC
;
DEFMAC BIT
ENABLE.ADDR.MODE = 32
OpCode = #20
\r PARSE \s
ENDMAC
;
DEFMAC for.CP?
DEFB OpCode
\r DEFB \0
ENDMAC
;
DEFMAC CPX
ENABLE.ADDR.MODE = 32
OpCode = #E0
\r .IF "\c"-"%"
for.CP? \n\s
.ENDIF
\r PARSE \s
ENDMAC
;
DEFMAC CPY
ENABLE.ADDR.MODE = 32
OpCode = #C0
\r .IF "\c"-"%"
for.CP? \n\s
.ENDIF
\r PARSE \s
ENDMAC
;
DEFMAC DEC
ENABLE.ADDR.MODE = 32+8
OpCode = #C2
\r PARSE \s
ENDMAC
;
DEFMAC INC
ENABLE.ADDR.MODE = 32+8
OpCode = #E2
\r PARSE \s
ENDMAC
;
DEFMAC JMP
\r .IF "\c"-"("
DEFB #6C
\r DEFW \0
.ELSE
DEFB #4C
\r DEFW \0
.ENDIF
ENDMAC
;
DEFMAC JSR
DEFB #20
DEFW \0
ENDMAC
;
DEFMAC LDX
ENABLE.ADDR.MODE = 32+8
OpCode = #A2
\r .IF "\c"-"%"
for.CP? \n\s
.ENDIF
.IF "\1 "-"Y "
PARSE_IX \s,
.ENDIF
PARSE_ABSOLUTE \s
ENDMAC
;
DEFMAC LDY
ENABLE.ADDR.MODE = 32+8
OpCode = #A0
\r .IF "\c"-"%"
for.CP? \n\s
.ENDIF
.IF "\1 "-"X "
PARSE_IX \s,
.ENDIF
PARSE_ABSOLUTE \s
ENDMAC
;
DEFMAC LSR
ENABLE.ADDR.MODE = 64+32+8
OpCode = #42
\r PARSE \s
ENDMAC
;
DEFMAC ROL
ENABLE.ADDR.MODE = 64+32+8
OpCode = #22
\r PARSE \s
ENDMAC
;
DEFMAC ROR
ENABLE.ADDR.MODE = 64+32+8
OpCode = #62
\r PARSE \s
ENDMAC
;
DEFMAC STX
ENABLE.ADDR.MODE = 32
OpCode = #96
.IF "\1 "-"Y "
for.CP? \0
.ENDIF
OpCode = #82
\r PARSE_ABSOLUTE \s
ENDMAC
;
DEFMAC STY
ENABLE.ADDR.MODE = 32
OpCode = #94
.IF "\1 "-"Y "
for.CP? \0
.ENDIF
OpCode = #80
\r PARSE_ABSOLUTE \s
ENDMAC
;
DEFMAC BCC
DEFB #90,\0
ENDMAC
DEFMAC BCS
DEFB #B0,\0
ENDMAC
DEFMAC BEQ
DEFB #F0,\0
ENDMAC
DEFMAC BNE
DEFB #D0,\0
ENDMAC
DEFMAC BMI
DEFB #30,\0
ENDMAC
DEFMAC BPL
DEFB #10,\0
ENDMAC
DEFMAC BVS
DEFB #70,\0
ENDMAC
;
;---------


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

ivagor
20.10.2021, 09:09
Скриншот (https://msx.org/sites/default/files/photoshoots/MSXRio%202004/msxrio21.jpg) варианта явно не для V9990. Судя по всему проект заглох.
SDLPoP (https://github.com/NagyD/SDLPoP), возможно кому-нибудь будет полезно.

CityAceE
20.10.2021, 11:30
А ведь Джордан Мекнер относительно недавно (10 лет назад) нашёл диски с исходниками оригинально игры под Apple II и обнародовал их. Очевидно, что это самый лучший источник для порта.
Что самое интересное, получить из этих исходников работающий образ диска для Apple ][ оказалось тем ещё квестом! Некоторые энтузиасты безуспешно пытались их скомпилировать, но всё было тщетно. Но нашёлся таки один мастер, который успешно справился с задачей и подготовил пакет ПО, с помощью которого любой желающий сможет собрать своего Принца для Apple ][ под Windows, Linux и MacOS. Скачать этот пакет вместе с исходниками Принца можно отсюда (https://github.com/adamgreen/Prince-of-Persia-Apple-II/blob/build/Notes/pop-build.creole).

goodboy
20.10.2021, 12:01
как я понял в оригинале был нестандартный формат дискеты (доп.защита + немного больший объём 157Kb вместо 140Kb)
это позволило уместить игру на две дискеты, взломанный вариант под стандарт на 3х дискетах.
и запустить именно оригинал на эмуле невозможно (нет поддержки этого формата)
(хотя возможно с момента выхода той статьи что я читал что-то и изменилось)

Lethargeek
20.10.2021, 12:44
вот здесь есть и на три, и на два диска: https://popuw.com/apple.html

CityAceE
20.10.2021, 13:06
и запустить именно оригинал на эмуле невозможно
На знаю какой именно формат дискеты получается на выходе после компиляции указанным пакетом:



c:\>cd c:\Prince-of-Persia-Apple-II\

c:\Prince-of-Persia-Apple-II>Build\win32\make clean all
Cleaning project
Assembling 02 POP Disk Routines/RW1835/POPBOOT35.S
Assembling 02 POP Disk Routines/RW1835/RW1835.POP.S
Assembling 01 POP Source/Source/BOOT.S
Assembling Other/RW18525.S
Assembling 01 POP Source/Source/AUTO.S
Assembling 01 POP Source/Source/CTRLSUBS.S
Assembling 01 POP Source/Source/COLL.S
Assembling 01 POP Source/Source/CTRL.S
Assembling 01 POP Source/Source/FRAMEADV.S
Assembling 01 POP Source/Source/FRAMEDEF.S
Assembling 01 POP Source/Source/GAMEBG.S
Assembling 01 POP Source/Source/GRAFIX.S
01 POP Source\Source\GRAFIX.S:2016: warning: DO/IF directive is missing matching FIN directive.
Encountered 0 errors and 1 warning during assembly.
Assembling 01 POP Source/Source/HIRES.S
Assembling 01 POP Source/Source/HRTABLES.S
Assembling 01 POP Source/Source/MASTER.S
Assembling 01 POP Source/Source/MISC.S
Assembling 01 POP Source/Source/MOVER.S
Assembling 01 POP Source/Source/SEQTABLE.S
Assembling 01 POP Source/Source/SOUND.S
Assembling 01 POP Source/Source/SUBS.S
Assembling 01 POP Source/Source/TABLES.S
Assembling 01 POP Source/Source/UNPACK.S
Assembling 01 POP Source/Source/TOPCTRL.S
Assembling 01 POP Source/Source/SPECIALK.S
01 POP Source\Source\SPECIALK.S:248: warning: fin directive without corresponding DO/IF directive.
Encountered 0 errors and 1 warning during assembly.
Assembling 01 POP Source/Source/VERSION.S
Creating disk image PrinceOfPersia_3.5.hdv
Creating disk image PrinceOfPersia_5.25_SideA.nib
Creating disk image PrinceOfPersia_5.25_SideB.nib


Но у меня образ дискеты запустился на эмуляторе AppleWin (https://emutopia.com/index.php?option=com_cobalt&task=files.download&tmpl=component&id=30248&fid=20&fidx=39&rid=481&return=aHR0cHM6Ly9lbXV0b3BpYS5jb20vaW5kZXgucGhwL2V tdWxhdG9ycy9pdGVtLzMxNS1hcHBsZS1paS80ODEtYXBwbGV3a W4%3D):
https://pic.maxiol.com/thumbs2/1634724364.1604655705.popappleii.png (https://pic.maxiol.com/?v=1634724364.1604655705.popappleii.png&dp=2)

CityAceE
20.10.2021, 19:51
Однако довольно странная графика у Apple II.

На заставке ничего не разобрать, какая-то мешанина из 15-ти цветов:
https://pic.maxiol.com/images2/1634748342.1604655705.pop1.png https://pic.maxiol.com/images2/1634748383.1604655705.pop2.png

В самой игре используется только 4 цвета, включая чёрный и белый:
https://pic.maxiol.com/images2/1634748413.1604655705.pop3.png https://pic.maxiol.com/images2/1634748436.1604655705.pop4.png

Wikipedia говорит про графический режим этого компьютера так: "The Apple II's Hi-Res mode was peculiar even by the standards of the day." (Режим Hi-Res в Apple II был своеобразным даже по меркам того времени.)

jerri
20.10.2021, 20:20
Однако довольно странная графика у Apple II.

На заставке ничего не разобрать, какая-то мешанина из 15-ти цветов:
https://pic.maxiol.com/images2/1634748342.1604655705.pop1.png https://pic.maxiol.com/images2/1634748383.1604655705.pop2.png

В самой игре используется только 4 цвета, включая чёрный и белый:
https://pic.maxiol.com/images2/1634748413.1604655705.pop3.png https://pic.maxiol.com/images2/1634748436.1604655705.pop4.png

Wikipedia говорит про графический режим этого компьютера так: "The Apple II's Hi-Res mode was peculiar even by the standards of the day." (Режим Hi-Res в Apple II был своеобразным даже по меркам того времени.)

значит так
ширина экрана эппла 280 байт
это 40 байт по 7 бит
цвета задаются специфически.


Точки в чётных столбцах экранного байта могли быть черными, фиолетовыми или голубыми, а точки в нечётных столбцах могли быть чёрными, зелеными или красными. Невозможно смешать цвета зелёный и голубой, зелёный и красный, или фиолетовый и красный в том же самом экранном байте. Если бит 0, то соответствующая точка погашена, а две «единичные» точки расположенные рядом всегда отображаются белыми, даже если они относятся к различным байтам. Для текста такой цвет не годится, а для игр это означает лишь, что цветовое разрешение — вдвое ниже (140×192).


B кстати про память тоже тут есть (https://habr.com/ru/post/495696/)

CityAceE
20.10.2021, 21:24
jerri, статью на Wiki я первым делом прочитал. Но всё равно мне лично информации пока недостаточно. Я просто хочу понять насколько такой тип графики ложится на графический режим Специалиста МХ, чтобы можно было поэкспериментировать прямо с оригинальными спрайтами, без какой-либо их предварительной конверсии и доработки.

jerri
20.10.2021, 22:06
jerri, статью на Wiki я первым делом прочитал. Но всё равно мне лично информации пока недостаточно. Я просто хочу понять насколько такой тип графики ложится на графический режим Специалиста МХ, чтобы можно было поэкспериментировать прямо с оригинальными спрайтами, без какой-либо их предварительной конверсии и доработки.

а что там по цвету?
но всетаки 7 бит на байт

CityAceE
20.10.2021, 22:29
а что там по цвету?
У Специалиста? Если да, то там два цвета на байт (8 горизонтальных пикселей) из 16-ти доступных. Палитра, как у Спектрума, только плюс ещё яркий чёрный есть.

jerri
20.10.2021, 23:02
У Специалиста? Если да, то там два цвета на байт (8 горизонтальных пикселей) из 16-ти доступных. Палитра, как у Спектрума, только плюс ещё яркий чёрный есть.

второй видеостраницы конечно же нет?

CityAceE
20.10.2021, 23:29
второй видеостраницы конечно же нет?Конечно, там только одна страница.

Отправлено с моего SM-G955F через Tapatalk

CityAceE
21.10.2021, 11:33
Конечно, там только одна страница.
А вот сейчас решил посмотреть что там у Специалиста МХ по части организации расширенной памяти, и, кажется, что страниц там может быть более, чем одна.
http://spetsialist-mx.zx-pk.ru/images/pages.png

ivagor
21.10.2021, 12:03
Из всех клонов специалиста только у эрика можно организовать (за счет палитры) аппаратную двойную буферизацию.

jerri
21.10.2021, 12:23
А вот сейчас решил посмотреть что там у Специалиста МХ по части организации расширенной памяти, и, кажется, что страниц там может быть более, чем одна.
http://spetsialist-mx.zx-pk.ru/images/pages.png

я не понял. там чтоли страницы по 64к? иначе 36к

CityAceE
21.10.2021, 14:43
Из всех клонов специалиста только у эрика можно организовать (за счет палитры) аппаратную двойную буферизацию.
Эх... Эрик слишком редкая машинка, чтобы конкретно на неё ориентироваться.


я не понял. там чтоли страницы по 64к? иначе 36к
В описании (http://spetsialist-mx.zx-pk.ru/index8.html) сказано, что страницы 64 кб:


Кроме страницы ПЗУ, "Специалист MX" имел от 1 до 8 страниц дополнительного ОЗУ используемого под RAM - диск. Объём каждой дополнительной страницы ОЗУ - 64 кБайт.

В общем, какая-то корявая конфигурация памяти получается у Специалиста МХ. Если рассматривать её применительно к Prince of Persia, то я с трудом представляю, как эту дополнительную память вообще можно эффективно использовать, если предположить, что объём оригинального исполняемого кода в 48 Кб будет соответствовать объёму коду порта i8080/Z80. То есть всё пространство пользовательского ОЗУ будет занято исполняемым кодом. Далее идёт видеоОЗУ и небольшой хвост. Придётся постоянно щёлкать страницами и мелкими порциями перекидывать данные графики игры с одного места на другое.

jerri
21.10.2021, 15:14
В общем, какая-то корявая конфигурация памяти получается у Специалиста МХ. Если рассматривать её применительно к Prince of Persia, то я с трудом представляю, как эту дополнительную память вообще можно эффективно использовать, если предположить, что объём оригинального исполняемого кода в 48 Кб будет соответствовать объёму коду порта i8080/Z80. То есть всё пространство пользовательского ОЗУ будет занято исполняемым кодом. Далее идёт видеоОЗУ и небольшой хвост. Придётся постоянно щёлкать страницами и мелкими порциями перекидывать данные графики игры с одного места на другое.

с учетом отсутствия какой либо синхронизации во времени плавность игрового процесса тоже вызывает сомнения

CityAceE
21.10.2021, 15:36
плавность игрового процесса тоже вызывает сомнения
Да, и это тоже. Но ivagor предлагал теоретические варианты как можно перед запуском игры настроить синхронизацию. Ну и в общую копилку ограничений: у Специалиста отсутствует какая-либо возможность узнать цвет пикселя на экране, можно только узнать зажжён он или потушен.
Всё говорит о том, что Специалист - это не игровой компьютер. Но всё равно, он остаётся моей первой любовью ;)

ivagor
21.10.2021, 16:04
с учетом отсутствия какой либо синхронизации во времени
В некоторых специалистах (в т.ч. в mx) есть таймер. С ним гораздо проще поддерживать постоянство скорости игрового процесса, проверено в соответствующих версиях эксолона.

reddie
21.10.2021, 16:31
отсутствует какая-либо возможность узнать цвет пикселя на экране, можно только узнать зажжён он или потушен
Ну, в большинстве случаев цвет известен, мы же сами его туда сперва пишем =) Если правильно понимаю.
Примерно как запись в порты конфигурации на Спектруме: прочитать нельзя, но это никак не мешает ими пользоваться.

CityAceE
21.10.2021, 17:03
Ну, в большинстве случаев цвет известен, мы же сами его туда сперва пишем =) Если правильно понимаю.
На Специалисте ещё всё более запутано, чем кажется с первого взгляда. Мы пишем в порт номер текущего цвета и далее всё, что будет записано в любую область видеоОЗУ будет рисоваться этим цветом. Чтобы поменять цвет, мы снова пишем его в номер в тот же порт и т.д. Предположим, что у нас есть фон в виде шахматной доски с красными и синими клетками, а по этому фону бегает зелёный квадрат. Чтобы рисовать зелёный квадрат нам нужно знать какой под ним цвет фона в данный момент, чтобы выставить правильный цвет и выдавать его в порт. Если бы могли получать цвет фона прямо с экрана - это было бы гораздо проще. Сейчас же нам придётся постоянно обсчитывать клетка какого именно цвета находится под квадратом. А если это не клетка, а какой-то сложный цветной фон, составленный из тайлов?

Я только один раз работал с цветом на Специалисте, при переносе Batty со Спектрума. И там я намучился, конечно, с этой схемой. Batty организована таким образом, что в памяти хранится копия Спектрумовского экрана с его атрибутами. И вот текущий цвет я узнавал как раз из атрибутов этого теневого экрана.

NiKa
21.10.2021, 17:36
Мне больше всего понравилась версия для Macintosh, в неё как то можно под виндой поиграть?

reddie
21.10.2021, 17:50
организована таким образом, что в памяти хранится копия Спектрумовского экрана с его атрибутами
Это и предполагал =) Нужен буфер экрана в обычной памяти, чтобы беспроблемно определять содержимое видеообласти.
Вопрос лишь в наличии доступной памяти, но, коли там имеются некие переключаемые страницы, задача упрощается.

jerri
21.10.2021, 17:58
Это и предполагал =) Нужен буфер экрана в обычной памяти, чтобы беспроблемно определять содержимое видеообласти.
Вопрос лишь в наличии доступной памяти, но, коли там имеются некие переключаемые страницы, задача упрощается.

размер страницы только в 64кб

SlashNet
21.10.2021, 19:01
Мне больше всего понравилась версия для Macintosh, в неё как то можно под виндой поиграть?
В браузере можно попробовать на Archive.org

Apple II
https://archive.org/details/prince_of_persia_side_a_san_inc_crack

Macintosh
https://archive.org/details/PrinceOfPersiaMacintosh

CityAceE
21.10.2021, 19:43
Могу ошибаться, но похоже, что все порты на разные платформы делались "по мотивам" оригинальной игры, согласно авторскому описанию (http://www.jordanmechner.com/downloads/popsource.pdf). Тем интереснее было бы получить точный порт игры, уже полагаясь на авторские исходники. Мне эта идея очень интересна на данный момент, но я один совершенно точно не потяну. Опять же, для меня Prince of Persia является особенной игрой, а для большинства - это одна игра из тысячи. Да и сложно сейчас кого чем-то заинтересовать. Тем не менее было бы интересно переписать все основные алгоритмы для процессора i8080, что позволило бы быстро адаптировать игру для целого ряда советских платформ и даже получить новый вариант для ZX Spectrum.

shattered
24.10.2021, 21:32
Или наваять нечто вроде cannonball (переписанный на C движок аркадного outrun)

Weclemans
05.11.2021, 12:13
Ранее никогда не сталкивался с 6502 и вот сейчас бегло посмотрел систему команд процессора 6502, и мне показалось, что там чуть ли не в лоб можно конвертировать текст программы



LDY #0
COPY:
LDA SRC1,Y
STA $8000,Y
LDA SRC2,Y
STA $8010,Y
LDA SRC3,Y
STA $8020,Y
LDA SRC4,Y
STA $8030,Y
INY
CPY #6
BNE COPY


Вкратце. Код копирует данные из 4 источников в 4 приёмника, по 6 байт. Теперь попробуйте перевести это покомандно и "в лоб" на z80 так, как это делала бы автотрансляция.

Простейшая строка 6502 кода, загружающая индексный регистр, превратится в 4-5 строк кода на z80.
Автоматическая трансляция очень сильно раздует и затормозит код. Без осмысления кода и переписывания его под свой процессор, задачу не решить.

grf
29.11.2021, 14:03
Тем не менее было бы интересно переписать все основные алгоритмы для процессора i8080, что позволило бы быстро адаптировать игру для целого ряда советских платформ и даже получить новый вариант для ZX Spectrum.

Как продвигается?

CityAceE
29.11.2021, 15:00
Как продвигается?
Пока никак :( Слишком глобальная для меня (хотя и очень интересная!) задача при катастрофическом недостатке свободного времени.

ivagor
31.01.2023, 21:13
Libor Lasota начинал делать версию для PMD-85, потом был перерыв и недавно продолжил. В декабре выложил видео (https://www.youtube.com/watch?v=lK-x9by4n6c) интры. Интра играется из внешнего модуля пзу. На его канале есть и более старые видео про PoP. Если кто и сделает принца для 8080, то скорее всего Libor.

CityAceE
01.02.2023, 09:48
Результат работы впечатляет!

https://www.youtube.com/watch?v=lK-x9by4n6c


https://www.youtube.com/watch?v=QvIU9D6S2_g

nzeemin
01.02.2023, 14:51
grf, а что вы думаете насчёт порта на Союз-Неон?
Процессор пошустрее чем на БК - 8 МГц 1806ВМ2 с командами EIS, графику можно выбирать - 1/2/4/8 бит на точку, памяти от 512 КБ.
Графика до 832 x 300, но обычно используется окно нужного размера.
Есть уже два эмулятора - Титуса и мой.
Собирать можно под Windows, используя эмулятор RT-11 в консоли. Можно под Линукс построить кросс-платформенный тулчейн.

grf
02.02.2023, 10:04
Честно говоря, Принц мне поднадоел пока я его делал для БК, наконец-то можно заняться другими играми )

grf
03.02.2023, 07:03
А где можно взять доку по этой машине, где описывалась бы организация памяти/видеопамяти и т.д.?

nzeemin
03.02.2023, 14:36
А где можно взять доку по этой машине, где описывалась бы организация памяти/видеопамяти и т.д.?

https://zx-pk.ru/threads/14857-dokumentatsiya-na-pk-11-16/
https://zx-pk.ru/threads/24587-emulyator-soyuz-neon-pk-11-16-emustudio.html
http://www.emuverse.ru/wiki/%D0%A1%D0%BE%D1%8E%D0%B7-%D0%9D%D0%B5%D0%BE%D0%BD_%D0%9F%D0%9A-11/16_%D0%A2%D0%9E
http://www.emuverse.ru/wiki/%D0%A1%D0%BE%D1%8E%D0%B7-%D0%9D%D0%B5%D0%BE%D0%BD_%D0%9F%D0%9A-11/16_%D0%92%D0%9F%D0%9E

grf
03.02.2023, 14:38
Спасибо, поизучаю.

CityAceE
03.02.2023, 14:55
Прямо произвела на меня впечатление демка от Libor Lasota. Не ожидал, что Принц будет настолько круто выглядеть при однобитной графике. Снова полез в исходники оригинальной игры, чтобы поизучать их и прикинуть что к чему. Начать изучение думал с вывода оригинальной заставки. Задача довольно простая, плюс можно будет понять насколько сложно преобразовывать код написанный для одного процессора под другой. И тут же встал в тупик...

Начало:


*-------------------------------
*
* A T T R A C T
*
* Self-running "attract mode"
*
*-------------------------------
ATTRACTMODE
AttractLoop
lda #1
sta musicon

jsr SetupDHires

jsr PubCredit

jsr AuthorCredit

jsr TitleScreen

jsr Prolog1
]princess
jsr PrincessScene

jsr SetupDHires

jsr Prolog2

jsr SilentTitle

jmp Demo


Допустим, находим процедуру TitleScreen:



TitleScreen
lda #38
jsr tpause

* Unpack title onto page 1

lda #delTitle
jsr DeltaExpPop

ldx #140
lda #s_Title
jsr PlaySongI

* Credit line disappears

jmp CleanScreen

И теперь ищем процедуру DeltaExpPop. И находим только такое:



*-------------------------------
*
* Jump tables
*
*-------------------------------
...
SngExpand ds 3
DblExpand ds 3
DeltaExpPop ds 3
_inverty ds 3
DeltaExpWipe ds 3
...


Не понимаю как эта таблица переходов работает и где по итогу расположены все эти процедуры?

Hunta
03.02.2023, 15:12
И находим только такое:


*-------------------------------
*
* Delta Expand (Pop or Wipe)
*
* In: A = hi byte of crunched data address (in auxmem)
*
*-------------------------------
DELTAEXPPOP
sta PAGE2on
]DE jsr DeltaExp
sta PAGE2off
sta RAMRDaux
sta RAMWRTaux
]rts rts

CityAceE
03.02.2023, 17:29
Да, я находил процедуры, озаглавленные капсом. Но я всё равно не понимаю как это работает.

Видимо, таблица переходов ссылается вот на этот блок:



*-------------------------------
*
* Sits in main l.c. bank 2
*
*-------------------------------
org org

jmp SNGEXPAND
jmp DBLEXPAND
jmp DELTAEXPPOP
jmp INVERTY
jmp DELTAEXPWIPE

jmp PURPLE
jmp PROMPT
jmp BLACKOUT
jmp CLR
jmp TEXT

jmp SETDHIRES
jmp FADEIN
jmp LOADSUPER
jmp FADEOUT

Hunta
03.02.2023, 19:41
Дальше надо с логикой разбираться. В принципе, команды немного знакомы - как-то писал программу под Агат (а там вроде тот же проц), но ДАВНО это было, так что только общая логика понятно, но не детали