Breaking NES Wiki

Данный ресурс содержит исчерпывающую информацию по трём микросхемам : MOS 6502, Ricoh 2A03 и Ricoh 2C02.

Микросхемы 2A03 (APU) и 2С02 (PPU) являются основой игровой приставки Nintendo NES, Famicom и их многочисленных аналогов.

Поскольку процессор 6502 в немного "урезанном" варианте входит в состав микросхемы 2A03, он изучается отдельно.

Процессор 6502:
mos_6502ad_top.jpg

Микросхемы APU и PPU различных ревизий:
2701408_600px.jpg

Источник информации

Источником информации являются микрофотографии микросхем в высоком разрешении.

В то время микросхемы были очень простые и производились по технологии NMOS, с одним поверхностным слоем металла. Поэтому для получения векторных масок достаточно сделать два типа фотографий : фотографию поверхности с металлом и фотографию без металла. Обычно для снятия металла у старых микросхем применяют кипящую серную кислоту.

Микросхемы под микроскопом выглядят примерно вот так :
6502_die_shot.jpg apu_die_shot.jpg ppu_die_shot.jpg
(6502, APU и PPU соответственно)

После получения векторных масок на них производится поиск транзисторов, которые в итоге формируют логическую схему. Процесс создания векторных масок, рисование транзисторных и логических схем подробно освещён в моих стримах.

Структура и назначение вики

Все основные фото и видео-материалы вы можете найти на главном сайте проекта.

В функции вики входит подробное описание всех функциональных блоков микросхем, с результатами программной симуляции каждого блока. Тем самым мы постепенно заменяем раздел "Чтиво" с главного сайта, поскольку там не очень удобно было отслеживать изменения. А тут вы можете сразу узнать что новенького :-)

Вики разделена на 3 раздела, по количеству изучаемых микросхем. Через навигационное меню можно ознакомиться с основными функциональными блоками каждой микросхемы.

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

#define BIT(n)     ( (n) & 1 )    // вырезать все лишнее
int NOT(int a) { return (~a & 1); }       // НЕ
int NAND(int a, int b) { return ~((a & 1) & (b & 1)) & 1; }     // И-НЕ
int NOR(int a, int b) { return ~((a & 1) | (b & 1)) & 1; }      // ИЛИ-НЕ

Как обычно, для понимания материала необходимо знание микроэлектроники, программирования и туго набитый косячок :-) Приятного просмотра!

  • Показать исходный текст