use pkg-config for raylib detection
This commit is contained in:
2
LICENSE
2
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:
|
||||
|
||||
17
build.sh
17
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
|
||||
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
25
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 <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);
|
||||
|
||||
|
||||
48
mos6502.c
48
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);
|
||||
|
||||
Reference in New Issue
Block a user