Разработка и ромхакинг > Ромхакинг и программирование
разогнал эмуль генс11а. (генсмуви)
(1/6) > >>
Ti_:
забираем тут.:
GensMovie11a 15Mhz + (поддержка ромов 13мб)

отличия генс11а от других генс:
32бит держит, солидные 7z и rar, конверт из муви в avi с выбором кодека., всякие ромхакерские плюшки, скриншоты 8бит пнг сразу. и проч.
Просил его еще разогнать давно, но у Gmaniac'a ошибка была с pwm.obj.
у меня тоже такая ошибка (всё по ридми делал), визуал студия 2005 (рекоменд.),  вообщем там в папке дебаг этого файла нет., но зато есть pwm1.obj,  я скопировал его переименовал в pmw.obj и заново перезапустил. таким образом 2-ой раз собралось без ошибки. (пока вроде работает без глюков).
Lost Soul:
Очень интересно.а зачем это нужно? Бладшот идёт быстрее чем надо...
Ti_:

--- Цитата: Lost Soul от 07 Октябрь 2009, 21:16:48 ---Очень интересно.а зачем это нужно? Бладшот идёт быстрее чем надо...

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

Добавлено позже:

--- Цитата: Lost Soul от 07 Октябрь 2009, 21:16:48 ---Очень интересно.а зачем это нужно? Бладшот идёт быстрее чем надо...

--- Конец цитаты ---
это уже проблема самих игр. не все с разгоном дружат )
GManiac:
У меня щас тоже получилось собрать. pwm1.obj я сначала переименовал в pwm.obj, запустил билд заново, и вылезла куча ошибок линкера. Смотрю - опять появился pwm1.obj, точно такой же. Удалил оба файла, запустил билд - скомпилилось. Смотрю - появились оба файла (pwm.obj и pwm1.obj), но pwm.obj маленький, меньше 2 кб. В исходниках есть файлы: pwm.asm, pwm.c, pwm.h. Видимо, маленький объектный файл - выхлоп ассемблера, а большой - сишника.
Скорей всего, из-за совпадающих имён исходников возникает конфликт, поэтому один объектный файл называется pwm1.obj, но в мейк-скрипте, видимо, закрался косяк, поэтому нормально не билдится.

PWM - это широтно-импульсная модуляция, да и по внутренностям видно, что pwm как-то относится к звуку, но непонятно, при чём тут SH2 :?

Это хорошо, что этот генс компилится, у меня на его счёт были кой-какие мыслишки, особенно касательно проигрывания уже готовых полных прохождений игр - во всех генсах тайминги одинаковые. Если честно, мне проще написать свою прогу (хоть там работы на несколько лет ;)), чем дорабатывать генс, но тайминги не повторишь :(
ALEX_230_VOLT:

--- Цитата: Lost Soul от 07 Октябрь 2009, 21:16:48 ---Очень интересно.а зачем это нужно? Бладшот идёт быстрее чем надо...

--- Конец цитаты ---
тут одно их двух:
1) у тебя не стоит вертикальная синхонизация
2) мы просто не привыкли к полноценной скорости игры, и поэтому кажется что она идёт быстрее чем надо. На самом деле она идёт как задуманно, просто мы раньше играли в замедленную версию
Ti_:

--- Цитата: GManiac от 08 Октябрь 2009, 00:25:33 ---Удалил оба файла, запустил билд - скомпилилось. Смотрю - появились оба файла (pwm.obj и pwm1.obj), но pwm.obj маленький, меньше 2 кб.

Это хорошо, что этот генс компилится, у меня на его счёт были кой-какие мыслишки

--- Конец цитаты ---
мм сейчас глянул , у меня pwm.obj тоже меньше 2кб. хотя я копировал его, как pwm1.obj , а потом вроде ребилд жал.

и какие мыслишки? что в нем хакнуть можно? вот например сделать чтобы ромы большие держал 10мб или 13мб? а спрайтов добавить никак нельзя, чтобы в дюне не мигали например юниты?
и вот в РРР звук если засовываем (wav) играет хуже чем в голдвейве, проблема драйвера или dac? может z80 разогнать еще?




GManiac:
Как я понял, надо сначала собрать pwm.asm и занести в папку Release, тогда билдер не будет ругаться на отсутствие pwm.obj и сделает всё как надо. Ещё не проверял.


--- Цитата: Ti_ от 08 Октябрь 2009, 01:19:01 ---и какие мыслишки?
--- Конец цитаты ---
Кой-какие ;) Большие ромы мне не нужно. Для дюны скорей всего достаточно отключить лимит спрайтов на линии.
Насчёт DAC долго объяснять, т.к. на реальном железе не всё так просто (там есть ещё пара косяков). Если коротко: это проблема и канала, и эмуляторов, и выбранной частоты дискретизации. Т.к. DAC не может принимать и выставлять на выход семплы с какой угодно скоростью, происходит сдвиг семплов - на 1, на 2 вправо (запаздывание). Выхлоп DAC идёт со скоростью 52781 Гц (53267 для NTSC), подавать на него можно максимум 33 кГц примерно (больше не получается), и если ты пишешь с такой частотой, то:
1) одни семплы будут ждать своей очереди на выход дольше других
2) т.к. частоты не связаны друг с другом, произойдёт эффект "бегущей полоски на экране" - когда при отключённом VSync при несовпадении частот эмулятора и монитора во время горизонтального скроллинга видна бегущая полоса. Здесь так же, только бежит не полоска по экрану, а сдвиг семплов по временнОй оси, слева направо.
Выход из положения - использовать частоты-делители 53 кГц, т.е. в 2 раза меньше (26.5 кГц), 3 раза и т.д.
Почему "проблема эмуляторов" - потому что на железке звучит лучше.
Ti_:

