| Приставки > Картриджи / диски |
| Нужна помощь с дампом карика REALTEC |
| (1/1) |
| DrMefistO:
Дамп прикладываю. Всем желающим помочь, читать: https://code.google.com/p/genplus-gx/source/browse/trunk/docs/REALTEC+Cart+Mapper+-+description+v1.txt?r=31 https://github.com/ekeeke/Genesis-Plus-GX/blob/341f093fb1847793846585c51324ab6d718a8534/core/cart_hw/md_cart.c (поиск по слову realtec) Пробовал писать так же как в роме для переключения банка (скрипт на Lua, для моей дампилки): --- Код: ---for m = 0, 0xFF do rom.write_byte(0x402000, 4); end for m = 0, 0xFF do rom.write_byte(0x404000, 0); end for m = 0, 0xFF do rom.write_byte(0x400000, 1); end --- Конец кода --- не помогло. С адреса 0x2000 все равно зеркалятся первые 0x2000 байт. |
| Rumata:
Что хоть дампишь-то? Анализ схемы картриджа делал? Может там другое переключение :-\ |
| DrMefistO:
Rumata, игруля зовется Tom Clown. Схему не анализировал, только дамп (по нему, собственно и делал анализ), ну и плюс доку по мапперу читал. На схеме только две капли, и один кондер (не понимаю, что там можно высмотреть без распиливания капли). |
| Rumata:
Капли - это хуже. Просто просмотр адресных линий помогает хотя бы оценить объём и всё такое. Хорошо, если маппер такой же. Хотя по коду похоже. Tom Clown - это этот? |
| DrMefistO:
Rumata, да, это он. только вместо микрухи капля. даже дырки остались под нее. |
| Rumata:
Да, бывают с двойной разводкой. Кстати, на этой плате для записи используется /UWR (B29). У тебя в дампере он задействован? И сброс /VRES (B27). |
| DrMefistO:
Rumata, /UWR задействовали буквально сегодня) а вот /VRES не делал. Когда именно его нужно дергать? --- Код: ---void byteWrite(unsigned long addr, byte value, int CARTState) { int i; CEHigh(); OEHigh(); LWRHigh(); UWRHigh(); shiftOut24bit(addrClockPin, addrLatchPin, addrDataPin, addr >> 1); if((CARTState && addr <= 0x3FFFFF) || (!CARTState && addr >= 0x400000 && addr <= 0x7FFFFF)) { CELow(); } if(addr >= 0xA13000 && addr <= 0xA130FF) { TIMELow(); } ASLow(); value = ((value & 0xFF) | ((value & 0xFF) << 8)); for(i = 0; i <= DATA_PINS; i++) { pinMode(dataPin[i], OUTPUT); if(value & (1 << i)) { digitalWrite(dataPin[i], HIGH); } else { digitalWrite(dataPin[i], LOW); } } if(addr % 2) { LWRLow(); } else { UWRLow(); } delayMicroseconds(opDelay); LWRHigh(); UWRHigh(); TIMEHigh(); ASHigh(); CEHigh(); } --- Конец кода --- --- Код: ---word wordRead(unsigned long addr, int CARTState) { word data = 0; int i; for(i = 0; i < DATA_PINS; i++) { pinMode(dataPin[i], INPUT); } CEHigh(); OEHigh(); LWRHigh(); UWRHigh(); shiftOut24bit(addrClockPin, addrLatchPin, addrDataPin, addr >> 1); if((CARTState && addr <= 0x3FFFFF) || (!CARTState && addr >= 0x400000 && addr <= 0x7FFFFF)) { CELow(); } if(addr <= 0xDFFFFF) { OELow(); } if(addr >= 0xA13000 && addr <= 0xA130FF) { TIMELow(); } ASLow(); delayMicroseconds(opDelay); for(i = 0; i < DATA_PINS; i++) { if(digitalRead(dataPin[i])) { data |= (1 << i); } } TIMEHigh(); ASHigh(); LWRHigh(); UWRHigh(); CEHigh(); OEHigh(); return data; } --- Конец кода --- |
| Rumata:
Ну мне эти коды мало что говорят :) На /UWR я обратил внимание потому, что в картриджах обычно задействован /LWR. Приставка-то при записи словом будет генерить оба |
| DrMefistO:
Rumata, ну, код я кинул, чтобы ты глянул, правильно ли я устанавливаю и сбрасываю пины перед чтением/записью. А когда должна дергаться нога /VRES? |
| Rumata:
/VRES - это вообще сброс по кнопке. Но и при начальном включении тоже должен формироваться. Он же сброс процессора |
| HardWareMan:
--- Цитата: Rumata от 23 Апрель 2015, 01:04:15 ---/VRES - это вообще сброс по кнопке. Но и при начальном включении тоже должен формироваться. Он же сброс процессора --- Конец цитаты --- Он еще может быть сгенерирован самим процессором на 64 такта по команде. |
| DrMefistO:
Ну тогда это все есть уже. |
| DrMefistO:
Просьба удалить тему за ненадобностью более! |
| Навигация |
| Главная страница сообщений |