The main clock in the CPC is 16Mhz This is provided to the Gate-Array which generates the other clocks.
The Gate Array has the following roles:
Every microsecond:
The video hardware is given priority so that the display is not disrupted
The Gate-Array generates the "READY" signal which is connected to the "/WAIT" input signal of the CPU. This signal is used to stop the CPU accessing while the video-hardware is accessing it. As a result, all instruction timings are stretched so that they are all multiples of a microsecond (1µs), and this gives an effective CPU clock of 3.3Mhz.
The following table gives the complete execution time for all CPU instructions
These timings have been measured
Mneumonic(s) | Number of microseconds |
---|---|
NOP | 1 |
LD rp,nnnn | 3 |
INC rp DEC rp | 2 |
INC r DEC r | 1 |
LD r,n | 2 |
RLCA RRCA RLA RRA | 1 |
EX AF,AF' | 1 |
ADD HL,rp | 3 |
LD A,(BC) LD (BC),A LD (DE),A LD A,(DE) | 2 |
DJNZ dd | b-1=0 : 3, b-1<>0 : 4 |
JR dd | 3 |
JR cc,dd | nc : 2, c : 3 |
LD (nnnn),HL LD HL,(nnnn) | 5 |
DAA | 1 |
LD A,(nnnn) LD (nnnn),A | 4 |
INC (HL) DEC (HL) | 3 |
LD (HL),nn | 3 |
SCF CCF CPL | 1 |
LD r,r | 1 |
LD r,(HL) LD (HL),r | 2 |
HALT | 1variable |
ADD A,r ADC A,r SUB r SBC A,r | 1 |
ADD A,(HL) ADC A,(HL) SUB A,(HL) SBC A,(HL) | 2 |
AND r XOR r OR r CP r | 1 |
AND (HL) XOR (HL) OR (HL) CP (HL) | 2 |
RET | 3 |
RET cc | nc : 2, c : 4 |
POP rp | 3 |
PUSH rp | 4 |
JP cc,nnnn | nc : 3, c : 3 |
JP nnnn | 3 |
CALL nnnn | 5 |
CALL cc,nnnn | nc : 3, c : 5 |
ADD A,n ADC a,n SUB n SBC A,n | 2 |
AND n XOR n OR n CP n | 2 |
RST 0 RST 1 RST 2 RST 3 RST 4 RST 5 RST 6 RST 7 | 4 |
RLC r RRC r RR r RL r SLA r SLL r SRL r | 2 |
RLC (HL) RRC (HL) RR (HL) RL (HL) SLA (HL) SLL (HL) SRL (HL) | 4 |
BIT b,r RES b,r SET b,r | 2 |
BIT b,(HL) | 3 |
RES b,(HL) SET b,(HL) | 4 |
IN A,(nn) OUT (nn),A | 3 |
EXX | 1 |
ADD IX,rp | 4 |
LD IX,nnnn | 4 |
LD (nnnn),IX LD IX,(nnnn) | 6 |
INC IX DEC IX | 3 |
INC HIX DEX HIX INC LIX DEC LIX | 2 |
LD HIX,nn LD LIX,nn | 3 |
INC (IX+dd) DEC (IX+dd) | 6 |
LD (IX+dd),nn | 6 |
LD r,HIX LD r,LIX LD HIX,r LD LIX,r | 2 |
LD r,(IX+dd) LD (IX+dd),r | 5 |
ADD A,HIX ADC A,HIX SUB HIX SBC A,HIX | 2 |
ADD A,(IX+dd) ADC A,(IX+dd) SUB (IX+dd) SBC A,(IX+dd) | 5 |
AND (IX+dd) XOR (IX+dd) OR (IX+dd) CP (IX+dd) | 5 |
AND HIX/XOR HIX/OR HIX/CP HIX | 2 |
RLC (IX+dd) RRC (IX+dd) RL (IX+dd) RR (IX+dd) SLA (IX+dd) SRA (IX+dd) SLL (IX+dd) SRL (IX+dd) | 7 |
BIT r,(IX+dd) | 6 |
RES r,(IX+dd) SET r,(IX+dd) | 7 |
PUSH IX PUSH IY | 5 |
POP IX POP IY | 5 |
EX (SP),IX | 7 |
JP (IX) | 2 |
EX (SP),HL | 6 |
LD SP,IX | 3 |
JP (HL) | 1 |
EX DE,HL | 1 |
IN r,(C) OUT (C),r IN F,(C) OUT (C),0 | 4 |
SBC HL,rp ADC HL,rp | 4 |
LD (nnnn),rp LD rp,(nnnn) (includes LD (nnnn),HL and LD (nnnn),HL with ED prefix) | 6 |
NEG | 2 |
IM 0 IM 1 IM 2 | 2 |
LD I,A LD A,I LD R,A LD A,R | 3 |
DI EI | 1 |
LD SP,HL | 2 |
RLD RRD | 5 |
LDI LDD | 5 |
OUTI OUTD | 5 |
LDIR LDDR | BC-1=0 : 5, BC-1<>0 : 6 |
RETN RETI | 4 |
DD FD prefix (note 1) | 1 |
ED "nop" (ED 00 - ED 3F) | 2 |
CPI | 5 |
INI | 5 |
CPD | 5 |
IND | 5 |
CPIR | BC-1=0 : 5, BC-1<>0 : 6 |
INIR | BC-1=0 : 5, BC-1<>0 : 6 |
OTIR | BC-1=0 : 5, BC-1<>0 : 6 |
CPDR | BC-1=0 : 5, BC-1<>0 : 6 |
INDR | BC-1=0 : 5, BC-1<>0 : 6 |
OTDR | BC-1=0 : 5, BC-1<>0 : 6 |
NOTES:
Key:
cc | condition code (z,nz,c,nc,p,m,po,pe) |
r | 8-bit register (B,C,D,E,H,L,A) |
b | Bit number (0,1,2,3,4,5,6,7) |
n | 8 bit value |
nnnn | 16 bit value |
dd | 8 bit displacement |
rp | 16-bit register (HL,DE,BC) |
nc | condition not satisfied |
c | condition satisfied |
Time between acknowledge of a interrupt and execution of a interrupt
1 monitor scanline: 64 microseconds
1 50Hz monitor frame: 19968 microseconds.