分区内存写软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 位地址。
我正在尝试用 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 位地址。