【发布时间】:2010-06-20 15:11:01
【问题描述】:
我正在用 C/C++ 为 Mac OS 编写一个 NES 模拟器(我已经编写了一个,所以我知道基础知识)。由于许多硬件寄存器映射到内存位置,我想知道是否有一些系统调用可以用来将地址映射到函数的结果:当它被访问时,函数会被调用。 (我很确定我不能,但是,嘿,值得一问。)
这是我想做的:
int getStatusRegisterValue()
{
return 0xCAFEBABE;
}
// obviously, more parameters than just this would be involved I suppose
int* statusRegister = syscall_to_map_function_to_address(getStatusRegisterValue);
// from here on, doing (*statusRegister) should call getStatusRegisterValue and
// return its value
*statusRegister == 0xCAFEBABE;
这个项目将是我在 LLVM 上的尝试,我的目标是将 ROM 重新编译为 LLVM 字节码。这就是为什么如果简单的内存访问可以触发该功能会很方便(就像在真正的NES硬件上一样)。解决我的问题的另外两个明显的可能性是缓存寄存器值并将它们存储在实际内存中,或者从重新编译的代码中调用一个函数来将内存位置映射到它们真正的位置。
谢谢!
【问题讨论】:
-
没有 C/C++ 这样的东西。
-
@wowus:“C/C++”听起来是总结“C++ 与 C 交互”的好方法。我还应该补充一点,该语言会涉及到 Objective-C 和一些汇编语言。
-
你能展示一些示例代码吗?还是用例?我无法完全想象这一点。
-
@wowus:我已经编辑了我的问题。