# gbos - Game Boy Color Unix-flavored microkernel (scaffold) # Toolchain: RGBDS (rgbasm/rgblink/rgbfix) ROM := gbos.gb BUILD := build SRCS := $(wildcard src/*.asm) OBJS := $(patsubst src/%.asm,$(BUILD)/%.o,$(SRCS)) ASFLAGS := -I include -Wall # MBC5 + RAM + battery; -r 3 = 32 KiB cart RAM (bump for more task banks) FIXFLAGS := -v -m MBC5+RAM+BATTERY -r 4 -p 0xFF -t GBOS .PHONY: all clean run all: $(ROM) $(BUILD)/%.o: src/%.asm | $(BUILD) rgbasm $(ASFLAGS) -o $@ $< # C programs: compiled with SDCC into ROM-bank blobs and INCBIN'd by programs.asm CBLOBS := c/chello.bin c/echo.bin c/true.bin c/false.bin c/uname.bin \ c/pid.bin c/cat.bin c/wc.bin c/head.bin c/args.bin \ c/ls.bin c/save.bin c/rm.bin c/sh.bin c/ps.bin c/kill.bin c/spin.bin c/blk.bin c/mkdir.bin $(BUILD)/programs.o: $(CBLOBS) # C programs also depend on the shared libc sources $(CBLOBS): c/libc.c c/gbos.h c/%.bin: c/%.c c/crt0.s c/libc.s c/build.sh sh c/build.sh $< $@ $(ROM): $(OBJS) rgblink -m $(BUILD)/gbos.map -n $(BUILD)/gbos.sym -o $@ $(OBJS) rgbfix $(FIXFLAGS) $@ $(BUILD): mkdir -p $(BUILD) clean: rm -rf $(BUILD) $(ROM) # convenience: run in an emulator if one is on PATH run: $(ROM) @which sameboy >/dev/null 2>&1 && sameboy $(ROM) || \ which bgb >/dev/null 2>&1 && bgb $(ROM) || \ echo "no emulator found (sameboy/bgb)"