| Приставки > Картриджи / диски |
| Famicom Cartridge Schematics & PCBs |
| << < (63/67) > >> |
| woddy:
номер маппера то какой? какие игры на нем? |
| Narn:
--- Цитата: max5775 от 02 Апрель 2024, 19:04:41 ---Подскажите по данной игре, как ее запустить? По идее получается там только увеличенный размер CHR до 16КБ в сравнении с обычным NROM. Пробовал на обычном HC161 прикрутить маппинг PA13 через D0, но не взлетело. --- Конец цитаты --- Касаемо моего предыдущего поста, это маппер 099. Список игр не очень большой. Сейчас тестирую vs.super mario bros. На плате переключатели как в аркадном автомате, плюс кнопки, имитация ввода монет. Есть один нюанс в использовании игр VS. у большинства игр при запуске на обычных консолях цвета не совпадают, это связано с использованием в игровых автоматах других PPU. Ром файл оригинал, только изменена палитра. Для изменения палитры пользовался информацией с сайта https://www.raphnet.net/electronique/nes_vs/nes_vs_en.php?section_id=2#6 Переключатели работают согласно описанию документации vs.super mario bros service manual. В процессе проектирования схемы данного картриджа наткнулся на статью https://satoshimatrix.wordpress.com/2010/11/16/vs-super-mario-bros-review-nes/ Тут как раз есть переключатель Dip., увидев его решил попробовать сделать так же. Пробовал приложенный ром файл vs.duck hunt, графика отображается правильно, цвета тоже нормально, но звук в игре при запуске играет правильно, примерно пол секунды, потом идёт звуковой писк одного тона, как бы зависает. На спуск курка пистолета не реагирует. Пробовал vs.battle city, палитра графики все в зелёном спектре, нужно исправлять, но это уже непосильно для меня. Но работает на этом картридже, кредиты набираются, жизни регулируются, игра играется, танки стреляют. Можно типа 4-in-1 сделать, Марио, утки, танки, и мотоциклист например). Пробовал на 4 консолях, на микросхемных вариантах (pal, ntsc) работает, кредиты набираются, игры запускаются. А вот на консолях капельных не запускаются, так как не набираются кредиты, не отрабатывае что то, то ли логика картриджа, то ли процы капельные так ведут себя. Но есть ром файл с vs. Super Mario Bros с отключенным вводом монет и исправленной палитрой, он работает на всех четырех консолях |
| yaiba1989:
7 in 1 game with PCB https://i.upimg.com/i9o69spfD Please do not post an image with a side larger than 700 pixels using the img tag. ghostdog3 |
| woddy:
Кто-нибудь замерял потребляемый ток от батарейки? Использую unrom 512 схему. Потребляемый ток по мультиметру 100мка (на резисторе R2 около 500мв падает!), что по рассчетам высадит батарейку за 1-2 месяца. Может где-то надо добавить подтяжку чтоб чип в спячку уходил? Добавлено позже: нашел причину. утечка через 74hc20 идет. придется транзистор городить ((( фрам нет у меня Добавлено позже: вот теперь упало с 100мка до 0,3мка. другое дело |
| Talking_Sword:
Подскажите пожалуйста, как сделать маппер без конфликтов по шине? В принципе, в первом посте этой темы в прикрепленном архиве уже есть схема "FC AxROM Schematics.png", в которой есть решение конфликтов по шине. Там такой принцип, что сигналы /ROMSEL и инвертированный R/W подаются на элемент "ИЛИ". В качестве инвертора для сигнала R/W используется один из элементов 74xx02 с соединенными вместе входами, так как это элементы "ИЛИ-НЕ", на выход элемента, к которому подключены /ROMSEL и инвертированный R/W, подключен еще один элемент с соединенными вместе входами, чтобы из "ИЛИ-НЕ" получилось просто "ИЛИ". В принципе, как это действует - понятно. А теперь вопрос - а нельзя ли обойтись без этой схемы, а просто подать на /OE PRG ROM инвертированный R/W, а /CE подключить к /ROMSEL? Почему-то на этих схемах картриджей не задействован /CE (подтянут к нулю), хотя можно его применить для разрешения конфликтов. При чтении из PRG ROM /ROMSEL будет низким, а R/W - высоким. А ПЗУ нужно, чтобы и /CE и /OE были низкими, чтобы выдавать данные. Если /CE подключить к /ROMSEL, а на /OE подать инвертированный R/W, то как раз при чтении из PRG ROM они оба будут низкие, а при записи /OE станет высоким, ПЗУ отклюится и не будет мешаться на шине. Или это так не работает, если делают эту схему на 74xx02? |
| supremacy:
--- Цитата: Talking_Sword от 24 Май 2025, 21:41:15 ---а нельзя ли обойтись без этой схемы, а просто подать на /OE PRG ROM инвертированный R/W --- Конец цитаты --- Можно и так, но тебе нужно будет инвертировать сигнал, а для этого или на транзисторе это делать либо логику ставить. У игр издательства Acclaim, кстати был свой кастомный маскром с неинвертированным СE на 31 ноге, поэтому они обходились без дополнительной логики. Вот здесь, например: https://nescartdb.com/profile/view/25/ironsword-wizards-warriors-ii |
| mutabor:
--- Цитата: Talking_Sword от 24 Май 2025, 21:41:15 ---Почему-то на этих схемах картриджей не задействован /CE (подтянут к нулю) --- Конец цитаты --- Обычно у памяти CE работает медленнее чем OE - видимо из этих соображений. Но если память быстрая - то должно работать и через /CE. |
| Talking_Sword:
--- Цитата: supremacy от 24 Май 2025, 22:51:45 ---но тебе нужно будет инвертировать сигнал, а для этого или на транзисторе это делать --- Конец цитаты --- Знаю. Когда-то находил схему картриджа Atari 2600. У Atari 2600, в отличие от других приставок CE "прямой", а не инвертированный. Поэтому, для использования с обычными ПЗУ там этот сигнал нужно инвертировать. В той схеме это сделано на транзисторе. На Atari 2600 это у меня работало. Здесь хочу попробовать инвертировать /OE так же. --- Цитата: mutabor от 24 Май 2025, 23:29:23 ---Обычно у памяти CE работает медленнее чем OE - видимо из этих соображений. --- Конец цитаты --- Тоже читал когда-то про такое. Но я даже не про это имел в виду. Я имел в виду то, что у ПЗУ два разрешающих сигнала, один из них можно бы было потенциально использовать для борьбы с конфликтами, а он просто никак не используется. Тогда еще есть один вопрос. В картриджах Famicom\Dendy обычно используют 74xx161. А как вместо этой микросхемы использовать 74xx174, которые обычно используются в многоигровках Mega Drive? На картриджах Famicom\Dendy на вывод 2 74xx161 подклюсен /ROMSEL, а вывод 9 - R/W. Для чего так сделано? А у 74xx174, в свою очередь есть только один вывод для "ввода" значения (тоже 9). Как его подключить, если использовать 74xx174 на картридже Famicom\Dendy? |
| supremacy:
--- Цитата: Talking_Sword от 25 Май 2025, 18:21:59 ---Как его подключить, если использовать 74xx174 на картридже --- Конец цитаты --- По "ИЛИ" сложить на логике. Ну или на диодах сделать: Добавлено позже: --- Цитата: Talking_Sword от 25 Май 2025, 18:21:59 ---Для чего так сделано? --- Конец цитаты --- Приставка может писать не только в prg ram но и во внутреннюю память, и тебе не нужно менять значения на защёлке, когда запись происходит во внутреннюю память приставки, поэтому /romsel тоже нужно учитывать |
| JRBVZ:
max5775, я наконец-то добил реализацию ММС1 на EPM3064 ^_^ Во всяком случае у меня чип и дейл работает, с wram еще не пробовал. М2 зацепил на 37 ногу Альтеры (Global Clock), romsel на 40, остальные на усмотрение. --- Код: ---module MMC1_V ( // Inputs: input wire m2, input wire cpu_rw, input wire romsel, input wire cpu_A14, input wire cpu_A13, input wire cpu_D7, input wire cpu_D0, input [12:10] ppu_addr_in, // Outputs: output reg prg_wram_cs, output reg prg_rom_oe, output reg [17:14] prg_addr_out, output reg [16:12] ppu_addr_out, output reg ppu_ciram_a10 ); reg [4:0] control; // $8000-9FFF reg [4:0] chr_bank_0; // $A000-BFFF reg [4:0] chr_bank_1; // $C000-DFFF reg [4:0] prg_bank; // $E000-FFFF reg [3:0] shift; reg [1:0] bit_counter; reg bit_commit; reg reading; // Logic for prg_addr_out always @(*) begin if (control[3] == 1'b0) begin // 32kByte Bank mode prg_addr_out = {prg_bank[3:1], cpu_A14}; end else if (control[2] == 1'b0 && cpu_A14 == 1'b0) begin // 16kByte Bank mode, first bank $8000-BFFF prg_addr_out = 4'b0000; end else if (control[2] == 1'b0 && cpu_A14 == 1'b1) begin // 16kByte Bank mode, CPU access $C000-FFFF prg_addr_out = prg_bank[3:0]; end else if (control[2] == 1'b1 && cpu_A14 == 1'b0) begin // 16kByte Bank mode, last bank $C000-FFFF, CPU access $8000-BFFF prg_addr_out = prg_bank[3:0]; end else begin // 16kByte Bank mode, last bank $C000-FFFF, CPU access $C000-FFFF prg_addr_out = 4'b1111; end end // Logic for ppu_addr_out always @ (*) begin case (control[4]) 0: ppu_addr_out[16:12] = {chr_bank_0[4:1], ppu_addr_in[12]}; // 8KB bank mode 1: if (ppu_addr_in[12] == 0) // 4KB bank mode ppu_addr_out[16:12] = chr_bank_0; else ppu_addr_out[16:12] = chr_bank_1; endcase end // PRG-ROM /OE always @(*) begin if (cpu_rw == 1'b1) prg_rom_oe = romsel; // Prevent bus conflict else prg_rom_oe = 1'b1; end // WRAM /CS always @(*) begin if (prg_bank[4] == 1'b1) prg_wram_cs = 1'b1; // WRAM disabled else if (m2 == 1'b1 && romsel == 1'b1 && cpu_A14 == 1'b1 && cpu_A13 == 1'b1) prg_wram_cs = 1'b0; // CPU access $6000-$7FFF else prg_wram_cs = 1'b1; end // Mirroring always @ (*) begin case (control[1:0]) 2'b00: ppu_ciram_a10 <= 0; 2'b01: ppu_ciram_a10 <= 1; 2'b10: ppu_ciram_a10 <= ppu_addr_in[10]; // verical mirroring 2'b11: ppu_ciram_a10 <= ppu_addr_in[11]; // horizontal mirroring endcase end // Process for register writes triggered on falling edge of m2 always @(negedge m2) begin if (cpu_rw == 1'b1) begin reading <= 1'b1; end else begin if (reading == 1'b1 && romsel == 1'b0) begin reading <= 1'b0; if (cpu_D7 == 1'b1) begin bit_counter <= 2'b00; bit_commit <= 1'b0; control[3:2] <= 2'b11; end else if (bit_commit == 1'b1) begin bit_counter <= 2'b00; bit_commit <= 1'b0; case ({cpu_A14, cpu_A13}) 2'b00: control <= {cpu_D0, shift}; 2'b01: chr_bank_0 <= {cpu_D0, shift}; 2'b10: chr_bank_1 <= {cpu_D0, shift}; 2'b11: prg_bank <= {cpu_D0, shift}; endcase end else begin case (bit_counter) 2'b00: begin shift[0] <= cpu_D0; bit_counter <= 2'b01; end 2'b01: begin shift[1] <= cpu_D0; bit_counter <= 2'b10; end 2'b10: begin shift[2] <= cpu_D0; bit_counter <= 2'b11; end 2'b11: begin shift[3] <= cpu_D0; bit_commit <= 1'b1; end endcase end end end end endmodule --- Конец кода --- |
| Talking_Sword:
--- Цитата: supremacy от 26 Май 2025, 09:50:13 ---Приставка может писать не только в prg ram но и во внутреннюю память, и тебе не нужно менять значения на защёлке, когда запись происходит во внутреннюю память приставки, поэтому /romsel тоже нужно учитывать --- Конец цитаты --- А, понял! Что-то я сразу не сообразил, что R/W вообще для всего адресного пространства процессора. У меня попутно возник вопрос немного не по теме - а если вдруг понадобится использовать 74xx161 в картридже Mega Drive, то там надо будет соеденить выводы 2 и 9 и подключить к /TIME? Еще вопрос - есть ли какие-то недостатки у инвертера на транзисторе, как в схеме картриджа Atari 2600, или "ИЛИ" на диодах перед микросхемами? И еще, может ли кто-нибудь объяснить схему вот этого картриджа? Мне не совсем понятно, зачем нужна первая половинка 74HC139? Та, к которой подходит M2 и /ROMSEL. С второй все понятно (дешифрация адреса $6000-$7FFF). И зачем нужна цепь из резистора, диода и конденсатора между 74HC139 и 74HC174? |
| max5775:
--- Цитата: JRBVZ от 26 Май 2025, 18:29:56 ---max5775, я наконец-то добил реализацию ММС1 на EPM3064 ^_^ Во всяком случае у меня чип и дейл работает, с wram еще не пробовал. М2 зацепил на 37 ногу Альтеры (Global Clock), romsel на 40, остальные на усмотрение. --- Конец цитаты --- Круто, правда мне уже не особо и нужно, но может кому-то пригодится. |
| supremacy:
--- Цитата: Talking_Sword от 26 Май 2025, 23:07:22 ---И еще, может ли кто-нибудь объяснить схему вот этого картриджа? --- Конец цитаты --- Это классическая схема декодирования адреса для подключения PRG RAM. M2 нужен чтобы знать что адрес на шине выставлен, romsel что выбрана память картриджа. Можешь почитать https://www.nesdev.org/wiki/PRG_RAM_circuit --- Цитата: Talking_Sword от 26 Май 2025, 23:07:22 ---И зачем нужна цепь из резистора, диода и конденсатора между 74HC139 и 74HC174? --- Конец цитаты --- Это rc цепочка чтобы сделать задержку сигнала. Не знаю зачем именно диод, возможно просто схема оригинального картриджа повторена. --- Цитата: Talking_Sword от 26 Май 2025, 23:07:22 ---есть ли какие-то недостатки у инвертера на транзисторе --- Конец цитаты --- нет, просто все эти диоды и транзисторы вместо логики это немножко old school :) |
| Narn:
В схеме маппера 87, была изменена защёлка с hc74 на hc174, добавлены необходимые биты данных для получения маппер 140. RC-цепочка оставлена без изменений. Насколько помню, диоды для более резких фронтов и спадов уровней. Диоды и транзисторы порой намного дешевле одного дополнительного корпуса микросхемы. И ничего в этом нет плохого, существует много схем дешифраторов адресов на диодах. Все зависит от проектировщика схемы какой либо. |
| Rumata:
Не только дешевле, но и компактней. Это сейчас есть всякие 74HC1G / 2G. А так ради одного логического элемента впихивать DIP-14 достаточно накладно |
| Talking_Sword:
--- Цитата: supremacy от 27 Май 2025, 21:44:41 ---romsel что выбрана память картриджа. --- Конец цитаты --- Кажется до меня начинает доходить. Может /ROMSEL наоборот, чтобы знать, что память картриджа НЕ выбрана? Я сейчас сообразил, на разъеме картриджа ведь нет A15. Вроде бы, если осуществлять дешифрацию только по A13-14, то дешифратор будет "откликаться" и на E000-FFFF, если я правильно все представил. --- Цитата: supremacy от 27 Май 2025, 21:44:41 ---Это rc цепочка чтобы сделать задержку сигнала. Не знаю зачем именно диод, возможно просто схема оригинального картриджа повторена. --- Конец цитаты --- Для чего нужна задержка? |
| supremacy:
--- Цитата: Talking_Sword от 28 Май 2025, 00:33:10 ---чтобы знать, что память картриджа НЕ выбрана? Я сейчас сообразил, на разъеме картриджа ведь нет A15 --- Конец цитаты --- Да, romsel это комбинация A15 и m2. И, по сути, он нам для того чтобы знать A15 и нужен. --- Цитата: Talking_Sword от 28 Май 2025, 00:33:10 ---Для чего нужна задержка? --- Конец цитаты --- По фронту сигнала срабатывает clk на 74174, но бывает так что на шине данных не успели выставится значения, а clk уже прошёл. Вот и ставят задержку чтобы сместить сигнал по времени относительно остальных. |
| Narn:
--- Цитата: Talking_Sword от 28 Май 2025, 00:33:10 --- Я сейчас сообразил, на разъеме картриджа ведь нет A15. Вроде бы, если осуществлять дешифрацию только по A13-14, то дешифратор будет "откликаться" и на E000-FFFF, если я правильно все представил.Для чего нужна задержка? --- Конец цитаты --- Ранее на страницах форума кто-то писал: "на картридже нет адреса А15, вместо него выведен сигнал /ROMSEL. Этот сигнал формируется как функция NAND между A15 и M2. Что это даёт? Экономию на корпусе в картридже: ведь тогда не нужно будет вставлять в картридж этот элемент, чтобы увязать A15 и M2, а выход ROM напрямую подключить. А потом пришла эра мапперов и понадобилась адресация 6000H-7FFFH. А для этого надо "восстановить" А15. Не проблема, его можно восстановить из /ROMSEL, ведь если строб M2/F2 активен, а /ROMSEL нет то это обращение к нижней половине(6000H-7FFFH). Но есть нюанс: M2/F2 идёт напрямую, а у /ROMSEL задержка на 1 корпус. И опаздывание /ROMSEL вызовёт ложное срабатывание, от маленькой иголки до вполне ощутимого импульса для быстродействующей микросхемы. И чем медленнее 139 дешифратор, тем больше эта иголка. И вот тут M2/F2 через дополнительный буфер может работать как дополнительная задержка этого сигнала и как следствие - выравнивание сигналов. У меня не было проблем работы этого маппера 140 с RC -цепочкой, на 4 консолях. |
| mutabor:
--- Цитата: Narn от 28 Май 2025, 08:04:52 ---надо "восстановить" А15. Не проблема --- Конец цитаты --- Если бы. На самом деле ещё какая проблема. Дело в том, что нормальные адреса выставляются сильно заранее, а при активном M2 актуальные данные уже должны быть на шине. По этому, для того чтобы нормально реализовать дешифровку обращения к нижней половине адресного пространства приходится делать адские извраты. А иначе работоспособность сильно зависит от консоли и погоды на Марсе. Можете посмотреть как это сделано в официальном MMC1 (его схема отреверсина и опубликована) - там цепочка из штук 30 инверторов с отводами от разных точек. Ну и память PRG RAM должна быть гораздо быстрее, чем при нормальной работе шины - ведь нужно успеть уложиться в эти сильно урезанные тайминги. Ну и я снимал осциллограммы что происходит на шине при таких обращениях и как реагируют разные мапперы. А еще прикол в том, что хотя на NES поставили 72 контактный разъем картриджа, на A15 опять зажопились. |
| Xabib2302:
Доброе время суток. Найдется у кого-нибудь печатные платы под разные мапперы для самостоятельной сборки кариков? |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |