Разработка и ромхакинг > Ромхакинг и программирование
Портирование игр с SegaMD/G на SegaCD/MegaCD
<< < (5/5)
Smoke:
В том то и дело, что грузится в этом режиме (моде1), во втором да, не грузится. А так моде1 и подразумевает инициализацию с картриджа (boot from cartridge)
Segaman:
я понял. значит гдето инициализация этого режима и только тогда можно прогу записать....
но почему то мой код все записывал а работать все отказывалось.
проц сега сд просто вешался :-\
все равно не пойму
Ti_:
Взломал я вообщем этого соника1моуд:
нефига там всё лишнее,только плеер нужен (тот что 35e-54A)

asm+bin:


как сделал:
Добавлено позже:
вот что надо было сделать чтобы работало:
1)добавлена хрен какая-задержка, без нее не запускалось.

--- Цитата ---sub_0_5BA:
      moveq   #$40,d1
wait:
      nop
      nop
      nop
      dbf   d0,wait
      move.w   #$7FFF,d0
      dbf   d1,wait
--- Конец цитаты ---

какие-то настойки вдп - то,что оставлено.

--- Цитата ---                      bsr.w   vdp_init
      move.w   #$2300,sr
--- Конец цитаты ---

      move.b   #$81,d0
      bsr.w   play_music_id     ; 4730 копипист таблицы треков

вбланк
должно быть 5-ть нопов. если d0-a6, то 1ноп или jsr:

--- Код: ---VBLANK:
movem.l d0-a5,-(sp)
nop
nop
nop
nop
nop

moveq #0,d0
move.w ($A12000).l,d0
bset #8,d0
move.w d0,($A12000).l

movem.l (sp)+,d0-a5
rte
--- Конец кода ---


Добавлено позже:
При загрузке картриджа+диска не пашет дма из рома, только из рама - как пофиксить?

rrr mode 1  :lol::
http://www.youtube.com/watch?v=6El2laAXzt0
Smoke:
Ti_, красавец. Избавил меня от разбирания всей этой шняги. Теперь можно без особых проблем вставлять куда угодно :)

--- Цитата: Ti_ ---При загрузке картриджа+диска не пашет дма из рома, только из рама - как пофиксить?
--- Конец цитаты ---
Может быть эти самые какие то настройки вдп повлияли?
Ti_:

--- Цитата: Smoke от 12 Март 2012, 22:04:00 ---Теперь можно без особых проблем вставлять куда угодно :) Может быть эти самые какие то настройки вдп повлияли?

--- Конец цитаты ---
Нет, баг возникает даже без добавления в игру плеера. Просто при загрузке диска.   И не важно в какой игре.  Например откроем оригинальный dune2 + пустой CD диск  - артефакты много где.
Segaman:

--- Цитата: Segaman от 08 Декабрь 2011, 17:12:51 ---                lea     ($416000).l,a0
                lea     ($420000).l,a1
                bsr.w   KosDec

--- Конец цитаты ---
короче ром успевает когда то загрузить в $416000 архив биоса.
который в свою очередь извлекается в $420000
щас я сдамплю этот биос и попробую с ним что нибудь сделать.
как я понял для воспроизведения нужны две вещи.
биос и код проигрывания... и прямые руки. щас буду пробовать, об успехах отпишусь
Добавлено позже:
короче биос сжатый там по дефолту обитает при инициализации моде 1 вообще.
так что виснет ром у меня не поэтому.
Добавлено позже:
биос запустил, прогу в саб кпу отправил и успешно запустил.
а отклика от сега сд ноль.
Ti_, выручай.
Ti_:

--- Цитата: Segaman от 14 Сентябрь 2012, 14:04:39 ---Ti_, выручай.

--- Конец цитаты ---
Я уже выкладывал рип-плеера. Правда там был небольшой косячок.
Так что вот еще раз рабочая версия, та что у меня в хаке RRR лежит.
Этот код надо запустить 1раз после стандратной инициализации.

Далее управление плеером осуществляется со стороны обычной сеги :

--- Код: ---stop_cd_music:
tst.b (sega_cd_flag).w
beq.s no_scd_stop
lea ($A1200F).l,a0

