Разработка и ромхакинг > Ромхакинг и программирование
разогнал эмуль генс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 кб.
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

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