分区内存写软CPU虚拟机

Partitioned memory for writing a soft CPU of virtual machine

我正在尝试用 C 编写一个简单的软件 CPU,它将在用于嵌入式应用程序的假想机器上运行。我是新手,所以请耐心等待。

我一直在尝试在 IDE 中执行此操作,但是 运行 遇到了一个问题,我需要 malloc 内存并且没有获得一致的内存地址来分配我的寄存器,所以我无法 运行 测试和调试。在实际的硬件上,我知道文档会给我特定寄存器、主内存和硬盘内存的地址,对吗?我希望能够为我的寄存器定义宏,然后我可以将其传递给 read/write,但是如果没有静态内存地址,这似乎是不可能的。

所以我似乎需要一种好方法来分配带有静态地址的静态内存块,可以是在 IDE 中,也可以是在我自己的机器上使用文本编辑器。最好的方法是什么?作为参考,我正在使用 Cloud9 IDE,但不知道如何在这个平台上使用它。

谢谢!

你应该做类似uint8_t* const address_space = calloc( memory_size, sizeof(uint8_t) );的事情,当然要检查return值,然后将你所有的机器地址索引到数组中,比如address_space[dest] = register[src];。如果您的模拟 CPU 可以处理不同大小的数据或比您的主机 CPU 具有更宽松的对齐限制,您将需要使用 memcpy() 或指针转换来传输数据。

无论 address_space 是静态分配还是动态分配,您的调试器都可以理解 address_space[i] 这样的表达式,但是如果您事先知道确切的大小,则可以静态分配它,例如模拟一台机器始终恰好有 65,536 字节 RAM 的 16 位地址。