Die folgenden Hinweise sollen Besitzern eines Philips/Schuco MC 6400 Mikrocomputer Master Lab zusätzliche Informationen zur CPU geben. Das Anleitungsbuch zum MC 6400 beschreibt ja nur einen kleinen Teil des Befehlssatzes und der Adressierungsarten.
Im Text der Anleitung zum MC 6400 Mikrocomputer befindet sich kein Hinweis auf den eingesetzten Mikroprozessor. Vor Jahren hatte ich im Internet nach verschiedenen Mikroprozessoren gesucht und schließlich auf einer japanischen Seite zum INS8070 einen Befehlssatz entdeckt, der mit der Beschreibung im Handbuch zum MC 6400 übereinstimmte. Eine anschließende Suche auf den Seiten des Herstellers National Semiconductor blieb jedoch ohne Erfolg. Man gewinnt dort den Eindruck, dieser Prozessor wäre niemals hergestellt worden.
Die weitere Recherche brachte aber doch noch ein Datenblatt zur INS8070-Series Microprocessor Family zu Tage. Es scheint das einzige erhalten gebliebene Exemplar zu sein. Jedenfalls findet man die gleiche Datei auf mehreren Webseiten. Der Scan ist schlecht. Die Ausklappseite mit der Befehlsübersicht ist nicht vollständig.
Dass es sich definitiv um einen INS8070 handelt, wurde mir kurz nach der Erstveröffentlichung dieser Seite von Michael Schülke bestätigt. Es ist auch bei Vergrößerung des Fotos auf Seite 23 in der Anleitung zu erkennen. Michael Schülke hat außerdem einen kompletten Scan der erwähnten Ausklappseite mit der Befehlsübersicht und eine Kurzbeschreibung der Busbelegung im MC 6400 zur Verfügung gestellt.
Der INS8070 Mikroprozessor wird oft als SC/MP III bezeichnet. Er darf jedoch nicht mit dem eigentlichen SC/MP Prozessor in P-Kanal-Technologie oder mit dessen direktem Nachfolger INS8060 (SC/MP II) in N-Kanal-Technologie verwechselt werden. Die wesentlichen Unterschiede zwischen diesen Prozessoren sind:
SC/MP und INS8060 (SC/MP II) | INS8070 (SC/MP III) |
---|---|
Hat kein T-Register. | Zusätzliches T-Register vorhanden. |
Der Datenbus wird auch zur Ausgabe der 4 höchstwertigen Adressbits und von 4 zusätzlichen Flags genutzt. | Reiner 16 Bit Adress- und 8 Bit Datenbus. Die 4 zusätzlichen Flags im Datenbus gibt es nicht. |
Kein Stack. | 16 Bit Stack pointer. |
Befehle zum direkten Setzen bzw. Rücksetzen des IE und CY/L Flags im S-Register vorhanden. | Das S-Register kann nur über den Akkumulator oder mit AND bzw. OR Befehlen manipuliert werden. |
Befehle SIO und DLY um mit dem E-Register eine einfache serielle Ein/Ausgabe auf den Pins SIN und SOUT zu realisieren. | Das E-Register kann zusammen mit dem Akku als 16 Bit Register EA benutzt werden. Die Pins SIN und SOUT gibt es nicht. |
Unterprogramme sind mangels CALL, JSR und RET Befehlen nur umständlich zu realisieren. | 16 kurze CALL Befehle (1 Byte), ein JSR Befehl (3 Bytes) und RET vorhanden. |
Nur 8 Bit Addition und Subtraktion. | Auch 16 Bit Berechnungen, inkl. Multiplikation und Division. |
Der INS8070 Prozessor war nur ein Mitglied einer größeren Prozessor-Familie. Zu dieser Familie gehörten:
Die 64 Byte RAM liegen in jedem Prozessor auf den Adressen FFC0h...FFFFh. Das ROM beginnt immer an der Adresse 0000h. Bei 2,5 KB ROM liegt die letzte ROM Adresse somit auf 09FFh und bei 4 KB ROM auf 0FFFh.
Im MC 6400 kommt das Grundmodell INS8070 ohne ROM zum Einsatz. Das Betriebssystem ist in einem externen 4 KB EPROM vom Typ 2732 untergebracht. In diesem EPROM ist nur gut die Hälfte vom Betriebssystem belegt. Mit einem geeigneten Programmiergerät könnten durchaus die Programme auf Kassette in das EPROM übertragen werden.
Als Arbeitsspeicher (RAM) kommen im MC 6400 zwei ICs des Typs 2114 zum Einsatz. Sie liegen hinter dem EPROM auf den Adressen 1000h...13FFh.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Name | CY/L | OV | SB | SA | F3 | F2 | F1 | IE |
Der Stapelzeiger SP (stack pointer) wird überwiegend dazu verwendet, um auf das Ende des Stapelbereichs im RAM zu verweisen. Die Befehle CALL, JSR, RET, PUSH, POP und PLI arbeiten grundsätzlich mit dem SP-Register. Unter Programmkontrolle kann der Stapel an einem beliebigen Platz im Arbeitsspeicher angelegt werden und eine beliebige Länge erreichen.
Die Register P2 und P3 können ebenfalls als Zeiger auf andere Stapelbereiche benutzt werden. Die Adressierungsart "Auto-Indiziert" basiert auf diesem Prinzip.
Der INS8070 Mikroprozessor unterscheidet folgende Adressierungsarten:
1000: 40
1000: C4 08
1000: 24 FF 11
1000: C5 D9
1000: C0 0A
1000: C2 0B
1000: C6 0C
1000: C7 FB
In den folgenden Tabellen sind die in der Anleitung zum Philips/Schuco Microcomputer Master Lab behandelten Befehle durch grüne Schrift markiert. Die Sternchen in der Spalte "Status" haben folgende Bedeutung:
*
Der Befehl beeinflusst das CY/L
Flag im Statusregister
**
Der Befehl beeinflusst das CY/L und OV Flag im Statusregister
***
Der Befehl beeinflusst alle Flags des Statusregisters, außer SA
und SB
Bei den auto-indizierten Adressierungen gilt in der Spalte "Wirkung" die erste Zeile für negative und die zweite Zeile für positive Offsets.
Mnemonic |
Hex-Code |
Zyklen |
Status |
Adressierung |
Wirkung |
---|---|---|---|---|---|
LD A,S |
06 |
3 |
implizit |
A:=(S) |
|
LD S,A |
07 |
3 |
*** |
implizit |
S:=(A) |
LD T,EA |
09 |
4 |
implizit |
T:=(EA) |
|
LD EA,T |
0B |
4 |
implizit |
EA:=(T) |
|
LD SP,=XXYY |
25 YY XX |
8 |
unmittelbar |
SP:=XXYY |
|
LD P2,=XXYY |
26 YY XX |
8 |
unmittelbar |
P2:=XXYY |
|
LD P3,=XXYY |
27 YY XX |
8 |
unmittelbar |
P3:=XXYY |
|
LD EA,PC |
30 |
4 |
implizit |
EA:=(PC) |
|
LD EA,SP |
31 |
4 |
implizit |
EA:=(SP) |
|
LD EA,P2 |
32 |
4 |
implizit |
EA:=(P2) |
|
LD EA,P3 |
33 |
4 |
implizit |
EA:=(P3) |
|
LD A,E |
40 |
4 |
implizit |
A:=(E) |
|
LD PC,EA |
44 |
5 |
implizit |
PC:=(EA) |
|
LD SP,EA |
45 |
5 |
implizit |
SP:=(EA) |
|
LD P2,EA |
46 |
5 |
implizit |
P2:=(EA) |
|
LD P3,EA |
47 |
5 |
implizit |
P3:=(EA) |
|
LD E,A |
48 |
4 |
implizit |
E:=(A) |
|
LD EA,XX,PC |
80 XX |
10 |
PC relativ |
EA:=((PC)+XX) |
|
LD EA,XX,SP |
81 XX |
10 |
SP relativ |
EA:=((SP)+XX) |
|
LD EA,XX,P2 |
82 XX |
10 |
P2 relativ |
EA:=((P2)+XX) |
|
LD EA,XX,P3 |
83 XX |
10 |
P3 relativ |
EA:=((P3)+XX) |
|
LD EA,=XXYY |
84 YY XX |
8 |
unmittelbar |
EA:=XXYY |
|
LD EA,XX |
85 XX |
10 |
direkt |
EA:=(FF00+XX) |
|
LD EA,@XX,P2 |
86 XX |
11 |
auto- |
P2:=(P2)+XX, EA:=((P2)) |
|
LD EA,@XX,P3 |
87 XX |
11 |
auto- |
P3:=(P3)+XX, EA:=((P3)) |
|
LD T,XX,PC |
A0 XX |
10 |
PC relativ |
T:=((PC)+XX) |
|
LD T,XX,SP |
A1 XX |
10 |
SP relativ |
T:=((SP)+XX) |
|
LD T,XX,P2 |
A2 XX |
10 |
P2 relativ |
T:=((P2)+XX) |
|
LD T,XX,P3 |
A3 XX |
10 |
P3 relativ |
T:=((P3)+XX) |
|
LD T,=XXYY |
A4 YY XX |
8 |
unmittelbar |
T:=XXYY |
|
LD T,XX |
A5 XX |
10 |
direkt |
T:=(FF00+XX) |
|
LD T,@XX,P2 |
A6 XX |
11 |
auto- |
P2:=(P2)+XX, T:=((P2)) |
|
LD T,@XX,P3 |
A7 XX |
11 |
auto- |
P3:=(P3)+XX, T:=((P3)) |
|
LD A,XX,PC |
C0 XX |
7 |
PC relativ |
A:=((PC)+XX) |
|
LD A,XX,SP |
C1 XX |
7 |
SP relativ |
A:=((SP)+XX) |
|
LD A,XX,P2 |
C2 XX |
7 |
P2 relativ |
A:=((P2)+XX) |
|
LD A,XX,P3 |
C3 XX |
7 |
P3 relativ |
A:=((P3)+XX) |
|
LD A,=XX |
C4 XX |
5 |
unmittelbar |
A:=XX |
|
LD A,XX |
C5 XX |
7 |
direkt |
A:=(FF00+XX) |
|
LD A,@XX,P2 |
C6 XX |
8 |
auto- |
P2:=(P2)+XX, A:=((P2)) |
|
LD A,@XX,P3 |
C7 XX |
8 |
auto- |
P3:=(P3)+XX, A:=((P3)) |
|
ST EA,XX,PC |
88 XX |
10 |
PC relativ |
((PC)+XX):=(EA) |
|
ST EA,XX,SP |
89 XX |
10 |
SP relativ |
((SP)+XX):=(EA) |
|
ST EA,XX,P2 |
8A XX |
10 |
P2 relativ |
((P2)+XX):=(EA) |
|
ST EA,XX,P3 |
8B XX |
10 |
P3 relativ |
((P3)+XX):=(EA) |
|
ST EA,XX |
8D XX |
10 |
direkt |
(FF00+XX):=(EA) |
|
ST EA,@XX,P2 |
8E XX |
11 |
auto- |
P2:=(P2)+XX, ((P2)):=(EA) |
|
ST EA,@XX,P3 |
8F XX |
11 |
auto- |
P3:=(P3)+XX, ((P3)):=(EA) |
|
ST A,XX,PC |
C8 XX |
7 |
PC relativ |
((PC)+XX):=(A) |
|
ST A,XX,SP |
C9 XX |
7 |
SP relativ |
((SP)+XX):=(A) |
|
ST A,XX,P2 |
CA XX |
7 |
P2 relativ |
((P2)+XX):=(A) |
|
ST A,XX,P3 |
CB XX |
7 |
P3 relativ |
((P3)+XX):=(A) |
|
ST A,XX |
CD XX |
7 |
direkt |
(FF00+XX):=(A) |
|
ST A,@XX,P2 |
CE XX |
8 |
auto- |
P2:=(P2)+XX, ((P2)):=(A) |
|
ST A,@XX,P3 |
CF XX |
8 |
auto- |
P3:=(P3)+XX, ((P3)):=(A) |
|
XCH A,E |
01 |
5 |
implizit |
A<->E |
|
XCH PC,EA |
4C |
7 |
implizit |
PC<->EA |
|
XCH EA,SP |
4D |
7 |
implizit |
EA<->SP |
|
XCH EA,P2 |
4E |
7 |
implizit |
EA<->P2 |
|
XCH EA,P3 |
4F |
7 |
implizit |
EA<->P3 |
Anmerkung:
In der Gruppe der unmittelbaren Ladebefehle für die Pointer scheint der Befehlscode 24 zum laden des Program Counters zu fehlen. Dieser Befehlscode ist weiter unten bei den Verzeigungsbefehlen als JMP Befehl gelistet. Denn das ist genau die Wirkung die ein ummittelbares laden des PC Registers zur Folge hat.
Mnemonic |
Hex-Code |
Zyklen |
Status |
Adressierung |
Wirkung |
---|---|---|---|---|---|
ADD A,E |
70 |
4 |
** |
implizit |
A:=(A)+(E) |
ADD EA,XX,PC |
B0 XX |
10 |
** |
PC relativ |
EA:=(EA)+((PC)+XX) |
ADD EA,XX,SP |
B1 XX |
10 |
** |
SP relativ |
EA:=(EA)+((SP)+XX) |
ADD EA,XX,P2 |
B2 XX |
10 |
** |
P2 relativ |
EA:=(EA)+((P2)+XX) |
ADD EA,XX,P3 |
B3 XX |
10 |
** |
P3 relativ |
EA:=(EA)+((P3)+XX) |
ADD EA,=XXYY |
B4 YY XX |
10 |
** |
unmittelbar |
EA:=(EA)+XXYY |
ADD EA,XX |
B5 XX |
10 |
** |
direkt |
EA:=(EA)+(FF00+XX) |
ADD EA,@XX,P2 |
B6 XX |
11 |
** |
auto- |
P2:=(P2)+XX, EA:=(EA)+((P2)) |
ADD EA,@XX,P3 |
B7 XX |
11 |
** |
auto- |
P3:=(P3)+XX, EA:=(EA)+((P3)) |
ADD A,XX,PC |
F0 XX |
7 |
** |
PC relativ |
A:=(A)+((PC)+XX) |
ADD A,XX,SP |
F1 XX |
7 |
** |
SP relativ |
A:=(A)+((SP)+XX) |
ADD A,XX,P2 |
F2 XX |
7 |
** |
P2 relativ |
A:=(A)+((P2)+XX) |
ADD A,XX,P3 |
F3 XX |
7 |
** |
P3 relativ |
A:=(A)+((P3)+XX) |
ADD A,=XX |
F4 XX |
7 |
** |
unmittelbar |
A:=(A)+XX |
ADD A,XX |
F5 XX |
7 |
** |
direkt |
A:=(A)+(FF00+XX) |
ADD A,@XX,P2 |
F6 XX |
8 |
** |
auto- |
P2:=(P2)+XX, A:=(A)+((P2)) |
ADD A,@XX,P3 |
F7 XX |
8 |
** |
auto- |
P3:=(P3)+XX, A:=(A)+((P3)) |
SUB A,E |
78 |
4 |
** |
implizit |
A:=(A)-(E) |
SUB EA,XX,PC |
B8 XX |
10 |
** |
PC relativ |
EA:=(EA)-((PC)+XX) |
SUB EA,XX,SP |
B9 XX |
10 |
** |
SP relativ |
EA:=(EA)-((SP)+XX) |
SUB EA,XX,P2 |
BA XX |
10 |
** |
P2 relativ |
EA:=(EA)-((P2)+XX) |
SUB EA,XX,P3 |
BB XX |
10 |
** |
P3 relativ |
EA:=(EA)-((P3)+XX) |
SUB EA,=XXYY |
BC YY XX |
10 |
** |
unmittelbar |
EA:=(EA)-XXYY |
SUB EA,XX |
BD XX |
10 |
** |
direkt |
EA:=(EA)-(FF00+XX) |
SUB EA,@XX,P2 |
BE XX |
11 |
** |
auto- |
P2:=(P2)+XX, EA:=(EA)-((P2)) |
SUB EA,@XX,P3 |
BF XX |
11 |
** |
auto- |
P3:=(P3)+XX, EA:=(EA)-((P3)) |
SUB A,XX,PC |
F8 XX |
7 |
** |
PC relativ |
A:=(A)-((PC)+XX) |
SUB A,XX,SP |
F9 XX |
7 |
** |
SP relativ |
A:=(A)-((SP)+XX) |
SUB A,XX,P2 |
FA XX |
7 |
** |
P2 relativ |
A:=(A)-((P2)+XX) |
SUB A,XX,P3 |
FB XX |
7 |
** |
P3 relativ |
A:=(A)-((P3)+XX) |
SUB A,=XX |
FC XX |
7 |
** |
unmittelbar |
A:=(A)-XX |
SUB A,XX |
FD XX |
7 |
** |
direkt |
A:=(A)-(FF00+XX) |
SUB A,@XX,P2 |
FE XX |
8 |
** |
auto- |
P2:=(P2)+XX, A:=(A)-((P2)) |
SUB A,@XX,P3 |
FF XX |
8 |
** |
auto- |
P3:=(P3)+XX, A:=(A)-((P3)) |
MPY EA,T |
2C |
37 |
** |
implizit |
EA:=[(EA)*(T)]31:16, |
DIV EA,T |
0D |
41 |
** |
implizit |
EA:=[(EA)/(T)]15:0, |
ILD A,XX,PC |
90 XX |
8 |
PC relativ |
A:=++((PC)+XX) |
|
ILD A,XX,SP |
91 XX |
8 |
SP relativ |
A:=++((SP)+XX) |
|
ILD A,XX,P2 |
92 XX |
8 |
P2 relativ |
A:=++((P2)+XX) |
|
ILD A,XX,P3 |
93 XX |
8 |
P3 relativ |
A:=++((P3)+XX) |
|
ILD A,XX |
95 XX |
8 |
direkt |
A:=++(FF00+XX) |
|
ILD A,@XX,P2 |
96 XX |
9 |
auto- |
P2:=(P2)+XX, A:=++((P2)) |
|
ILD A,@XX,P3 |
97 XX |
9 |
auto- |
P3:=(P3)+XX, A:=++((P3)) |
|
DLD A,XX,PC |
98 XX |
8 |
PC relativ |
A:=--((PC)+XX) |
|
DLD A,XX,SP |
99 XX |
8 |
SP relativ |
A:=--((SP)+XX) |
|
DLD A,XX,P2 |
9A XX |
8 |
P2 relativ |
A:=--((P2)+XX) |
|
DLD A,XX,P3 |
9B XX |
8 |
P3 relativ |
A:=--((P3)+XX) |
|
DLD A,XX |
9D XX |
8 |
direkt |
A:=--(FF00+XX) |
|
DLD A,@XX,P2 |
9E XX |
9 |
auto- |
P2:=(P2)+XX, A:=--((P2)) |
|
DLD A,@XX,P3 |
9F XX |
9 |
auto- |
P3:=(P3)+XX, A:=--((P3)) |
Mnemonic |
Hex-Code |
Zyklen |
Status |
Adressierung |
Wirkung |
---|---|---|---|---|---|
AND S,=XX |
39 XX |
5 |
*** |
unmittelbar |
S:=(S)&XX |
AND A,E |
50 |
4 |
implizit |
A:=(A)&(E) |
|
AND A,XX,PC |
D0 XX |
7 |
PC relativ |
A:=(A)&((PC)+XX) |
|
AND A,XX,SP |
D1 XX |
7 |
SP relativ |
A:=(A)&((SP)+XX) |
|
AND A,XX,P2 |
D2 XX |
7 |
P2 relativ |
A:=(A)&((P2)+XX) |
|
AND A,XX,P3 |
D3 XX |
7 |
P3 relativ |
A:=(A)&((P3)+XX) |
|
AND A,=XX |
D4 XX |
7 |
unmittelbar |
A:=(A)&XX |
|
AND A,XX |
D5 XX |
7 |
direkt |
A:=(A)&(FF00+XX) |
|
AND A,@XX,P2 |
D6 XX |
8 |
auto- |
P2:=(P2)+XX, A:=(A)&((P2)) |
|
AND A,@XX,P3 |
D7 XX |
8 |
auto- |
P3:=(P3)+XX, A:=(A)&((P3)) |
|
OR S,=XX |
3B XX |
5 |
*** |
unmittelbar |
S:=(S)|XX |
OR A,E |
58 |
4 |
implizit |
A:=(A)|(E) |
|
OR A,XX,PC |
D8 XX |
7 |
PC relativ |
A:=(A)|((PC)+XX) |
|
OR A,XX,SP |
D9 XX |
7 |
SP relativ |
A:=(A)|((SP)+XX) |
|
OR A,XX,P2 |
DA XX |
7 |
P2 relativ |
A:=(A)|((P2)+XX) |
|
OR A,XX,P3 |
DB XX |
7 |
P3 relativ |
A:=(A)|((P3)+XX) |
|
OR A,=XX |
DC XX |
7 |
unmittelbar |
A:=(A)|XX |
|
OR A,XX |
DD XX |
7 |
direkt |
A:=(A)|(FF00+XX) |
|
OR A,@XX,P2 |
DE XX |
8 |
auto- |
P2:=(P2)+XX, A:=(A)|((P2)) |
|
OR A,@XX,P3 |
DF XX |
8 |
auto- |
P3:=(P3)+XX, A:=(A)|((P3)) |
|
XOR A,E |
60 |
4 |
implizit |
A:=(A)^(E) |
|
XOR A,XX,PC |
E0 XX |
7 |
PC relativ |
A:=(A)^((PC)+XX) |
|
XOR A,XX,SP |
E1 XX |
7 |
SP relativ |
A:=(A)^((SP)+XX) |
|
XOR A,XX,P2 |
E2 XX |
7 |
P2 relativ |
A:=(A)^((P2)+XX) |
|
XOR A,XX,P3 |
E3 XX |
7 |
P3 relativ |
A:=(A)^((P3)+XX) |
|
XOR A,=XX |
E4 XX |
7 |
unmittelbar |
A:=(A)^XX |
|
XOR A,XX |
E5 XX |
7 |
direkt |
A:=(A)^(FF00+XX) |
|
XOR A,@XX,P2 |
E6 XX |
8 |
auto- |
P2:=(P2)+XX, A:=(A)^((P2)) |
|
XOR A,@XX,P3 |
E7 XX |
8 |
auto- |
P3:=(P3)+XX, A:=(A)^((P3)) |
Mnemonic |
Hex-Code |
Zyklen |
Status |
Adressierung |
Wirkung |
---|---|---|---|---|---|
BND XX |
2D XX |
? |
PC relativ |
siehe: BND |
|
BNZ XX |
7C XX |
5 |
PC relativ |
wenn (A)<>0 dann PC:=(PC)+XX |
|
BNZ XX,P2 |
7E XX |
5 |
P2 relativ |
wenn (A)<>0 dann PC:=(P2)+XX |
|
BNZ XX,P3 |
7F XX |
5 |
P3 relativ |
wenn (A)<>0 dann PC:=(P3)+XX |
|
BP XX |
64 XX |
5 |
PC relativ |
wenn (A)>0 dann PC:=(PC)+XX |
|
BP XX,P2 |
66 XX |
5 |
P2 relativ |
wenn (A)>0 dann PC:=(P2)+XX |
|
BP XX,P3 |
67 XX |
5 |
P3 relativ |
wenn (A)>0 dann PC:=(P3)+XX |
|
BRA XX |
74 XX |
5 |
PC relativ |
PC:=(PC)+XX |
|
BRA XX,P2 |
76 XX |
5 |
P2 relativ |
PC:=(P2)+XX |
|
BRA XX,P3 |
77 XX |
5 |
P3 relativ |
PC:=(P3)+XX |
|
BZ XX |
6C XX |
5 |
PC relativ |
wenn (A)=0 dann PC:=(PC)+XX |
|
BZ XX,P2 |
6E XX |
5 |
P2 relativ |
wenn (A)=0 dann PC:=(P2)+XX |
|
BZ XX,P3 |
6F XX |
5 |
P3 relativ |
wenn (A)=0 dann PC:=(P3)+XX |
|
CALL 0 |
10 |
17 |
indirekt |
(--(SP)):=(PC), PC:=(20h) |
|
CALL 1 |
11 |
17 |
indirekt |
(--(SP)):=(PC), PC:=(22h) |
|
CALL 2 |
12 |
17 |
indirekt |
(--(SP)):=(PC), PC:=(24h) |
|
CALL 3 |
13 |
17 |
indirekt |
(--(SP)):=(PC), PC:=(26h) |
|
CALL 4 |
14 |
17 |
indirekt |
(--(SP)):=(PC), PC:=(28h) |
|
CALL 5 |
15 |
17 |
indirekt |
(--(SP)):=(PC), PC:=(2Ah) |
|
CALL 6 |
16 |
17 |
indirekt |
(--(SP)):=(PC), PC:=(2Ch) |
|
CALL 7 |
17 |
17 |
indirekt |
(--(SP)):=(PC), PC:=(2Eh) |
|
CALL 8 |
18 |
17 |
indirekt |
(--(SP)):=(PC), PC:=(30h) |
|
CALL 9 |
19 |
17 |
indirekt |
(--(SP)):=(PC), PC:=(32h) |
|
CALL A |
1A |
17 |
indirekt |
(--(SP)):=(PC), PC:=(34h) |
|
CALL B |
1B |
17 |
indirekt |
(--(SP)):=(PC), PC:=(36h) |
|
CALL C |
1C |
17 |
indirekt |
(--(SP)):=(PC), PC:=(38h) |
|
CALL D |
1D |
17 |
indirekt |
(--(SP)):=(PC), PC:=(3Ah) |
|
CALL E |
1E |
17 |
indirekt |
(--(SP)):=(PC), PC:=(3Ch) |
|
CALL F |
1F |
17 |
indirekt |
(--(SP)):=(PC), PC:=(3Eh) |
|
JMP XXYY |
24 YY XX |
8 |
absolut |
PC:=XXYY |
|
JSR XXYY |
20 YY XX |
15 |
absolut |
(--(SP)):=(PC), PC:=XXYY |
|
RET |
5C |
10 |
implizit |
PC:=((SP)++) |
|
SSM P2 |
2E |
? |
indiziert |
siehe: SSM |
|
SSM P3 |
2F |
? |
indiziert |
siehe: SSM |
|
NOP |
00 |
3 |
implizit |
(PC)++ |
Anmerkungen:
In guten Assemblern für die INS 8070 Serie können jeweils beide Schreibweisen synonym verwendet werden.
Für diesen Befehl ist die Anzahl der Zyklen nicht angegeben, weil sie vom Inhalt des Akkumulators abhängig ist.
Für diesen Befehl ist die Anzahl der Zyklen nicht angegeben, weil sie davon abhängt, wie viele Speicherplätze getestet werden müssen.
Mnemonic |
Hex-Code |
Zyklen |
Status |
Adressierung |
Wirkung |
---|---|---|---|---|---|
PUSH EA |
08 |
8 |
implizit |
(--(SP)):=(EA) |
|
PUSH A |
0A |
5 |
implizit |
(--(SP)):=(A) |
|
PUSH PC |
54 |
8 |
implizit |
(--(SP)):=(PC) |
|
PUSH P2 |
56 |
8 |
implizit |
(--(SP)):=(P2) |
|
PUSH P3 |
57 |
8 |
implizit |
(--(SP)):=(P3) |
|
POP A |
38 |
6 |
implizit |
A:=((SP)++) |
|
POP EA |
3A |
9 |
implizit |
AE:=((SP)++) |
|
POP P2 |
5E |
10 |
implizit |
P2:=((SP)++) |
|
POP P3 |
5F |
10 |
implizit |
P3:=((SP)++) |
|
PLI P2,=XXYY |
22 YY XX |
15 |
unmittelbar |
(--(SP)):=(P2), P2:=XXYY |
|
PLI P3,=XXYY |
23 YY XX |
15 |
unmittelbar |
(--(SP)):=(P3), P3:=XXYY |
Anmerkungen:
Es erscheint auf den ersten Blick etwas seltsam, dass es zwar den Befehl PUSH PC gibt, aber keinen POP PC. Der dazu gehörende Befehlscode 5C ist weiter oben bei den Verzeigungsbefehlen als RET Befehl gelistet. Denn das ist genau die Wirkung die das Rückholen einer Adresse vom Stack in den PC zur Folge hat.
Die PLI Befehle (Push and Load Immediate) sind für die beiden Pointer PC und SP nicht definiert. Die dazu gehörenden Befehlscodes wären 20 und 21. Der Befehlscode 20 ist weiter oben bei den Verzeigungsbefehlen als JSR Befehl gelistet. Denn das ist genau die Wirkung die der Befehl PLI PC,=XXYY bewirken würde. Das Retten der augenblicklichen Programmadresse auf den Stack und unmittelbares laden einer neuen Programmadresse. Der PLI Befehlscode 21 für den Stapelzeiger SP ist aber tatsächlich undefiniert. Siehe Ungesichertes Wissen.
Mnemonic |
Hex-Code |
Zyklen |
Status |
Adressierung |
Wirkung |
---|---|---|---|---|---|
SR A |
3C |
3 |
implizit |
0 nach rechts in A schieben |
|
SRL A |
3D |
3 |
implizit |
L nach rechts in A schieben |
|
SR EA |
0C |
4 |
implizit |
0 nach rechts in EA schieben |
|
SL A |
0E |
3 |
implizit |
0 nach links in A schieben |
|
SL EA |
0F |
4 |
implizit |
0 nach links in EA schieben |
|
RR A |
3E |
3 |
implizit |
A nach rechts rotieren |
|
RRL A |
3F |
3 |
* |
implizit |
A nach rechts durch L rotieren |
Im Befehlssatz des INS8070 sind nur 192 von 256 möglichen Befehlsbytes definiert. Undefiniert sind die Befehlsbytes der leeren Felder in folgender Tabelle:
0_ |
1_ |
2_ |
3_ |
4_ |
5_ |
6_ |
7_ |
|
_0 |
NOP |
CALL 0 |
JSR XXYY |
LD EA,PC |
LD A,E |
AND A,E |
XOR A,E |
ADD A,E |
_1 |
XCH A,E |
CALL 1 |
LD EA,SP |
|||||
_2 |
CALL 2 |
PLI P2,=XXYY |
LD EA,P2 |
|||||
_3 |
CALL 3 |
PLI P3,=XXYY |
LD EA,P3 |
|||||
_4 |
CALL 4 |
JMP XXYY |
LD PC,EA |
PUSH PC |
BP XX |
BRA XX |
||
_5 |
CALL 5 |
LD SP,=XXYY |
LD SP,EA |
|||||
_6 |
LD A,S |
CALL 6 |
LD P2,=XXYY |
LD P2,EA |
PUSH P2 |
BP XX,P2 |
BRA XX,P2 |
|
_7 |
LD S,A |
CALL 7 |
LD P3,=XXYY |
LD P3,EA |
PUSH P3 |
BP XX,P3 |
BRA XX,P3 |
|
_8 |
PUSH EA |
CALL 8 |
POP A |
LD E,A |
OR A,E |
SUB A,E |
||
_9 |
LD T,EA |
CALL 9 |
AND S,=XX |
|||||
_A |
PUSH A |
CALL A |
POP EA |
|||||
_B |
LD EA,T |
CALL B |
OR S,=XX |
|||||
_C |
SR EA |
CALL C |
MPY EA,T |
SR A |
XCH PC,EA |
RET |
BZ XX |
BNZ XX |
_D |
DIV EA,T |
CALL D |
BND XX |
SRL A |
XCH EA,SP |
|||
_E |
SL A |
CALL E |
SSM P2 |
RR A |
XCH EA,P2 |
POP P2 |
BZ XX,P2 |
BNZ XX,P2 |
_F |
SL EA |
CALL F |
SSM P3 |
RRL A |
XCH EA,P3 |
POP P3 |
BZ XX,P3 |
BNZ XX,P3 |
8_ |
9_ |
A_ |
B_ |
C_ |
D_ |
E_ |
F_ |
|
_0 |
LD EA,XX,PC |
ILD A,XX,PC |
LD T,XX,PC |
ADD EA,XX,PC |
LD A,XX,PC |
AND A,XX,PC |
XOR A,XX,PC |
ADD A,XX,PC |
_1 |
LD EA,XX,SP |
ILD A,XX,SP |
LD T,XX,SP |
ADD EA,XX,SP |
LD A,XX,SP |
AND A,XX,SP |
XOR A,XX,SP |
ADD A,XX,SP |
_2 |
LD EA,XX,P2 |
ILD A,XX,P2 |
LD T,XX,P2 |
ADD EA,XX,P2 |
LD A,XX,P2 |
AND A,XX,P2 |
XOR A,XX,P2 |
ADD A,XX,P2 |
_3 |
LD EA,XX,P3 |
ILD A,XX,P3 |
LD T,XX,P3 |
ADD EA,XX,P3 |
LD A,XX,P3 |
AND A,XX,P3 |
XOR A,XX,P3 |
ADD A,XX,P3 |
_4 |
LD EA,=XXYY |
LD T,=XXYY |
ADD EA,=XXYY |
LD A,=XX |
AND A,=XX |
XOR A,=XX |
ADD A,=XX |
|
_5 |
LD EA,XX |
ILD A,XX |
LD T,XX |
ADD EA,XX |
LD A,XX |
AND A,XX |
XOR A,XX |
ADD A,XX |
_6 |
LD EA,@XX,P2 |
ILD A,@XX,P2 |
LD T,@XX,P2 |
ADD EA,@XX,P2 |
LD A,@XX,P2 |
AND A,@XX,P2 |
XOR A,@XX,P2 |
ADD A,@XX,P2 |
_7 |
LD EA,@XX,P3 |
ILD A,@XX,P3 |
LD T,@XX,P3 |
ADD EA,@XX,P3 |
LD A,@XX,P3 |
AND A,@XX,P3 |
XOR A,@XX,P3 |
ADD A,@XX,P3 |
_8 |
ST EA,XX,PC |
DLD A,XX,PC |
SUB EA,XX,PC |
ST A,XX,PC |
OR A,XX,PC |
SUB A,XX,PC |
||
_9 |
ST EA,XX,SP |
DLD A,XX,SP |
SUB EA,XX,SP |
ST A,XX,SP |
OR A,XX,SP |
SUB A,XX,SP |
||
_A |
ST EA,XX,P2 |
DLD A,XX,P2 |
SUB EA,XX,P2 |
ST A,XX,P2 |
OR A,XX,P2 |
SUB A,XX,P2 |
||
_B |
ST EA,XX,P3 |
DLD A,XX,P3 |
SUB EA,XX,P3 |
ST A,XX,P3 |
OR A,XX,P3 |
SUB A,XX,P3 |
||
_C |
SUB EA,=XXYY |
OR A,=XX |
SUB A,=XX |
|||||
_D |
ST EA,XX |
DLD A,XX |
SUB EA,XX |
ST A,XX |
OR A,XX |
SUB A,XX |
||
_E |
ST EA,@XX,P2 |
DLD A,@XX,P2 |
SUB EA,@XX,P2 |
ST A,@XX,P2 |
OR A,@XX,P2 |
SUB A,@XX,P2 |
||
_F |
ST EA,@XX,P3 |
DLD A,@XX,P3 |
SUB EA,@XX,P3 |
ST A,@XX,P3 |
OR A,@XX,P3 |
SUB A,@XX,P3 |
Bisher sind zu jedem Mikroprozessor immer wieder "geheime" Befehle bekannt geworden. Es ist also zu vermuten, dass auch beim INS8070 einige der undefinierten Bytes durchaus sinnvolle Aufgaben erledigen.