Приставки > Картриджи / диски
Нужна помощь с дампом карика 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:
Просьба удалить тему за ненадобностью более!
Навигация
Главная страница сообщений

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