--- Цитата: GManiac от 08 Октябрь 2009, 09:45:30 ---Кой-какие ;) Большие ромы мне не нужно. Для дюны скорей всего достаточно отключить лимит спрайтов на линии.

--- Конец цитаты ---
мне тоже, пока что. но если эмулятор проц разгоняешь, почему бы и остальное не "разогнать".

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

Добавлено позже:
про dac, спасибо. попробую 26.5 как будет.
KABAL:
да, 13 мб ром не помешало бы
Photon9:
Чтото в нем голоса неслышно в Metal Head (32X) (JU) (M2) [!]
Ti_:

--- Цитата: Photon9 от 08 Октябрь 2009, 17:50:08 ---Чтото в нем голоса неслышно в Metal Head (32X) (JU) (M2) [!]

--- Конец цитаты ---
а в обычной сборке? (на эмуленде лежит).  в любом случае тут для 32x не разгонялось вроде ничего, смысл его юзать. на 32x там же другой процессор как я понимаю?
Ti_:

--- Цитата: GManiac от 08 Октябрь 2009, 09:45:30 ---Большие ромы мне не нужно. Для дюны скорей всего достаточно отключить лимит спрайтов на линии.

--- Конец цитаты ---
GManiac, а ты не знаешь как можно памяти (RAM) добавить.? например сделать чтобы адреса 900000-9FFFFF было RAM.
Segaman:

--- Цитата: Ti_ от 09 Октябрь 2009, 22:02:01 ---GManiac, а ты не знаешь как можно памяти (RAM) добавить.? например сделать чтобы адреса 900000-9FFFFF было RAM.

--- Конец цитаты ---
А лучше
E00000-FFFFFF, да так, шоб это указывать в заголовке. иными славами скока указано, тока и задействовано. А ещё сейврам также сделать
GManiac:
Есть такой Mem_M68k.asm, это карта памяти для 68к. Там прописаны процедуры чтения и записи b/w/l по блокам в 512 кб. Не знаю, почему выбран именно такой размер блока, но подозреваю, что потому, что старые версии VC++ (по 2003-й, а генс написан в 98-м) не работали с массивами больше 512 кб.
В частности, для RAM рассмотрим пример

--- Код: ---dd M68K_Read_Byte_Ram, ; 0xE00000 - 0xE7FFFF
...
ALIGN32

M68K_Read_Byte_Ram:
and ebx, 0xFFFF
xor ebx, 1
mov al, [Ram_68k + ebx]
pop ebx
ret
 
--- Конец кода ---
Видно, что ebx усекается до окна в 64 кб. Xor нужен для работы с чётным адресом, правда, я не понял, как это работает, ведь в al всегда будет заноситься значение из чётного адреса.... Посмотрим для процедур, где нет усечения:


--- Код: ---dd M68K_Read_Byte_RomB, ; 0x580000 - 0x5FFFFF
M68K_Read_Byte_RomB:
and ebx, 0x7FFFF
xor ebx, 0x580001
mov al, [Rom_Data + ebx]
pop ebx
ret

dd M68K_Read_Byte_Rom0, ; 0x000000 - 0x07FFFF
M68K_Read_Byte_Rom0:
and ebx, 0x7FFFF
xor ebx, 1
mov al, [Rom_Data + ebx]
pop ebx
ret

dd M68K_Read_Byte_Rom1, ; 0x080000 - 0x0FFFFF
M68K_Read_Byte_Rom1:
and ebx, 0x7FFFF
xor ebx, 0x080001
mov al, [Rom_Data + ebx]
pop ebx
ret
--- Конец кода ---
С and всё понятно - это усечение до размера блока в 512 кб. Для чего нужен xor - с нулевым битом (единичка в конце) и так ясно (чётный адрес), плюс по адресам блоков становится понятно, что xor убирает или наоборот ставит биты, отвечающие за старшие биты блока (т.е. сам блок, грубо говоря). Т.к. Rom_Data не меняется и, видимо, ссылается на начало блока РОМ:

--- Код: --- DECL Rom_Data
resb 6 * 1024 * 1024          ; 6 мегабайт
--- Конец кода ---
то ebx содержит относительный адрес для 512 кб блока. А xor делает его абсолютным.

Короче, чтобы сделать память на 2 мб, надо поменять здесь

