To be fair, it was just supposed to be demonstrative rather than perfect.
@computerquip,
Could you explain how it's not failsafe (and which example you mean)? If you're referring to the typedefs, I was in a C mindset - typedefstruct { } foo; in C is equivalent to struct foo { }; in C++. The other thing is that the high byte might be first or second depending on the architecture/endianness (on high-endian machines the high byte is first, on low endian machines (like x86) the low byte is first).
@L B,
What's complicated? Is it the way of accessing AL? I'm sure it can be done a simpler way; that was just the first thing I thought of doing (you can use anonymous structs/unions too, I just felt that register16 and register32 should be types rather than just nested structs and unions).