Also if you take 1 generation step back into the 2600 or intelivision there was a very simple API they did use that was built in. It was usually little more than fill out some memory in a particular way and flick an interrupt or particular instruction and it would either run something in bios or hardware. Also many did not need much in the way of an OS as they usually just either memory mapped themselves into the address space or copied themselves there. At that point if you keep your memory in order you do not need much and can toggle the registers yourself or call into bios routines yourself.
The newer machines use APIs to abstract. Where companies used to conform to particular HW standards (VGA,EGA,etc) with extensions. Now HW companies see their drivers as a differentiator. While the programmer writes to the abstraction API. Technically you could still write bare metal but few companies want to say what their real API looks like. So you are stuck with the OS or if you are lucky what someone else has noodled out.
I was thinking more along the lines of fill in this memory set these registers and stuff happens. Which is not really bios but from a programmer POV it kinda acts like it (just in hardware). Like I pointed out it was a very simple API. Not even sure you could call it that. Re-reading what I wrote yeah I probably should have made that more clear. Intelivision did have a BIOS which they had to have because of the lack of chips they could get their hands on (mostly due to atari buying the capacity for locking out compettors).
The newer machines use APIs to abstract. Where companies used to conform to particular HW standards (VGA,EGA,etc) with extensions. Now HW companies see their drivers as a differentiator. While the programmer writes to the abstraction API. Technically you could still write bare metal but few companies want to say what their real API looks like. So you are stuck with the OS or if you are lucky what someone else has noodled out.