Скрещиваем Денди и Тостер или Dentoaster своими руками. Как это сделано, как это работает, как это устроено Игровая приставка денди своими руками

Скрещиваем Денди и Тостер или Dentoaster своими руками. Как это сделано, как это работает, как это устроено Игровая приставка денди своими руками

Сначала я и не думал писать статью на эту тему, но похоже, что это уже часть целого цикла статей на Денди-тематику. И да, на этот раз речь в первую очередь именно про отечественную Денди, а не про оригинальные консоли - Famicom или NES. Просто я делал устройство в подарок одному человеку, который снимает очень интересные видеоролики про Денди, и ориентировался на совместимость именно с этим клоном.

Дело в том, что и для Famicom, и для NES выходили самые разные аксессуары: 3D очки, клавиатуры, роботы, считыватели штрих-кодов, всякие игровые контроллеры и очень многое другое . До нас же дошёл только световой пистолет. Передо мной стояла задача собрать устройство, которое совмещало бы в себе разветвитель на четыре игрока (да, были такие игры) и Arkanoid-контроллер.

Порты ввода-вывода

Прежде всего стоит рассказать, как же работают с джойстиками игровыми контроллерами Famicom, NES и Dendy, и чем же они отличаются в этом плане.

С точки зрения игр порты ввода-вывода представляют из себя два регистра с адресами $4016 и $4017 , которые ассоциированы соответственно с двумя портами, куда всё и подключается. Но на стандартных контроллерах для чтения данных используется только один провод - D0 , данные с которого соответственно доступны через младший (нулевой) бит в каждом из регистров: $4016.0 и $4017.0 . Аналогично используется один провод на запись, его обычно называют STROBE (или LATCH ), который сбрасывает счётчик внутри геймпада, и который доступен через запись в $4016.0 (да, для обоих контроллеров он общий).

Проще говоря, чтобы получить состояние кнопок на первом контроллере надо сначала записать 1 в $4016.0 , сразу же записать туда же 0, сбросив таким образом счётчик, а потом прочитать $4016 и $4017 восемь раз (для каждой из кнопок), получая данные о кнопках из младшего бита. Но для чего же остальные биты в этих регистрах, куда идут эти линии? Рассмотрим порт контроллера у NES:

Да, на него на самом деле идут D3 и D4 ! Именно они и доступны через $4016.3 , $4016.4 у первого порта и $4017.3 , $4017.4 у второго, и именно они используются для нестандартных контроллеров.

Что же касается его японского собрата - Famicom, там нет этих портов, да и сами игровые контроллеры не отсоединяются от консоли, но у него есть порт расширения, который представляет из себя разъём DB-15.

Знакомо выглядит, правда? Да, когда китайцы проектировали нашу Денди (я сомневаюсь, что её проектировали у нас), и им нужно было сделать отсоединяющиеся контроллеры, они решили взять за основу именно порт расширения, ведь в нём есть контакты для второго контроллера, и он на Famicom расположен чуть правее центра. Им тут даже распиновку менять не пришлось. Что же касается первого контроллера, они взяли тот же DB-15, расположили его слева и поменять распиновку так, чтобы можно было подключать первый контроллер. И только его.

Сравните сами передние порты у Famicom и у нашей Денди:

Вот такая вот странная история этих пятнадцатипиновых разъёмов у геймпадов, которые используются в нашей стране.

Но давайте посмотрим, что же выведено на этот порт расширения у Famicom?


(скриншот с сайта wiki.nesdev.com)

Да, на него идут ещё $4016.1 (на ввод), $4017.0-4 (на ввод), $4017.0-2 (на вывод), внешнее прерывание и даже звук! Я был очень приятно удивлён, когда разобрал Денди и увидел, что всё это есть и там:

Правда, не во всех моделях, как выяснилось позже. Но если это есть, значит есть и полная совместимость с аксессуарами для Famicom, и их могут использовать соответствующие японские игры. Но напомню, что Денди - это очень странная смесь NES и Famicom, PAL и NTSC. Пираты выпускали для неё и японские, и американские игры, которые по сути на 100% совместимы, если не брать в рассчёт эти аксессуары и разный формат картриджей.

Итого: в некоторых Денди есть все те же выводы, что и на Фамикоме, которые при этом включают в себя часть выводов доступных на NES. Отсутствует доступ к $4016.3 и $4016.4 , но они используются крайне редко. В виде таблички для наглядности:

Принцип работы аксессуаров

Американский разветвитель на четыре игрока для NES называется Four Score представляет из себя простой набор сдвиговых регистров. Т.е. первые восемь чтений из $4016.0 дают данные из первого контроллера, а вторые восемь - из третьего. Аналогично $4017.0 даёт данные о втором и четвёртом контроллерах. Помимо этого при продолжении чтения устройство выдаёт свою сигнатуру, с помощью которой игра определяет, что подключен именно Four Score , а не что-то ещё. Получается, что такое устройство можно собрать из шести сдвиговых регистров (4021 или 74165), и оно будет работать на любой Денди, ведь для него не требуются дополнительные линии данных. Само собой, только с американскими играми, которые выходили для NES.

Японский аналог для Famicom устроен гораздо проще. Третий и четвёртый контроллеры подключаются напрямую в порт расширения и доступны через $4016.1 и $4017.1 . Соответственно для такого переходника нам уже нужен полноценный порт расширения у Денди, иначе поиграть вчетвером в японские игры не получится.

Arkanoid-контроллер, как ясно из названия, используется для игры Arkanoid и представляет из себя ручку-крутилку и одну кнопку. Внутри же это аналого-цифровой преобразователь и сдвиговый регистр, который так же последовательно выдаёт положение ручки. Разница между японской и американской версией только в способе подключения. Японская версия игры читает положение ручки и состояние кнопки из $4016.1 и $4017.1 , а американская версия из $4016.3 и $4016.4 соответственно. Получается, что для японского Арканоида нужен полноценный порт расширения, а для американского подойдёт любая денди, где работает световой пистолет (он использует те же выводы).

Создание своего аксессуара

Хотя сами по себе вышеперечисленные устройства имеют простую схему и собираются из простейших логических компонентов, для сердца устройства типа «всё в одном» я решил использовать ПЛИС. Тем более мне было высказано пожелание сделать там ещё и простейший переключатель-свитч, а мне хотелось сделать возможность менять местами кнопки A и B. Сначала я выбрал Altera EPM3064ATC100 , но вскоре выяснилось, что 64 макроячейки мне не хватит, и выбор пал на EPM3128ATC100 , где уже 128 макроячеек.

Если уж на то пошло, я решил совсем не мелочиться и поставить в устройство ещё и какой-то экран, на котором показывались бы текущий режим и меню с настройками, к тому же у меня давно валялся без дела один знакосинтезирующий «16x2» дисплей. Вот для работы с ним уже нужен микроконтроллер, и я выбрал ATMEGA16 .

