The C programming language has had one feature for a very long time, which almost nobody uses: bitfields. However they seem to be a great idea for modelling hardware I/O registers. Instead of clunky bitwise manipulations, you can simply address individual bits with names. But what are the downsides, and how can you use it for MS DOS hardware programming?