Автор Тема: Megadrive Portable  (Прочитано 89187 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Оффлайн megavolt85

  • Пользователь
  • Сообщений: 1464
  • Пол: Мужской
    • Просмотр профиля
Megadrive Portable
« Ответ #360 : 06 Июль 2018, 12:41:23 »
Rumata, по какому оффсету заставка? не 0x3886 случаем, размер 0x870000
даташит на дисплей есть?

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24708
    • Просмотр профиля
Megadrive Portable
« Ответ #361 : 06 Июль 2018, 12:43:49 »
Не помню. Точнее даже подробно не выяснял. Она не пожатая, любым вьюером видно

Добавлено позже:
Смотри файл MD350_ROM_TRIMMED.bin, там всего 16к. Судя по дампу графика начинается где-то с $0754
« Последнее редактирование: 06 Июль 2018, 12:49:59 от Rumata »

Оффлайн demolition.nick

  • Пользователь
  • Сообщений: 776
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
Megadrive Portable
« Ответ #362 : 06 Июль 2018, 13:32:26 »
Rumata, по какому оффсету заставка? не 0x3886 случаем, размер 0x870000
даташит на дисплей есть?

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24708
    • Просмотр профиля
Megadrive Portable
« Ответ #363 : 06 Июль 2018, 13:43:42 »
Этот даташит мало чего даёт. Нужен апликейшн, даташит на драйвер.

Оффлайн demolition.nick

  • Пользователь
  • Сообщений: 776
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
Megadrive Portable
« Ответ #364 : 06 Июль 2018, 14:13:10 »
Этот даташит мало чего даёт. Нужен апликейшн, даташит на драйвер.
Этот даташит как минимум даёт название дисплея :lol:

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24708
    • Просмотр профиля
Megadrive Portable
« Ответ #365 : 06 Июль 2018, 14:32:49 »
Но не даёт название драйвера :(

Оффлайн demolition.nick

  • Пользователь
  • Сообщений: 776
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
Megadrive Portable
« Ответ #366 : 06 Июль 2018, 14:48:50 »
Но не даёт название драйвера :(
Тут ещё хоть что-то. На Ultimate вообще еле нашёл такой даташит, а как начал его читать, понял что не оно. Диагональ не та, распиновка тоже.

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24708
    • Просмотр профиля
Megadrive Portable
« Ответ #367 : 06 Июль 2018, 14:53:58 »
Даже интересно, почему это всё идёт как конфиденциальное?

Оффлайн demolition.nick

  • Пользователь
  • Сообщений: 776
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
Megadrive Portable
« Ответ #368 : 06 Июль 2018, 14:59:49 »
Даже интересно, почему это всё идёт как конфиденциальное?
Сам не понимаю. Вот допустим я проектирую свою систему. Мне недостаточно знать интерфейсы дисплея. И то продавцы бывает не пишут их. В идеале понакачал даташитов на более-менее подходящие дисплеи и читаешь. А тут кетайцы сами себе могилу роют

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24708
    • Просмотр профиля
Megadrive Portable
« Ответ #369 : 06 Июль 2018, 18:50:23 »
У меня на Фесте один раз
MOVE.W    #$0020,$00A16106
при том, что там джойстик 6-кнопочный на отдельной микросхеме

И куча строк типа:
MOVE.W    #$4000,$00A16302
MOVE.W    #$04F9,$00A16304
MOVE.W    #$0A0D,$00A16306
MOVE.W    #$0005,$00A16310
MOVE.W    #$90C1,$00A16300
MOVE.W    #$9BC1,$00A16300
Скорее всего это настройка дисплея (дисплей другой)

Оффлайн demolition.nick

  • Пользователь
  • Сообщений: 776
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
Megadrive Portable
« Ответ #370 : 06 Июль 2018, 18:57:57 »
Rumata, а чё за чип в той фесте? 6703 или 6803? Просто Hamy HG-806 есть и такие и сякие

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24708
    • Просмотр профиля
Megadrive Portable
« Ответ #371 : 06 Июль 2018, 19:05:11 »
У меня 6703

Оффлайн demolition.nick

  • Пользователь
  • Сообщений: 776
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
Megadrive Portable
« Ответ #372 : 06 Июль 2018, 19:50:51 »
У меня 6703
А дисплей там на те же ноги идёт что и у меня?

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24708
    • Просмотр профиля
Megadrive Portable
« Ответ #373 : 06 Июль 2018, 20:25:36 »
Ну вроде как да, 39 - 47. Только про него ничего не известно. Вроде как LG48238QS45-1A, 2,4" 320x234

Оффлайн demolition.nick

  • Пользователь
  • Сообщений: 776
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
Megadrive Portable
« Ответ #374 : 06 Июль 2018, 20:59:00 »
Ну вроде как да, 39 - 47. Только про него ничего не известно. Вроде как LG48238QS45-1A, 2,4" 320x234
Что-то мне подсказывает что на них информация одинаковая идёт. Проведу эксперимент по скрещиванию Ultimate и 350 на днях... А на Ultimate я вроде как нашёл даташит. Экран там AUO A025BN02 VB и V9 (так написано на переходной плате). Я вроде нашёл V5. По распиновке всё сходится.

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24708
    • Просмотр профиля
Megadrive Portable
« Ответ #375 : 06 Июль 2018, 21:14:46 »
Сам интерфейс serial RGB одинаков, даже стандартен, а вот инициализация через SPI разная

Оффлайн megavolt85

  • Пользователь
  • Сообщений: 1464
  • Пол: Мужской
    • Просмотр профиля
Megadrive Portable
« Ответ #376 : 07 Июль 2018, 18:38:12 »
Rumata, нету ли случаем описания формата картинки?
P.S. дамп кстати работает в эмуляторе, картинка во всяком случае отображается

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24708
    • Просмотр профиля
Megadrive Portable
« Ответ #377 : 07 Июль 2018, 19:06:37 »
нету ли случаем описания формата картинки?
В смысле? Обычная картинка, сеговская.. Наверно где-то в доках есть описание формата.

дамп кстати работает в эмуляторе, картинка во всяком случае отображается
А чего бы ему не работать? Это реальное железо, все доп. регистры работают только на запись. Собственно скриншот заставки я откуда брал?

Оффлайн megavolt85

  • Пользователь
  • Сообщений: 1464
  • Пол: Мужской
    • Просмотр профиля
Megadrive Portable
« Ответ #378 : 07 Июль 2018, 21:49:28 »
Собственно скриншот заставки я откуда брал?

честно говоря думал что вытащил из дампа

Обычная картинка, сеговская..

не имел я раньше дел с genisis/megadrive, ладно буду искать, может кто пнёт в нужном направлении, нужно описание формата или исходник какого нибудь конвертера

Оффлайн megavolt85

  • Пользователь
  • Сообщений: 1464
  • Пол: Мужской
    • Просмотр профиля
Megadrive Portable
« Ответ #379 : 08 Июль 2018, 04:39:16 »
в общем как то так

#define ROM_CARTRIDGE 0x000000

#define VDP_DATA 0xC00000
#define VDP_CONTROL 0xC00004
#define VDP_HWCOUNTER 0xC00008
#define VDP_PSG76489 0xC00010

#define SYSTEM_IO_UNK0 0xA13000

#define SYSTEM_IO_CART 0xA16106

#define SYSTEM_IO_UNK1 0xA16302
#define SYSTEM_IO_UNK2 0xA16304
#define SYSTEM_IO_UNK3 0xA16306

void main() // sub_400
{
reset_VDP();

write_cram(0, &dword_754);

sub_6A2(1, 0x3122, &dword_764);

sub_6D6(1, 0x870000, &dword_3886);

*(uint16_t *) VDP_CONTROL = 0x8144;

sub_540();

delay(16);

uint16_t *src = word_47C;
uint16_t *dst = (uint16_t *) 0xFF0000; // RAM

/* Copy SUBROUTINE to RAM*/

for (int i = 0; i < 98; i++)
{
dst[i] = src[i];
}

typedef void (*function)(void);

function start_from_ram = dst;

start_from_ram();
}

void sub_540()
{
*(uint16_t *) SYSTEM_IO_UNK1 = 0x3000;
*(uint16_t *) SYSTEM_IO_UNK2 = 0xF0CC;
*(uint16_t *) SYSTEM_IO_UNK3 = 0x7813;
}

void delay(int cnt) // sub_574
{
do
{
for (int i = 0; i <= 0xFFFF; i++);
}
while (cnt--)
}

void reset_VDP() // sub_58A
{
clear_vram();
clear_vsram();
clear_cram();
sub_622();
}

void clear_cram() // sub_5A4
{
*(uint16_t *) VDP_CONTROL = 0x8F02;
*(uint32_t *) VDP_CONTROL = 0xC0000000;

for (int i = 0; i < 32; i++)
{
*(uint32_t *) VDP_DATA = 0;
}
}

void clear_vram() // sub_5CE
{
*(uint16_t *) VDP_CONTROL = 0x8F02;
*(uint32_t *) VDP_CONTROL = 0x40000000;

for (int i = 0; i < 0x4000; i++)
{
*(uint32_t *) VDP_DATA = 0;
}
}

void clear_vsram() // sub_5F8
{
*(uint16_t *) VDP_CONTROL = 0x8F02;
*(uint32_t *) VDP_CONTROL = 0x40000010;

for (int i = 0; i < 20; i++)
{
*(uint32_t *) VDP_DATA = 0;
}
}

void sub_622()
{
uint16_t val = 0x8000;

for (int i = 0; i < 24; i++)
{
val = (val & 0xFF00) | byte_64A[i];

*(uint16_t *) VDP_CONTROL = val;

val += 0x100;
}
}

uint8_t byte_64A[24] =
{
0x04, 0x04, 0x38, 0x34, 0x06, 0x78, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x02,
0x01, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x80
};

void write_cram(uint32_t d0, uint32_t *a0) // sub_662
{
uint32_t *data = (uint32_t *) ((d0 << 5) & 0x60) + a0;

d0 = (((d0 >> 3) & 0x60) | 0xC000) << 16;

*(uint16_t *) VDP_CONTROL = 0x8F02;

*(uint32_t *) VDP_CONTROL = d0;

for (int i = 0; i < 8; i++)
{
*(uint32_t *) VDP_DATA = data[i];
}
}

void sub_6A2(uint16_t d0, uint16_t d1, uint16_t *a0)
{
uint32_t val = (((d0 << 5) & 0xFFFE) << 2);

val = (((uint16_t) val) >> 2) | 0x4000;

val = (val >> 16) | (val << 16);

*(uint32_t *) VDP_CONTROL = val;

uint16_t cnt = (d1 / 2) - 1;

uint16_t *data = a0 + 2;

for (int i = 0; i < cnt; i++)
{
*(uint16_t *) VDP_DATA = data[i];
}
}

void sub_6D6(uint16_t d0, uint32_t d1, uint16_t *a0)
{
uint16_t tmp; // d2
int cnt; // d3
uint16_t orval; // d4
int cnt2; // d5

tmp = (d1 & 0x3F) << 1;

d1 = (((d1 & 0x1F00) >> 1) + tmp) | (d1 & 0xFFFF0000);

d1 = (d1 << 16) | (d1 >> 16);

orval = (uint16_t) d1;

orval = (orval << 7) & 0x8000;

d1 = (d1 & 7) | (d1 & 0xFFFF0000);

tmp = (uint16_t) d1;

tmp = (tmp & 1) | (tmp & 0xFF00);

tmp = (tmp >> 3) | (tmp << 13);

d1 = ((d1 >> 1) & 0xFF) | (d1 & 0xFFFFFF00);

d1 += ((tmp + 0x4000) << 16);

*(uint16_t *) VDP_CONTROL = 0x8F02;

*(uint32_t *) VDP_CONTROL = d1;

tmp = *a0++;

cnt = *a0++;

cnt = (cnt >> 8) | (cnt << 8);

cnt2 = (tmp >> 8) | (tmp << 8);

for (int i = 0; i < cnt; i++)
{
for (int n = 0; n < cnt2; n++)
{
*(uint16_t *) VDP_DATA = (((d0 + *a0++) & 0x7FFF) | orval);
}

d1 += 0x800000;

*(uint32_t *) VDP_CONTROL = d1;
}
}


uint32_t dword_764 = 0x40000L;





void start_from_ram() // sub_FF0000
{
(void) *(uint16_t *) SYSTEM_IO_UNK0;

*(uint16_t *) SYSTEM_IO_CART = 0x20; // FIXME switch from internal ROM to cartridge ROM
*(uint16_t *) SYSTEM_IO_CART = 0xA0; // FIXME reset cartridge ROM

for (int i = 0; i < 0x10000; i++) // simple delay
{
asm("nop\n");
asm("nop\n");
}

if (((uint8_t *) ROM_CARTRIDGE)[0x100] != 'S')
{
/* cartridge not present */
while(1); // infinite loop
}

*(uint16_t *) VDP_CONTROL = 0x8104;

reg[SR] = 0x2700;

*(uint16_t *) VDP_CONTROL = 0x8F02;
*(uint32_t *) VDP_CONTROL = 0xC0000000;

for (int i = 0; i < 32; i++)
{
*(uint32_t *) VDP_DATA = 0;
}

*(uint32_t *) VDP_CONTROL = 0x40000000;

for (int i = 0; i < 0x4000; i++)
{
*(uint32_t *) VDP_DATA = 0;
}

*(uint16_t *) VDP_CONTROL = 0x8104;

*(uint16_t *) SYSTEM_IO_CART = 0xA0; // FIXME reset cartridge ROM

asm("nop\n"); asm("nop\n"); asm("nop\n"); asm("nop\n");

reg[SP] = reg[USP] = ((uint32_t *) ROM_CARTRIDGE)[0];

typedef void (*function)(void);

function run_from_cartridge = ((uint32_t *) ROM_CARTRIDGE)[1];

run_from_cartridge();
}
« Последнее редактирование: 08 Июль 2018, 10:21:48 от megavolt85 »

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5079
    • Просмотр профиля
Megadrive Portable
« Ответ #380 : 08 Июль 2018, 06:03:32 »
megavolt85,
void sub_540()
{
*(uint16_t *) SYSTEM_IO_UNK1 = 0x3000;
*(uint16_t *) SYSTEM_IO_UNK2 = 0xF0CC;
*(uint16_t *) SYSTEM_IO_UNK2 = 0x7813; // Похоже здесь должно быть SYSTEM_IO_UNK3
}
VDP_HWCOUNTER и VDP_PSG76489 не используются. А что делает эта инструкция?(void) *(uint16_t *) SYSTEM_IO_UNK0;Она бесполезна, либо здесь чёрная магия.

Оффлайн megavolt85

  • Пользователь
  • Сообщений: 1464
  • Пол: Мужской
    • Просмотр профиля
Megadrive Portable
« Ответ #381 : 08 Июль 2018, 10:17:46 »
Она бесполезна, либо здесь чёрная магия.

считывание из регистра 0xA13000, сами данные не используются, этот регистр надо тупо прочитать, возможно что именно это переключение с внутренней ROM на карик, хотя я конечно в это сомневаюсь
да, второй UNK2 надо заменить на UNK3, это опечатка

« Последнее редактирование: 08 Июль 2018, 10:26:27 от megavolt85 »

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24708
    • Просмотр профиля
Megadrive Portable
« Ответ #382 : 08 Июль 2018, 16:38:31 »
Это всё, конечно, здорово, но что дальше? Назначение неизвестных регистров остаётся неизвестным.

Оффлайн megavolt85

  • Пользователь
  • Сообщений: 1464
  • Пол: Мужской
    • Просмотр профиля
Megadrive Portable
« Ответ #383 : 08 Июль 2018, 21:40:44 »
что дальше?

дальше можно убрать функцию sub_540 и посмотреть на результат, только есть ли желающие тестить?

P.S. во вложении дамп с отключенной sub_540
« Последнее редактирование: 08 Июль 2018, 21:48:34 от megavolt85 »

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24708
    • Просмотр профиля
Megadrive Portable
« Ответ #384 : 08 Июль 2018, 21:44:53 »
И как это делать на железе?

Оффлайн megavolt85

  • Пользователь
  • Сообщений: 1464
  • Пол: Мужской
    • Просмотр профиля
Megadrive Portable
« Ответ #385 : 08 Июль 2018, 21:49:51 »
Rumata,  тупо шить флешь, или там MASK ROM ?

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24708
    • Просмотр профиля
Megadrive Portable
« Ответ #386 : 08 Июль 2018, 22:07:46 »
Вообще ненужную команду можно было тупо забить NOPами :-\
Нет, там флеш, конечно. Только её нужно выпаять, перешить, впаять. Поле пятой перепайки печать отвалится. Кстати, китайцы там ещё и твёрдый припой используют.
Если только переключиться на внешний картридж и стартовать с него. Там хоть можно перешивать без пайки

Оффлайн megavolt85

  • Пользователь
  • Сообщений: 1464
  • Пол: Мужской
    • Просмотр профиля
Megadrive Portable
« Ответ #387 : 08 Июль 2018, 22:17:55 »
Вообще ненужную команду можно было тупо забить NOPами

так я так и сделал, дамп в посте 383

Оффлайн demolition.nick

  • Пользователь
  • Сообщений: 776
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
Megadrive Portable
« Ответ #388 : 08 Июль 2018, 22:46:56 »
Нет, там флеш, конечно. Только её нужно выпаять, перешить, впаять. Поле пятой перепайки печать отвалится. Кстати, китайцы там ещё и твёрдый припой используют.
Если только переключиться на внешний картридж и стартовать с него. Там хоть можно перешивать без пайки

Грузить прошивку с картриджа конечно удобно, но как тогда игры грузить?

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24708
    • Просмотр профиля
Megadrive Portable
« Ответ #389 : 08 Июль 2018, 23:12:31 »
так я так и сделал
Я просто не понял всех этих экзерсисов с СИ :)

но как тогда игры грузить?
Это верно. В этой прошивке нет встроенных игр :-\

Надо что-то думать. Потому как многое хотелось бы пощупать.