Мне всегда было сложнее всего придать устройству приятный внешний вид. Всё-таки я программист, а не дизайнер, но именно при изготовлении устройства в подарок хотелось сделать его максимально красивым и удобным. Тем более это чуть ли не единственный способ как-то показать другим своё произведение искусства: фотографии и видео - это не то, по готовым схемам и 3D моделькам такие вещи воссоздают единицы, серийное производство наладить тяжело, а вот подарок - самое то.

Итак, требования к внешнему виду были такие: четыре порта для стандартных DB-15 контроллеров от Денди, четыре кнопки для их выбора и настройки, кнопка «режим», кнопка «настройки», удобная ручка для Arkanoid и кнопка для него же, которые должны располагаться достаточно удобно и не мешаться. Помимо этого хотелось сделать, чтобы активные порты подсвечивались светодиодами и как-то интуитивно связывались с соответствующими кнопками, логичнее всего при этом расположить разъёмы в ряд, но эти дурацкие DB-15 слишком огромные для этого. Помимо всего устройство должно удобно лежать в руках, ведь оно само по себе игровой контроллер для Arkanoid. В итоге я пришёл примерно к такому виду:

Кнопки в ряд, порты друг над другом, ручка сбоку, кнопка для Arkanoid сзади слева.

Получается, что места внутри достаточно много. Поэтому ПЛИС с разъёмами под провода и гнёзда я решил вынести на одну плату, а микроконтроллер с экраном и кнопками - на другую. Соединяются они при этом простейшим последовательным интерфейсом.

Плата с ПЛИС (первая версия):

Вторая плата:

Код для ПЛИС я писал на Verilog. Для каждого режима он получается достаточно простым. В первую очередь для многих из них нам надо считать обращения к каждому из портов, т.е. импульсы на проводе clock:

Reg counter1; reg counter2; always @ (posedge strobe_in, posedge clock1_in) begin if (strobe_in) counter1 <= 1; else if (counter1 < 31) counter1 <= counter1 + 1; end always @ (posedge strobe_in, posedge clock2_in) begin if (strobe_in) counter2 <= 1; else if (counter2 < 31) counter2 <= counter2 + 1; end
(простите, хабр не умеет подсвечивать Verilog)

Где strobe_in - это strobe (один на оба порта), а clock1_in и clock2_in - это соответственно clock на каждом из портов. Внутри консоли стоит логика: clock = R/W nand (адрес == $4016/$4017), т.е. на clock логический ноль, когда консоль читает данные по соответствующему адресу.

Режим имитации американского разветвителя на четверых игроков выглядит так:
always @ (*) begin // Strobe соединяем напрямую - входы с выходами assign strobe_out = strobe_in; assign strobe_out = strobe_in; assign strobe_out = strobe_in; assign strobe_out = strobe_in; // Дёргаем clock у каждого геймпада в зависимости от того, в который раз читает данные консоль clock_out <= (counter1 <= 8) ? clock1_in: 1; clock_out <= (counter2 <= 8) ? clock2_in: 1; clock_out <= (counter1 > 8 && counter1 <= 16) ? clock1_in: 1; clock_out <= (counter2 > 8 && counter2 <= 16) ? clock2_in: 1; if (counter1 <= 8) // Первый контроллер joy1_data_out <= joy_data; else if (counter1 <= 16) // Третий контроллер joy1_data_out <= joy_data; // Сигнатура else if (counter1 == 20) joy1_data_out <= 0; else joy1_data_out <= 1; // Второй контроллер if (counter2 <= 8) joy2_data_out <= joy_data; // Четвёртый контроллер else if (counter2 <= 16) joy2_data_out <= joy_data; // Сигнатура else if (counter2 == 19) joy2_data_out <= 0; else joy2_data_out <= 1; // Неиспользуемые выводы оставляем в высокоимпедансном состоянии, они подтягиваются к VCC внутри самой консоли joy1_data_out <= 1"bZ; joy2_data_out <= 4"bZZZZ; end

В режиме японского же разветвителя на четверых нужно просто соединить входы с выходами напрямую:
always @ (*) begin clock_out <= clock1_in; clock_out <= clock2_in; clock_out <= clock1_in; clock_out <= clock2_in; joy1_data_out <= joy_data; joy2_data_out <= joy_data; joy1_data_out <= joy_data; joy2_data_out <= joy_data; // Неиспользуемые выводы оставляем в высокоимпедансном состоянии, они подтягиваются к VCC внутри самой консоли joy2_data_out <= 3"bZZZ; end

Самым сложным оказалось сделать возможность менять местами кнопки A и B, ведь считываются они последовательно, т.е. нужно заранее знать значение B, когда консоль запрашивает A, но оно выдаётся как раз только после A. Сначала я думал как-то ускоренно считывать данные с контроллера, используя какой-то внешний тактовый генератор, но в итоге решил просто брать значение от предыдущего считывания. Это даёт задержку, но она абсолютно незаметна. Тем более игры обычно читают состояние кнопок по несколько раз подряд.

Само собой, все эти режимы и настройки надо как-то задавать. Для этого я определил 12-битный регистр control , данные в который записываются через последовательное соединение, с дополнительным битом для проверки чётности:
reg control; reg control_parity; reg control_receiver; reg control_counter; always @ (posedge control_strobe, posedge control_clock) begin if (control_strobe) begin control_counter = 0; control_parity = 0; end else begin if (control_counter <= 11) begin control_receiver = control_data; control_parity = control_parity ^ control_data; end; if (control_counter < 12) control_counter = control_counter + 1; end end always @ (posedge strobe_in) begin if (control_counter == 12 && !control_parity) control = control_receiver; end

