| Разработка и ромхакинг > Ромхакинг и программирование |
| разогнал эмуль генс11а. (генсмуви) |
| << < (3/6) > >> |
| GManiac:
Смотри мой исходкик, там всё это вписано, но всё равно не пашет. ; pop ecx ; pop ebx значит, что эти команды заккоментированы, т.е. не исполняются. Там все команды в read присутствуют, а в write закомментированы - значит, так надо. |
| Ti_:
а я по единичке забыл добавить, --- Цитата: GManiac от 10 Октябрь 2009, 19:38:55 ---Смотри мой исходкик, там всё это вписано, но всё равно не пашет. значит, что эти команды заккоментированы, т.е. не исполняются. Там все команды в read присутствуют, а в write закомментированы - значит, так надо. --- Конец цитаты --- тем более раз у тебя не пашет, значит нужно по-другому делать. ; сейчас попрбую стереть. что будет глянем. офф сайт генс умер.... ? http://gens.consolemul.com/ Добавлено позже: а у меня ошибка была там где на врайт 2сегмента надо было FFFFF, а не 7FFFF. ,,,опять все комбинации проверять ... если ничего не получится... может другую область выделим и всё? |
| Йобан Матич:
--- Цитата: Ti_ ---http://gens.consolemul.com/ --- Конец цитаты --- http://sourceforge.net/projects/gens/ тут посвежее будет версии 2.15.5 =) |
| Ti_:
вот что я заметил, во всех комбинациях что я пробовал.(везде эмуль и и игра работают нормально) программа записи в "новую память" помещает данные в старые 64кб. , вот док-во: (глюк на бордюре) программа проверки: --- Код: --- cmpi.l #$0, $F00000 bne.w XUICI cmpi.l #$0, $F12345 bne.w XUICI cmpi.l #$0, $F25000 bne.w XUICI cmpi.l #$0, $F34000 bne.w XUICI cmpi.l #$0, $F43000 bne.w XUICI cmpi.l #$0, $F52000 bne.w XUICI cmpi.l #$0, $FE1000 bne.w XUICI rts XUICI: cmpi.l #$ffffffff, $F00000 bne.w XUICI2 rts XUICI2: move.l #$12345678, $F00000 cmpi.l #$12345678, $F00000 bne.w XUICI3 cmpi.l #$12345678, $FF0000 bne.w XUICI3 rts XUICI3: nop rts --- Конец кода --- результат: 10:0000 0C B9 CMPI.L #$00000000,($00F00000) - не равно 0 10:000A 66 00 BNE #$0058 [10:0064] 10:0064 0C B9 CMPI.L #$FFFFFFFF,($00F00000) -не равно ff 10:006E 66 00 BNE #$0004 [10:0074] 10:0074 23 FC MOVE.L #$12345678,($00F00000) пишем 12345678 в F00000 10:007E 0C B9 CMPI.L #$12345678,($00F00000) да, равно 12345678 10:0088 66 00 BNE #$0012 [10:009C] 10:008C 0C B9 CMPI.L #$12345678,($00FF0000) FF0000 тоже равно 12345678 10:0096 66 00 BNE #$0004 [10:009C] 10:009A 4E 75 RTS Добавлено позже: еще одна проверка: 10:0074 23 FC MOVE.L #$12345678,($00F10002) 10:007E 0C B9 CMPI.L #$12345678,($00F10002) ; - ok 10:0088 66 00 BNE #$0012 [10:009C] 10:008C 0C B9 CMPI.L #$12345678,($00FF0002) ; F10002=FF0002 10:0096 66 00 BNE #$0004 [10:009C] 10:009A 4E 75 RTS получается , что FFxxxx=F0xxxx=F1xxxx=F2xxxx и т.д. Добавлено позже: я кое-что нашел: ALIGN64 --- Код: --- ;unsigned char M68K_RB(unsigned int Adr) DECL M68K_RB mov eax, [esp + 4] push ebx mov ebx, eax and eax, 0xF80000 < ? shr eax, 17 and ebx, 0xFFFFFF <? jmp [M68K_Read_Byte_Table + eax] --- Конец кода --- ещё что-то. --- Код: --- ALIGN64 ;void M68K_WB(unsigned int Adr, unsigned char Data) DECL M68K_WB push ebx push ecx mov ecx, [esp + 12] mov eax, [esp + 16] mov ebx, ecx and ecx, 0xF00000 and eax, 0xFF shr ecx, 18 and ebx, 0xFFFFFF call [M68K_Write_Byte_Table + ecx] mov ecx, [esp + 12] push dword 1 and ecx, 0xFFFFFF push ecx call _Fix_Codes add esp, byte 8 pop ecx pop ebx ret --- Конец кода --- |
| Марат:
--- Цитата: GManiac от 09 Октябрь 2009, 23:51:12 ---Есть такой 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 всегда будет заноситься значение из чётного адреса.... --- Конец цитаты --- Я думаю, xor нужен для того, чтобы считать правильный байт из памяти. В памяти, я думаю, данные в формате little endian (a обычно это так и есть). Адрес не будет всегда четный, так как 1 xor 1 = 0, 1 xor 0 = 1. Чтобы адрес был всегда четный надо его and'итъ с 0xFFFFFFFE. |
| Ti_:
*** M68K_Reset - general reset of the main 68K CPU ***/ void M68K_Reset(int System_ID, char Hard) { if (Hard) { memset(Ram_68k, 0, 64 * 1024); M68K_Fetch[0].lowaddr = 0x000000; M68K_Fetch[0].highaddr = Rom_Size - 1; M68K_Fetch[0].offset = (unsigned) &Rom_Data[0] - 0x000000; M68K_Fetch[1].lowaddr = 0xFF0000; M68K_Fetch[1].highaddr = 0xFFFFFF; M68K_Fetch[1].offset = (unsigned)&Ram_68k[0] - 0xFF0000; if (System_ID == GENESIS) Cpu_68k.c |
| Марат:
--- Код: --- ;unsigned char M68K_RB(unsigned int Adr) DECL M68K_RB mov eax, [esp + 4] push ebx mov ebx, eax and eax, 0xF80000 ;здесь оставляются пять первых бит, по которым вычисляется адрес нужной метки в массиве M68K_Read_Byte_Table shr eax, 17 ; здесь он сдвигается и получается число от 0 до 31. У нас как раз массив из 32 элементов and ebx, 0xFFFFFF ; адресное пространство сеги не больше, чем 0xFFFFFF, поэтому обнуляется старший байт. jmp [M68K_Read_Byte_Table + eax] --- Конец кода --- |
| Ti_:
изменение еще и в cpu68k.c не помогло. что произошло, игра перестала работать. после изменения с ROM:000006C2 sub_0_6C2: ; CODE XREF: RESET+14Aj ROM:000006C2 lea ($FF8000).l,a4 ROM:000006C8 jmp (START).l на $E08000 , заработала. но все адреса опять дублируются. |
| Segaman:
А мона в этод эмуль ещё и реалтайм деббагер как в кмоде, тока с возможностью записи своих значений. а ещё выбор режима между 16 и 32 битов. если можно, конечно, а то во всём удобен, кроме этого. |
| Ti_:
--- Цитата: Segaman от 11 Октябрь 2009, 19:13:19 ---А мона в этод эмуль ещё и реалтайм деббагер как в кмоде, тока с возможностью записи своих значений. --- Конец цитаты --- думаю это не легко (дофига файлов менять)..да ещё небось могут конфликтовать начать. (тут тоже чето типа дебага). насчет 16 и 32 , наверно можно такую опцию сделать , ток знать как. |
| Segaman:
А из кмод незя тупо копирнуть? или там всё сложнее. Ато сорс выложен. |
| Ti_:
--- Цитата: Segaman от 11 Октябрь 2009, 22:15:41 ---А из кмод незя тупо копирнуть? или там всё сложнее. Ато сорс выложен. --- Конец цитаты --- копирнуть можно в чистый генс. а тут все исходники уже измененные, и либо вообще не скомпилится, либо потеряется половина функий этого эмуля, либо баги будут всякие. |
| Segaman:
понятно. значит и этот эмуль мне не подходит :-( |
| Марат:
Чего не хватает kmod'у, так это бряки ставить. В дебагере Яковлева бряки ставятся, но код не трассируется и еще не хватает вывода информации о передачи dma, что и куда он пересылает. |
| Ti_:
пробовал добавить рендер hq2x 16bit, получилось но криво. работает в фуллскрине только, в окне неправильно. в чем может быть дело.? еще меню малец криво - в окне его нельзя выбрать клавишами f11-f12, и можно выбрать при 32бит цвете, на который он не рассчитан. генс: бажный генс (кстати доразогнал и для 50фпс режима, , +переделал заново мем68к только для 13мб ромов, а всякие трюки с РАМ убрал как нерабочие покачто)) измененные и добавленные сорс-файлы: (новые строки брал из генс214) |
| Segaman:
А выбор между 16-32бит ещё нету? |
| KABAL:
На разогнанном в 2 раза GENS мортал идёт без тормозов вообще, даже если 3 Смоука FATALITY 1 с выкидыванием бомб одновременно сделают !!! Круто !!! Спасибо за разгон, интересно поэксперементировать, а вообще и оперативки (RAM) не хватает, и видеобуфера (VRAM), он тоже от 00 00 до FF FF всего-то размером, как и оперативка, если добавить хотя бы по 64 кб видеобуфера и оперативки, то можно б было сделать так, что, скажем, от BRUTALITY высыпется 250 костей, SPRITE LIMIT только убрать надо будет в настройках эмулятора |
| Ti_:
--- Цитата: KABAL от 14 Октябрь 2009, 11:01:43 ---SPRITE LIMIT только убрать надо будет в настройках эмулятора --- Конец цитаты --- да вот дело в том, что этот sprite limit никакого эффекта не дает. например: Добавлено позже: --- Цитата: Segaman от 14 Октябрь 2009, 08:34:50 ---А выбор между 16-32бит ещё нету? --- Конец цитаты --- нет. Добавлено позже: --- Цитата: KABAL от 14 Октябрь 2009, 11:01:43 --- а вообще и оперативки (RAM) не хватает, и видеобуфера (VRAM), он тоже от 00 00 до FF FF всего-то размером, как и оперативка, если добавить хотя бы по 64 кб видеобуфера и оперативки --- Конец цитаты --- \ с RAM даже на чуть-чуть прибавить не получается. а где этих авторов эмуляторов искать, они по-моему с 2003 года туда не заходят. |
| KABAL:
А базы в Дюне как спрайты считаются или как SCROLL A или SCROLL B ? |
| Марат:
VRAM, думаю, вообще не имеет смысла увеличивать. Памят увеличить можно, но как ее потом использовать. В карте тайлов тайл описывается двумя байтами (словом): 1 бит приориет, 2 бита на вертикальный и горизонтальный flip, 2 бита на номер палитры цвета, итого 5 бит. Остается 11 бит на кол-во тайлов в VRAM. Максимальный номер тайла $7FF (2047), т.е. 2048 тайлов. Каждый занимает 32 байта. Нетрудно посчитать, что последний тайл будет имет адрес 65504, т.е. не выходит за область 64 кб. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |