在 C/C++ 中创建应用程序中断

问题描述 投票:0回答:1

我正在写一个6502模拟器。我需要模拟中断。我将模拟一个 I/O 芯片,它轮询键盘,并中断模拟 CPU 来发送击键。

我在 Windows 上运行,并且知道 Windows 事件处理程序可以执行此操作,但我想以不依赖于操作系统的方式执行此操作。

我的直觉告诉我,如果没有操作系统特定的帮助,这是不可能完成的。这只是归结为我的主循环中的轮询吗?我正在 3 GHz 计算机上模拟 1 MHz cpu,所以我认为轮询没问题,但我仍然想知道真正的异步中断。

c++ c emulation interrupt
1个回答
0
投票

在某种程度上,您确实必须轮询,因为机器实际上并不完全异步地调用中断处理程序,只是在指令之间调用。因此,在指令周期的适当时刻,您需要检查虚拟机是否应该接收中断。

一种选择是每次通过调用操作系统进行轮询,以检查输入。但这样做的开销可能太大了。

另一种方法是安排模拟器在异步 I/O 处理程序或单独的线程中异步接收输入,然后设置一个原子标志,模拟代码可以在每个周期测试该原子标志。

标准C和C++没有实时处理击键的设施;他们的 I/O 模型是基于流的。所以,是的,这本质上是依赖于操作系统的,除非您使用为多个特定于操作系统的后端提供通用 API 的第三方库。

© www.soinside.com 2019 - 2024. All rights reserved.