19
loading...
This website collects cookies to deliver better user experience
Every command
0. PC->A; MEM->D; D->PR;
+/-
1. DP->A; MEM->D; D->ALU; PC++;
2. DP->A; ALU->D; D->MEM;
>/<
1. DP->D; D->ALU; PC++;
2. ALU->D; D->DP;
[/]
1. PC->D; D->ALU; PC++;
2. DP->A; ALU->D; D->PC;
,
1. DP->A; I/O; D->MEM; PC++;
2. Next Command;
.
1. DP->A; MEM->D; I/O; PC++;
2. Next Command;
00
on cycle 0, 10
on cycle 1 and 01
on cycle 2. The advantage of the shift register is that if for any reason the cycle continues past these two states, the counter enters its fourth state: 11
, while the shift register resets back to 00
by itself making it a bit safer and easier to wire up.00
to make the transition 00 -> 10
and 0 at other times, which can be accomplished by taking a NOR
of the registers contents and the Load
signal. This NOR
output also indicates the 0th cycle, so the Load
signal is here to disable it when loading.OR
ed together for the "reset" input of the register.1
), when it should be off (0
) and when it doesn't matter (-
). In these tables the BAL commands will be listed in an unconventional way, such that binary representations of neighbouring commands vary only by one bit. It makes it easier to create boolean functions based on these tables.Command | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
Decimal | 0 | 1 | 3 | 2 | 6 | 7 | 5 | 4 |
Binary | 000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
T | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
|
0 | - |
- |
- |
- |
- |
- |
- |
- |
1 | 1 |
1 |
1 |
1 |
- |
- |
1 |
1 |
2 | - |
- |
- |
- |
- |
- |
- |
- |
L | - |
- |
- |
- |
- |
- |
- |
- |
D->ALU
signal can be just tied high all the time.D->ALU = 1
T | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
|
0 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2 | 1 |
1 |
1 |
1 |
- |
- |
1 |
1 |
L | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
D->ALU
this signal puts data on the Data Bus, so it has a lot of restrictions on when it can't be high. Fortunately, because the second cycle on I/O commands doesn't exist, this arrangement of ones allows to connect the signal directly to the second cycle.ALU->D = T2
T | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
|
0 | 1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2 | 0 |
0 |
0 |
0 |
- |
- |
0 |
0 |
L | - |
- |
- |
- |
- |
- |
- |
- |
D->PR = T0
T | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
|
0 | 1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 | 1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
2 | 0 |
0 |
0 |
0 |
- |
- |
0 |
0 |
L | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
MEM->D = T0 OR (T1 AND ~C0 AND ~C1) OR (T1 AND C0 AND C1 AND ~C2)
T | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
|
0 | - |
- |
- |
- |
- |
- |
- |
- |
1 | - |
- |
0 |
0 |
1 |
- |
0 |
0 |
2 | 1 |
1 |
0 |
0 |
- |
- |
0 |
0 |
L | 1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
-
fields as ones allows for much simpler functions.D->MEM = L OR (~C0 AND ~C1) OR (C0 AND C1)
T | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
|
0 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 | 0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
2 | 0 |
0 |
0 |
0 |
- |
- |
0 |
0 |
0 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
DP->D
has a very strict table with no -
. It can only be on during the first cycle of the pointer moving commands.DP->D = T1 AND ~C0 AND C1
T | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
|
0 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 | 0 |
0 |
- |
- |
0 |
0 |
0 |
0 |
2 | 0 |
0 |
1 |
1 |
- |
- |
0 |
0 |
L | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
D->MEM
, D->DP
can be on when DP->D
is on, but it doesn't help much in this case. The -
in the I/O commands on the other hand help minimise this function. The smallest function is when D->DP
is on during the second cycle of the pointer moving commands and I/O commands, because the latter never occurs.D->DP = T2 AND C1
T | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
|
0 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 | 1 |
1 |
- |
- |
1 |
1 |
- |
- |
2 | 1 |
1 |
- |
- |
- |
- |
1 |
1 |
L | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
DP->A
and PC->A
, which means that whenever one is off the other can PC->A
is on during loading and the zeroth cycle, and DP->A
is on during first and second cycles.DP->A = T1 OR T2
T | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
|
0 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 | 0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
2 | 0 |
0 |
0 |
0 |
- |
- |
0 |
0 |
0 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
DP->D
.PC->D = T1 AND C0 AND ~C1
T | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
|
0 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 | 0 |
0 |
0 |
0 |
0 |
0 |
- |
- |
2 | 0 |
0 |
0 |
0 |
- |
- |
1 |
1 |
L | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
D->DP
D->PC = T2 AND C0
T | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
|
0 | 1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2 | 0 |
0 |
0 |
0 |
- |
- |
0 |
0 |
L | 1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
PC->A = T0 OR L
T | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
|
0 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 | 1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
2 | 0 |
0 |
0 |
0 |
- |
- |
0 |
0 |
L | 1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
PC++ = T1 OR L
T | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
|
0 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 | 0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
2 | 0 |
0 |
0 |
0 |
- |
- |
0 |
0 |
L | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
I/O = T1 AND C0 AND C1
T | + |
- |
< |
> |
, |
. |
] |
[ |
---|---|---|---|---|---|---|---|---|
000 |
001 |
011 |
010 |
110 |
111 |
101 |
100 |
|
0 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 | 0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2 | 0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
L | - |
- |
- |
- |
- |
- |
- |
- |
Next Command
signal is used to reset the Cycle Counter on the second cycle of I/O commands. It acts by immediately setting the counter to 0 as soon as it's on which prevents it from advancing if it was set at cycle 0. It is free to be on during loading because the counter is reset at that moment anyway. This doesnt't help minimise its function, though.Next Command = T2 AND C0 AND C1