2
0
Эх сурвалжийг харах

Move date stamp generation to fpga build; record SDRAM checksum

Move the generation of the date stamp into the fpga build, to make
sure it reflects any changes including RTL-only changes. It is still a
.mif-only change and is conditional on dependency changes, so it does
not end up forcing an unnecessary RTL recompile.

Compute the expected checksum of the SDRAM memory data (dram.bin) and
record it in the .mif for validation.
H. Peter Anvin 3 жил өмнө
parent
commit
9471dad838

+ 1 - 0
fpga/.gitignore

@@ -1,3 +1,4 @@
+output/*.bin
 output/*.jam
 output/*.map
 output/*.jdi

+ 19 - 5
fpga/Makefile

@@ -23,7 +23,8 @@ outdir		= output
 
 PERL    = perl
 
-SUBDIRS = usb
+SUBDIRS     = usb
+PREREQFILES = $(outdir)/sram.mif
 
 alltarg := sof jic pow.rpt sta.rpt
 allout   = $(foreach o,$(alltarg),$(outdir)/$(1).$(o))
@@ -47,13 +48,24 @@ $(REVISIONS):
 %.targets:
 	$(MAKE) $(call allout,$*)
 
-$(outdir)/%.map.rpt: %.qsf
+$(outdir)/%.map.rpt: %.qsf %_map_deps
 	$(QMAP) $(PROJECT) -c $*
 
 $(outdir)/%.fit.rpt: $(outdir)/%.map.rpt
-	$(QFIT)  $(PROJECT) -c $*
+	$(QFIT) $(PROJECT) -c $*
 
-$(outdir)/%.mif_update.rpt: $(outdir)/%.fit.rpt
+all_map_deps: $(foreach rev,$(REVISIONS),$(rev),$(rev)_map_deps)
+
+$(outdir)/sram.bin: ../rv32/boot.bin $(all_map_deps)
+	LC_ALL=C date | tr '\n' '\0' | cat $< - > $@
+
+sram_depth  := 8192
+sram_width  := 32
+sram_stride := 1
+$(outdir)/%.mif: $(outdir)/%.bin ../tools/bin2mif.pl
+	$(PERL) ../tools/bin2mif.pl $< $@ $($*_depth) $($*_width) $($*_stride)
+
+$(outdir)/%.mif_update.rpt: $(outdir)/%.fit.rpt $(outdir)/sram.mif
 	$(QCDB) --update_mif $(PROJECT) -c $*
 
 $(outdir)/%.sof: $(outdir)/%.mif_update.rpt
@@ -69,8 +81,10 @@ $(outdir)/%.pow.rpt: $(outdir)/%.sta.rpt
 $(outdir)/%.jic:  $(PROJECT)-%.cof $(outdir)/%.sof ../rv32/dram.hex
 	$(QCPF) --convert $<
 
-# Prerequisite directories
+# Prerequisite directories and files
 prereq:
+	mkdir -p $(outdir)
+	$(MAKE) $(PREREQFILES)
 	for d in $(SUBDIRS); do $(MAKE) -C $$d; done
 
 # Clean out SignalTap

+ 3 - 3
fpga/ip/fastmem_ip.v

@@ -97,7 +97,7 @@ module fastmem_ip (
 		altsyncram_component.byte_size = 8,
 		altsyncram_component.clock_enable_input_a = "BYPASS",
 		altsyncram_component.clock_enable_output_a = "BYPASS",
-		altsyncram_component.init_file = "../rv32/boot.mif",
+		altsyncram_component.init_file = "output/sram.mif",
 		altsyncram_component.intended_device_family = "Cyclone IV E",
 		altsyncram_component.lpm_hint = "ENABLE_RUNTIME_MOD=NO",
 		altsyncram_component.lpm_type = "altsyncram",
@@ -136,7 +136,7 @@ endmodule
 // Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
 // Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
 // Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
-// Retrieval info: PRIVATE: MIFfilename STRING "../rv32/boot.mif"
+// Retrieval info: PRIVATE: MIFfilename STRING "output/sram.mif"
 // Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "8192"
 // Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
 // Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "2"
@@ -154,7 +154,7 @@ endmodule
 // Retrieval info: CONSTANT: BYTE_SIZE NUMERIC "8"
 // Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
 // Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS"
-// Retrieval info: CONSTANT: INIT_FILE STRING "../rv32/boot.mif"
+// Retrieval info: CONSTANT: INIT_FILE STRING "output/sram.mif"
 // Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
 // Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO"
 // Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"

+ 2 - 2
fpga/max80.qpf

@@ -19,12 +19,12 @@
 #
 # Quartus Prime
 # Version 21.1.0 Build 842 10/21/2021 SJ Lite Edition
-# Date created = 04:32:14  January 27, 2022
+# Date created = 00:17:28  January 28, 2022
 #
 # -------------------------------------------------------------------------- #
 
 QUARTUS_VERSION = "21.1"
-DATE = "04:32:14  January 27, 2022"
+DATE = "00:17:28  January 28, 2022"
 
 # Revisions
 

+ 1 - 9
fpga/max80.qsf

@@ -114,8 +114,6 @@ set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULA
 set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO"
 set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to flash_clk
 set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to flash_cs_n
-set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to flash_miso
-set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to flash_mosi
 set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to board_id
 
 
@@ -248,10 +246,6 @@ set_global_assignment -name SYSTEMVERILOG_FILE rng.sv
 set_global_assignment -name QIP_FILE ip/int_osc/synthesis/int_osc.qip
 set_global_assignment -name VERILOG_FILE ip/pll4.v
 set_global_assignment -name VERILOG_FILE ip/pll3.v
-set_global_assignment -name VERILOG_FILE ip/pll2_16.v
-set_global_assignment -name VERILOG_FILE ip/pll2_48.v
-set_global_assignment -name QIP_FILE ip/pll2_16.qip
-set_global_assignment -name QIP_FILE ip/pll2_48.qip
 set_global_assignment -name VERILOG_FILE usb/usb_fs_phy/src_v/usb_fs_phy.v
 set_global_assignment -name VERILOG_FILE usb/usb_serial/src_v/usbf_sie_tx.v
 set_global_assignment -name VERILOG_FILE usb/usb_serial/src_v/usbf_sie_rx.v
@@ -268,7 +262,7 @@ set_global_assignment -name SYSTEMVERILOG_FILE abcbus.sv
 set_global_assignment -name VERILOG_FILE ip/abcmapram.v
 set_global_assignment -name VERILOG_FILE ip/fastmem_ip.v
 set_global_assignment -name SYSTEMVERILOG_FILE fast_mem.sv
-set_global_assignment -name MIF_FILE ../rv32/boot.mif
+set_global_assignment -name MIF_FILE output/sram.mif
 set_global_assignment -name VERILOG_FILE picorv32.v
 set_global_assignment -name SYSTEMVERILOG_FILE functions.sv
 set_global_assignment -name SYSTEMVERILOG_FILE spi_master.sv
@@ -285,8 +279,6 @@ set_global_assignment -name SYSTEMVERILOG_FILE tmdsenc.sv
 set_global_assignment -name SYSTEMVERILOG_FILE video.sv
 set_global_assignment -name SDC_FILE max80.sdc
 set_global_assignment -name SYSTEMVERILOG_FILE max80.sv
-set_global_assignment -name SYSTEMVERILOG_FILE v1.sv
-set_global_assignment -name SYSTEMVERILOG_FILE v2.sv
 set_global_assignment -name SOURCE_TCL_SCRIPT_FILE scripts/pins.tcl
 set_global_assignment -name VERILOG_FILE ip/fifo.v
 set_global_assignment -name VERILOG_FILE ip/ddufifo.v

+ 1771 - 0
fpga/output/sram.mif

@@ -0,0 +1,1771 @@
+-- generated from output/sram.bin
+DEPTH = 8192;
+WIDTH = 32;
+ADDRESS_RADIX = HEX;
+DATA_RADIX = HEX;
+CONTENT BEGIN
+0000 : 00000000;
+0001 : 00000000;
+0002 : 4631DEFA;
+0003 : 00100000;
+0004 : C0102473;
+0005 : 00008137;
+0006 : 2A80006F;
+0007 : 00000000;
+0008 : 0001210B;
+0009 : 008DF413;
+000A : 00040863;
+000B : 3AD000EF;
+000C : 408D8DB3;
+000D : 060D8063;
+000E : 00000493;
+000F : 0FFDF293;
+0010 : 00029663;
+0011 : 008DDD93;
+0012 : 02048493;
+0013 : 00FDF293;
+0014 : 00029663;
+0015 : 004DDD93;
+0016 : 01048493;
+0017 : 003DF293;
+0018 : 00029663;
+0019 : 002DDD93;
+001A : 00848493;
+001B : 001DF293;
+001C : 00029663;
+001D : 001DDD93;
+001E : 00448493;
+001F : 0024D513;
+0020 : 000D0593;
+0021 : 0B0480E7;
+0022 : 001DDD93;
+0023 : 00448493;
+0024 : FA0D96E3;
+0025 : 30200073;
+0026 : 00000000;
+0027 : 00000013;
+0028 : 00008067;
+0029 : 0000250B;
+002A : 0005B00B;
+002B : 00000000;
+002C : 2850006F;
+002D : 5A80006F;
+002E : 5980006F;
+002F : 31D0006F;
+0030 : 5A80006F;
+0031 : 2710006F;
+0032 : 06D0106F;
+0033 : 2690006F;
+0034 : 2650006F;
+0035 : 2A90006F;
+0036 : 25D0006F;
+0037 : 2590006F;
+0038 : 2550006F;
+0039 : 2510006F;
+003A : 00000000;
+003B : 7C5C2D2F;
+003C : 4101D2B0;
+003D : FFFFFFFF;
+003E : FFFFFFFF;
+003F : 00001B00;
+0040 : 00000040;
+0041 : 00000000;
+0042 : 00000000;
+0043 : 00000000;
+0044 : 00000000;
+0045 : 00000000;
+0046 : 00000000;
+0047 : 00000000;
+0048 : 00000000;
+0049 : 00000000;
+004A : 00000000;
+004B : 00000000;
+004C : 00000000;
+004D : 00000000;
+004E : 00000000;
+004F : 00000000;
+0050 : 00000000;
+0051 : 00000000;
+0052 : 00000000;
+0053 : 00000000;
+0054 : 00000000;
+0055 : 00000000;
+0056 : 00000000;
+0057 : 00000000;
+0058 : 00000000;
+0059 : 00000000;
+005A : 00000000;
+005B : 00000000;
+005C : 00000000;
+005D : 00000000;
+005E : 00000000;
+005F : 00000000;
+0060 : 00000000;
+0061 : 00000000;
+0062 : 00000000;
+0063 : 00000000;
+0064 : 00000000;
+0065 : 00000000;
+0066 : 00000000;
+0067 : 00000000;
+0068 : 00000000;
+0069 : 00000000;
+006A : 00000000;
+006B : 00000000;
+006C : 00000000;
+006D : 00000000;
+006E : 00000000;
+006F : 00000000;
+0070 : 00000000;
+0071 : 00000000;
+0072 : 00000000;
+0073 : 00000000;
+0074 : 00000000;
+0075 : 00000000;
+0076 : 00000000;
+0077 : 00000000;
+0078 : 00000000;
+0079 : 00000000;
+007A : 00000000;
+007B : 00000000;
+007C : 00000000;
+007D : 00000000;
+007E : 00000000;
+007F : 00000000;
+0080 : 00000000;
+0081 : 00000000;
+0082 : 00000000;
+0083 : 00000000;
+0084 : 00000000;
+0085 : 00000000;
+0086 : 00000000;
+0087 : 00000000;
+0088 : 00000000;
+0089 : 00000000;
+008A : 00000000;
+008B : 00000000;
+008C : 00000000;
+008D : 00000000;
+008E : 00000000;
+008F : 00000000;
+0090 : 00000000;
+0091 : 00000000;
+0092 : 00000000;
+0093 : 00000000;
+0094 : 00000000;
+0095 : 00000000;
+0096 : 00000000;
+0097 : 00000000;
+0098 : 00000000;
+0099 : 00000000;
+009A : 00000000;
+009B : 00000000;
+009C : 00000000;
+009D : 00000000;
+009E : 00000000;
+009F : 00000000;
+00A0 : 00000000;
+00A1 : 00000000;
+00A2 : 00000000;
+00A3 : 00000000;
+00A4 : 00000000;
+00A5 : 00000000;
+00A6 : 00000000;
+00A7 : 00000000;
+00A8 : 00000000;
+00A9 : 00000000;
+00AA : 00000000;
+00AB : 00000000;
+00AC : 00000000;
+00AD : 00000000;
+00AE : 00000000;
+00AF : 00000000;
+00B0 : FFF04293;
+00B1 : 0602800B;
+00B2 : 00000193;
+00B3 : 0001A18B;
+00B4 : 12000513;
+00B5 : 2C000593;
+00B6 : 00052023;
+00B7 : 00052223;
+00B8 : 00052423;
+00B9 : 00052623;
+00BA : 00052823;
+00BB : 00052A23;
+00BC : 00052C23;
+00BD : 00052E23;
+00BE : 02050513;
+00BF : FCB56EE3;
+00C0 : 12802023;
+00C1 : 0040006F;
+00C2 : CE061101;
+00C3 : CA26CC22;
+00C4 : C64EC84A;
+00C5 : C256C452;
+00C6 : 2659C05A;
+00C7 : 1A604283;
+00C8 : 00028663;
+00C9 : 40007097;
+00CA : E2E080E7;
+00CB : 400074B7;
+00CC : 40007937;
+00CD : 5AFD4981;
+00CE : 1A448493;
+00CF : 20E90913;
+00D0 : 40007A37;
+00D1 : 0750008B;
+00D2 : 0810878B;
+00D3 : 1A704303;
+00D4 : 00030663;
+00D5 : 40001097;
+00D6 : 424080E7;
+00D7 : 3F3000EF;
+00D8 : 89C02403;
+00D9 : FE89F0E3;
+00DA : 00845393;
+00DB : 0FF47593;
+00DC : 93638626;
+00DD : 864A0003;
+00DE : 1AEA0513;
+00DF : 40001097;
+00E0 : 120080E7;
+00E1 : BF7D89A2;
+00E2 : 00000697;
+00E3 : D1468693;
+00E4 : 897D4690;
+00E5 : 8E49053E;
+00E6 : 8682C290;
+00E7 : 00000697;
+00E8 : D0068693;
+00E9 : 897D46D0;
+00EA : 8E49051E;
+00EB : 8682C290;
+00EC : F713C25D;
+00ED : 17930FF5;
+00EE : E2B30107;
+00EF : 931300E7;
+00F0 : 76930082;
+00F1 : 63B30015;
+00F2 : 87AA0053;
+00F3 : 4805EAC9;
+00F4 : 08C87163;
+00F5 : 0027F893;
+00F6 : 08089F63;
+00F7 : F6634EFD;
+00F8 : 0F1308CE;
+00F9 : 7F93FE06;
+00FA : 8F13FE0F;
+00FB : 87330207;
+00FC : A01901EF;
+00FD : 020F0F13;
+00FE : 0077A023;
+00FF : 0077A223;
+0100 : 0077A423;
+0101 : 0077A623;
+0102 : 0077A823;
+0103 : 0077AA23;
+0104 : 0077AC23;
+0105 : 0077AE23;
+0106 : 87FA86FA;
+0107 : FDE71CE3;
+0108 : 428D8A7D;
+0109 : 02C2F363;
+010A : FFC60313;
+010B : FFC37893;
+010C : 00478E93;
+010D : 01D88E33;
+010E : 0E91A011;
+010F : 0076A023;
+0110 : 86F687F6;
+0111 : FFCE9BE3;
+0112 : 73938A0D;
+0113 : 90630026;
+0114 : 8A050203;
+0115 : 8082E211;
+0116 : 00B78023;
+0117 : 07938082;
+0118 : 00230015;
+0119 : 167D0075;
+011A : 86BEB79D;
+011B : 9023BF5D;
+011C : 078900B7;
+011D : 9023BFF9;
+011E : 16790077;
+011F : BFB90789;
+0120 : 00000000;
+0121 : 00B567B3;
+0122 : 8B8D8FD1;
+0123 : 04079263;
+0124 : 00C50733;
+0125 : 8A7186AA;
+0126 : 40C007B3;
+0127 : 4C478067;
+0128 : 02000613;
+0129 : CEDC4DDC;
+012A : CE9C4D9C;
+012B : CADC49DC;
+012C : CA9C499C;
+012D : C6DC45DC;
+012E : C69C459C;
+012F : C2DC41DC;
+0130 : C29C419C;
+0131 : 96B295B2;
+0132 : FCE6ECE3;
+0133 : 00018082;
+0134 : 00C50733;
+0135 : 00050693;
+0136 : 0005C783;
+0137 : 00F68023;
+0138 : 06850585;
+0139 : FEE6EAE3;
+013A : 00008082;
+013B : 46254721;
+013C : 01C55693;
+013D : 05700793;
+013E : 64630512;
+013F : 079300D6;
+0140 : 82B30300;
+0141 : 002300D7;
+0142 : 177D9850;
+0143 : 8082F375;
+0144 : CE061101;
+0145 : CA26CC22;
+0146 : C64EC84A;
+0147 : C256C452;
+0148 : 297387AA;
+0149 : 84933430;
+014A : 64090015;
+014B : FFE4FA13;
+014C : 94840693;
+014D : FFCA0993;
+014E : 94840413;
+014F : 4AB54E29;
+0150 : 0006C703;
+0151 : E3710685;
+0152 : 483548A9;
+0153 : 0007C083;
+0154 : 93630785;
+0155 : 02930C00;
+0156 : 45290084;
+0157 : C30343B5;
+0158 : 02850002;
+0159 : 0C031163;
+015A : 3749854E;
+015B : 00F40393;
+015C : 45B54629;
+015D : 0003C503;
+015E : ED4D0385;
+015F : 0029D583;
+0160 : FFCA5803;
+0161 : 01059613;
+0162 : 01060533;
+0163 : 08933785;
+0164 : 43290144;
+0165 : C98342B5;
+0166 : 08850008;
+0167 : 0A099363;
+0168 : 4935854A;
+0169 : 4A2937A1;
+016A : 99200023;
+016B : 99400023;
+016C : 491D4481;
+016D : 02000A13;
+016E : 49A14AB5;
+016F : 85334401;
+0170 : 33D90084;
+0171 : 0E133725;
+0172 : 15630200;
+0173 : 00230124;
+0174 : 4E299950;
+0175 : 99C00023;
+0176 : 12E30405;
+0177 : 04A1FF34;
+0178 : FD449EE3;
+0179 : C0102EF3;
+017A : 1908BF37;
+017B : 0FFF0F93;
+017C : C01026F3;
+017D : 41D68733;
+017E : FEEFFCE3;
+017F : 878B57FD;
+0180 : 40850607;
+0181 : 80102623;
+0182 : 1463BFF5;
+0183 : 002301C7;
+0184 : 00239950;
+0185 : B72D98E0;
+0186 : 01109463;
+0187 : 99000023;
+0188 : 98100023;
+0189 : 1463B725;
+018A : 002300A3;
+018B : 00239870;
+018C : B7359860;
+018D : 00C51463;
+018E : 98B00023;
+018F : 98A00023;
+0190 : 9463BF15;
+0191 : 00230069;
+0192 : 00239850;
+0193 : B7A19930;
+0194 : 11416509;
+0195 : 96E50513;
+0196 : 3D5DC606;
+0197 : 11416509;
+0198 : 97950513;
+0199 : 356DC606;
+019A : 12400293;
+019B : 0002A783;
+019C : 00178313;
+019D : 0062A023;
+019E : 01F37393;
+019F : 02039163;
+01A0 : 00535513;
+01A1 : 00357593;
+01A2 : 0EC00693;
+01A3 : 00B68833;
+01A4 : 00084883;
+01A5 : 00234E21;
+01A6 : 00239910;
+01A7 : 808299C0;
+01A8 : CE061101;
+01A9 : CA26CC22;
+01AA : C64EC84A;
+01AB : C256C452;
+01AC : C0102773;
+01AD : 12E02423;
+01AE : DE900093;
+01AF : 0610078B;
+01B0 : 02936409;
+01B1 : 83139484;
+01B2 : 04130452;
+01B3 : 49299484;
+01B4 : 43834535;
+01B5 : 03050003;
+01B6 : 18039163;
+01B7 : 85136489;
+01B8 : 48A9B6E4;
+01B9 : 45834835;
+01BA : 05050005;
+01BB : 16059E63;
+01BC : 00234635;
+01BD : 46A998C0;
+01BE : 98D00023;
+01BF : 2423481D;
+01C0 : 58FD8100;
+01C1 : 0710090B;
+01C2 : 20097993;
+01C3 : FE098CE3;
+01C4 : 193ACA37;
+01C5 : 40000AB7;
+01C6 : 40008E37;
+01C7 : F4D57EB7;
+01C8 : 604A0613;
+01C9 : 000A8693;
+01CA : 448159FD;
+01CB : 45014A01;
+01CC : 918E0093;
+01CD : 25FE8A93;
+01CE : 1216EF63;
+01CF : 07A40F13;
+01D0 : 47B54729;
+01D1 : 000F4F83;
+01D2 : 9D630F05;
+01D3 : 3B79140F;
+01D4 : 09040713;
+01D5 : 4F354FA9;
+01D6 : 00074783;
+01D7 : 9A630705;
+01D8 : 25031407;
+01D9 : 33590080;
+01DA : 002342B5;
+01DB : 43299850;
+01DC : 98600023;
+01DD : 09B40393;
+01DE : 4E354EA9;
+01DF : 0003C503;
+01E0 : 1F630385;
+01E1 : 854E1205;
+01E2 : 05933395;
+01E3 : 00230200;
+01E4 : C51398B0;
+01E5 : 3B99FFF4;
+01E6 : 00234635;
+01E7 : 46A998C0;
+01E8 : 98D00023;
+01E9 : 140A1163;
+01EA : 400089B7;
+01EB : 40013A37;
+01EC : 89134881;
+01ED : 06939189;
+01EE : 6B632B0A;
+01EF : 9B6312D9;
+01F0 : 0F931408;
+01F1 : 47198080;
+01F2 : 00EFA023;
+01F3 : A0234795;
+01F4 : 041300FF;
+01F5 : 46290E54;
+01F6 : 408345B5;
+01F7 : 04050004;
+01F8 : 12009F63;
+01F9 : C01022F3;
+01FA : 1908B337;
+01FB : 0FF30393;
+01FC : C0102573;
+01FD : 405505B3;
+01FE : FEB3FCE3;
+01FF : 00234635;
+0200 : 46A998C0;
+0201 : 400074B7;
+0202 : 98D00023;
+0203 : 1D948813;
+0204 : 43B54529;
+0205 : 00084883;
+0206 : 99630805;
+0207 : 20971008;
+0208 : 80E74000;
+0209 : 7937FD60;
+020A : 09934000;
+020B : 43291F39;
+020C : CA034435;
+020D : 09850009;
+020E : 100A1163;
+020F : 80002A83;
+0210 : 38584E37;
+0211 : 14DE0E93;
+0212 : 11DA8F63;
+0213 : 40007737;
+0214 : 1F770093;
+0215 : 4AB544A9;
+0216 : 9463A8F5;
+0217 : 00230123;
+0218 : 002398A0;
+0219 : B5B59870;
+021A : 01159463;
+021B : 99000023;
+021C : 98B00023;
+021D : A283BD8D;
+021E : 43330006;
+021F : A0230056;
+0220 : A3830066;
+0221 : 06330006;
+0222 : A0230356;
+0223 : C5B30056;
+0224 : 95160063;
+0225 : 00BA6A33;
+0226 : 0054E4B3;
+0227 : 0059F9B3;
+0228 : BD590691;
+0229 : 00EF9463;
+022A : 98F00023;
+022B : 99F00023;
+022C : 9463BD51;
+022D : 002301F7;
+022E : 002399E0;
+022F : BD6998F0;
+0230 : 01D51463;
+0231 : 99C00023;
+0232 : 98A00023;
+0233 : 1463BD45;
+0234 : 00230099;
+0235 : 00239900;
+0236 : C9039920;
+0237 : 08850008;
+0238 : FE0917E3;
+0239 : 0893B5D1;
+023A : 44A90B44;
+023B : B7F54835;
+023C : 00092803;
+023D : E8B30911;
+023E : B5C10108;
+023F : 015F1463;
+0240 : 99C00023;
+0241 : 99E00023;
+0242 : 000ECF03;
+0243 : 17E30E85;
+0244 : BD45FE0F;
+0245 : 0CC40E93;
+0246 : 4E354AA9;
+0247 : 9463B7F5;
+0248 : 002300C0;
+0249 : 002398B0;
+024A : BD459810;
+024B : 00A89463;
+024C : 98700023;
+024D : 99100023;
+024E : 1463BDF1;
+024F : 0023006A;
+0250 : 00239880;
+0251 : B5F59940;
+0252 : 00929463;
+0253 : 99500023;
+0254 : 98500023;
+0255 : 0000C283;
+0256 : 97E30085;
+0257 : 1097FE02;
+0258 : 80E74000;
+0259 : 4583AB20;
+025A : 46038060;
+025B : 46838050;
+025C : 47038040;
+025D : 7F378070;
+025E : 05134000;
+025F : 1097271F;
+0260 : 80E74000;
+0261 : 4F83B1E0;
+0262 : 47038060;
+0263 : 84638070;
+0264 : 7EB702EF;
+0265 : 8F934000;
+0266 : 4F2920FE;
+0267 : A03949B5;
+0268 : 01E79463;
+0269 : 99300023;
+026A : 98F00023;
+026B : 000FC783;
+026C : F7FD0F85;
+026D : 47B5B76D;
+026E : 98F00023;
+026F : 70B74429;
+0270 : 00234000;
+0271 : 82939880;
+0272 : 4A2923E0;
+0273 : C3034E35;
+0274 : 02850002;
+0275 : 12031B63;
+0276 : 111113B7;
+0277 : 44332537;
+0278 : 400135B7;
+0279 : 8A134401;
+027A : 09931113;
+027B : 84932115;
+027C : 79370405;
+027D : 4AA14000;
+027E : 03440633;
+027F : 00241693;
+0280 : 00D48833;
+0281 : 29C90513;
+0282 : 05B30405;
+0283 : 20230136;
+0284 : 278300B8;
+0285 : 10970008;
+0286 : 80E74000;
+0287 : 1DE3A860;
+0288 : 48B5FD54;
+0289 : 99100023;
+028A : 00234E29;
+028B : 498199C0;
+028C : 9E934A21;
+028D : 8F330029;
+028E : 258301D4;
+028F : 0513000F;
+0290 : 098529C9;
+0291 : 40001097;
+0292 : A58080E7;
+0293 : FF4993E3;
+0294 : 40007FB7;
+0295 : 250F8793;
+0296 : 483548A9;
+0297 : 0007C703;
+0298 : EB5D0785;
+0299 : 64894AA1;
+029A : 0804878B;
+029B : C0002583;
+029C : 29C90513;
+029D : 10971AFD;
+029E : 80E74000;
+029F : 95E3A260;
+02A0 : 7937FE0A;
+02A1 : 00934000;
+02A2 : 46A920C9;
+02A3 : C2834635;
+02A4 : 00850000;
+02A5 : 08029963;
+02A6 : 40001097;
+02A7 : DB4080E7;
+02A8 : 04134311;
+02A9 : 20238080;
+02AA : 10970064;
+02AB : 80E74000;
+02AC : 2097AC00;
+02AD : 80E74000;
+02AE : 438D0260;
+02AF : 00742023;
+02B0 : 40001097;
+02B1 : 4B2080E7;
+02B2 : 40002097;
+02B3 : A76080E7;
+02B4 : 40002097;
+02B5 : F44080E7;
+02B6 : C0084509;
+02B7 : 40002097;
+02B8 : 008080E7;
+02B9 : C00C4585;
+02BA : 40002097;
+02BB : DE6080E7;
+02BC : 88002623;
+02BD : 80002423;
+02BE : 446240F2;
+02BF : 494244D2;
+02C0 : 4A2249B2;
+02C1 : 61054A92;
+02C2 : 14638082;
+02C3 : 00230143;
+02C4 : 002399C0;
+02C5 : BD659860;
+02C6 : 01171463;
+02C7 : 99000023;
+02C8 : 98E00023;
+02C9 : 9463BF25;
+02CA : 002300D2;
+02CB : 002398C0;
+02CC : BFB19850;
+02CD : 95334785;
+02CE : 429300A7;
+02CF : 050BFFF5;
+02D0 : 80820655;
+02D1 : 00C02703;
+02D2 : 3B0002B7;
+02D3 : A0A02023;
+02D4 : 00E28333;
+02D5 : 00B303B3;
+02D6 : 2D000537;
+02D7 : A0702223;
+02D8 : 24238E49;
+02D9 : 8082A0C0;
+02DA : A0A02023;
+02DB : 200007B7;
+02DC : A0002223;
+02DD : 24238DDD;
+02DE : 8082A0B0;
+02DF : 12C00293;
+02E0 : 0002A703;
+02E1 : 00170693;
+02E2 : 00D2A023;
+02E3 : 4585CB19;
+02E4 : 02B70763;
+02E5 : 20000F13;
+02E6 : DFF00F93;
+02E7 : 07FF078B;
+02E8 : 05378082;
+02E9 : 83374000;
+02EA : 06134000;
+02EB : 03930005;
+02EC : 86339183;
+02ED : 458140C3;
+02EE : 00050513;
+02EF : 8837B761;
+02F0 : 3E374000;
+02F1 : 08934001;
+02F2 : 0E939188;
+02F3 : 85B32B0E;
+02F4 : 0513411E;
+02F5 : BF499188;
+02F6 : CE061101;
+02F7 : CC22CA26;
+02F8 : C64EC84A;
+02F9 : 5783C452;
+02FA : 00938880;
+02FB : 949318C0;
+02FC : F2930107;
+02FD : A4030FF7;
+02FE : 80C10000;
+02FF : 12028263;
+0300 : 89104303;
+0301 : 89004583;
+0302 : 76134695;
+0303 : F5930FF3;
+0304 : E4630FF5;
+0305 : 4F051066;
+0306 : 14CF6F63;
+0307 : 10061463;
+0308 : 14040D63;
+0309 : 00442F83;
+030A : 020F8963;
+030B : 8713401C;
+030C : C0180017;
+030D : 00B78023;
+030E : 01D44083;
+030F : 01444283;
+0310 : 0050F333;
+0311 : 00640EA3;
+0312 : 88600AA3;
+0313 : 83934054;
+0314 : 2223FFF6;
+0315 : 98630074;
+0316 : 03B30203;
+0317 : 8B2300C4;
+0318 : 5A0300B3;
+0319 : 55330104;
+031A : 791340CA;
+031B : 0C630015;
+031C : 09930009;
+031D : 98130086;
+031E : 08B30029;
+031F : AE030104;
+0320 : 85220008;
+0321 : F5939E02;
+0322 : C1A11004;
+0323 : 0D634450;
+0324 : 0E931406;
+0325 : 2623FFF6;
+0326 : 876301D4;
+0327 : 4083140E;
+0328 : 428301D4;
+0329 : F6B30154;
+032A : 0EA30050;
+032B : 0AA300D4;
+032C : 238388D0;
+032D : 8A130084;
+032E : 24230013;
+032F : C5030144;
+0330 : 0E230003;
+0331 : 0A2300A4;
+0332 : F91388A0;
+0333 : 05632004;
+0334 : 48030209;
+0335 : 498301D4;
+0336 : 0AA38950;
+0337 : 58838900;
+0338 : F5930104;
+0339 : FE130FF9;
+033A : 07632008;
+033B : 2E83000E;
+033C : 460503C4;
+033D : 9E828522;
+033E : 5F83444C;
+033F : 40400104;
+0340 : 00B03633;
+0341 : 00861F13;
+0342 : 01FF6733;
+0343 : 008037B3;
+0344 : 00E7E333;
+0345 : 08236093;
+0346 : 439DA09D;
+0347 : 06760F63;
+0348 : A8A1F03D;
+0349 : 03F5FA13;
+034A : 002A1913;
+034B : 1BC00813;
+034C : 012808B3;
+034D : 0008A403;
+034E : 11400023;
+034F : 0080A023;
+0350 : 08200313;
+0351 : 2E03C015;
+0352 : 5F8300C4;
+0353 : 405C0104;
+0354 : 01C03EB3;
+0355 : 008E9F13;
+0356 : 01FF6733;
+0357 : 00F030B3;
+0358 : 00E0E2B3;
+0359 : 0822E313;
+035A : 88601523;
+035B : C0114681;
+035C : 2A234C54;
+035D : 12E388D0;
+035E : 0093EE04;
+035F : 92930820;
+0360 : E4B30100;
+0361 : 24230092;
+0362 : 40F28890;
+0363 : 44D24462;
+0364 : 49B24942;
+0365 : 61054A22;
+0366 : 05138082;
+0367 : 4A030400;
+0368 : A0231000;
+0369 : 00230000;
+036A : 061310A0;
+036B : 15230820;
+036C : 2A2388C0;
+036D : 44018800;
+036E : 1BC00913;
+036F : 10000993;
+0370 : 00890833;
+0371 : 00082503;
+0372 : 5883CD01;
+0373 : FE130105;
+0374 : 07630808;
+0375 : 2E83000E;
+0376 : 461D0405;
+0377 : 9E8285D2;
+0378 : 1FE30411;
+0379 : BF51FD34;
+037A : 01F44F83;
+037B : 89404F03;
+037C : 01F40E23;
+037D : 89F00A23;
+037E : 01045703;
+037F : 0FFF7593;
+0380 : 10077793;
+0381 : EC0783E3;
+0382 : 03842303;
+0383 : 85224601;
+0384 : BD659302;
+0385 : 575D47A1;
+0386 : 06E7828B;
+0387 : 2383C10C;
+0388 : C15018C0;
+0389 : 00D50EA3;
+038A : 02751663;
+038B : 5E03454C;
+038C : 36330105;
+038D : 36B300C0;
+038E : 981300B0;
+038F : 68B30086;
+0390 : EEB30106;
+0391 : EF1301C8;
+0392 : 1523082E;
+0393 : 4D4889E0;
+0394 : 88A02A23;
+0395 : 0082FF93;
+0396 : 878B57DD;
+0397 : 808206FF;
+0398 : 575D47A1;
+0399 : 06E7828B;
+039A : 00158313;
+039B : 2423C550;
+039C : C3830065;
+039D : 0EA30005;
+039E : 268300D5;
+039F : 0E2318C0;
+03A0 : 17630075;
+03A1 : 280302D5;
+03A2 : 5F030045;
+03A3 : 36330105;
+03A4 : 38B300C0;
+03A5 : 1E130100;
+03A6 : EEB30086;
+03A7 : EFB301C8;
+03A8 : E79301EE;
+03A9 : 1523082F;
+03AA : 4D4888F0;
+03AB : 88A02A23;
+03AC : 0082F293;
+03AD : 878B575D;
+03AE : 808206E2;
+03AF : 575D47A1;
+03B0 : 06E7828B;
+03B1 : 00C52303;
+03B2 : 00B50FA3;
+03B3 : 00031A63;
+03B4 : 18C02603;
+03B5 : 00B50E23;
+03B6 : 00C51463;
+03B7 : 88B00A23;
+03B8 : 0082F513;
+03B9 : 078B55DD;
+03BA : 808206B5;
+03BB : 575D47A1;
+03BC : 06E7828B;
+03BD : 18C02383;
+03BE : 00B50EA3;
+03BF : 00751463;
+03C0 : 88B00AA3;
+03C1 : 0082F513;
+03C2 : 078B55DD;
+03C3 : 808206B5;
+03C4 : 09400793;
+03C5 : 00F51823;
+03C6 : 00050EA3;
+03C7 : 88000AA3;
+03C8 : 04F54283;
+03C9 : 040506A3;
+03CA : 0012E313;
+03CB : 046507A3;
+03CC : 47838082;
+03CD : E29304F5;
+03CE : 07A30027;
+03CF : 80820455;
+03D0 : 04F54783;
+03D1 : 0047E293;
+03D2 : 045507A3;
+03D3 : 71158082;
+03D4 : CF86C7CE;
+03D5 : C1DACDA2;
+03D6 : C9CACBA6;
+03D7 : C3D6C5D2;
+03D8 : DD62DF5E;
+03D9 : D96ADB66;
+03DA : 0093D76E;
+03DB : 2B030F40;
+03DC : A2831240;
+03DD : 24830000;
+03DE : F4138800;
+03DF : 80630054;
+03E0 : 63091762;
+03E1 : A4834383;
+03E2 : 0F400B93;
+03E3 : 0013F513;
+03E4 : 1097C171;
+03E5 : 80E74000;
+03E6 : 791300A0;
+03E7 : 05630015;
+03E8 : 4A850009;
+03E9 : A8D94A01;
+03EA : 80800A93;
+03EB : 000AAA03;
+03EC : 40007CB7;
+03ED : 40013D37;
+03EE : 002A6C13;
+03EF : 018AA023;
+03F0 : 85934605;
+03F1 : 051320EC;
+03F2 : 4097060D;
+03F3 : 80E74000;
+03F4 : C105E7E0;
+03F5 : 400077B7;
+03F6 : 5E978513;
+03F7 : 40000097;
+03F8 : 4C0080E7;
+03F9 : 000AA983;
+03FA : FFD9F293;
+03FB : 005AA023;
+03FC : 0850BF4D;
+03FD : 8513100C;
+03FE : 002320EC;
+03FF : CA020201;
+0400 : 40005097;
+0401 : CC2080E7;
+0402 : 7DB74652;
+0403 : 100C4000;
+0404 : 602D8513;
+0405 : 40000097;
+0406 : 488080E7;
+0407 : 082C0870;
+0408 : 20EC8513;
+0409 : 5097CC02;
+040A : 80E74000;
+040B : 4E72B340;
+040C : 7FB745E2;
+040D : 5E834000;
+040E : 2F0300AE;
+040F : 851301CE;
+0410 : 9693630F;
+0411 : 0613009E;
+0412 : 0097FFEF;
+0413 : 80E74000;
+0414 : BF814520;
+0415 : 40001097;
+0416 : EFA080E7;
+0417 : 00157593;
+0418 : 0813F1A9;
+0419 : 27031900;
+041A : 46FD0008;
+041B : 40EB08B3;
+041C : 0716F563;
+041D : 01682023;
+041E : 4A054A81;
+041F : 016BA023;
+0420 : 0F800093;
+0421 : 0000A703;
+0422 : 0014FB93;
+0423 : C002C25E;
+0424 : 0A870E63;
+0425 : 80800313;
+0426 : 0080A023;
+0427 : 00032383;
+0428 : 0014F593;
+0429 : 00259613;
+042A : FFB3F513;
+042B : 00A66833;
+042C : 400078B7;
+042D : 01032023;
+042E : 5B688913;
+042F : 4C354329;
+0430 : 00094683;
+0431 : EE990905;
+0432 : C8A98891;
+0433 : 40007A37;
+0434 : 5CBA0D13;
+0435 : 4CB54C29;
+0436 : 4A81A01D;
+0437 : 4A81B5E1;
+0438 : BF794A01;
+0439 : 00669463;
+043A : 99800023;
+043B : 98D00023;
+043C : 9463BFC1;
+043D : 0023018D;
+043E : 00239990;
+043F : 4D8399B0;
+0440 : 0D05000D;
+0441 : FE0D97E3;
+0442 : 15634E12;
+0443 : 7EB7160E;
+0444 : 87934000;
+0445 : 4FA95D2E;
+0446 : A82149B5;
+0447 : 40007AB7;
+0448 : 5C5A8D13;
+0449 : 9463BF45;
+044A : 002301F2;
+044B : 00239930;
+044C : C2839850;
+044D : 07850007;
+044E : FE0297E3;
+044F : 57138C39;
+0450 : 4B050024;
+0451 : 00177A93;
+0452 : 4A05C05A;
+0453 : C0B76389;
+0454 : 63094000;
+0455 : B6038513;
+0456 : 20008D13;
+0457 : 4B014B81;
+0458 : 20008493;
+0459 : A4830C13;
+045A : 4583C42A;
+045B : 886304ED;
+045C : 8763100A;
+045D : 846A1005;
+045E : 4DA14901;
+045F : 2AE44783;
+0460 : 0017F293;
+0461 : 04028463;
+0462 : 001C4703;
+0463 : 00177313;
+0464 : 00031863;
+0465 : 05040513;
+0466 : 40004097;
+0467 : 628080E7;
+0468 : 2AE44383;
+0469 : FFE3F093;
+046A : 2A140723;
+046B : 04CD4503;
+046C : FFF50593;
+046D : 04BD0623;
+046E : 2AF44803;
+046F : 00487893;
+0470 : 00089663;
+0471 : FFE87613;
+0472 : 2AC40723;
+0473 : 04130905;
+0474 : 15E32E84;
+0475 : 0723FBB9;
+0476 : 4682040D;
+0477 : 856AC691;
+0478 : 40002097;
+0479 : 804080E7;
+047A : 49814E12;
+047B : 020E0E63;
+047C : 4EA15CDD;
+047D : 079E870B;
+047E : 0F936F09;
+047F : 07B3B90F;
+0480 : 8DB303FB;
+0481 : C98300F4;
+0482 : 87A304FD;
+0483 : F993040D;
+0484 : 068B0FF9;
+0485 : F2930790;
+0486 : 8D630069;
+0487 : 856A2002;
+0488 : 40001097;
+0489 : 7C4080E7;
+048A : 04ED4603;
+048B : 46061063;
+048C : 87936F89;
+048D : 0B05B90F;
+048E : 9D3E4291;
+048F : 16E39BBE;
+0490 : 0A63F25B;
+0491 : 0493000A;
+0492 : AA038080;
+0493 : 7A930004;
+0494 : A023FFDA;
+0495 : 40FE0154;
+0496 : 44DE446E;
+0497 : 49BE494E;
+0498 : 4A9E4A2E;
+0499 : 5BFA4B0E;
+049A : 5CDA5C6A;
+049B : 5DBA5D4A;
+049C : 8082612D;
+049D : 40007F37;
+049E : 5DEF0793;
+049F : FDB1BD69;
+04A0 : 000C4603;
+04A1 : 00167813;
+04A2 : F40819E3;
+04A3 : 88002883;
+04A4 : 8D936689;
+04A5 : F913B6B6;
+04A6 : 15630048;
+04A7 : 4CA20009;
+04A8 : 00AC8D93;
+04A9 : 03000E13;
+04AA : 02F00E93;
+04AB : 01CD8023;
+04AC : 01DD80A3;
+04AD : 000D8123;
+04AE : 2A8D0413;
+04AF : 09138CEA;
+04B0 : 2F030300;
+04B1 : 7FB7044D;
+04B2 : 874A4000;
+04B3 : 008F0693;
+04B4 : 662F8613;
+04B5 : 85224591;
+04B6 : 400079B7;
+04B7 : DA840D93;
+04B8 : 40005097;
+04B9 : 2CC080E7;
+04BA : 76C98993;
+04BB : 0009A683;
+04BC : 12068363;
+04BD : 400077B7;
+04BE : 86138722;
+04BF : 059366A7;
+04C0 : 10080400;
+04C1 : 40005097;
+04C2 : 2A8080E7;
+04C3 : 2AECC283;
+04C4 : 0012F713;
+04C5 : 4083CB05;
+04C6 : F313001C;
+04C7 : 17630010;
+04C8 : 856E0003;
+04C9 : 40004097;
+04CA : 49C080E7;
+04CB : 2AECC383;
+04CC : FFE3F513;
+04CD : 2AAC8723;
+04CE : 04CD4583;
+04CF : FFF58613;
+04D0 : 04CD0623;
+04D1 : 2AFCC803;
+04D2 : 00487893;
+04D3 : 0E089263;
+04D4 : 0FE87F93;
+04D5 : 2BFC8723;
+04D6 : 002FF693;
+04D7 : E2914605;
+04D8 : 100C460D;
+04D9 : C632856E;
+04DA : 40004097;
+04DB : B40080E7;
+04DC : CE034EA9;
+04DD : 1A632AEC;
+04DE : 4F3201D5;
+04DF : 002F7F93;
+04E0 : 000F8563;
+04E1 : 002E6F93;
+04E2 : 4785B7F1;
+04E3 : 4791C111;
+04E4 : 00FE62B3;
+04E5 : 2A5C8723;
+04E6 : 0012F713;
+04E7 : 79B7CB51;
+04E8 : 10104000;
+04E9 : 851385A2;
+04EA : 009766F9;
+04EB : 80E74000;
+04EC : 03130F20;
+04ED : 03930220;
+04EE : A8230084;
+04EF : A0232A6C;
+04F0 : 55FD0A7C;
+04F1 : 856E567D;
+04F2 : 40004097;
+04F3 : 41A080E7;
+04F4 : 7DB7C911;
+04F5 : 85A24000;
+04F6 : 683D8513;
+04F7 : 40000097;
+04F8 : 0C0080E7;
+04F9 : 044D2603;
+04FA : 064CA083;
+04FB : 060CA583;
+04FC : 00265883;
+04FD : 01809513;
+04FE : 0085D813;
+04FF : 01056633;
+0500 : 00C8F363;
+0501 : 96238646;
+0502 : 46832ACC;
+0503 : 8E1304CD;
+0504 : 06230016;
+0505 : 090505CD;
+0506 : 03800E93;
+0507 : 2E840413;
+0508 : 2E8C8C93;
+0509 : E9D91FE3;
+050A : 07234F05;
+050B : B37505ED;
+050C : BD6D0991;
+050D : 0019F713;
+050E : DE0708E3;
+050F : 049D4303;
+0510 : 048D4603;
+0511 : 53936505;
+0512 : 05930063;
+0513 : 90937905;
+0514 : 88330083;
+0515 : 88B300BB;
+0516 : 79130100;
+0517 : 7C930016;
+0518 : 84330073;
+0519 : 00630114;
+051A : 06930409;
+051B : 8DB32E80;
+051C : 8E3302DC;
+051D : 8EB300FD;
+051E : CF0301C4;
+051F : 7F932AEE;
+0520 : 9963001F;
+0521 : 0893040F;
+0522 : 06A3F800;
+0523 : 0593051D;
+0524 : 856A0800;
+0525 : 04233425;
+0526 : 4603040D;
+0527 : 7693048D;
+0528 : 0423FFE6;
+0529 : 4D8304DD;
+052A : FE13048D;
+052B : 0463002D;
+052C : 58030A0E;
+052D : F593010D;
+052E : 0423FFDD;
+052F : 689304BD;
+0530 : 18231008;
+0531 : 4685011D;
+0532 : 10000613;
+0533 : 856A85A2;
+0534 : BB993A41;
+0535 : 1097856A;
+0536 : 80E74000;
+0537 : E9014A20;
+0538 : 02100813;
+0539 : 050D06A3;
+053A : 02100593;
+053B : 0793B75D;
+053C : D0028080;
+053D : 0007A283;
+053E : 856A4595;
+053F : 0022E713;
+0540 : 32EDC398;
+0541 : 050B8313;
+0542 : 006D83B3;
+0543 : 8933856A;
+0544 : 10970074;
+0545 : 80E74000;
+0546 : 15934340;
+0547 : 46010085;
+0548 : 4097854A;
+0549 : 80E74000;
+054A : C5112C00;
+054B : 06A345A1;
+054C : 45A104BD;
+054D : 1014BFB9;
+054E : 10000613;
+054F : 854A85A2;
+0550 : 40004097;
+0551 : C8C080E7;
+0552 : 5082F175;
+0553 : 10000513;
+0554 : FCA09EE3;
+0555 : FE93B799;
+0556 : 8563004D;
+0557 : 5083020E;
+0558 : F913010D;
+0559 : 0423FFBD;
+055A : E513052D;
+055B : 18230010;
+055C : 069300AD;
+055D : 06130410;
+055E : 85A21000;
+055F : F0EF856A;
+0560 : B15D897F;
+0561 : 008DFF13;
+0562 : 040F0563;
+0563 : 0F936789;
+0564 : 82932E80;
+0565 : 8CB3B907;
+0566 : 073303FC;
+0567 : 8333025B;
+0568 : 8DB300EC;
+0569 : C3830064;
+056A : F9132AED;
+056B : 1E630013;
+056C : 02930209;
+056D : 06A3F800;
+056E : 0593045D;
+056F : 856A0800;
+0570 : 042338F5;
+0571 : 4703040D;
+0572 : 7313048D;
+0573 : 0423FF77;
+0574 : 4D83046D;
+0575 : 856A048D;
+0576 : 00FDF393;
+0577 : 047D0423;
+0578 : 40001097;
+0579 : 3D0080E7;
+057A : F093B181;
+057B : 89630023;
+057C : 07930000;
+057D : 06A30400;
+057E : 059304FD;
+057F : B7C10400;
+0580 : 1097856A;
+0581 : 80E74000;
+0582 : E9013760;
+0583 : 02100F93;
+0584 : 05FD06A3;
+0585 : 02100593;
+0586 : D002B75D;
+0587 : 80800513;
+0588 : 8893410C;
+0589 : 8633050B;
+058A : E813011C;
+058B : 20230025;
+058C : 856A0105;
+058D : 00C48CB3;
+058E : 40001097;
+058F : 30E080E7;
+0590 : 00851593;
+0591 : 85664601;
+0592 : 40004097;
+0593 : 19A080E7;
+0594 : 0F13C901;
+0595 : 06A30200;
+0596 : 059305ED;
+0597 : B7850200;
+0598 : 2AEDC683;
+0599 : 10000613;
+059A : EE1385A2;
+059B : 87230086;
+059C : 10142BCD;
+059D : 40978566;
+059E : 80E74000;
+059F : F971D440;
+05A0 : 0E935402;
+05A1 : 16E31000;
+05A2 : BF35FDD4;
+05A3 : 000A1663;
+05A4 : 0049F993;
+05A5 : B8098EE3;
+05A6 : 4D81846A;
+05A7 : 46834CA1;
+05A8 : FE132AE4;
+05A9 : 0E630086;
+05AA : 0513000E;
+05AB : 40970504;
+05AC : 80E74000;
+05AD : 4E83F5A0;
+05AE : FF132AE4;
+05AF : 0723FF7E;
+05B0 : 0D852BE4;
+05B1 : 2E840413;
+05B2 : FD9D9BE3;
+05B3 : 4783B695;
+05B4 : E29301D5;
+05B5 : 0EA30047;
+05B6 : 0AA30055;
+05B7 : 80828850;
+05B8 : 01D54783;
+05B9 : 0027E293;
+05BA : 00550EA3;
+05BB : 88500AA3;
+05BC : 71798082;
+05BD : D606D422;
+05BE : 0045F793;
+05BF : CFCD842E;
+05C0 : 01D54083;
+05C1 : 1B100313;
+05C2 : 0FB0F293;
+05C3 : 00550EA3;
+05C4 : 88500AA3;
+05C5 : 00734383;
+05C6 : AE1485B7;
+05C7 : AE158893;
+05C8 : 14700613;
+05C9 : 02760833;
+05CA : 00634703;
+05CB : 00534F03;
+05CC : 00334583;
+05CD : 00175093;
+05CE : 03FF7F93;
+05CF : 005F9793;
+05D0 : 01F0F293;
+05D1 : 0057E6B3;
+05D2 : 00234783;
+05D3 : 0313BE33;
+05D4 : 00434383;
+05D5 : 00134303;
+05D6 : 00F7F093;
+05D7 : 01F3F613;
+05D8 : 01509293;
+05D9 : CC02073E;
+05DA : 4785CE02;
+05DB : 01C80EB3;
+05DC : 00B61813;
+05DD : 01F5FE13;
+05DE : 0106E8B3;
+05DF : 010E1F13;
+05E0 : EFB30EC6;
+05E1 : 069301E8;
+05E2 : D8930143;
+05E3 : E3B3011E;
+05E4 : 65B3005F;
+05E5 : 96130117;
+05E6 : E8330196;
+05E7 : 9E1300C3;
+05E8 : CA420105;
+05E9 : 00B11C23;
+05EA : 010E5F13;
+05EB : 91E01223;
+05EC : 91002023;
+05ED : 1AF003A3;
+05EE : 04047093;
+05EF : 00008D63;
+05F0 : 01D54283;
+05F1 : E6934621;
+05F2 : 05930402;
+05F3 : C62A1B10;
+05F4 : E44FF0EF;
+05F5 : 04624532;
+05F6 : 41845313;
+05F7 : 0A035263;
+05F8 : 01D54683;
+05F9 : 1A900713;
+05FA : 0FD6FE93;
+05FB : 01D50EA3;
+05FC : 89D00AA3;
+05FD : 90002883;
+05FE : 90402603;
+05FF : DF934851;
+0600 : 00230158;
+0601 : CC320107;
+0602 : 00FFF793;
+0603 : 0108D093;
+0604 : 00F65813;
+0605 : 01230646;
+0606 : F29300F7;
+0607 : 07B701F0;
+0608 : 509300C8;
+0609 : 01A30116;
+060A : B2B30057;
+060B : DE130217;
+060C : CA460198;
+060D : FECE0F13;
+060E : 00B8D393;
+060F : 0058D313;
+0610 : 01F8F893;
+0611 : 01E700A3;
+0612 : 00189E13;
+0613 : 00187F13;
+0614 : 01F3F413;
+0615 : 03F37693;
+0616 : 01EE6FB3;
+0617 : 00D702A3;
+0618 : 00870223;
+0619 : 01F70323;
+061A : 005703A3;
+061B : 50B25422;
+061C : 080EE693;
+061D : 05934621;
+061E : 61451A90;
+061F : DE4FF06F;
+0620 : 542250B2;
+0621 : 80826145;
+0622 : 99805783;
+0623 : 1B904603;
+0624 : 01079293;
+0625 : 0102D313;
+0626 : 03938F1A;
+0627 : C2111B90;
+0628 : 7593C595;
+0629 : B8130103;
+062A : 80230015;
+062B : ED990103;
+062C : 99004703;
+062D : 0FF77893;
+062E : 01150E23;
+062F : 01150FA3;
+0630 : 99805E03;
+0631 : 010E1E93;
+0632 : 010EDF13;
+0633 : 010F1F93;
+0634 : 010FD793;
+0635 : 007F5293;
+0636 : 001F5693;
+0637 : 98F01F23;
+0638 : 009F5813;
+0639 : 0082F313;
+063A : 0126F613;
+063B : 0003C383;
+063C : 00C365B3;
+063D : 00487713;
+063E : 00E5C8B3;
+063F : 0E68CE13;
+0640 : 18C02F83;
+0641 : 007E4EB3;
+0642 : 01D50EA3;
+0643 : 01F51563;
+0644 : 2A234D48;
+0645 : 808288A0;
+0646 : 98B00823;
+0647 : 03E00793;
+0648 : 98F00023;
+0649 : B78D4581;
+064A : 03C00793;
+064B : 98F00023;
+064C : BF994585;
+064D : 02300793;
+064E : 00236509;
+064F : 458198F0;
+0650 : ABC50513;
+0651 : 0000B791;
+0652 : 4F525245;
+0653 : 00203A52;
+0654 : 20746120;
+0655 : 20007830;
+0656 : 00783028;
+0657 : 61420A29;
+0658 : 64612064;
+0659 : 73657264;
+065A : 30203A73;
+065B : 696D0078;
+065C : 696C6173;
+065D : 64656E67;
+065E : 766E6900;
+065F : 64696C61;
+0660 : 736E6920;
+0661 : 63757274;
+0662 : 6E6F6974;
+0663 : 2A0A0A00;
+0664 : 48202A2A;
+0665 : 6F6C6C65;
+0666 : 6F57202C;
+0667 : 21646C72;
+0668 : 2A2A2A20;
+0669 : 58414D0A;
+066A : 66203038;
+066B : 776D7269;
+066C : 20657261;
+066D : 706D6F63;
+066E : 64656C69;
+066F : 3A6E6F20;
+0670 : 44530020;
+0671 : 204D4152;
+0672 : 61746164;
+0673 : 65686320;
+0674 : 75736B63;
+0675 : 00203A6D;
+0676 : 70786520;
+0677 : 65746365;
+0678 : 42002064;
+0679 : 20737469;
+067A : 61776C61;
+067B : 73207379;
+067C : 202C7465;
+067D : 61656C63;
+067E : 00203A72;
+067F : 41524453;
+0680 : 6572204D;
+0681 : 772F6461;
+0682 : 65746972;
+0683 : 72726520;
+0684 : 000A726F;
+0685 : 41524453;
+0686 : 622E204D;
+0687 : 69207373;
+0688 : 6F6E2073;
+0689 : 657A2074;
+068A : 0A216F72;
+068B : 69615700;
+068C : 676E6974;
+068D : 73203520;
+068E : 726F6620;
+068F : 73657420;
+0690 : 676E6974;
+0691 : 002E2E2E;
+0692 : 00000101;
+0693 : 00000000;
+0694 : 00000000;
+0695 : 00000000;
+0696 : 00000000;
+0697 : 00000000;
+0698 : 00000000;
+0699 : 00000000;
+069A : 00000000;
+069B : 00000000;
+069C : 00000000;
+069D : 00000000;
+069E : 00000000;
+069F : 00000000;
+06A0 : 00000000;
+06A1 : 00000000;
+06A2 : 00000105;
+06A3 : 00007FBF;
+06A4 : 00000000;
+06A5 : D3030300;
+06A6 : 000016CE;
+06A7 : 00000000;
+06A8 : 000016F2;
+06A9 : 00000000;
+06AA : 00000000;
+06AB : 00000000;
+06AC : 000016E0;
+06AD : 00000000;
+06AE : 00000000;
+06AF : 00000000;
+06B0 : 00000000;
+06B1 : 00000000;
+06B2 : 00000000;
+06B3 : 00000101;
+06B4 : 0000FFFF;
+06B5 : 00000000;
+06B6 : 0003F600;
+06B7 : 00001918;
+06B8 : 00000000;
+06B9 : 00000000;
+06BA : 00000000;
+06BB : 00000000;
+06BC : 00000000;
+06BD : 00001928;
+06BE : 00000000;
+06BF : 00000000;
+06C0 : 00000000;
+06C1 : 00000000;
+06C2 : 00000000;
+06C3 : 00000000;
+06C4 : 00000000;
+06C5 : 00000000;
+06C6 : 00000000;
+06C7 : 00000000;
+06C8 : 00000000;
+06C9 : 00000000;
+06CA : 00000000;
+06CB : 00000000;
+06CC : 00000000;
+06CD : 00000000;
+06CE : 00000000;
+06CF : 00000000;
+06D0 : 00000000;
+06D1 : 00000000;
+06D2 : 00000000;
+06D3 : 00000000;
+06D4 : 00000000;
+06D5 : 00000000;
+06D6 : 00000000;
+06D7 : 00000000;
+06D8 : 6362612F;
+06D9 : 6B736964;
+06DA : 3030382E;
+06DB : 7246002F;
+06DC : 614A2069;
+06DD : 3832206E;
+06DE : 3A303020;
+06DF : 323A3731;
+06E0 : 53502035;
+06E1 : 30322054;
+06E2 : 003232;
+[06E3..1FFF] : 00;
+END;

BIN
fpga/output/v1.jic


BIN
fpga/output/v1.sof


BIN
fpga/output/v2.jic


BIN
fpga/output/v2.sof


+ 2 - 3
fpga/scripts/qsfdeps.pl

@@ -83,12 +83,11 @@ open(my $out, '>', $outfile) or die;
 
 print_deps($out, $outfile, %dep_deps);
 
-my $map_target = "$output_dir/$project.map.rpt";
-print_deps($out, $map_target, %map_deps);
-
 my $asm_target = "$output_dir/$project.mif_update.rpt";
 print_deps($out, $asm_target, %asm_deps);
 
+print_deps($out, "${project}_map_deps", %map_deps);
+
 close($out);
 
 exit 0;

+ 21 - 23
fpga/spirom.sv

@@ -147,7 +147,7 @@ module spirom (
 
 			.wrclk ( rom_clk ),
 			.data ( spi_in_data ),
-			.wrreq ( spi_in_req_q ),
+			.wrreq ( spi_in_req_q & is_spi ),
 			.wrusedw ( wrusedw ),
 
 			.rdclk ( ram_clk ),
@@ -238,6 +238,7 @@ module spirom (
    reg	       spi_more_q;
    reg	       spi_active;
    reg [3:0]   spi_cs_ctr;
+   reg [31:0]  spi_out_shr;
 
    // Explicit synchronizers for handshake signals
    synchronizer #(.width(1)) go_spi_synchro
@@ -255,11 +256,15 @@ module spirom (
       .q ( spi_active_s )
       );
 
+   // 64/4 = 16 bytes min space
+   wire dma_queue_space = (~wrusedw) >= 12'd128;
+
    always @(negedge rst_n or posedge rom_clk)
      if (~rst_n)
        begin
 	  spi_cmd_ctr  <= 6'b0;
 	  spi_clk_en   <= 1'b0;
+	  spi_clk_en_q <= 1'b0;
 	  spi_data_ctr <= 27'b0;
 	  spi_cs_n     <= 1'b1;
 	  spi_cs_ctr   <= 'b0;
@@ -270,12 +275,17 @@ module spirom (
 	  spi_in_shr   <= 32'b0;
 	  spi_active   <= 1'b0;
 	  spi_more_q   <= 1'b0;
+	  spi_out_shr  <= 32'b0;
        end
      else
        begin
 	  spi_in_req   <= 1'b0;
 	  spi_in_req_q <= spi_in_req;
 	  spi_clk_en   <= 1'b0;
+	  spi_clk_en_q <= spi_clk_en;
+
+	  // Bit to start transmitting on the next clock down transition
+	  spi_out_shr <= spi_out_shr << spi_clk_en;
 
 	  // After asserting CS#, wait 16 SPI clock times
 	  if (spi_cs_n)
@@ -292,6 +302,7 @@ module spirom (
 	       spi_active   <= 1'b1;
 	       spi_cs_n     <= 1'b0;
 	       spi_more_q   <= spi_more;
+	       spi_out_shr  <= romcmd;
 	    end
 	  else if ( ~|{spi_data_ctr, spi_cmd_ctr} )
 	    begin
@@ -308,8 +319,10 @@ module spirom (
 
 	       if ( spi_active )
 		 begin
-		    // 64/4 = 16 bytes min space
-		    spi_clk_en <= (~wrusedw) >= 12'd128;
+		    // This will block unnecessarily if the DMA queue
+		    // is full from a previous transaction, but that doesn't
+		    // matter in practice... just let it drain.
+		    spi_clk_en <= dma_queue_space;
 
 		    if ( spi_clk_en )
 		      begin
@@ -336,30 +349,15 @@ module spirom (
        end // else: !if(~rst_n)
 
    // SPI output data is shifted on the negative edge
-   reg [31:0] spi_out_shr;
-   reg	      spi_clk_en_q;
+   reg 	       spi_out_q;
+   always @(negedge rom_clk)
+     spi_out_q <= spi_out_shr[31];
 
-   assign spi_io[0] = spi_mosi_en ? spi_out_shr[31] : 1'bz;
+   assign spi_io[0] = spi_mosi_en ? spi_out_q : 1'bz;
    assign spi_io[1] = 1'bz;
 
-   always @(negedge rst_n or negedge rom_clk)
-     if (~rst_n)
-       begin
-	  spi_out_shr  <= 32'b0;
-	  spi_clk_en_q <= 1'b0;
-       end
-     else
-       begin
-	  spi_clk_en_q <= spi_clk_en;
-
-	  if (~spi_active)
-	    spi_out_shr <= romcmd;
-	  else if ( spi_clk_en_q )
-	    spi_out_shr <= { spi_out_shr[30:0], 1'b0 };
-       end
-
    //
-   // SPI_SCK output buffer
+   // SPI_SCK output buffer: emit a clock pulse iff spi_clk_en_q is high
    //
    ddio_out spi_clk_buf (
 			 .aclr ( ~rst_n ),

+ 3 - 0
fpga/v1.qsf

@@ -2,6 +2,9 @@
 
 set_global_assignment -name TOP_LEVEL_ENTITY v1
 set_global_assignment -name SOURCE_FILE v1.pins
+set_global_assignment -name SYSTEMVERILOG_FILE v1.sv
+set_global_assignment -name VERILOG_FILE ip/pll2_48.v
+set_global_assignment -name QIP_FILE ip/pll2_48.qip
 set_global_assignment -name SOURCE_FILE "max80-v1.cof"
 
 set_global_assignment -name SOURCE_TCL_SCRIPT_FILE max80.qsf

+ 5 - 2
fpga/v2.qsf

@@ -2,7 +2,12 @@
 
 set_global_assignment -name TOP_LEVEL_ENTITY v2
 set_global_assignment -name SOURCE_FILE v2.pins
+set_global_assignment -name VERILOG_FILE ip/pll2_16.v
+set_global_assignment -name QIP_FILE ip/pll2_16.qip
 set_global_assignment -name SOURCE_FILE "max80-v2.cof"
+set_global_assignment -name SYSTEMVERILOG_FILE v2.sv
+
+set_global_assignment -name SOURCE_TCL_SCRIPT_FILE max80.qsf
 
 set_instance_assignment -name IO_STANDARD LVDS -to usb_rx
 set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to usb_rx
@@ -13,7 +18,5 @@ set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to usb_dn
 set_instance_assignment -name IO_STANDARD "2.5 V" -to sd_cd_n
 set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sd_cd_n
 
-set_global_assignment -name SOURCE_TCL_SCRIPT_FILE max80.qsf
-
 # Quartus insists on this line...
 set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top

+ 6 - 16
rv32/Makefile

@@ -34,12 +34,7 @@ gendeps   = -MD -MF $(@D)/.$(@F).d -MT $@
 genhdrs = iodevs.h irqtable.h
 gensrcs =
 
-all: boot.mif dram.hex checksum.h
-
-# Generate MIF file for 8Kx32 RAM
-boot_depth  := 8192
-boot_width  := 32
-boot_stride := 1
+all: boot.bin dram.hex checksum.h
 
 ROMS    := $(wildcard roms/*.rom)
 ROMOBJS  = $(ROMS:.rom=.o)
@@ -72,9 +67,6 @@ fatfs.a: $(FATFS_O)
 
 CFLAGS_memset.c := -O2
 
-%.mif: %.bin bin2mif.pl
-	$(PERL) bin2mif.pl $< $@ $($*_depth) $($*_width) $($*_stride)
-
 %.hex: %.elf
 	$(OBJCOPY) -O ihex $< $@
 
@@ -87,14 +79,12 @@ boot.bin: max80.elf
 dram.bin: max80.elf
 	$(OBJCOPY) -O binary -j '.dram*' $< $@
 
-dram_init.bin: dram.bin max80.elf
-	dd if=$@ of=$< count=1 bs=
-
-checksum.h: dram.bin checksum.pl
-	$(PERL) checksum.pl $< $@ \
-		$$(($$($(NM) -n max80.elf --radix=decimal | \
+checksum.h: dram.bin boot.bin checksum.pl
+	$(PERL) checksum.pl -o $@ -p boot.bin \
+		-l $$(($$($(NM) -n max80.elf --radix=decimal | \
 			grep ' R __dram_init_end$$' | \
-	                awk '{ print $$1; }') - (1 << 30)))
+	                awk '{ print $$1; }') - (1 << 30))) \
+		dram.bin
 
 testimg.bin: testimg.elf
 	$(OBJCOPY) -O binary $< $@

+ 0 - 1746
rv32/boot.mif

@@ -1,1746 +0,0 @@
--- generated from boot.bin
-DEPTH = 8192;
-WIDTH = 32;
-ADDRESS_RADIX = HEX;
-DATA_RADIX = HEX;
-CONTENT BEGIN
-0000 : 00000000;
-0001 : 00000000;
-0002 : 00000000;
-0003 : 00100000;
-0004 : C0102473;
-0005 : 00008137;
-0006 : 2A80006F;
-0007 : 00000000;
-0008 : 0001210B;
-0009 : 008DF413;
-000A : 00040863;
-000B : 35B000EF;
-000C : 408D8DB3;
-000D : 060D8063;
-000E : 00000493;
-000F : 0FFDF293;
-0010 : 00029663;
-0011 : 008DDD93;
-0012 : 02048493;
-0013 : 00FDF293;
-0014 : 00029663;
-0015 : 004DDD93;
-0016 : 01048493;
-0017 : 003DF293;
-0018 : 00029663;
-0019 : 002DDD93;
-001A : 00848493;
-001B : 001DF293;
-001C : 00029663;
-001D : 001DDD93;
-001E : 00448493;
-001F : 0024D513;
-0020 : 000D0593;
-0021 : 0B0480E7;
-0022 : 001DDD93;
-0023 : 00448493;
-0024 : FA0D96E3;
-0025 : 30200073;
-0026 : 00000000;
-0027 : 00000013;
-0028 : 00008067;
-0029 : 0000250B;
-002A : 0005B00B;
-002B : 00000000;
-002C : 2330006F;
-002D : 5A80006F;
-002E : 5980006F;
-002F : 2CB0006F;
-0030 : 5A80006F;
-0031 : 21F0006F;
-0032 : 01B0106F;
-0033 : 2170006F;
-0034 : 2130006F;
-0035 : 2570006F;
-0036 : 20B0006F;
-0037 : 2070006F;
-0038 : 2030006F;
-0039 : 1FF0006F;
-003A : 00000000;
-003B : 7C5C2D2F;
-003C : 4101D2B0;
-003D : FFFFFFFF;
-003E : FFFFFFFF;
-003F : 00001AB8;
-0040 : 00000040;
-0041 : 00000000;
-0042 : 00000000;
-0043 : 00000000;
-0044 : 00000000;
-0045 : 00000000;
-0046 : 00000000;
-0047 : 00000000;
-0048 : 00000000;
-0049 : 00000000;
-004A : 00000000;
-004B : 00000000;
-004C : 00000000;
-004D : 00000000;
-004E : 00000000;
-004F : 00000000;
-0050 : 00000000;
-0051 : 00000000;
-0052 : 00000000;
-0053 : 00000000;
-0054 : 00000000;
-0055 : 00000000;
-0056 : 00000000;
-0057 : 00000000;
-0058 : 00000000;
-0059 : 00000000;
-005A : 00000000;
-005B : 00000000;
-005C : 00000000;
-005D : 00000000;
-005E : 00000000;
-005F : 00000000;
-0060 : 00000000;
-0061 : 00000000;
-0062 : 00000000;
-0063 : 00000000;
-0064 : 00000000;
-0065 : 00000000;
-0066 : 00000000;
-0067 : 00000000;
-0068 : 00000000;
-0069 : 00000000;
-006A : 00000000;
-006B : 00000000;
-006C : 00000000;
-006D : 00000000;
-006E : 00000000;
-006F : 00000000;
-0070 : 00000000;
-0071 : 00000000;
-0072 : 00000000;
-0073 : 00000000;
-0074 : 00000000;
-0075 : 00000000;
-0076 : 00000000;
-0077 : 00000000;
-0078 : 00000000;
-0079 : 00000000;
-007A : 00000000;
-007B : 00000000;
-007C : 00000000;
-007D : 00000000;
-007E : 00000000;
-007F : 00000000;
-0080 : 00000000;
-0081 : 00000000;
-0082 : 00000000;
-0083 : 00000000;
-0084 : 00000000;
-0085 : 00000000;
-0086 : 00000000;
-0087 : 00000000;
-0088 : 00000000;
-0089 : 00000000;
-008A : 00000000;
-008B : 00000000;
-008C : 00000000;
-008D : 00000000;
-008E : 00000000;
-008F : 00000000;
-0090 : 00000000;
-0091 : 00000000;
-0092 : 00000000;
-0093 : 00000000;
-0094 : 00000000;
-0095 : 00000000;
-0096 : 00000000;
-0097 : 00000000;
-0098 : 00000000;
-0099 : 00000000;
-009A : 00000000;
-009B : 00000000;
-009C : 00000000;
-009D : 00000000;
-009E : 00000000;
-009F : 00000000;
-00A0 : 00000000;
-00A1 : 00000000;
-00A2 : 00000000;
-00A3 : 00000000;
-00A4 : 00000000;
-00A5 : 00000000;
-00A6 : 00000000;
-00A7 : 00000000;
-00A8 : 00000000;
-00A9 : 00000000;
-00AA : 00000000;
-00AB : 00000000;
-00AC : 00000000;
-00AD : 00000000;
-00AE : 00000000;
-00AF : 00000000;
-00B0 : FFF04293;
-00B1 : 0602800B;
-00B2 : 00000193;
-00B3 : 0001A18B;
-00B4 : 12000513;
-00B5 : 2C000593;
-00B6 : 00052023;
-00B7 : 00052223;
-00B8 : 00052423;
-00B9 : 00052623;
-00BA : 00052823;
-00BB : 00052A23;
-00BC : 00052C23;
-00BD : 00052E23;
-00BE : 02050513;
-00BF : FCB56EE3;
-00C0 : 12802023;
-00C1 : 0040006F;
-00C2 : CE061101;
-00C3 : CA26CC22;
-00C4 : C64EC84A;
-00C5 : C256C452;
-00C6 : 2659C05A;
-00C7 : 1A604283;
-00C8 : 00028663;
-00C9 : 40007097;
-00CA : E2E080E7;
-00CB : 400074B7;
-00CC : 40007937;
-00CD : 5AFD4981;
-00CE : 1A448493;
-00CF : 20E90913;
-00D0 : 40007A37;
-00D1 : 0750008B;
-00D2 : 0810878B;
-00D3 : 1A704303;
-00D4 : 00030663;
-00D5 : 40001097;
-00D6 : 424080E7;
-00D7 : 3A1000EF;
-00D8 : 89C02403;
-00D9 : FE89F0E3;
-00DA : 00845393;
-00DB : 0FF47593;
-00DC : 93638626;
-00DD : 864A0003;
-00DE : 1AEA0513;
-00DF : 40001097;
-00E0 : 120080E7;
-00E1 : BF7D89A2;
-00E2 : 00000697;
-00E3 : D1468693;
-00E4 : 897D4690;
-00E5 : 8E49053E;
-00E6 : 8682C290;
-00E7 : 00000697;
-00E8 : D0068693;
-00E9 : 897D46D0;
-00EA : 8E49051E;
-00EB : 8682C290;
-00EC : F713C25D;
-00ED : 17930FF5;
-00EE : E2B30107;
-00EF : 931300E7;
-00F0 : 76930082;
-00F1 : 63B30015;
-00F2 : 87AA0053;
-00F3 : 4805EAC9;
-00F4 : 08C87163;
-00F5 : 0027F893;
-00F6 : 08089F63;
-00F7 : F6634EFD;
-00F8 : 0F1308CE;
-00F9 : 7F93FE06;
-00FA : 8F13FE0F;
-00FB : 87330207;
-00FC : A01901EF;
-00FD : 020F0F13;
-00FE : 0077A023;
-00FF : 0077A223;
-0100 : 0077A423;
-0101 : 0077A623;
-0102 : 0077A823;
-0103 : 0077AA23;
-0104 : 0077AC23;
-0105 : 0077AE23;
-0106 : 87FA86FA;
-0107 : FDE71CE3;
-0108 : 428D8A7D;
-0109 : 02C2F363;
-010A : FFC60313;
-010B : FFC37893;
-010C : 00478E93;
-010D : 01D88E33;
-010E : 0E91A011;
-010F : 0076A023;
-0110 : 86F687F6;
-0111 : FFCE9BE3;
-0112 : 73938A0D;
-0113 : 90630026;
-0114 : 8A050203;
-0115 : 8082E211;
-0116 : 00B78023;
-0117 : 07938082;
-0118 : 00230015;
-0119 : 167D0075;
-011A : 86BEB79D;
-011B : 9023BF5D;
-011C : 078900B7;
-011D : 9023BFF9;
-011E : 16790077;
-011F : BFB90789;
-0120 : 00000000;
-0121 : 00B567B3;
-0122 : 8B8D8FD1;
-0123 : 04079263;
-0124 : 00C50733;
-0125 : 8A7186AA;
-0126 : 40C007B3;
-0127 : 4C478067;
-0128 : 02000613;
-0129 : CEDC4DDC;
-012A : CE9C4D9C;
-012B : CADC49DC;
-012C : CA9C499C;
-012D : C6DC45DC;
-012E : C69C459C;
-012F : C2DC41DC;
-0130 : C29C419C;
-0131 : 96B295B2;
-0132 : FCE6ECE3;
-0133 : 00018082;
-0134 : 00C50733;
-0135 : 00050693;
-0136 : 0005C783;
-0137 : 00F68023;
-0138 : 06850585;
-0139 : FEE6EAE3;
-013A : 00008082;
-013B : 46254721;
-013C : 01C55693;
-013D : 05700793;
-013E : 64630512;
-013F : 079300D6;
-0140 : 82B30300;
-0141 : 002300D7;
-0142 : 177D9850;
-0143 : 8082F375;
-0144 : CE061101;
-0145 : CA26CC22;
-0146 : C64EC84A;
-0147 : C256C452;
-0148 : 297387AA;
-0149 : 84933430;
-014A : 64090015;
-014B : FFE4FA13;
-014C : 8F440693;
-014D : FFCA0993;
-014E : 8F440413;
-014F : 4AB54E29;
-0150 : 0006C703;
-0151 : E3710685;
-0152 : 483548A9;
-0153 : 0007C083;
-0154 : 93630785;
-0155 : 02930C00;
-0156 : 45290084;
-0157 : C30343B5;
-0158 : 02850002;
-0159 : 0C031163;
-015A : 3749854E;
-015B : 00F40393;
-015C : 45B54629;
-015D : 0003C503;
-015E : ED4D0385;
-015F : 0029D583;
-0160 : FFCA5803;
-0161 : 01059613;
-0162 : 01060533;
-0163 : 08933785;
-0164 : 43290144;
-0165 : C98342B5;
-0166 : 08850008;
-0167 : 0A099363;
-0168 : 4935854A;
-0169 : 4A2937A1;
-016A : 99200023;
-016B : 99400023;
-016C : 491D4481;
-016D : 02000A13;
-016E : 49A14AB5;
-016F : 85334401;
-0170 : 33D90084;
-0171 : 0E133725;
-0172 : 15630200;
-0173 : 00230124;
-0174 : 4E299950;
-0175 : 99C00023;
-0176 : 12E30405;
-0177 : 04A1FF34;
-0178 : FD449EE3;
-0179 : C0102EF3;
-017A : 1908BF37;
-017B : 0FFF0F93;
-017C : C01026F3;
-017D : 41D68733;
-017E : FEEFFCE3;
-017F : 878B57FD;
-0180 : 40850607;
-0181 : 80102623;
-0182 : 1463BFF5;
-0183 : 002301C7;
-0184 : 00239950;
-0185 : B72D98E0;
-0186 : 01109463;
-0187 : 99000023;
-0188 : 98100023;
-0189 : 1463B725;
-018A : 002300A3;
-018B : 00239870;
-018C : B7359860;
-018D : 00C51463;
-018E : 98B00023;
-018F : 98A00023;
-0190 : 9463BF15;
-0191 : 00230069;
-0192 : 00239850;
-0193 : B7A19930;
-0194 : 11416509;
-0195 : 91A50513;
-0196 : 3D5DC606;
-0197 : 11416509;
-0198 : 92550513;
-0199 : 356DC606;
-019A : 12400293;
-019B : 0002A783;
-019C : 00178313;
-019D : 0062A023;
-019E : 01F37393;
-019F : 02039163;
-01A0 : 00535513;
-01A1 : 00357593;
-01A2 : 0EC00693;
-01A3 : 00B68833;
-01A4 : 00084883;
-01A5 : 00234E21;
-01A6 : 00239910;
-01A7 : 808299C0;
-01A8 : CE061101;
-01A9 : CA26CC22;
-01AA : C64EC84A;
-01AB : C256C452;
-01AC : C0102773;
-01AD : 12E02423;
-01AE : DE900093;
-01AF : 0610078B;
-01B0 : 02936409;
-01B1 : 83138F44;
-01B2 : 04130452;
-01B3 : 47A98F44;
-01B4 : 43834735;
-01B5 : 03050003;
-01B6 : 14039363;
-01B7 : 2423449D;
-01B8 : 557D8090;
-01B9 : 06A0058B;
-01BA : 2005F613;
-01BB : C6B7DE65;
-01BC : 0837193A;
-01BD : 88B74000;
-01BE : 7A374000;
-01BF : 8F13F4D5;
-01C0 : 59FD6046;
-01C1 : 44814901;
-01C2 : 0F934501;
-01C3 : 8E130008;
-01C4 : 0A939188;
-01C5 : EB6325FA;
-01C6 : 0A9311CF;
-01C7 : 462908F4;
-01C8 : CE0345B5;
-01C9 : 0A85000A;
-01CA : 120E1963;
-01CB : 4EB533C1;
-01CC : 99D00023;
-01CD : 00234F29;
-01CE : 0F9399E0;
-01CF : 45290A54;
-01D0 : C7034A35;
-01D1 : 0F85000F;
-01D2 : 12071063;
-01D3 : 3B79854E;
-01D4 : 02000993;
-01D5 : FFF94513;
-01D6 : 99300023;
-01D7 : 49353B41;
-01D8 : 99200023;
-01D9 : 002347A9;
-01DA : 926398F0;
-01DB : 84B71204;
-01DC : 35374000;
-01DD : 49014001;
-01DE : 91848393;
-01DF : 2B050293;
-01E0 : 1053EC63;
-01E1 : 12091C63;
-01E2 : 80800893;
-01E3 : A0234A19;
-01E4 : 4A950148;
-01E5 : 0158A023;
-01E6 : 0EF40413;
-01E7 : 47B540A9;
-01E8 : 00044E03;
-01E9 : 10630405;
-01EA : 2EF3120E;
-01EB : BF37C010;
-01EC : 0F931908;
-01ED : 27730FFF;
-01EE : 09B3C010;
-01EF : FCE341D7;
-01F0 : 4935FF3F;
-01F1 : 99200023;
-01F2 : 70B747A9;
-01F3 : 00234000;
-01F4 : 829398F0;
-01F5 : 47291D90;
-01F6 : C3034FB5;
-01F7 : 02850002;
-01F8 : 0E031A63;
-01F9 : 40002097;
-01FA : 010080E7;
-01FB : 400073B7;
-01FC : 1F338493;
-01FD : 4EB54F29;
-01FE : 0004C503;
-01FF : E1750485;
-0200 : 80002583;
-0201 : 38584637;
-0202 : 14D60693;
-0203 : 10D58163;
-0204 : 400078B7;
-0205 : 1F788693;
-0206 : 4AB544A9;
-0207 : 9463A0C5;
-0208 : 002300F3;
-0209 : 002398E0;
-020A : B5659870;
-020B : 000FA683;
-020C : 48B30F91;
-020D : AE2300DF;
-020E : A803FF1F;
-020F : 0F33FFCF;
-0210 : AE23035F;
-0211 : 4EB3FEDF;
-0212 : 95360118;
-0213 : 01D4E4B3;
-0214 : 00D96933;
-0215 : 00D9F9B3;
-0216 : 1463BD7D;
-0217 : 002300CE;
-0218 : 002398B0;
-0219 : BD7599C0;
-021A : 00A71463;
-021B : 99400023;
-021C : 98E00023;
-021D : 9463B5F9;
-021E : 00230013;
-021F : 00239850;
-0220 : 43839870;
-0221 : 03050003;
-0222 : FE0397E3;
-0223 : 0313B5CD;
-0224 : 40A90BE4;
-0225 : B7F542B5;
-0226 : 0003A303;
-0227 : 69330391;
-0228 : BDF90069;
-0229 : 00B81463;
-022A : 98C00023;
-022B : 99000023;
-022C : 0006C803;
-022D : 17E30685;
-022E : B5F9FE08;
-022F : 0D640693;
-0230 : 463545A9;
-0231 : 1463B7F5;
-0232 : 0023001E;
-0233 : 002398F0;
-0234 : B5F999C0;
-0235 : 00E31463;
-0236 : 99F00023;
-0237 : 98600023;
-0238 : 1463BDED;
-0239 : 002301E5;
-023A : 002399D0;
-023B : B72998A0;
-023C : 009E1463;
-023D : 99500023;
-023E : 99C00023;
-023F : 0006CE03;
-0240 : 17E30685;
-0241 : 1097FE0E;
-0242 : 80E74000;
-0243 : 4583B0A0;
-0244 : 46038060;
-0245 : 46838050;
-0246 : 47038040;
-0247 : 78378070;
-0248 : 05134000;
-0249 : 10972718;
-024A : 80E74000;
-024B : 4883B760;
-024C : 4A038060;
-024D : 85638070;
-024E : 75370348;
-024F : 06134000;
-0250 : 45A920F5;
-0251 : A03949B5;
-0252 : 00B81463;
-0253 : 99300023;
-0254 : 99000023;
-0255 : 00064803;
-0256 : 17E30605;
-0257 : B765FE08;
-0258 : 00234AB5;
-0259 : 44299950;
-025A : 40007E37;
-025B : 98800023;
-025C : 23EE0E93;
-025D : 43B54A29;
-025E : 000ECF03;
-025F : 1D630E85;
-0260 : 3937120F;
-0261 : 1FB74001;
-0262 : 27371111;
-0263 : 04934433;
-0264 : 44010409;
-0265 : 111F8A13;
-0266 : 21170993;
-0267 : 40007937;
-0268 : 07B34AA1;
-0269 : 10930344;
-026A : 82B30024;
-026B : 05130014;
-026C : 040529C9;
-026D : 013785B3;
-026E : 00B2A023;
-026F : 0002A783;
-0270 : 40001097;
-0271 : ADC080E7;
-0272 : FD541DE3;
-0273 : 00234335;
-0274 : 43A99860;
-0275 : 98700023;
-0276 : 4A214981;
-0277 : 00299513;
-0278 : 00A485B3;
-0279 : 0513418C;
-027A : 098529C9;
-027B : 40001097;
-027C : AB0080E7;
-027D : FF4994E3;
-027E : 40007637;
-027F : 25060813;
-0280 : 44354329;
-0281 : 00084883;
-0282 : 9E630805;
-0283 : 4AA10A08;
-0284 : 878B6489;
-0285 : 25830804;
-0286 : 0513C000;
-0287 : 1AFD29C9;
-0288 : 40001097;
-0289 : A7C080E7;
-028A : FE0A95E3;
-028B : 400076B7;
-028C : 20C68E13;
-028D : 40B542A9;
-028E : 000E4E83;
-028F : 9B630E05;
-0290 : 1097080E;
-0291 : 80E74000;
-0292 : 4F11E0A0;
-0293 : 80800913;
-0294 : 01E92023;
-0295 : 40001097;
-0296 : B16080E7;
-0297 : 40002097;
-0298 : 07C080E7;
-0299 : 20234F8D;
-029A : 109701F9;
-029B : 80E74000;
-029C : 20975080;
-029D : 80E74000;
-029E : 2097ACC0;
-029F : 80E74000;
-02A0 : 4709F9A0;
-02A1 : 00E92023;
-02A2 : 40002097;
-02A3 : 05C080E7;
-02A4 : 20234785;
-02A5 : 209700F9;
-02A6 : 80E74000;
-02A7 : 2623E380;
-02A8 : 24238800;
-02A9 : 40F28000;
-02AA : 44D24462;
-02AB : 49B24942;
-02AC : 4A924A22;
-02AD : 80826105;
-02AE : 014F1463;
-02AF : 98700023;
-02B0 : 99E00023;
-02B1 : 9463BD55;
-02B2 : 00230068;
-02B3 : 00239880;
-02B4 : BF0D9910;
-02B5 : 005E9463;
-02B6 : 98100023;
-02B7 : 99D00023;
-02B8 : 4785BFA1;
-02B9 : 00A79533;
-02BA : FFF54293;
-02BB : 0655050B;
-02BC : 27038082;
-02BD : 02B700C0;
-02BE : 20230B00;
-02BF : 8333A0A0;
-02C0 : 03B300E2;
-02C1 : 053700B3;
-02C2 : 22232500;
-02C3 : 8E49A070;
-02C4 : A0C02423;
-02C5 : 20238082;
-02C6 : 07B7A0A0;
-02C7 : 22232000;
-02C8 : 8DDDA000;
-02C9 : A0B02423;
-02CA : 02938082;
-02CB : A70312C0;
-02CC : 06930002;
-02CD : A0230017;
-02CE : CB1900D2;
-02CF : 07634585;
-02D0 : 0F1302B7;
-02D1 : 0F932000;
-02D2 : 078BDFF0;
-02D3 : 808207FF;
-02D4 : 40000537;
-02D5 : 40008337;
-02D6 : 00050613;
-02D7 : 91830393;
-02D8 : 40C38633;
-02D9 : 05134581;
-02DA : B7610005;
-02DB : 40008837;
-02DC : 40013E37;
-02DD : 91880893;
-02DE : 2B0E0E93;
-02DF : 411E85B3;
-02E0 : 91880513;
-02E1 : 1101BF49;
-02E2 : CA26CE06;
-02E3 : C84ACC22;
-02E4 : C452C64E;
-02E5 : 88805783;
-02E6 : 18C00093;
-02E7 : 01079493;
-02E8 : 0FF7F293;
-02E9 : 0000A403;
-02EA : 826380C1;
-02EB : 43031202;
-02EC : 45838910;
-02ED : 46958900;
-02EE : 0FF37613;
-02EF : 0FF5F593;
-02F0 : 1066E463;
-02F1 : 6F634F05;
-02F2 : 146314CF;
-02F3 : 0D631006;
-02F4 : 2F831404;
-02F5 : 89630044;
-02F6 : 401C020F;
-02F7 : 00178713;
-02F8 : 8023C018;
-02F9 : 408300B7;
-02FA : 428301D4;
-02FB : F3330144;
-02FC : 0EA30050;
-02FD : 0AA30064;
-02FE : 40548860;
-02FF : FFF68393;
-0300 : 00742223;
-0301 : 02039863;
-0302 : 00C403B3;
-0303 : 00B38B23;
-0304 : 01045A03;
-0305 : 40CA5533;
-0306 : 00157913;
-0307 : 00090C63;
-0308 : 00860993;
-0309 : 00299813;
-030A : 010408B3;
-030B : 0008AE03;
-030C : 9E028522;
-030D : 1004F593;
-030E : 4450C1A1;
-030F : 14060D63;
-0310 : FFF60E93;
-0311 : 01D42623;
-0312 : 140E8763;
-0313 : 01D44083;
-0314 : 01544283;
-0315 : 0050F6B3;
-0316 : 00D40EA3;
-0317 : 88D00AA3;
-0318 : 00842383;
-0319 : 00138A13;
-031A : 01442423;
-031B : 0003C503;
-031C : 00A40E23;
-031D : 88A00A23;
-031E : 2004F913;
-031F : 02090563;
-0320 : 01D44803;
-0321 : 89504983;
-0322 : 89000AA3;
-0323 : 01045883;
-0324 : 0FF9F593;
-0325 : 2008FE13;
-0326 : 000E0763;
-0327 : 03C42E83;
-0328 : 85224605;
-0329 : 444C9E82;
-032A : 01045F83;
-032B : 36334040;
-032C : 1F1300B0;
-032D : 67330086;
-032E : 37B301FF;
-032F : E3330080;
-0330 : 609300E7;
-0331 : A09D0823;
-0332 : 0F63439D;
-0333 : F03D0676;
-0334 : FA13A8A1;
-0335 : 191303F5;
-0336 : 0813002A;
-0337 : 08B31BC0;
-0338 : A4030128;
-0339 : 00230008;
-033A : A0231140;
-033B : 03130080;
-033C : C0150820;
-033D : 00C42E03;
-033E : 01045F83;
-033F : 3EB3405C;
-0340 : 9F1301C0;
-0341 : 6733008E;
-0342 : 30B301FF;
-0343 : E2B300F0;
-0344 : E31300E0;
-0345 : 15230822;
-0346 : 46818860;
-0347 : 4C54C011;
-0348 : 88D02A23;
-0349 : EE0412E3;
-034A : 08200093;
-034B : 01009293;
-034C : 0092E4B3;
-034D : 88902423;
-034E : 446240F2;
-034F : 494244D2;
-0350 : 4A2249B2;
-0351 : 80826105;
-0352 : 04000513;
-0353 : 10004A03;
-0354 : 0000A023;
-0355 : 10A00023;
-0356 : 08200613;
-0357 : 88C01523;
-0358 : 88002A23;
-0359 : 09134401;
-035A : 09931BC0;
-035B : 08331000;
-035C : 25030089;
-035D : CD010008;
-035E : 01055883;
-035F : 0808FE13;
-0360 : 000E0763;
-0361 : 04052E83;
-0362 : 85D2461D;
-0363 : 04119E82;
-0364 : FD341FE3;
-0365 : 4F83BF51;
-0366 : 4F0301F4;
-0367 : 0E238940;
-0368 : 0A2301F4;
-0369 : 570389F0;
-036A : 75930104;
-036B : 77930FFF;
-036C : 83E31007;
-036D : 2303EC07;
-036E : 46010384;
-036F : 93028522;
-0370 : 47A1BD65;
-0371 : 828B575D;
-0372 : C10C06E7;
-0373 : 18C02383;
-0374 : 0EA3C150;
-0375 : 166300D5;
-0376 : 454C0275;
-0377 : 01055E03;
-0378 : 00C03633;
-0379 : 00B036B3;
-037A : 00869813;
-037B : 010668B3;
-037C : 01C8EEB3;
-037D : 082EEF13;
-037E : 89E01523;
-037F : 2A234D48;
-0380 : FF9388A0;
-0381 : 57DD0082;
-0382 : 06FF878B;
-0383 : 47A18082;
-0384 : 828B575D;
-0385 : 831306E7;
-0386 : C5500015;
-0387 : 00652423;
-0388 : 0005C383;
-0389 : 00D50EA3;
-038A : 18C02683;
-038B : 00750E23;
-038C : 02D51763;
-038D : 00452803;
-038E : 01055F03;
-038F : 00C03633;
-0390 : 010038B3;
-0391 : 00861E13;
-0392 : 01C8EEB3;
-0393 : 01EEEFB3;
-0394 : 082FE793;
-0395 : 88F01523;
-0396 : 2A234D48;
-0397 : F29388A0;
-0398 : 575D0082;
-0399 : 06E2878B;
-039A : 47A18082;
-039B : 828B575D;
-039C : 230306E7;
-039D : 0FA300C5;
-039E : 1A6300B5;
-039F : 26030003;
-03A0 : 0E2318C0;
-03A1 : 146300B5;
-03A2 : 0A2300C5;
-03A3 : F51388B0;
-03A4 : 55DD0082;
-03A5 : 06B5078B;
-03A6 : 47A18082;
-03A7 : 828B575D;
-03A8 : 238306E7;
-03A9 : 0EA318C0;
-03AA : 146300B5;
-03AB : 0AA30075;
-03AC : F51388B0;
-03AD : 55DD0082;
-03AE : 06B5078B;
-03AF : 07938082;
-03B0 : 18230940;
-03B1 : 0EA300F5;
-03B2 : 0AA30005;
-03B3 : 42838800;
-03B4 : 06A304F5;
-03B5 : E3130405;
-03B6 : 07A30012;
-03B7 : 80820465;
-03B8 : 04F54783;
-03B9 : 0027E293;
-03BA : 045507A3;
-03BB : 47838082;
-03BC : E29304F5;
-03BD : 07A30047;
-03BE : 80820455;
-03BF : C7CE7115;
-03C0 : CDA2CF86;
-03C1 : CBA6C1DA;
-03C2 : C5D2C9CA;
-03C3 : DF5EC3D6;
-03C4 : DB66DD62;
-03C5 : D76ED96A;
-03C6 : 0F400093;
-03C7 : 12402B03;
-03C8 : 0000A283;
-03C9 : 88002483;
-03CA : 0054F413;
-03CB : 17628063;
-03CC : 43836309;
-03CD : 0B93A003;
-03CE : F5130F40;
-03CF : C1710013;
-03D0 : 40001097;
-03D1 : 05C080E7;
-03D2 : 00157913;
-03D3 : 00090563;
-03D4 : 4A014A85;
-03D5 : 0A93A8D9;
-03D6 : AA038080;
-03D7 : 7CB7000A;
-03D8 : 3D374000;
-03D9 : 6C134001;
-03DA : A023002A;
-03DB : 4605018A;
-03DC : 20EC8593;
-03DD : 060D0513;
-03DE : 40004097;
-03DF : ED0080E7;
-03E0 : 77B7C105;
-03E1 : 85134000;
-03E2 : 00975E97;
-03E3 : 80E74000;
-03E4 : A9835120;
-03E5 : F293000A;
-03E6 : A023FFD9;
-03E7 : BF4D005A;
-03E8 : 100C0850;
-03E9 : 20EC8513;
-03EA : 02010023;
-03EB : 5097CA02;
-03EC : 80E74000;
-03ED : 4652D140;
-03EE : 40007DB7;
-03EF : 8513100C;
-03F0 : 0097602D;
-03F1 : 80E74000;
-03F2 : 08704DA0;
-03F3 : 8513082C;
-03F4 : CC0220EC;
-03F5 : 40005097;
-03F6 : B86080E7;
-03F7 : 45E24E72;
-03F8 : 40007FB7;
-03F9 : 00AE5E83;
-03FA : 01CE2F03;
-03FB : 630F8513;
-03FC : 009E9693;
-03FD : FFEF0613;
-03FE : 40000097;
-03FF : 4A4080E7;
-0400 : 1097BF81;
-0401 : 80E74000;
-0402 : 7593F4C0;
-0403 : F1A90015;
-0404 : 19000813;
-0405 : 00082703;
-0406 : 08B346FD;
-0407 : F56340EB;
-0408 : 20230716;
-0409 : 4A810168;
-040A : A0234A05;
-040B : 0093016B;
-040C : A7030F80;
-040D : FB930000;
-040E : C25E0014;
-040F : 0E63C002;
-0410 : 03130A87;
-0411 : A0238080;
-0412 : 23830080;
-0413 : F5930003;
-0414 : 96130014;
-0415 : F5130025;
-0416 : 6833FFB3;
-0417 : 78B700A6;
-0418 : 20234000;
-0419 : 89130103;
-041A : 43295B68;
-041B : 46834C35;
-041C : 09050009;
-041D : 8891EE99;
-041E : 7A37C8A9;
-041F : 0D134000;
-0420 : 4C295CBA;
-0421 : A01D4CB5;
-0422 : B5E14A81;
-0423 : 4A014A81;
-0424 : 9463BF79;
-0425 : 00230066;
-0426 : 00239980;
-0427 : BFC198D0;
-0428 : 018D9463;
-0429 : 99900023;
-042A : 99B00023;
-042B : 000D4D83;
-042C : 97E30D05;
-042D : 4E12FE0D;
-042E : 160E1563;
-042F : 40007EB7;
-0430 : 5D2E8793;
-0431 : 49B54FA9;
-0432 : 7AB7A821;
-0433 : 8D134000;
-0434 : BF455C5A;
-0435 : 01F29463;
-0436 : 99300023;
-0437 : 98500023;
-0438 : 0007C283;
-0439 : 97E30785;
-043A : 8C39FE02;
-043B : 00245713;
-043C : 7A934B05;
-043D : C05A0017;
-043E : 63894A05;
-043F : 4000C0B7;
-0440 : 85136309;
-0441 : 8D13B183;
-0442 : 4B812000;
-0443 : 84934B01;
-0444 : 0C132000;
-0445 : C42AA003;
-0446 : 04ED4583;
-0447 : 100A8863;
-0448 : 10058763;
-0449 : 4901846A;
-044A : 47834DA1;
-044B : F2932AE4;
-044C : 84630017;
-044D : 47030402;
-044E : 7313001C;
-044F : 18630017;
-0450 : 05130003;
-0451 : 40970504;
-0452 : 80E74000;
-0453 : 438367A0;
-0454 : F0932AE4;
-0455 : 0723FFE3;
-0456 : 45032A14;
-0457 : 059304CD;
-0458 : 0623FFF5;
-0459 : 480304BD;
-045A : 78932AF4;
-045B : 96630048;
-045C : 76130008;
-045D : 0723FFE8;
-045E : 09052AC4;
-045F : 2E840413;
-0460 : FBB915E3;
-0461 : 040D0723;
-0462 : C6914682;
-0463 : 2097856A;
-0464 : 80E74000;
-0465 : 4E128560;
-0466 : 0E634981;
-0467 : 5CDD020E;
-0468 : 870B4EA1;
-0469 : 6F09079E;
-046A : B90F0F93;
-046B : 03FB07B3;
-046C : 00F48DB3;
-046D : 04FDC983;
-046E : 040D87A3;
-046F : 0FF9F993;
-0470 : 0790068B;
-0471 : 0069F293;
-0472 : 20028D63;
-0473 : 2097856A;
-0474 : 80E74000;
-0475 : 46038160;
-0476 : 106304ED;
-0477 : 6F894606;
-0478 : B90F8793;
-0479 : 42910B05;
-047A : 9BBE9D3E;
-047B : F25B16E3;
-047C : 000A0A63;
-047D : 80800493;
-047E : 0004AA03;
-047F : FFDA7A93;
-0480 : 0154A023;
-0481 : 446E40FE;
-0482 : 494E44DE;
-0483 : 4A2E49BE;
-0484 : 4B0E4A9E;
-0485 : 5C6A5BFA;
-0486 : 5D4A5CDA;
-0487 : 612D5DBA;
-0488 : 7F378082;
-0489 : 07934000;
-048A : BD695DEF;
-048B : 4603FDB1;
-048C : 7813000C;
-048D : 19E30016;
-048E : 2883F408;
-048F : 66898800;
-0490 : B2368D93;
-0491 : 0048F913;
-0492 : 00091563;
-0493 : 8D934CA2;
-0494 : 0E1300AC;
-0495 : 0E930300;
-0496 : 802302F0;
-0497 : 80A301CD;
-0498 : 812301DD;
-0499 : 0413000D;
-049A : 8CEA2A8D;
-049B : 03000913;
-049C : 044D2F03;
-049D : 40007FB7;
-049E : 0693874A;
-049F : 8613008F;
-04A0 : 4591662F;
-04A1 : 79B78522;
-04A2 : 0D934000;
-04A3 : 5097DA84;
-04A4 : 80E74000;
-04A5 : 899331E0;
-04A6 : A68376C9;
-04A7 : 83630009;
-04A8 : 77B71206;
-04A9 : 87224000;
-04AA : 66A78613;
-04AB : 04000593;
-04AC : 50971008;
-04AD : 80E74000;
-04AE : C2832FA0;
-04AF : F7132AEC;
-04B0 : CB050012;
-04B1 : 001C4083;
-04B2 : 0010F313;
-04B3 : 00031763;
-04B4 : 4097856E;
-04B5 : 80E74000;
-04B6 : C3834EE0;
-04B7 : F5132AEC;
-04B8 : 8723FFE3;
-04B9 : 45832AAC;
-04BA : 861304CD;
-04BB : 0623FFF5;
-04BC : C80304CD;
-04BD : 78932AFC;
-04BE : 92630048;
-04BF : 7F930E08;
-04C0 : 87230FE8;
-04C1 : F6932BFC;
-04C2 : 4605002F;
-04C3 : 460DE291;
-04C4 : 856E100C;
-04C5 : 4097C632;
-04C6 : 80E74000;
-04C7 : 4EA9B920;
-04C8 : 2AECCE03;
-04C9 : 01D51A63;
-04CA : 7F934F32;
-04CB : 8563002F;
-04CC : 6F93000F;
-04CD : B7F1002E;
-04CE : C1114785;
-04CF : 62B34791;
-04D0 : 872300FE;
-04D1 : F7132A5C;
-04D2 : CB510012;
-04D3 : 400079B7;
-04D4 : 85A21010;
-04D5 : 66F98513;
-04D6 : 40000097;
-04D7 : 144080E7;
-04D8 : 02200313;
-04D9 : 00840393;
-04DA : 2A6CA823;
-04DB : 0A7CA023;
-04DC : 567D55FD;
-04DD : 4097856E;
-04DE : 80E74000;
-04DF : C91146C0;
-04E0 : 40007DB7;
-04E1 : 851385A2;
-04E2 : 0097683D;
-04E3 : 80E74000;
-04E4 : 26031120;
-04E5 : A083044D;
-04E6 : A583064C;
-04E7 : 5883060C;
-04E8 : 95130026;
-04E9 : D8130180;
-04EA : 66330085;
-04EB : F3630105;
-04EC : 864600C8;
-04ED : 2ACC9623;
-04EE : 04CD4683;
-04EF : 00168E13;
-04F0 : 05CD0623;
-04F1 : 0E930905;
-04F2 : 04130380;
-04F3 : 8C932E84;
-04F4 : 1FE32E8C;
-04F5 : 4F05E9D9;
-04F6 : 05ED0723;
-04F7 : 0991B375;
-04F8 : F713BD6D;
-04F9 : 08E30019;
-04FA : 4303DE07;
-04FB : 4603049D;
-04FC : 6505048D;
-04FD : 00635393;
-04FE : 79050593;
-04FF : 00839093;
-0500 : 00BB8833;
-0501 : 010088B3;
-0502 : 00167913;
-0503 : 00737C93;
-0504 : 01148433;
-0505 : 04090063;
-0506 : 2E800693;
-0507 : 02DC8DB3;
-0508 : 00FD8E33;
-0509 : 01C48EB3;
-050A : 2AEECF03;
-050B : 001F7F93;
-050C : 040F9963;
-050D : F8000893;
-050E : 051D06A3;
-050F : 08000593;
-0510 : 3425856A;
-0511 : 040D0423;
-0512 : 048D4603;
-0513 : FFE67693;
-0514 : 04DD0423;
-0515 : 048D4D83;
-0516 : 002DFE13;
-0517 : 0A0E0463;
-0518 : 010D5803;
-0519 : FFDDF593;
-051A : 04BD0423;
-051B : 10086893;
-051C : 011D1823;
-051D : 06134685;
-051E : 85A21000;
-051F : 3A41856A;
-0520 : 856ABB99;
-0521 : 40001097;
-0522 : 4F4080E7;
-0523 : 0813E901;
-0524 : 06A30210;
-0525 : 0593050D;
-0526 : B75D0210;
-0527 : 80800793;
-0528 : A283D002;
-0529 : 45950007;
-052A : E713856A;
-052B : C3980022;
-052C : 831332ED;
-052D : 83B3050B;
-052E : 856A006D;
-052F : 00748933;
-0530 : 40001097;
-0531 : 486080E7;
-0532 : 00851593;
-0533 : 854A4601;
-0534 : 40004097;
-0535 : 312080E7;
-0536 : 45A1C511;
-0537 : 04BD06A3;
-0538 : BFB945A1;
-0539 : 06131014;
-053A : 85A21000;
-053B : 4097854A;
-053C : 80E74000;
-053D : F175CDE0;
-053E : 05135082;
-053F : 9EE31000;
-0540 : B799FCA0;
-0541 : 004DFE93;
-0542 : 020E8563;
-0543 : 010D5083;
-0544 : FFBDF913;
-0545 : 052D0423;
-0546 : 0010E513;
-0547 : 00AD1823;
-0548 : 04100693;
-0549 : 10000613;
-054A : 856A85A2;
-054B : 897FF0EF;
-054C : FF13B15D;
-054D : 0563008D;
-054E : 6789040F;
-054F : 2E800F93;
-0550 : B9078293;
-0551 : 03FC8CB3;
-0552 : 025B0733;
-0553 : 00EC8333;
-0554 : 00648DB3;
-0555 : 2AEDC383;
-0556 : 0013F913;
-0557 : 02091E63;
-0558 : F8000293;
-0559 : 045D06A3;
-055A : 08000593;
-055B : 38F5856A;
-055C : 040D0423;
-055D : 048D4703;
-055E : FF777313;
-055F : 046D0423;
-0560 : 048D4D83;
-0561 : F393856A;
-0562 : 042300FD;
-0563 : 1097047D;
-0564 : 80E74000;
-0565 : B1814220;
-0566 : 0023F093;
-0567 : 00008963;
-0568 : 04000793;
-0569 : 04FD06A3;
-056A : 04000593;
-056B : 856AB7C1;
-056C : 40001097;
-056D : 3C8080E7;
-056E : 0F93E901;
-056F : 06A30210;
-0570 : 059305FD;
-0571 : B75D0210;
-0572 : 0513D002;
-0573 : 410C8080;
-0574 : 050B8893;
-0575 : 011C8633;
-0576 : 0025E813;
-0577 : 01052023;
-0578 : 8CB3856A;
-0579 : 109700C4;
-057A : 80E74000;
-057B : 15933600;
-057C : 46010085;
-057D : 40978566;
-057E : 80E74000;
-057F : C9011EC0;
-0580 : 02000F13;
-0581 : 05ED06A3;
-0582 : 02000593;
-0583 : C683B785;
-0584 : 06132AED;
-0585 : 85A21000;
-0586 : 0086EE13;
-0587 : 2BCD8723;
-0588 : 85661014;
-0589 : 40004097;
-058A : D96080E7;
-058B : 5402F971;
-058C : 10000E93;
-058D : FDD416E3;
-058E : 1663BF35;
-058F : F993000A;
-0590 : 8EE30049;
-0591 : 846AB809;
-0592 : 4CA14D81;
-0593 : 2AE44683;
-0594 : 0086FE13;
-0595 : 000E0E63;
-0596 : 05040513;
-0597 : 40004097;
-0598 : FAC080E7;
-0599 : 2AE44E83;
-059A : FF7EFF13;
-059B : 2BE40723;
-059C : 04130D85;
-059D : 9BE32E84;
-059E : B695FD9D;
-059F : 01D54783;
-05A0 : 0047E293;
-05A1 : 00550EA3;
-05A2 : 88500AA3;
-05A3 : 47838082;
-05A4 : E29301D5;
-05A5 : 0EA30027;
-05A6 : 0AA30055;
-05A7 : 80828850;
-05A8 : D4227179;
-05A9 : F793D606;
-05AA : 842E0045;
-05AB : 4083CFCD;
-05AC : 031301D5;
-05AD : F2931B10;
-05AE : 0EA30FB0;
-05AF : 0AA30055;
-05B0 : 43838850;
-05B1 : 85B70073;
-05B2 : 8893AE14;
-05B3 : 0613AE15;
-05B4 : 08331470;
-05B5 : 47030276;
-05B6 : 4F030063;
-05B7 : 45830053;
-05B8 : 50930033;
-05B9 : 7F930017;
-05BA : 979303FF;
-05BB : F293005F;
-05BC : E6B301F0;
-05BD : 47830057;
-05BE : BE330023;
-05BF : 43830313;
-05C0 : 43030043;
-05C1 : F0930013;
-05C2 : F61300F7;
-05C3 : 929301F3;
-05C4 : 073E0150;
-05C5 : CE02CC02;
-05C6 : 0EB34785;
-05C7 : 181301C8;
-05C8 : FE1300B6;
-05C9 : E8B301F5;
-05CA : 1F130106;
-05CB : 0EC6010E;
-05CC : 01E8EFB3;
-05CD : 01430693;
-05CE : 011ED893;
-05CF : 005FE3B3;
-05D0 : 011765B3;
-05D1 : 01969613;
-05D2 : 00C3E833;
-05D3 : 01059E13;
-05D4 : 1C23CA42;
-05D5 : 5F1300B1;
-05D6 : 1223010E;
-05D7 : 202391E0;
-05D8 : 03A39100;
-05D9 : 70931AF0;
-05DA : 8D630404;
-05DB : 42830000;
-05DC : 462101D5;
-05DD : 0402E693;
-05DE : 1B100593;
-05DF : F0EFC62A;
-05E0 : 4532E44F;
-05E1 : 53130462;
-05E2 : 52634184;
-05E3 : 46830A03;
-05E4 : 071301D5;
-05E5 : FE931A90;
-05E6 : 0EA30FD6;
-05E7 : 0AA301D5;
-05E8 : 288389D0;
-05E9 : 26039000;
-05EA : 48519040;
-05EB : 0158DF93;
-05EC : 01070023;
-05ED : F793CC32;
-05EE : D09300FF;
-05EF : 58130108;
-05F0 : 064600F6;
-05F1 : 00F70123;
-05F2 : 01F0F293;
-05F3 : 00C807B7;
-05F4 : 01165093;
-05F5 : 005701A3;
-05F6 : 0217B2B3;
-05F7 : 0198DE13;
-05F8 : 0F13CA46;
-05F9 : D393FECE;
-05FA : D31300B8;
-05FB : F8930058;
-05FC : 00A301F8;
-05FD : 9E1301E7;
-05FE : 7F130018;
-05FF : F4130018;
-0600 : 769301F3;
-0601 : 6FB303F3;
-0602 : 02A301EE;
-0603 : 022300D7;
-0604 : 03230087;
-0605 : 03A301F7;
-0606 : 54220057;
-0607 : E69350B2;
-0608 : 4621080E;
-0609 : 1A900593;
-060A : F06F6145;
-060B : 50B2DE4F;
-060C : 61455422;
-060D : 57838082;
-060E : 46039980;
-060F : 92931B90;
-0610 : D3130107;
-0611 : 8F1A0102;
-0612 : 1B900393;
-0613 : C595C211;
-0614 : 01037593;
-0615 : 0015B813;
-0616 : 01038023;
-0617 : 4703ED99;
-0618 : 78939900;
-0619 : 0E230FF7;
-061A : 0FA30115;
-061B : 5E030115;
-061C : 1E939980;
-061D : DF13010E;
-061E : 1F93010E;
-061F : D793010F;
-0620 : 5293010F;
-0621 : 5693007F;
-0622 : 1F23001F;
-0623 : 581398F0;
-0624 : F313009F;
-0625 : F6130082;
-0626 : C3830126;
-0627 : 65B30003;
-0628 : 771300C3;
-0629 : C8B30048;
-062A : CE1300E5;
-062B : 2F830E68;
-062C : 4EB318C0;
-062D : 0EA3007E;
-062E : 156301D5;
-062F : 4D4801F5;
-0630 : 88A02A23;
-0631 : 08238082;
-0632 : 079398B0;
-0633 : 002303E0;
-0634 : 458198F0;
-0635 : 0793B78D;
-0636 : 002303C0;
-0637 : 458598F0;
-0638 : 0793BF99;
-0639 : 65090230;
-063A : 98F00023;
-063B : 05134581;
-063C : B791A745;
-063D : 4F525245;
-063E : 00203A52;
-063F : 20746120;
-0640 : 20007830;
-0641 : 00783028;
-0642 : 61420A29;
-0643 : 64612064;
-0644 : 73657264;
-0645 : 30203A73;
-0646 : 696D0078;
-0647 : 696C6173;
-0648 : 64656E67;
-0649 : 766E6900;
-064A : 64696C61;
-064B : 736E6920;
-064C : 63757274;
-064D : 6E6F6974;
-064E : 2A0A0A00;
-064F : 48202A2A;
-0650 : 6F6C6C65;
-0651 : 6F57202C;
-0652 : 21646C72;
-0653 : 2A2A2A20;
-0654 : 58414D0A;
-0655 : 66203038;
-0656 : 776D7269;
-0657 : 20657261;
-0658 : 706D6F63;
-0659 : 64656C69;
-065A : 3A6E6F20;
-065B : 6E614A20;
-065C : 20323220;
-065D : 32323032;
-065E : 3A313020;
-065F : 333A3030;
-0660 : 53000A31;
-0661 : 4D415244;
-0662 : 74616420;
-0663 : 68632061;
-0664 : 736B6365;
-0665 : 203A6D75;
-0666 : 74694200;
-0667 : 6C612073;
-0668 : 73796177;
-0669 : 74657320;
-066A : 6C63202C;
-066B : 3A726165;
-066C : 44530020;
-066D : 204D4152;
-066E : 64616572;
-066F : 6972772F;
-0670 : 65206574;
-0671 : 726F7272;
-0672 : 4453000A;
-0673 : 204D4152;
-0674 : 7373622E;
-0675 : 20736920;
-0676 : 20746F6E;
-0677 : 6F72657A;
-0678 : 57000A21;
-0679 : 69746961;
-067A : 3520676E;
-067B : 66207320;
-067C : 7420726F;
-067D : 69747365;
-067E : 2E2E676E;
-067F : 0000002E;
-0680 : 00000101;
-0681 : 00000000;
-0682 : 00000000;
-0683 : 00000000;
-0684 : 00000000;
-0685 : 00000000;
-0686 : 00000000;
-0687 : 00000000;
-0688 : 00000000;
-0689 : 00000000;
-068A : 00000000;
-068B : 00000000;
-068C : 00000000;
-068D : 00000000;
-068E : 00000000;
-068F : 00000000;
-0690 : 00000105;
-0691 : 00007FBF;
-0692 : 00000000;
-0693 : D3030300;
-0694 : 0000167C;
-0695 : 00000000;
-0696 : 000016A0;
-0697 : 00000000;
-0698 : 00000000;
-0699 : 00000000;
-069A : 0000168E;
-069B : 00000000;
-069C : 00000000;
-069D : 00000000;
-069E : 00000000;
-069F : 00000000;
-06A0 : 00000000;
-06A1 : 00000101;
-06A2 : 0000FFFF;
-06A3 : 00000000;
-06A4 : 0003F600;
-06A5 : 000018C6;
-06A6 : 00000000;
-06A7 : 00000000;
-06A8 : 00000000;
-06A9 : 00000000;
-06AA : 00000000;
-06AB : 000018D6;
-06AC : 00000000;
-06AD : 00000000;
-06AE : 00000000;
-06AF : 00000000;
-06B0 : 00000000;
-06B1 : 00000000;
-06B2 : 00000000;
-06B3 : 00000000;
-06B4 : 00000000;
-06B5 : 00000000;
-06B6 : 00000000;
-06B7 : 00000000;
-06B8 : 00000000;
-06B9 : 00000000;
-06BA : 00000000;
-06BB : 00000000;
-06BC : 00000000;
-06BD : 00000000;
-06BE : 00000000;
-06BF : 00000000;
-06C0 : 00000000;
-06C1 : 00000000;
-06C2 : 00000000;
-06C3 : 00000000;
-06C4 : 00000000;
-06C5 : 00000000;
-06C6 : 6362612F;
-06C7 : 6B736964;
-06C8 : 3030382E;
-06C9 : 002F;
-[06CA..1FFF] : 00;
-END;

+ 1 - 1
rv32/checksum.h

@@ -1,4 +1,4 @@
 #ifndef CHECKSUM_H
 #define CHECKSUM_H
-#define SDRAM_SUM 0xff919e72
+#define SDRAM_SUM 0x4631defa
 #endif

+ 49 - 11
rv32/checksum.pl

@@ -3,10 +3,30 @@
 use strict;
 use integer;
 
-my($infile,$outfile,$length) = @ARGV;
+my $o;
+my $infile;
+my $outfile;
+my $patchfile;
+my $length;
+while (defined($o = shift @ARGV)) {
+    if ($o =~ /^-/) {
+	if ($o eq '-o') {
+	    $outfile = shift @ARGV;
+	} elsif ($o eq '-p') {
+	    $patchfile = shift @ARGV;
+	} elsif ($o eq '-l') {
+	    $length = shift @ARGV;
+	} else {
+	    last;		# Error
+	}
+    } else {
+	$infile = $o;
+	last;
+    }
+}
 
-unless (defined($outfile)) {
-    die "Usage: $0 infile outfile [length]\n";
+if (!defined($infile) || scalar @ARGV) {
+    die "Usage: $0 [-o outfile][-p patchfile][-l length] infile\n";
 }
 
 sub nextblock($$$) {
@@ -35,14 +55,32 @@ while (($blocklen = nextblock(4096, $len, $length)) &&
 }
 close($in);
 
-open(my $out, '>', $outfile) or die "$0: $outfile: $!\n";
+if (defined($outfile)) {
+    my $out;
+    if ($outfile =~ /^-?$/) {
+	open($out, '>&', \*STDOUT);
+    } else {
+	open($out, '>', $outfile);
+    }
+    die "$0: $outfile: $!\n" unless defined($out);
 
-my $outfile_c = uc($outfile);
-$outfile_c =~ s/[\W_]+/_/g;
+    my $outfile_c = uc($outfile) || 'SDRAM_SUM_H';
+    $outfile_c =~ s/[\W_]+/_/g;
 
-print  $out "#ifndef $outfile_c\n";
-print  $out "#define $outfile_c\n";
-printf $out "#define SDRAM_SUM 0x%08x\n", $sum;
-print  $out "#endif\n";
+    print  $out "#ifndef $outfile_c\n";
+    print  $out "#define $outfile_c\n";
+    printf $out "#define SDRAM_SUM 0x%08x\n", $sum;
+    print  $out "#endif\n";
 
-close($out);
+    close($out);
+}
+
+if (defined($patchfile)) {
+    my $pf;
+    open($pf, '+<', $patchfile) or die "$0: $patchfile: $!\n";
+    binmode $pf;
+
+    seek($pf, 8, 0) or die "$0: $patchfile: $!\n";
+    print $pf pack("V", $sum);
+    close($pf);
+}

+ 3 - 0
rv32/fw.h

@@ -6,6 +6,8 @@
 #include "irq.h"
 
 extern const size_t __rom_offset;
+extern const uint32_t __dram_checksum;
+extern const char __datestamp[];
 
 extern no_return _die(void);
 extern no_return exit(int);
@@ -27,6 +29,7 @@ static inline uint32_t timer_count(void)
     extern volatile uint32_t timer_irq_count;
     return timer_irq_count;
 }
+
 extern void init(void);
 
 extern void mount_abcdrives(void);

+ 16 - 1
rv32/head.S

@@ -17,10 +17,16 @@
 	.section ".null","a"
 	.globl _NULL
 _NULL:
-	.space 12
+	.space 8
 	.type	_NULL, @object
 	.size	_NULL, . - _NULL
 
+	.globl __dram_checksum
+__dram_checksum:
+	.long 0			// Filled in post-link
+	.type __dram_checksum, @object
+	.size __dram_checksum, . - __dram_checksum
+
 	.globl __rom_offset
 __rom_offset:
 	.long ROM_OFFSET
@@ -83,6 +89,15 @@ time_zero:
 	.size time_zero, . - time_zero
 	.popsection
 
+	// Time stamp definition as patched in by FPGA build
+	.section ".datestamp","a"
+	.globl __datestamp
+__datestamp:
+	.space 32
+	.type __datestamp, @object
+	.size __datestamp, . - __datestamp
+
+	// Stack definition
 	.section ".stack","aw",@nobits
 	.balign 4
 	.globl ___stack_bottom

+ 5 - 1
rv32/max80.ld

@@ -221,9 +221,13 @@ SECTIONS
 	_edata = .;
 	_end = .;
 
+	/* Patched in during FPGA compile, must immediately follow _end */
+	.datestamp (NOLOAD) : { KEEP(*(.datestamp)) }
+
 	HIDDEN($sram_size_assert = ASSERT(. <= STACK_BOTTOM, "SRAM overflow"));
 
