Неужели Принца до сих пор не портировали на MSX?
Отправлено с моего SM-G955F через Tapatalk
Вид для печати
Неужели Принца до сих пор не портировали на MSX?
Отправлено с моего SM-G955F через Tapatalk
grf, я думаю, что после такого великолепного порта на БК, портировать Принца на MSX дело техники ;) Вся графика и алгоритмы имеются. Да? ;)
На msx(2) удобнее портировать с sam coupe или даже c atm (но atmовская графика не так удачно подходит).
Его тогда уж проще со спековского римейка портировать. Вместе с клэшингом :D
а чё не с SegaMasterSystem ?
Удобнее портировать с той платформы, с которой есть исходный код. В данном случае автору порта для БК будет гораздо проще освоить новый ассемблер и ахрихтектуру MSX, чем условному любителю MSX копаться в бинарниках игры пусть и под тот же Z80. К тому же, при всём уважении к Nicodim'у и его порту на ZX Spectrum игра всё-таки получилась сыроватой, с небольшой долей багов. Под АТМ, вроде исходников не выкладывали. C SMS было бы круче всего портировать, так как там игра "фирменная", но опять же - нет исходников. А под Sam Cope, если мне не изменяет память, полную версию Принца так и не выпустили. А так-то есть ещё фирменная версия под GameBoy и его урезанный Z80.
А ведь Джордан Мекнер относительно недавно (10 лет назад) нашёл диски с исходниками оригинально игры под Apple II и обнародовал их. Очевидно, что это самый лучший источник для порта.
По принцу не специалист, но пишут, что главное отличие - более простые охранники.
За других сказать не могу, но мне было бы проще портануть с sam coupe на msx2 без исходников, чем с БК с исходником. И графику можно взять без изменений.
Ну это если исполняемый код будет работать по тем же адресам, что и в оригинальной платформе. Я не знаю как устроена память в MSX, но думаю, что её организация сильно отличается от того же Sam Coupe.
offtop про управление памятью sam coupe и msx2
У sama внутреннее озу фактически переключается по 32 Кб (если не брать во внимание возможности LMPR по переключению половин озу/пзу) и это на первый взгляд можно сэмулировать msx2шным маппером с 16 Кб страницами.[свернуть]
Посмотрел. Это очень странный порт:
- неверный прыжок вверх, если вверху есть кирпич
- не качаются "нестабильные" плиты при приземлении на один уровень с ними
- нет звуков нажимаемых плит
- нет звуков качающихся плит
- нет "звездочки" при потере жизни, при падении, в бою
- не бликует меч
- неправильная арка в подземелье, вообще спрайты обстановки неверной конфигурации, что тянет за собой и неправильные лабиринты
- принц не проваливается при обрушении пола под ним во время боя, да и в остальное время не особо проваливается
- есть звук осторожных шагов, хотя как раз там звука и не должно быть
- нет музыки при восстановлении жизни
- нет звуков звона мечей, доставания меча (хотя именно на звук доставания меча должен реагировать стражник, если до этого он Принца не обнаруживал)
- у стражника неверная поза ожидания
- неверное слезание, из-за чего невозможно спуститься на несколько этажей просто держа клавишу "вниз"
- решетка в 3м вообще не закрывается, что выбрасывает основную ловушку 3-го лабиринта
- во дворцах нет узора на стенах
- не видно угла решетки в нижнем окне
- стражник не запоминает где был, если войти в окно снова - он снова на своем месте (стражники вообще не перемещаются по лабиринту самостоятельно в погоне за принцем, как должны. В оригинале стражники преследуют Принца, спрыгивают за ним вниз, и все это даже когда они не видны)
- неверные колоннады в дворцах (нет спрайтов с одной опорой, нет спрайтов завершения колоннады слева, кирпич вместо завершения справа, нет спрайтов короткого пролета, из-за этого колоннада не стыкуется с решетками)
- для двойника использованы те же спрайты, что и для Принца
- стражник ходит по воздуху (ему пофиг, что под ним проваливается пол)
- нет толстого стражника
- все стражники дерутся одинаково, нет удара сразу после блока и вообще нет блоков
- вообще нет таймера игры
- только один спрайт облупившейся штукатурки
- только один спрайт стены
- принц не достает меч, если стражник к нему спиной
- стражник не разворачивается к принцу
- в бою кнопка поднимается под стоящим на ней принцем
- решетка не опускается постепенно, а просто закрывается через какое-то время
- кнопка нажимается, когда принц просто наклоняется над ней, но не касается
- половина плит вообще не падает из тех, что должны
- в 12-м нет лежащего меча двойника
- двойник не спрыгивает сверху, а вбегает слева
- сцена с двойником вообще левая
- невидимые плиты не появляются так, как должны
И это при том, что комп имеет минимум 256к ОЗУ
Тут еще смотря с чем сравнивать, некоторые отличия характерны и для версий на других компах. Например таймера нет на amstrad cpc, а вот на sam coupe он по крайней мере в одном месте был. В любом случае решать тому, кто будет портировать (если вдруг кто-то будет, что маловероятно), насколько критичны перечисленные недостатки и насколько важна простота портирования.
Вот карта памяти для оригинального Принца:
https://pic.maxiol.com/thumbs2/16346...329131.pop.png
@ivagor, как ты считаешь, на Специалисте MX теоретически можно было бы написать полноценного Принца Персии с нормальной графикой, всеми уровнями и т.д.?
У меня есть две особенные игры: Batty и Prince of Persia. Над Batty для Специалиста я уже поработал :) А для Спектрумовского Принца карту уровней сделал. Но у меня пока не было пересечения Принца и Специалиста ;)
мне кажется есть разница в понятиях - порт (точный перенос алгоритмов) и игра по-мотивам
goodboy, конечно, есть! Я за точный порт на основе авторских исходников.
ещё можно попытаться глянуть на версию с AmstradCPC
Так или иначе портировать принца на MX теоретически можно, а насчет полноценнности игры и нормальности графики это уже вопросы спорные. Версии для разных компов довольно сильно отличаются.
Более-менее реально было бы портануть на mx или вектор с pmd85, но к сожалению проект того порта похоже не будет завершен в обозримом будущем.
Вот на Sam Coupe, с финалом: https://youtu.be/pu4utj0eZ9k
на MSX есть демо-версия 2007 года: https://www.youtube.com/watch?v=29X12K4Sy5M
Ранее никогда не сталкивался с 6502 и вот сейчас бегло посмотрел систему команд процессора 6502, и мне показалось, что там чуть ли не в лоб можно конвертировать текст программы в i8080/Z80. Или это заблуждение? Но ведь Alone Coder как-то перенёс Super Mario Bros. с NES на ATM, используя оригинальный код с 6502.
Эта ссылка уже была
- - - Добавлено - - -
Для V9990
посмотри в комплекте с Tasm`ом https://vtrd.in/system/TASM_412.ZIP 6502 конвертор
Похоже, что пытались портировать со SNES. Я проходил SNES'овскую версию, причём на настоящей японской SNES в год выхода игры (1992). Считаю, что это лучший Принц Персии среди всех платформ и версий. Там даже лабиринты расширены по сравнению с оригинальной игрой. Ну и графика со звуком выгодно отличаются от всех остальных версий.
https://www.youtube.com/watch?v=0q_6tOpnquI
https://www.youtube.com/watch?v=K9XYgkPOUOw
Вот что он из себя представляет:
Похоже, что это не конвертор, а транслятор, позволяющий на Спектруме компилировать исходный текст для 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
;
;---------
Что самое интересное, получить из этих исходников работающий образ диска для Apple ][ оказалось тем ещё квестом! Некоторые энтузиасты безуспешно пытались их скомпилировать, но всё было тщетно. Но нашёлся таки один мастер, который успешно справился с задачей и подготовил пакет ПО, с помощью которого любой желающий сможет собрать своего Принца для Apple ][ под Windows, Linux и MacOS. Скачать этот пакет вместе с исходниками Принца можно отсюда.
как я понял в оригинале был нестандартный формат дискеты (доп.защита + немного больший объём 157Kb вместо 140Kb)
это позволило уместить игру на две дискеты, взломанный вариант под стандарт на 3х дискетах.
и запустить именно оригинал на эмуле невозможно (нет поддержки этого формата)
(хотя возможно с момента выхода той статьи что я читал что-то и изменилось)
вот здесь есть и на три, и на два диска: https://popuw.com/apple.html
На знаю какой именно формат дискеты получается на выходе после компиляции указанным пакетом:
Но у меня образ дискеты запустился на эмуляторе AppleWin:Код: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
https://pic.maxiol.com/thumbs2/16347...popappleii.png
Однако довольно странная графика у Apple II.
На заставке ничего не разобрать, какая-то мешанина из 15-ти цветов:
https://pic.maxiol.com/images2/16347...55705.pop1.png https://pic.maxiol.com/images2/16347...55705.pop2.png
В самой игре используется только 4 цвета, включая чёрный и белый:
https://pic.maxiol.com/images2/16347...55705.pop3.png https://pic.maxiol.com/images2/16347...55705.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 кстати про память тоже тут есть
jerri, статью на Wiki я первым делом прочитал. Но всё равно мне лично информации пока недостаточно. Я просто хочу понять насколько такой тип графики ложится на графический режим Специалиста МХ, чтобы можно было поэкспериментировать прямо с оригинальными спрайтами, без какой-либо их предварительной конверсии и доработки.
А вот сейчас решил посмотреть что там у Специалиста МХ по части организации расширенной памяти, и, кажется, что страниц там может быть более, чем одна.
http://spetsialist-mx.zx-pk.ru/images/pages.png