3

I remember reading somewhere (maybe on Hacker News or Lobsters) that Motorola made a microprocessor some decades ago with two sets of registers. This means when handling an interrupt, it does not need to do the saving/loading. Does anybody know the name of the microprocessor?

Googling wasn't helpful: it just returns pages after pages of result about Motorola 6800(0), which doesn't seem to have two sets of registers.

Bonus points for explaining why this design didn't go popular. I mean, it sounds like a good idea.

  • 2
  • 2
    Others with similar features = many previous computers. The PDP-11/70 is an example; there were two general register sets, assignable however the kernel wanted. Before that, Atlas had 128 registers and simply reserved (by convention) some of them for interrupt handling. – another-dave Feb 15 at 3:50
  • More information on this going mainstream: It did sort of catch on, as all ARM based CPU's from the ARM3 onwards have 4 register banks. The User, Supervisor, IRQ and FastIRQ modes, while not switching the entire 16 registers, do switch some of them, I can't remember off the top of my head which ones, but there are different sets for the 4 different modes. – shawty Apr 21 at 12:05
6

Sure this is about Motorola? Could it be have been about a similar sounding manufacturer, like Mostek?

Because the first to come to mind would be Zilogs Z80, which was first manufactured by Mostek, as Zilog had no production line of its own. The description about being dedicated to fast interrupt handling is also exactly what the Z80 implementation was about - using the second register set for anything else but a complete swap was rather clumsy.

Of course there were several others with a similar feature (like Valvo's 2650), but none really as much remembered.


As TUM_ mentions, there's a related question about register set usage for the Z80.

| improve this answer | |
2

There is the 6809 which has 2 Stack Pointers, SP and USP (user stack pointer). I think the 68K can manipulate the pointers such that the Stack address can be exchanged with it's other registers.

| improve this answer | |
  • If it helps at all, on the 68k there are eight address registers, each and every one of which can be used as a stack pointer. The only restriction is that exceptions (including interrupts) will always use A7, a particular address register. But it also offers a single instruction to exchange (i.e. swap) the contents of two registers should you want quickly to switch A7 and one of the other As. – Tommy Feb 15 at 23:17
  • If you're making a machine where "user programs" aren't supposed to be able to destroy "the kernel", and there is a hardware stack, then you need a separate stack pointer for the two uses. Otherwise user mode can have a bad stack (bad address in SP, stack full, ….) and the next interrupt will take down the system. But I think of that as a separate thing from having two register sets; I have used machines with 2 SPs and 1 set of "all the other registers". – another-dave Feb 16 at 2:38
  • The 6809 didn't have that capability to protect memory access. For OS9 and UniFLEX the user programs could access the OS variables. I think the 68000 also had this issue, Starting with the 68010 (68020, and on) there was a built in MMU. – Neil Cherry Feb 16 at 4:39
  • @NeilCherry actually the 6809 could do protected memory with the right extra glue logic. Motorola even made an MMU (6829) for it that did much but not all of the work. – Alan Cox Feb 23 at 0:29
  • @Alan Cox, I wasn't sure of the 6829 having the memory protection, I never had one. It was almost non-existent when I worked with the 6809 in the 80's. Though I did hear a few made it out. – Neil Cherry Feb 23 at 7:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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