Чтoбы примерно представить, что из себя это должно представлять, вот примерный эскиз узла под Z80.
Три элемента «Исключающее ИЛИ» определяет именно код префикса - «mov b,b/c,c/d,d/e,e/h,h/l,l/a,a»…
По сигналу СБРОС JK-триггер выбирает режим «BIOS».
Если происходит переход на адрес FF00…FFFF, JK-триггер переключается между Приложением и БСВВ.
Для БСВВ память представляется следующим образом:
Код:
┌───────────────────────┐ ┌───────────────────────┐ ┌───────────────────────┐
│Чтение команды M1-цикла│ │Чтение данных из памяти│ │Запись данных в память │
╞═══════════════════════╡FFFF╞═══════════════════════╡ ╞═══════════════════════╡
│ Триггер │ │ Страница │ │ Страница │
│ RAM «B/A» │ │ RAM «B» │ │ RAM «D» │
├───────────────────────┤FF00├───────────────────────┤ ├───────────────────────┤
│ Страница │ │ Страница │ │ Страница │
│ RAM «B» │ │ RAM «B» │ │ RAM «D» │
└───────────────────────┘0000└───────────────────────┘ └───────────────────────┘
Для прикладного кода она не так сильно отличается:
Код:
┌───────────────────────┐ ┌───────────────────────┐ ┌───────────────────────┐
│Чтение команды M1-цикла│ │Чтение данных из памяти│ │Запись данных в память │
╞═══════════════════════╡FFFF╞═══════════════════════╡ ╞═══════════════════════╡
│ Триггер │ │ Страница │ │ Страница │
│ RAM «A/B» │ │ RAM «A» │ │ RAM «D» │
├───────────────────────┤FF00├───────────────────────┤ ├───────────────────────┤
│ Страница │ │ Страница │ │ Страница │
│ RAM «A» │ │ RAM «A» │ │ RAM «D» │
└───────────────────────┘0000└───────────────────────┘ └───────────────────────┘
Под действием одного из префиксов память для БСВВ и приложения частично меняется:
Код:
┌───────────────────────┐ ┌───────────────────────┐ ┌───────────────────────┐
│Чтение команды M1-цикла│ │Чтение данных из памяти│ │Запись данных в память │
╞═══════════════════════╡FFFF╞═══════════════════════╡ ╞═══════════════════════╡
│ Триггер │ │ Страница │ │ Страница │
│ RAM «A/B» │ │ RAM «D» │ │ RAM «A» │
├───────────────────────┤FF00├───────────────────────┤ ├───────────────────────┤
│ Страница │ │ Страница │ │ Страница │
│ RAM «A»/«B» │ │ RAM «D» │ │ RAM «A»/«B» │
└───────────────────────┘0000└───────────────────────┘ └───────────────────────┘
(В схеме пока не реализовано…)
Здесь:- «Application»: Пространство приложения
- «BIOS»: Пространство БСВВ
- «Data»: Область Данных
Где «A»/«B»/«D» - не просто регистры переключения 64 Кб, а комплекс регистров для переключения регионов по 16 Кб из 1 Мб памяти…
(Аналогично примерно как «Защищённый Режим» x86 с Таблицей Дескрипторов…
Пока я точно не знаю, годна ли такая модель памяти.
Прежде всего, сложность вызывает стек, так как при переключении страниц область стека становится недоступна между режимами…
Есть ещё идея изъять у процессора команду «lxi sp,a16», так как она используется крайне редко и её можно заменить на «sphl». А аппаратно код 31 использовать для других целей…