diff options
| author | Loic Guegan <loic.guegan@mailbox.org> | 2023-12-26 17:51:39 +0100 |
|---|---|---|
| committer | Loic Guegan <loic.guegan@mailbox.org> | 2023-12-26 17:51:39 +0100 |
| commit | 5eadac72916ce9d53ffdc3f908a6e414858fe7e0 (patch) | |
| tree | 4c94efaa376280b44c510bad96eee41c43fc6c3a /src/vcpu.h | |
| parent | 24aadae14da23e852285d4d726148d260edc147d (diff) | |
Cleaning repository
Diffstat (limited to 'src/vcpu.h')
| -rw-r--r-- | src/vcpu.h | 63 |
1 files changed, 52 insertions, 11 deletions
@@ -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(); |
