They now use interrupts and thus can be blocked on without sitting in a busy loop. Not sure if they still work perfectly, need to debug. Works fine with the console "serial" stuff in qemu. Todo: Investigate further.