Разработка и ромхакинг > Программирование
[SMD] Gens Movie 11a - разогнанный эмуль
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кб РАМ.
--- Конец цитаты ---
может игра не видит их.,нужно что-то прописывать?
Навигация
Перейти к полной версии