summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLoic Guegan <loic.guegan@mailbox.org>2023-12-25 10:24:29 +0100
committerLoic Guegan <loic.guegan@mailbox.org>2023-12-25 10:24:29 +0100
commit8d56e4a953a90d8563f36970c615a116e056a571 (patch)
treede060c9a089bbac48842869d903c871c9ee77002 /src
parent3b9170b54bd955146d2f327df313f7bf7ba7c5d4 (diff)
Minor changes
Diffstat (limited to 'src')
-rw-r--r--src/vcpu.c31
1 files 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