| Разработка и ромхакинг > Ромхакинг и программирование |
| Портирование игр с SegaMD/G на SegaCD/MegaCD |
| << < (4/5) > >> |
| ALEX_230_VOLT:
и так, проверил на реальной железе и теперь с уверенностьб могу заявить что Kega Fusion гараздо лучше эмулирует Sega CD, нежели Генс. Правда Azure Lake, НЕ зависает, но воспроизводится некорректно - как будто при быстрой перемотке (ну и ещё похоже на эффект при бешенном frameskip-пе), и это при том что консоль работает на 50 фпс :) в остальном работает нормально. Ну ещё не всегда срабатывает В (медленная остановка), но это мелочь. А что делжны делать SFX и DAC я тоже не понял. DAC и на эмулях и на реальной приставке выдаёт шум разный тональностей, а SFX вообще ничего не делает, правда если щелкать им при 01, то можно затормаживать воспроизведение музыки :) Ну а на счёт проги в целом: хотелось бы добавления возможности менять скорость воспроизведения. Чтобы вот я, обладатель консоли на 50 фпс мог ускорить до 60, и наоборот обладатели 60 замедлить до 50. Ну и управление поменять бы. ИМХО - куда логичнее сделать так: А - воспроизведение, В - медленное затихание, при зажатом С: вверх и вниз - скорость воспроизведения, враво/влево - быстрое листание списка (или выбор альбома. если допустим делать чтобы у каждой игры был свой альбом), Старт - выключение всего |
| Smoke:
SFX -- это звуки из соника. Там звук собирания колец, когда дохнешь итд. DAC -- оцифровки. Не играли из-за пары ошибок. Что интересно, в SMD версии все нормально с ними, а тут пришлось кой-чего добавить и тоже стало нормально. Пока выкладывать не буду, посмотрю еще что ж там с azure lake происходит. Насчет скорости, я пока хз как это осуществить. Драйвер работает из под z80, с которым мне сложней ладить. Segaman, вот мелодии из ZT. Под SMPS z80 Добавлено позже: Разобрался как давать саб-процу команды. В общем грузить новые файлы в ворд-рам теперь не проблема. Порты игр придется делать не тупым делением рома на банки по 256 кб, а по уму: один исполняемый файл, в котором весь код игры (как правило он меньше 256кб), и файлы с ресурсами, которые и будут подгружаться в ходе игры. Только вот хз какая там скорость загрузки. А то тоже есть желание хак BZT на SegaCD перенести, только если скорость загрузки будет маленькая, фиг че получиться. Будут сплошные тормоза, еще больше чем в оригинале Добавлено позже: Все, теперь и Azure Lake работает. Также DAC и SFX починил. http://elektropage.ru/publ/ourwork/hack_39_ostroenie/smps_jukebox_port_scd/17-1-0-69 |
| Teffycom:
--- Цитата ---Насчет скорости, я пока хз как это осуществить. Драйвер работает из под z80, с которым мне сложней ладить. --- Конец цитаты --- Можно в сонике 3 посмотреть, там ведь мелодия "убыстряется", когда монитор с ботинками берешь. |
| ALEX_230_VOLT:
ну что, есть какие то продвижения? sound test это конечно прекрасно, но хотелось бы чего то большего |
| Tempest:
Да,мне тоже интересно. |
| Segaman:
руки дотянутся и дело пойдет. а так времени нехватает |
| Segaman:
щас слегка проглядел ром Sonic1 with Redbook Audio там есть подгрузка кода прямо в память сега сд. в ту которая отвечает за деятельность сабпроца. короче можно по идее заставить извне сега сд делать что угодно. ^_^ щас пока пытаюсь код сдампить и пустить в дело. о результатах сообщу сразу Добавлено позже: код саб проца проигрывающий музье по номеру бинарный Добавлено позже: там походу никто не знает про таблицы :D --- Код: ---PlayTrack: ; CODE XREF: ROM:00004A92p ; ROM:0000584Ep ... cmpi.w #$4252,($400180).l bne.w loc_0_1FAE loc_0_1E2C: ; CODE XREF: sub_0_1E20+14j cmpi.b #$42,($A1200F).l ; 'B' beq.s loc_0_1E2C move.b #$FF,($A12010).l cmpi.b #$81,d0 beq.w loc_0_1ECA cmpi.b #$82,d0 beq.w loc_0_1ED6 cmpi.b #$83,d0 beq.w loc_0_1EE2 cmpi.b #$84,d0 beq.w loc_0_1EEE cmpi.b #$85,d0 beq.w loc_0_1EFA cmpi.b #$86,d0 beq.w loc_0_1F06 cmpi.b #$87,d0 beq.w loc_0_1F12 cmpi.b #$89,d0 beq.w loc_0_1F1E cmpi.b #$8A,d0 beq.w loc_0_1F2A cmpi.b #$8B,d0 beq.w loc_0_1F36 cmpi.b #$8C,d0 beq.w loc_0_1F42 cmpi.b #$8D,d0 beq.w loc_0_1F4C cmpi.b #$8E,d0 beq.w loc_0_1F56 cmpi.b #$8F,d0 beq.w loc_0_1F60 cmpi.b #$90,d0 beq.w loc_0_1F6A cmpi.b #$91,d0 beq.w loc_0_1F74 cmpi.b #$92,d0 beq.w loc_0_1F7E bra.w loc_0_1FAE ; --------------------------------------------------------------------------- loc_0_1ECA: ; CODE XREF: sub_0_1E20+22j move.w #2,($A12012).l bra.w loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1ED6: ; CODE XREF: sub_0_1E20+2Aj move.w #5,($A12012).l bra.w loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1EE2: ; CODE XREF: sub_0_1E20+32j move.w #3,($A12012).l bra.w loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1EEE: ; CODE XREF: sub_0_1E20+3Aj move.w #6,($A12012).l bra.w loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1EFA: ; CODE XREF: sub_0_1E20+42j move.w #4,($A12012).l bra.w loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1F06: ; CODE XREF: sub_0_1E20+4Aj move.w #7,($A12012).l bra.w loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1F12: ; CODE XREF: sub_0_1E20+52j move.w #$C,($A12012).l bra.w loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1F1E: ; CODE XREF: sub_0_1E20+5Aj move.w #$E,($A12012).l bra.w loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1F2A: ; CODE XREF: sub_0_1E20+62j move.w #1,($A12012).l bra.w loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1F36: ; CODE XREF: sub_0_1E20+6Aj move.w #$F,($A12012).l bra.w loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1F42: ; CODE XREF: sub_0_1E20+72j move.w #8,($A12012).l bra.s loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1F4C: ; CODE XREF: sub_0_1E20+7Aj move.w #9,($A12012).l bra.s loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1F56: ; CODE XREF: sub_0_1E20+82j move.w #$A,($A12012).l bra.s loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1F60: ; CODE XREF: sub_0_1E20+8Aj move.w #$D,($A12012).l bra.s loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1F6A: ; CODE XREF: sub_0_1E20+92j move.w #$12,($A12012).l bra.s loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1F74: ; CODE XREF: sub_0_1E20+9Aj move.w #$10,($A12012).l bra.s loc_0_1F86 ; --------------------------------------------------------------------------- loc_0_1F7E: ; CODE XREF: sub_0_1E20+A2j move.w #$11,($A12012).l loc_0_1F86: ; CODE XREF: sub_0_1E20+B2j ; sub_0_1E20+BEj ... move.b #3,($A12010).l stop #$2500 ; --------------------------------------------------------------------------- loc_0_1F92: ; CODE XREF: sub_0_1E20+17Aj cmpi.b #$42,($A1200F).l ; 'B' beq.s loc_0_1F92 move.b #$FF,($A12010).l move.w #0,($A12012).l rts ; --------------------------------------------------------------------------- loc_0_1FAE: ; CODE XREF: sub_0_1E20+8j ; sub_0_1E20+A6j move.b d0,($FFFFF00A).w rts ; End of function sub_0_1E20 --- Конец кода --- Добавлено позже: такой вопрос. что делает команда stop? и что означает ее аргумент? o_0 Добавлено позже: собрал свой ром...чтото не сходится. виснет сабпроц. там какойто код находится в месте где рома уже нет. там уже по идее сега сд. но что там не понятно Добавлено позже: вот ихний код инициализации сега сд --- Код: --- lea ($A12000).l,a6 moveq #0,d0 move.b (a6),d0 bset #1,d0 bclr #0,d0 move.b d0,(a6) moveq #$7F,d0 ; '' loc_0_2B8: ; CODE XREF: RESET+B6j nop nop dbf d0,loc_0_2B8 move.b #9,2(a6) moveq #0,d0 lea ($A12003).l,a3 moveq #0,d0 lea ($416000).l,a0 lea ($420000).l,a1 bsr.w KosDec lea (MainSubcpu).l,a0 lea ($426000).l,a1 moveq #0,d0 move.w #$1EE,d0 loc_0_2F2: ; CODE XREF: RESET+EEj move.b (a0)+,(a1)+ dbf d0,loc_0_2F2 move.b #$2A,($A12002).l ; '*' lea ($A12001).l,a3 moveq #1,d0 loc_0_308: ; CODE XREF: RESET+106j move.b d0,(a3) cmp.b (a3),d0 bne.s loc_0_308 nop nop nop nop nop nop nop nop nop nop bsr.w sub_0_34A nop nop nop nop nop nop nop nop nop nop bsr.w sub_0_34A move.b #$FF,($A12010).l --- Конец кода --- мой ром виснет изза этого lea ($416000).l,a0 lea ($420000).l,a1 bsr.w KosDec а без этого виснет сега сд да и вобоих случая сега сд виснет. ничо не пойму Добавлено позже: показать все что скрыто :cool: скрин Добавлено позже: вот почему с 4 мега не желательно ром продолжать. потому что там сега сд обитает ^_^ Добавлено позже: кстати по адресу 200000 нулями забито, а везде FFками. вероятно можно даже заставить сега сд подгружать туда нужные данные. Добавлено позже: моя прога просмотрщик опять отличилась. почему то там где ром кончается продолжением уже следует остаток биоса. :) |
| Smoke:
В шаблоне есть макрос для проигрывания музыки по оффсету. Надо только номер трека сопоставить с оффсетом и все. --- Код: ---;----------------------------------------------------------------------- ; BIOS_MSCPLAY - Starts playing at a specified track. Continues playing ; through subsequent tracks. ; ; input: ; a0.l address of 16 bit track number ; ; returns: ; nothing ;----------------------------------------------------------------------- BIOS_MSCPLAY macro CDBIOS #MSCPLAY endm --- Конец кода --- А номера давать можно через коммуникационные порты: $A12000-$A1200E со стороны MAIN CPU и $00FF8000-$00FF800E со стороны SUB CPU. И да, можно не изобретать велосипед, если охота также сделать (карик+диск для музыки), а просто взять их шаблон, посмотреть какой порт юзается и писать в него данные. А прога сама разберется на диске :D |
| Segaman:
в роме порты $A12000 заюзаны и $400000 для записи проги саб кпу видимо это возможно) надо бы мой просмотрщик внедрить в соника например заместо левла чтоб запускался. отследить изменения в коде саб кпу, что там все таки происходит то |
| vladikcomper:
--- Цитата ---такой вопрос. что делает команда stop? --- Конец цитаты --- Инструкция STOP приостанавливает процессор и ожидает прерывания. В качестве единственного операнда, насколько помню, принимает слово, которое запишется в статус регистр - SR. Это очень удобно, чтобы сразу задать маску перываний. Например stop $2300 приостоновит процессор, пока не случится прерывание выше третьего уровня (в этом случае доступны HInt - 4 уровень и VInt - 6 уровень). В официальных играх такой способ ожидания прерываний использовали редко. К тому же я слышал, что у обычного Gens проблемы с эмуляцией этой команды и при ее использовании будут какие-то баги со временем. К слову, про Sonic 1 with RA. Насколько помню, оборудование Sega CD инициализируется в режиме Mode 0 (хотя, могу ошибаться в цифре). В этом режиме код программы расположен на оффсетах $000000-$200000, занимая 2 Мб, т.е. внутри программы данные надо адресовать относительно нулевого оффсета, а не $200000, как это делают обычно. Не реальном железе программа запускается с картриджа и использует оборудование Mega CD, например диск, с которого играет музыка. Не знаю, поможет ли это, просто сказал, что я по этому поводу знаю. Сам пока Сегой Сиди не занимался, хотя интерес есть. Думаю о том, как портировать свой Соник хак туда =Р Но не факт. |
| Smoke:
Да нет там все как в моде2, только ворд рам делится на 2 части по мегабиту для основного и дополнительного процесооров. Чтобы они могли в одно и то же время к ворд рам обращаться (в моде 2 только один из двух процев мог работать в данный момент). Да и имхо не нужно это если сд часть используется лишь для музыки. PRG RAM то на месте остается, а это память для программы саб-проца. Главное тут она, а данные ей давать через порт можно. Word RAM тут вообще не нужна. Как время будет попробую свою теорию опробовать Добавлено позже: В общем загрузка проги в PRG RAM происходит с картриджа, а также загрузка части биоса, отвечающего за воспроизведение музыки тоже. Его приходится грузить самому, в случае же с полноценной игрой SCD, он грузится автоматически. В роме куча процедур этого биоса и мне все лень их сейчас вытаскивать, поэтому оставляю до лучших времен. Ну или ты Segaman вытаскивай побыстрее)) $5F22 -- вот оффсет этой части биоса |
| Segaman:
адрес ты какой указал? я там код самого соника тока вижу. короче встроил свой просмотрщик в ром. он запускается при загрузке левла. |
| Smoke:
Адрес в роме. Тут все верно, все загрузки идут с картриджа, на диске только музло. |
| Segaman:
я в курсе. яж и пытаюсь отследить, что куда грузится. пока толком не пойму только одну вещь. зачем там декомпрессия $416000 в $420000 нужна? она ж там вроде даже и неработает. бурда какаято o_0 |
| Tempest:
Все заглохло? |
| gepar:
Похоже что пока всё приостановлено, Segaman, ведь, как главный активист этой темы, занялся ремастерингом жаб. |
| Segaman:
да, покачто интереса и времени нет. я стараюсь делать постепенно несколько вещей, чтобы поддерживать стабильный интерес. у меня щас интересы в списке самый высокий приоритет вверху: Sega Gopher Battletoads Remastered Моя игруха, название не разглошаю Sega CD последние 2 пока намертво глухи :-\ но я планирую к сега сд вернуться не надолго после первой беты лягушек и еще поковырять а игруха моя разрастается благодаря хацкингу лягушек. яж либы новые пишу, а они очень автоматичны :cool: в игре на ура будут работать, оссобенно вот этот скрипт уменьшения картинки. я над ним 3-4 часа сидел, моск ломал, чтоб ничего не упустить, но пока не тестил не разу, что очень плохо. кстати жанр игрухи тож не скажу, зато скажу что сайт для нее уже зареган ^_^ и название менять не буду. даже геймплей написал Добавлено позже: совсем забыл, у меня ж еще сорсы и доки на ноутбуке, а он в ремонте, так что тут пока без него никак. кстати его уже почиили, оказывается я память сварил на видюхе. осталось забрать, но проблема сразу не решиться, так как очень многое я успел сделать на станционарнике. придется файлы копировать на флешку и отдуда с помощью тоотал командыр записывать ток новые файлы. гдето день придется на это убить :-\ |
| Ti_:
--- Цитата: Smoke от 08 Декабрь 2011, 17:15:46 ---И да, можно не изобретать велосипед, если охота также сделать (карик+диск для музыки), а просто взять их шаблон, посмотреть какой порт юзается и писать в него данные. А прога сама разберется на диске :D --- Конец цитаты --- А где шаблон. |
| Smoke:
http://gendev.spritesmind.net/files/mcd/Luke_ProjectCD.zip |
| Ti_:
--- Цитата: Smoke от 05 Март 2012, 13:30:55 ---http://gendev.spritesmind.net/files/mcd/Luke_ProjectCD.zip --- Конец цитаты --- Спасибо. Такой-то шаблон, это же для сегацд? А чтобы просто шаблон с процедурой закидывания из плеера из рома в сегацд рам. В роме соник1 не совсем ясно как работает. --- Код: ---ROM:000002E0 lea (aMainSubcpu).l,a0 ; "MAIN-SUBCPU" ROM:000002E6 lea ($426000).l,a1 ROM:000002EC moveq #0,d0 ROM:000002EE move.w #$1EE,d0 ROM:000002F2 ROM:000002F2 loc_0_2F2: ; CODE XREF: RESET+EEj ROM:000002F2 move.b (a0)+,(a1)+ ROM:000002F4 dbf d0,loc_0_2F2 --- Конец кода --- Понятно что код проги с $35E по $54A, но в нем самом содержится куча jsr к sub_0_5F22 --- Цитата ---ROM:0000053C jsr sub_0_5F22 --- Конец цитаты --- а там уже отсебятины тонна. Добавлено позже: --- Цитата: Segaman ---Добавлено позже: код саб проца проигрывающий музье по номеру бинарный Добавлено позже: там походу никто не знает про таблицы --- Конец цитаты --- В $4730 такой же еще код. --- Код: ---ROM:00004730 sub_0_4730: ; CODE XREF: ROM:00003AF2p ROM:00004730 ; ROM:00003BC2p ... ROM:00004730 cmpi.w #$4252,($400180).l ROM:00004738 bne.w loc_0_48EE ROM:0000473C ROM:0000473C loc_0_473C: ; CODE XREF: sub_0_4730+14j ROM:0000473C cmpi.b #$42,(byte_0_A1200F).l ROM:00004744 beq.s loc_0_473C ROM:00004746 move.b #-1,(byte_0_A12010).l ROM:0000474E cmpi.b #$81,d0 ROM:00004752 beq.w loc_0_47E2 ROM:00004756 cmpi.b #$82,d0 ROM:0000475A beq.w loc_0_47EE --- Конец кода --- Добавлено позже: --- Цитата: Smoke от 08 Декабрь 2011, 17:15:46 ---а просто взять их шаблон, посмотреть какой порт юзается и писать в него данные. --- Конец цитаты --- --- Код: ---что там смотреть, очевидно же номер трека который играть: move.w #7,($A12012).l --- Конец кода --- p.s. а где список оффсетов на треки кстати? Добавлено позже: --- Цитата: Smoke от 10 Декабрь 2011, 11:51:48 ---Добавлено позже: В общем загрузка проги в PRG RAM происходит с картриджа, а также загрузка части биоса, отвечающего за воспроизведение музыки тоже. В роме куча процедур этого биоса и мне все лень их сейчас вытаскивать, поэтому оставляю до лучших времен. $5F22 -- вот оффсет этой части биоса --- Конец цитаты --- Если $5f22 это биос он же в роме лежит.. Выходит не грузится. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |