Разработка и ромхакинг > Ромхакинг и программирование
разогнал эмуль генс11а. (генсмуви)
<< < (2/6) > >>
GManiac:
А с ОЗУ что? По дебаггеру её нельзя проверять, дебаггер - это отдельный модуль со своими способами обращения к памяти. Как проверять - пишешь разные данные в разные блоки ОЗУ с одним адресом ($E0000, $E1000...), затем читаешь и сравниваешь.
Ну ещё и выделения памяти под ОЗУ надо найти.

Не должно пахать, там процедуры другие, смотри .асм - либо ты пихаешь обращение к РОМ, либо - к портам ВВ или Z80 RAM. Одновременно это работать не должно в принципе. Загрузи полностью забитый 13-мегабайтный ром, проверь.
Ti_:

--- Цитата: GManiac от 10 Октябрь 2009, 16:08:31 ---Не должно пахать, там процедуры другие, смотри .асм - либо ты пихаешь обращение к РОМ, либо - к портам ВВ или Z80 RAM. Одновременно это работать не должно в принципе. Загрузи полностью забитый 13-мегабайтный ром, проверь.

--- Конец цитаты ---
блин а как проверить то , у меня сейчас вся область 1мб -13-ый мб заполнено NOP.  жср на 1-ый метр,
если не вписать гденить будет rts игра виснет, я пробовал писать в A00000, A80000 и т.д  и оно считывалось.
проверил еще в н-ких местах , считывается. по-моему  пашет всё ок. а дебагер , я понял, он врет. он на эти адреса не рассчитан.
GManiac:
Возьми любую нормальную игру, расширь до 13 метров и дождись до того места, где работает джойстик. Если A10000 у тебя читается/пишется как РАМ, то джойстик не должен будет работать! Если будет - очень странно.
Покажи файлы, которые ты изменил: сам .асм и ещё что-то.
Ti_:

--- Цитата: GManiac от 10 Октябрь 2009, 16:15:27 ---Возьми любую нормальную игру, расширь до 13 метров и дождись до того места, где работает джойстик. Если A10000 у тебя читается/пишется как РАМ, то джойстик не должен будет работать! Если будет - очень странно.
Покажи файлы, которые ты изменил: сам .асм и ещё что-то.

--- Конец цитаты ---
игра рок-н-ролл рейсинг давай ром выложу, джойстики пашут.

13мб там звуков нет ток, это просто мой тестовый ром был.(музыку пихал)m,, 1-ый по 13-ый мб считывание идет когда старт рейс жмешь!





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

--- Цитата: GManiac от 10 Октябрь 2009, 16:15:27 ---Если A10000 у тебя читается/пишется как РАМ

--- Конец цитаты ---
как РОМ может?

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

--- Цитата: GManiac от 10 Октябрь 2009, 16:08:31 ---А с ОЗУ что? По дебаггеру её нельзя проверять, дебаггер - это отдельный модуль со своими
--- Конец цитаты ---
ещё не проверял, я вчера по дебагеру смотрел. а теперь понял что он не то показывает
GManiac:
А, ну так ты обошёл системные адреса :) Поэтому работает. Т.е. ром не полностью 13 мб, там 2 блока (=1 мб) будут не читаться из рома.
Точнее, у тебя ром 14 мб, но 2 блока не читаются, итого - 13 мб. У ВЯ, по-моему, по-другому работало.
Ti_:

--- Цитата: GManiac от 10 Октябрь 2009, 16:30:25 ---А, ну так ты обошёл системные адреса :) Поэтому работает. Т.е. ром не полностью 13 мб, там 2 блока (=1 мб) будут не читаться из рома.
Точнее, у тебя ром 14 мб, но 2 блока не читаются, итого - 13 мб. У ВЯ, по-моему, по-другому работало.

--- Конец цитаты ---
вот нормальный ром(со звуками)
 RRR13mb
он ровно 13мб. и с 1-ого по 13-ый мб везде nop.  если бы они не читались он бы завис думаю. в самом конце 4e75.(если стереть то зависнет)

эмуль еще раз кому над (только заметил, что не ту ссылку удалил)
gens_test15mhz+13mb




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

--- Цитата: GManiac от 10 Октябрь 2009, 16:08:31 ---Как проверять - пишешь разные данные в разные блоки ОЗУ с одним адресом ($E0000, $E1000...), затем читаешь и сравниваешь.
Ну ещё и выделения памяти под ОЗУ надо найти.

--- Конец цитаты ---
мне бы код для тестов такой.
GManiac:
Я же сказал, что работает, т.к. сначала я думал, что ты всё пространство под ром забил, а теперь вижу, что системные адреса обошёл.
Кстати, ОЗУ можно расширить, за счёт уменьшения РОМа, т.е. не с $E00000, а например, с $D00000 сделать.


--- Цитата ---мне бы код для тестов такой.
--- Конец цитаты ---
пишешь один байт в F00000, другой байт в F10000, потом читаешь их в регистры и сравниваешь. Если не совпадают, значит, блоки разные и память на самом деле расширена.
Да код такой уже не нужен, ведь работает всё.

Добавлено позже:
Только вот эту строчку
extern unsigned char Rom_Data[13 * 1024 * 1024];
надо заменить на 14 мб.
Ti_:

--- Цитата: GManiac от 10 Октябрь 2009, 17:38:35 ---Только вот эту строчку
extern unsigned char Rom_Data[13 * 1024 * 1024];
надо заменить на 14 мб.

--- Конец цитаты ---
да почему 14то? там 6новых блоков по 512кб = того 3мб.  и ром у меня 13мб. , если там что-то не читается давай проверим. скажи эту область.


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

--- Цитата: GManiac от 10 Октябрь 2009, 17:38:35 ---пишешь один байт в F00000, другой байт в F10000, потом читаешь их в регистры и сравниваешь. Если не совпадают, значит, блоки разные и память на самом деле расширена.

--- Конец цитаты ---
я пытаюсь написать программу. bne команда? на ромхакинг полез команды ищу.
xuicu.asm,28: Unrecognized Mnemonic: loc_xuici
There were 1 errors.


 
--- Код: --- move.l  #$12345671, $F00000
  move.l  #$12345672, $F10000
  move.l  #$12345673, $F12345
  move.l  #$12345674, $F25000
  move.l  #$12345675, $F34000
  move.l  #$12345676, $F43000
  move.l  #$12345677, $F52000
  move.l  #$12345678, $FE1000
  cmp.l   #$12345671, $F00000
  bne.w loc_xuici
  cmp.l  #$12345672, $F10000
  bne.w loc_xuici
  cmp.l  #$12345673, $F12345
  bne.w loc_xuici
  cmp.l  #$12345674, $F25000
  bne.w loc_xuici
  cmp.l  #$12345675, $F34000
  bne.w loc_xuici
  cmp.l  #$12345676, $F43000
  bne.w loc_xuici
  cmp.l  #$12345677, $F52000
  bne.w loc_xuici
  cmp.l  #$12345678, $FE1000
  bne.w loc_xuici
  move.l  #$4e714e75,  $F40000
  jsr $F40000
  rts
  loc_xuici
  move do,d1
  move d1,d2
  move d2,d3
  move d4,d5
  move d6,d7
  move xyu,d8
  rts
--- Конец кода ---
GManiac:
Потому что 14. Ты не считай, сколько кусков ты прибавил. У тебя по карте памяти линейное пространство рома начинается с 0 и заканчивается здесь

--- Код: ---dd M68K_Read_Byte_RomP, ; 0xD80000 - 0xDFFFFF
--- Конец кода ---
Значит, и файл максимальный будет 14 мб.
А эти куски

--- Код: ---dd M68K_Read_Byte_Misc, ; 0xA00000 - 0xA7FFFF
dd M68K_Read_Byte_VDP, ; 0xC00000 - 0xC7FFFF
--- Конец кода ---
врезаются в пространство рома, но их трогать нельзя, иначе Z80, I/O и VDP не будут работать. Что будет: эмулятор-то 14-мбайтный ром, но при попытке обращения к системным адресам вызовутся ИХ функции (а не функции обращения к рому, т.к. для этих блоков ты их не прописал - потому что нельзя) и вместо обращения к рому будет обращение куда надо. Это "слепая зона" в роме - она просто не видится в эмуляторе.
Поэтому максимальный ром 14 мб, из них два блока по 512 кб в нём не будут видны в эмуляторе - итого доступно 13 мб.
Кстати, т.к. системные адреса не занимают полностью весь блок, можно и из них кусок урвать, но это надо менять доделывать самы процедуры чтения/записи.


На каком асме пишешь? Если sega-asm, после loc_xuici двоеточие ставь, это же ссылка. И что такое xyu? Вообще, я имел в виду сделать запись в память, потом чтение оттуда в регистры и просто посмотреть на регистры в дебаггере, без всяких bne.
Ti_:

--- Цитата: GManiac от 10 Октябрь 2009, 17:53:07 ---

--- Конец цитаты ---

10:0000  23 FC  MOVE.L  #$12345671,($00F00000)   A0=00000000 A1=00FFB8FA A2=00003322

10:0050  0C B9  CMPI.L  #$12345671,($00F00000)   A0=00000000 A1=00FFB8FA A2=00003322
10:005A  66 00  BNE     #$0076 [10:00D2]         A0=00000000 A1=00FFB8FA A2=00003322
10:00D2  4E 75  RTS      A0=00000000 A1=00FFB8FA A2=00003322 A3=00000000

непашет

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

--- Цитата: GManiac от 10 Октябрь 2009, 17:53:07 ---двоеточие ставь, это же ссылка. И что такое xyu?

--- Конец цитаты ---
это я убрал уже. а кроме двоеточия еще пробелы нужно было убрать )

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

--- Цитата: GManiac от 10 Октябрь 2009, 17:53:07 ---Потому что 14. Ты не считай, сколько кусков ты прибавил. У тебя по карте памяти линейное пространство рома начинается с 0 и заканчивается здесь

--- Конец цитаты ---

дык а тут то    другие адреса:  A00000-CFFFFF


--- Код: --- ALIGN32

M68K_Read_Byte_RomK:
and ebx, 0x7FFFF
xor ebx, 0xA00001
mov al, [Rom_Data + ebx]
pop ebx
ret

ALIGN32

M68K_Read_Byte_RomL:
and ebx, 0x7FFFF
xor ebx, 0xA80001
mov al, [Rom_Data + ebx]
pop ebx
ret

ALIGN32

M68K_Read_Byte_RomM:
and ebx, 0x7FFFF
xor ebx, 0xB00001
mov al, [Rom_Data + ebx]
pop ebx
ret

ALIGN32

M68K_Read_Byte_RomN:
and ebx, 0x7FFFF
xor ebx, 0xB80001
mov al, [Rom_Data + ebx]
pop ebx
ret

ALIGN32

M68K_Read_Byte_RomO:
and ebx, 0x7FFFF
xor ebx, 0xC00001
mov al, [Rom_Data + ebx]
pop ebx
ret

ALIGN32

M68K_Read_Byte_RomP:
and ebx, 0x7FFFF
xor ebx, 0xC80001
mov al, [Rom_Data + ebx]
pop ebx
ret
--- Конец кода ---
GManiac:

--- Цитата ---дык а тут то    другие адреса:  A00000-CFFFFF
--- Конец цитаты ---
Понял. Невнимательный я.
А ОЗУ и впрямь не работает...

Добавлено позже:
Ну главное, 13-метровый хак Кабала запускается. Если ещё сделать 2 метра ОЗУ, Кабал описается от счастья :lol:
Ti_:
9F:FFFC  4E 71  NOP                              A0=00000000
9F:FFFE  4E 71  NOP                              A0=00000000
A0:0000  00 00  ORI.B   #$00,D0                  A0=00000000         <= дебагер врёт а игра видит
00:7302  4E 71  NOP                              A0=00000000



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

--- Цитата: GManiac от 10 Октябрь 2009, 18:14:09 ---А ОЗУ и впрямь не работает...

--- Конец цитаты ---
мне кажется им нужно дать разные имена: RAM1 RAM2 RAM3 RAM4, и урезать только 4-ый блок (оригинальный)
GManiac:
Я тут подумал, ведь надо для блоков РАМ тоже прописать XOR, отображающий относительный ebx в абсолютный. Т.е. сделать так:

--- Код: ---dd M68K_Read_Byte_Ram0, ; 0xE00000 - 0xE7FFFF
dd M68K_Read_Byte_Ram1, ; 0xE80000 - 0xEFFFFF
...
...
M68K_Read_Byte_Ram0:
and ebx, 0x7FFFF
xor ebx, 1
mov al, [Ram_68k + ebx]
pop ebx
ret

M68K_Read_Byte_Ram1:
and ebx, 0x7FFFF
xor ebx, 0x80001
mov al, [Ram_68k + ebx]
pop ebx
ret

--- Конец кода ---
И т.д., точно так же, как для рома. Но почему РАМ не расширяется даже на 132 кб - непонятно. У меня E00000 и E10000 - одинаковые адреса получаются...
Ti_:

--- Цитата: GManiac от 10 Октябрь 2009, 18:19:54 ---И т.д., точно так же, как для рома. Но почему РАМ не расширяется даже на 132 кб - непонятно. У меня E00000 и E10000 - одинаковые адреса получаются...

--- Конец цитаты ---
а асм может не так коды генерирует для этих адресов?
GManiac:
ТЬФУ ТЫ, ты же процедуры записи M68K_Write_Byte_Ram и M68K_Write_Word_Ram не поменял, вот и вся разгадка.
Ti_:
и еще незабудь там такие же строчки для word, вообще я вроде в этом файле FFFF менял на F7777 в 4местах.

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

--- Цитата: GManiac от 10 Октябрь 2009, 18:23:06 ---ТЬФУ ТЫ, ты же процедуры записи M68K_Write_Byte_Ram и M68K_Write_Word_Ram не поменял, вот и вся разгадка.

--- Конец цитаты ---
сейчас гляну

не понял , их во в ред  4блока , а write 2блока. как быть?


xor ebx, 0xE00001 ???



--- Код: --- ALIGN32

M68K_Read_Byte_Ram0:
and ebx, 0x7FFFF
xor ebx, 0xE00001
mov al, [Ram_68k + ebx]
pop ebx
ret

ALIGN32

M68K_Read_Byte_Ram1:
and ebx, 0x7FFFF
xor ebx, 0xE80001
mov al, [Ram_68k + ebx]
pop ebx
ret

ALIGN32

M68K_Read_Byte_Ram2:
and ebx, 0x7FFFF
xor ebx, 0xF00001
mov al, [Ram_68k + ebx]
pop ebx
ret

ALIGN32

M68K_Read_Byte_Ram3:
and ebx, 0x7FFFF
xor ebx, 0xF80001
mov al, [Ram_68k + ebx]
pop ebx
ret

--- Конец кода ---


ох и наворошил я там, скоро выложу) счас скомпилю и глянем что будет. походу слишком:

