Index: kernel/genarch/src/drivers/dsrln/dsrlnout.c
===================================================================
--- kernel/genarch/src/drivers/dsrln/dsrlnout.c	(revision 28a5ebdea900783081bd23e40f685b6b0479c63d)
+++ kernel/genarch/src/drivers/dsrln/dsrlnout.c	(revision a22c62f1db9663e7cd90692aef7ca712ddc48044)
@@ -49,18 +49,24 @@
 } dsrlnout_instance_t;
 
-static void dsrlnout_putuchar(outdev_t *dev, const char32_t ch)
+static void dsrlnout_write(outdev_t *dev, const char *s, size_t n)
 {
 	dsrlnout_instance_t *instance = (dsrlnout_instance_t *) dev->data;
 
-	if ((!instance->parea.mapped) || (console_override)) {
-		if (ascii_check(ch))
-			pio_write_8(instance->base, ch);
-		else
-			pio_write_8(instance->base, U_SPECIAL);
+	if (instance->parea.mapped && !console_override)
+		return;
+
+	const char *top = s + n;
+	assert(top >= s);
+
+	for (; s < top; s++) {
+		if (*s == '\n')
+			pio_write_8(instance->base, '\r');
+
+		pio_write_8(instance->base, (uint8_t) *s);
 	}
 }
 
 static outdev_operations_t dsrlndev_ops = {
-	.write = dsrlnout_putuchar,
+	.write = dsrlnout_write,
 	.redraw = NULL,
 	.scroll_up = NULL,
