SHELL := $(shell which bash) .ONESHELL: ASM = $(wildcard *.s) ATT = $(BIN:.bin=.att) BIN = $(OBJ:.o=.bin) OBJ = $(ASM:.s=.o) all: qemu | $(ATT) clean: kill -rm -fv $(ATT) $(BIN) $(OBJ) core.* *~ curses: $(BIN) gnome-terminal --geometry 80x25 -- qemu-system-i386 -display curses -drive file=$<,format=raw -k es -serial mon:stdio & debug: $(BIN) | kill port=$$(( 1024 + $$UID )) qemu-system-i386 -drive file=$<,format=raw -gdb tcp::$$port -k es &> /dev/null & pushd .. gdb -ix gdb_init_real_mode.txt \ -ex 'set tdesc filename target.xml' \ -ex "target remote localhost:$$port" \ -ex 'hbr *0x7c00' \ -ex 'printf "¡No olvides establecer un punto de ruptura para el controlador de interrupciones del teclado!\n"' popd kill: -killall -q qemu-system-i386 || true qemu: $(BIN) qemu-system-i386 -drive file=$<,format=raw &> /dev/null & %.att: %.bin objdump -D -b binary -mi8086 -Maddr16,data16 $< > $@ %.bin: %.o ld -T../linker.ld $< -o $@ .PHONY: all clean curses debug kill qemu