Not complete, probably not fully debugged or optimized.
orinoco now. Uses a combination of tickdelay (where possible) and calibrated busywait (where necessary).