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