-	.stack STACK_BOTTOM : {
+	. = STACK_BOTTOM;
+	.stack (NOLOAD) : {
 		KEEP (*(.stack))
 	}
 

+ 1 - 1
rv32/romcopy.c

@@ -45,7 +45,7 @@ enum romcmd {
 
 size_t __sbss romcopy_log[15];
 
-#define SPIROM_DUAL_MODE 0
+#define SPIROM_DUAL_MODE 1
 
 void __hot romcopy_download(void *dst, size_t offset, size_t len)
 {

+ 5 - 1
rv32/system.c

@@ -91,7 +91,7 @@ void __hot init(void)
 #ifdef TEST
 	"testing"
 #endif
-	"firmware compiled on: " __DATE__ " " __TIME__ "\n";
+	"firmware compiled on: ";
 
     timer_irq_start = rdtime();
 
@@ -100,6 +100,8 @@ void __hot init(void)
 		(1U << BUSERR_IRQ)|(1U << SYSCLOCK_IRQ));
 
     con_puts(hello);
+    con_puts(__datestamp);
+    con_putc('\n');
 
     set_leds(7);
     wait_romcopy_done();
@@ -138,6 +140,8 @@ void __hot init(void)
 
 	con_puts(hotstr("SDRAM data checksum: "));
 	con_print_hex(v);
+	con_puts(hotstr(" expected "));
+	con_print_hex(__dram_checksum);
 	con_putc('\n');
 
 	con_puts(hotstr("Bits always set, clear: "));

+ 0 - 0
rv32/bin2mif.pl → tools/bin2mif.pl