Я пытаюсь сделать эмулятор Chip-8 в Ruby, как мой друг делал это раньше с 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