Какой-то кусок силикона всё равно понадобится, т.к. при переключении задачи надо считывать текущее состояние регистров процессора и куда-то сохранять.
0. Работает задача T1, пришло время переключиться на T2.
1. Подсунули процессору другую (временную) память, в которой по адресу #0066 (обработчик NMI) лежит процедура сохранения всех регистров в известную область память (пусть она, скажем, кидает всё на стек).
2. Сгенерировали NMI
3. По состоянию M1 и шине адреса отследили когда процедура выполнилась до конца, переложили все значения регистров в удобное место.
4. Выполняем процедуру, восстанавливающую значение регистров для продолжения выполнения задачи T2.
5. Подсовываем процессору память процесса T2.
Всё, переключились.
В п.1 есть вероятность, что указатель стека смотрит на адреса, где находится сама процедура обработки NMI, и придется всё чуть усложнить, подсовывая процессору по M1 код процедуры, не храня его в ОЗУ. В принципе, можно и запись в память точно так же перехватывать, ничего не реальности не сохраняя.
И вот это описанное можно сделать, как мне кажется, только через микроконтроллер. Причем довольно быстрый - всё же ему предстоит заниматься мультиплексированием памяти, а запросы к ней идут с частотой порядка мегагерца.



Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 


