This subject is long time in the making for me and it particularly took off when I was researching bootloaders for computers and consumer electronics, which, I will note, differ drastically. I've learned how ancient and inflexible x86 hardware is and just how much the structure of software is constrained by it. Examples of what I am talking about:

  • Bootloaders cannot have an arbitrary size.
  • Specialized functions like memory-mapped hardware.
  • An Intel processor's ties to a particular type of firmware.

So I've wondered about systems that might be designed like this:

  • Writing text to the screen handled pixel-by-pixel by an operating system instead of an intermediary microcontroller.
  • Sectorless hard drives wherein a computer simply begins executing at the first address and the bootloader can be any size.
  • Functionality of microcontrollers moved into the software.

I understand that this would take away a lot of simplicity, but do systems like this exist? I am guessing this would be more prevalent in embedded systems. To better understand this question, imagine a device where there are no controllers or independent systems and everything is controlled by the CPU.

  • 5
    All of the things you describe are certainly possible. The question is, does it matter? Just taking one of your examples, bootloaders are the way they are because they are... well, bootloaders. Because the computer doesn't know anything about anything on startup, you have to give the bootloader some basic assumptions so that it knows what to do. Those assumptions haven't changed much over the years, mostly for backward compatibility reasons and because they still work. Jan 2, 2013 at 23:06
  • General purpose CPU pin outs are pretty much designed to only be connected to digital circuitry. Disk drives and video systems typically involve a lot of analog signal processing which a mainline CPU is not equipped to do. Microcontrollers not only have their own CPU but often contain circuits for analog to digital and digital to analog conversion which make it possible for them to control things like motors and RF generators. Even when computers were built from discrete components the CPU was a separate system from the IO controllers. Jan 3, 2013 at 2:43
  • also x86 processors today aren't 'really' x86 any more, they have an x86 translation front end on top of a proprietary risc core. Jan 3, 2013 at 4:25
  • 1
    The more I read this question, the less I understand what problem you're trying to solve.
    – Caleb
    Jan 3, 2013 at 5:34
  • 1
    Boot loaders aren't size-constrained. The first stage usually is, and the size is just big enough to read as many blocks as you need for the second. What's the benefit in having a size-unlimited first stage, and is that benefit worth changing something that's worked well for decades?
    – Blrfl
    Jan 3, 2013 at 11:53

3 Answers 3


Addressing your items specifically:

  • Writing text to the screen handled pixel-by-pixel by an operating system instead of an intermediary microcontroller. Early personal computers did this, more or less. Most of the early machines that I can think of had some sort of video chip to generate the video signal that actually drove the display, writing pixels into the display buffer (often a region of main memory) was usually left up to the CPU. Updating the display consumed a fair portion of the CPU's time (and also tied up the memory bus). Offloading all that work to a graphics processor was a step forward in making machines faster.

  • Sectorless hard drives wherein a computer simply begins executing at the first address. Where is the "first address" on a hard drive? Without some sort of formatting information, there's no way to find any location on a disk. That said, there's quite a lot of variety in disk formats. One interesting one was Spiradisc, in which there was essentially just one spiral track. Many optical disc formats (e.g. CD-ROM) are also laid out with spiral tracks. More to the point, though, microprocessors generally are set up to "simply begin executing at the first address" in memory, which is how bootloaders themselves get executed.

  • Functionality of microcontrollers moved into the software. What functionality are you talking about? You might be interested in Reduced Instruction Set Computing, a chip architecture which calls for simplified instructions that can be executed quickly. For example, RISC processors often won't have instructions for multiplication or division; instead, those operations are built up from simpler instructions like shift and add. This is a clear example of functionality being moved into software.

  • I added a sentence explaining that further third one further. I mean eliminating the use of controllers and centralizing the system. And can't a disk be sectorless? The term doesn't imply that there is no way of addressing information at all. In regards to executing at the first address, there is usually a limit to the size of the first bootloader.
    – Melab
    Jan 3, 2013 at 1:09
  • 1
    Sectorless won't helpt with arbitrary sized bootloader. The hardware somehw has to know how much data it has to load into memory so the CPU can execute it. This has to be defined somehow ...
    – johannes
    Jan 3, 2013 at 2:19

Beyond the now traditional x86 architecture, there are many other forms of computing hardware - all the way to analog processors and back.

I don't think I can address all of your points (or provide broader ones) but you bring up microcontrollers and embedded systems. The flexibility in embedded is not one of software, but one of modularity. If you have a clearly defined communications protocol; a collection of modular, single-purpose controllers and sensors; and a configuration tool to link inputs and outputs from each module, then you have a highly flexible hardware setup.

The problem is, flexibility brings the expense of complexity - so most modular embedded systems are typically limited and require some central controller to achieve anything beyond simple input/output. In fact, at least in building control systems, things that were once hardware driven in modules (like the control feedback loop relating valve controls to temperature input) have been moved into embedded software in a central controller - creating less flexible hardware, but more flexible systems.

  • So that would mean CPUs that could control a display directly without having to pass instructions to a controller. I imagine that would add alot more complexity to the software, just as doing away with terminal mode would require more logic for a program to print words to the screen.
    – Melab
    Jan 3, 2013 at 1:15
  • Well, it's more like you have an intelligent core that passes instructions to dumb/slave controllers - but there was a short while where controllers were becoming more intelligent and independent. Centralising makes for more complex software, but it's all in one place... There's pros and cons, and control systems usually mix it up as fits the situation
    – HorusKol
    Jan 3, 2013 at 2:43

Hardware can get as flexible as you may dream, e.g., by implementing CPUs with RAM-based FPGAs. Imagine: one process on Intel, another one on ARM...

But do you really need this flexibility? Sometimes, even in software, the simplicity of hardwired or hardcoded configurations is a huge advantage.

Not the answer you're looking for? Browse other questions tagged or ask your own question.