在内存中建模微机寄存器?

时间:2014-02-08 04:35:57

标签: c++ emulation intel-8080

作为一个小小的项目,我一直在创建一个较旧的微电脑CPU仿真器,主要基于8080的架构。它的8位通用寄存器可以(according to wikipedia)用作“三个16位寄存器对”,以及普通的8位模式。这是我的问题。

我对它进行建模的第一次尝试就是单独命名的字节和短路,这些工作正常,直到我重新阅读specs页面并发现16位寄存器实际上并不是他们自己的东西。糟糕。

我现在正在尝试的是一个字节数组,每个8位寄存器有一个位置,还有两个为堆栈/指令指针保留的位置。这对8位寄存器来说效果非常好,而且管理起来很麻烦,但我实际上并不知道如何将两个字节转换为内存中的短字节。这甚至可能吗?如果没有,你对如何做到这一点有什么建议吗?

2 个答案:

答案 0 :(得分:-1)

通过将16位寄存器中第一个字节的地址转换为void指针并返回短路来解决。不是非常类型安全,但嘿,它的工作原理。显然我只是在搜索错误的东西。

答案 1 :(得分:-1)

您可以通过以下操作将两个struct中的uint8_t设为uint16_t来进行访问:

union Register
{
    uint16_t word;
    struct
    {
        uint8_t lo, hi;
    } byte;
};

这样,如果您在范围Register r中有一个值,那么r.word将作为单个16位值访问内容,而r.byte.lor.byte.hi将访问第一个和第二个8位字节。 (第一个是lo,因为Intel 8080是little-endian architecture。)