Browse Source

fw: pull in libc, printf to console, SDRAM test

H. Peter Anvin 3 years ago
parent
commit
c2bee3cb77
6 changed files with 1055 additions and 57 deletions
  1. 4 3
      fw/Makefile
  2. 931 31
      fw/boot.mif
  3. 44 0
      fw/console.c
  4. 12 0
      fw/console.h
  5. 64 12
      fw/hello.c
  6. 0 11
      fw/io.h

+ 4 - 3
fw/Makefile

@@ -11,9 +11,10 @@ CPPFLAGS  = $(INCLUDE) $(riscv_flags)
 CFLAGS    = $(CPPFLAGS)
 SFLAGS    = $(CPPFLAGS) -D__ASSEMBLY__
 LDFLAGS   = $(CFLAGS) \
-	    -nostdlib \
+	    -Wl,--gc-sections \
 	    -Wl,--section-start=.init=0 \
-	    -Wl,-z,common-page-size=16 -Wl,-z,max-page-size=16
+	    -Wl,-z,common-page-size=16 \
+	    -Wl,-z,max-page-size=16
 
 gendeps   = -MD -MF .$(@F).d
 
@@ -30,7 +31,7 @@ boot_depth  := 2048
 boot_width  := 32
 boot_stride := 1
 
-boot.elf: head.o hello.o
+boot.elf: head.o hello.o console.o
 
 %.mif: %.bin bin2mif.pl
 	$(PERL) bin2mif.pl $< $@ $($*_depth) $($*_width) $($*_stride)

+ 931 - 31
fw/boot.mif

@@ -5,37 +5,937 @@ ADDRESS_RADIX = HEX;
 DATA_RADIX = HEX;
 CONTENT BEGIN
 000 : 00002137;
-001 : 0120006F;
+001 : 1260006F;
 002 : 00000000;
 003 : 00000000;
-004 : 0040006F;
-005 : 47E5A001;
-006 : C4F02223;
-007 : C0000023;
-008 : 07400F93;
-009 : 000FC883;
-00A : 04089163;
-00B : 0200B6B7;
-00C : 1FF68293;
-00D : 02A00613;
-00E : FFF8C313;
-00F : 40235393;
-010 : 00189593;
-011 : 0013F513;
-012 : 00B56833;
-013 : 0FF87893;
-014 : C1100023;
-015 : C0102E73;
-016 : C0102EF3;
-017 : 41CE8F33;
-018 : FFE2FCE3;
-019 : C4C00023;
-01A : 0023BFC1;
-01B : 0F85C510;
-01C : 0000BF55;
-01D : 6C6C6548;
-01E : 57202C6F;
-01F : 646C726F;
-020 : 000A0D21;
-[021..7FF] : 00;
+004 : 1AC0006F;
+005 : C4221141;
+006 : 0793C606;
+007 : 842A0000;
+008 : 4581C791;
+009 : 00000097;
+00A : 000000E7;
+00B : 8601A503;
+00C : C391551C;
+00D : 85229782;
+00E : 429000EF;
+00F : 71796571;
+010 : 20050513;
+011 : D226D606;
+012 : CE4ED04A;
+013 : CA56CC52;
+014 : C65EC85A;
+015 : C266C462;
+016 : C06AD422;
+017 : 6285228D;
+018 : C0000023;
+019 : D6C28513;
+01A : B9B764C1;
+01B : 22790200;
+01C : 4C814901;
+01D : 14FD6B05;
+01E : 6B856A05;
+01F : 89936C05;
+020 : 6A851FF9;
+021 : 42000637;
+022 : 400005B7;
+023 : CF0B0513;
+024 : 0437224D;
+025 : 0D374000;
+026 : 77B34200;
+027 : E7890094;
+028 : 051385A2;
+029 : 2271D14A;
+02A : 45818522;
+02B : 852228ED;
+02C : 28D555FD;
+02D : FFF44593;
+02E : 20F58522;
+02F : 852285A2;
+030 : 20D50411;
+031 : FDA41BE3;
+032 : D1CB8513;
+033 : 04372A05;
+034 : 0D374000;
+035 : 401C4200;
+036 : 009470B3;
+037 : 00009663;
+038 : 051385A2;
+039 : 22B1D14A;
+03A : 16E30411;
+03B : 0513FFA4;
+03C : 2229D44C;
+03D : FFFCC313;
+03E : 40235393;
+03F : 0013F593;
+040 : E6330C86;
+041 : 7C930195;
+042 : 00230FF6;
+043 : 2773C190;
+044 : 26F3C010;
+045 : 8833C010;
+046 : FCE340E6;
+047 : 0905FF09;
+048 : 851385CA;
+049 : 2231D5CA;
+04A : 1197BFB1;
+04B : 81930000;
+04C : 85135021;
+04D : 86138681;
+04E : 8E098941;
+04F : 2A854581;
+050 : 00000513;
+051 : 0513C519;
+052 : 00970000;
+053 : 00E70000;
+054 : 28FD0000;
+055 : 004C4502;
+056 : 35CD4601;
+057 : 1141BD65;
+058 : C783C422;
+059 : C6068781;
+05A : 0793EF91;
+05B : CB810000;
+05C : 05136505;
+05D : 0097E205;
+05E : 00E70000;
+05F : 47850000;
+060 : 86F18C23;
+061 : 442240B2;
+062 : 80820141;
+063 : 00000793;
+064 : 6505CB91;
+065 : 87C18593;
+066 : E2050513;
+067 : 00000317;
+068 : 00000067;
+069 : C10C8082;
+06A : 86AE4110;
+06B : 00C58763;
+06C : 650585AA;
+06D : CD050513;
+06E : 8082A8AD;
+06F : C737A001;
+070 : 5793002D;
+071 : 02930015;
+072 : 83336C07;
+073 : 45810057;
+074 : 00A36663;
+075 : 02A353B3;
+076 : FFF38593;
+077 : C4B02223;
+078 : 00238082;
+079 : 26F3C4A0;
+07A : 0713C010;
+07B : 27F33470;
+07C : 82B3C010;
+07D : 7CE340D7;
+07E : 8082FE57;
+07F : C4221141;
+080 : 842AC606;
+081 : 00044503;
+082 : 40B2E509;
+083 : 01414422;
+084 : 04058082;
+085 : B7FD37F9;
+086 : 862A7175;
+087 : 850A86AE;
+088 : 08000593;
+089 : 28EDC706;
+08A : 3FC9850A;
+08B : 614940BA;
+08C : 71398082;
+08D : 104CD22E;
+08E : D432CE06;
+08F : D83AD636;
+090 : DC42DA3E;
+091 : C62EDE46;
+092 : 40F23FC1;
+093 : 80826121;
+094 : C4221141;
+095 : 6405C226;
+096 : 87936485;
+097 : 0413E244;
+098 : 8C1DE244;
+099 : C606C04A;
+09A : 84938409;
+09B : 4901E244;
+09C : 02891563;
+09D : 64056485;
+09E : E2448793;
+09F : E2840413;
+0A0 : 84098C1D;
+0A1 : E2448493;
+0A2 : 1D634901;
+0A3 : 40B20089;
+0A4 : 44924422;
+0A5 : 01414902;
+0A6 : 409C8082;
+0A7 : 04910905;
+0A8 : B7F99782;
+0A9 : 0905409C;
+0AA : 97820491;
+0AB : 832ABFF9;
+0AC : 0023C611;
+0AD : 167D00B3;
+0AE : FE650305;
+0AF : 71198082;
+0B0 : DAA6DCA2;
+0B1 : D8CADE86;
+0B2 : 843284AA;
+0B3 : 00065C63;
+0B4 : 08B00793;
+0B5 : 557DC11C;
+0B6 : 546650F6;
+0B7 : 594654D6;
+0B8 : 80826109;
+0B9 : 20800793;
+0BA : 00F11A23;
+0BB : CC2EC42E;
+0BC : 47818636;
+0BD : C01986BA;
+0BE : FFF40793;
+0BF : 002C597D;
+0C0 : C83E8526;
+0C1 : 1B23CE3E;
+0C2 : 22210121;
+0C3 : 01255563;
+0C4 : 08B00793;
+0C5 : D069C09C;
+0C6 : 802347A2;
+0C7 : BF6D0007;
+0C8 : 86B28736;
+0C9 : 85AA862E;
+0CA : 8641A503;
+0CB : 1101BF49;
+0CC : A903C84A;
+0CD : CC220085;
+0CE : C452C64E;
+0CF : CE06C256;
+0D0 : C05ACA26;
+0D1 : 0005AA83;
+0D2 : 8A32842E;
+0D3 : E76389B6;
+0D4 : D7830726;
+0D5 : F71300C5;
+0D6 : CF394807;
+0D7 : 448D4858;
+0D8 : 84B3498C;
+0D9 : 470902E4;
+0DA : 40BA8AB3;
+0DB : C4B38B2A;
+0DC : 871302E4;
+0DD : 97560016;
+0DE : 00E4F363;
+0DF : F79384BA;
+0E0 : C7A54007;
+0E1 : 855A85A6;
+0E2 : 892A2F81;
+0E3 : 480CC925;
+0E4 : 25B58656;
+0E5 : 00C45783;
+0E6 : B7F7F793;
+0E7 : 0807E793;
+0E8 : 00F41623;
+0E9 : 01242823;
+0EA : 9956C844;
+0EB : 415484B3;
+0EC : 01242023;
+0ED : 894EC404;
+0EE : 0129F363;
+0EF : 4008894E;
+0F0 : 85D2864A;
+0F1 : 441C2D81;
+0F2 : 87B34501;
+0F3 : C41C4127;
+0F4 : 97CA401C;
+0F5 : 40F2C01C;
+0F6 : 44D24462;
+0F7 : 49B24942;
+0F8 : 4A924A22;
+0F9 : 61054B02;
+0FA : 86268082;
+0FB : 00EF855A;
+0FC : 892A7BE0;
+0FD : 480CF945;
+0FE : 2581855A;
+0FF : 202347B1;
+100 : 578300FB;
+101 : 557D00C4;
+102 : 0407E793;
+103 : 00F41623;
+104 : D783B7D9;
+105 : 717100C5;
+106 : D326D522;
+107 : CD52D14A;
+108 : CF4ED706;
+109 : C95ACB56;
+10A : C562C75E;
+10B : C16AC366;
+10C : F793DEEE;
+10D : 8A2A0807;
+10E : 84B2892E;
+10F : C3B18436;
+110 : E3A1499C;
+111 : 04000593;
+112 : 20232D41;
+113 : 282300A9;
+114 : E50500A9;
+115 : 202347B1;
+116 : 557D00FA;
+117 : 542A50BA;
+118 : 590A549A;
+119 : 4A6A49FA;
+11A : 4B4A4ADA;
+11B : 4C2A4BBA;
+11C : 4D0A4C9A;
+11D : 614D5DF6;
+11E : 07938082;
+11F : 2A230400;
+120 : 079300F9;
+121 : 04A30200;
+122 : 079302F1;
+123 : D2020300;
+124 : 02F10523;
+125 : 0C93C622;
+126 : 6B050250;
+127 : 6D056B85;
+128 : 00000A93;
+129 : 47838426;
+12A : C3990004;
+12B : 09979E63;
+12C : 40940DB3;
+12D : 00940D63;
+12E : 862686EE;
+12F : 855285CA;
+130 : 57FD35BD;
+131 : 18F50B63;
+132 : 97EE5792;
+133 : 4783D23E;
+134 : 84630004;
+135 : 57FD1807;
+136 : 00140493;
+137 : CE02C802;
+138 : CC02CA3E;
+139 : 040109A3;
+13A : 4D85D482;
+13B : 0004C583;
+13C : 05134615;
+13D : 21FDD80B;
+13E : 841347C2;
+13F : E5390014;
+140 : 0107F713;
+141 : 0713C709;
+142 : 09A30200;
+143 : F71304E1;
+144 : C7090087;
+145 : 02B00713;
+146 : 04E109A3;
+147 : 0004C683;
+148 : 02A00713;
+149 : 02E68D63;
+14A : 842647F2;
+14B : 46254681;
+14C : 47034529;
+14D : 05930004;
+14E : 07130014;
+14F : 7563FD07;
+150 : C69506E6;
+151 : A025CE3E;
+152 : BFB10405;
+153 : D80B0713;
+154 : 95338D19;
+155 : 8FC900AD;
+156 : 84A2C83E;
+157 : 4732BF41;
+158 : 00470693;
+159 : C6364318;
+15A : 02074963;
+15B : 4703CE3A;
+15C : 07930004;
+15D : 106302E0;
+15E : 470306F7;
+15F : 07930014;
+160 : 1B6302A0;
+161 : 47B202F7;
+162 : 87130409;
+163 : 439C0047;
+164 : C163C63A;
+165 : CA3E0207;
+166 : 0733A83D;
+167 : E79340E0;
+168 : CE3A0027;
+169 : B7E1C83E;
+16A : 02A787B3;
+16B : 4685842E;
+16C : B74197BA;
+16D : B7C557FD;
+16E : CA020405;
+16F : 47814681;
+170 : 45294625;
+171 : 00044703;
+172 : 00140593;
+173 : FD070713;
+174 : 04E67D63;
+175 : 4583F2E9;
+176 : 460D0004;
+177 : D88B8513;
+178 : CD012111;
+179 : D88B8793;
+17A : 47C28D1D;
+17B : 04000713;
+17C : 00A71733;
+17D : 04058FD9;
+17E : 4583C83E;
+17F : 46190004;
+180 : D8CD0513;
+181 : 00140493;
+182 : 02B10423;
+183 : CD392EE1;
+184 : 020A9763;
+185 : 47B24742;
+186 : 10077713;
+187 : 0791CF09;
+188 : 5792C63E;
+189 : D23E97CE;
+18A : 87B3BDB5;
+18B : 842E02A7;
+18C : 97BA4685;
+18D : 079DBF41;
+18E : 07A19BE1;
+18F : 0078B7D5;
+190 : 32E00693;
+191 : 080C864A;
+192 : 00978552;
+193 : 00E70000;
+194 : 57FD0000;
+195 : 16E389AA;
+196 : 5783FCF5;
+197 : 557D00C9;
+198 : 0407F793;
+199 : DE079CE3;
+19A : BBCD5512;
+19B : 06930078;
+19C : 864A32E0;
+19D : 8552080C;
+19E : BFE12A11;
+19F : CC527179;
+1A0 : 8A3A499C;
+1A1 : D4224598;
+1A2 : CE4ED04A;
+1A3 : D606CA56;
+1A4 : C85AD226;
+1A5 : 89AAC65E;
+1A6 : 8932842E;
+1A7 : D3638AB6;
+1A8 : 87BA00E7;
+1A9 : 00F92023;
+1AA : 04344703;
+1AB : 0785C701;
+1AC : 00F92023;
+1AD : F793401C;
+1AE : C7910207;
+1AF : 00092783;
+1B0 : 20230789;
+1B1 : 400400F9;
+1B2 : E8918899;
+1B3 : 01940B13;
+1B4 : 445C5BFD;
+1B5 : 00092703;
+1B6 : CC638F99;
+1B7 : 478304F4;
+1B8 : 36B30434;
+1B9 : 401C00F0;
+1BA : 0207F793;
+1BB : 0613EBA5;
+1BC : 85D60434;
+1BD : 9A02854E;
+1BE : 036357FD;
+1BF : 401C04F5;
+1C0 : 44814711;
+1C1 : 99638B99;
+1C2 : 444400E7;
+1C3 : 00092783;
+1C4 : D3638C9D;
+1C5 : 44810004;
+1C6 : 4818441C;
+1C7 : 00F75463;
+1C8 : 94BE8F99;
+1C9 : 04694901;
+1CA : 98635B7D;
+1CB : 45010524;
+1CC : 4685A809;
+1CD : 85D6865A;
+1CE : 9A02854E;
+1CF : 01751E63;
+1D0 : 50B2557D;
+1D1 : 54925422;
+1D2 : 49F25902;
+1D3 : 4AD24A62;
+1D4 : 4BB24B42;
+1D5 : 80826145;
+1D6 : BFA50485;
+1D7 : 00D40733;
+1D8 : 03000613;
+1D9 : 04C701A3;
+1DA : 04544703;
+1DB : 00168793;
+1DC : 068997A2;
+1DD : 04E781A3;
+1DE : 4685BF9D;
+1DF : 85D68622;
+1E0 : 9A02854E;
+1E1 : FB650EE3;
+1E2 : B7450905;
+1E3 : D4227179;
+1E4 : D04AD226;
+1E5 : D606CE4E;
+1E6 : CA56CC52;
+1E7 : C883C85A;
+1E8 : 07930185;
+1E9 : 84AA0780;
+1EA : 8932842E;
+1EB : EE6389B6;
+1EC : 07930117;
+1ED : 86930620;
+1EE : ED630435;
+1EF : 89630117;
+1F0 : 07931A08;
+1F1 : 8B630580;
+1F2 : 0A9316F8;
+1F3 : 01230424;
+1F4 : A8050514;
+1F5 : F9D88793;
+1F6 : 0FF7F793;
+1F7 : 66E34655;
+1F8 : 6605FEF6;
+1F9 : 0613078A;
+1FA : 97B2DBC6;
+1FB : 8782439C;
+1FC : 8A93431C;
+1FD : 86930425;
+1FE : 439C0047;
+1FF : 8123C314;
+200 : 478504F5;
+201 : 419CAA49;
+202 : F6134308;
+203 : 05930807;
+204 : C2050045;
+205 : C30C411C;
+206 : D8636805;
+207 : 07130007;
+208 : 07B302D0;
+209 : 01A340F0;
+20A : 081304E4;
+20B : 4729D948;
+20C : F613A099;
+20D : 411C0407;
+20E : DE79C30C;
+20F : 87C107C2;
+210 : 4190BFE1;
+211 : 7513431C;
+212 : 85930806;
+213 : C5010047;
+214 : 439CC30C;
+215 : 7613A039;
+216 : C30C0406;
+217 : D783DA7D;
+218 : 68050007;
+219 : 06F00713;
+21A : D9480813;
+21B : 0CE88C63;
+21C : 01A34729;
+21D : 40500404;
+21E : 4563C410;
+21F : 400C0006;
+220 : C00C99ED;
+221 : 8AB6E399;
+222 : 8AB6CE19;
+223 : 02E7F633;
+224 : 96421AFD;
+225 : 00064603;
+226 : 00CA8023;
+227 : D7B3863E;
+228 : 75E302E7;
+229 : 47A1FEE6;
+22A : 00F71E63;
+22B : 8B85401C;
+22C : 4058CB91;
+22D : C763481C;
+22E : 079300E7;
+22F : 8FA30300;
+230 : 1AFDFEFA;
+231 : 415686B3;
+232 : 874EC814;
+233 : 007086CA;
+234 : 852685A2;
+235 : 5A7D3365;
+236 : 0D451363;
+237 : 50B2557D;
+238 : 54925422;
+239 : 49F25902;
+23A : 4AD24A62;
+23B : 61454B42;
+23C : 419C8082;
+23D : 0207E793;
+23E : 6805C19C;
+23F : 07800893;
+240 : DA880813;
+241 : 051402A3;
+242 : 430C4010;
+243 : 08067513;
+244 : 0591419C;
+245 : 7513E511;
+246 : C1190406;
+247 : 83C107C2;
+248 : 7713C30C;
+249 : C7010016;
+24A : 02066613;
+24B : 4741C010;
+24C : 4010F3A9;
+24D : FDF67613;
+24E : BF25C010;
+24F : 08136805;
+250 : B7C9D948;
+251 : B7354721;
+252 : 431C4190;
+253 : 781349CC;
+254 : 85130806;
+255 : 06630047;
+256 : C3080008;
+257 : C38C439C;
+258 : C308A801;
+259 : 04067613;
+25A : DA75439C;
+25B : 00B79023;
+25C : 00042823;
+25D : BF918AB6;
+25E : 41D0431C;
+25F : 86934581;
+260 : C3140047;
+261 : 0007AA83;
+262 : 28A98556;
+263 : 0533C501;
+264 : C0484155;
+265 : C81C405C;
+266 : 040401A3;
+267 : 4814B73D;
+268 : 85CA8656;
+269 : 99828526;
+26A : F3450AE3;
+26B : 8B89401C;
+26C : 47B2E78D;
+26D : 54E34448;
+26E : 853EF2F5;
+26F : 4685B70D;
+270 : 85CA8656;
+271 : 99828526;
+272 : F1650AE3;
+273 : 445C0A05;
+274 : 8F994732;
+275 : FEFA45E3;
+276 : 4A01BFE9;
+277 : 01940A93;
+278 : B7F55B7D;
+279 : 0FF5F593;
+27A : 1463962A;
+27B : 450100C5;
+27C : 47838082;
+27D : 8DE30005;
+27E : 0505FEB7;
+27F : 832AB7FD;
+280 : 8383CA09;
+281 : 00230005;
+282 : 167D0073;
+283 : 05850305;
+284 : 8082FA6D;
+285 : 832AC215;
+286 : 67634685;
+287 : 56FD00B5;
+288 : FFF60713;
+289 : 95BA933A;
+28A : 00058383;
+28B : 00730023;
+28C : 9336167D;
+28D : FA6D95B6;
+28E : CDD18082;
+28F : FFC5A783;
+290 : CC221101;
+291 : 8413CE06;
+292 : D363FFC5;
+293 : 943E0007;
+294 : 2ADDC62A;
+295 : 8681A783;
+296 : EB894532;
+297 : 00042223;
+298 : 8681A423;
+299 : 40F24462;
+29A : A2C56105;
+29B : 00F47D63;
+29C : 06B34010;
+29D : 966300C4;
+29E : 439400D7;
+29F : 96B243DC;
+2A0 : C05CC014;
+2A1 : 873EBFF1;
+2A2 : C39943DC;
+2A3 : FEF47DE3;
+2A4 : 06334314;
+2A5 : 1F6300D7;
+2A6 : 40100086;
+2A7 : C31496B2;
+2A8 : 00D70633;
+2A9 : FCC790E3;
+2AA : 43DC4390;
+2AB : C31496B2;
+2AC : BF4DC35C;
+2AD : 00C47563;
+2AE : C11C47B1;
+2AF : 4010B765;
+2B0 : 00C406B3;
+2B1 : 00D79663;
+2B2 : 43DC4394;
+2B3 : C01496B2;
+2B4 : C340C05C;
+2B5 : 8082BF41;
+2B6 : CA261101;
+2B7 : 00358493;
+2B8 : C84A98F1;
+2B9 : CC22CE06;
+2BA : 04A1C64E;
+2BB : 892A47B1;
+2BC : 04F4F263;
+2BD : E16344B1;
+2BE : 854A04B4;
+2BF : 871322B1;
+2C0 : 43188681;
+2C1 : 86818693;
+2C2 : E031843A;
+2C3 : 86C18413;
+2C4 : E789401C;
+2C5 : 854A4581;
+2C6 : C0082219;
+2C7 : 854A85A6;
+2C8 : 59FD28FD;
+2C9 : 07351863;
+2CA : 202347B1;
+2CB : 854A00F9;
+2CC : A0312A29;
+2CD : FC04D1E3;
+2CE : 202347B1;
+2CF : 450100F9;
+2D0 : 446240F2;
+2D1 : 494244D2;
+2D2 : 610549B2;
+2D3 : 401C8082;
+2D4 : CE638F85;
+2D5 : 462D0207;
+2D6 : 00F67663;
+2D7 : 943EC01C;
+2D8 : A029C004;
+2D9 : 1263405C;
+2DA : C29C0287;
+2DB : 28F1854A;
+2DC : 00B40513;
+2DD : 00440793;
+2DE : 07339961;
+2DF : 01E340F5;
+2E0 : 943AFCF5;
+2E1 : C01C8F89;
+2E2 : C35CBF65;
+2E3 : 8722B7C5;
+2E4 : BFA54040;
+2E5 : 00350413;
+2E6 : 03E39871;
+2E7 : 05B3FC85;
+2E8 : 854A40A4;
+2E9 : 1DE328AD;
+2EA : BFBDFB35;
+2EB : CC221101;
+2EC : CA26CE06;
+2ED : C64EC84A;
+2EE : 8432C452;
+2EF : 4462E991;
+2F0 : 44D240F2;
+2F1 : 49B24942;
+2F2 : 85B24A22;
+2F3 : B7296105;
+2F4 : 35A5EE01;
+2F5 : 40F24481;
+2F6 : 49424462;
+2F7 : 4A2249B2;
+2F8 : 44D28526;
+2F9 : 80826105;
+2FA : 892E8A2A;
+2FB : 89AA2085;
+2FC : 00856763;
+2FD : 00155793;
+2FE : EEE384CA;
+2FF : 85A2FC87;
+300 : 3DD98552;
+301 : D96184AA;
+302 : F3638622;
+303 : 864E0089;
+304 : 852685CA;
+305 : 85CA33ED;
+306 : 35058552;
+307 : 1141BF6D;
+308 : C226C422;
+309 : 852E842A;
+30A : A823C606;
+30B : 28898601;
+30C : 166357FD;
+30D : A78300F5;
+30E : C3918701;
+30F : 40B2C01C;
+310 : 44924422;
+311 : 80820141;
+312 : 80828082;
+313 : FFC5A783;
+314 : FFC78513;
+315 : 0007D563;
+316 : 419C95AA;
+317 : 8082953E;
+318 : 05D00893;
+319 : 00000073;
+31A : 00055B63;
+31B : C4221141;
+31C : C606842A;
+31D : 40800433;
+31E : C1002889;
+31F : A001A001;
+320 : 87418793;
+321 : 1141439C;
+322 : 86AAC606;
+323 : 87418713;
+324 : 0893E38D;
+325 : 45010D60;
+326 : 00000073;
+327 : 196357FD;
+328 : 202500F5;
+329 : C11C47B1;
+32A : 40B2557D;
+32B : 80820141;
+32C : 431CC308;
+32D : 0D600893;
+32E : 853696BE;
+32F : 00000073;
+330 : FED511E3;
+331 : 853EC308;
+332 : A503B7CD;
+333 : 80828641;
+334 : 2070250D;
+335 : 6572203A;
+336 : 25206461;
+337 : 20783830;
+338 : 746F7277;
+339 : 30252065;
+33A : 0A0D7838;
+33B : 00000000;
+33C : 74736554;
+33D : 20676E69;
+33E : 41524453;
+33F : 7266204D;
+340 : 25206D6F;
+341 : 6F742070;
+342 : 2E702520;
+343 : 0A0D2E2E;
+344 : 00000000;
+345 : 2070250D;
+346 : 00000000;
+347 : 6165520D;
+348 : 676E6964;
+349 : 63616220;
+34A : 6F74206B;
+34B : 65686320;
+34C : 66206B63;
+34D : 6120726F;
+34E : 7361696C;
+34F : 2E2E7365;
+350 : 000A0D2E;
+351 : 5244530D;
+352 : 74204D41;
+353 : 20747365;
+354 : 706D6F63;
+355 : 6574656C;
+356 : 00000A0D;
+357 : 706F6F4C;
+358 : 25203A73;
+359 : 0A0A0D75;
+35A : 00000000;
+35B : 480A0A0D;
+35C : 6F6C6C65;
+35D : 6F57202C;
+35E : 21646C72;
+35F : 00000A0D;
+360 : 2B302D23;
+361 : 00000020;
+362 : 004C6C68;
+363 : 45676665;
+364 : 00004746;
+365 : 33323130;
+366 : 37363534;
+367 : 42413938;
+368 : 46454443;
+369 : 00000000;
+36A : 33323130;
+36B : 37363534;
+36C : 62613938;
+36D : 66656463;
+36E : 00000000;
+36F : 000007F0;
+370 : 00000806;
+371 : 000007CA;
+372 : 000007CA;
+373 : 000007CA;
+374 : 000007CA;
+375 : 00000806;
+376 : 000007CA;
+377 : 000007CA;
+378 : 000007CA;
+379 : 000007CA;
+37A : 00000948;
+37B : 00000842;
+37C : 000008F2;
+37D : 000007CA;
+37E : 000007CA;
+37F : 00000978;
+380 : 000007CA;
+381 : 00000842;
+382 : 000007CA;
+383 : 000007CA;
+384 : 000008FA;
+385 : 00000000;
+386 : 00000000;
+387 : 00000000;
+388 : 00000000;
+389 : 0000018C;
+38A : 0000015E;
+38B : 00000000;
+38C : 00000000;
+38D : 00000000;
+38E : 00000000;
+38F : 00000000;
+390 : 00000000;
+391 : 00000000;
+392 : 00000000;
+393 : 00000000;
+394 : 00000000;
+395 : 00000000;
+396 : 00000000;
+397 : 00000000;
+398 : 00000000;
+399 : 00000000;
+39A : 00000000;
+39B : 00000000;
+39C : 00000000;
+39D : 00000000;
+39E : 00000000;
+39F : 00000000;
+3A0 : 00000000;
+3A1 : 00000000;
+3A2 : 00000000;
+3A3 : 00000E2C;
+3A4 : 00000E2C;
+[3A5..7FF] : 00;
 END;