--- Код: --- DECL Ram_68k
resb 64 * 1024     ; 64 кб
--- Конец кода ---
и во всех процедурах работы с Ram (пример в самом начале) вместо окна 0xFFFF вписать 0x7FFFF.
Я думаю, это всё. Как это повлияет на сейвы - не знаю, может, в сейвере прописан свой размер памяти.

Некоторые игры используют именно банк E00000, но только его, т.е. фишка с зеркалированием памяти им не грозит.

Вообще, вы всегда можете поговорить с авторами эмулей, они тоже люди. Вон в Gens32 сделали поддержку 13-метрового рома... каким-то образом.
Ti_:

--- Цитата: GManiac от 09 Октябрь 2009, 23:51:12 ---Вообще, вы всегда можете поговорить с авторами эмулей, они тоже люди. Вон в Gens32 сделали поддержку 13-метрового рома... каким-то образом.

--- Конец цитаты ---
дык в эмуле от В.Яковлева тоже 13мб  держит.  он сам делал? или на основе генс32?

Добавлено позже:

--- Цитата: GManiac от 09 Октябрь 2009, 23:51:12 ---Короче, чтобы сделать память на 2 мб, надо поменять здесь

--- Конец цитаты ---
пока еще не понял, но попрбую. (x86 я тем более не знаю, вообще я знаю только мк68 и то немного)

если все получится. , будет в дюне 255юнитов лимит а то больше ) (Сегаман уже до 88делал)
ShiningSbun:
GManiac,Ti_, спасибо вам за  эмуль.Не подскажите как он себя по сети будет вести(собираюсь по ЛАНу играть?),лагов и рассконектов из-за разогнонности не будет?
Ti_:

--- Цитата: ShiningSbun от 10 Октябрь 2009, 01:34:38 ---GManiac,Ti_, спасибо вам за  эмуль.Не подскажите как он себя по сети будет вести(собираюсь по ЛАНу играть?),лагов и рассконектов из-за разогнонности не будет?

--- Конец цитаты ---
да, но оба игрока должны использовать этот эмуль.   если разные, естественно будет, так как у кого-то игра тормозит и он отстанет.
ну и звук рейт должен быть одинаков (как и во всех генсах).


Добавлено позже:
блин добавил вроде до 10мб еще чтобы держало. а он даже не открывает ром-файл 10мб-айтный. и обычный генс не открывает.  там что проверка.?
а память сейчас буду проверять добавилось или нет.

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


а мошт названия одинакое потому что? везде readram
Ti_:
дописал в gens.h ещё , теперь 10мб открывает!.

10:0000  4E B9  JSR     ($00800000)              A0=00000000 A1=00FFB8FA A2=00003322
80:0000  4E B9  JSR     ($00700000)              A0=00000000 A1=00FFB8FA A2=00003322
70:0000  4E 75  RTS                              A0=00000000 A1=00FFB8FA A2=00003322
80:0006  4E 75  RTS                              A0=00000000 A1=00FFB8FA A2=00003322
10:0006  4E 75  RTS                              A0=00000000 A1=00FFB8FA A2=00003322

выкладывать? проверил сейчас от 100000 до 9FFFFF всё "4e71" заполнил, и в конце "4e75", всё пашет.  или до 13делать?

тут Яковлева еще скачал, а у него по-другому сделано.. и вообще я не понял, у него 13мб держит или 25?  в ридми написано 13, а в карте:

   DECL Rom_Data
   resb 25 * 1024 * 1024

      ;Gens32 Stuff;Some Speciel IO for some speciel games.


--- Код: ---      DECL Bank_Switch_80M
      resd 1


test dword [Bank_Switch_80M],1
jz short .rom_C

xor ax, ax
pop ebx
ret

ALIGN4
.rom_C
and ebx, 0x7FFFF
xor ebx, 0x600001
mov al, [Rom_Data + ebx]
pop ebx
ret

ALIGN32

M68K_Read_Byte_RomD:
test dword [Bank_Switch_80M],1
jz short .rom_D

xor ax, ax
pop ebx
ret

ALIGN4
.rom_D
and ebx, 0x7FFFF
xor ebx, 0x680001
mov al, [Rom_Data + ebx]
pop ebx
ret


ALIGN32

M68K_Read_Byte_RomE:
test dword [Bank_Switch_80M],1
jz short .rom_E
--- Конец кода ---


сейчас по-своему способу попробую до 13мб поднять.. как доделаю выложу.
GManiac:
По предыдущему посту: мне казалось, что в .асме эти объявления размеров и есть выделение памяти, поэтому этого должно было хватить. Но оказалось, нет. Этот .асм - просто дешифратор, т.е. ты настроил его на бОльшую память, но саму бОльшую память генс не выделяет, это всё в другом месте. Ну раз ты нашёл, то хорошо.
До 10 мб расширяется легко, после 10 просто так нельзя - будет перекрытие с системными адресами.
Ti_:

--- Цитата: GManiac от 10 Октябрь 2009, 16:03:26 ---До 10 мб расширяется легко, после 10 просто так нельзя - будет перекрытие с системными адресами.

--- Конец цитаты ---
не знаю я добавил у меня пашет по-моему но странно.
Навигация
Главная страница сообщений
Следующая страница

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