Mano machine


The Mano machine is a computer theoretically described by M. Morris Mano. It contains a central processing unit, random access memory, and an input-output bus. Its limited instruction set and small address space limit it to use as a Microcontroller. But it can easily be expanded to have a 32-bit accumulator register, and 28-bit addressing using a HDL language like Verilog or VHDL; And at the same time, make room for new instructions.

Characteristics

The Mano machine is similar in many respects to the PDP-8, such as the same address space, only one accumulator register, and many similar instructions. The Mano machine has a 4096x16 shared data/program memory segment requiring a 12-bit address bus. The data bus is 16 bits. There are 8-bit input/output buses for external communication, and associated interrupt flags.
There is one 16-bit accumulator register, and single-bit registers for addition carry and system halt.

Instruction set

There are 25 instructions that fall into 3 categories: direct / indirect memory referencing operations, register referencing operations, and input/output / interrupt operations.
Each instruction is 16 bits long . This means that memory referencing instructions contain 4 bits of op-code data, and 12 bits dedicated to the address.
Bit 15Bits 14-12Bits 11-0MnemonicDescription
00ANDAnd direct memory to accumulator
01ADDAdd direct memory to accumulator
02LDALoad direct memory to accumulator
03STAStore accumulator to direct memory
04BUNUnconditionally branch to direct memory
05BSAStore current program counter to direct memory and branch to following address
06ISZIncrement value in direct memory and skip next instruction if the sum is zero
10-6Indirect addressing versions of the above instructions
07800CLAClear the accumulator
07400CLEClear the carry bit
07200CMAComplement the accumulator
07100CMEComplement the carry bit
07080CIRCirculate accumulator right
07040CILCirculate accumulator left
07020INCIncrement accumulator
07010SPASkip next instruction if accumulator is positive
07008SNASkip next instruction if accumulator is negative
07004SZASkip next instruction if accumulator is zero
07002SZESkip next instruction if carry bit is zero
07001HLTHalt computer by clearing the halt bit latch
17800INPInput from character bus to accumulator
17400OUTOutput from accumulator to character bus
17200SKISkip next instruction if input flag is set
17100SKOSkip next instruction if output flag is set
17080IONEnable interrupts
17040IOFDisable interrupts

Applications to computer optimization theory

The machine specifications include a finite state machine that determines the processor's micro-operations. The canonical implementation of the state machine is an excellent candidate for reduction, and can also be re-implemented as a pipelined processor.