scd_wait:
move.b (a0),d0
bne.s   scd_wait
move.b  d0,1(a0)
stop    #$2500

scd_wait2:
                cmpi.b  #$42,(a0)
beq.s scd_wait2
move.b  #-1,1(a0)

no_scd_stop:
rts
--- Конец кода ---

play track (d0 - номер трека)  (повторяемая игра трека)

--- Код: --- lea ($A12012).l,a0
move.w d0,(a0)
move.b #3,-2(a0)
stop #$2500
loc_0_48D2:
cmpi.b #$42,-3(a0)
beq.s loc_0_48D2
move.b #-1,-2(a0)
move.w #0,(a0)
rts
--- Конец кода ---
Кроме этих двух плеер ещё много чего держит, можешь проверять разными комбами - там в коде плеера 9 условий где-то, вот ты ими и управляешь - запись #3 как раз нужна для запуска трека.

Самое главное чтобы всё работало нужно в VBLANK добавить строчку:


--- Код: ---VBLANK:
movem.l d0-a6,-(sp)
bset #8,($A12000).l
--- Конец кода ---

Без нее ничего работать не будет. Так же не будет работать если сейвишь меньше регистров (например d0-d2/a0-a2).
Вообщем она не должна выполняться сразу же при прерывании, только чуть позже - так что если не работает пихай чуть после, или добавляй нопы после сейва регов.
Segaman:
все равно ничего не работает.

--- Цитата: Ti_ от 14 Сентябрь 2012, 18:06:50 ---Далее управление плеером осуществляется со стороны обычной сеги :

--- Код: ---stop_cd_music:
tst.b (sega_cd_flag).w
beq.s no_scd_stop
lea ($A1200F).l,a0

scd_wait:
move.b (a0),d0
bne.s   scd_wait
move.b  d0,1(a0)
stop    #$2500

scd_wait2:
                cmpi.b  #$42,(a0)
beq.s scd_wait2
move.b  #-1,1(a0)

no_scd_stop:
rts
--- Конец кода ---

--- Конец цитаты ---
что это? куда это встяавлять?
Ti_:

--- Цитата: Segaman от 15 Сентябрь 2012, 11:45:39 ---все равно ничего не работает.что это? куда это встяавлять?

--- Конец цитаты ---
Что это а ты читаешь умеешь? Stop cd music - то есть остановка проигрывания. У меня после выхода с гонки это вставлено.
А следующий за ним запуска трека по его номеру, номер трека в d0.  Перед запуском трека надо остановить вначале. Если ничего не получится - скидывай асм я тебе поправлю.
Segaman:
попробую новый ром собрать.
внутри моего не пашет
Ti_:
Вверх играть следующий трек, вниз играть предыдущий. Только нажимать и отпускать сразу не учтено нажатие.

Segaman:
спасибо, посмотрем
Segaman:
я так думаю чтобы дма работало надо на лету вырубать моде 1
т.е. заставить сегу играть трек, а моде 1 отрубить
Добавлено позже:
надо доку почитать, и поискать как включать и отключать моде 1
Segaman:
щас копал демку. и обнаружил что сабрутины, чтоб музыку играть там нет.
но не в этом суть. суть в том, что сабротину грузящую инфу с диска можно слямзить и отсюда.
итог такой, вместе с музыкой, можно будет и читать что либо с диска.
на сколько я помню сегасд грузит в память 200000, а там ром не часто обитает)
ну это я на будущее.
щас такая проблема. кто знает, как заставить сега сд завершать воспроизведение музыки плавно?
или игру подскажите на сега сд, где это реализовано
ALEX_230_VOLT:
Segaman, отлично, надеюсь это приближает к воплощению мою мечту создать сборник ромов для Sega CD :)

А что касается игр с плавным затиханием, то эффект довольно редкий. Я вот щас пока нашёл такое только в Ecco the Dolphin. Там при пропуске заставки мелодия плавно стихает
Добавлено позже:
вот как это выглядит
http://ru.twitch.tv/alex_230_volt/b/333454928
Segaman:
не воспроизводится.
в общем посмотрел в тюбике.
значит надо будет покопать образ.
Навигация
Главная страница сообщений
Предыдущая страница

Перейти к полной версии