Browse Source

pun80: fix IRQ/status conditions; console: optimize

Don't block the console on I/O even if flow control is enabled, unless
DTR is asserted, i.e. someone is listening.

Fix the IRQ and status conditions in pun80, and enhance with a Rx bulk
data status bit.
H. Peter Anvin 3 years ago
parent
commit
eb851b7632
9 changed files with 1178 additions and 1096 deletions
  1. 2 2
      fpga/max80.qpf
  2. BIN
      fpga/output/v1.jic
  3. BIN
      fpga/output/v1.sof
  4. BIN
      fpga/output/v2.jic
  5. BIN
      fpga/output/v2.sof
  6. 30 11
      rv32/abcpun80.c
  7. 1084 1062
      rv32/boot.mif
  8. 5 18
      rv32/console.c
  9. 57 3
      rv32/console.h

+ 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 = 06:01:26  January 10, 2022
+# Date created = 11:50:23  January 11, 2022
 #
 # -------------------------------------------------------------------------- #
 
 QUARTUS_VERSION = "21.1"
-DATE = "06:01:26  January 10, 2022"
+DATE = "11:50:23  January 11, 2022"
 
 # Revisions
 

BIN
fpga/output/v1.jic


BIN
fpga/output/v1.sof


BIN
fpga/output/v2.jic


BIN
fpga/output/v2.sof


+ 30 - 11
rv32/abcpun80.c

@@ -11,6 +11,7 @@
 
 #define PUN_IOSEL	60
 
+/* ACM channel */
 #define PUN_TTY_CHAN	1
 #if PUN_TTY_CHAN >= TTY_CHANNELS
 # error "PUN_TTY_CHAN out of range"
@@ -23,8 +24,8 @@
 #define PUN_IRQPOL	TTY_IRQPOL(PUN_TTY_CHAN)
 #define PUN_IRQ		TTY_NIRQ(PUN_TTY_CHAN)
 
-#define PUN_IRQ_MASK	(TTY_STATUS_TX_FULL|TTY_STATUS_RX_EMPTY|\
-			 TTY_STATUS_DTR_IN)
+#define PUN_IRQ_MASK	(TTY_STATUS_TX_HIGH|TTY_STATUS_RX_LOW|\
+			 TTY_STATUS_RX_EMPTY|TTY_STATUS_DTR_IN)
 
 static struct abc_dev pun80_iodev;
 
@@ -50,12 +51,13 @@ pun80_refresh_input(struct abc_dev *dev, bool advance)
     }
 
     PUN_IRQPOL = status;
-    pun80_status = ~15 | data_loaded;
 
-    if (status & TTY_STATUS_DTR_IN)
-	pun80_status |= 8;
-    if (!(status & TTY_STATUS_TX_FULL))
-	pun80_status |= 2;
+    pun80_status = 0xe6;
+    pun80_status ^= !!(status & TTY_STATUS_RX_LOW) << 4;
+    pun80_status ^= !!(status & TTY_STATUS_USB_CONFIG) << 3;
+    pun80_status ^= !!(status & TTY_STATUS_DTR_IN) << 2;
+    pun80_status ^= !!(status & TTY_STATUS_TX_HIGH) << 1;
+    pun80_status ^= data_loaded;
 
     dev->inp_data[1] = pun80_status;
 
@@ -66,11 +68,13 @@ pun80_refresh_input(struct abc_dev *dev, bool advance)
 static ABC_CALLBACK(pun80_callback_out)
 {
     PUN_DATA = data;
+    CON_DATA = '>';
     pun80_refresh_input(dev, false);
 }
 
 static ABC_CALLBACK(pun80_callback_inp)
 {
+    CON_DATA = '<';
     pun80_refresh_input(dev, true);
 }
 
