summaryrefslogtreecommitdiff
path: root/sources/instr.c
diff options
context:
space:
mode:
authordweller <dweller@cabin.digital>2025-03-26 20:37:01 +0200
committerdweller <dweller@cabin.digital>2025-03-26 20:37:01 +0200
commit750cd23d7afac165502defa1d259ace00ca0e414 (patch)
treeff28a5649a4ba2b19a93c924536634106b65816e /sources/instr.c
parent202712187e6ea7ce39dafad744c1e729e5279db6 (diff)
clean up chip-8 into its own file
Diffstat (limited to 'sources/instr.c')
-rw-r--r--sources/instr.c110
1 files changed, 0 insertions, 110 deletions
diff --git a/sources/instr.c b/sources/instr.c
deleted file mode 100644
index 72511f1..0000000
--- a/sources/instr.c
+++ /dev/null
@@ -1,110 +0,0 @@
-typedef enum
-{
- C8_ILL,
-/* Onnn = 0,1,2,A,B */
-/* 00E0 - CLS */ C8_CLS,
-/* 00EE - RET */ C8_RET,
-/* 0nnn - SYS addr */ C8_SYS,
-/* 1nnn - JP addr */ C8_JP,
-/* 2nnn - CALL addr */ C8_CALL,
-/* Annn - LD I, addr */ C8_LDI,
-/* Bnnn - JP V0, addr */ C8_JPV,
-/* Oxkk = 3,4,6,7,C,E,F */
-/* 3xkk - SE Vx, byte */ C8_SEB,
-/* 4xkk - SNE Vx, byte */ C8_SNEB,
-/* 6xkk - LD Vx, byte */ C8_LD,
-/* 7xkk - ADD Vx, byte */ C8_ADDB,
-/* Cxkk - RND Vx, byte */ C8_RND,
-/* Ex9E - SKP Vx */ C8_SKP,
-/* ExA1 - SKNP Vx */ C8_SKNP,
-/* Fx07 - LD Vx, DT */ C8_MVDT,
-/* Fx0A - LD Vx, K */ C8_LDK,
-/* Fx15 - LD DT, Vx */ C8_LDDT,
-/* Fx18 - LD ST, Vx */ C8_LDST,
-/* Fx1E - ADD I, Vx */ C8_ADDI,
-/* Fx29 - LD F, Vx */ C8_HEX,
-/* Fx33 - LD B, Vx */ C8_BCD,
-/* Fx55 - LD [I], Vx */ C8_SAVE,
-/* Fx65 - LD Vx, [I] */ C8_RESTORE,
-/* Oxyn = 5,8,9,D */
-/* 5xy0 - SE Vx, Vy */ C8_SE,
-/* 8xy0 - LD Vx, Vy */ C8_MOVE,
-/* 8xy1 - OR Vx, Vy */ C8_OR,
-/* 8xy2 - AND Vx, Vy */ C8_AND,
-/* 8xy3 - XOR Vx, Vy */ C8_XOR,
-/* 8xy4 - ADD Vx, Vy */ C8_ADD,
-/* 8xy5 - SUB Vx, Vy */ C8_SUB,
-/* 8xy6 - SHR Vx {, Vy} */ C8_SHR,
-/* 8xy7 - SUBN Vx, Vy */ C8_SUBN,
-/* 8xyE - SHL Vx {, Vy} */ C8_SHL,
-/* 9xy0 - SNE Vx, Vy */ C8_SNE,
-/* Dxyn - DRW Vx, Vy, nibble */ C8_DRW,
- C8_OP_CNT
-
-} chip8_op;
-
-
-#define c8_decode_generate(name) \
-void c8_##name(u8* code, u16 offset, void* usrdat) \
-{ \
- u16 word, instr, nnn; \
- u8 o, x, y, n, kk; \
- \
- (void)usrdat; \
- \
- word = *(u16*)(code + offset); \
- instr = be16toh(word); \
- o = (instr & 0xF000) >> 12; \
- nnn = (instr & 0x0FFF); \
- x = (instr & 0x0F00) >> 8; \
- y = (instr & 0x00F0) >> 4; \
- n = (instr & 0x000F); \
- kk = (instr & 0x00FF); \
- \
- (void)o; \
- (void)nnn; \
- (void)x; \
- (void)y; \
- (void)n; \
- (void)kk; \
- \
- if(o == 0 && nnn == 0x0E0) X_C8_CLS; \
- else if(o == 0 && nnn == 0x0EE) X_C8_RET; \
- else if(o == 0) X_C8_SYS; \
- else if(o == 1) X_C8_JP; \
- else if(o == 2) X_C8_CALL; \
- else if(o == 0xA) X_C8_LDI; \
- else if(o == 0xB) X_C8_JPV; \
- else if(o == 3) X_C8_SEB; \
- else if(o == 4) X_C8_SNEB; \
- else if(o == 6) X_C8_LD; \
- else if(o == 7) X_C8_ADDB; \
- else if(o == 0xC) X_C8_RND; \
- else if(o == 0xE && kk == 0x9E) X_C8_SKP; \
- else if(o == 0xE && kk == 0xA1) X_C8_SKNP; \
- else if(o == 0xF && kk == 0x07) X_C8_MVDT; \
- else if(o == 0xF && kk == 0x0A) X_C8_LDK; \
- else if(o == 0xF && kk == 0x15) X_C8_LDDT; \
- else if(o == 0xF && kk == 0x18) X_C8_LDST; \
- else if(o == 0xF && kk == 0x1E) X_C8_ADDI; \
- else if(o == 0xF && kk == 0x29) X_C8_HEX; \
- else if(o == 0xF && kk == 0x33) X_C8_BCD; \
- else if(o == 0xF && kk == 0x55) X_C8_SAVE; \
- else if(o == 0xF && kk == 0x65) X_C8_RESTORE; \
- else if(o == 5 && n == 0) X_C8_SE; \
- else if(o == 8 && n == 0) X_C8_MOVE; \
- else if(o == 8 && n == 1) X_C8_OR; \
- else if(o == 8 && n == 2) X_C8_AND; \
- else if(o == 8 && n == 3) X_C8_XOR; \
- else if(o == 8 && n == 4) X_C8_ADD; \
- else if(o == 8 && n == 5) X_C8_SUB; \
- else if(o == 8 && n == 6) X_C8_SHR; \
- else if(o == 8 && n == 7) X_C8_SUBN; \
- else if(o == 8 && n == 0xE) X_C8_SHL; \
- else if(o == 9 && n == 0) X_C8_SNE; \
- else if(o == 0xD) X_C8_DRW; \
- else X_C8_ILL; \
-}
-
-#include "meta/disasm.c"
-#include "meta/exec.c"