Yes, software drivers is a much better approach than BIOS calls, that's for sure. And supporting multiple devices is much easier when the entry point to a driver is defined as a function pointer in a data-structure that there can be multiples of than when there is one INT XX entry that handles ALL disk drives, for example.
The idea from a software level is that now instead of having to call BIOS, hook interrupts, etc, etc, we call drivers in the operating system which then handle the nitty gritty that most of us could care less about. If I'm an application needing low level access to the hard drive I really don't care how it gets done or the process involved. All I know is a driver in memory should be able to handle all of that junk and the outcome is I gain low level access to the hard drive. Windows does this by providing the DDK and by allowing users to install drivers which then get called by the OS to perform their specific tasks.
Thankfully the days of loading registers and doing an interrupt are over. Now if I'm in Direct3D and want a 32-bit 1024x768 screen I simply ask for it and the driver either tells me you are crazy we don't support that or it does what I want. I could care less how it does that......I just care that it does it.