MC14500B
Jump to navigation
Jump to search
The MC14500B is a 1-bit microcontroller designed by Motorola featuring a minimal set of 16 instructions (4-bit each), one 1-bit register and a 1-bit data bus.
Conventionally, the register is initially set to 0. If the input signals run out, the signal stays at the last inputted bit.
Instruction set
Instruction code (in binary) | Mnemonic | Description |
---|---|---|
0000 | NOPO | No change in registers. Set Flag O to 1. |
0001 | LD | Load result register. Data -> R |
0010 | LDC | Load complement to register. NOT(Data) -> R |
0011 | AND | Logical and. R AND Data -> R |
0100 | ANDC | Complement and. NOT(R AND Data) -> R |
0101 | OR | Logical or. R OR Data -> R |
0110 | ORC | Complement or. NOT(R OR Data) -> R |
0111 | XNOR | Exclusive nor. NOT(R XOR Data) -> R |
1000 | STO | Store. R -> Data |
1001 | STOC | Store complement. NOT(R) -> Data |
1010 | IEN | Input enable. Input -> Register |
1011 | OEN | Output enable. Register -> Output |
1100 | JMP | Jump to the start of the program. |
1101 | RTN | Skip the next instruction. |
1110 | SKZ | Skip the next instruction if the register is 0. |
1111 | NOPF | No change in registers. Set Flag F to 1. |
"implementation"
# Truth-machine: ABEC input_signal = [0] curr = 0 Data = 0 Acc = 0 code = "ABEC" ptr = 0 while ptr < len(code): i = code[ptr] if i == "1": R = Data if i == "2": R = 1 - Data if i == "3": R = R & Data if i == "4": R = 1 - (R & Data) if i == "5": R = R | Data if i == "6": R = 1 - (R | Data) if i == "7": R = 1 - (R ^ Data) if i == "8": Data = R if i == "9": Data = 1 - R if i == "A": R = input_signal[curr % len(input_signal)] curr += 1 if i == "B": print(R,end="") if i == "C": ptr = 0 continue if i == "D": ptr += 1 if i == "E": if R == 0: ptr += 1 ptr += 1