![]() |
|
![]() |
|
В связи с закрытием Google Code репозиторий переезжает на Github:
https://github.com/ogamespec/breaks/
Разработка проекта продолжается, но не так агрессивно, как раньше. В качестве целевой платформы окончательно выбран DotNet / C#
Из целей проекта были убраны тестирование ядра 6502 на фриварных эмуляторах (так как архитектура ядра не подходит ни для одного Open source эмулятора), а также собственный NSF player.
Завершена схема самой сложной части 6502 - рандомной логики и исполнительной логики (dispatch).
Схема работает в симуляторе и выполняет инструкции)
Следующий этап - проанализировать как 6502 производит управление нижней частью. Для этого нужно собрать данные какие он отправляет команды на каждом из циклов исполнения.
После чего можно объединить верхнюю часть с нижней и сделать полную симуляцию 6502.
Завершил разбор схемы обработки прерываний. Схема включает в себя все механизмы.
Вкратце принцип работы : входные сигналы /NMI, /IRQ, /RES поступают на входные триггеры.
Для обработки прерываний дополнительно требуется схема генерации 6 и 7 циклов (так как они не поступают с декодера) (контрольные сигналы BRK6E и BRK7). Причём контрольный сигнал BRK6E начинается во время PHI2 6-го цикла и заканчивается во время PHI1 7-го цикла. Сделано это для того, чтобы определить фронт (edge) сигнала /NMI.
Определением фронта /NMI занимается классическая схема edge detect на базе двух RS-триггеров.
Сигнал /RES дополнительно сохраняется на RESET FLIP/FLOP, так как он требуется для других схем рандомной логики (в частности для особого управления контактом R/W).
Факт прихода любого прерывания отражается на флаге B, выход которого (B_OUT) принудительно заставляет процессор выполнить инструкцию BRK (код операции 0x00). Таким образом разрабочтики унифицировали обработку всех прерываний.
Последняя небольшая схема формирует адрес (или вектор) прерывания (контрольные линии 0/ADL0, 0/ADL1 и 0/ADL2), которые управляют младшими 3 разрядами шины адреса.