--- Код: ---c:\gens11\svnblah\Gens\\mem_m68k.asm:181: error: symbol `M68K_Read_Byte_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:182: error: symbol `M68K_Read_Byte_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:183: error: symbol `M68K_Read_Byte_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:184: error: symbol `M68K_Read_Byte_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:215: error: symbol `M68K_Read_Word_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:216: error: symbol `M68K_Read_Word_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:217: error: symbol `M68K_Read_Word_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:218: error: symbol `M68K_Read_Word_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:235: error: symbol `M68K_Write_Byte_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:236: error: symbol `M68K_Write_Byte_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:253: error: symbol `M68K_Write_Word_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:254: error: symbol `M68K_Write_Word_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:287: error: symbol `M68K_Read_Byte_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:288: error: symbol `M68K_Read_Byte_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:289: error: symbol `M68K_Read_Byte_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:290: error: symbol `M68K_Read_Byte_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:321: error: symbol `M68K_Read_Word_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:322: error: symbol `M68K_Read_Word_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:323: error: symbol `M68K_Read_Word_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:324: error: symbol `M68K_Read_Word_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:341: error: symbol `M68K_Write_Byte_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:342: error: symbol `M68K_Write_Byte_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:359: error: symbol `M68K_Write_Byte_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:360: error: symbol `M68K_Write_Byte_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:378: error: symbol `M68K_Write_Word_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:379: error: symbol `M68K_Write_Word_Ram' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:1792: error: symbol `E00000' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:1802: error: symbol `F00000' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:2074: error: symbol `E00000' undefined
c:\gens11\svnblah\Gens\\mem_m68k.asm:2083: error: symbol `F00000' undefined
--- Конец кода ---
GManiac:
Никак не получается. Я уже не знаю, что придумать. То ли мы что-то упустили, то ли ещё до обращения к этому файлу адрес автоматом отображается в 64кб РАМ.


--- Цитата ---xor ebx, 0xE00001 ???
--- Конец цитаты ---
нет, т.к. отображать надо в массив РАМ, а не РОМ, т.е. 14-й мегабайт идёт в 0-й, 15-й - в 1-й, посмотри мой исходник - поймёшь.

К слову о "слепой зоне". Если оставить твой исходник, то 13-й мегабайт рома отображается в 14-й мегабайт пространства эмулятора (из-за сдвигов). И если не учесть сдвиг, то ассемблер при обращении к 13-му мегабайту напишет команду с ссылкой именно на 13-й мегабайт (он же не знает про сдвиг), а в эмуляторе 13-й мегабайт - это VDP. И получится косяк. Раз хак Кабала работает нормально, значит, они это учли..... ну там просто треки впихнули в конец, я так понял.
Вот что я имею в виду:

--- Код: ---        lea ssilka,a0          ; lea $c00000,a0
        move d0,(a0)        ; move d0,$c00000 - обращение к VDP
...
* это место в роме - 0xC00000
ssilka:
        dc.b 'данные'
--- Конец кода ---
Ti_:

--- Цитата: GManiac от 10 Октябрь 2009, 18:54:19 ---

--- Конец цитаты ---
да я понял, эмулятор не будет знать ВДП это или РОМ.  но они это учли.  и работает как-то.

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

--- Цитата: GManiac от 10 Октябрь 2009, 18:54:19 ---нет, т.к. отображать надо в массив РАМ, а не РОМ, т.е. 14-й мегабайт идёт в 0-й, 15-й - в 1-й, посмотри мой исходник - поймёшь.

--- Конец цитаты ---
если при этом будет работать, то без разницы куда отображает), сейчас попробую фикс ошибок и сделать так, а если не поможет сделаю без этго.
GManiac:
Не эмулятор не будет знать, а ассемблер. Эмулятору побоку.
Не без разницы, у тебя есть массив РАМ - 2 метра, от 0 до 1FFFFF. Если даётся команда записать что-то в адрес $8542 во второй блок РАМ, это будет 80000 + 8542 = 88542.
Ti_:

--- Цитата: GManiac от 10 Октябрь 2009, 19:08:07 ---Не эмулятор не будет знать, а ассемблер. Эмулятору побоку.


--- Конец цитаты ---
;      pop ecx
;      pop ebx
а это зачем ; сделали не знаешь?

з.ы. не пашет.  сейчас покажу что лишнего понаписал, и потом сотру.


--- Код: --- M68K_Read_Byte_Ram0:
and ebx, 0x7FFFF
xor ebx, 0xE00001                    < ?
mov al, [Ram_68k + ebx]
pop ebx
ret
--- Конец кода ---
и т.д.




--- Код: --- M68K_Read_Word_Ram0:
and ebx, 0x7FFFF
mov ax, [Ram_68k + ebx + 0xE00000]    < ??
pop ebx
ret
--- Конец кода ---
и т.д.



--- Код: --- M68K_Write_Byte_Ram0:
and ebx, 0x7FFFF
xor ebx, 0xE00000                        < ??
mov [Ram_68k + ebx], al              
; pop ecx
; pop ebx
ret
--- Конец кода ---

и тд
 

--- Код: --- M68K_Write_Word_Ram0:
and ebx, 0x7FFFF
mov [Ram_68k + ebx + 0xE00000], ax          < ???
; pop ecx
; pop ebx
ret
--- Конец кода ---

итд

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

--- Цитата: GManiac от 10 Октябрь 2009, 19:08:07 ---, от 0 до 1FFFFF.

--- Конец цитаты ---

тогда может попрбовать 4блока по 0x000000, 0x080000,  0x1000000, 0x1800000

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

--- Цитата: GManiac от 10 Октябрь 2009, 18:54:19 ---Никак не получается. Я уже не знаю, что придумать. То ли мы что-то упустили, то ли ещё до обращения к этому файлу адрес автоматом отображается в 64кб РАМ.

--- Конец цитаты ---
может игра не видит их.,нужно что-то прописывать?
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

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