diff options
| author | Loic Guegan <loic.guegan@mailbox.org> | 2023-12-25 07:32:11 +0100 |
|---|---|---|
| committer | Loic Guegan <loic.guegan@mailbox.org> | 2023-12-25 07:32:11 +0100 |
| commit | 14e9dd9258eaf62dba3867bb6edc9cd8687125c4 (patch) | |
| tree | e0a42d05bb7cec74a811ef4ea17c1f799de8bc7b | |
| parent | 001e18b3d4a195aaca1d281453d8a89d85563175 (diff) | |
Minor changes
| -rw-r--r-- | src/vcpu.c | 32 | ||||
| -rw-r--r-- | src/vcpu.h | 20 |
2 files changed, 27 insertions, 25 deletions
@@ -2,35 +2,17 @@ #include "mem.h" #include "screen.h" -// 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)) -unsigned short I; - -// Stack register (16 bits) -unsigned short S; - -// General purpose registers (8 bits each) -// Note last one often used as a flag register -unsigned char V[16]; - -// Delay timer (8 bits) -unsigned char DT; - -// Sound timer (8 bits) -unsigned char ST; // Current VCPU state VCPU_State State; void VCPUInit(){ - PC=ADDR_ROM; + State.PC=ADDR_ROM; } void VCPUFetch(){ - MemRead((char *)&(State.opcode),2,PC); - PC+=2; + MemRead((char *)&(State.opcode),2,State.PC); + State.PC+=2; } void VCPUDecode(){ @@ -48,19 +30,19 @@ void VCPUExecute(){ break ;; case 0x1: - PC=State.NNN; + State.PC=State.NNN; break ;; case 0x6: - V[State.X]=State.NN; + State.V[State.X]=State.NN; break ;; case 0x7: - V[State.X]+=State.NN; + State.V[State.X]+=State.NN; break ;; case 0xA: - I=State.NNN; + State.I=State.NNN; break ;; @@ -1,6 +1,26 @@ #pragma once typedef struct VCPU_State { + // 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)) + unsigned short I; + + // Stack register (16 bits) + unsigned short S; + + // General purpose registers (8 bits each) + // Note last one often used as a flag register + unsigned char V[16]; + + // Delay timer (8 bits) + unsigned char DT; + + // Sound timer (8 bits) + unsigned char ST; + + // Intruction (opcode + decoded fields) short opcode; char X; char Y; |
