diff options
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(); |