Соответственно со стороны микроконтроллера код (весьма грязный) выглядит вот так:
void control_send(uint16_t data) { set_bit(CTRL_PORT, CTRL_STROBE_PIN); // Strobe _delay_us(10); unset_bit(CTRL_PORT, CTRL_STROBE_PIN); // Strobe _delay_us(10); int b; char parity = 0; for (b = 0; b < 11; b++) { if (data & (1<

В остальном в коде микроконтроллера нет ничего особенного: работа с дисплеем на контроллере HD44780, кнопки, светодиоды, простенькая менюшка и работа с аналого-цифровой преобразователем для определения угла поворота ручки.

Я всё отладил, убедился в работоспособности и уже начал упихивать компоненты в корпус…

Но перед закрытием крышки решил проверить на оригинальном Famicom, ведь с ним устройство тоже будет использоваться. Увы, режимы, где нужно было считать импульсы clock, работали неправильно. С помощью логического анализатора выяснилось, что с линии данных идут наводки на линию clock:

Это помеха длительностью всего в несколько десятков наносекунд всё портит. Я решил посмотреть своим простеньким осциллографом, что же происходит на линии clock у Денди:

А вот что там же у Фамикома:

Видно, что эта линия подтянута к VCC, при чём очень сильно у Денди и весьма слабо у оригинального Фамикома. Я начал экспериментировать с обвеской. Вскоре стало ясно, что на результат лучше смотреть не логическим анализатором, а самой консолью. Пришлось вспоминать ассемблер для 6502 процессора, писать простенькую программу для тестирования и записать её на картридж:

На ней сразу стало всё наглядно видно, а заодно можно было протестировать сразу все режимы, не меняя игры. ROM можно скачать

Как сделать игровую приставку своими руками aslan wrote in November 8th, 2017

В общем-то идея сделать такое у меня появилась довольно давно, но только сейчас программное обеспечение для подобных поделок пришло в более-менее приличное состояние.
Прежде я пробовал сделать такое из x86 неттопа, но штука выходила довольно громоздкая и капризная. Потом продал неттоп и купил б/у Android TV Box. Это куда компактнее и легче, но заставить эмулятор RetroArch корректно работать на Андроиде мне так и не удалось, там что ни сборка - сплошные баги.

Поэтому решено было собирать приставку на базе Raspberry Pi 3, благо уже есть готовые образы системы для этих целей, да и гибкость настройки просто шикарная.


Итак, нам понадобится:
- Raspberry Pi (подойдёт любая, я купил самую мощную, с запасом);
- Блок питания 5V 3A;
- Два USB джойстика;
- Корпус (можно использовать что угодно);
- Различные разъемы и крепеж (по вкусу);
- Клей (по вкусу, мне нравится двухкомпонентная эпоксидка).

Корпус я решил использовать от мертвой приставки, и на барахолке была найдена за пару баксов вот такая 16-битка, китайская копия SEGA Genesis 3.

Немало времени, усилий и изопропила ушло на то, чтобы смыть корявые надписи. Но так всяко лучше. К сожалению, на корпусе есть пару внушительных царапин, но пока оставил как есть.

Прикинул расположение элементов внутри корпуса. Как видите - купил блок разъёмов RCA и бесполезнейший в быту, но незаменимый для моих нужд переходник HDMI мама-папа. Он нужен, чтобы отодвинуть плату от края корпуса. А тут и приехала посылка с набором различных латунных стоек (на местном рынке они как-то нереально дорого стоят).

Срезал на пару миллиметров мягкий корпус переходника HDMI и выпилил прямоугольное отверстие в обоих половинках корпуса. Разместил стойки под плату и залил эпоксидкой, не забыв зачистить мелкой наждачкой места склейки.

Таким же манером выпилил круглые отверстия под тюльпаны и приклеил стойки. Страшновато было пилить, не так это и просто, сделать ровно.

Но всё получилось практически идеально! Я более чем доволен.

Двигаемся дальше! Вырезал кусочек макетной платы и закрепил на нём гнездо питания. Можно было бы и micro-usb вывести, но так каноничнее. Само собой, крепиться будет на такие же стойки.

Закрепил. Отлично. Куда приспособить большое круглое отверстие рядом с питанием - не придумал, изначально хотел туда вывести аналоговый сигнал, но решил, что тюльпаны универсальнее. Поэтому закрою его пластиковой заглушкой.

Подготовил плату и припаял два гнезда USB для джойстиков.

Закрепил на стойках в нужном месте корпуса. Но, само собой, разъемы по форме не совпадают с Сеговскими, и это мне очень не понравилось.

Поэтому перемычку между родными отверстиями я спилил, а внутрь вклеил выпиленную пластиковую фальшпанель. Немного не подошло по цвету, но это малозаметно.

Распаял проводами питание, USB-гнезда и аналоговые выходы. Кстати, не знаю, программная это фишка или аппаратная, но в Raspberry Pi 3 определение выхода (аналог/цифра) автоматическое, а вот в первой версии компьютера мне приходилось переключать вручную.

Время делать кнопки включения и сброса. Поскольку штатных кнопок для этих дел в Raspberry Pi не предусмотрено, а выключать, жестким образом отрубая питание, мне не хотелось, я решил подключить кнопки к контактам GPIO и прописать в автозагрузку скрипты для выключения и перезагрузки. Кнопку включения нужно вешать на строго определённые GPIO, чтобы по нажатию кнопки наша приставка не только выключалась, но и включалась.
А скрипты легко найти в Интернетах. Тут меня ждал неприятный сюрприз. Для включения/выключения нужна кнопка без фиксации, а родной выключатель в приставке был простым ползунком. Пришлось сделать возвратный механизм, а ползунок намазать силиконовой смазкой.

А вот и второй сюрприз: какой поставить выключатель? В итоге я просто вытащил из мертвого принтера переключатель с лапкой и изогнул лапку. Теперь при нажатии на ползунок лапка нажимает на переключатель. Отлично. Припаял на плату и закрепил на стойках.

Кнопочку сброса вытащил из того же принтера и закрепил на плате. Однако сама кнопка (на корпусе) упиралась в разъём кнопки питания, а он должен быть строго на 5 и 6 GPIO. Пришлось подрезать разъем. Можно было и припаять напрямую, но не хотелось.

Гнездо для картриджей закрыл сеткой, купленной на барахолке и покрашенной баллончиком в белый цвет. Пришлось изнутри подровнять корпус, но это несложно.
А тут подъехали джойстики в стиле Sega Saturn. Почему они? Потому что у них 6 кнопок и две кнопки сверху, то есть функционал без проблем покрывает NES, SNES и Sega Mega Drive. Нужно только настроить джойстик при первом включении, а потом поправить конфиги для каждого эмулятора и раскидать по папкам.

Сами джойстики по качеству на 3 из 5, сборка отличная, но невнятно нажимаются крестовины. Это я про Retrolink. Можно найти лицензионные USB джойстики Sega, но цены на них ОЧЕНЬ кусаются.

Собственно, готово! Остаётся включить, настроить джойстики и подключить Wi-Fi (понадобится клавиатура), а потом зайти через Total Commander в расшаренные папки устройства и закинуть туда любимые игры.

Вот такая картинка при подключении по RCA. Сразу напрашивается мысль сделать шрифты побольше.

А вот так вот получается, если подключить HDMI. Гораздо лучше. Но аналоговые выходы пригодятся, чтобы играть с друзьями на даче под пивко.

Оговорка: имеется небольшая задержка ввода (Input Lag), это заметил не только я, и телевизор тут ни при чем. В Интернете описаны способы снизить задержку, но это уже другая история.

И еще один неприятный минус - при подключении питания приставка включается сразу же, а не ждёт нажатия кнопки. Это я пока не придумал, как победить.
В планах еще заказать на плоттерной резке плёночные надписи на корпус. А в остальном я доволен, да и друзья тоже.

1.3. Принципиальная схема


В этом разделе приведены подробные принципиальные схемы процессорного модуля и пультов, а также рассмотрен вариант построения картриджа с программным обеспечением 8-разрядных игровых приставок DENDY.

1.3.1. Модуль процессора


В игровой приставке DENDY обычно имеются три платы:
* центрального процессора;
* выходных разъемов;
* ВЧ модулятора и стабилизатора.
Между собой платы соединены гибкими плоскими (ленточными) кабелями. Иногда встречаются варианты, выполненные на одной или двух печатных платах, однако это не влияет на схему приставки.
Первоначально игровые приставки содержали несколько микросхем различной степени интеграции, причем основными являлись микросхемы центрального процессора и видеопроцессора.
Развитие микроэлектроники привело к тому, что игровые приставки теперь включают только БИС типа UM6561 или ее аналог. В этой микросхеме на одном кристалле расположены центральный и графический процессоры, память и регистры ввода/ вывода.
Многие видеоприставки корейского производства вместо одной UM6561 используют несколько микросхем (обычно две или три). Однако принцип работы приставки и сигналы на выходных разъемах в таком случае не изменяются, поэтому данные варианты схемы здесь рассматриваться не будут.

Многокристальный вариант
Принципиальная схема первого варианта игровой приставки DENDY, изготовленного с применением нескольких микросхем различной степени интеграции, приведена на рис. 1.12.
Итак, основой игровой приставки является микросхема центрального процессора (IC1). Работа процессора синхронизируется внешним генератором тактовых импульсов, выполненным на транзисторах Q1 и Q2, частота которого стабилизирована кварцем X1 (21,251465 МГц).
Сигналы всех внутренних шин (адреса A0 - А15, данных DO - D7 и управления) игровой приставки выведены на разъем XS1, к которому подключается картридж. Шины данных (выводы IC1/21-28), адреса (выводы IС1/4-19) и управления (выводы IС1/31,34) соединяют центральный процессор (IC1) с микросхемой ОЗУ (IC3) и видеопроцессором (IC2).
Дешифратор адреса на микросхеме 74LS139 (IC8) вырабатывает сигналы, разрешающие другим микросхемам обмениваться данными с центральным процессором. На входы дешифратора поступают три старших разряда шины адреса А13 - А15 (выводы IС8/2,3,13) и сигнал М2 (вывод IC8/14). Если процессор работает с памятью, установленной в картридже, то сигнал ВЗ на выводе IC8/9 имеет низкий уровень. Когда обмен данными происходит с встроенным ОЗУ приставки (IC3), низкий уровень принимает сигнал АО на выводе IC8/4. Сигнал низкого уровня на выводе IC8/5 свидетельствует о том, что центральный процессор задействует микросхему видеопроцессора IC2.
На одном кристалле с центральным процессором расположены также звуковой процессор игровой приставки и схема дешифратора адреса портов ввода/вывода.


Выходные сигналы первого и второго аудио-каналов микшируются и поступают на выход AU1 (вывод IС1/1), а сигналы остальных каналов - на выход AU2 (вывод IC1/2). Полный сигнал звукового сопровождения образуется путем смешивания в схеме, выполненной на резисторах R8 - R12 и конденсаторе С7, а затем подается на выходной разъем игровой приставки и на вход модулятора, формирующего ВЧ сигнал.
На выводы IС1/39-37 передаются три разряда числа (D0, D1 и D2), записываемого в порт 4016h.

Каждый раз, когда процессор производит чтение из порта с адресом 4016h, па выходе СК1 (вывод IС1 /36) появляется импульс низкого уровня. А если процессор читает из порта с адресом 4017h, аналогичный импульс формируется на выходе СК2 (вывод IC1/35).
Выходные сигналы игровых пультов и светового пистолета передаются на шину данных через два буферных регистра IC6 и IC7 (типа 74НС368).
Микросхема видеопроцессора IC2 совместно с микросхемой видеопамяти IC4 выдает полный


видеосигнал. IC2 и IC4 связаны шинами адреса, данных и управления. Микросхема видеопамяти IC4 аналогична микросхеме основного ОЗУ.
Обратите внимание: в видеопроцессоре IC2 одни и те же выводы (IC2/31-37) применяются как шина данных и как шина адреса. Сначала сюда поступают младшие восемь бит адреса ячейки видеопамяти. При появлении сигнала низкого уровня на выходе ALE (вывод IC2/39) эти данные запоминаются в буферном регистре IC5 (74LS373). Затем на выходе ALE устанавливается напряжение высокого уровня, на выводах IC2/26-30 остаются старшие разряды адреса, а выводы IC2/31-37 используются как шина данных.
Сигналы шин видеопроцессора также выведены на разъем подключения картриджа XS1.
Полный видеосигнал с выхода VIDEO OUT видеопроцессора (вывод IC2/21) поступает через эмиттерный повторитель, выполненный на транзисторе Q3, на выходной разъем VIDEO OUT и на модулятор.
Каскад усиления видеосигнала в некоторых моделях может отсутствовать.

Теперь мы вкратце расскажем об основных отличиях от базовой схемы, присутствующих в других моделях. Все они касаются используемых разъемов и назначения отдельных выводов.
Существуют два основных варианта конструкции рассматриваемой игровой системы. Приставка NES оснащается 72-контактным разъемом для подключения картриджа, 48-контактным разъемом расширения и 7-контактными разъемами для подключения игровых пультов. Игровая приставка FAMICOM (DENDY) программно полностью совместима с приставкой NES, но использует 60-контактный разъем для подключения картриджа, 15-контактный разъем расширения и 9-контактные разъемы для подключения игровых пультов.
Разводка всех разъемов игровой приставки DENDY приведена на рис. 1.13а-в, а приставки NES - на рис. 1.13г-е.

Однокристальный вариант
Принципиальная схема однокристального варианта игровой приставки DENDY приведена на рис. 1.14.
Здесь функции центрального процессора, видеопроцессора и памяти выполняет одна БИС типа UM6561. Частоту внутреннего тактового генератора стабилизирует кварцевый резонатор XI (26,601712 МГц). Иногда схема тактового генерато¬ра содержит также транзистор.
Большинство выходных сигналов подаются непосредственно на разъем картриджа XS4. Часть сигналов поступает на разъемы для подключения игровых пультов XS1, XS2 и разъем расширения XS3.
Видео- и аудиосигналы передаются на выходные разъемы игровой приставки и на вход модулятора, иногда через транзисторные усилители.

Выходные разъемы
В приставке DENDY имеются два или три разъема для подключения пультов, светового пистолета и других периферийных устройств. Разъемы могут быть трех типов: 7-, 9- и 15-контактные.
Игровые пульты разрешается подсоединять к 7-1 или 9-контактному разъему для подключения пульта или к 15-контактному разъему расширения приставки, световой пистолет - только к 7- или 15-контактному разъему, другие устройства - к 15-контактному разъему.
Для подключения пультов служат два 9-контактных разъема и один 15-контактный разъем расширения. Картридж приставки DENDY использует 60-контактный разъем, расположенный сверху.
В игровой приставке NES для игровых пультов предназначены два 7-контактных разъема и один 48-контактный разъем расширения.
Для подключения картриджа в приставке NES применяется 72-контактный разъем, отличающийся от 60-контактного наличием дополнительных цепей, соединенных с разъемом расширения. На этот разъем выведены сигналы шин видеопроцессора и центрального процессора.
Внешний вид разъемов игровой приставки DENDY и назначение отдельных контактов приведены на рис. 1.13. Разъем расширения (рис. 1.136) рассматривается ниже, поскольку именно он наиболее

удобен для подключения различных дополнительных устройств.
На контакт 2 (AUDIO IN) подается звуковой сигнал, который смешивается с выходными сигналами звукового процессора.
Контакты 4-8 (J2 DO - J2 D4) представляют собой входы соответствующих разрядов порта второго джойстика. Коды сигналов с этих входов можно получить из порта 4017h командой LDA $4017.
Вход J1 D1 (контакт 13) подсоединен к разряду D1 порта 4016h.
При обращении центрального процессора к портам с адресами 4016h и 4017h на выходах CLK1 (контакт 14) и CLK2 (контакт 9) формируются кратковременные импульсы низкого уровня. На выходы OUT0 -OUT2 (контакты 10-12) передаются разряды DO -D2 слова, записываемого в порт 4 016h.
На вход IRQ (контакт 3) поступает сигнал запроса прерывания.

1.3.2. Картридж


Сменный модуль игровой приставки DENDY - картридж - содержит обычно две микросхемы ПЗУ или ОЗУ.
Одна микросхема ПЗУ подключается к видеопроцессору и хранит информацию знакогенераторов. Вместо ПЗУ знакогенераторов в некоторых картриджах используется микросхема статического ОЗУ. Другая микросхема ПЗУ с программным обеспечением подсоединяется к центральному процессору. Иногда на плате картриджа располагается дополнительное ОЗУ с питанием от литиевой батареи, которое предназначено для сохранения игровой ситуации.
Практически во всех картриджах, за исключением самых простых, имеется микросхема контроллера страниц памяти, выполняющая функцию программируемого дешифратора адреса.
Конструктивно картридж приставки DENDY представляет собой защитный пластмассовый корпус размерами 105x90x20 мм с ключом в виде двух скосов для правильной установки. В нем располагается печатная плата с 60-контактным разъемом и установленными бескорпусными микросхемами: ПЗУ, ОЗУ и контроллера страниц.
Принципиальная схема игрового картриджа без дополнительного ОЗУ с контроллером страниц типа МВС1 приведена на рис. 1.15.
Картридж состоит из двух микросхем ПЗУ (IC1 и IC2) и контроллера страниц памяти IC3. Микросхема IC1 (27С128) - это ПЗУ видеопроцессора! с записанными в нем знакогенераторами.
В адресное пространство видеопроцессора отдельные страницы ПЗУ помещаются по адресам 0000h - 1FFFh. Младшие разряды адреса поступают на микросхему IC1 непосредственно с соответствующих контактов разъема XS1. Старшие разряды


Рис. 1.15. Принципиальная схема картриджа игровой приставки DENDY

адреса VA12 и VA13 формирует микросхема контроллера страниц памяти IC3.
Выбор микросхемы ПЗУ происходит при наличии сигнала низкого уровня на входе CS (вывод IC1/20), подключенном к линии VA13 шины адреса видеопроцессора. Данные передаются с выходов ПЗУ на контакты разъема XS1.
Микросхема IC2 (KONAMI ROM 1Mbit) представляет собой масочное ПЗУ с записанной в нем программой емкостью 1 Мбит (128 Кб). Младшие разряды адреса А0 - А13 поступают с соответствующих контактов картриджа, а старшие разряды адреса А14 - А16 генерирует контроллер страниц памяти IC3. Сигнал CS, разрешающий работу ПЗУ IC2, также передается с микросхемы IC3.
IC3 является программируемым дешифратором адреса, формирующим старшие разряды адреса для микросхем ПЗУ IC1 и IC2. Она также вырабатывает сигнал VA10", от уровня которого зависит выбор режима отражения экранных страниц.
В рассматриваемом картридже часть выходов не подключена, поэтому возможности микросхемы используются не полностью.

1.3.3. Модулятор


Модулятор игровой приставки DENDY получает сигнал изображения от микросхемы видеопроцессора IC2 и звуковой сигнал от микросхемы центрального процессора IC1 и формирует полный телевизионный ВЧ сигнал в одном из метровых диапазонов. Схема модулятора не стандартизирована и определяется, как правило, фирмой-изготовителем. Однако принцип работы и состав основных узлов всегда одинаковы, так что изменения схемы не должны вызывать затруднений при ремонте.
Принципиальная схема одного из возможных вариантов ВЧ модулятора приведена на рис. 1.16.
Задающий ВЧ генератор выполнен на высокочастотном транзисторе Q2 (аналог транзистора
КТ368А). Он формирует несущую частоту одного из телевизионных каналов. Обычно рабочая частота генератора приставки находится в пределах 170- 230 МГц и определяется элементами L1, С8 - C11 1, R9 - R11. Регулировка частоты производится изменением индуктивности катушки L1.
Генератор, реализованный на транзисторе Q1 (аналог транзистора КТ3102), формирует поднесущую звука для полного телевизионного сигнала. Выходной сигнал генератора модулируется сигналом звуковой частоты, поступающим через цепь R4, С1 с входа AUDIO IN (контакт 4 разъема CN1).
В зависимости от страны-изготовителя приставки частота генератора составляет 5,5 или 6,5 МГц. Точная подстройка частоты сигнала осуществляется вращением сердечника трансформатора Т1.
Смеситель, выполненный на диодах D1, D2 (аналог диода КД503А), трансформаторе Т2 и транзисторе Q3, формирует полный ВЧ телевизионный сигнал. На вход смесителя поступает сигнал задающего генератора и низкочастотный видеосигнал с контакта 3 разъема CN1. С выхода смесителя ВЧ сигнал передается через согласующую цепь С15, L3 на выходной разъем RF OUT процессорного модуля.

1.3.4. Игровые пульты


Для игровой приставки DENDY существует около десяти различных видов игровых пультов. Однако наибольшее распространение получили стандартный игровой пульт, входящий в Комплект поставки, турбо-пульт с дополнительными кнопками и световой пистолет.
Ниже рассмотрены принципиальные схемы этих устройств, а также схема адаптера для одновременного подключения четырех пультов.

Стандартный игровой пульт
Стандартный игровой пульт для приставки DENDY состоит из подвижной крестовины и четырех

отдельных кнопок. Внутри пульта установлена бескорпусная микросхема регистра сдвига, являющаяся аналогом микросхемы HEF4021B. В случае отсутствия оригинальной микросхемы можно использовать практически любой 8-разрядный регистр сдвига.
Принципиальная схема стандартного пульта приведена на рис. 1.17.


Рис. 1.17. Принципиальная схема стандартного игрового пульта для приставки DENDY
При нажатии кнопки во время игры на соответствующий вход сдвигового регистра подается сигнал низкого уровня. Высокий уровень при разомкнутых кнопках обеспечивается соединением входных линий регистра с шиной питания +5 В через резисторы сопротивлением 10-68 кОм.
Состояния входов в регистре IC1запоминаются при поступлении импульса высокого уровня на вход РЕ микросхемы. После этого по отрицательному фронту сигнала на входе CLK (вывод IC1/10) происходит сдвиг содержимого регистра и выдача старшего разряда по шине D0
У второго игрового пульта, поставляемого вместе с приставкой, могут отсутствовать кнопки START и SELECT, однако на схему пульта и принцип его работы это не влияет.

Турбо-пульт
Принципиальная схема турбо-пульта для игровой приставки DENDY приведена на рис. 1.18.
Единственное отличие турбо-пульта от стандартного заключается в наличии дополнительного выхода Т6 Hz у микросхемы сдвигового регистра и двух дополнительных кнопок TURBO А и TURBO В, соединенных с этим выходом.
Внутренний генератор микросхемы пульта формирует на выходе Т последовательность импульсов частотой 6-10 Гц. Таким образом, нажатие и удерживание кнопки TURBO А аналогично нажатию и отпусканию кнопки А с интенсивностью 6 раз в секунду. Применение данных кнопок уменьшает износ клавиш пульта, поскольку кнопки А и В обычно используются в игре при стрельбе.


Рис. 1.18. Принципиальная схема турбо-пульта для игровой приставки DENDY

Адаптер для подключения четырех пультов
В некоторых играх могут участвовать до четырех игроков. В этом случае четыре игровых пульта параллельно подключаются к разъемам игровой приставки через специальный адаптер.
Принципиальная схема адаптера приведена на рис. 1.19.
Как видно из принципиальной схемы, основной задачей адаптера является обеспечение считывания информации с пультов 1 и 3 во время поступления первых восьми синхроимпульсов, и с пультов 2 и 4 -при следующих восьми.
Сигнал синхронизации, поданный по линии STRB, фиксирует состояние пультов в их внутренних регистрах и осуществляет начальную установку схем адаптера.
В течение первых восьми синхроимпульсов на выходах Q8 счетчиков IC1 и IC2 формируются сигналы низкого логического уровня, что обеспечивает поступление синхроимпульсов на пульты 1 и 3, а также передачу информации от этих пультов на входы игровой приставки.
После восьмого синхроимпульса, пересылаемого от игровой приставки при чтении из порта ввода/ вывода, на выходе Q8 соответствующей микросхемы (IC1 или IC2) появляется сигнал высокого логического уровня (лог. 1), что приводит к переключению коммутатора IC3 или IC4 и подсоединению к разъемам приставки пультов 2 или 4 соответственно.

Световой пистолет
На рис. 1.20 приведены возможные варианты принципиальной схемы светового пистолета игровой приставки DENDY.
В качестве светочувствительного элемента здесь используется фототранзистор. В самых дешевых приставках его иногда заменяют фотодиодом, что приводит к ухудшению чувствительности устройства.
Сигнал с выхода фотодиода через разделительный конденсатор С1 поступает на усилитель, выполненный на транзисторе Q1. С коллектора этого транзистора инвертированный сигнал через контакт 5 по цепи D4 передается в процессорный модуль игровой приставки.

Если пистолет направлен на телевизионный экран, то на выходе D4 формируется импульсный сигнал с частотой, равной периоду кадровой развертки.
Курок светового пистолета соединен с кнопкой с нормально замкнутыми контактами. Если курок отпущен, контакт разъема D3 соединен с общим проводом. При нажатии курка контакты размыкаются, и на входе D3 появляется сигнал высокого логического уровня, который обеспечивается за счет подключения этой цепи внутри игровой приставки через резистор 10-51 кОм к шине +5 В.

1.3.5. Блок питания


Блок питания игровой приставки DENDY состоит из внешнего сетевого адаптера и внутреннего стабилизатора.

Задачей внешнего сетевого адаптера является преобразование сетевого напряжения ~220 В в постоянное напряжение 9-12 В, которое передается на внутренний стабилизатор игровой приставки.
Принципиальная схема сетевого адаптера DENDY представлена на рис. 1.21.
При ремонте блока следует помнить, что на выходном разъеме центральный контакт соединен с общим проводом.

Нестабилизированное напряжение с адаптера поступает на внутренний стабилизатор игровой приставки, выполненный на микросхеме AN7805 или на транзисторе и расположенный в процессорном модуле. На выходе стабилизатора формируется постоянное напряжение +5 В.
Принципиальные схемы двух вариантов стабилизатора напряжения питания игровой приставки DENDY приведены на рис. 1.22 и в дополнительном описании не нуждаются.


Рис. 1.22. Принципиальные схемы стабилизатора напряжения питания игровой приставки DENDY

1.4. Характерные неисправности


Приставка не включается
Возможные причины: неисправность сетевого адаптера или внутреннего стабилизатора; короткое замыкание или обрыв цепей питания; неисправность картриджа; неисправность процессорного модуля.
1. Измерить выходное напряжение сетевого адаптера. Если оно превышает 9-12 В, заменить сетевой
адаптер. Практика показывает, что наиболее часто сбои вызваны диодами выпрямительного моста. Если вышел из строя трансформатор, подойдет любой источник питания с выходным напряжением 9-12 В и допустимым током нагрузки 500 мА.
2. Отключить от процессорного модуля пульты, картридж и модулятор, после чего проверить блоки игровой приставки на отсутствие коротких замыканий. Если короткое замыкание обнаружено, после его устранения проверить стабилизатор и установленный в нем низкоомный резистор. При возникновении перегрузки обычно происходит обрыв одного из печатных проводников в цепи питания, поэтому необходимо тщательно осмотреть платы и убедиться в целостности проводников.
З. .Если короткое замыкание отсутствует, проверить внутренний стабилизатор игровой приставки. Напряжение на выходе стабилизатора должно находиться в пределах 5±0,1 В; в противном случае в стабилизаторе, выполненном на микросхеме AN7805, следует заменить микросхему IC1 (аналог КР142Е-Н5А) и проверить конденсаторы С1 - С4. В стабилизаторе, реализованном на транзисторе, проверить транзистор Q1 (возможная замена - КТ815), стабилитрон D1 (возможная замена - КС156А) и резистор R1. Вместо резистора допустимо поставить предохранитель, который будет защищать стабилизатор от короткого замыкания.
4. Включить приставку без пультов, модулятора и картриджа. На выходном разъеме VIDEO OUT должен присутствовать видеосигнал. При подаче этого сигнала на НЧ вход телевизора на экране появится хаотическое изображение, состоящее из цветных точек и квадратов. Наличие выходного сигнала свидетельствует о неисправности в пультах или в модуляторе.
5. При отсутствии выходного сигнала проверить кварцевый генератор и транзисторный каскад усиления видеосигнала. Исправность кварцевого резонатора Х1 и транзисторов Q1 - Q3 позволяет сделать вывод о необходимости замены всего процессорного модуля.

Приставка работает нестабильно
Возможные причины: неисправность внешнего сетевого адаптера или внутреннего стабилизатора; загрязнение контактов разъема подключения картриджа.

1. Проверить выходное напряжение сетевого адаптера. Часто сбой возникает из-за малой нагрузочной способности адаптера, поставляемого в комплекте с игровой приставкой. Проблема решается I подключением более мощного адаптера.
2. Проверить надежность контактных соединений в разъемах приставки. Разъем подключения картриджа необходимо осмотреть особенно тщательно. Протереть контакты спиртом.
3. Проверить внутренний стабилизатор игровой приставки. Полезно установить микросхему или силовой транзистор стабилизатора на радиатор с до-статочной площадью рассеивания (около 10 см2).
4.Установить дополнительные конденсаторы в цепи питания, например номиналом 100,0 мкФ х 16 В и 0,01 мкФ на каждой из плат приставки и в картридже.

Не работает световой пистолет
Возможные причины: обрыв в соединительном кабеле или плохие контакты в разъеме; неисправность фотодиода или транзистора светового пистолета; неисправность контактов курка в световом пистолете.
Алгоритм поиска неисправности:
2. Проверить транзистор в световом пистолете и контакты под курком. Удостовериться в наличии замыкания контактов при нажатом курке, поскольку поломка, как правило, происходит в механической части пистолета.
3. Низкая чувствительность пистолета часто объясняется смещением фокусирующей линзы, установленной в стволе. В этом случае необходимо установить линзу на место и закрепить ее. Регулировка места крепления линзы позволяет улучшить характеристики даже работающего светового пистолета.
4.Исправность внутренних цепей светового пистолета свидетельствует о необходимости замены всего процессорного модуля игровой приставки.

Не работает пульт
Возможные причины: обрыв в соединительном кабеле или плохой контакт в разъеме; загрязнение кнопок; неисправность микросхемы пульта.
Алгоритм поиска неисправности:
1. Проверить целостность соединительного кабеля и надежность соединения в разъеме. В случае выхода из строя разъема заменить его вместе с ответной частью на любой 7-контактный разъем, имеющийся в наличии.
2. Проверить входные сигналы РЕ и STROBE. Отсутствие сигналов свидетельствует о необходимости замены центрального процессора.
3. Проверить выходной сигнал микросхемы, установленной в пульте. При отсутствии сигнала заменить пульт.

Не работают некоторые кнопки пульта

Возможные причины: загрязнение пульта или неисправность микросхемы.
Алгоритм поиска неисправности:
1. Протереть спиртом плату пульта и резиновую прокладку с токопроводящими площадками.
2. Если неисправны токопроводящие площадки на резиновой прокладке, восстановить их, наклеив кусочки фольги. Удобнее использовать фольгу от сигаретных пачек: она имеет бумажную основу, что обеспечивает лучшее приклеивание к резине.
3. В случае нарушения токопроводящего покрытия на плате восстановить его с помощью очищенного монтажного провода, припаянного к дорожкам печатной платы.
4. Если все контактные площадки исправны, необходимо заменить микросхему, установленную в пульте, или весь пульт.

Нет ВЧ сигнала на выходе модулятора
Возможные причины: нарушение настройки генератора, неисправность задающего генератора или смесителя.
Алгоритм поиска неисправности:
1. Убедиться, что неисправный элемент находится в схеме ВЧ модулятора, проверив наличие видео аудиосигналов на НЧ выходе. Отсутствие какого-либо из этих сигналов свидетельствует о поломке процессорного модуля.
2. Если нет ни звука, ни изображения, наиболее вероятна неисправность задающего генератора. Для проверки генератора следует измерить частоту выходного сигнала: она должна находиться в пределах 170-230 МГц. Отсутствие сигнала позволяет сделать вывод о необходимости замены транзистора Q2. В случае выхода частоты генератора за указанные границы необходимо проверить элементы LI, С8 -С11, R10, R11.
3. Убедившись в исправности задающего генератора, проверить смеситель (диоды D1, D2 и трансформатор Т2), а также согласующую цепь L2. С13, С14.
4.Отсутствие аудиосигнала при нормальном изображении свидетельствует о сбое генератора под-несущей звуковой частоты. В этом случае проверить соответствие частоты генератора ПЧ звука телевизионному стандарту (5,5 или 6,5 МГц) и при необходимости подстроить генератор вращением сердечника трансформатора Т1. При отсутствии сигнала на выходе генератора заменить транзистор Q1.

  • Игры и игровые приставки ,
  • Электроника для начинающих
    • Tutorial

    Первым делом читаем, как происходит взаимодействием с ним. А происходит оно через запись по определённым адресам, их 8 групп: $8000-$9FFE (чётные), $8001-$9FFF (нечётные), $A000-$BFFE (чётные), $A001-$BFFF (нечётные), $C000-$DFFE (чётные), $C001-$DFFF (нечётные), $E000-$FFFE (чётные) и $E001-$FFFF (нечётные). Запись по любому адресу внутри группы равнозначна. Видите закономерность? Регистр выбирается с помощью трёх адресных бит: A0 , A13 и A14 , остальные же значения не имеют.

    Попробуем же имитировать работу маппера с помощью ПЛИС. Код я пишу на языке Verilog. Он тут не подсвечивается, прошу прощения за это.
    Сначала описываем наши регистры, которые хранят текущее состояние:
    reg bank_select; reg prg_mode; reg chr_mode; reg r ; reg mirroring; reg ram_protect; reg irq_latch; reg irq_counter; reg a12_low_time; reg irq_reload; reg irq_reload_clear; reg irq_enabled;

    Описываем реакцию на запись по соответствующим адресам. Возрастающий сигнал /ROMSEL говорим о том что было обращение к памяти картриджа, т.е. по адресам $8000-$FFFF , нам надо реагировать именно в этот момент.
    always @ (posedge romsel) begin // Но только если это была запись if (cpu_rw_in == 0) begin // Рассматриваем состояние A14, A13 и A0, обновляем соответствующие регистры case ({cpu_addr_in, cpu_addr_in}) 3"b000: begin // $8000-$9FFE, even bank_select <= cpu_data_in; prg_mode <= cpu_data_in; chr_mode <= cpu_data_in; end 3"b001: r <= cpu_data_in; // $8001-$9FFF, odd 3"b010: mirroring <= cpu_data_in; // $A000-$BFFE, even 3"b011: ram_protect <= cpu_data_in; // $A001-$BFFF, odd 3"b100: irq_latch <= cpu_data_in; // $C000-$DFFE, even 3"b101: irq_reload <= 1; // $C001-$DFFF, odd 3"b110: irq_enabled <= 0; // $E000-$FFFE, even 3"b111: irq_enabled <= 1; // $E001-$FFFF, odd endcase end if (irq_reload_clear) irq_reload <= 0; end

    Теперь же опишем, какой должен выбираться банк при обращении к соответствующей части памяти в зависимости от наших регистров.
    Переключаются они в соответствии с такой таблицей:

    Где $8000 & #$40 - это у нас prg_mode, а -2 и -1 - это предпоследний и последний банк соответственно. Получается такой код:
    // PRG banking always @ (*) begin case ({cpu_addr_in, prg_mode}) // $8000-$9FFF 3"b000: cpu_addr_out <= r; 3"b001: cpu_addr_out <= 6"b111110; // Предпоследний банк // $A000-$BFFF 3"b010, 3"b011: cpu_addr_out <= r; // $C000-$DFFF 3"b100: cpu_addr_out <= 6"b111110; // Предпоследний банк 3"b101: cpu_addr_out <= r; // $E000-$FFFF - всегда является последним банком default: cpu_addr_out <= 6"b111111; endcase // A12 у MMC3 на выходе всегда как на входе, он идёт напрямую в память cpu_addr_out <= cpu_addr_in; end

    Теперь CHR. Там такая схема:

    Где $8000 & #$40 - это chr_mode. Получается так:
    // CHR banking always @ (*) begin if (ppu_addr_in == chr_mode) ppu_addr_out <= {r, ppu_addr_in}; else ppu_addr_out <= r]; // Максимальный размер CHR у MMC3 - 256 килобайт, поэтому A18 всегда 0. ppu_addr_out <= 0; end

    Режим зеркалирования описывается всего одной строкой. В зависимости от него мы замыкаем вывод картриджа CIRAM A10 либо на A10 , либо на A11 :
    assign ppu_ciram_a10 = mirroring ? ppu_addr_in : ppu_addr_in;

    Дальше сложнее. MMC3 умеет генерировать прерывания, когда на экране рисуется определённая строка. Это весьма полезно, и игры часто это используют. Строки на экране считаются с помощью обращений к A12 у PPU. При типичных настройках сигнал на A12 переходит из логического 0 в логическую 1 ровно один раз за строку, если не считать кратковременные переходы в 0. А их надо не считать, это всё немного усложняет:

    // Включаем прерывания только тогда, когда на A12 низкий уровень always @ (*) begin if (!irq_enabled) begin irq_ready = 0; irq <= 1"bZ; end else if (irq_enabled && !irq_value) irq_ready = 1; else if (irq_ready && irq_value) irq <= 1"b0; end // Сам счётчик always @ (posedge ppu_addr_in) begin if (a12_low_time == 3) // Время низкого уровня A12 должно быть не менее 3 циклов CPU begin if ((irq_reload && !irq_reload_clear) || (irq_counter == 0)) begin irq_counter = irq_latch; if (irq_reload) irq_reload_clear <= 1; end else irq_counter = irq_counter-1; if (irq_counter == 0 && irq_enabled) irq_value = 1; else irq_value = 0; end if (!irq_reload) irq_reload_clear <= 0; end // Время низкого уровня A12 должно быть не менее 3 циклов CPU always @ (posedge m2, posedge ppu_addr_in) begin if (ppu_addr_in) a12_low_time <= 0; else if (a12_low_time < 3) a12_low_time <= a12_low_time + 1; end

    Ах да, MMC3 поддерживает ещё подключение дополнительной оперативной памяти по адресу $6000-$7FFF ! Надо не забыть и это описать:
    assign cpu_wr_out = cpu_rw_in || ram_protect; assign cpu_rd_out = ~cpu_rw_in; assign cpu_sram_ce = !(cpu_addr_in && cpu_addr_in && m2 && romsel && ram_protect);

    Вот и всё, наш MMC3 готов! Полный код можно посмотреть тут.

    Сегодня расскажу вам как совместить две обычные вещи в один оригинальный подарок. В сети есть такой иностранный персонаж как AVGN, который занимается обзорами старых игровых приставок и игр к ним. Так вот есть у него довольно забавный агрегат, под названием Nintoaster. Представляет он собой приставку NES в корпусе тостера. Почесав репу, я подумал, а чем я хуже него и решил собрать подобный девайс себе. Но так как про NES у нас в стране в основном никто и слыхом не слыхивал, а все знали только тайваньско-китайский клон японского Famicom под названием Dendy. Поэтому аппарат решено было назвать Dentoaster.

    Все началось с поисков подходящего тостера на корпус. Через месяц ожидания на барахолке нашелся старый российский тостер и выглядел он вот так (фото с объявления).

    На дне тостера красовались характеристики агрегата, что сделан он в 1995 году и мощностью на 800 Ватт. Несмотря на свой почтенный возраст, тостер исправно выполнял свою основную функцию.

    А вот годы использования сказались на нем довольно плачевно. Аппарат был весь в нагаре и каплях масла. Благо средство для чистки газовых плит с нагаром и жиром справилась на ура. Фото всего этого безобразия увы не сделал, ибо сразу побежал его от этого дела отмывать. Зато есть фото поддона с крошками, которые все 18 использования тостера копились и присыхали там навсегда. То еще зрелище, но все так же решилось простым отмыванием.

    Ладно, корпус пока оставим и займемся изъятием лишних потрохов. Убираем нагревательные элементы вместе со слюдяной термоизоляцией и направляющие грили для хлеба.

    Теперь удаляем часть механизма опускания хлеба – две волнообразные металлические полоски. Благо все было на точечной сварке и отделилось довольно легко.

    Временно отвинчиваем контактную группу с таймером.

    И в сухом остатке получаем вот такую конструкцию.

    Очищаем контактную группу от пыли и отпаиваем остатки родных проводов.

    И привинчиваем ее к конструкции обратно.

    Левая и правая стенки потрохов были скреплены продольными планками, но конструкция ходила ходуном. Поэтому было решено спаять планки боковушками. Сначала снаружи.

    А потом и изнутри.

    Порывшись в закромах нашел вот такие миниатюрные петли, которые как нельзя кстати подошли ко всему этому делу.

    Временно прихватил петли на пайку и суперклей.

    А в качестве механизма возврата приделал пружинку.

    Вот так это выглядело после первых прикидок.

    Вот только цвет у тостера не подходящий, поэтому решено было его перекрасить.

    После перекраски стало выглядеть намного симпатичнее.

    Соответственно и заглушки было решено покрасить в тот же цвет.

    Панель под разъемы джойстиков и кнопки reset сделал из такой же заглушки.

    Отпиливаем от нее лишнее и размечаем будущие отверстия.

    И любым доступным способом проделываем их. Я пользовался дремелем и надфилями.

    А затем красим.

    В качестве декоративной части кнопки reset было решено пожертвовать единственным джоем, который у меня с 95 года остался. Все равно он уже свое отжил и половина кнопок не работала. Да и провода перепаивать лень было. Про саму же кнопку писать особо нечего, так как это просто китайская кнопка на замыкание, без фиксации положения. Такие например в китайские лазерные указки ставят.

    Короче приклеиваем на супреклей декоративную часть к кнопке.

    Из обрезков пластика и текстолита про помощи того же суперклея делаем импровизированное крепление для кнопки.

    И закрепляем всю конструкцию на положенном ей месте.

    В итоге получаем вот такой результат.

    Теперь разбираем нашу приставку.

    Потроха у новодела не чета старым консолям, но работаем с тем, что имеем. Хорошо видны контакты кнопок power и reset, к которым надо будет подпаяться.

    Временно отпаиваем шлейф от платы со стабилизатором напряжения и разъемами подключения кабелей.

    Закрепляем на термоклей плату с разъемами джойстиков и кнопками включения и reset. Родные кнопки решил не выпаивать, ибо они не мешались внутри корпуса.

    А плату с разъемом под картридж крепим сначала на винты (благо в родных боковушках тостера отверстия уже были), а потом закрепляем на “Полиморфус”.

    На те же термоклей и полиморфус крепим панель с разъемами и кнопкой. Вот так это безобразие выглядит снаружи.



    просмотров