+ 44 - 0
fw/console.c

@@ -0,0 +1,44 @@
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "console.h"
+#include "io.h"
+
+void con_set_baudrate(uint32_t b)
+{
+    uint32_t bauddiv = (CON_BAUD_BASE + (b >> 1))/b;
+    CON_BAUDDIV = bauddiv ? bauddiv - 1 : 0;
+}
+
+void con_putc(char c)
+{
+    CONSOLE = c;
+    udelay(10);
+}
+
+void con_puts(const char *str)
+{
+    while (*str)
+	con_putc(*str++);
+}
+
+void con_vprintf(const char *fmt, va_list ap)
+{
+    char buf[128];		/* Maximum text size */
+    unsigned int len;
+    const char *p;
+
+    vsnprintf(buf, sizeof buf, fmt, ap);
+    con_puts(buf);
+}
+
+void con_printf(const char *fmt, ...)
+{
+    va_list ap;
+    va_start(ap, fmt);
+    con_vprintf(fmt, ap);
+    va_end(ap);
+}

+ 12 - 0
fw/console.h

@@ -0,0 +1,12 @@
+#ifndef CONSOLE_H
+#define CONSOLE_H
+
+#include <stdarg.h>
+
+void con_set_baudrate(uint32_t);
+void con_putc(char c);
+void con_puts(const char *);
+void con_vprintf(const char *, va_list);
+void con_printf(const char *, ...);
+
+#endif /* CONSOLE_H */

