Уровень 22: Конфликт на шине

Задание

Исправьте конфликт на шине данных: RAM и Gamepad одновременно выдают данные. Добавьте AddrDecoder и BusAND для гейтирования RAM.

Когда на шине данных встречаются два устройства (RAM и Gamepad), возникает КОНФЛИКТ: оба пытаются выдать данные одновременно.

Решение

AddrDecoder решает эту проблему: - Адреса 0–223 (0x00–0xDF) → RAM (RAM_SEL=1) - Адреса 224–255 (0xE0–0xFF) → I/O устройства (IO_SEL=1)

AddrDecoder выдаёт два сигнала: - RAM_SEL8 (bus8) — маска для данных RAM (0xFF когда RAM, 0x00 когда I/O) - IO_SEL (bit) — флаг обращения к порту ввода-вывода

Задачи: 1. BusConstant = 2 → PC.Inc. 2. ROM#1 → RAM.Addr. 3. ROM#1 → AddrDecoder.Addr (чтобы декодер знал, к чему обращается инструкция). 4. Подключите шину данных к ALU8.B: RAM.DataOut → BusAND.A, AddrDecoder.RAM_SEL8 → BusAND.B, затем BusAND.Q → BusOR, и далее к ALU8.B.

Этот каскад (RAM → BusAND → BusOR) маскирует данные RAM, когда адрес принадлежит I/O-устройству — разрешая конфликт на шине.