summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Guegan <loic.guegan@mailbox.org>2023-12-25 18:36:53 +0100
committerLoic Guegan <loic.guegan@mailbox.org>2023-12-25 18:36:53 +0100
commitab71de02f4ce6b7ad95857e5164cf89bc1eae695 (patch)
tree87c87adf6dad17d94466efa87ce51a881afc7e41
parent90c372fc35f1b66cb54a486486ca8ae9b787a2d8 (diff)
Minor changes
-rw-r--r--src/main.c2
-rw-r--r--src/vcpu.c39
2 files changed, 17 insertions, 24 deletions
diff --git a/src/main.c b/src/main.c
index 00d6be2..40bb871 100644
--- a/src/main.c
+++ b/src/main.c
@@ -13,7 +13,7 @@ int main(int argc, char *argv[])
// Initialize
MemInit();
- MemLoadROM("../roms/chip8-test-suite/3-corax+.ch8");
+ MemLoadROM("../roms/chip8-test-suite/4-flags.ch8");
ScreenInit(800,400);
VCPUInit();
diff --git a/src/vcpu.c b/src/vcpu.c
index 08f4e06..d3eeb11 100644
--- a/src/vcpu.c
+++ b/src/vcpu.c
@@ -122,43 +122,36 @@ void VCPUExecute(){
break;
case 0x4: // VX = VX + VY
- if((State.V[State.X] + State.V[State.Y]) > 255)
- State.V[REG_FLAG]=1;
- else
- State.V[REG_FLAG]=0;
- State.V[State.X]=State.V[State.X] + State.V[State.Y];
+ unsigned char x=State.V[State.X];
+ unsigned char y=State.V[State.Y];
+ State.V[State.X]=x+y;
+ State.V[REG_FLAG]=((x+y) > 255);
break;
case 0x5: // VX = VX - VY
- if(State.V[State.X] > State.V[State.Y])
- State.V[REG_FLAG]=1;
- else
- State.V[REG_FLAG]=0;
- State.V[State.X]=State.V[State.X] - State.V[State.Y];
+ unsigned char x2=State.V[State.X];
+ unsigned char y2=State.V[State.Y];
+ State.V[State.X]=x2-y2;
+ State.V[REG_FLAG]=(x2>=y2);
break;
case 0x6: // VX = VX SHR 1
- if(State.V[State.X] & 0x1 == 1)
- State.V[REG_FLAG]=1;
- else
- State.V[REG_FLAG]=0;
+ char flag=State.V[State.X] & 0x1 == 1;
State.V[State.X]=State.V[State.X] >> 1;
+ State.V[REG_FLAG]=flag;
break;
case 0x7: // VX = VY - VX
- if(State.V[State.Y] > State.V[State.X])
- State.V[REG_FLAG]=1;
- else
- State.V[REG_FLAG]=0;
- State.V[State.X]=State.V[State.Y] - State.V[State.X];
+ unsigned char x3=State.V[State.X];
+ unsigned char y3=State.V[State.Y];
+ State.V[State.X]=y3-x3;
+ State.V[REG_FLAG]=(y3>=x3);
break;
case 0xE: // VX = VX SHL 1
- if(State.V[State.X] >> 7 == 1)
- State.V[REG_FLAG]=1;
- else
- State.V[REG_FLAG]=0;
+ char flag2=State.V[State.X] >> 7 == 1;
State.V[State.X]=State.V[State.X] << 1;
+ State.V[REG_FLAG]=flag2;
break;
}