@@ -84,7 +88,7 @@ IRQHANDLER(tty,PUN_TTY_CHAN)
 static struct abc_dev pun80_iodev = {
     .callback_mask		= (1 << 0)|(1 << 8),
     .inp_en			= 3,
-    .inp_data[1]                = 0xf0,
+    .inp_data[1]                = 0xf6,
     .status_first_out_mask	= ~0,
     .status_first_inp_mask	= ~0,
     .callback_out[0]		= pun80_callback_out,
@@ -94,14 +98,29 @@ static struct abc_dev pun80_iodev = {
 void pun80_init(void)
 {
     mask_irq(PUN_IRQ);
+
+    /*
+     * Set the TX high water mark to 1/4 = 256 bytes free. This allows
+     * OTIR to be used unconditionally for large transfers after
+     * polling the TX buffer status only once. The buffer is large
+     * enough that this should always be true in practice.
+     *
+     * The RX low water mark is set to 1/8 = 128 bytes occupied for
+     * similar reasons. This is added as a non-FT232H status bit 4 if
+     * 0 (FT232H always has 1 in this bit position.)
+     */
+    PUN_WATERCTL = TTY_WATERCTL_TX_LOW(0x3) | TTY_WATERCTL_TX_HIGH(0xc) |
+	TTY_WATERCTL_RX_LOW(0x1) | TTY_WATERCTL_TX_HIGH(0xc);
+
     /*
-     * Immediately interrupt on:
+     * Immediately interrupt on any of:
      *
      * USB configured
-     * TX full
+     * DTR asserted (host connected)
+     * TX not past high water mark
      * RX not empty
      */
-    PUN_IRQPOL = TTY_STATUS_RX_EMPTY;
+    PUN_IRQPOL = TTY_STATUS_RX_EMPTY | TTY_STATUS_RX_LOW | TTY_STATUS_TX_HIGH;
     PUN_IRQEN  = PUN_IRQ_MASK;
     unmask_irq(PUN_IRQ);
 

+ 1084 - 1062
rv32/boot.mif

@@ -15,7 +15,7 @@ CONTENT BEGIN
 0008 : 0001210B;
 0009 : 008DF413;
 000A : 00040863;
-000B : 6F8000EF;
+000B : 732000EF;
 000C : 408D8DB3;
 000D : 060D8063;
 000E : 00000493;
@@ -48,25 +48,25 @@ CONTENT BEGIN
 0029 : 0000250B;
 002A : 0005B00B;
 002B : 00000000;
-002C : 5A20006F;
-002D : 4C60006F;
-002E : 4B60006F;
-002F : 6680006F;
-0030 : 4C60006F;
-0031 : 58E0006F;
-0032 : 34E0106F;
-0033 : 5860006F;
-0034 : 5820006F;
-0035 : 5F40006F;
-0036 : 57A0006F;
-0037 : 5760006F;
-0038 : 5720006F;
-0039 : 56E0006F;
+002C : 5B60006F;
+002D : 4D20006F;
+002E : 4C20006F;
+002F : 6A20006F;
+0030 : 4D20006F;
+0031 : 5A20006F;
+0032 : 3A40106F;
+0033 : 59A0006F;
+0034 : 5960006F;
+0035 : 62E0006F;
+0036 : 58E0006F;
+0037 : 58A0006F;
+0038 : 5860006F;
+0039 : 5820006F;
 003A : 00000000;
 003B : 4101D4B0;
 003C : FFFFFFFF;
 003D : FFFFFFFF;
-003E : 00001570;
+003E : 000015C8;
 003F : 00000040;
 0040 : 00000000;
 0041 : 00000000;
@@ -192,18 +192,18 @@ CONTENT BEGIN
 00B9 : 0040006F;
 00BA : C6061141;
 00BB : C226C422;
-00BC : 42832C55;
+00BC : 428324C1;
 00BD : 86631860;
 00BE : 70970002;
 00BF : 80E74000;
-00C0 : 547DF580;
+00C0 : 547DF6C0;
 00C1 : 0680008B;
 00C2 : 0810878B;
 00C3 : 18704303;
 00C4 : 00030663;
 00C5 : 40001097;
-00C6 : 5C2080E7;
-00C7 : 77E000EF;
+00C6 : 5CE080E7;
+00C7 : 7B8000EF;
 00C8 : 0000B7D5;
 00C9 : 00000697;
 00CA : D7868693;
@@ -303,7 +303,7 @@ CONTENT BEGIN
 0128 : 64630412;
 0129 : 051300F9;
 012A : 953E0300;
-012B : 2A5514FD;
+012B : 22E114FD;
 012C : 40B2F4E5;
 012D : 44924422;
 012E : 01414902;
@@ -313,25 +313,25 @@ CONTENT BEGIN
 0132 : C452C64E;
 0133 : 2A73892A;
 0134 : 65053430;
-0135 : 42850493;
-0136 : 42850513;
+0135 : 48050493;
+0136 : 48050513;
 0137 : 00158413;
-0138 : 854A2A51;
-0139 : 98792A41;
+0138 : 854A2A6D;
+0139 : 98792A5D;
 013A : 00848513;
-013B : 09932261;
+013B : 0993227D;
 013C : 854EFFC4;
 013D : 85133F51;
-013E : 2AAD00F4;
+013E : 224500F4;
 013F : FFE45783;
 0140 : FFC45303;
 0141 : 9293491D;
 0142 : 85330107;
 0143 : 3FAD0062;
 0144 : 01448513;
-0145 : 85522285;
+0145 : 85522259;
 0146 : 45293F85;
-0147 : 44812299;
+0147 : 44812AA9;
 0148 : 02000A13;
 0149 : 440149A1;
 014A : 00940533;
@@ -339,1070 +339,1092 @@ CONTENT BEGIN
 014C : 04634529;
 014D : 05130124;
 014E : 04050200;
-014F : 15E3221D;
+014F : 15E32A2D;
 0150 : 04A1FF34;
 0151 : FF4491E3;
-0152 : C01026F3;
-0153 : 1908B0B7;
-0154 : 0FF08393;
-0155 : C0102773;
-0156 : 40D705B3;
-0157 : FEB3FCE3;
-0158 : 078B567D;
-0159 : 48050606;
-015A : 81002623;
-015B : 6505BFF5;
-015C : 05131141;
-015D : C60644E5;
-015E : 65053799;
+0152 : 98805083;
+0153 : 0010F393;
+0154 : FE038CE3;
+0155 : C01026F3;
+0156 : 1908B5B7;
+0157 : 0FF58613;
+0158 : C0102773;
+0159 : 40D70833;
+015A : FF067CE3;
+015B : 878B58FD;
+015C : 4E050608;
+015D : 81C02623;
+015E : 6505BFF5;
 015F : 05131141;
-0160 : C6064595;
-0161 : 02933F2D;
-0162 : A7831040;
-0163 : 83130002;
-0164 : 73930017;
-0165 : A02303F3;
-0166 : 85130062;
-0167 : 00230303;
-0168 : 808298A0;
-0169 : C6061141;
-016A : 2773C422;
-016B : 2423C010;
-016C : 009310E0;
-016D : 078BDE90;
-016E : 429D0610;
-016F : 80502423;
-0170 : 038B537D;
-0171 : F4130660;
-0172 : DC652003;
-0173 : 40000537;
-0174 : 400085B7;
-0175 : 03934401;
-0176 : 82930005;
-0177 : EF63A105;
-0178 : 76370453;
-0179 : 05134000;
-017A : 20693696;
-017B : 3D698522;
-017C : 28854529;
-017D : 400086B7;
-017E : 40013837;
-017F : 87934701;
-0180 : 0F93A106;
-0181 : E0634B08;
-0182 : C71105F7;
-0183 : 400078B7;
-0184 : 37F88513;
-0185 : 04132085;
-0186 : 4E198080;
-0187 : 20236E85;
-0188 : 851301C4;
-0189 : 20B946DE;
-018A : 20234F15;
-018B : 442201E4;
-018C : 014140B2;
-018D : 40001317;
-018E : E0030067;
-018F : 0003A303;
-0190 : 941A0391;
-0191 : A083BF69;
-0192 : 07910007;
-0193 : 00176733;
-0194 : 4785BF5D;
-0195 : 00A79533;
-0196 : FFF54293;
-0197 : 0655050B;
-0198 : 47A98082;
-0199 : 00F51563;
-019A : 002342B5;
-019B : 00239850;
-019C : 808298A0;
-019D : 46B54729;
-019E : 00054783;
-019F : 8082E391;
-01A0 : 94630505;
-01A1 : 002300E7;
-01A2 : 002398D0;
-01A3 : B7ED98F0;
-01A4 : 00C02703;
-01A5 : 3B0002B7;
-01A6 : A0A02023;
-01A7 : 00E28333;
-01A8 : 00B303B3;
-01A9 : 2D000537;
-01AA : A0702223;
-01AB : 24238E49;
-01AC : 8082A0C0;
-01AD : A0A02023;
-01AE : 200007B7;
-01AF : A0002223;
-01B0 : 24238DDD;
-01B1 : 8082A0B0;
-01B2 : 10C00293;
-01B3 : 0002A703;
-01B4 : 00170693;
-01B5 : 00D2A023;
-01B6 : 4585CB19;
-01B7 : 02B70763;
-01B8 : 20000F13;
-01B9 : DFF00F93;
-01BA : 07FF078B;
-01BB : 05378082;
-01BC : 83374000;
-01BD : 06134000;
-01BE : 03930005;
-01BF : 8633A103;
-01C0 : 458140C3;
-01C1 : 00050513;
-01C2 : 8837B761;
-01C3 : 3E374000;
-01C4 : 08934001;
-01C5 : 0E93A108;
-01C6 : 85B34B0E;
-01C7 : 0513411E;
-01C8 : BF49A108;
-01C9 : CE061101;
-01CA : CC22CA26;
-01CB : C64EC84A;
-01CC : 5783C452;
-01CD : 00938880;
-01CE : 949316C0;
-01CF : F2930107;
-01D0 : A4030FF7;
-01D1 : 80C10000;
-01D2 : 12028263;
-01D3 : 89104303;
-01D4 : 89004583;
-01D5 : 76134695;
-01D6 : F5930FF3;
-01D7 : E4630FF5;
-01D8 : 4F051066;
-01D9 : 14CF6F63;
-01DA : 10061463;
-01DB : 14040D63;
-01DC : 00442F83;
-01DD : 020F8963;
-01DE : 8713401C;
-01DF : C0180017;
-01E0 : 00B78023;
-01E1 : 01D44083;
-01E2 : 01444283;
-01E3 : 0050F333;
-01E4 : 00640EA3;
-01E5 : 88600AA3;
-01E6 : 83934054;
-01E7 : 2223FFF6;
-01E8 : 98630074;
-01E9 : 03B30203;
-01EA : 8B2300C4;
-01EB : 5A0300B3;
-01EC : 55330104;
-01ED : 791340CA;
-01EE : 0C630015;
-01EF : 09930009;
-01F0 : 98130086;
-01F1 : 08B30029;
-01F2 : AE030104;
-01F3 : 85220008;
-01F4 : F5939E02;
-01F5 : C1A11004;
-01F6 : 0D634450;
-01F7 : 0E931406;
-01F8 : 2623FFF6;
-01F9 : 876301D4;
-01FA : 4083140E;
-01FB : 428301D4;
-01FC : F6B30154;
-01FD : 0EA30050;
-01FE : 0AA300D4;
-01FF : 238388D0;
-0200 : 8A130084;
-0201 : 24230013;
-0202 : C5030144;
-0203 : 0E230003;
-0204 : 0A2300A4;
-0205 : F91388A0;
-0206 : 05632004;
-0207 : 48030209;
-0208 : 498301D4;
-0209 : 0AA38950;
-020A : 58838900;
-020B : F5930104;
-020C : FE130FF9;
-020D : 07632008;
-020E : 2E83000E;
-020F : 460503C4;
-0210 : 9E828522;
-0211 : 5F83444C;
-0212 : 40400104;
-0213 : 00B03633;
-0214 : 00861F13;
-0215 : 01FF6733;
-0216 : 008037B3;
-0217 : 00E7E333;
-0218 : 08236093;
-0219 : 439DA09D;
-021A : 06760F63;
-021B : A8A1F03D;
-021C : 03F5FA13;
-021D : 002A1913;
-021E : 19C00813;
-021F : 012808B3;
-0220 : 0008A403;
-0221 : 0F400E23;
-0222 : 0080A023;
-0223 : 08200313;
-0224 : 2E03C015;
-0225 : 5F8300C4;
-0226 : 405C0104;
-0227 : 01C03EB3;
-0228 : 008E9F13;
-0229 : 01FF6733;
-022A : 00F030B3;
-022B : 00E0E2B3;
-022C : 0822E313;
-022D : 88601523;
-022E : C0114681;
-022F : 2A234C54;
-0230 : 12E388D0;
-0231 : 0093EE04;
-0232 : 92930820;
-0233 : E4B30100;
-0234 : 24230092;
-0235 : 40F28890;
-0236 : 44D24462;
-0237 : 49B24942;
-0238 : 61054A22;
-0239 : 05138082;
-023A : 4A030400;
-023B : A0230FC0;
-023C : 0E230000;
-023D : 06130EA0;
-023E : 15230820;
-023F : 2A2388C0;
-0240 : 44018800;
-0241 : 19C00913;
-0242 : 10000993;
-0243 : 00890833;
-0244 : 00082503;
-0245 : 5883CD01;
-0246 : FE130105;
-0247 : 07630808;
-0248 : 2E83000E;
-0249 : 461D0405;
-024A : 9E8285D2;
-024B : 1FE30411;
-024C : BF51FD34;
-024D : 01F44F83;
-024E : 89404F03;
-024F : 01F40E23;
-0250 : 89F00A23;
-0251 : 01045703;
-0252 : 0FFF7593;
-0253 : 10077793;
-0254 : EC0783E3;
-0255 : 03842303;
-0256 : 85224601;
-0257 : BD659302;
-0258 : 575D47A1;
-0259 : 06E7828B;
-025A : 2383C10C;
-025B : C15016C0;
-025C : 00D50EA3;
-025D : 02751663;
-025E : 5E03454C;
-025F : 36330105;
-0260 : 36B300C0;
-0261 : 981300B0;
-0262 : 68B30086;
-0263 : EEB30106;
-0264 : EF1301C8;
-0265 : 1523082E;
-0266 : 4D4889E0;
-0267 : 88A02A23;
-0268 : 0082FF93;
-0269 : 878B57DD;
-026A : 808206FF;
-026B : 575D47A1;
-026C : 06E7828B;
-026D : 00158313;
-026E : 2423C550;
-026F : C3830065;
-0270 : 0EA30005;
-0271 : 268300D5;
-0272 : 0E2316C0;
-0273 : 17630075;
-0274 : 280302D5;
-0275 : 5F030045;
-0276 : 36330105;
-0277 : 38B300C0;
-0278 : 1E130100;
-0279 : EEB30086;
-027A : EFB301C8;
-027B : E79301EE;
-027C : 1523082F;
-027D : 4D4888F0;
-027E : 88A02A23;
-027F : 0082F293;
-0280 : 878B575D;
-0281 : 808206E2;
-0282 : 575D47A1;
-0283 : 06E7828B;
-0284 : 00C52303;
-0285 : 00B50FA3;
-0286 : 00031A63;
-0287 : 16C02603;
-0288 : 00B50E23;
-0289 : 00C51463;
-028A : 88B00A23;
-028B : 0082F513;
-028C : 078B55DD;
-028D : 808206B5;
-028E : 575D47A1;
-028F : 06E7828B;
-0290 : 16C02383;
-0291 : 00B50EA3;
-0292 : 00751463;
-0293 : 88B00AA3;
-0294 : 0082F513;
-0295 : 078B55DD;
-0296 : 808206B5;
-0297 : 09400793;
-0298 : 00F51823;
-0299 : 00050EA3;
-029A : 88000AA3;
-029B : 04F54283;
-029C : 040506A3;
-029D : 0012E313;
-029E : 046507A3;
-029F : 47838082;
-02A0 : E29304F5;
-02A1 : 07A30027;
-02A2 : 80820455;
-02A3 : 04F54783;
-02A4 : 0047E293;
-02A5 : 045507A3;
-02A6 : 71158082;
-02A7 : CF86C7CE;
-02A8 : C1DACBA6;
-02A9 : C9CACDA2;
-02AA : C3D6C5D2;
-02AB : DD62DF5E;
-02AC : D96ADB66;
-02AD : 0093D76E;
-02AE : 2B030F00;
-02AF : A2831040;
-02B0 : 29030000;
-02B1 : 74938800;
-02B2 : 8D630059;
-02B3 : 63052962;
-02B4 : 4B834383;
-02B5 : 0F000B93;
-02B6 : 0013F413;
-02B7 : 1097C071;
-02B8 : 80E74000;
-02B9 : 78935D20;
-02BA : 85630015;
-02BB : 4A850008;
-02BC : A8C94A01;
-02BD : 80800A93;
-02BE : 000AAA03;
-02BF : 40007CB7;
-02C0 : 40013D37;
-02C1 : 002A6C13;
-02C2 : 018AA023;
-02C3 : 85934605;
-02C4 : 05132D5C;
-02C5 : 4097260D;
-02C6 : 80E74000;
-02C7 : C10542A0;
-02C8 : 400077B7;
-02C9 : 6D078513;
-02CA : 40001097;
-02CB : AD2080E7;
-02CC : 000AA983;
-02CD : FFD9F293;
-02CE : 005AA023;
-02CF : 0850BF4D;
-02D0 : 8513100C;
-02D1 : 00232D5C;
-02D2 : CA020201;
-02D3 : 40005097;
-02D4 : 26E080E7;
-02D5 : 7DB74652;
-02D6 : 100C4000;
-02D7 : 6E9D8513;
-02D8 : 40001097;
-02D9 : A9A080E7;
-02DA : 082C0870;
-02DB : 2D5C8513;
-02DC : 5097CC02;
-02DD : 80E74000;
-02DE : 4E720E00;
-02DF : 7FB745E2;
-02E0 : 5E834000;
-02E1 : 2F0300AE;
-02E2 : 851301CE;
-02E3 : 9693717F;
-02E4 : 0613009E;
-02E5 : 1097FFEF;
-02E6 : 80E74000;
-02E7 : BF81A640;
-02E8 : 40001097;
-02E9 : 4C2080E7;
-02EA : F1318905;
-02EB : 17000613;
-02EC : 46FD4218;
-02ED : 40EB0833;
-02EE : 1B06F463;
-02EF : 01662023;
-02F0 : 4A054A81;
-02F1 : 016BA023;
-02F2 : 0F400093;
-02F3 : 0000AB83;
-02F4 : 00197313;
-02F5 : C002C21A;
-02F6 : 069B8163;
-02F7 : 0090A023;
-02F8 : 80800393;
-02F9 : 0003A403;
-02FA : 00197593;
-02FB : 00259613;
-02FC : FFB47513;
-02FD : 00A66733;
-02FE : 40007837;
-02FF : 00E3A023;
-0300 : 74980513;
-0301 : 00497913;
-0302 : 006334B5;
-0303 : 78B71609;
-0304 : 85134000;
-0305 : 3CB96AC8;
-0306 : 9D634A92;
-0307 : 7A37140A;
-0308 : 05134000;
-0309 : C4B36C4A;
-030A : DC93009B;
-030B : 4D050024;
-030C : FA933491;
-030D : C06A001C;
-030E : 6E854A05;
-030F : 4000CDB7;
-0310 : 8F136E05;
-0311 : 8D135D0E;
-0312 : 4B81400D;
-0313 : 84934B01;
-0314 : 0C13400D;
-0315 : C47A4B8E;
-0316 : 04ED4F83;
-0317 : 120A8163;
-0318 : 120F8163;
-0319 : 4901846A;
-031A : 46834DA1;
-031B : FE132AE4;
-031C : 04630016;
-031D : 4E83040E;
-031E : FF13001C;
-031F : 1863001E;
-0320 : 0513000F;
-0321 : 50970504;
-0322 : 80E74000;
-0323 : 4F83C320;
-0324 : F7932AE4;
-0325 : 0723FFEF;
-0326 : 42832AF4;
-0327 : 809304CD;
-0328 : 0623FFF2;
-0329 : 4303041D;
-032A : 73932AF4;
-032B : 96630043;
-032C : 76130003;
-032D : 0723FFE3;
-032E : 09052AC4;
-032F : 2E840413;
-0330 : FBB915E3;
-0331 : 040D0723;
-0332 : C5114502;
-0333 : 2097856A;
-0334 : 80E74000;
-0335 : 4592E120;
-0336 : CD8D4981;
-0337 : 48215CDD;
-0338 : 0798070B;
-0339 : 08936709;
-033A : 0E33B907;
-033B : 8DB3031B;
-033C : C98301C4;
-033D : 87A304FD;
-033E : F993040D;
-033F : 068B0FF9;
-0340 : F6930790;
-0341 : 89630069;
-0342 : 856A2206;
-0343 : 40002097;
-0344 : DD4080E7;
-0345 : 04ED4603;
-0346 : 46061A63;
-0347 : 8E136889;
-0348 : 0B05B908;
-0349 : 9D724691;
-034A : 17E39BF2;
-034B : 0A63F2DB;
-034C : 0493000A;
-034D : AA038080;
-034E : 7A930004;
-034F : A023FFDA;
-0350 : 40FE0154;
-0351 : 44DE446E;
-0352 : 49BE494E;
-0353 : 4A9E4A2E;
-0354 : 5BFA4B0E;
-0355 : 5CDA5C6A;
-0356 : 5DBA5D4A;
-0357 : 8082612D;
-0358 : B3794A81;
-0359 : 4A014A81;
-035A : 76B7B585;
-035B : 85134000;
-035C : B5556B36;
-035D : 40007C37;
-035E : 6B9C0513;
-035F : 95E3B56D;
-0360 : 4783F40F;
-0361 : F993000C;
-0362 : 9FE30017;
-0363 : 2283F209;
-0364 : 63058800;
-0365 : 5DB30413;
-0366 : 0042F093;
-0367 : 00009563;
-0368 : 841343A2;
-0369 : 051300A3;
-036A : 05930300;
-036B : 002302F0;
-036C : 00A300A4;
-036D : 012300B4;
-036E : 8CEA0004;
-036F : 2A8D0413;
-0370 : 03000913;
-0371 : 044D2603;
-0372 : 40007837;
-0373 : 0693874A;
-0374 : 45910086;
-0375 : 75880613;
-0376 : 60978522;
-0377 : 80E74000;
-0378 : 87378CA0;
-0379 : 0D934000;
-037A : 0993DA84;
-037B : A6838607;
-037C : 84630009;
-037D : 78B71206;
-037E : 87224000;
-037F : 76088613;
-0380 : 04000593;
-0381 : 60971008;
-0382 : 80E74000;
-0383 : C68389E0;
-0384 : FE132AEC;
-0385 : 09630016;
-0386 : 4E83020E;
-0387 : FF13001C;
-0388 : 1763001E;
-0389 : 856E000F;
-038A : 40005097;
-038B : A90080E7;
-038C : 2AECCF83;
-038D : FFEFF793;
-038E : 2AFC8723;
-038F : 04CD4283;
-0390 : FFF28093;
-0391 : 041D0623;
-0392 : 2AFCC303;
-0393 : 00437393;
-0394 : 0E039263;
-0395 : 0FE37893;
-0396 : 2B1C8723;
-0397 : 0028F513;
-0398 : E1114605;
-0399 : 100C460D;
-039A : C632856E;
-039B : 40004097;
-039C : 134080E7;
-039D : C5834629;
-039E : 19632AEC;
-039F : 483200C5;
-03A0 : 00287713;
-03A1 : E893C701;
-03A2 : B7F90025;
-03A3 : C1114885;
-03A4 : E6B34891;
-03A5 : 87230115;
-03A6 : FE132ADC;
-03A7 : 0B630016;
-03A8 : 79B7080E;
-03A9 : 10104000;
-03AA : 851385A2;
-03AB : 00977659;
-03AC : 80E74000;
-03AD : 0E9374C0;
-03AE : 0F130220;
-03AF : A8230084;
-03B0 : A0232BDC;
-03B1 : 55FD0BEC;
-03B2 : 856E567D;
-03B3 : 40005097;
-03B4 : A0E080E7;
-03B5 : 7DB7C911;
-03B6 : 85A24000;
-03B7 : 779D8513;
-03B8 : 40000097;
-03B9 : 71A080E7;
-03BA : 044D2303;
-03BB : 064CAF83;
-03BC : 060CA283;
-03BD : 00235383;
-03BE : 018F9793;
-03BF : 0082D093;
-03C0 : 0017E633;
-03C1 : 00C3F363;
-03C2 : 9623861E;
-03C3 : 45032ACC;
-03C4 : 059304CD;
-03C5 : 06230015;
-03C6 : 090504BD;
-03C7 : 03800813;
-03C8 : 2E840413;
-03C9 : 2E8C8C93;
-03CA : E9091EE3;
-03CB : 07234705;
-03CC : BB5904ED;
-03CD : BD650991;
-03CE : 0019FE93;
-03CF : DC0E8CE3;
-03D0 : 049D4F03;
-03D1 : 048D4603;
-03D2 : 5F936285;
-03D3 : 8093006F;
-03D4 : 97937902;
-03D5 : 8333008F;
-03D6 : 83B3001B;
-03D7 : 79130067;
-03D8 : 7C930016;
-03D9 : 8433007F;
-03DA : 00630074;
-03DB : 05130409;
-03DC : 8DB32E80;
-03DD : 85B302AC;
-03DE : 883301CD;
-03DF : 470300B4;
-03E0 : 78932AE8;
-03E1 : 98630017;
-03E2 : 03930408;
-03E3 : 06A3F800;
-03E4 : 0593047D;
-03E5 : 856A0800;
-03E6 : 04233C85;
-03E7 : 4603040D;
-03E8 : 7513048D;
-03E9 : 0423FFE6;
-03EA : 4D8304AD;
-03EB : F593048D;
-03EC : C5C5002D;
-03ED : 010D5303;
-03EE : FFDDF093;
-03EF : 041D0423;
-03F0 : 10036393;
-03F1 : 007D1823;
-03F2 : 06134685;
-03F3 : 85A21000;
-03F4 : 3AE9856A;
-03F5 : 856AB381;
-03F6 : 40002097;
-03F7 : A9C080E7;
-03F8 : 0313E901;
-03F9 : 06A30210;
-03FA : 0593046D;
-03FB : B7650210;
-03FC : 80800E13;
-03FD : 2683D002;
-03FE : 4595000E;
-03FF : EE93856A;
-0400 : 20230026;
-0401 : 3C0D01DE;
-0402 : 050B8F13;
-0403 : 01ED8FB3;
-0404 : 8933856A;
-0405 : 209701F4;
-0406 : 80E74000;
-0407 : 1593A2C0;
-0408 : 46010085;
-0409 : 5097854A;
-040A : 80E74000;
-040B : C5118B40;
-040C : 06A340A1;
-040D : 45A1041D;
-040E : 1014BFB9;
-040F : 10000613;
-0410 : 854A85A2;
-0411 : 40004097;
-0412 : 280080E7;
-0413 : 5782F175;
-0414 : 10000293;
-0415 : FC579EE3;
-0416 : F813B799;
-0417 : 0463004D;
-0418 : 57830208;
-0419 : F913010D;
-041A : 0423FFBD;
-041B : E293052D;
-041C : 18230017;
-041D : 0693005D;
-041E : 06130410;
-041F : 85A21000;
-0420 : 38F9856A;
-0421 : F713B941;
-0422 : C721008D;
-0423 : 08936E09;
-0424 : 06932E80;
-0425 : 8CB3B90E;
-0426 : 0EB3031C;
-0427 : 8F3302DB;
-0428 : 8DB301DC;
-0429 : CF8301E4;
-042A : F9132AED;
-042B : 1E63001F;
-042C : 06930209;
-042D : 06A3F800;
-042E : 059304DD;
-042F : 856A0800;
-0430 : 042332A1;
-0431 : 4E83040D;
-0432 : FF13048D;
-0433 : 0423FF7E;
-0434 : 4D8305ED;
-0435 : 856A048D;
-0436 : 00FDFF93;
-0437 : 05FD0423;
-0438 : 40002097;
-0439 : 9CC080E7;
-043A : F793B135;
-043B : CB81002F;
-043C : 04000E13;
-043D : 05CD06A3;
-043E : 04000593;
-043F : 856AB7C9;
-0440 : 40002097;
-0441 : 974080E7;
-0442 : 0893E901;
-0443 : 06A30210;
-0444 : 0593051D;
-0445 : B7650210;
-0446 : 0293D002;
-0447 : A0838080;
-0448 : 83930002;
-0449 : 8633050B;
-044A : E313007C;
-044B : A0230020;
-044C : 856A0062;
-044D : 00C48CB3;
-044E : 40002097;
-044F : 90A080E7;
-0450 : 00851593;
-0451 : 85664601;
-0452 : 40004097;
-0453 : 792080E7;
-0454 : 0713C901;
-0455 : 06A30200;
-0456 : 059304ED;
-0457 : B7850200;
-0458 : 2AEDC503;
-0459 : 06131014;
-045A : 65931000;
-045B : 87230085;
-045C : 85662ABD;
-045D : 409785A2;
-045E : 80E74000;
-045F : F97133C0;
-0460 : 08135402;
-0461 : 16E31000;
-0462 : BF35FD04;
-0463 : 000A1663;
-0464 : 0049F993;
-0465 : B80984E3;
-0466 : 4D81846A;
-0467 : 45034CA1;
-0468 : 75932AE4;
-0469 : CD890085;
-046A : 05040513;
-046B : 40004097;
-046C : 554080E7;
-046D : 2AE44803;
-046E : FF787713;
-046F : 2AE40723;
-0470 : 04130D85;
-0471 : 9CE32E84;
-0472 : BE89FD9D;
-0473 : 01D54783;
-0474 : 0047E293;
-0475 : 00550EA3;
-0476 : 88500AA3;
-0477 : 47838082;
-0478 : E29301D5;
-0479 : 0EA30027;
-047A : 0AA30055;
-047B : 80828850;
-047C : D4227179;
-047D : F793D606;
-047E : 842E0045;
-047F : 4083CFCD;
-0480 : 031301D5;
-0481 : F2931910;
-0482 : 0EA30FB0;
-0483 : 0AA30055;
-0484 : 43838850;
-0485 : 85B70073;
-0486 : 8893AE14;
-0487 : 0613AE15;
-0488 : 08331470;
-0489 : 47030276;
-048A : 4F030063;
-048B : 45830053;
-048C : 50930033;
-048D : 7F930017;
-048E : 979303FF;
-048F : F293005F;
-0490 : E6B301F0;
-0491 : 47830057;
-0492 : BE330023;
-0493 : 43830313;
-0494 : 43030043;
-0495 : F0930013;
-0496 : F61300F7;
-0497 : 929301F3;
-0498 : 073E0150;
-0499 : CE02CC02;
-049A : 0EB34785;
-049B : 181301C8;
-049C : FE1300B6;
-049D : E8B301F5;
-049E : 1F130106;
-049F : 0EC6010E;
-04A0 : 01E8EFB3;
-04A1 : 01430693;
-04A2 : 011ED893;
-04A3 : 005FE3B3;
-04A4 : 011765B3;
-04A5 : 01969613;
-04A6 : 00C3E833;
-04A7 : 01059E13;
-04A8 : 1C23CA42;
-04A9 : 5F1300B1;
-04AA : 1223010E;
-04AB : 202391E0;
-04AC : 03A39100;
-04AD : 709318F0;
-04AE : 8D630404;
-04AF : 42830000;
-04B0 : 462101D5;
-04B1 : 0402E693;
-04B2 : 19100593;
-04B3 : F0EFC62A;
-04B4 : 4532E92F;
-04B5 : 53130462;
-04B6 : 52634184;
-04B7 : 46830A03;
-04B8 : 071301D5;
-04B9 : FE931890;
-04BA : 0EA30FD6;
-04BB : 0AA301D5;
-04BC : 288389D0;
-04BD : 26039000;
-04BE : 48519040;
-04BF : 0158DF93;
-04C0 : 01070023;
-04C1 : F793CC32;
-04C2 : D09300FF;
-04C3 : 58130108;
-04C4 : 064600F6;
-04C5 : 00F70123;
-04C6 : 01F0F293;
-04C7 : 00C807B7;
-04C8 : 01165093;
-04C9 : 005701A3;
-04CA : 0217B2B3;
-04CB : 0198DE13;
-04CC : 0F13CA46;
-04CD : D393FECE;
-04CE : D31300B8;
-04CF : F8930058;
-04D0 : 00A301F8;
-04D1 : 9E1301E7;
-04D2 : 7F130018;
-04D3 : F4130018;
-04D4 : 769301F3;
-04D5 : 6FB303F3;
-04D6 : 02A301EE;
-04D7 : 022300D7;
-04D8 : 03230087;
-04D9 : 03A301F7;
-04DA : 54220057;
-04DB : E69350B2;
-04DC : 4621080E;
-04DD : 18900593;
-04DE : F06F6145;
-04DF : 50B2E32F;
-04E0 : 61455422;
-04E1 : 57038082;
-04E2 : 46039980;
-04E3 : 12931990;
-04E4 : D3130107;
-04E5 : 8F1A0102;
-04E6 : 19900393;
-04E7 : C595C211;
-04E8 : 01037593;
-04E9 : 0015B813;
-04EA : 01038023;
-04EB : 4783ED99;
-04EC : F8939900;
-04ED : 0E230FF7;
-04EE : 0FA30115;
-04EF : 5E030115;
-04F0 : 1E939980;
-04F1 : DF13010E;
-04F2 : 1F93010E;
-04F3 : D713010F;
-04F4 : 1F23010F;
-04F5 : C28398E0;
-04F6 : 53130003;
-04F7 : 769300BF;
-04F8 : E3930013;
-04F9 : C2990F02;
-04FA : 0083E393;
-04FB : 008F7613;
-04FC : E393E219;
-04FD : 28030023;
-04FE : 0EA316C0;
-04FF : 15630075;
-0500 : 4D480105;
-0501 : 88A02A23;
-0502 : 08238082;
-0503 : 458198B0;
-0504 : 4585BF9D;
-0505 : 0793BF8D;
-0506 : 65050230;
-0507 : 98F00023;
-0508 : 05134581;
-0509 : B78552C5;
-050A : 4F525245;
-050B : 00203A52;
-050C : 20746120;
-050D : 20007830;
-050E : 00783028;
-050F : 61420A29;
-0510 : 64612064;
-0511 : 73657264;
-0512 : 30203A73;
-0513 : 696D0078;
-0514 : 696C6173;
-0515 : 64656E67;
-0516 : 766E6900;
-0517 : 64696C61;
-0518 : 736E6920;
-0519 : 63757274;
-051A : 6E6F6974;
-051B : 2A0A0A00;
-051C : 48202A2A;
-051D : 6F6C6C65;
-051E : 6F57202C;
-051F : 21646C72;
-0520 : 2A2A2A20;
-0521 : 58414D0A;
-0522 : 66203038;
-0523 : 776D7269;
-0524 : 20657261;
-0525 : 706D6F63;
-0526 : 64656C69;
-0527 : 3A6E6F20;
-0528 : 6E614A20;
-0529 : 20303120;
-052A : 32323032;
-052B : 3A353020;
-052C : 333A3832;
-052D : 00000A30;
-052E : 00000101;
-052F : 00000000;
-0530 : 00000000;
-0531 : 00000000;
-0532 : 00000000;
-0533 : 00000000;
-0534 : 00000000;
-0535 : 00000000;
-0536 : 00000000;
-0537 : 00000000;
-0538 : 00000000;
-0539 : 00000000;
-053A : 00000000;
-053B : 00000000;
-053C : 00000000;
-053D : 00000000;
-053E : 00000105;
-053F : 00007FBF;
-0540 : 00000000;
-0541 : D3030300;
-0542 : 000011CC;
-0543 : 00000000;
-0544 : 000011F0;
+0160 : C6064A65;
+0161 : 65053F2D;
+0162 : 05131141;
+0163 : C6064B15;
+0164 : 0293373D;
+0165 : A7831040;
+0166 : 83130002;
+0167 : 73930017;
+0168 : A02303F3;
+0169 : 85130062;
+016A : 00230303;
+016B : 808298A0;
+016C : C6061141;
+016D : 2773C422;
+016E : 2423C010;
+016F : 009310E0;
+0170 : 078BDE90;
+0171 : 429D0610;
+0172 : 80502423;
+0173 : 038B537D;
+0174 : F4130660;
+0175 : DC652003;
+0176 : 40000537;
+0177 : 400085B7;
+0178 : 06134401;
+0179 : 83930005;
+017A : 6463A205;
+017B : 76370676;
+017C : 05134000;
+017D : 205537D6;
+017E : 35798522;
+017F : 28A54529;
+0180 : 400086B7;
+0181 : 40013837;
+0182 : 87934301;
+0183 : 0293A206;
+0184 : E4634B08;
+0185 : 07630457;
+0186 : 78B70003;
+0187 : 85134000;
+0188 : 28A53938;
+0189 : 6E854E19;
+018A : 81C02423;
+018B : 4C5E8513;
+018C : 5F0320AD;
+018D : 7F939880;
+018E : 8CE3001F;
+018F : 4715FE0F;
+0190 : 80E02423;
+0191 : 40B24422;
+0192 : 13170141;
+0193 : 00674000;
+0194 : 4208DEA3;
+0195 : 942A0611;
+0196 : A083BF49;
+0197 : 07910007;
+0198 : 00136333;
+0199 : 4785B77D;
+019A : 00A79533;
+019B : FFF54293;
+019C : 0655050B;
+019D : 67858082;
+019E : 80478293;
+019F : 98805703;
+01A0 : 00577333;
+01A1 : FE530CE3;
+01A2 : 156343A9;
+01A3 : 45B50075;
+01A4 : 98B00023;
+01A5 : 98A00023;
+01A6 : 67858082;
+01A7 : 80478293;
+01A8 : 98805703;
+01A9 : 00577333;
+01AA : FE530CE3;
+01AB : 46B545A9;
+01AC : 00054383;
+01AD : 93630505;
+01AE : 80820003;
+01AF : 00B39463;
+01B0 : 98D00023;
+01B1 : 98700023;
+01B2 : 2703B7E5;
+01B3 : 02B700C0;
+01B4 : 20233B00;
+01B5 : 8333A0A0;
+01B6 : 03B300E2;
+01B7 : 053700B3;
+01B8 : 22232D00;
+01B9 : 8E49A070;
+01BA : A0C02423;
+01BB : 20238082;
+01BC : 07B7A0A0;
+01BD : 22232000;
+01BE : 8DDDA000;
+01BF : A0B02423;
+01C0 : 02938082;
+01C1 : A70310C0;
+01C2 : 06930002;
+01C3 : A0230017;
+01C4 : CB1900D2;
+01C5 : 07634585;
+01C6 : 0F1302B7;
+01C7 : 0F932000;
+01C8 : 078BDFF0;
+01C9 : 808207FF;
+01CA : 40000537;
+01CB : 40008337;
+01CC : 00050613;
+01CD : A2030393;
+01CE : 40C38633;
+01CF : 05134581;
+01D0 : B7610005;
+01D1 : 40008837;
+01D2 : 40013E37;
+01D3 : A2080893;
+01D4 : 4B0E0E93;
+01D5 : 411E85B3;
+01D6 : A2080513;
+01D7 : 1101BF49;
+01D8 : CA26CE06;
+01D9 : C84ACC22;
+01DA : C452C64E;
+01DB : 88805783;
+01DC : 16C00093;
+01DD : 01079493;
+01DE : 0FF7F293;
+01DF : 0000A403;
+01E0 : 826380C1;
+01E1 : 43031202;
+01E2 : 45838910;
+01E3 : 46958900;
+01E4 : 0FF37613;
+01E5 : 0FF5F593;
+01E6 : 1066E463;
+01E7 : 6F634F05;
+01E8 : 146314CF;
+01E9 : 0D631006;
+01EA : 2F831404;
+01EB : 89630044;
+01EC : 401C020F;
+01ED : 00178713;
+01EE : 8023C018;
+01EF : 408300B7;
+01F0 : 428301D4;
+01F1 : F3330144;
+01F2 : 0EA30050;
+01F3 : 0AA30064;
+01F4 : 40548860;
+01F5 : FFF68393;
+01F6 : 00742223;
+01F7 : 02039863;
+01F8 : 00C403B3;
+01F9 : 00B38B23;
+01FA : 01045A03;
+01FB : 40CA5533;
+01FC : 00157913;
+01FD : 00090C63;
+01FE : 00860993;
+01FF : 00299813;
+0200 : 010408B3;
+0201 : 0008AE03;
+0202 : 9E028522;
+0203 : 1004F593;
+0204 : 4450C1A1;
+0205 : 14060D63;
+0206 : FFF60E93;
+0207 : 01D42623;
+0208 : 140E8763;
+0209 : 01D44083;
+020A : 01544283;
+020B : 0050F6B3;
+020C : 00D40EA3;
+020D : 88D00AA3;
+020E : 00842383;
+020F : 00138A13;
+0210 : 01442423;
+0211 : 0003C503;
+0212 : 00A40E23;
+0213 : 88A00A23;
+0214 : 2004F913;
+0215 : 02090563;
+0216 : 01D44803;
+0217 : 89504983;
+0218 : 89000AA3;
+0219 : 01045883;
+021A : 0FF9F593;
+021B : 2008FE13;
+021C : 000E0763;
+021D : 03C42E83;
+021E : 85224605;
+021F : 444C9E82;
+0220 : 01045F83;
+0221 : 36334040;
+0222 : 1F1300B0;
+0223 : 67330086;
+0224 : 37B301FF;
+0225 : E3330080;
+0226 : 609300E7;
+0227 : A09D0823;
+0228 : 0F63439D;
+0229 : F03D0676;
+022A : FA13A8A1;
+022B : 191303F5;
+022C : 0813002A;
+022D : 08B319C0;
+022E : A4030128;
+022F : 0E230008;
+0230 : A0230F40;
+0231 : 03130080;
+0232 : C0150820;
+0233 : 00C42E03;
+0234 : 01045F83;
+0235 : 3EB3405C;
+0236 : 9F1301C0;
+0237 : 6733008E;
+0238 : 30B301FF;
+0239 : E2B300F0;
+023A : E31300E0;
+023B : 15230822;
+023C : 46818860;
+023D : 4C54C011;
+023E : 88D02A23;
+023F : EE0412E3;
+0240 : 08200093;
+0241 : 01009293;
+0242 : 0092E4B3;
+0243 : 88902423;
+0244 : 446240F2;
+0245 : 494244D2;
+0246 : 4A2249B2;
+0247 : 80826105;
+0248 : 04000513;
+0249 : 0FC04A03;
+024A : 0000A023;
+024B : 0EA00E23;
+024C : 08200613;
+024D : 88C01523;
+024E : 88002A23;
+024F : 09134401;
+0250 : 099319C0;
+0251 : 08331000;
+0252 : 25030089;
+0253 : CD010008;
+0254 : 01055883;
+0255 : 0808FE13;
+0256 : 000E0763;
+0257 : 04052E83;
+0258 : 85D2461D;
+0259 : 04119E82;
+025A : FD341FE3;
+025B : 4F83BF51;
+025C : 4F0301F4;
+025D : 0E238940;
+025E : 0A2301F4;
+025F : 570389F0;
+0260 : 75930104;
+0261 : 77930FFF;
+0262 : 83E31007;
+0263 : 2303EC07;
+0264 : 46010384;
+0265 : 93028522;
+0266 : 47A1BD65;
+0267 : 828B575D;
+0268 : C10C06E7;
+0269 : 16C02383;
+026A : 0EA3C150;
+026B : 166300D5;
+026C : 454C0275;
+026D : 01055E03;
+026E : 00C03633;
+026F : 00B036B3;
+0270 : 00869813;
+0271 : 010668B3;
+0272 : 01C8EEB3;
+0273 : 082EEF13;
+0274 : 89E01523;
+0275 : 2A234D48;
+0276 : FF9388A0;
+0277 : 57DD0082;
+0278 : 06FF878B;
+0279 : 47A18082;
+027A : 828B575D;
+027B : 831306E7;
+027C : C5500015;
+027D : 00652423;
+027E : 0005C383;
+027F : 00D50EA3;
+0280 : 16C02683;
+0281 : 00750E23;
+0282 : 02D51763;
+0283 : 00452803;
+0284 : 01055F03;
+0285 : 00C03633;
+0286 : 010038B3;
+0287 : 00861E13;
+0288 : 01C8EEB3;
+0289 : 01EEEFB3;
+028A : 082FE793;
+028B : 88F01523;
+028C : 2A234D48;
+028D : F29388A0;
+028E : 575D0082;
+028F : 06E2878B;
+0290 : 47A18082;
+0291 : 828B575D;
+0292 : 230306E7;
+0293 : 0FA300C5;
+0294 : 1A6300B5;
+0295 : 26030003;
+0296 : 0E2316C0;
+0297 : 146300B5;
+0298 : 0A2300C5;
+0299 : F51388B0;
+029A : 55DD0082;
+029B : 06B5078B;
+029C : 47A18082;
+029D : 828B575D;
+029E : 238306E7;
+029F : 0EA316C0;
+02A0 : 146300B5;
+02A1 : 0AA30075;
+02A2 : F51388B0;
+02A3 : 55DD0082;
+02A4 : 06B5078B;
+02A5 : 07938082;
+02A6 : 18230940;
+02A7 : 0EA300F5;
+02A8 : 0AA30005;
+02A9 : 42838800;
+02AA : 06A304F5;
+02AB : E3130405;
+02AC : 07A30012;
+02AD : 80820465;
+02AE : 04F54783;
+02AF : 0027E293;
+02B0 : 045507A3;
+02B1 : 47838082;
+02B2 : E29304F5;
+02B3 : 07A30047;
+02B4 : 80820455;
+02B5 : C7CE7115;
+02B6 : CBA6CF86;
+02B7 : CDA2C1DA;
+02B8 : C5D2C9CA;
+02B9 : DF5EC3D6;
+02BA : DB66DD62;
+02BB : D76ED96A;
+02BC : 0F000093;
+02BD : 10402B03;
+02BE : 0000A283;
+02BF : 88002903;
+02C0 : 00597493;
+02C1 : 29628D63;
+02C2 : 43836305;
+02C3 : 0B935103;
+02C4 : F4130F00;
+02C5 : C0710013;
+02C6 : 40001097;
+02C7 : 5A4080E7;
+02C8 : 00157893;
+02C9 : 00088563;
+02CA : 4A014A85;
+02CB : 0A93A8C9;
+02CC : AA038080;
+02CD : 7CB7000A;
+02CE : 3D374000;
+02CF : 6C134001;
+02D0 : A023002A;
+02D1 : 4605018A;
+02D2 : 2E9C8593;
+02D3 : 260D0513;
+02D4 : 40004097;
+02D5 : 406080E7;
+02D6 : 77B7C105;
+02D7 : 85134000;
+02D8 : 10976E47;
+02D9 : 80E74000;
+02DA : A983AA40;
+02DB : F293000A;
+02DC : A023FFD9;
+02DD : BF4D005A;
+02DE : 100C0850;
+02DF : 2E9C8513;
+02E0 : 02010023;
+02E1 : 5097CA02;
+02E2 : 80E74000;
+02E3 : 465224A0;
+02E4 : 40007DB7;
+02E5 : 8513100C;
+02E6 : 10976FDD;
+02E7 : 80E74000;
+02E8 : 0870A6C0;
+02E9 : 8513082C;
+02EA : CC022E9C;
+02EB : 40005097;
+02EC : 0BC080E7;
+02ED : 45E24E72;
+02EE : 40007FB7;
+02EF : 00AE5E83;
+02F0 : 01CE2F03;
+02F1 : 72BF8513;
+02F2 : 009E9693;
+02F3 : FFEF0613;
+02F4 : 40001097;
+02F5 : A36080E7;
+02F6 : 1097BF81;
+02F7 : 80E74000;
+02F8 : 89054940;
+02F9 : 0613F131;
+02FA : 42181700;
+02FB : 083346FD;
+02FC : F46340EB;
+02FD : 20231B06;
+02FE : 4A810166;
+02FF : A0234A05;
+0300 : 0093016B;
+0301 : AB830F40;
+0302 : 73130000;
+0303 : C21A0019;
+0304 : 8163C002;
+0305 : A023069B;
+0306 : 03930090;
+0307 : A4038080;
+0308 : 75930003;
+0309 : 96130019;
+030A : 75130025;
+030B : 6733FFB4;
+030C : 783700A6;
+030D : A0234000;
+030E : 051300E3;
+030F : 791375D8;
+0310 : 3CA10049;
+0311 : 16090063;
+0312 : 400078B7;
+0313 : 6C088513;
+0314 : 4A9234A9;
+0315 : 140A9D63;
+0316 : 40007A37;
+0317 : 6D8A0513;
+0318 : 009BC4B3;
+0319 : 0024DC93;
+031A : 3C054D05;
+031B : 001CFA93;
+031C : 4A05C06A;
+031D : CDB76E85;
+031E : 6E054000;
+031F : 628E8F13;
+0320 : 400D8D13;
+0321 : 4B014B81;
+0322 : 400D8493;
+0323 : 510E0C13;
+0324 : 4F83C47A;
+0325 : 816304ED;
+0326 : 8163120A;
+0327 : 846A120F;
+0328 : 4DA14901;
+0329 : 2AE44683;
+032A : 0016FE13;
+032B : 040E0463;
+032C : 001C4E83;
+032D : 001EFF13;
+032E : 000F1863;
+032F : 05040513;
+0330 : 40005097;
+0331 : C0E080E7;
+0332 : 2AE44F83;
+0333 : FFEFF793;
+0334 : 2AF40723;
+0335 : 04CD4283;
+0336 : FFF28093;
+0337 : 041D0623;
+0338 : 2AF44303;
+0339 : 00437393;
+033A : 00039663;
+033B : FFE37613;
+033C : 2AC40723;
+033D : 04130905;
+033E : 15E32E84;
+033F : 0723FBB9;
+0340 : 4502040D;
+0341 : 856AC511;
+0342 : 40002097;
+0343 : DE4080E7;
+0344 : 49814592;
+0345 : 5CDDCD8D;
+0346 : 070B4821;
+0347 : 67090798;
+0348 : B9070893;
+0349 : 031B0E33;
+034A : 01C48DB3;
+034B : 04FDC983;
+034C : 040D87A3;
+034D : 0FF9F993;
+034E : 0790068B;
+034F : 0069F693;
+0350 : 22068963;
+0351 : 2097856A;
+0352 : 80E74000;
+0353 : 4603DA60;
+0354 : 1A6304ED;
+0355 : 68894606;
+0356 : B9088E13;
+0357 : 46910B05;
+0358 : 9BF29D72;
+0359 : F2DB17E3;
+035A : 000A0A63;
+035B : 80800493;
+035C : 0004AA03;
+035D : FFDA7A93;
+035E : 0154A023;
+035F : 446E40FE;
+0360 : 494E44DE;
+0361 : 4A2E49BE;
+0362 : 4B0E4A9E;
+0363 : 5C6A5BFA;
+0364 : 5D4A5CDA;
+0365 : 612D5DBA;
+0366 : 4A818082;
+0367 : 4A81B379;
+0368 : B5854A01;
+0369 : 400076B7;
+036A : 6C768513;
+036B : 7C37B555;
+036C : 05134000;
+036D : B56D6CDC;
+036E : F40F95E3;
+036F : 000C4783;
+0370 : 0017F993;
+0371 : F2099FE3;
+0372 : 88002283;
+0373 : 04136305;
+0374 : F0936333;
+0375 : 95630042;
+0376 : 43A20000;
+0377 : 00A38413;
+0378 : 03000513;
+0379 : 02F00593;
+037A : 00A40023;
+037B : 00B400A3;
+037C : 00040123;
+037D : 04138CEA;
+037E : 09132A8D;
+037F : 26030300;
+0380 : 7837044D;
+0381 : 874A4000;
+0382 : 00860693;
+0383 : 06134591;
+0384 : 852276C8;
+0385 : 40006097;
+0386 : 8A6080E7;
+0387 : 40008737;
+0388 : DA840D93;
+0389 : 87470993;
+038A : 0009A683;
+038B : 12068463;
+038C : 400078B7;
+038D : 86138722;
+038E : 05937748;
+038F : 10080400;
+0390 : 40006097;
+0391 : 87A080E7;
+0392 : 2AECC683;
+0393 : 0016FE13;
+0394 : 020E0963;
+0395 : 001C4E83;
+0396 : 001EFF13;
+0397 : 000F1763;
+0398 : 5097856E;
+0399 : 80E74000;
+039A : CF83A6C0;
+039B : F7932AEC;
+039C : 8723FFEF;
+039D : 42832AFC;
+039E : 809304CD;
+039F : 0623FFF2;
+03A0 : C303041D;
+03A1 : 73932AFC;
+03A2 : 92630043;
+03A3 : 78930E03;
+03A4 : 87230FE3;
+03A5 : F5132B1C;
+03A6 : 46050028;
+03A7 : 460DE111;
+03A8 : 856E100C;
+03A9 : 4097C632;
+03AA : 80E74000;
+03AB : 46291100;
+03AC : 2AECC583;
+03AD : 00C51963;
+03AE : 77134832;
+03AF : C7010028;
+03B0 : 0025E893;
+03B1 : 4885B7F9;
+03B2 : 4891C111;
+03B3 : 0115E6B3;
+03B4 : 2ADC8723;
+03B5 : 0016FE13;
+03B6 : 080E0B63;
+03B7 : 400079B7;
+03B8 : 85A21010;
+03B9 : 77998513;
+03BA : 40000097;
+03BB : 71E080E7;
+03BC : 02200E93;
+03BD : 00840F13;
+03BE : 2BDCA823;
+03BF : 0BECA023;
+03C0 : 567D55FD;
+03C1 : 5097856E;
+03C2 : 80E74000;
+03C3 : C9119EA0;
+03C4 : 40007DB7;
+03C5 : 851385A2;
+03C6 : 009778DD;
+03C7 : 80E74000;
+03C8 : 23036EC0;
+03C9 : AF83044D;
+03CA : A283064C;
+03CB : 5383060C;
+03CC : 97930023;
+03CD : D093018F;
+03CE : E6330082;
+03CF : F3630017;
+03D0 : 861E00C3;
+03D1 : 2ACC9623;
+03D2 : 04CD4503;
+03D3 : 00150593;
+03D4 : 04BD0623;
+03D5 : 08130905;
+03D6 : 04130380;
+03D7 : 8C932E84;
+03D8 : 1EE32E8C;
+03D9 : 4705E909;
+03DA : 04ED0723;
+03DB : 0991BB59;
+03DC : FE93BD65;
+03DD : 8CE30019;
+03DE : 4F03DC0E;
+03DF : 4603049D;
+03E0 : 6285048D;
+03E1 : 006F5F93;
+03E2 : 79028093;
+03E3 : 008F9793;
+03E4 : 001B8333;
+03E5 : 006783B3;
+03E6 : 00167913;
+03E7 : 007F7C93;
+03E8 : 00748433;
+03E9 : 04090063;
+03EA : 2E800513;
+03EB : 02AC8DB3;
+03EC : 01CD85B3;
+03ED : 00B48833;
+03EE : 2AE84703;
+03EF : 00177893;
+03F0 : 04089863;
+03F1 : F8000393;
+03F2 : 047D06A3;
+03F3 : 08000593;
+03F4 : 3C85856A;
+03F5 : 040D0423;
+03F6 : 048D4603;
+03F7 : FFE67513;
+03F8 : 04AD0423;
+03F9 : 048D4D83;
+03FA : 002DF593;
+03FB : 5303C5C5;
+03FC : F093010D;
+03FD : 0423FFDD;
+03FE : 6393041D;
+03FF : 18231003;
+0400 : 4685007D;
+0401 : 10000613;
+0402 : 856A85A2;
+0403 : B3813AE9;
+0404 : 2097856A;
+0405 : 80E74000;
+0406 : E901A6E0;
+0407 : 02100313;
+0408 : 046D06A3;
+0409 : 02100593;
+040A : 0E13B765;
+040B : D0028080;
+040C : 000E2683;
+040D : 856A4595;
+040E : 0026EE93;
+040F : 01DE2023;
+0410 : 8F133C0D;
+0411 : 8FB3050B;
+0412 : 856A01ED;
+0413 : 01F48933;
+0414 : 40002097;
+0415 : 9FE080E7;
+0416 : 00851593;
+0417 : 854A4601;
+0418 : 40005097;
+0419 : 890080E7;
+041A : 40A1C511;
+041B : 041D06A3;
+041C : BFB945A1;
+041D : 06131014;
+041E : 85A21000;
+041F : 4097854A;
+0420 : 80E74000;
+0421 : F17525C0;
+0422 : 02935782;
+0423 : 9EE31000;
+0424 : B799FC57;
+0425 : 004DF813;
+0426 : 02080463;
+0427 : 010D5783;
+0428 : FFBDF913;
+0429 : 052D0423;
+042A : 0017E293;
+042B : 005D1823;
+042C : 04100693;
+042D : 10000613;
+042E : 856A85A2;
+042F : B94138F9;
+0430 : 008DF713;
+0431 : 6E09C721;
+0432 : 2E800893;
+0433 : B90E0693;
+0434 : 031C8CB3;
+0435 : 02DB0EB3;
+0436 : 01DC8F33;
+0437 : 01E48DB3;
+0438 : 2AEDCF83;
+0439 : 001FF913;
+043A : 02091E63;
+043B : F8000693;
+043C : 04DD06A3;
+043D : 08000593;
+043E : 32A1856A;
+043F : 040D0423;
+0440 : 048D4E83;
+0441 : FF7EFF13;
+0442 : 05ED0423;
+0443 : 048D4D83;
+0444 : FF93856A;
+0445 : 042300FD;
+0446 : 209705FD;
+0447 : 80E74000;
+0448 : B13599E0;
+0449 : 002FF793;
+044A : 0E13CB81;
+044B : 06A30400;
+044C : 059305CD;
+044D : B7C90400;
+044E : 2097856A;
+044F : 80E74000;
+0450 : E9019460;
+0451 : 02100893;
+0452 : 051D06A3;
+0453 : 02100593;
+0454 : D002B765;
+0455 : 80800293;
+0456 : 0002A083;
+0457 : 050B8393;
+0458 : 007C8633;
+0459 : 0020E313;
+045A : 0062A023;
+045B : 8CB3856A;
+045C : 209700C4;
+045D : 80E74000;
+045E : 15938DC0;
+045F : 46010085;
+0460 : 40978566;
+0461 : 80E74000;
+0462 : C90176E0;
+0463 : 02000713;
+0464 : 04ED06A3;
+0465 : 02000593;
+0466 : C503B785;
+0467 : 10142AED;
+0468 : 10000613;
+0469 : 00856593;
+046A : 2ABD8723;
+046B : 85A28566;
+046C : 40004097;
+046D : 318080E7;
+046E : 5402F971;
+046F : 10000813;
+0470 : FD0416E3;
+0471 : 1663BF35;
+0472 : F993000A;
+0473 : 84E30049;
+0474 : 846AB809;
+0475 : 4CA14D81;
+0476 : 2AE44503;
+0477 : 00857593;
+0478 : 0513CD89;
+0479 : 40970504;
+047A : 80E74000;
+047B : 48035300;
+047C : 77132AE4;
+047D : 0723FF78;
+047E : 0D852AE4;
+047F : 2E840413;
+0480 : FD9D9CE3;
+0481 : 4783BE89;
+0482 : E29301D5;
+0483 : 0EA30047;
+0484 : 0AA30055;
+0485 : 80828850;
+0486 : 01D54783;
+0487 : 0027E293;
+0488 : 00550EA3;
+0489 : 88500AA3;
+048A : 71798082;
+048B : D606D422;
+048C : 0045F793;
+048D : CFCD842E;
+048E : 01D54083;
+048F : 19100313;
+0490 : 0FB0F293;
+0491 : 00550EA3;
+0492 : 88500AA3;
+0493 : 00734383;
+0494 : AE1485B7;
+0495 : AE158893;
+0496 : 14700613;
+0497 : 02760833;
+0498 : 00634703;
+0499 : 00534F03;
+049A : 00334583;
+049B : 00175093;
+049C : 03FF7F93;
+049D : 005F9793;
+049E : 01F0F293;
+049F : 0057E6B3;
+04A0 : 00234783;
+04A1 : 0313BE33;
+04A2 : 00434383;
+04A3 : 00134303;
+04A4 : 00F7F093;
+04A5 : 01F3F613;
+04A6 : 01509293;
+04A7 : CC02073E;
+04A8 : 4785CE02;
+04A9 : 01C80EB3;
+04AA : 00B61813;
+04AB : 01F5FE13;
+04AC : 0106E8B3;
+04AD : 010E1F13;
+04AE : EFB30EC6;
+04AF : 069301E8;
+04B0 : D8930143;
+04B1 : E3B3011E;
+04B2 : 65B3005F;
+04B3 : 96130117;
+04B4 : E8330196;
+04B5 : 9E1300C3;
+04B6 : CA420105;
+04B7 : 00B11C23;
+04B8 : 010E5F13;
+04B9 : 91E01223;
+04BA : 91002023;
+04BB : 18F003A3;
+04BC : 04047093;
+04BD : 00008D63;
+04BE : 01D54283;
+04BF : E6934621;
+04C0 : 05930402;
+04C1 : C62A1910;
+04C2 : E92FF0EF;
+04C3 : 04624532;
+04C4 : 41845313;
+04C5 : 0A035263;
+04C6 : 01D54683;
+04C7 : 18900713;
+04C8 : 0FD6FE93;
+04C9 : 01D50EA3;
+04CA : 89D00AA3;
+04CB : 90002883;
+04CC : 90402603;
+04CD : DF934851;
+04CE : 00230158;
+04CF : CC320107;
+04D0 : 00FFF793;
+04D1 : 0108D093;
+04D2 : 00F65813;
+04D3 : 01230646;
+04D4 : F29300F7;
+04D5 : 07B701F0;
+04D6 : 509300C8;
+04D7 : 01A30116;
+04D8 : B2B30057;
+04D9 : DE130217;
+04DA : CA460198;
+04DB : FECE0F13;
+04DC : 00B8D393;
+04DD : 0058D313;
+04DE : 01F8F893;
+04DF : 01E700A3;
+04E0 : 00189E13;
+04E1 : 00187F13;
+04E2 : 01F3F413;
+04E3 : 03F37693;
+04E4 : 01EE6FB3;
+04E5 : 00D702A3;
+04E6 : 00870223;
+04E7 : 01F70323;
+04E8 : 005703A3;
+04E9 : 50B25422;
+04EA : 080EE693;
+04EB : 05934621;
+04EC : 61451890;
+04ED : E32FF06F;
+04EE : 542250B2;
+04EF : 80826145;
+04F0 : 99805783;
+04F1 : 19904603;
+04F2 : 01079293;
+04F3 : 0102D313;
+04F4 : 03938F1A;
+04F5 : C2111990;
+04F6 : 7593C595;
+04F7 : B8130103;
+04F8 : 80230015;
+04F9 : ED990103;
+04FA : 99004703;
+04FB : 0FF77893;
+04FC : 01150E23;
+04FD : 01150FA3;
+04FE : 99805E03;
+04FF : 010E1E93;
+0500 : 010EDF13;
+0501 : 010F1F93;
+0502 : 010FD793;
+0503 : 007F5293;
+0504 : 001F5693;
+0505 : 98F01F23;
+0506 : 009F5813;
+0507 : 0082F313;
+0508 : 0126F613;
+0509 : 0003C383;
+050A : 00C365B3;
+050B : 00487713;
+050C : 00E5C8B3;
+050D : 0E68CE13;
+050E : 16C02F83;
+050F : 007E4EB3;
+0510 : 01D50EA3;
+0511 : 01F51563;
+0512 : 2A234D48;
+0513 : 808288A0;
+0514 : 98B00823;
+0515 : 03E00793;
+0516 : 98F00023;
+0517 : B78D4581;
+0518 : 03C00793;
+0519 : 98F00023;
+051A : BF994585;
+051B : 02300793;
+051C : 00236505;
+051D : 458198F0;
+051E : 58450513;
+051F : 0000B791;
+0520 : 4F525245;
+0521 : 00203A52;
+0522 : 20746120;
+0523 : 20007830;
+0524 : 00783028;
+0525 : 61420A29;
+0526 : 64612064;
+0527 : 73657264;
+0528 : 30203A73;
+0529 : 696D0078;
+052A : 696C6173;
+052B : 64656E67;
+052C : 766E6900;
+052D : 64696C61;
+052E : 736E6920;
+052F : 63757274;
+0530 : 6E6F6974;
+0531 : 2A0A0A00;
+0532 : 48202A2A;
+0533 : 6F6C6C65;
+0534 : 6F57202C;
+0535 : 21646C72;
+0536 : 2A2A2A20;
+0537 : 58414D0A;
+0538 : 66203038;
+0539 : 776D7269;
+053A : 20657261;
+053B : 706D6F63;
+053C : 64656C69;
+053D : 3A6E6F20;
+053E : 6E614A20;
+053F : 20313120;
+0540 : 32323032;
+0541 : 3A313120;
+0542 : 303A3134;
+0543 : 00000A34;
+0544 : 00000101;
 0545 : 00000000;
 0546 : 00000000;
 0547 : 00000000;
-0548 : 000011DE;
+0548 : 00000000;
 0549 : 00000000;
 054A : 00000000;
 054B : 00000000;
 054C : 00000000;
 054D : 00000000;
 054E : 00000000;
-054F : 00000101;
-0550 : 0000FFFF;
+054F : 00000000;
+0550 : 00000000;
 0551 : 00000000;
-0552 : 0003F000;
-0553 : 0000140A;
-0554 : 00000000;
-0555 : 00000000;
+0552 : 00000000;
+0553 : 00000000;
+0554 : 00000105;
+0555 : 00007FBF;
 0556 : 00000000;
-0557 : 00000000;
-0558 : 00000000;
-0559 : 00001412;
-055A : 00000000;
+0557 : D3030300;
+0558 : 00001206;
+0559 : 00000000;
+055A : 0000122A;
 055B : 00000000;
 055C : 00000000;
 055D : 00000000;
-055E : 00000000;
+055E : 00001218;
 055F : 00000000;
 0560 : 00000000;
 0561 : 00000000;
 0562 : 00000000;
 0563 : 00000000;
 0564 : 00000000;
-0565 : 00000000;
-0566 : 00000000;
+0565 : 00000101;
+0566 : 0000FFFF;
 0567 : 00000000;
-0568 : 00000000;
-0569 : 00000000;
+0568 : 0003F600;
+0569 : 00001450;
 056A : 00000000;
 056B : 00000000;
 056C : 00000000;
 056D : 00000000;
 056E : 00000000;
-056F : 00000000;
+056F : 00001460;
 0570 : 00000000;
 0571 : 00000000;
 0572 : 00000000;
 0573 : 00000000;
-0574 : 6362612F;
-0575 : 6B736964;
-0576 : 3030382E;
-0577 : 002F;
-[0578..1FFF] : 00;
+0574 : 00000000;
+0575 : 00000000;
+0576 : 00000000;
+0577 : 00000000;
+0578 : 00000000;
+0579 : 00000000;
+057A : 00000000;
+057B : 00000000;
+057C : 00000000;
+057D : 00000000;
+057E : 00000000;
+057F : 00000000;
+0580 : 00000000;
+0581 : 00000000;
+0582 : 00000000;
+0583 : 00000000;
+0584 : 00000000;
+0585 : 00000000;
+0586 : 00000000;
+0587 : 00000000;
+0588 : 00000000;
+0589 : 00000000;
+058A : 6362612F;
+058B : 6B736964;
+058C : 3030382E;
+058D : 002F;
+[058E..1FFF] : 00;
 END;

+ 5 - 18
rv32/console.c

@@ -8,33 +8,20 @@
 #include "console.h"
 #include "io.h"
 
-static __always_inline void __con_putc(char c)
-{
-    /*
-     * Wait for FIFO space IF DTR is asserted (otherwise there might
-     * not be anyone listening...
-     */
-    while (CON_FLOW_CTL &&
-	   (CON_STATUS & (TTY_STATUS_TX_HIGH|TTY_STATUS_DTR_IN))
-	   == (TTY_STATUS_TX_HIGH|TTY_STATUS_DTR_IN))
-	pause();
-
-    if (c == '\n')
-	CON_DATA = '\r';
-    CON_DATA = c;
-}
+#if CON_FLOW_CTL
 
 void __hot con_putc(char c)
 {
-    __con_putc(c);
+    _con_putc(c);
 }
 
 void __hot con_puts(const char *str)
 {
-    while (*str)
-	__con_putc(*str++);
+    _con_puts(str);
 }
 
+#endif
+
 void con_vprintf(const char *fmt, va_list ap)
 {
     char buf[128];		/* Maximum text size */

+ 57 - 3
rv32/console.h

@@ -4,13 +4,67 @@
 #include "compiler.h"
 #include "io.h"
 
-#define CON_FLOW_CTL 0		/* Block on output full? */
+#define CON_FLOW_CTL 1		/* Block on connected and output full? */
 
-void con_putc(char c);
-void con_puts(const char *);
 void __fmt_printf(1,0) con_vprintf(const char *, va_list);
 void __fmt_printf(1,2) con_printf(const char *, ...);
 
+static __always_inline void __con_wait_tx_ready(void)
+{
+    /*
+     * If CON_FLOW_CTL is set, wait here if the TX buffer is above
+     * the high index mark *if* we are connected to a host
+     */
+    while (CON_FLOW_CTL &&
+	   (CON_STATUS & (TTY_STATUS_TX_HIGH|TTY_STATUS_DTR_IN))
+	   == (TTY_STATUS_TX_HIGH|TTY_STATUS_DTR_IN))
+	pause();
+}
+
+static __always_inline void __con_putc(char c)
+{
+    if (c == '\n')
+	CON_DATA = '\r';
+    CON_DATA = c;
+}
+
+static __always_inline void _con_putc(char c)
+{
+    __con_wait_tx_ready();
+    __con_putc(c);
+}
+
+static __always_inline void _con_puts(const char *str)
+{
+    char c;
+    
+    __con_wait_tx_ready();
+
+    while ((c = *str++))
+	__con_putc(c);
+}
+
+#if CON_FLOW_CTL
+
+void con_putc(char c);
+void con_puts(const char *);
+
+#else
+
+/* Simple enough to inline if we don't care about flow control */
+
+static inline void con_putc(char c)
+{
+    _con_putc(c);
+}
+
+static inline con_puts(const char *str)
+{
+    _con_puts(str);
+}
+
+#endif
+
 static __always_inline void con_flush(void)
 {
     while (CON_FLOW_CTL && !(CON_STATUS & TTY_STATUS_TX_EMPTY))