use pkg-config for raylib detection

This commit is contained in:
2026-02-28 16:19:48 +01:00
parent a334740040
commit a92f02ed38
4 changed files with 61 additions and 33 deletions

View File

@@ -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:

View File

@@ -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
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

25
chip8.c
View File

@@ -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 <path>\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] <path>\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);

View File

@@ -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);