Common — общие библиотеки

Общий код проекта: BaseLogicLib (логические примитивы), BaseBoardLib (компоненты материнских плат), JsonLib и SharpTools

Четыре библиотеки ниже — BaseLogicLib, BaseBoardLib, JsonLib и SharpTools — находятся в папке Common/ репозитория и содержат код, общий для всего проекта: BaseLogicLib предоставляет базовые логические примитивы, используемые в N-MOS чипах, BaseBoardLib содержит компоненты, которые встречаются на симулируемых материнских платах, JsonLib — универсальная библиотека для работы с JSON, а SharpTools собирает остальные общие инструменты проекта.

Базовая логика

Базовые логические примитивы, используемые в N-MOS чипах.

Принципы реализации похожи на SystemC, но без использования SystemC :)

Симуляция фронтов

В буквальном смысле фронт не симулируется (в смысле временного интервала).

Вместо этого используется подход со сравнением предыдущего значения CLK с текущим.

Для целей эмуляции (M6502Core, APUSim, PPUSim) этот приём не применяется, потому что большинство схем этих чипов сделано по NMOS-технологии с динамической логикой на защёлках (DLatch).

Если вдруг понадобится симулировать фронт, в библиотеке есть два вызова (IsPosedge и IsNegedge).

BaseBoardLib

Эта библиотека содержит компоненты, которые встречаются на симулируемых материнских платах.

Это не обязательно реальные чипы: это могут быть специальные отладочные компоненты, например Fake6502.

40H368 — привязка ввода-вывода

40H368

Массив элементов notif0 (в терминах Verilog), используемый для привязки портов ввода-вывода. Соединение внешних портов и CPU различается между Famicom/NES.

LS139 — «северный мост» Famicom/NES

LS139

Этот сдвоенный декодер используется для выбора адресного пространства интерфейса регистров PPU, внутренней S-RAM («Work RAM») или внешней ROM.

Отличительная особенность в том, что выход одной половины подаётся на этот же чип :-)

LS373 — защёлка адреса PPU VRAM

LS373

Используется для мультиплексирования шины адреса/данных PPU. «Запоминает» младшие 8 бит шины адреса PPU, когда PPU ALE=1.

SRAM — типичная S-RAM из 90-х

SRAM

Ну, тут всё просто.

JsonLib

Универсальная библиотека для работы с JSON.

SharpTools

Readme.md этой библиотеки — просто заглушка: кроме заголовка в нём нет содержимого.