From 8d56e4a953a90d8563f36970c615a116e056a571 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Mon, 25 Dec 2023 10:24:29 +0100 Subject: [PATCH] Minor changes --- src/vcpu.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/vcpu.c b/src/vcpu.c index f660dc3..ab7177c 100644 --- a/src/vcpu.c +++ b/src/vcpu.c @@ -35,14 +35,41 @@ void VCPUDecode(){ void VCPUExecute(){ // VCPUDump(); switch(State.opcode >> 12){ - case 0x0: // Clear screen - ScreenClear(); + case 0x0: // Clear screen or return from subroutine + if(State.N == 0){ // Clear screen + ScreenClear(); + } + else { // Return from subroutine + State.PC=State.stack[State.S]; + State.S--; + } break ;; case 0x1: // Jump State.PC=State.NNN; break ;; + case 0x2: // Call + State.S++; + State.stack[State.S]=State.PC; + State.PC=State.NNN; + break + ;; + case 0x3: // SE: VX, byte + if(State.V[State.X]==State.NN) + State.PC+=2; + break; + ;; + case 0x4: // SNE: VX, byte + if(State.V[State.X]!=State.NN) + State.PC+=2; + break; + ;; + case 0x5: // SNE: VX, VY + if(State.V[State.X]==State.V[State.Y]) + State.PC+=2; + break; + ;; case 0x6: State.V[State.X]=State.NN; break