Good news is that I've made some progress on USB today. The code for the current OTG driver is quite messy, so I've decided to rewrite it from scratch and use the current one as a reference. So far, I've gotten USB control transfers to work on real hardware, so enumeration now works, and it can properly detect a connected keyboard and mouse. I will need to implement interrupt transfers for the devices to actually do anything, though.