Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C/C和x2B中的中断+;???它们是如何实现/编码的? 编程微控制器之前和有意尝试在某种程度上构建NES仿真器,我真的在想如何在C++中实现中断?_C++_Emulation_Interrupt - Fatal编程技术网

C/C和x2B中的中断+;???它们是如何实现/编码的? 编程微控制器之前和有意尝试在某种程度上构建NES仿真器,我真的在想如何在C++中实现中断?

C/C和x2B中的中断+;???它们是如何实现/编码的? 编程微控制器之前和有意尝试在某种程度上构建NES仿真器,我真的在想如何在C++中实现中断?,c++,emulation,interrupt,C++,Emulation,Interrupt,例如,当我对着麦克风说话或移动鼠标时,程序如何知道如何反应?它是否经常轮询这些端口 当模拟硬件设备的中断时(例如,对于NES模拟器),您必须不断轮询还是有其他方法来执行此操作?这是一个特定于实现的问题,但涉及面很广:通过中断直接访问硬件通常仅限于操作系统(特别是内核)您的代码在任何现代系统上都无法访问。相反,您应该使用特定于操作系统的API来访问硬件 简而言之:桌面操作系统的行为与嵌入式微控制设备不同。 在现代系统上,用户输入通常由事件循环来处理。您的应用程序执行以下操作,具体实现因操作系统而异

例如,当我对着麦克风说话或移动鼠标时,程序如何知道如何反应?它是否经常轮询这些端口


当模拟硬件设备的中断时(例如,对于NES模拟器),您必须不断轮询还是有其他方法来执行此操作?

这是一个特定于实现的问题,但涉及面很广:通过中断直接访问硬件通常仅限于操作系统(特别是内核)您的代码在任何现代系统上都无法访问。相反,您应该使用特定于操作系统的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处理器非常简单;有一些书讨论了如何模拟类似的简单处理器,尽管我现在不知道这些书的名字


这有帮助吗?

我自己还需要进一步研究,但谢谢你的指点!