Pārlūkot izejas kodu

fw/roms: common infrastructure for ROMs

H. Peter Anvin 3 gadi atpakaļ
vecāks
revīzija
ff477a6b16
4 mainītis faili ar 42 papildinājumiem un 12 dzēšanām
  1. 10 2
      fw/Makefile
  2. 10 10
      fw/boot.mif
  3. 22 0
      fw/rom.S
  4. BIN
      fw/roms/ufddos80.rom

+ 10 - 2
fw/Makefile

@@ -36,12 +36,15 @@ boot_depth  := 8192
 boot_width  := 32
 boot_stride := 1
 
+ROMS    := $(wildcard roms/*.rom)
+ROMOBJS  = $(ROMS:.rom=.o)
+
 max80.elf: head.o die.o main.o dummy.o irqtable.o irqasm.o sbrk.o \
 	  console.o rtc.o \
 	  sdcard.o diskcache.o \
 	  abcio.o abcdisk.o \
 	  memset.o memcpy.o \
-	  testdata.o \
+	  testdata.o $(ROMOBJS) \
 	  fatfs.a
 
 FATFS_C = $(wildcard fatfs/source/*.c)
@@ -88,6 +91,10 @@ dram.hex: max80.elf
 %.s: %.S | $(genhdrs)
 	$(CC) $(SFLAGS) $(SFLAGS_$<) $(gendeps) -E -o $@ $<
 
+roms/%.o: roms/%.rom rom.S
+	$(CC) $(SFLAGS) $(SFLAGS_$(F<)) -DNAME='rom_$*' -DFILE='"$<"' \
+		-c -o $@ rom.S
+
 %.ild: %.ld | $(genhdrs)
 	$(CC) $(CFLAGS) $(CFLAGS_$<) $(gendeps) \
 		-x assembler-with-cpp \
@@ -101,7 +108,8 @@ irqtable.c: ../iodevs.conf ../tools/iodevs.pl
 	$(PERL) ../tools/iodevs.pl c $< $@
 
 clean:
-	rm -f *.o *.i *.s *.elf *.bin .*.d *.ild $(genhdrs) $(gensrcs)
+	rm -f *.o *.i *.s *.elf *.bin .*.d *.ild roms/*.o
+	rm -f $(genhdrs) $(gensrcs) $(ROMOBJS)
 
 spotless: clean
 	rm -f *.mem *.hex *.mif

+ 10 - 10
fw/boot.mif

@@ -54,7 +54,7 @@ CONTENT BEGIN
 002F : 00000604;
 0030 : 00000604;
 0031 : 00001594;
-0032 : 40085D00;
+0032 : 40086D00;
 0033 : 000000FF;
 0034 : 000055B8;
 0035 : 00000000;
@@ -374,14 +374,14 @@ CONTENT BEGIN
 016F : 03934000;
 0170 : 20230003;
 0171 : 05379870;
-0172 : 05B70010;
+0172 : 15B70010;
 0173 : 22230008;
 0174 : 869398A0;
 0175 : 24230005;
 0176 : 808298D0;
 0177 : C0102E73;
 0178 : 0E002F03;
-0179 : 400807B7;
+0179 : 400817B7;
 017A : 00078293;
 017B : 41EE0FB3;
 017C : 01F8A023;
@@ -395,7 +395,7 @@ CONTENT BEGIN
 0184 : 80820655;
 0185 : 0C800293;
 0186 : A503872A;
-0187 : 66B70002;
+0187 : 76B70002;
 0188 : 83934048;
 0189 : 0333D006;
 018A : FC6300E5;
@@ -1171,7 +1171,7 @@ CONTENT BEGIN
 048C : 829334F2;
 048D : 073385D4;
 048E : D4220255;
-048F : CA37CC52;
+048F : DA37CC52;
 0490 : CA564108;
 0491 : 0A936795;
 0492 : D606D00A;
@@ -1240,8 +1240,8 @@ CONTENT BEGIN
 04D1 : E541B741;
 04D2 : 0F800793;
 04D3 : 10000293;
-04D4 : 40086337;
-04D5 : C5B76611;
+04D4 : 40087337;
+04D5 : D5B76611;
 04D6 : C3DC4108;
 04D7 : A223C39C;
 04D8 : A0230052;
@@ -1264,7 +1264,7 @@ CONTENT BEGIN
 04E9 : 01D7A823;
 04EA : 0007AA23;
 04EB : 97E397C6;
-04EC : C6B7FDE7;
+04EC : D6B7FDE7;
 04ED : 82934108;
 04EE : 8733D006;
 04EF : A22300C2;
@@ -1609,7 +1609,7 @@ CONTENT BEGIN
 0642 : D2E6D4E2;
 0643 : CEEED0EA;
 0644 : C01027F3;
-0645 : 40080437;
+0645 : 40081437;
 0646 : 0C136B05;
 0647 : 44810004;
 0648 : 00040413;
@@ -1748,7 +1748,7 @@ CONTENT BEGIN
 06CD : 08100693;
 06CE : 05934611;
 06CF : BF7D034C;
-06D0 : 07B77179;
+06D0 : 17B77179;
 06D1 : D2264008;
 06D2 : CA56CE4E;
 06D3 : C65EC85A;

+ 22 - 0
fw/rom.S

@@ -0,0 +1,22 @@
+/*
+ * ROM wrapper
+ */
+
+.macro __rom name
+	.globl \name
+	.section ".dram.abcrom","a"
+	.balign 512		/* Required MMU granulatity */
+\name :
+	.incbin FILE
+
+	.type \name, @object
+	.size \name, . - \name
+
+	.globl \name\()_size
+	\name\()_size = . - \name
+
+	.globl \name\()_end
+	\name\()_end = .
+.endm
+
+	__rom name=NAME

BIN
fw/roms/ufddos80.rom