diff options
| author | 2025-06-03 10:21:14 -0400 | |
|---|---|---|
| committer | 2025-06-03 10:21:14 -0400 | |
| commit | 3cdd278c724656f17f18aa98baf79ffd00e5ac7b (patch) | |
| tree | 002b993aae553f085c243d4c2cd06b0636e6af03 | |
| parent | e0b86a23c167f9f43289839f60393f49f594a868 (diff) | |
| download | chip8-3cdd278c724656f17f18aa98baf79ffd00e5ac7b.tar.gz chip8-3cdd278c724656f17f18aa98baf79ffd00e5ac7b.tar.bz2 chip8-3cdd278c724656f17f18aa98baf79ffd00e5ac7b.zip | |
| -rw-r--r-- | chip8.c | 32 | ||||
| -rw-r--r-- | chip8.h | 2 | ||||
| -rw-r--r-- | ui_sdl.c | 5 |
3 files changed, 19 insertions, 20 deletions
@@ -7,7 +7,7 @@ #ifdef _WIN32 #include <winsock.h> -#else +#else #include <arpa/inet.h> #include <unistd.h> #endif @@ -58,7 +58,7 @@ void load_rom(char *path) { vm.ram = (u8*)malloc(0xFFF); memset(vm.ram, 0, 0xFFF); - + #ifdef _WIN32 size_t res = read(fd, &vm.ram[0x200], fsize); #else @@ -90,7 +90,7 @@ void vm_step(void) { // ^^^ switch ((in>>12&0xF)) { - case 0x0: + case 0x0: switch (in&0xFF) { case 0xE0: // CLS memset(&vm.screen, 0, sizeof(vm.screen)); @@ -98,7 +98,7 @@ void vm_step(void) { case 0xEE: // RET vm.PC = vm.stack[vm.SP--]; break; - } + } break; case 0x1: // JP addr vm.PC = (in&0xFFF) - 0x2; @@ -128,21 +128,21 @@ void vm_step(void) { case 0x7: // ADD Vx, byte vm.Vx[in>>8&0xF] += in&0xFF; break; - case 0x8: + case 0x8: switch(in&0xF) { - case 0x0: // LD Vx, Vy + case 0x0: // LD Vx, Vy vm.Vx[in>>8&0xF] = vm.Vx[in>>4&0xF]; break; - case 0x1: // OR Vx, Vy + case 0x1: // OR Vx, Vy vm.Vx[in>>8&0xF] |= vm.Vx[in>>4&0xF]; break; case 0x2: // AND Vx, Vy vm.Vx[in>>8&0xF] &= vm.Vx[in>>4&0xF]; break; - case 0x3: // XOR Vx, Vy + case 0x3: // XOR Vx, Vy vm.Vx[in>>8&0xF] ^= vm.Vx[in>>4&0xF]; break; - case 0x4: // ADD Vx, Vy + case 0x4: // ADD Vx, Vy if ((vm.Vx[in>>8&0xF] + vm.Vx[in>>4&0xF]) > 0xFF) { vm.Vx[0xF] = 1; } else { @@ -150,7 +150,7 @@ void vm_step(void) { } vm.Vx[in>>8&0xF] = (vm.Vx[in>>8&0xF] + vm.Vx[in>>4&0xF])&0xFF; break; - case 0x5: // SUB Vx, Vy + case 0x5: // SUB Vx, Vy if (vm.Vx[in>>8&0xF] > vm.Vx[in>>4&0xF]) { vm.Vx[0xF] = 1; } else { @@ -159,7 +159,7 @@ void vm_step(void) { vm.Vx[in>>8&0xF] -= vm.Vx[in>>4&0xF]; break; case 0x6: // SHR Vx {, Vy} - vm.Vx[0xF] = (vm.Vx[in>>8&0xF] & 1); + vm.Vx[0xF] = (vm.Vx[in>>8&0xF] & 1); // TODO: toggle for Vx /= 2 vm.Vx[in>>8&0xF] = vm.Vx[in>>8&0xF]>>1; break; @@ -171,14 +171,14 @@ void vm_step(void) { } vm.Vx[in>>8&0xF] = vm.Vx[in>>4&0xF] - vm.Vx[in>>8&0xF]; break; - case 0xE: // SHL Vx {, Vy} + case 0xE: // SHL Vx {, Vy} vm.Vx[0xF] = ((vm.Vx[in>>8&0xF]>>7) & 1); // TODO: toggle for Vx *= 2; vm.Vx[in>>8&0xF] = vm.Vx[in>>8&0xF]<<1; break; } break; - case 0x9: // SNE Vx, Vy + case 0x9: // SNE Vx, Vy if (vm.Vx[(in>>8&0xF)] != vm.Vx[(in>>4&0xF)]) { vm.PC += 0x2; } @@ -203,14 +203,14 @@ void vm_step(void) { if (pix) { u8 y = (vm.Vx[in>>4&0xF] + i)&0x1F; u8 x = (vm.Vx[in>>8&0xF] + s)&0x3F; - + u32 byte = y * 64 + x; // put the single '1' bit in the position // that is relative to the pixel u8 bit = 1 << (byte & 0x07); - // byte>>3 ~ byte / 8 + // byte>>3 ~ byte / 8 // used to get the index of the byte // containing the bit to change if (vm.screen[byte>>3] & bit) { @@ -237,7 +237,7 @@ void vm_step(void) { break; case 0xF: switch (in&0xFF) { - case 0x07: // LD Vx, DT + case 0x07: // LD Vx, DT vm.Vx[in>>8&0xF] = vm.DT; break; case 0x0A: // LD Vx, K @@ -16,7 +16,7 @@ typedef struct { u8 DT; u8 ST; - + u16 I; u8 Vx[16]; @@ -19,7 +19,7 @@ SDL_Renderer *r; void setup(void) { SDL_Init(SDL_INIT_VIDEO); SDL_Window* win = SDL_CreateWindow("chip8", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, W, H, SDL_WINDOW_SHOWN|SDL_WINDOW_RESIZABLE); - r = SDL_CreateRenderer(win, -1, SDL_RENDERER_PRESENTVSYNC|SDL_RENDERER_ACCELERATED); + r = SDL_CreateRenderer(win, -1, SDL_RENDERER_PRESENTVSYNC|SDL_RENDERER_ACCELERATED); SDL_RenderClear(r); } @@ -110,7 +110,7 @@ int main(int argc, char* argv[]) { } int cur = SDL_GetTicks(); - + if (cur - last_500hz >= (1000/500)) { vm_step(); last_500hz = cur; @@ -138,4 +138,3 @@ int main(int argc, char* argv[]) { return 0; } - |