Breaknes — эмулятор NES/Famicom/Dendy на уровне вентилей. Чипы эмулируются не «по поведению»: логические схемы, восстановленные с реальных кристаллов, повторены на C++, поэтому эмулированный 6502 ведёт себя так же, как настоящий, — те же вентили, те же триггеры, те же шины, те же особенности.
Что внутри
Репозиторий содержит сам эмулятор, симуляторы чипов на уровне вентилей, управляемый данными симулятор картриджных плат, конвертированную базу картриджей, юнит-тесты и набор инструментов. У эмулятора два фронтенда на общем нативном ядре: управляемое приложение WinForms и SDL2-порт, собираемый под Windows и Linux.
Структура репозитория
| Папка | Что внутри |
|---|---|
Breaknes/ | Сам эмулятор: управляемый GUI (Breaknes/Breaknes), SDL2-порт (Breaknes/BreaknesSDL) и общее нативное ядро BreaksCore. |
Chips/ | Симуляторы чипов на уровне вентилей: M6502Core (6502), APUSim (2A03/2A07 CPU+звук), PPUSim (2C02 PPU), MMC1. |
CartPcb/ | Функциональная симуляция картриджных PCB. Плата — это данные: JSON-документ с компонентами и соединениями, а не код на C++. |
Common/ | Общий код: BaseLogicLib (логические примитивы), BaseBoardLib (компоненты материнских плат: LS139, LS373, SRAM, RomChip…), JsonLib, SharpTools (C#-контролы отладчика). |
IO/ | Устройства ввода-вывода: контроллеры NES/Famicom/Dendy, виртуальные контроллеры, CD4021, UM6582. |
Nescartdb/ | Конвертированная база nescartdb (JSON) — опознаёт картридж по CRC32 дампов PRG/CHR. |
Tools/ | Утилиты (ассемблер, GUI-отладчик, PPU/APU-плееры, демо…). |
UnitTest/ | Юнит-тесты чипов и ядер. |
Wiki/ | Дизайн-документация — частично переиздана на этом сайте. |
Компоненты симуляции
- BreaksCore — нативное (C++) ядро: материнские платы (NES, Famicom), разводка чипов и debug-хаб для контроля сигналов и внутреннего состояния.
- M6502Core — процессорное ядро MOS 6502 на уровне вентилей.
- APUSim — вся микросхема CPU (2A03/2A07): ядро 6502 + звук APU.
- PPUSim — PPU (2C02/2C07) на уровне вентилей.
- MMC1 — чип-маппер MMC1.
- CartPcb — симуляция картриджных PCB: описания плат в JSON, чипы соединены сетями, картриджи опознаются по CRC из nescartdb.
- IO — устройства ввода-вывода для NES/Famicom/Dendy, виртуальные контроллеры и сопутствующие чипы.
Инструменты
| Инструмент | Что делает |
|---|---|
Breakasm | Максимально простой ассемблер 6502 (C++ и Python-порт). |
BreaksDebug | GUI для изучения ядра 6502: сигналы, регистры, память, дизассемблер. |
PPUPlayer | Проигрывает дампы регистров PPU, записанные в эмуляторе. |
APUPlayer | Проигрывает дампы регистров APU, записанные в эмуляторе. |
PpuPumpkin / ApuPumpkin | Демо профилирования скорости PPUSim / APUSim. |
SlooowPlaaayer | Проигрывает аудио, захваченное с медленных источников. |
SignalPlotDemo, FurryPlotDemo, InfernoColormap | Демо самодельных WinForms-контролов. |
DumpRegdump / NescartdbConvert | Python-скрипты: дамп regdump / конвертация nescartdb XML→JSON. |
Сборка
Windows: VS2026 — откройте Breaknes.sln и соберите. Требуется .NET 6.0 Desktop Runtime. Для минимальной сборки используйте SDL2-порт (Breaknes/BreaknesSDL).
Linux: обычный CMake-процесс (cmake .. + make в папке build/), на выходе — SDL2-бинарник.
Источник: Readme.md, Wiki/Readme.md · страница входит в сайт документации.