6.2. Processor CDP1805

Procesory CDP1805 a CDP1806 jsou funkční rozšíření procesoru CDP1802

Vlastnosti

Tabulka 6.3. CDP1805 Opcodes řazeno podle operačních kódů

CODEMNEMOInstrukceCyclePopis
00IDLIdle2Wait for DMA or interrupt; M[R0)→BUS
0NLDNLoad via N2M(RN)→D; For N not 0
1NINCIncrement Reg. N2RN+1→RN
2NDECDecrement Reg. N2RN-1→RN
30BRShort Branch2M[RP]→RP.0
31BQShort Branch if Q=12If Q=1 Then M[RP]→RP.0 Else RP+1→RP
32BZShort Branch if D=02If D=0 Then M[RP]→RP.0 Else RP+1→RP
33BDFShort Branch if DF=12If D=1 Then M[RP]→RP.0 Else RP+1→RP
33BGEShort Branch if Equal or Greater2If D=1 Then M[RP]→RP.0 Else RP+1→RP
33BPZShort Branch if Pos. or Zero2If D=1 Then M[RP]→RP.0 Else RP+1→RP
34B1Short Branch if EF1=12If EF1=1 Then M[RP]→RP.0 Else RP+1→RP
35B2Short Branch if EF2=12If EF2=1 Then M[RP]→RP.0 Else RP+1→RP
36B3Short Branch if EF3=12If EF3=1 Then M[RP]→RP.0 Else RP+1→RP
37B4Short Branch if EF4=12If EF4=1 Then M[RP]→RP.0 Else RP+1→RP
38NBRNo Short Branch (See SKP)2RP+1→RP
38SKPShort Skip (See NBR)2RP+1→RP
39BNQShort Branch if Q=02If Q=1 Then M[RP]→RP.0 Else RP+1→RP
3ABNZShort Branch if D not 02If D not 0 Then M[RP]→RP.0 Else RP+1→RP
3BBMShort Branch if Minus2If D=0 Then M[RP]→RP.0 Else RP+1→RP
3BBNFShort Branch if DF=02If D=0 Then M[RP]→RP.0 Else RP+1→RP
3BBPLShort Branch if Less2If D=0 Then M[RP]→RP.0 Else RP+1→RP
3CBN1Short Branch if EF1=02If EF1=0 Then M[RP]→RP.0 Else RP+1→RP
3DBN2Short Branch if EF2=02If EF2=0 Then M[RP]→RP.0 Else RP+1→RP
3EBN3Short Branch if EF3=02If EF3=0 Then M[RP]→RP.0 Else RP+1→RP
3FBN4Short Branch if EF4=02If EF4=0 Then M[RP]→RP.0 Else RP+1→RP
4NLDALoad Advance2M(RN)→D; RN+1→RN
5NSTRStore via N2D→M(RN)
60IRXIncrement Reg. X2RX+1→RX
61OUT 1Output 12M[RX]→BUS; RX+1→RX; N Lines=1
62OUT 2Output 22M[RX]→BUS; RX+1→RX; N Lines=2
63OUT 3Output 32M[RX]→BUS; RX+1→RX; N Lines=3
64OUT 4Output 42M[RX]→BUS; RX+1→RX; N Lines=4
65OUT 5Output 52M[RX]→BUS; RX+1→RX; N Lines=5
66OUT 6Output 62M[RX]→BUS; RX+1→RX; N Lines=6
67OUT 7Output 72M[RX]→BUS; RX+1→RX; N Lines=7
682NDBNZDecrement Reg. N and Long Branch if not Equal 05RN-1→RN; If RN not 0 Then M[RP]→RP.1; M[RP+1]→RP.0 Else RP+2→RP
683EBCIShort Branch on Counter Interrupt3If CI=1 Then M[RP]→RP.0; 0→CI Else RP+1→RP
683FBXIShort Branch on External Interrupt3If XI=1 Then M[RP]→RP.0 Else RP+1→RP
686NRLXARegister Load via X and Advance5M[RX]→RN.1; M[RX+1]→RN.0; RX+2→RX
6874DADCDecimal Add with Carry4M[RX]+D+DF→(DF,D); decimal adjust →(DF,D)
6877DSMBDecimal Subtract Memory with Borrow4D-M[RX]-(not DF)→(DF,D); decimal adjust →(DF,D)
687CDACIDecimal Add with Carry, Immediate4M[RP]+D+DF→(DF,D); RP+1→RP; decimal adjust →(DF,D)
687FDSBIDecimal Subtract Memory with Borrow, Immediate4D-M[RP]-(not DF)→(DF,D); RP+1→RP; decimal adjust →(DF,D)
688NSCALStandard Call10RN.0→M(RX);...
689NSRETStandard Return8RN→RP;...
68ANRSXDRegister Store via X and Decrement5RN.0→M[RX]; RN.1→M[RX-1]; RX-2→RX
68BNRNXRegister N to Register X Copy4RN→RX
68CNRLDIRegister Load Immediate5M[RP]→RN.1; M[RP+1]→RN.0; RP+2→RP
68F4DADDDecimal Add4M[RX]+D→(DF,D); decimal adjust →(DF,D)
68F7DSMDecimal Subtract Memory4D-M[RX]→(DF,D); decimal adjust →(DF,D)
68FCDADIDecimal Add Immediate4M[RP]+D→(DF,D); RP+1→RP; decimal adjust →(DF,D)
68FFDSMIDecimal Subtract Memory, Immediate4D-M[RP]→(DF,D); RP+1RP; decimal adjust →(DF,D)
69INP 1Input 12BUS→M[RX]; BUS→D; N Lines=1
6AINP 2Input 22BUS→M[RX]; BUS→D; N Lines=2
6BINP 3Input 32BUS→M[RX]; BUS→D; N Lines=3
6CINP 4Input 42BUS→M[RX]; BUS→D; N Lines=4
6DINP 5Input 52BUS→M[RX]; BUS→D; N Lines=5
6EINP 6Input 62BUS→M[RX]; BUS→D; N Lines=6
6FINP 7Input 72BUS→M[RX]; BUS→D; N Lines=7
70RETReturn2M[RX]→(X,P); RX+1→RX, 1→IE
71DISDisable2M[RX]→(X,P); RX+1→RX, 0→IE
72LDXALoad via X and Advance2M(RX)→D; RX+1→RX
73STXDStore via X and Decrement2D→M(RX); RX-1→RX
74ADCAdd with Carry2M[RX]+D+DF→(DF,D)
75SDBSubtract D with Borrow2M[RX]-D-(not DF)→(DF,D)
76RSHRRing Shift Right2shift D right, LSB(D)→DF, DF→MSB(D)
76SHRCShift Right with Carry2shift D right, LSB(D)→DF, DF→MSB(D)
77SMBSubtract Memory with Borrow2D-M[RX]-(not DF)→(DF,D)
78SAVSave2T→M[RX]
79MARKPush X,P to Stack2(X,P)→T;(X,P)→M[R2]; P→X; R2-1→R2
7AREQReset Q20→Q
7BSEQSet Q21→Q
7CADCIAdd with Carry, Immediate2M[RP]+D+DF→(DF,D); RP+1→RP
7DSDBISubtract D with Borrow, Immediate2M[RP]-D-(not DF)→(DF,D); RP+1→RP
7ERSHLRing Shift Left2shift D left, MSB(D)→DF, DF→LSB(D)
7ESHLCShift Left with Carry2shift D left, MSB(D)→DF, DF→LSB(D)
7FSMBISubtract Memory with Borrow, Immediate2D-M[RP]-(not DF)→(DF,D); RP+1→RP
8NGLOGet low Reg. N2RN.0→D
9NGHIGet low Reg. N2RN.1→D
ANPLOPut low Reg. N2D→RN.0
BNPHIPut low Reg. N2D→RN.1
C0LBRLong Branch3M[RP]→RP.1; M[RP+1]→RP.0
C1LBQLong Branch if Q=13If Q=1 Then M[RP]→RP.1; M[RP+1]→RP.0 Else RP+2→RP
C2LBZLong Branch if D=03If D=0 Then M[RP]→RP.1; M[RP+1]→RP.0 Else RP+2→RP
C3LBDFLong Branch if DF=13If DF=1 Then M[RP]→RP.1; M[RP+1]→RP.0 Else RP+2→RP
C4NOPNo Operation3Continue
C5LSNQLong Skip if Q=03If Q=0 Then RP+2→RP Else Continue
C6LSNZLong Skip if D not 03If D not 0 Then RP+2→RP Else Continue
C7LSNFLong Skip if DF=03If DF=0 Then RP+2→RP Else Continue
C8LSKPLong Skip (See NLBR)3RP+2→RP
C8NLBRNo Long (See LSKP)3RP+2→RP
C9LBNQLong Branch if Q=03If Q=0 Then M[RP]→RP.1; M[RP+1]→RP.0 Else RP+2→RP
CALBNZLong Branch if D not 03If D not 0 Then M[RP]→RP.1; M[RP+1]→RP.0 Else RP+2→RP
CBLBNFLong Branch if DF=03If DF=0 Then M[RP]→RP.1; M[RP+1]→RP.0 Else RP+2→RP
CCLSIELong Skip if IE=13If IE=1 Then RP+2→RP Else Continue
CDLSQLong Skip if Q=13If Q=1 Then RP+2→RP Else Continue
CELSZLong Skip if D=03If D=0 Then RP+2→RP Else Continue
CFLSDFLong Skip if DF=13If DF=1 Then RP+2→RP Else Continue
DNSEPSet P2N→P
ENSEXSet X2N→X
F0LDXLoad via X2M(RX)→D
F1OROr2M[RX] OR D →D
F2ANDAnd2M[RX] and D →D
F3XORExclusive Or2M[RX] xor D →D
F4ADDAdd2M[RX]+D→(DF,D)
F5SDSubtract D2M[RX]-D→(DF,D)
F6SHRShift Right2shift D right, LSB(D)→DF, 0→MSB(D)
F7SMSubtract Memory2D-M[RX]→(DF,D)
F8LDILoad Immediate2M(RP)→D; RP+1→RP
F9ORIOr Immediate2M[RP] OR D →D; RP+1→RP
FAANIAnd Immediate2M[RP] and D →D; RP+1→RP
FBXRIExclusive Or Immediate2M[RP] xor D →D; RP+1→RP
FCADIAdd Immediate2M[RP]+D→(DF,D); RP+1→RP
FDSDISubtract D Immediate2M[RP]-D→(DF,D); RP+1→RP
FESHLShift Left2shift D left, MSB(D)→DF, 0→LSB(D)
FFSMISubtract Memory Immediate2D-M[RP]→(DF,D); RP+1→RP

Tabulka 6.4. Mapa instrukcí

H\L0123456789ABCDEF
0IDLLDN R1LDN R2LDN R3LDN R4LDN R5LDN R6LDN R7LDN R8LDN R9LDN RALDN RBLDN RCLDN RDLDN RELDN RF
1                
2                
3                
4                
5                
6 OUT 1OUT 2OUT 3OUT 4OUT 5OUT 6OUT 7        
7RETDIS      SAV       
8                
9                
A                
B                
C                
D                
E                
F                


[2] jen procesor CDP1805