我试着用Ruby做一个Chip-8仿真器,因为我的朋友以前用C++做过,但是我偶然发现了一些问题,请注意,我对Ruby只有一些知识,我认为这个项目将是提高我在这种语言中的技能的一个好方法。
我读过关于元帅班的文章,但我不知道该如何使用它。http://hackage.haskell.org/package/ruby-marshal-0.1.2/docs/Data-Ruby-Marshal-Int.html
因此,基本上,芯片-8操作码是it 16的,但我需要得到指令的较低和最上面的位,这样我才能正确地解释它。在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发布于 2018-11-19 13:47:46
您可以通过按位操作获得16位字的高字节和低字节:
high_byte = opcode >> 8
low_byte = opcode & 0xFF上述假设假设opcode已经被限制在16位无符号整数的范围内.
相反:
opcode = (high_byte << 8) | low_byte上述假设假设high_byte和low_byte被限制在8位无符号整数的范围内.
这种方法在C++中可能也会更好,因为联盟依赖于系统的特性(从技术上讲,这是一个非标准的扩展,尽管受到流行编译器的广泛支持)。
https://stackoverflow.com/questions/53375662
复制相似问题