How can you generate a flat binary that will run directly on the CPU?
That is, without an Operating System; also called free standing environment code (see What is the name for a program running directly without an OS?).
I've noticed that the assembler I'm using, as
from the OS-X developer tools bundle, keeps generating Mach-O files, and not flat binaries.
You don't. You get the linker to produce a flat (pure) binary. To do that, you have to write a linker script file with OUTPUT_FORMAT(binary)
. If memory serves, you also need to specify something about how the sections are merged, but I don't remember any of the details.