MCOPY=mcopy

KERNEL_SRC=kernel.asm
KERNEL_OBJ=kernel/kernel.o
KERNEL_BIN=kernel.bin

#DEPEND=kernel.asm macrosmodoreal.mac macrosmodoprotegido.mac gdt.c pic.c idt.c isr.asm \
#	tss.c mmu.c Makefile gdt.h pic.h idt.h isr.h tss.h mmu.h sched.h
OBJ= $(KERNEL_OBJ) kernel/gdt.o kernel/pic.o kernel/idt.o \
	kernel/mmu.o kernel/sched.o kernel/tss.o kernel/v16.o \
	kernel/isr.o drivers/graphic_asm.o \
	drivers/hdd_driver.o drivers/fat16_driver.o drivers/graphic.o \
	drivers/keyboard.o common/utils.o common/system/utils.o
DISK_IMG=diskette.img

OBJ_SSE=tasks/conway/init.o tasks/conway/conway.o tasks/conway/conway_utils.o \
	tasks/conway/sse/conway_sse.o tasks/system.o common/utils.o common/tasks/utils.o
OBJ_PG=tasks/conway/init.o tasks/conway/conway.o tasks/conway/conway_utils.o \
	tasks/conway/gpr/conway_pg.o tasks/system.o common/utils.o common/tasks/utils.o
OBJ_IDLE=tasks/idle/init.o tasks/idle/idle.o \
	tasks/system.o common/utils.o common/tasks/utils.o

CFLAGS=-m32 -g -ggdb -Wall -Werror -O0 \
  -fno-zero-initialized-in-bss -fno-stack-protector -ffreestanding


IDLE=tasks/bin/idle.tsk
TASKS_SSE=tasks/bin/tareas_sse.tsk
TASKS_PG=tasks/bin/tareas_pg.tsk
IDLESIZE=12K
TASKS_SSE_SIZE=32K
TASKS_PG_SIZE=32K

CC=gcc
NASM=nasm
NASMFLAGS=-felf32
LD=ld               
LDTASKFLAGS=-static -m elf_i386 --oformat binary -b elf32-i386 -e start -Ttext 0x400000
LDFLAGS=-static -m elf_i386 --oformat binary -b elf32-i386 -e start -Ttext 0x1200

.PHONY=clean all image tasks

all: tasks image clean

tasks: tasks/bin/idle.tsk hdd/data/conway/sse.tsk hdd/data/conway/pg.tsk hdd/moved.flag

hdd/data/conway/sse.tsk: $(OBJ_SSE)
	@echo 'Linkeando las tareas SSE...'
	$(LD) $(LDTASKFLAGS) -o $@ $^
	
hdd/data/conway/pg.tsk: $(OBJ_PG)
	@echo 'Linkeando las tareas PG...'
	$(LD) $(LDTASKFLAGS) -o $@ $^

tasks/bin/idle.tsk: $(OBJ_IDLE)
	@echo 'Linkeando las tareas...'
	$(LD) $(LDTASKFLAGS) -o $@ $^
	
hdd/moved.flag:
	cp hdd/disk.img hdd/hdd.img
	mcopy -s -i hdd/hdd.img hdd/data/* ::/
	touch hdd/moved.flag

%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $^

%.o: %.asm
	$(NASM) $(NASMFLAGS) -o $@ $^

$(DISK_IMG):
	cp dsk_orig.img diskette.img

kernel.bin: $(OBJ)
	@echo 'Linkeando el kernel...'
	$(LD) $(LDFLAGS) -o $@ $^
	@echo ''
	mv kernel.bin kernel.bin.tmp
	dd if=/dev/zero bs=1 count=110080 of=kernel.bin status=noxfer
	dd if=kernel.bin.tmp bs=1 count=101888 of=kernel.bin conv=notrunc status=noxfer
	dd if=$(IDLE) bs=1 count=$(IDLESIZE) seek=101888 conv=notrunc of=kernel.bin status=noxfer
	#dd if=$(TASKS_SSE) bs=1 count=$(TASKS_SSE_SIZE) seek=110080 conv=notrunc of=kernel.bin status=noxfer
	#dd if=$(TASKS_PG) bs=1 count=$(TASKS_PG_SIZE) seek=142848 conv=notrunc of=kernel.bin status=noxfer


#image: tasks kernel.bin $(DEPEND) $(DISK_IMG)
image: tasks kernel.bin $(DISK_IMG)
	@echo 'Copiando el $(KERNEL_BIN) a la imagen de diskette\n'
	$(MCOPY) -o -i $(DISK_IMG) $(KERNEL_BIN) ::/ 

clean:
	rm -f *.bin *.o *.ctsko *.ctsk *.tsko kernel.bin.tmp
	rm -f kernel/*.o
	rm -f drivers/*.o
	rm -f common/*.o
	rm -f common/tasks/*.o
	rm -f common/system/*.o
	rm -f tasks/*.o
	rm -f tasks/idle/*.o
	rm -f tasks/conway/*.o
	rm -f tasks/conway/sse/*.o
	rm -f tasks/conway/gpr/*.o
	rm -f hdd/moved.flag
