You are right. I completely forgot about ADA and representative clauses. I remember reading that representative clauses mapping to register fields. And to be fair, basic and pascal also can be used for bare metal stuff.
Of course there are other systems programming "monolithic executable" programming languages that allow straightforward access to memory mapped hardware registers.