+ 64 - 12
fw/hello.c

@@ -2,6 +2,7 @@
 #include <stdint.h>
 
 #include "io.h"
+#include "console.h"
 
 void die(void)
 {
@@ -9,25 +10,76 @@ void die(void)
 	;
 }
 
-void _start(void)
+#define SDRAM_ADDR 0x40000000
+#define SDRAM_SIZE (32 << 20)
+
+static void write_check(volatile uint32_t *p, uint32_t v)
+{
+    uint32_t rb;
+    
+    *p = v;
+    rb = *p;
+
+    if (v != rb)
+	con_printf("\r%p : read %08x wrote %08x\r\n", p, rb, v);
+}
+
+static void test_sdram(void)
+{
+    uint32_t * const sdram_start = (uint32_t *)SDRAM_ADDR;
+    uint32_t * const sdram_end   = (uint32_t *)(SDRAM_ADDR + SDRAM_SIZE);
+    volatile uint32_t *p;
+    
+    con_printf("Testing SDRAM from %p to %p...\r\n", sdram_start, sdram_end);
+
+    for (p = sdram_start ; p < sdram_end ; p++) {
+	uint32_t a = (uint32_t)p;
+
+	if (!(a & 0xffff))
+	    con_printf("\r%p ", p);
+
+	write_check(p, 0);
+	write_check(p, ~0);
+	write_check(p, ~a);
+	write_check(p, a);
+    }
+
+    con_puts("\rReading back to check for aliases...\r\n");
+	
+    for (p = sdram_start ; p < sdram_end ; p++) {
+	uint32_t a = (uint32_t)p;
+	uint32_t v = *p;
+
+	if (!(a & 0xffff))
+	    con_printf("\r%p ", p);
+
+#if 0
+	if (v != a)
+	  con_printf("\r%p : read %08x expected %08x\r\n", p, v, a);
+#endif
+    }
+
+    con_puts("\rSDRAM test complete\r\n");
+}
+
+void main(void)
 {
-    static const char hello[] = "Hello, World!\r\n";
-    const char *p;
+    static const char hello[] = "\r\n\nHello, World!\r\n";
     uint8_t led = 0;
+    unsigned int loops = 0;
 
-    con_set_baudrate(115000);
+    con_set_baudrate(115200);
     set_led(led = 0);
 
-    for (p = hello; *p; p++)
-	CONSOLE = *p;
+    con_puts(hello);
 
     while ( 1 ) {
-      for (int x = 0; x < 10000000; x++)
-	/* nothing */;
-      led = (led << 1) | ((~led >> 2) & 1);
-      set_led(led);
-      udelay(400000);
-      CONSOLE = '*';
+	test_sdram();
+	led = (led << 1) | ((~led >> 2) & 1);
+	set_led(led);
+	udelay(400000);
+	loops++;
+	con_printf("Loops: %u\r\n\n", loops);
     }
 
     die();

+ 0 - 11
fw/io.h

@@ -3,17 +3,6 @@
 
 #include "iodev.h"
 
-static inline void con_write(uint8_t c)
-{
-    CONSOLE = c;
-}
-
-static inline void con_set_baudrate(uint32_t b)
-{
-    uint32_t bauddiv = (CON_BAUD_BASE + (b >> 1))/b;
-    CON_BAUDDIV = bauddiv ? bauddiv - 1 : 0;
-}
-
 static inline void set_led(uint8_t leds)
 {
     LED = leds;