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

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