| Приставки > Картриджи / диски |
| Mega2560 Shield NES Dumper/Writer |
| << < (6/20) > >> |
| HardWareMan:
Cluster, кто? Я? Я держу пацанов в курсе, только и всего! :blush: |
| Cluster:
Закоммитил обновления клиента. Не стесняйтесь делать пул-реквесты, если что. В частности можете добавлять свои мапперы. |
| KykyPyky:
Наткнулся на некоторые мапперы которые полностью не дампятся. Общее у них одно, они на базе mmc3 и переключение внешних банков через $5FF0, $5FF1, $5FF2 Регистры mmc3 работают хорошо, а вот игры через внешний банк не переключаются, что бы я в них не записывал. В некоторых меню работает и можно узнать что оно пишет для переключения игр. --- Код: --- $5FF0 $5FF1 $5FF2 ROBOCOP 3 128k+128k $12 $10 $20 JMP($FFFC) SHOW BROTHER 128k+128k $12 $18 $30 JMP($FFFC) TMNT 2 256k+256k $01 $00 $00 JMP $addr --- Конец кода --- --- Код: --- $5FF0 $5FF1 $5FF2 BATMAN 128k+128k $12 $18 $00 JMP $addr SPIDERNAN HZ 128k+128k $12 $00 $10 JMP($FFFC) TMNT 1 128k+128k $12 $08 $20 JMP($FFFC) TMNT 4 128k+128k $12 $10 $30 JMP($FFFC) --- Конец кода --- Маппер, предположительно, сильно упрощенный http://wiki.nesdev.com/w/index.php/INES_Mapper_176 Не удается с помощью регистров $5FF0, $5FF1, $5FF2 переключать игры. Пишу туда, а оно не пишется :neznayu: У кого какие есть идеи? |
| supremacy:
Если речь про многоигровки, то скорее всего виновато отсутствие строба m2. Выше про это уже упоминали . Скорее всего срабатывает сброс этого регистра, либо запись в него осуществляется по низкому уровню m2. |
| Cluster:
При записи там делается строб, по крайней мере в моей оригинальной прошивке. Да и многие картриджи с такими регистрами я дампил. Может с таймингами что-то не то? Ещё может быть, что картридж уходит в ресет. |
| HardWareMan:
Cluster, supremacy имел в виду детектор сброса, который обычно собирается на RCD цепочке. Его действие основано том факте, что ядро 6502 в нормальной работе генерирует стабильную частоту на ноге F2. И пропадание этой частоты определяется как нажатие на сброс (потому что оно реально пропадает, если активен сигнал сброса, точнее вывод уходит в Z). И многоигровки, использующие это как сброс сдампить этим программатором нельзя. Но самая засада в том, что этот самый F2 управляет состоянием шины. Когда он = 0 шина пассивна, когда он = 1 - активна. Т.е., картридж обязан отключаться, если F2 = 0. Так же, процессор стабилизирует остальные управляющие сигналы именно когда F2 = 0: речь об адресах и сигнале направления данных R/W. И как только F2 = 1 все эти сигналы должны быть стабильны. В моем дампере стоит STM32F4, вот он на 168МГц ядра успевает подстроиться под F2, который генерируется таймером и полностью соответствует по скважности и частоте сигналу оригинального ядра 6502. И код при этом очень тугой в плане таймингов + отключены прерывания (код проверен на соответствие таймингов логическим анализатором): --- Код: ---// Чтение данных PRG в буфер __attribute__ ((naked)) void Read_PRG( uint8_t *PBuf, uint32_t Start, uint32_t Size ) { // Начинаем __asm volatile ( "PUSH {R0-R8}\n" // R0 = PBuf // R1 = Start // R2 = Size // R3 = GPIOA_IDR (Для чтения F2) "MOVW R3, #0x0010\n" "MOVT R3, #0x4002\n" // R4 = GPIOE_ODR (Для вывода адреса) "MOVW R4, #0x1014\n" "MOVT R4, #0x4002\n" // R5 = GPIOD_IDR (Для ввода данных) "MOVW R5, #0x0C10\n" "MOVT R5, #0x4002\n" // R6 = Маска $0000FFFF "MOVW R6, #0xFFFF\n" "MOVT R6, #0x0000\n" // Выделим "AND R1, R1, R6, LSL #0\n" "AND R2, R2, R6, LSL #0\n" // Синхронизируемся "CPSID f\n" "Read_PRG_Syn0:\n" "LDR R7, [R3, #0]\n" "ANDS R7, R7, #1\n" "IT EQ\n" "BEQ Read_PRG_Syn0\n" "Read_PRG_Syn1:\n" "LDR R7, [R3, #0]\n" "ANDS R7, R7, #1\n" "IT NE\n" "BNE Read_PRG_Syn1\n" // Цикл чтения "Read_PRG_Loop:\n" // Выставляем адрес "STR R1, [R4, #0]\n" // Ждем F2 = 1 "Read_PRG_LWt0:\n" "LDR R7, [R3, #0]\n" "ANDS R7, R7, #1\n" "IT EQ\n" "BEQ Read_PRG_LWt0\n" // Увеличиваем адрес чтения "ADD R1, R1, #1\n" // Ждем F2 = 0 "Read_PRG_LWt1:\n" "LDR R8, [R5, #0]\n" "LDR R7, [R3, #0]\n" "ANDS R7, R7, #1\n" "IT NE\n" "BNE Read_PRG_LWt1\n" // Сохраняем данные "AND R8, R8, #0x00FF\n" "STRB R8, [R0, #0]\n" // Следующий байт "ADDS R0, R0, #1\n" // Счетчик байт "SUB R2, R2, #1\n" "ANDS R2, R2, R6, LSL #0\n" "IT NE\n" "BNE Read_PRG_Loop\n" "CPSIE f\n" // Обнулим адрес "MOVW R6, #0x0000\n" "STR R6, [R4, #0]\n" "POP {R0-R8}\n" "BX LR\n" ); } --- Конец кода --- А вот AVR, скорее всего, не успеет программно это сделать. Причем, проблема будет острее для режима записи. Хотя, конечно, попробовать можно реализовать. Я подумаю на будущее. |
| RetHunter:
Ребята, как продвигается работа с перезаписью кулбоев без пайки? |
| bgr:
RetHunter, уже никак. |
| HardWareMan:
Уже 9 дней как никак. |
| Cluster:
--- Цитата: HardWareMan ---В моем дампере стоит STM32F4, вот он на 168МГц ядра успевает подстроиться под F2, который генерируется таймером и полностью соответствует по скважности и частоте сигналу оригинального ядра 6502. И код при этом очень тугой в плане таймингов + отключены прерывания (код проверен на соответствие таймингов логическим анализатором): --- Код: ---// Чтение данных PRG в буфер __attribute__ ((naked)) void Read_PRG( uint8_t *PBuf, uint32_t Start, uint32_t Size ) { // Начинаем __asm volatile ( "PUSH {R0-R8}\n" // R0 = PBuf // R1 = Start // R2 = Size // R3 = GPIOA_IDR (Для чтения F2) "MOVW R3, #0x0010\n" "MOVT R3, #0x4002\n" // R4 = GPIOE_ODR (Для вывода адреса) "MOVW R4, #0x1014\n" "MOVT R4, #0x4002\n" // R5 = GPIOD_IDR (Для ввода данных) "MOVW R5, #0x0C10\n" "MOVT R5, #0x4002\n" // R6 = Маска $0000FFFF "MOVW R6, #0xFFFF\n" "MOVT R6, #0x0000\n" // Выделим "AND R1, R1, R6, LSL #0\n" "AND R2, R2, R6, LSL #0\n" // Синхронизируемся "CPSID f\n" "Read_PRG_Syn0:\n" "LDR R7, [R3, #0]\n" "ANDS R7, R7, #1\n" "IT EQ\n" "BEQ Read_PRG_Syn0\n" "Read_PRG_Syn1:\n" "LDR R7, [R3, #0]\n" "ANDS R7, R7, #1\n" "IT NE\n" "BNE Read_PRG_Syn1\n" // Цикл чтения "Read_PRG_Loop:\n" // Выставляем адрес "STR R1, [R4, #0]\n" // Ждем F2 = 1 "Read_PRG_LWt0:\n" "LDR R7, [R3, #0]\n" "ANDS R7, R7, #1\n" "IT EQ\n" "BEQ Read_PRG_LWt0\n" // Увеличиваем адрес чтения "ADD R1, R1, #1\n" // Ждем F2 = 0 "Read_PRG_LWt1:\n" "LDR R8, [R5, #0]\n" "LDR R7, [R3, #0]\n" "ANDS R7, R7, #1\n" "IT NE\n" "BNE Read_PRG_LWt1\n" // Сохраняем данные "AND R8, R8, #0x00FF\n" "STRB R8, [R0, #0]\n" // Следующий байт "ADDS R0, R0, #1\n" // Счетчик байт "SUB R2, R2, #1\n" "ANDS R2, R2, R6, LSL #0\n" "IT NE\n" "BNE Read_PRG_Loop\n" "CPSIE f\n" // Обнулим адрес "MOVW R6, #0x0000\n" "STR R6, [R4, #0]\n" "POP {R0-R8}\n" "BX LR\n" ); } --- Конец кода --- А вот AVR, скорее всего, не успеет программно это сделать. Причем, проблема будет острее для режима записи. Хотя, конечно, попробовать можно реализовать. Я подумаю на будущее. --- Конец цитаты --- Ты что, на асме под STM32 пишешь? Вообще я сейчас как раз хочу их осваивать, можно практиковаться и сделать дампер... --- Цитата: HardWareMan от 13 Август 2018, 21:54:21 ---Уже 9 дней как никак. --- Конец цитаты --- Я сейчас постепенно занимаюсь новым сборщиком ромов для кулбоев, который использует новый функционал. Но это лучше в отдельной теме обсуждать. |
| HardWareMan:
--- Цитата: Cluster от 16 Август 2018, 21:25:14 ---Ты что, на асме под STM32 пишешь? Вообще я сейчас как раз хочу их осваивать, можно практиковаться и сделать дампер... --- Конец цитаты --- Нет, только критичные ко времени кусочки кода. Собственно, ты всегда можешь сам посмотреть, что там и как. |
| RetHunter:
--- Цитата: Cluster от 16 Август 2018, 21:25:14 ---Я сейчас постепенно занимаюсь новым сборщиком ромов для кулбоев, который использует новый функционал. Но это лучше в отдельной теме обсуждать. --- Конец цитаты --- Сборщик ромов - это чудесно. Где можно почитать о нововведениях? А именно запись кулбоев без пайки както продвинулась? |
| Cluster:
--- Цитата: HardWareMan от 16 Август 2018, 22:12:29 ---Нет, только критичные ко времени кусочки кода. Собственно, ты всегда можешь сам посмотреть, что там и как. --- Конец цитаты --- О, я как раз хотел у тебя ссылку на твой проект попросить. --- Цитата: RetHunter от 19 Август 2018, 23:39:55 ---Сборщик ромов - это чудесно. Где можно почитать о нововведениях? А именно запись кулбоев без пайки както продвинулась? --- Конец цитаты --- А что там продвигать? Всё за один вечер сделано было... А с нововведениями позже отдельную тему создам. |
| RetHunter:
Алексей, что у меня не так с прошивкой кулбоя? Пишет, что не знает команды write-coolboy, при этом write-coolgirl пытается выполнить, test-coolboy - получает информацию. Вот ошибка: D:\Dumper NO SOLDERING>famicom-dumper write-coolboy Famicom Dumper Client v1.0 (c) Cluster, 2018 http://clusterrr.com clusterrr@clusterrr.com Searhing for dumper (FTDI device with name "Famicom Dumper/Programmer")... Number of FTDI devices: 1 Device Index: 0 Flags: 0 Type: FT_DEVICE_232R ID: 4036001 Location ID: 13 Serial Number: 0018AKQ2 Description: Famicom Dumper/Programmer PRG reader initialization... OK CHR reader initialization... OK Unknown command: write-coolboy Добавлено позже: Разлбрался. Надо писать write-coolboy-direct. Испрвь в описании. Картридж c BGA флешкой пошёл на запись! :) Добавлено позже: Картридж записался. Нашёл ещё ошибку, пропущена буква "С": Searhing for dumper (FTDI device with name "Famicom Dumper/Programmer")... |
| Cluster:
Это прям две мои беды - не успеваю писать документацию и не перечитываю написанный текст :) Всё поправлю, наверное сегодня уже зарелизю. Я там ещё сделал поддержку альтернативных кулбоев, с регистрами на $500x (определяются автоматически) и вывод информации информации о flash-памяти (размер, вольтаж и пр.) А что за кулбой с BGA флешкой? Можно фото? Какие игры там были? Добавлено позже: Ещё вопрос: выложен ли проект шилда из этой темы куда-нибудь ещё, например на гитхаб? Я ссылку в описании клиента оставил бы. |
| postal2201:
Cluster, каждый раз как делаю новый проект собираюсь завести себе страницу на github :blush: Сегодня обязательно заведу и все выложу, схемы, герберы и прочее. |
| RetHunter:
--- Цитата: Cluster от 25 Август 2018, 15:08:14 --- А что за кулбой с BGA флешкой? Можно фото? Какие игры там были? --- Конец цитаты --- Вот тема, там фото и дамп. http://www.emu-land.net/forum/index.php/topic,80413.0.html Там картридж Pocket Game 150в1, с вырезанным стартовым экраном с рекламой. Спасибо за твою работу! |
| Cluster:
А вот первый релиз клиента: https://github.com/ClusterM/famicom-dumper-client/releases :) |
| KykyPyky:
--- Цитата: KykyPyky от 11 Август 2018, 21:14:18 ---Не удается с помощью регистров $5FF0, $5FF1, $5FF2 переключать игры. Пишу туда, а оно не пишется :neznayu: --- Конец цитаты --- Мне удалось сдампить эти карики. Я подпаял к карику m2 с внешнего генератора 1.7мгц, а сигнал с дампера отключил(вставил зубочистку в слот). Считывается все на удивление очень надежно. До этого пытался прошивкой ардуиной держать m2 все время в высоком или низком состояниии, а изменять состояние в нужное только при записи. Не помогало. А вот высокая частота помогла. Второе. Есть оказывается неправильные карики которые этим дампером корректно считать нельзя. У этих кариков либо не распаян контакт PPU /RD, либо распаян но не работает. О таких кариках я писал уже на форуме и жаловался что они артефачат на ремейках http://www.emu-land.net/forum/index.php/topic,75737.msg1337411.html#msg1337411 Подключение к шине PPU выбирается подачей PPU A13, а PPU /RD не участвует вообще. Причем бывает чтоPPU /RD подключен к капле, даже звонится защитный диод, но к пзу он не подключен. Т.к. CPU A13 и PPU A13 обьединены, то при считывании адреса с установленным A13 на шину данных подключены обе пзу, получается мусор каждые несколько килобайт. В следующей версии дампера логичнее было бы не объединять, а завести PPU A13 на отдельный пин. |
| Cluster:
Да надо будет заморочиться. Но наверное уже на STM32 буду пробовать. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |