我正在尝试用Ruby创建一个Chip-8仿真器,就像我的朋友以前使用C ++一样,但是我偶然发现了一些问题,请记住,我对Ruby还是只有一点了解,我认为这个项目会是提高我的语言能力的好方法。
我已经读过元帅课,但是我不知道如何使用它。 http://hackage.haskell.org/package/ruby-marshal-0.1.2/docs/Data-Ruby-Marshal-Int.html
所以基本上8芯片的操作码是int16的,但是我需要获取指令的最低位和最高位,以便我可以正确地解释它。在C ++中,他使用并集和基本int数据类型进行了此操作
struct Instruction {
union {
uint16_t opcode;
struct {
uint8_t lower;
uint8_t upper;
} bytes;
};
如何模仿特定的uint8_t和uint16_t类型?我不介意工会将工会换成其他东西。
这也是使用和管理内存的最佳方法吗?我实际上不知道下面的代码是否正确,会编译,因为我只能访问记事本atm
class Memory
@memory = Hash.new(Array.new)
@memory[:system] = Array.new(0x200, 0)
@memory[:rom] = Array.new(0xCA0, 0)
@memory[:internal] = Array.new(0x5F, 0)
@memory[:refresher] = Array.new(0xF0, 0)
@stack = Array.new(0) #Gotta stick with push/pop
end
class Chip8
def initialize
@memory = Memory.new
答案 0 :(得分:1)
您可以通过按位操作获得16位字的高字节和低字节:
high_byte = opcode >> 8
low_byte = opcode & 0xFF
以上假设opcode
已被限制在16位无符号整数的范围内。
相反:
opcode = (high_byte << 8) | low_byte
以上假设high_byte
和low_byte
被限制在8位无符号整数范围内。
这种方法在C ++中也可以说是更好的方法,因为联合依赖于系统的字节顺序(并且从一开始就是技术上的非标准扩展,尽管受到流行的编译器的广泛支持)。