Это вопрос, связанный с реализацией, но в общих чертах: прямой доступ к оборудованию через прерывания обычно ограничен ОС (в частности, ядром). Ваш код не будет иметь такого доступа ни в одной современной системе.Скорее, вы использовали бы специфичные для ОС API для доступа к оборудованию.
Короче говоря: настольные операционные системы не ведут себя как встроенные устройства с микроконтроллером.
Ввод пользователякак правило, обрабатывается в современных системах так называемым циклом событий .Ваше приложение делает что-то вроде этого, конкретная реализация варьируется в зависимости от ОС:
int main(int argc, char *argv[]) {
Event *e = NULL;
while (e = App::GetNextEvent()) {
switch (e->getType()) {
case E_MOUSEUP:
case E_RIGHTMOUSEDOWN:
case E_KEYDOWN:
// etc.
}
}
return EXIT_SUCCESS;
}
В этом примере App::GetNextEvent()
не занята ожиданием: оно просто сидит и ничего не делает до тех пор, пока ОС не сообщит внутренне, чтособытие наступило.Таким образом, постоянный опрос не требуется, и ОС может более эффективно распределять временные интервалы между процессами.
Однако ... NES не является современной системой;эмуляция одного означает, что вам нужно эмулировать прерывания и аппаратное обеспечение NES .Это очень большая задача, которая не имеет отношения к базовому оборудованию или прерываниям операционной системы хоста.Процессор 6502 в NES очень прост по современным стандартам;Существуют книги, в которых обсуждается эмуляция подобных простых процессоров, хотя названия меня сейчас избегают.
Помогает ли это?