diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..40ad367 --- /dev/null +++ b/Makefile @@ -0,0 +1,85 @@ +# PIC32 device number +DEVICE = 32MX320F128H + +# UART settings for programmer +TTYDEV ?=/dev/ttyUSB0 +TTYBAUD ?=115200 + +# Name of the project +PROGNAME = outfile + +# Linkscript +LINKSCRIPT := p$(shell echo "$(DEVICE)" | tr '[:upper:]' '[:lower:]').ld + +# Compiler and linker flags +CFLAGS += -ffreestanding -march=mips32r2 -msoft-float -Wa,-msoft-float +ASFLAGS += -msoft-float +LDFLAGS += -T $(LINKSCRIPT) + +# Filenames +ELFFILE = $(PROGNAME).elf +HEXFILE = $(PROGNAME).hex + +# Find all source files automatically +CFILES = $(wildcard *.c) +ASFILES = $(wildcard *.S) +SYMSFILES = $(wildcard *.syms) + +# Object file names +OBJFILES = $(CFILES:.c=.c.o) +OBJFILES +=$(ASFILES:.S=.S.o) +OBJFILES +=$(SYMSFILES:.syms=.syms.o) + +# Hidden directory for dependency files +DEPDIR = .deps +df = $(DEPDIR)/$(*F) + +.PHONY: all clean install envcheck +.SUFFIXES: + +all: $(HEXFILE) + +clean: + $(RM) $(HEXFILE) $(ELFFILE) $(OBJFILES) + $(RM) -R $(DEPDIR) + +envcheck: + @echo "$(TARGET)" | grep mcb32 > /dev/null || (\ + echo ""; \ + echo " **************************************************************"; \ + echo " * Make sure you have sourced the cross compiling environment *"; \ + echo " * Do this by issuing: *"; \ + echo " * . /path/to/crosscompiler/environment *"; \ + echo " **************************************************************"; \ + echo ""; \ + exit 1) + +install: envcheck + $(TARGET)avrdude -v -p $(shell echo "$(DEVICE)" | tr '[:lower:]' '[:upper:]') -c stk500v2 -P "$(TTYDEV)" -b $(TTYBAUD) -U "flash:w:$(HEXFILE)" + +$(ELFFILE): $(OBJFILES) envcheck + $(CC) $(CFLAGS) -o $@ $(OBJFILES) $(LDFLAGS) + +$(HEXFILE): $(ELFFILE) envcheck + $(TARGET)bin2hex -a $(ELFFILE) + +$(DEPDIR): + @mkdir -p $@ + +# Compile C files +%.c.o: %.c envcheck | $(DEPDIR) + $(CC) $(CFLAGS) -c -MD -o $@ $< + @cp $*.c.d $(df).c.P; sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' -e '/^$$/ d' -e 's/$$/ :/' < $*.c.d >> $(df).c.P; $(RM) $*.c.d + +# Compile ASM files with C pre-processor directives +%.S.o: %.S envcheck | $(DEPDIR) + $(CC) $(CFLAGS) $(ASFLAGS) -c -MD -o $@ $< + @cp $*.S.d $(df).S.P; sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' -e '/^$$/ d' -e 's/$$/ :/' < $*.S.d >> $(df).S.P; $(RM) $*.S.d + +# Link symbol lists to object files +%.syms.o: %.syms + $(LD) -o $@ -r --just-symbols=$< + +# Check dependencies +-include $(CFILES:%.c=$(DEPDIR)/%.c.P) +-include $(ASFILES:%.S=$(DEPDIR)/%.S.P) diff --git a/display.c b/display.c new file mode 100644 index 0000000..e69de29 diff --git a/main.c b/main.c new file mode 100644 index 0000000..e69de29 diff --git a/outfile.elf b/outfile.elf new file mode 100644 index 0000000..f95ffee Binary files /dev/null and b/outfile.elf differ diff --git a/outfile.hex b/outfile.hex new file mode 100644 index 0000000..1492940 --- /dev/null +++ b/outfile.hex @@ -0,0 +1,664 @@ +:020000040000fa +:020000041d00dd +:0800f8000000009d8822009d1c +:020000040000fa +:020000041d00dd +:1001800000701a4004005a2300709a401800004280 +:1001900000000000009d1a3c94015a27080040030b +:0401a000000000005b +:020000040000fa +:020000041d00dd +:10020000009d1a3cc0205a3700005a8f0800400356 +:1002100000000000000000000000000000000000de +:020000040000fa +:020000041d00dd +:10022000009d1a3cc0205a3704005a8f0800400332 +:1002300000000000000000000000000000000000be +:020000040000fa +:020000041d00dd +:10024000009d1a3cc0205a3708005a8f080040030e +:10025000000000000000000000000000000000009e +:020000040000fa +:020000041d00dd +:10026000009d1a3cc0205a370c005a8f08004003ea +:10027000000000000000000000000000000000007e +:020000040000fa +:020000041d00dd +:10028000009d1a3cc0205a3710005a8f08004003c6 +:10029000000000000000000000000000000000005e +:020000040000fa +:020000041d00dd +:1002a000009d1a3cc0205a3714005a8f08004003a2 +:1002b000000000000000000000000000000000003e +:020000040000fa +:020000041d00dd +:1002c000009d1a3cc0205a3718005a8f080040037e +:1002d000000000000000000000000000000000001e +:020000040000fa +:020000041d00dd +:1002e000009d1a3cc0205a371c005a8f080040035a +:1002f00000000000000000000000000000000000fe +:020000040000fa +:020000041d00dd +:10030000009d1a3cc0205a3720005a8f0800400335 +:1003100000000000000000000000000000000000dd +:020000040000fa +:020000041d00dd +:10032000009d1a3cc0205a3724005a8f0800400311 +:1003300000000000000000000000000000000000bd +:020000040000fa +:020000041d00dd +:10034000009d1a3cc0205a3728005a8f08004003ed +:10035000000000000000000000000000000000009d +:020000040000fa +:020000041d00dd +:10036000009d1a3cc0205a372c005a8f08004003c9 +:10037000000000000000000000000000000000007d +:020000040000fa +:020000041d00dd +:10038000009d1a3cc0205a3730005a8f08004003a5 +:10039000000000000000000000000000000000005d +:020000040000fa +:020000041d00dd +:1003a000009d1a3cc0205a3734005a8f0800400381 +:1003b000000000000000000000000000000000003d +:020000040000fa +:020000041d00dd +:1003c000009d1a3cc0205a3738005a8f080040035d +:1003d000000000000000000000000000000000001d +:020000040000fa +:020000041d00dd +:1003e000009d1a3cc0205a373c005a8f0800400339 +:1003f00000000000000000000000000000000000fd +:020000040000fa +:020000041d00dd +:10040000009d1a3cc0205a3740005a8f0800400314 +:1004100000000000000000000000000000000000dc +:020000040000fa +:020000041d00dd +:10042000009d1a3cc0205a3744005a8f08004003f0 +:1004300000000000000000000000000000000000bc +:020000040000fa +:020000041d00dd +:10044000009d1a3cc0205a3748005a8f08004003cc +:10045000000000000000000000000000000000009c +:020000040000fa +:020000041d00dd +:10046000009d1a3cc0205a374c005a8f08004003a8 +:10047000000000000000000000000000000000007c +:020000040000fa +:020000041d00dd +:10048000009d1a3cc0205a3750005a8f0800400384 +:10049000000000000000000000000000000000005c +:020000040000fa +:020000041d00dd +:1004a000009d1a3cc0205a3754005a8f0800400360 +:1004b000000000000000000000000000000000003c +:020000040000fa +:020000041d00dd +:1004c000009d1a3cc0205a3758005a8f080040033c +:1004d000000000000000000000000000000000001c +:020000040000fa +:020000041d00dd +:1004e000009d1a3cc0205a375c005a8f0800400318 +:1004f00000000000000000000000000000000000fc +:020000040000fa +:020000041d00dd +:10050000009d1a3cc0205a3760005a8f08004003f3 +:1005100000000000000000000000000000000000db +:020000040000fa +:020000041d00dd +:10052000009d1a3cc0205a3764005a8f08004003cf +:1005300000000000000000000000000000000000bb +:020000040000fa +:020000041d00dd +:10054000009d1a3cc0205a3768005a8f08004003ab +:10055000000000000000000000000000000000009b +:020000040000fa +:020000041d00dd +:10056000009d1a3cc0205a376c005a8f0800400387 +:10057000000000000000000000000000000000007b +:020000040000fa +:020000041d00dd +:10058000009d1a3cc0205a3770005a8f0800400363 +:10059000000000000000000000000000000000005b +:020000040000fa +:020000041d00dd +:1005a000009d1a3cc0205a3774005a8f080040033f +:1005b000000000000000000000000000000000003b +:020000040000fa +:020000041d00dd +:1005c000009d1a3cc0205a3778005a8f080040031b +:1005d000000000000000000000000000000000001b +:020000040000fa +:020000041d00dd +:1005e000009d1a3cc0205a377c005a8f08004003f7 +:1005f00000000000000000000000000000000000fb +:020000040000fa +:020000041d00dd +:10060000009d1a3cc0205a3780005a8f08004003d2 +:1006100000000000000000000000000000000000da +:020000040000fa +:020000041d00dd +:10062000009d1a3cc0205a3784005a8f08004003ae +:1006300000000000000000000000000000000000ba +:020000040000fa +:020000041d00dd +:10064000009d1a3cc0205a3788005a8f080040038a +:10065000000000000000000000000000000000009a +:020000040000fa +:020000041d00dd +:10066000009d1a3cc0205a378c005a8f0800400366 +:10067000000000000000000000000000000000007a +:020000040000fa +:020000041d00dd +:10068000009d1a3cc0205a3790005a8f0800400342 +:10069000000000000000000000000000000000005a +:020000040000fa +:020000041d00dd +:1006a000009d1a3cc0205a3794005a8f080040031e +:1006b000000000000000000000000000000000003a +:020000040000fa +:020000041d00dd +:1006c000009d1a3cc0205a3798005a8f08004003fa +:1006d000000000000000000000000000000000001a +:020000040000fa +:020000041d00dd +:1006e000009d1a3cc0205a379c005a8f08004003d6 +:1006f00000000000000000000000000000000000fa +:020000040000fa +:020000041d00dd +:10070000009d1a3cc0205a37a0005a8f08004003b1 +:1007100000000000000000000000000000000000d9 +:020000040000fa +:020000041d00dd +:10072000009d1a3cc0205a37a4005a8f080040038d +:1007300000000000000000000000000000000000b9 +:020000040000fa +:020000041d00dd +:10074000009d1a3cc0205a37a8005a8f0800400369 +:100750000000000000000000000000000000000099 +:020000040000fa +:020000041d00dd +:10076000009d1a3cc0205a37ac005a8f0800400345 +:100770000000000000000000000000000000000079 +:020000040000fa +:020000041d00dd +:10078000009d1a3cc0205a37b0005a8f0800400321 +:100790000000000000000000000000000000000059 +:020000040000fa +:020000041d00dd +:1007a000009d1a3cc0205a37b4005a8f08004003fd +:1007b0000000000000000000000000000000000039 +:020000040000fa +:020000041d00dd +:1007c000009d1a3cc0205a37b8005a8f08004003d9 +:1007d0000000000000000000000000000000000019 +:020000040000fa +:020000041d00dd +:1007e000009d1a3cc0205a37bc005a8f08004003b5 +:1007f00000000000000000000000000000000000f9 +:020000040000fa +:020000041d00dd +:10080000009d1a3cc0205a37c0005a8f0800400390 +:1008100000000000000000000000000000000000d8 +:020000040000fa +:020000041d00dd +:10082000009d1a3cc0205a37c4005a8f080040036c +:1008300000000000000000000000000000000000b8 +:020000040000fa +:020000041d00dd +:10084000009d1a3cc0205a37c8005a8f0800400348 +:100850000000000000000000000000000000000098 +:020000040000fa +:020000041d00dd +:10086000009d1a3cc0205a37cc005a8f0800400324 +:100870000000000000000000000000000000000078 +:020000040000fa +:020000041d00dd +:10088000009d1a3cc0205a37d0005a8f0800400300 +:100890000000000000000000000000000000000058 +:020000040000fa +:020000041d00dd +:1008a000009d1a3cc0205a37d4005a8f08004003dc +:1008b0000000000000000000000000000000000038 +:020000040000fa +:020000041d00dd +:1008c000009d1a3cc0205a37d8005a8f08004003b8 +:1008d0000000000000000000000000000000000018 +:020000040000fa +:020000041d00dd +:1008e000009d1a3cc0205a37dc005a8f0800400394 +:1008f00000000000000000000000000000000000f8 +:020000040000fa +:020000041d00dd +:10090000009d1a3cc0205a37e0005a8f080040036f +:1009100000000000000000000000000000000000d7 +:020000040000fa +:020000041d00dd +:10092000009d1a3cc0205a37e4005a8f080040034b +:1009300000000000000000000000000000000000b7 +:020000040000fa +:020000041d00dd +:10094000009d1a3cc0205a37e8005a8f0800400327 +:100950000000000000000000000000000000000097 +:020000040000fa +:020000041d00dd +:10096000009d1a3cc0205a37ec005a8f0800400303 +:100970000000000000000000000000000000000077 +:020000040000fa +:020000041d00dd +:10098000009d1a3cc0205a37f0005a8f08004003df +:100990000000000000000000000000000000000057 +:020000040000fa +:020000041d00dd +:1009a000009d1a3cc0205a37f4005a8f08004003bb +:1009b0000000000000000000000000000000000037 +:020000040000fa +:020000041d00dd +:1009c000009d1a3cc0205a37f8005a8f0800400397 +:1009d0000000000000000000000000000000000017 +:020000040000fa +:020000041d00dd +:1009e000009d1a3cc0205a37fc005a8f0800400373 +:0409f0000000000003 +:020000040000fa +:020000041d00dd +:10100000009d1a3c10105a27080040030000000001 +:020000040000fa +:020000041d00dd +:1010100000601a40c0045a7f050040130000000021 +:10102000009d1a3c381f5a270800400300000000aa +:1010300000a01d3c0040bd2700a01c3c34009c27a4 +:101040000260094020582001801e2a7d8449497d84 +:1010500002608940c000000000e0dc4102608b407b +:10106000c0000000009d083c4c1f082509f8000145 +:101070000000000000a0083c3400082500a0093c46 +:101080008c0029250600001000000000000000adc3 +:10109000040000ad080000ad0c0000ad10000825f4 +:1010a0002b080901f9ff201400000000009d083cf6 +:1010b000d027082500a0093c0800292500a00a3ceb +:1010c00034004a25050000100000000000000b8dd0 +:1010d00000002bad04000825040029252b082a0157 +:1010e000faff20140000000000488040ffff0a249f +:1010f00000588a40009d093c00002925017889405c +:101100000000093c0100292500000a2444492a7de9 +:1011100001608a408000093c0068894000800840e6 +:101120008005097d404c0900006008405800013ce2 +:10113000244001012540280100608840009d083cb2 +:101140006c1f082509f8000100000000006008403d +:10115000bfff013cffff21342440010100608840b3 +:10116000000084300000a530009d083c7022082556 +:0811700008000001000000006e +:020000040000fa +:020000041d00dd +:10118000f0ffbd270c00beaf21f0a0031000c4afdc +:101190001000c28f0000c2af6b04400b00000000c3 +:1011a0000000c28fffff42240000c2af0000c28fc8 +:1011b000fbff401c0000000021e8c0030c00be8fb4 +:1011c0001000bd270800e00300000000f8ffbd2765 +:1011d0000400beaf0000b0af21f0a0030800c4af10 +:1011e0000800c28f0000508c010010260f00023250 +:1011f0000a00422c020040140000000006001026e5 +:10120000f00002326000422c020040140000000096 +:10121000a0001026000f0232000a422c02004014e7 +:10122000000000000006102600f002320060422c90 +:10123000030040140000000000a0023421800202dc +:101240000f00023c241802020a00023c2b1062002c +:1012500003004014000000000600023c218002024e +:10126000ff00023c241802022400023c2b10620002 +:101270000300401400000000dc00023c2180020258 +:10128000000f023c24180202000a023c2b106200ec +:1012900003004014000000000006023c218002020e +:1012a00000f0023c2418020200a0023c2b10620055 +:1012b0000200401400000000218000000800c28fde +:1012c000000050ac21e8c0030400be8f0000b08fc6 +:1012d0000800bd270800e00300000000e8ffbd276c +:1012e0001400bfaf1000beaf21f0a0031800c4afc0 +:1012f00001000424009d023c542745244805400f6a +:101300000000000002000424009d023c5c274524ec +:101310004805400f000000001800c38f00a0023ce9 +:101320004a004424212860002c06400f00000000e1 +:101330001800c28f0000438c00a0023c5a004424d5 +:10134000212860002c06400f00000000d405400f4b +:101350000000000021e8c0031400bf8f1000be8f02 +:101360001800bd270800e00300000000f8ffbd27bb +:101370000400beaf21f0a003211080000800c2a32a +:101380000000000080bf023c105a42340000428c32 +:1013900008004230fbff40100000000080bf023c0c +:1013a000205a42340800c393000043ac0000000000 +:1013b00080bf023c105a42340000428c010042308f +:1013c000fbff40100000000080bf023c205a423466 +:1013d0000000428cff00423021e8c0030400be8fb1 +:1013e0000800bd270800e00300000000e8ffbd275b +:1013f0001400bfaf1000beaf21f0a00388bf023cb5 +:101400005461423410000324000043ac0a00042459 +:101410006004400f0000000088bf023c5461423469 +:1014200040000324000043ac0f00023c404244341f +:101430006004400f00000000ae000424db04400ff5 +:101440000000000088bf023c946142340002032483 +:10145000000043ac0a0004246004400f00000000b8 +:1014600088bf023c9861423400020324000043ac70 +:101470000a0004246004400f000000008d000424d2 +:10148000db04400f0000000014000424db04400fc4 +:1014900000000000d9000424db04400f000000001d +:1014a000f1000424db04400f0000000088bf023c70 +:1014b0005461423420000324000043ac9800023cf5 +:1014c000809644346004400f00000000a100042412 +:1014d000db04400f00000000c8000424db04400fc0 +:1014e00000000000da000424db04400f00000000cc +:1014f00020000424db04400f00000000af0004249f +:10150000db04400f0000000021e8c0031400bf8f7f +:101510001000be8f1800bd270800e0030000000087 +:10152000f0ffbd270c00beaf21f0a0031000c4af38 +:101530001400c5af1000c28f050040040000000079 +:101540001000c28f04004228030040140000000075 +:101550008105400b000000001400c28f03004014fe +:10156000000000008105400b000000000000c0af3b +:101570007d05400b000000001400c28f0000428077 +:1015800010004010000000001400c28f00004380d3 +:1015900000a0023c1000c48f002904000000c48f8a +:1015a0002120a4003400422421108200000043a026 +:1015b0001400c28f010042241400c2af7a05400b10 +:1015c0000000000000a0023c1000c38f00210300b7 +:1015d0000000c38f211883003400422421106200d0 +:1015e00020000324000043a00000c28f0100422419 +:1015f0000000c2af0000c28f10004228deff40147e +:101600000000000021e8c0030c00be8f1000bd27c1 +:101610000800e00300000000e0ffbd271c00bfaf92 +:101620001800beaf21f0a0032000c4af2400c5af56 +:101630001000c0afca05400b0000000088bf023c8c +:101640005461423410000324000043ac22000424ff +:10165000db04400f000000001000c28fff0042308a +:1016600021204000db04400f000000002000c28f5a +:10167000ff0042300f00423021204000db04400fc9 +:10168000000000002000c28f031102002014027c21 +:101690000f0042302014027c100042342014027cdf +:1016a000ff00423021204000db04400f000000001a +:1016b00088bf023c5861423410000324000043ac50 +:1016c0001400c0afc305400b000000001000c28f23 +:1016d000401902001400c28f21106200211840003e +:1016e0002400c28f21104300000042902710020006 +:1016f000ff00423021204000db04400f00000000ca +:101700001400c28f010042241400c2af1400c28f23 +:1017100020004228edff4014000000001000c28f9e +:10172000010042241000c2af1000c28f0400422802 +:10173000c2ff40140000000021e8c0031c00bf8f5e +:101740001800be8f2000bd270800e0030000000045 +:10175000d8ffbd272400bfaf2000beaf21f0a003fb +:101760001000c0af2206400b0000000088bf023c02 +:101770005461423410000324000043ac22000424ce +:10178000db04400f000000001000c28fff00423059 +:1017900021204000db04400f000000002120000059 +:1017a000db04400f0000000010000424db04400fa5 +:1017b0000000000088bf023c58614234100003243e +:1017c000000043ac1400c0af1b06400b000000003b +:1017d00000a0023c1000c38f002103001400c38f3f +:1017e000211883003400422421106200000042804e +:1017f0001c00c2af1c00c28f8000423003004010aa +:10180000000000001806400b000000001800c0afe8 +:101810001406400b000000001c00c28fc01802001c +:101820001800c28f21186200009d023cd42242247d +:10183000211062000000429021204000db04400f94 +:10184000000000001800c28f010042241800c2af3f +:101850001800c28f08004228efff4014000000006b +:101860001400c28f010042241400c2af1400c28fc2 +:1018700010004228d6ff4014000000001000c28f64 +:10188000010042241000c2af1000c28f04004228a1 +:10189000b6ff40140000000021e8c0032400bf8f01 +:1018a0002000be8f2800bd270800e00300000000d4 +:1018b000f0ffbd270c00beaf21f0a0031000c4afa5 +:1018c0001400c5af1c0002240000c2af4406400b48 +:1018d000000000001000c28f010043241000c3afbd +:1018e0001400c48f0000c38f071864000f00643019 +:1018f000009d033c6427632421188300000063805b +:10190000000043a00000c28ffcff42240000c2afd1 +:101910000000c28fefff41040000000021e8c00377 +:101920000c00be8f1000bd270800e003000000007f +:10193000f0ffbd270c00beaf0800b2af0400b1af8e +:101940000000b0af21f0a0031000c4af2180000060 +:101950001000c28f03004228150040100000000054 +:101960001000c28f0400401c00000000010002248f +:101970008f06400b000000001000c38f01000224fe +:101980000400621400000000020002248f06400bd5 +:10199000000000001000c38f020002240700621440 +:1019a00000000000030002248f06400b000000002e +:1019b0001000c28f01004224010050342190000029 +:1019c0008b06400b00000000030011247f06400b33 +:1019d0000000000001001224f40120021a0011028c +:1019e00010100000040040140000000021900000ce +:1019f0008406400b00000000010031264310100057 +:101a0000010042242a105100f2ff401000000000a3 +:101a10000100022404004216000000002110000210 +:101a20008f06400b00000000020010260100022477 +:101a3000e5ff4216000000002110000221e8c0036b +:101a40000c00be8f0800b28f0400b18f0000b08f71 +:101a50001000bd270800e00300000000f0ffbd27d4 +:101a60000c00beaf0800b1af0400b0af21f0a0037e +:101a70001000c4af00a0023c74004224170040a034 +:101a80001000d18f1000c28f190041040000000027 +:101a90001000c28fffff4224150040180000000014 +:101aa00021800000b506400b000000000100042664 +:101ab000009d023c7827422421100202000043804e +:101ac00000a0023c7400422421108200000043a0c8 +:101ad00001001026211000020c00422cf3ff4014dc +:101ae0000000000021800000ec06400b0000000018 +:101af0001000c28f04004104000000001000c28fdb +:101b0000231002001000c2af160010241000c38f73 +:101b10006666023c676642341800620010100000de +:101b200083200200c317030023108200401002002c +:101b3000802002002110440023106200ff00423088 +:101b400030004224ff004230201c027c00a0023cf6 +:101b50007400422421100202000043a01000c28f32 +:101b60006666033c67666334180043001018000083 +:101b700083180300c3170200231062001000c2afd5 +:101b8000ffff10261000c28fe0ff401c0000000085 +:101b9000070021060000000000a0023c740042245f +:101ba000211002022d000324000043a0ffff102695 +:101bb0000100032600a0023c7400422421106200b0 +:101bc00021e8c0030c00be8f0800b18f0400b08f65 +:101bd0001000bd270800e00300000000e8ffbd275b +:101be0001400bfaf1000beaf21f0a00380bf023cc5 +:101bf00030f2423499aa033c55666334000043ac8a +:101c000080bf023c30f242346655033caa996334eb +:101c1000000043ac0000000080bf023c00f04234f2 +:101c20000000438c2000023c24106200faff4014a4 +:101c30000000000080bf023c04f042341800033c66 +:101c4000000043ac0000000080bf023c00f04234c2 +:101c50000000438c2000023c24106200faff401474 +:101c60000000000080bf023c30f24234000040ac73 +:101c700080bf023c60904234ffff0334000043ac5d +:101c800088bf023c30614234000040ac88bf023c57 +:101c900004614234ff000324000043ac88bf023ccf +:101ca00010614234000040ac88bf023c50614234b5 +:101cb000ffff0334000043ac88bf023c9061423414 +:101cc00000020324000043ac88bf023c7061423430 +:101cd000000040ac88bf023cb0614234000040ac20 +:101ce00088bf023c4461423470000324000043acce +:101cf00088bf023c8461423400020324000043acec +:101d000088bf023cc860423400010324000043ac99 +:101d100088bf023c4861423402000324000043ac07 +:101d200080bf023c005a4234000040ac80bf023cfd +:101d3000305a423404000324000043ac80bf023c0c +:101d4000145a423440000324000043ac80bf023cdc +:101d5000085a423440000324000043ac80bf023cd8 +:101d6000085a423420000324000043ac80bf023ce8 +:101d7000085a423400800334000043acfb04400f97 +:101d80000000000021200000009d023c8427452423 +:101d90004805400f0000000001000424009d023ca3 +:101da000902745244805400f00000000020004244d +:101db000009d023c9c2745244805400f0000000080 +:101dc00003000424009d023ca82745244805400f39 +:101dd00000000000d405400f000000006000042453 +:101de000009d023cd42645248605400f00000000db +:101df0008b07400f00000000aa07400f0000000002 +:101e00007c07400b00000000f8ffbd270400beafb8 +:101e100021f0a0030000000021e8c0030400be8ff1 +:101e20000800bd270800e00300000000e0ffbd2718 +:101e30001c00bfaf1800beaf21f0a00388bf023c5a +:101e4000006142341000c2af88bf023c10614234ce +:101e50001400c2af1400c28f0000428c0100432462 +:101e60001400c28f000043ac1400c48f7304400ff1 +:101e7000000000001400c28f0000438c0001022407 +:101e800003006214000000001400c28f000040ac88 +:101e900021e8c0031c00bf8f1800be8f2000bd27a3 +:101ea0000800e00300000000e8ffbd271400bfaffa +:101eb0001000beaf21f0a003e8030424e807400fa0 +:101ec0000000000000a0023c0800438c00a0023c7f +:101ed0000c004424212860000008400f000000008e +:101ee0000300042400a0023c0c0045244805400fd8 +:101ef00000000000d405400f0000000000a0023cdc +:101f0000080044247304400f000000006000042413 +:101f1000009d023cd42645248605400f00000000a9 +:101f200021e8c0031400bf8f1000be8f1800bd272a +:101f30000800e00300000000f8ffbd270400beaf6a +:101f400021f0a003d107400b00000000f8ffbd27df +:101f50000400beaf21f0a00321e8c0030400be8f3f +:101f60000800bd270800e00300000000f8ffbd27bf +:101f70000400beaf21f0a00321e8c0030400be8f1f +:101f80000800bd270800e003000000000f008430b7 +:101f9000300082200800e003000000000000000084 +:101fa0000700133c3c30733600000e2400000f2461 +:101fb000ef07400b00000000000000000d00e411de +:101fc0000000000000000000ffff8520f607400b26 +:101fd0000000000000000000f8ffd3110000000026 +:101fe000000000000100ce21f607400b00000000b9 +:101ff000000000000800e0030000000000000000f6 +:10200000fcffbd230000b0affcffbd230000b1af5b +:10201000fcffbd230000bfaffcffbd230000a4af49 +:102020002080a0002088800002231000e307400fda +:102030000000000000000000000022a202221000a8 +:10204000e307400f0000000000000000010022a292 +:102050003a000c240000000002002ca20221100013 +:10206000e307400f0000000000000000030022a270 +:1020700020200002e307400f0000000000000000e5 +:10208000040022a200000d240000000005002da283 +:102090000000a48f0400bd230000bf8f0400bd23f7 +:1020a0000000b18f0400bd230000b08f0400bd23e9 +:1020b0000800e00300000000000000000000000035 +:1020c000c021009dc021009dc021009dc021009d18 +:1020d000c021009dc021009dc021009dc021009d08 +:1020e000c021009dc021009dc021009dc021009df8 +:1020f000c021009dc021009dc021009dc021009de8 +:10210000c021009dc021009dc021009dc021009dd7 +:10211000c021009dc021009dc021009dc021009dc7 +:10212000c021009dc021009dc021009dc021009db7 +:10213000c021009dc021009dc021009dc021009da7 +:10214000c021009dc021009dc021009dc021009d97 +:10215000c021009dc021009dc021009dc021009d87 +:10216000c021009dc021009dc021009dc021009d77 +:10217000c021009dc021009dc021009dc021009d67 +:10218000c021009dc021009dc021009dc021009d57 +:10219000c021009dc021009dc021009dc021009d47 +:1021a000c021009dc021009dc021009dc021009d37 +:1021b000c021009dc021009dc021009dc021009d27 +:1021c000b8ffbd230000bfaf0400a1af0800a2af5d +:1021d0000c00a3af1000a4af1400a5af1800a6af69 +:1021e0001c00a7af2000a8af2400a9af2800aaaf09 +:1021f0002c00abaf3000acaf3400adaf3800aeafa9 +:102200003c00afaf4000b8af4400b9af8207400f09 +:10221000000000004400b98f4000b88f3c00af8f31 +:102220003800ae8f3400ad8f3000ac8f2c00ab8ff8 +:102230002800aa8f2400a98f2000a88f1c00a78f38 +:102240001800a68f1400a58f1000a48f0c00a38f78 +:102250000800a28f0400a18f0000bf8f4800bd239b +:102260001800004200000000000000000000000014 +:10227000000084300000a530f706400f0000000089 +:08228000ffff00100000000048 +:020000040000fa +:020000041d00dd +:102288004c000000ffffffff0e030001fffffffff0 +:10229800ffffffff010002010010009d0000009dec +:1022a80000f0010000f0019d00100000f02fc0bff9 +:1022b80010000000000000a008000000ffffffff62 +:0c22c8002002009d0002009d200000008c +:020000040000fa +:020000041d00dd +:1022d40000000000000000000000000000000000fa +:1022e40000000000000000000000000000000000ea +:1022f40000000000000000000000000000000000da +:1023040000000000000000000000000000000000c9 +:1023140000000000000000000000000000000000b9 +:1023240000000000000000000000000000000000a9 +:102334000000000000000000000000000000000099 +:102344000000000000000000000000000000000089 +:102354000000000000000000000000000000000079 +:102364000000000000000000000000000000000069 +:102374000000000000000000000000000000000059 +:102384000000000000000000000000000000000049 +:102394000000000000000000000000000000000039 +:1023a4000000000000000000000000000000000029 +:1023b4000000000000000000000000000000000019 +:1023c4000000000000000000000000000000000009 +:1023d40000000000000000000000005e000000009b +:1023e400000004030403000000247e24247e24004f +:1023f40000244aff522400000046261008646200ac +:1024040000344a4a34205000000000040300000055 +:102414000000007e81000000000000817e000000ba +:10242400002a1c3e1c2a00000008083e0808000080 +:102434000000008060000000000808080808000090 +:1024440000000000600000000040201008040200aa +:10245400003e4149413e00000000427f4000000030 +:10246400000062514946000000002249493600003c +:1024740000000e087f0800000000234545390000d5 +:1024840000003e49493200000000016119070000c4 +:10249400000036494936000000000609097e0000a4 +:1024a40000000066000000000000806600000000dc +:1024b4000000081422410000000014141414000049 +:1024c4000000412214080000000201510906000026 +:1024d400001c225959520c0000007e09097e00009c +:1024e40000007f494936000000003e4141220000bf +:1024f40000007f41413e000000007f494941000047 +:1025040000007f090901000000003e415132000033 +:1025140000007f08087f00000000417f41000000a8 +:1025240000002040403f000000007f0814630000ca +:1025340000007f4040400000007f0204027f000052 +:10254400007f0608307f000000003e41413e00004d +:1025540000007f090906000000003e41617e400042 +:1025640000007f0909760000000026494932000076 +:102574000001017f0101000000003f40403f0000d6 +:10258400001f2040201f0000003f4030403f00005b +:1025940000007708087700000003047804030000b3 +:1025a400000071494947000000007f4141000000dc +:1025b400000204081020400000000041417f000098 +:1025c400000402010204000000404040404040007a +:1025d40000000102040000000000304828780000d8 +:1025e40000007f48483000000000304848000000e8 +:1025f40000003048487f00000000305858100000a8 +:1026040000007e090102000000005098987000004c +:1026140000007f08087000000000007a000000003d +:1026240000004080807a000000007f1028480000ed +:102634000000007f0000000000780810087000000f +:10264400000078080870000000003048483000009e +:102654000000f828281000000000102828f80000c6 +:1026640000007008081000000000485454240000c2 +:102674000000083c4820000000003840207800009a +:102684000000384038000000003840204038000086 +:102694000000483030480000000018a0a078000076 +:1026a40000006454544c00000000081c2241000047 +:1026b4000000007e00000000000041221c08000011 +:1026c4000000040204020000007844424478000040 +:1026d400ffffffffffff7fbb445faa5da3d7af5f90 +:1026e400af5faf5fdf6faff73bedf2feabfe01ff15 +:1026f400ffff0fd36d3afd08b24d3ac77ac5f2ad6c +:10270400f2edbad728d729d623af5bd43fea956f29 +:10271400ab54fdfcfefd7eb8c334c916e11bc413e3 +:10272400a54a249248a25508e219a650a7d8a7584a +:102734006a95a15f875baf578e7b867f86798679a2 +:10274400843bc01ba44ab146b845ba45fe50afd934 +:102754004164647200000000446174610000000080 +:1027640030313233343536373839414243444546c3 +:10277400000000002d323134373438333634380019 +:102784004b54482f494354206c616200696e2043c6 +:102794006f6d707574657200456e67696e656572fc +:1027a400696e670057656c636f6d652100000000fa +:020000040000fa +:020000041d00dd +:1027b80000002002010000030000000000000000eb +:0827c800010000000000000008 +:020000040000fa +:020000041d00dd +:1027d00057590000746578742c206d6f72652074f1 +:1027e0006578742c20616e64206576656e206d6f4f +:0c27f00072652074657874210000000000 +:00000001FF diff --git a/snake.h b/snake.h new file mode 100644 index 0000000..e69de29 diff --git a/stubs.c b/stubs.c new file mode 100644 index 0000000..0fe933c --- /dev/null +++ b/stubs.c @@ -0,0 +1,20 @@ +/* stubs.c + * This file written 2015 by Axel Isaksson + * This copyright notice added 2015 by F Lundevall + + * For copyright and licensing, see file COPYING */ + +/* Non-Maskable Interrupt; something bad likely happened, so hang */ +void _nmi_handler() { + for(;;); +} + +/* This function is called upon reset, before .data and .bss is set up */ +void _on_reset() { + +} + +/* This function is called before main() is called, you can do setup here */ +void _on_bootstrap() { + +} diff --git a/stubs.c.o b/stubs.c.o new file mode 100644 index 0000000..445c6e3 Binary files /dev/null and b/stubs.c.o differ diff --git a/vectors.S b/vectors.S new file mode 100644 index 0000000..7847274 --- /dev/null +++ b/vectors.S @@ -0,0 +1,252 @@ + # vectors.S + # This file written 2015 by Axel Isaksson + # Modified 2015 by F Lundevall + # For copyright and licensing, see file COPYING + +.macro movi reg, val + lui \reg, %hi(\val) + ori \reg, \reg, %lo(\val) +.endm + +.macro STUB num + .align 4 + .section .vector_new_\num,"ax",@progbits + .global __vector_\num + __vector_\num: + movi $k0, _isr_primary_install + lw $k0, \num * 4($k0) + jr $k0 +.endm + +.align 4 +.global __use_isr_install +__use_isr_install: +STUB 0 +STUB 1 +STUB 2 +STUB 3 +STUB 4 +STUB 5 +STUB 6 +STUB 7 + +STUB 8 +STUB 9 +STUB 10 +STUB 11 +STUB 12 +STUB 13 +STUB 14 +STUB 15 + +STUB 16 +STUB 17 +STUB 18 +STUB 19 +STUB 20 +STUB 21 +STUB 22 +STUB 23 + +STUB 24 +STUB 25 +STUB 26 +STUB 27 +STUB 28 +STUB 29 +STUB 30 +STUB 31 + +STUB 32 +STUB 33 +STUB 34 +STUB 35 +STUB 36 +STUB 37 +STUB 38 +STUB 39 + +STUB 40 +STUB 41 +STUB 42 +STUB 43 +STUB 44 +STUB 45 +STUB 46 +STUB 47 + +STUB 48 +STUB 49 +STUB 50 +STUB 51 +STUB 52 +STUB 53 +STUB 54 +STUB 55 + +STUB 56 +STUB 57 +STUB 58 +STUB 59 +STUB 60 +STUB 61 +STUB 62 +STUB 63 + +.text + +.align 4 +.global _isr_primary_install +_isr_primary_install: +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +# Interrupts are handled here +.align 4 +.set noreorder +.global _isr_trampoline +_isr_trampoline: + # this is an interrupt service routine + + # tell the assembler not to use $1 right now + .set noat + + # save all caller-save registers, and also ra + addi $sp,$sp,-72 + sw $ra, 0($sp) + sw $1, 4($sp) # $at + sw $2, 8($sp) # $v0 + sw $3,12($sp) # $v1 + sw $4,16($sp) # $a0 + sw $5,20($sp) # $a1 + sw $6,24($sp) # $a2 + sw $7,28($sp) # $a3 + sw $8,32($sp) # $t0 + sw $9,36($sp) # $t1 + sw $10,40($sp) # $t2 + sw $11,44($sp) # $t3 + sw $12,48($sp) # $t4 + sw $13,52($sp) # $t5 + sw $14,56($sp) # $t6 + sw $15,60($sp) # $t7 + sw $24,64($sp) # $t8 + sw $25,68($sp) # $t9 + + # Any callee-saved regs ($s0 etc) used by user's handler + # will be saved and restored by that handler + # (the C compiler will see to that). + + # call user's handler + jal user_isr + nop + + # restore saved registers + lw $25,68($sp) + lw $24,64($sp) + lw $15,60($sp) + lw $14,56($sp) + lw $13,52($sp) + lw $12,48($sp) + lw $11,44($sp) + lw $10,40($sp) + lw $9,36($sp) + lw $8,32($sp) + lw $7,28($sp) + lw $6,24($sp) + lw $5,20($sp) + lw $4,16($sp) + lw $3,12($sp) + lw $2, 8($sp) + lw $1, 4($sp) + lw $ra, 0($sp) + addi $sp,$sp,72 + + .set at + # now the assembler is allowed to use $1 again + + # standard epilogue follows + eret + nop + + +# Exceptions are handled here (trap, syscall, etc) +.section .gen_handler,"ax",@progbits +.set noreorder +.ent _gen_exception +_gen_exception: + mfc0 $k0, $14, 0 + addi $k0, $k0, 4 + mtc0 $k0, $14, 0 + eret + nop + +.end _gen_exception diff --git a/vectors.S.o b/vectors.S.o new file mode 100644 index 0000000..ac5482c Binary files /dev/null and b/vectors.S.o differ