diff options
| author | Loic Guegan <loic.guegan@mailbox.org> | 2023-12-25 18:36:53 +0100 |
|---|---|---|
| committer | Loic Guegan <loic.guegan@mailbox.org> | 2023-12-25 18:36:53 +0100 |
| commit | ab71de02f4ce6b7ad95857e5164cf89bc1eae695 (patch) | |
| tree | 87c87adf6dad17d94466efa87ce51a881afc7e41 | |
| parent | 90c372fc35f1b66cb54a486486ca8ae9b787a2d8 (diff) | |
Minor changes
| -rw-r--r-- | src/main.c | 2 | ||||
| -rw-r--r-- | src/vcpu.c | 39 |
2 files changed, 17 insertions, 24 deletions
@@ -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(); @@ -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; } |
