# LEGO firmware Makefile
#

# tool prefix 
INSTPREFIX=/usr/local/bin/h8300-hitachi-hms-

# how to disassemble
ODFLAGS = --disassemble-all --no-show-raw-insn -m h8300

# which firmware version to act upon
FIRMVERS=firm0309

# which assembler startup file to use for C files
CBOOTSTRAP=cboot1

# cflags
CFLAGS=-O2 -mno-s -mno-h

# do we need zero padding of the srec file?
NEED_ZERO_PADDING=--pad-to 0xC000

all:	lcd-test.srec

### no user servicable parts below

AS=$(INSTPREFIX)as
LD=$(INSTPREFIX)ld
OBJCOPY=$(INSTPREFIX)objcopy
OBJDUMP=$(INSTPREFIX)objdump
GCC=$(INSTPREFIX)gcc

# how to disassemble original firmware file
%.dis: %.lgo
	$(OBJDUMP) $(ODFLAGS) $*.lgo > $*.dis

# how to merge labels etc into disassembly
%.s: %.fix $(FIRMVERS).dis
	./fixfirm.pl $*.fix $(FIRMVERS).dis > $*.s

# how to reassemble new firmware file
%.srec: %.s
	$(AS) $*.s -o $*.o
	$(LD) -Ttext=0x8000 $*.o -o $*.out
	$(OBJCOPY) -O srec $*.out $*.srec
	rm -f $*.o $*.out
	chmod -x $*.srec

# how to disassemble new firmware files
%.dis: %.srec
	$(OBJDUMP) $(ODFLAGS) $*.srec > $*.dis

# how to assemble C bootstrap code
%.o: %.S
	$(AS) $*.S -o $*.o

# how to compile C source
%.o: %.c
	$(GCC) $(CFLAGS) -c $*.c -o $*.o

# how link C source
%.coff: %.o $(CBOOTSTRAP)-head.o $(CBOOTSTRAP)-tail.o
	$(LD) -Ttext 0x8000 --oformat coff-h8300 $(CBOOTSTRAP)-head.o $*.o $(CBOOTSTRAP)-tail.o -o $*.coff

# how to make a srec file of the appropriate length
%.srec: %.coff	
	$(OBJCOPY) -I coff-h8300 -O srec $(NEED_ZERO_PADDING) $*.coff $*.srec
	chmod a-x $*.srec

# DO NOT DELETE - makedepend depends on this!

lcd-2test.o: rcx-rom.h rcx-lcd.h
lcd-test.o: rcx-rom.h rcx-lcd.h
