The main idea with the VIPER, other than it being useful in safety-critical realtime control, was that it should be verifiably correct, as should the programs which ran on it. That's a tall order, but I think it's the reason why it was a very simple machine.
- 32 bits wide
- word-addressed, just 20 bits of address space, with separate i/o space
- only four registers, including the program counter (which is only 20 bits wide)
- only one condition bit
- no interrupts
- all instructions exactly one word long, with space for a 20 bit literal
- most instructions operate on the accumulator
- two registers can act as index registers, using only positive (unsigned) offsets
- no subroutine call or return instructions
- one of the index registers can act as link register, which helps to implement a subroutine mechanism
- if anything untoward happens, the machine halts and raises an error pin - the system takes appropriate action such as using an alternate CPU, restarting, or starting a different program.
- implementable in 4000-5000 "logic array cells"
The CPU was described as a fifth the complexity of its peers, and was to be programmed using the newly designed language Newspeak, which had program correctness as a primary goal.
There's a description of the machine here:
- Formal Specification of the VIPER Microprocessor in HOL by C.H. Pygott.
I haven't thought deeply about what it might be like to program VIPER at the lowest level, but my feeling is that having just A, X, Y where Y is used for subroutine calls is going to feel quite constrained. Having just one status bit means that most branches will be preceded by a comparison - the implicit setting of Z and N which you get in the 6502 will be missing.
It's interesting, I think, to design a machine for real time and not put interrupts in. No doubt the machine is fit for purpose, and the programmer has to reckon for themselves how, and when, to deal with external events and deadlines. It's a different way of working. You can imagine a system of any complexity might need several VIPERs, each dealing with one aspect of the system. Or perhaps if the machine is fast enough compared to the time constants from the outside world, it can service several aspects in some kind of round-robin fashion.