Pico-Code Instructions
|
Name |
Op Code |
Length |
Description |
|
DTX |
0000 |
20 |
DAT = X; X is a signed 16-bit value |
|
DTA |
0001 |
20 |
DAT = 2 raised to the X-th power; X is a 16-bit value |
|
DSH |
0010 |
4 |
DAT = DAT >> 1 |
|
ACD |
0011 |
4 |
ACC = ACC + DAT |
|
ACZ |
0100 |
4 |
ACC = 0 |
|
MOV |
1000 |
12 |
REG X = REG Y; X,Y are 4-bit values |
|
JMP |
1001 |
20 |
PC = X; X is a 16-bit value |
|
BRZ |
1010 |
20 |
PC = X (if ACC = 0) |
|
BRN |
1011 |
20 |
PC = X (if ACC < 0) |
|
JIN |
1100 |
8 |
PC = REG Y; Y is a 4-bit value |
|
TRD |
1101 |
8 |
DAT[0] = Tape[REG Y] (read a bit from the tape) |
|
TWR |
1110 |
8 |
Tape[REG Y] = DAT[0] (write a bit to the tape) |
|
RET |
1111 |
4 |
Return or Halt |
Note: the following code is in an early stage of development and is subject to change.
|
Micro |
Addr. |
Op |
Data |
Description |
|
XOR |
0008 |
ACZ |
|
ACC = 0 |
|
|
000C |
TRD |
0 |
DAT[0] = Tape[0] |
|
|
0010 |
ACD |
|
ACC = ACC + DAT[0] = DAT[0] |
|
|
0014 |
BRZ |
8048 |
IF ACC = 0 GOTO 8048 |
|
|
0028 |
ACZ |
|
ACC = 0 |
|
|
002C |
DTX |
0000 |
DAT = 0 |
|
|
0040 |
TWR |
0 |
Tape[0] = 0 |
|
|
0044 |
RET |
|
|
|
|
8048 |
DTX |
0001 |
DAT = 1 |
|
|
005C |
TWR |
0 |
Tape[0] = 1 |
|
|
0060 |
JMP |
0000 |
GOTO NXT |
|
|
|
|
|
|
|
QUAD |
0200 |
DTA |
0010 |
DAT = 2^16 |
|
|
|
ACZ |
|
|
|
|
|
ACD |
|
ACC = 2^16 |
|
|
|
MOV |
1C |
DAT = REG C |
|
|
|
ACD |
|
|
|
|
|
MOV |
C0 |
REG C = REG C + 2^16 |
|
|
|
MOV |
2C |
|
|
|
|
DTX |
4 |
|
|
|
|
MOV |
04 |
|
|
|
|
DTX |
1 |
|
|
|
|
MOV |
31 |
REG 3 = 1 |
|
|
0220 |
TRD |
2 |
DAT[0] = Tape[2] |
|
|
|
TWR |
3 |
Tape[3] = DAT[0] |
|
|
|
DTX |
1 |
|
|
|
|
MOV |
02 |
|
|
|
|
ACD |
|
|
|
|
|
MOV |
20 |
REG 2++ |
|
|
|
MOV |
03 |
|
|
|
|
ACD |
|
|
|
|
|
MOV |
30 |
REG 3++ |
|
|
|
DTX |
FFFF |
|
|
|
|
MOV |
04 |
|
|
|
|
ACD |
|
|
|
|
|
MOV |
40 |
REG 4-- |
|
|
|
BRZ |
0000 |
IF ACC = 0 GOTO NXT |
|
|
|
JMP |
0220 |
|
|
|
|
|
|
|
|
NXT |
0000 |
DTA |
0010 |
DAT = 2^16 |
|
|
|
ACZ |
|
|
|
|
|
ACD |
|
ACC = 2^16 |
|
|
|
MOV |
1C |
DAT = REG C |
|
|
|
ACD |
|
|
|
|
|
MOV |
C0 |
REG C = REG C + 2^16 |
|
|
|
JMP |
0100 |
GOTO DECO |
|
|
|
|
|
|
|
DECO |
0100 |
DTA |
0014 |
DAT = 2^20 |
|
|
|
ACZ |
|
|
|
|
|
ACD |
|
|
|
|
|
MOV |
20 |
REG 2 = 2^20 |
|
|
|
DTA |
0004 |
|
|
|
|
ACD |
|
ACC = 2^20 + 16 |
|
|
|
MOV |
F0 |
Reg. F:11,1 = ACC |
|
|
|
DTX |
0008 |
|
|
|
|
MOV |
61 |
REG 6 = 8 |
|
|
8500 |
TRD |
C |
DAT[0] = Tape[C] = [10,0] |
|
|
|
ACZ |
|
|
|
|
|
ACD |
|
ACC = DAT |
|
|
|
BRZ |
9000 |
IF ACC = 0 GOTO 9000 |
|
|
|
MOV |
16 |
DAT = 8,4,2,1 – must init REG 6 = 8 ok |
|
|
|
MOV |
91 |
REG 9 = DAT |
|
|
|
DSH |
|
DAT >> 1 |
|
|
|
MOV |
61 |
REG 6 = 4,2,1,0 |
|
|
|
MOV |
06 |
ACC = REG 6 |
|
|
|
BRZ |
9100 |
|
|
|
|
MOV |
12 |
|
|
|
|
DSH |
|
|
|
|
|
MOV |
21 |
REG 2 >> 1 = 2^19,18,17,16 |
|
|
|
MOV |
02 |
ACC = REG 2 |
|
|
|
MOV |
1F |
DAT = REG F |
|
|
|
ACD |
|
ACC = REG F + REG 2 |
|
|
|
MOV |
F0 |
REG F = ACC |
|
|
9000 |
MOV |
0C |
|
|
|
|
DTX |
0001 |
|
|
|
|
ACD |
|
ACC++ |
|
|
|
MOV |
C0 |
REG C++ |
|
|
|
JMP |
8500 |
|
|
|
9100 |
MOV |
0F |
do a JIN on 16 bits to left of Tape[F]… |
|
|
|
DTX |
FFF0 |
|
|
|
|
ACD |
|
ACC = REG F – 16 |
|
|
|
MOV |
70 |
REG 7 = start of tape |
|
|
|
MOV |
37 |
save start of op-code |
|
|
|
ACZ |
|
|
|
|
|
MOV |
20 |
SUM = 0 |
|
|
|
DTX |
16 |
|
|
|
|
MOV |
61 |
REG 6 = 16 |
|
|
9200 |
TRD |
7 |
DAT[0] = Tape[7] |
|
|
|
MOV |
91 |
REG 9 = curr bit |
|
|
|
MOV |
12 |
REG 2 = SUM |
|
|
|
ACZ |
|
|
|
|
|
ACD |
|
|
|
|
|
ACD |
|
ACC = 2*REG 2 |
|
|
|
MOV |
19 |
DAT = curr bit |
|
|
|
ACD |
|
ACC = ACC + curr bit |
|
|
|
MOV |
20 |
REG 2 = SUM |
|
|
|
MOV |
06 |
|
|
|
|
DTX |
FFFF |
|
|
|
|
ACD |
|
ACC = REG 6 – 1 |
|
|
|
MOV |
60 |
REG 6-- |
|
|
|
BRZ |
9300 |
|
|
|
|
MOV |
07 |
|
|
|
|
DTX |
1 |
|
|
|
|
ACD |
|
|
|
|
|
MOV |
70 |
REG 7++ |
|
|
|
JMP |
9200 |
|
|
|
9300 |
MOV |
73 |
restore REG 7 to col. 0 |
|
|
|
DTX |
FFFC |
|
|
|
|
MOV |
0C |
|
|
|
|
ACD |
|
|
|
|
|
MOV |
C0 |
REG C = REG C - 4; back to col. 0 |
|
|
|
JIN |
2 |
do the JIN |
|
|
|
|
|
|