From a92f02ed38da03d97fc908dd5533d19e2ff53e8e Mon Sep 17 00:00:00 2001 From: Toni Date: Sat, 28 Feb 2026 16:19:48 +0100 Subject: [PATCH] use pkg-config for raylib detection --- LICENSE | 2 +- build.sh | 19 ++++++++++++++++--- chip8.c | 25 ++++++++++++++++++++----- mos6502.c | 48 ++++++++++++++++++++++++------------------------ 4 files changed, 61 insertions(+), 33 deletions(-) diff --git a/LICENSE b/LICENSE index 7ca92f8..2e16d76 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ BSD 2-Clause License -Copyright (c) 2025, Antoni Piasecki +Copyright (c) 2025-2026, Antoni Piasecki Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/build.sh b/build.sh index bf177c8..a2faeb1 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,19 @@ #!/bin/bash -set -xe +set -euo pipefail + CFLAGS="-Wall -Wextra -Wpedantic -std=c99 -O3" -cc $CFLAGS -o chip8 chip8.c -L/usr/local/lib/libraylib.a -lraylib -lm -cc $CFLAGS -o mos6502 mos6502.c \ No newline at end of file +echo "building mos6502..." +cc $CFLAGS -o mos6502 mos6502.c + +if command -v pkg-config >/dev/null; then + RAYLIB_FLAGS=$(pkg-config --cflags --libs raylib 2>/dev/null) + if [ $? -eq 0 ]; then + echo "building chip8..." + cc $CFLAGS -o chip8 chip8.c $RAYLIB_FLAGS + else + echo "raylib not found - skipping chip8..." + fi +else + echo "pkg-config not found - skipping chip8..." +fi \ No newline at end of file diff --git a/chip8.c b/chip8.c index 6a166a6..9d232d8 100644 --- a/chip8.c +++ b/chip8.c @@ -10,10 +10,10 @@ uint8_t high = c->memory[c->pc++]; \ uint16_t ins = (low << 8) | high; \ uint16_t nnn = ins & 0x0FFF; \ + uint8_t kk = ins & 0x00FF; \ uint8_t n = ins & 0x000F; \ uint8_t x = (ins >> 8) & 0x0F; \ - uint8_t y = (ins >> 4) & 0x0F; \ - uint8_t kk = ins & 0x00FF + uint8_t y = (ins >> 4) & 0x0F #define BAD_INS() \ fprintf(stderr, "unrecognized instruction\n"); \ @@ -396,15 +396,25 @@ void chip8_free(CHIP8 c) { } int main(int argc, char *argv[]) { - if (argc < 2) { - fprintf(stderr, "Usage: %s \n", argv[0]); + const char *path = NULL; + uint8_t disassemble = 0; + for (int i = 1; i < argc; i++) { + if (strcmp(argv[i], "-d") == 0) { + disassemble = 1; + } else { + path = argv[i]; + } + } + + if (path == NULL) { + fprintf(stderr, "Usage: %s [-d] \n", argv[0]); return 1; } CHIP8 c = chip8_create(); uint8_t buffer[4000]; - FILE *f = fopen(argv[1], "rb"); + FILE *f = fopen(path, "rb"); size_t n = fread(buffer, 1, 4000, f); fclose(f); @@ -412,6 +422,11 @@ int main(int argc, char *argv[]) { c.memory[0x200 + i] = buffer[i]; } + if (disassemble) { + chip8_disassemble(&c, n / 2); + return 0; + } + InitWindow(640, 320, "CHIP-8"); SetTargetFPS(60); diff --git a/mos6502.c b/mos6502.c index abc81f6..cbcc429 100644 --- a/mos6502.c +++ b/mos6502.c @@ -911,10 +911,10 @@ void mos6502_disassemble(MOS6502 *m) { printf("ORA ($%02X,X)", READ_U8()); } break; case 0x05: { - printf("ORA $%02X", READ_U8()); + printf("ORA $%02X\t", READ_U8()); } break; case 0x06: { - printf("ASL $%02X", READ_U8()); + printf("ASL $%02X\t", READ_U8()); } break; case 0x08: { printf("PHP\t"); @@ -923,7 +923,7 @@ void mos6502_disassemble(MOS6502 *m) { printf("ORA #$%02X\t", READ_U8()); } break; case 0x0A: { - printf("ASL A"); + printf("ASL A\t"); } break; case 0x0D: { printf("ORA $%04X", READ_U16()); @@ -963,13 +963,13 @@ void mos6502_disassemble(MOS6502 *m) { printf("AND ($%02X,X)", READ_U8()); } break; case 0x24: { - printf("BIT $%02X", READ_U8()); + printf("BIT $%02X\t", READ_U8()); } break; case 0x25: { - printf("AND $%02X", READ_U8()); + printf("AND $%02X\t", READ_U8()); } break; case 0x26: { - printf("ROL $%02X", READ_U8()); + printf("ROL $%02X\t", READ_U8()); } break; case 0x28: { printf("PLP\t"); @@ -978,7 +978,7 @@ void mos6502_disassemble(MOS6502 *m) { printf("AND #$%02X\t", READ_U8()); } break; case 0x2A: { - printf("ROL A"); + printf("ROL A\t"); } break; case 0x2C: { printf("BIT $%04X", READ_U16()); @@ -1021,10 +1021,10 @@ void mos6502_disassemble(MOS6502 *m) { printf("EOR ($%02X,X)", READ_U8()); } break; case 0x45: { - printf("EOR $%02X", READ_U8()); + printf("EOR $%02X\t", READ_U8()); } break; case 0x46: { - printf("LSR $%02X", READ_U8()); + printf("LSR $%02X\t", READ_U8()); } break; case 0x48: { printf("PHA\t"); @@ -1076,10 +1076,10 @@ void mos6502_disassemble(MOS6502 *m) { printf("ADC ($%02X,X)", READ_U8()); } break; case 0x65: { - printf("ADC $%02X", READ_U8()); + printf("ADC $%02X\t", READ_U8()); } break; case 0x66: { - printf("ROR $%02X", READ_U8()); + printf("ROR $%02X\t", READ_U8()); } break; case 0x68: { printf("PLA\t"); @@ -1088,7 +1088,7 @@ void mos6502_disassemble(MOS6502 *m) { printf("ADC #$%02X\t", READ_U8()); } break; case 0x6A: { - printf("ROR A"); + printf("ROR A\t"); } break; case 0x6C: { printf("JMP ($%04X)", READ_U16()); @@ -1189,13 +1189,13 @@ void mos6502_disassemble(MOS6502 *m) { printf("LDX #$%02X\t", READ_U8()); } break; case 0xA4: { - printf("LDY $%02X", READ_U8()); + printf("LDY $%02X\t", READ_U8()); } break; case 0xA5: { - printf("LDA $%02X", READ_U8()); + printf("LDA $%02X\t", READ_U8()); } break; case 0xA6: { - printf("LDX $%02X", READ_U8()); + printf("LDX $%02X\t", READ_U8()); } break; case 0xA8: { printf("TAY\t"); @@ -1250,19 +1250,19 @@ void mos6502_disassemble(MOS6502 *m) { printf("LDX $%04X,Y", READ_U16()); } break; case 0xC0: { - printf("CPY #$%02X", READ_U8()); + printf("CPY #$%02X\t", READ_U8()); } break; case 0xC1: { printf("CMP ($%02X,X)", READ_U8()); } break; case 0xC4: { - printf("CPY $%02X", READ_U8()); + printf("CPY $%02X\t", READ_U8()); } break; case 0xC5: { - printf("CMP $%02X", READ_U8()); + printf("CMP $%02X\t", READ_U8()); } break; case 0xC6: { - printf("DEC $%02X", READ_U8()); + printf("DEC $%02X\t", READ_U8()); } break; case 0xC8: { printf("INY\t"); @@ -1308,19 +1308,19 @@ void mos6502_disassemble(MOS6502 *m) { printf("DEC $%04X,X", READ_U16()); } break; case 0xE0: { - printf("CPX #$%02X", READ_U8()); + printf("CPX #$%02X\t", READ_U8()); } break; case 0xE1: { printf("SBC ($%02X,X)", READ_U8()); } break; case 0xE4: { - printf("CPX $%02X", READ_U8()); + printf("CPX $%02X\t", READ_U8()); } break; case 0xE5: { - printf("SBC $%02X", READ_U8()); + printf("SBC $%02X\t", READ_U8()); } break; case 0xE6: { - printf("INC $%02X", READ_U8()); + printf("INC $%02X\t", READ_U8()); } break; case 0xE8: { printf("INX\t"); @@ -1415,7 +1415,7 @@ int main(int argc, char *argv[]) { uint16_t old_pc = m.pc; mos6502_disassemble(&m); m.pc = old_pc; - printf("\tA: %02X X: %02X Y: %02X\n", m.A, m.X, m.Y); + printf("\tA: $%02X X: $%02X Y: $%02X SP: $%02X\n", m.A, m.X, m.Y, m.SP); } mos6502_step(&m);