chip8-emulator/chip8/instructions.go
2022-02-23 16:45:56 -03:00

63 lines
1.5 KiB
Go

package chip8
func (emulator *Emulator) ClearScreen() {
// TODO: clear the screen buffer
emulator.PC += InstructionSize
}
func (emulator *Emulator) Return() {
emulator.StackPop()
}
// Jump to location nnn.
//
// The interpreter sets the program counter to nnn.
func (emulator *Emulator) Jump(nnn uint16) {
emulator.PC = nnn
}
// Call subroutine at nnn.
//
// The interpreter increments the stack pointer, then puts the current PC
// on the top of the stack. The PC is then set to nnn.
func (emulator *Emulator) Call(nnn uint16) {
emulator.StackPush()
emulator.PC = nnn
}
// Skip next instruction if Vx = kk.
//
// The interpreter compares register Vx to kk, and if they are equal,
// increments the program counter by 2.
func (emulator *Emulator) SkipEqual(x uint8, kk uint8) {
if emulator.V[x] == kk {
emulator.PC += InstructionSize * 2
} else {
emulator.PC += InstructionSize
}
}
// Skip next instruction if Vx != kk.
//
// The interpreter compares register Vx to kk, and if they are not equal,
// increments the program counter by 2.
func (emulator *Emulator) SkipNotEqual(x uint8, kk uint8) {
if emulator.V[x] != kk {
emulator.PC += InstructionSize * 2
} else {
emulator.PC += InstructionSize
}
}
// Skip next instruction if Vx = Vy.
//
// The interpreter compares register Vx to register Vy, and if they are equal,
// increments the program counter by 2.
func (emulator *Emulator) SkipRegistersEqual(x uint8, y uint8) {
if emulator.V[x] == emulator.V[y] {
emulator.PC += InstructionSize * 2
} else {
emulator.PC += InstructionSize
}
}