summaryrefslogtreecommitdiff
path: root/src/vcpu.h
diff options
context:
space:
mode:
authorLoic Guegan <loic.guegan@mailbox.org>2023-12-26 17:51:39 +0100
committerLoic Guegan <loic.guegan@mailbox.org>2023-12-26 17:51:39 +0100
commit5eadac72916ce9d53ffdc3f908a6e414858fe7e0 (patch)
tree4c94efaa376280b44c510bad96eee41c43fc6c3a /src/vcpu.h
parent24aadae14da23e852285d4d726148d260edc147d (diff)
Cleaning repository
Diffstat (limited to 'src/vcpu.h')
-rw-r--r--src/vcpu.h63
1 files changed, 52 insertions, 11 deletions
diff --git a/src/vcpu.h b/src/vcpu.h
index 16de017..4266ac4 100644
--- a/src/vcpu.h
+++ b/src/vcpu.h
@@ -5,28 +5,31 @@
#define SCREEN_FREQ 60
#define REG_FLAG 0xF
+/**
+ * @brief Store the entire VCPU state
+ *
+ */
typedef struct VCPU_State {
- // Program Counter (16 bits but only 12 bits used (4096 memory addresses))
+ /// @brief Program Counter (16 bits but only 12 bits used (4096 memory addresses))
unsigned short PC;
- // Index register (16 bits but only 12 bits used (4096 memory addresses))
+ /// @brief Index register (16 bits but only 12 bits used (4096 memory addresses))
unsigned short I;
- // Stack register (16 bits)
+ /// @brief Stack register (16 bits)
unsigned short S;
unsigned short stack[100]; // Emulated stack
- // General purpose registers (8 bits each)
- // Note last one often used as a flag register
- unsigned char V[16];
+ /// @brief General purpose registers (8 bits each)
+ unsigned char V[16]; // Note last one often used as a flag register
- // Delay timer (8 bits)
+ /// @brief Delay timer (8 bits)
unsigned char DT;
- // Sound timer (8 bits)
+ /// @brief Sound timer (8 bits)
unsigned char ST;
- // Intruction (opcode + decoded fields)
+ /// @brief Intruction (opcode + decoded fields)
unsigned short opcode;
unsigned char X;
unsigned char Y;
@@ -34,20 +37,58 @@ typedef struct VCPU_State {
unsigned char NN;
unsigned short NNN;
- // Keypressed
+ /// @brief Keypressed
int keypressed; // Not 0 if a key was pressed
unsigned char key;
- // Count VCPU ticks
+ /// @brief Count VCPU ticks
int dt_ticks;
int st_ticks;
int screen_ticks;
} VCPU_State;
+/**
+ * @brief Must be called first!
+ *
+ */
void VCPUInit();
+
+/**
+ * @brief Fetch instruction from memory
+ *
+ */
void VCPUFetch();
+
+/**
+ * @brief Decode instruction from the last fetch
+ *
+ */
void VCPUDecode();
+
+/**
+ * @brief Execute decode instruction
+ *
+ */
void VCPUExecute();
+
+/**
+ * @brief Fetch, decode and execute an instruction
+ *
+ */
void VCPUTick();
+
+/**
+ * @brief Simple (a bit) binary to BCD convertion
+ *
+ * @param x
+ * @param u
+ * @param t
+ * @param h
+ */
void VCPUDoubleDabble(unsigned char x, unsigned char *u, unsigned char *t, unsigned char *h);
+
+/**
+ * @brief Dump VCPU state
+ *
+ */
void VCPUDump();