From 05616c3199b06997f54e4a0b2928a7fb1a4636af Mon Sep 17 00:00:00 2001 From: Fredrik Date: Tue, 23 Feb 2021 09:35:01 +0100 Subject: [PATCH] First --- Makefile | 85 +++++++ display.c | 0 main.c | 0 outfile.elf | Bin 0 -> 23616 bytes outfile.hex | 664 ++++++++++++++++++++++++++++++++++++++++++++++++++++ snake.h | 0 stubs.c | 20 ++ stubs.c.o | Bin 0 -> 1424 bytes vectors.S | 252 ++++++++++++++++++++ vectors.S.o | Bin 0 -> 15332 bytes 10 files changed, 1021 insertions(+) create mode 100644 Makefile create mode 100644 display.c create mode 100644 main.c create mode 100644 outfile.elf create mode 100644 outfile.hex create mode 100644 snake.h create mode 100644 stubs.c create mode 100644 stubs.c.o create mode 100644 vectors.S create mode 100644 vectors.S.o 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 0000000000000000000000000000000000000000..f95ffee0d52f28e0aaffcf0433e62200e31554ec GIT binary patch literal 23616 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 NMf7EMsC`I%{{wdKPP703 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..445c6e368ef2cf5c0dd1a677c444f9a74a8bb483 GIT binary patch literal 1424 zcmbtTziSjx5T3m~lS`r|28#nhH-+Sf@Q|1y2?!^_L?MdekJ58Dx4ApK+dX#oAXXMO zb~gS2`44O?Y$E;WduvR22$*i20U-{8uRla;&_DP9Hr z6g3#LdjoC!&hy-yVIx2_uVwGV#fI3Q5f`hwUcUWzRKWg>DM4EBbOu{tG3M+`?44=>+2wpk9v0iLtX53o^&IbGyd!gX}623*2 znb1j`^QpE8Rc&7ZPC*-**Y%IZt9YJyeBakKH$TKXa9ecCasy80pOtqLIp_@&kA?N> zh5&glYi>YSkXHdx4xx4)?;_uYnjT=vXXr~BTFkun!0mZGG|KawxA?z+toayf*Q?va ziZ!*(c__@Y-#L#_JJ6qb9s>$lfpg9fAaf{}pk{aEn+P1x&|>n4W+x1Nf@1`{2%Uy< SUe@QVcD)Zc^cFrNrrsYl=$>5w literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ac5482cb5afde7d8a7f6b0c7b590380c1bbc8fca GIT binary patch literal 15332 zcmeI2e{fXQ6~|A=@=J7p5()?miwOlQhHQ2>K+&>DC?GI`KvBWjEXf)&gd`>#fdNVo z5PzWSOw*~>AB~z8D%iEtbc$7LI%Y;&ZMBtFt42FO+R}42_wGCAUT^RJ z9q#Zr_j|v0Kli*J_wBoHvwzv@uM`y(fi6Wb3IYYtGYg<-9JIvp9p=D2aF_0SKH?EL zb?(_xfah`{cqBIp9?e|{kLAWecdi7!lba0R%}s-2xiB2hmBIINbKvpZTsV=dfRnix zJds-f-_KnExm*HH<*MPS9O5pdgNpSmwq?=FVxKJb&EjXW_}MHnvdGFJGmGpjj*-Q& zvN&cI$IfC7SpcDzk6+{Q>pcE8kKgF=TReWo48thEizxRzg2tEE$X6`1MWgP&5)Np<*a+ z+r1-`+KMsLIuy6*T5GzoJd@s)f%3XkCI#hN+uESKHC^A(bW<~wuUWZveR*nY!%dB; z`h0t1c}ra@b!aTVC0(0oZcR3&cP1;WmWb6-X|+VHmYCHNw_2*Kmibo80;^@A)e`xP zr0uLDcG?j;?}(jv#Lhforyj9$kJ!ma?CdM;>?`f;EA8wn?d&V<>?`f;EA8wn?d&V< z>?`f;qjvUDJNu}eebmlAYG)s{vya-@NA2vRcJ@&_`C|%+OV}flWq%^NUFxyT*bHwr#q=G#ke%PNDGX`5Q5JMJsQG7 zkAZTbF9KYs6-qITg{upSc;n$Zp(nsiLQjN@(39X+p{KyTLQjQZfft3o1AZ&?aQK7JBj6*UN5bEQz7vLpg6m~G-hWDj9t|^uE`pfQV_>n+7s1s+ zkA;mwkB1teC%|^0C&Dd4Pl5wNPl2OCPlay^JslnsdIsQ2xe3Kj`n3(JL0!+N3XAt`hNY!`Yv>=b$j92B}4vO?bs z4+z}`$AoT&9}2w_o)daEyd?AT}j<}Rr(V~dE zGAmjPaaU$Viy-dGtZ4DWTw3^WDYK#l4|io&w9w(M%!(E`+?83;!iKvtD_YPnmliWz z%B-wKjO#^B{w0mE!bv9E+tSH~w$@}rQ(Gq0*a*p_8ma>F?JcbhJ5sH?Z9fuptqiKs zpc)IR@t|52RObiP1wnOTP{mnaNGHO^!}%Vxvk`Ho2kmT3oZ~?|8x?1F(9Xuid0lA7 zNgdSLxHz4Ib~Y|ft%@5|r1uE)xh*Qzs92}sHWeFHY*8_z;w}~Us@S38Ar)^|@u-UT zs@SRGeJVbvVwZ~DDjrwyq>4|f*rVbp6`xVDSH(URUsUmB6<<~Hw2E)2__m7uDh{al zzKS2J__2zEDxOvGQx#X^GgpXqmUQ({9KLGkdKiI`%6WbMc!cmeIDb9lr^EmKd>Gox z|NZ|Av}w7fmw5@SKgr$^jzdjlDsH23OW;PO8$UP--<{Ddhq}{sH43*`O6%7~A2SwO zdTEGnUWfYo`c+^*%&mn!ONDrohpPGiX%=P@KZB=_-#YBWc|FJ@k9gFsdG%Q5yc!3uR(&pk zkxC!qjX|w>yRpuB9S&YQ_T%}TW<2^$LG$i1cwG+O5ra3tc=R){<~?NadL6v`4c;K* zjb}Xi13A9G{SMv`!F$Kx#Tai2!Po}4-8%jfMN3dh8?_54PF`J z;U5wgcoPg>!oeGh{rLHaF&;fT=={E5@M;{qOAKB$<1J#mg$A#~!HXNb4UBgstVc=jQ3N6SL5K(@80}+?qj@F zjQ4AU*Wuv((%_wDyfutBVDP#eJbLcp`3*4MHH>%0;PpCqpBTJB#-nFzeSR+}mgl42 z!5e}7cz&U>;QqIs@unL*diW2cuZzC^rWm{u#-lZY&acAYg&n-P2Ct0qHZk5(gO_md z78|@6<6X~qUp06&4&Jo}ubS~TGhTzi>u~VW25$r7-N<-*4PKXnx69zwFX?=J(4*UWgc4PLKK8!P~%i`xx(}!RvDHjvKr>#@o+$&l$X42ao;^3N1+BMkT{| z2T-G(Kfk{*c>NCEuMFNH#yiM(?;1R~;Ips4cMM)9;~i$avj#7Wyb|