From 16f7128a0c81a508940ee1a8e8d1b8fe36f83259 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Mon, 25 Dec 2023 09:11:45 +0100 Subject: [PATCH] Minor changes --- src/main.c | 9 ++++++--- src/mem.c | 9 ++++++++- src/mem.h | 1 + src/screen.c | 10 +++++++++- src/screen.h | 1 + src/vcpu.c | 24 ++++++++++++++++++++---- src/vcpu.h | 5 +++-- 7 files changed, 48 insertions(+), 11 deletions(-) diff --git a/src/main.c b/src/main.c index 995f4ed..2263245 100644 --- a/src/main.c +++ b/src/main.c @@ -8,13 +8,16 @@ int main(int argc, char *argv[]) // Initialize MemInit(); MemLoadROM("../roms/2-ibm-logo.ch8"); + ScreenInit(800,400); VCPUInit(); - - - ScreenSetPixel(0,1,1); + // MemDump(); + int i=0; while (!WindowShouldClose()){ + VCPUFetch(); + VCPUDecode(); + VCPUExecute(); ScreenUpdate(); } diff --git a/src/mem.c b/src/mem.c index c537120..12b039f 100644 --- a/src/mem.c +++ b/src/mem.c @@ -22,8 +22,9 @@ void MemCopy(unsigned char *data, int size, int addr){ void MemRead(unsigned char *data, int size, int addr){ int location=addr; - for(int i=0;i // Current VCPU state VCPU_State State; @@ -11,7 +11,11 @@ void VCPUInit(){ } void VCPUFetch(){ - MemRead((char *)&(State.opcode),2,State.PC); + unsigned char byte[2]; + MemRead(byte,2,State.PC); // Little indian to -1 no +1 + State.opcode=byte[0]; + State.opcode=State.opcode<<8; + State.opcode=State.opcode | byte[1]; State.PC+=2; } @@ -24,7 +28,7 @@ void VCPUDecode(){ } void VCPUExecute(){ - switch(State.opcode & 0xF){ + switch(State.opcode >> 12){ case 0x0: ScreenClear(); break @@ -45,6 +49,18 @@ void VCPUExecute(){ State.I=State.NNN; break ;; - + case 0xD: + int X=State.V[State.X]%63; + int Y=State.V[State.Y]%31; + State.V[0xF]=0; // Set flag to 0 + for(char row=0;row