chip8/include/opcode.h

77 lines
2.3 KiB
C

#ifndef _OPCODE_H_
#define _OPCODE_H_
#include <stdint.h>
#include <gint/display.h>
#include <gint/keyboard.h>
#include "Chip8.h"
#define N (opcode&0x000F)
#define NNN (opcode&0x0FFF)
#define X (opcode&0x0F00)>>8
#define Y (opcode&0x00F0)>>4
#define KK (opcode&0x00FF)
void execute();
void op0table(); //
void op00E0(); //clear screen
void op00EE(); //return
void op1NNN(); //jump
void op2NNN(); //call
void op3XKK(); //skip if reg[X] equal KK
void op4XKK(); //skip if reg[X] not equal KK
void op5XY0(); //skip if reg[X] equal reg[Y]
void op6XKK(); //Load KK in reg[X]
void op7XKK(); //reg[X] += KK, no carry
void op8table();
void op8XY0(); //load reg[Y] in reg [X]
void op8XY1(); //OR reg[X] and reg[Y] in reg [X]
void op8XY2(); //AND reg[X] and reg[Y] in reg [X]
void op8XY3(); //XOR reg[X] and reg[Y] in reg [X]
void op8XY4(); //add reg[X] and reg[Y] in reg[X] whit carry
void op8XY5(); //reg[X] = reg[X] -reg[Y] with NOT borrow
void op8XY6(); //rotate reg[X] -> and save the least significant bit in the carry flag
void op8XY7(); //reg[X] = reg[X] -reg[Y] with NOT borrow
void op8XYE(); //rotate reg[X] <- and save the least significant bit in the carry flag
void op9XY0(); //skip if reg[X] not equal reg[Y]
void opANNN(); //load NNN into I
void opBNNN(); //jump to address regist[0]+NNN
void opCXKK(); //set regist[X] = random(0,255) AND KK
void opDXYN(); //xor the sprite of size 8*N at adress I on the screen at position (regist[X],regist[Y])
//if a pixel is erased, set set carry flag.
void opEtable();
void opEX9E(); //skip if regist[X] equal value of key pressed
void opEXA1(); //skip if regist[X] not equal value of key pressed
void opFtable();
void opF5table();
void opFX07(); //set regist[X] = DelayTimer
void opFX0A(); //set regist[X] = keycode of pressed key (wait for press if not any)
void opFX15(); //set DelayTimer = regist[X]
void opFX18(); //set SoundTimer = regist[X]
void opFX1E(); //set I = I + regist[X]
void opFX29(); //set I to the location to draw the char stored in regist[X]
void opFX33(); //store BCD representation of regist[X] in the adress I(hundreds), I+1(tens), I+2(digits)
void opFX55(); //store regist[0]~regist[X] into memory adress I~I+X
void opFX65(); //load regist[0]~regist[X] from memory adress I~I+X
void uninplemented();
#endif // _OPCODE_H_