Let me give you just one example adding to the other comments. In Turbo/Borland Pascal, you could declare global variables (including arrays) allocated at a specific memory address, e.g.:
var video: array[0..4000] of byte absolute $B800:0000;
It also had a special modifier for functions, that made them work as interrupt handlers. And inline assembler with nice, readable syntax that allowed addressing variables directly.
Consequently, it was actually easier to do most low-level DOS hackery in Pascal rather than C.
So yes, I'd expect it do just fine for drivers, as well.
"Consequently, it was actually easier to do most low-level DOS hackery in Pascal rather than C."
I remember downloading source code in the mid 90s of various DOS graphics effects from the demoscene, and being surprised how much of it was in Pascal. And also frustrated, because I'd gone with Turbo C++ instead & had to try porting the code across myself.
var video: array[0..4000] of byte absolute $B800:0000;
It also had a special modifier for functions, that made them work as interrupt handlers. And inline assembler with nice, readable syntax that allowed addressing variables directly.
Consequently, it was actually easier to do most low-level DOS hackery in Pascal rather than C.
So yes, I'd expect it do just fine for drivers, as well.