I remember all the things I needed to implement before reaching userspace, it's a lot indeed. After that it gets easier because every new change is motivated by a specific smaller goal like supporting the network card of a new laptop, or adding sounds to the emulator, or adding one more syscall or device file. You get rewarded by new capabilities after each addition.
Pretty impressive, you've gotten much farther than I ever did (I didn't have the patience to implement all the borderline boilerplate an OS needs).