A-Z80 Timing Table M_ T_ Function valid nextM setM1 A:reg rd A:reg wr inc/dec A:latch D:reg rd D:reg wr Reg gate SW2 SW1 DB pads FLAGT ALU ALU bus op2 latch op1 latch nibble operation SZ XY HF PF NF CF CF2 Special Comments // 8-bit Load Group "#if pla[17] & ~pla[50] : ld r,n" "4,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch r8 < d < R #002H T2 AB:000 DB:46 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead PC W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead Y #end "#if pla[61] & ~pla[58] & ~pla[59] : ld r,r'" 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch r8 < u < op1 #002H T2 AB:000 DB:05 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y r8 >r8 - >s0 bus #end "#if use_ixiy & pla[58] : ld r,(ix+d)" "4,3,5,3" #005H T1 AB:001 DB:-- M1 1 1 fMFetch r8 < d < R #006H T2 AB:001 DB:4E M1 MREQ RD 1 2 fMFetch #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y mr #009H T5 AB:002 DB:-- 2 1 fMRead PC W #010H T6 AB:002 DB:01 MREQ RD 2 2 fMRead PC + R #011H T7 AB:002 DB:01 MREQ RD 2 3 fMRead Y #012H T8 AB:002 DB:-- 3 1 WZ=IX+d #013H T9 AB:002 DB:-- 3 2 WZ=IX+d #014H T10 AB:002 DB:-- 3 3 WZ=IX+d #015H T11 AB:002 DB:-- 3 4 WZ=IX+d #016H T12 AB:002 DB:-- 3 5 mr WZ=IX+d Clears the IX/IY and ... #end "#if ~use_ixiy & pla[58] : ld r,(hl)" "4,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch r8 < d < R #002H T2 AB:000 DB:46 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:003 DB:-- 2 1 fMRead HL W #006H T6 AB:003 DB:03 MREQ RD 2 2 fMRead #007H T7 AB:003 DB:03 MREQ RD 2 3 fMRead Y #017H T13 AB:001 DB:-- 4 1 fMRead R ...continues here #018H T14 AB:001 DB:4E MREQ RD 4 2 fMRead #019H T15 AB:001 DB:4E MREQ RD 4 3 fMRead Y #end "#if use_ixiy & pla[59] : ld (ix+d),r" "4,3,5,3" #005H T1 AB:001 DB:-- M1 1 1 fMFetch #006H T2 AB:001 DB:70 M1 MREQ RD 1 2 fMFetch #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y mr #009H T5 AB:002 DB:-- 2 1 fMRead PC W #010H T6 AB:002 DB:01 MREQ RD 2 2 fMRead PC + R #011H T7 AB:002 DB:01 MREQ RD 2 3 fMRead Y #012H T8 AB:002 DB:-- 3 1 WZ=IX+d #013H T9 AB:002 DB:-- 3 2 WZ=IX+d #014H T10 AB:002 DB:-- 3 3 WZ=IX+d #015H T11 AB:002 DB:-- 3 4 WZ=IX+d #016H T12 AB:002 DB:-- 3 5 mw WZ=IX+d Clears the IX/IY and ... #end "#if ~use_ixiy & pla[59] : ld (hl),r" "4,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:70 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mw r8 >r8 - > W #005H T5 AB:001 DB:-- 2 1 fMWrite HL W #006H T6 AB:001 DB:01 MREQ 2 2 fMWrite #007H T7 AB:001 DB:01 MREQ WR 2 3 fMWrite Y #017H T13 AB:000 DB:-- 4 1 fMWrite R r8 >r8 - > W ...continues here #018H T14 AB:000 DB:46 MREQ 4 2 fMWrite #019H T15 AB:000 DB:46 MREQ WR 4 3 fMWrite Y #end "#if pla[40] : ld (ix+d),n" "4,3,5,3" #005H T1 AB:001 DB:-- M1 1 1 fMFetch #006H T2 AB:001 DB:36 M1 MREQ RD 1 2 fMFetch #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y mr #009H T5 AB:002 DB:-- 2 1 fMRead PC W #010H T6 AB:002 DB:01 MREQ RD 2 2 fMRead PC + R #011H T7 AB:002 DB:01 MREQ RD 2 3 fMRead mr #012H T8 AB:003 DB:-- 3 1 fMRead PC W WZ=IX+d #013H T9 AB:003 DB:02 MREQ RD 3 2 fMRead PC + R WZ=IX+d #014H T10 AB:003 DB:02 MREQ RD 3 3 fMRead WZ=IX+d "Reads ""n"" at the same time" #015H T11 AB:003 DB:-- 3 4 WZ=IX+d #016H T12 AB:003 DB:-- 3 5 mw WZ=IX+d Clears the IX/IY and ... #end "#if pla[50] & ~pla[40] : ld (hl),n" "4,3,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:36 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead PC W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead mw #008H T8 AB:001 DB:-- 3 1 fMWrite HL W #009H T9 AB:001 DB:01 MREQ 3 2 fMWrite #010H T10 AB:001 DB:01 MREQ WR 3 3 fMWrite Y #017H T13 AB:002 DB:-- 4 1 fMWrite R ...continues here #018H T14 AB:002 DB:02 MREQ 4 2 fMWrite #019H T15 AB:002 DB:02 MREQ WR 4 3 fMWrite Y #end "#if pla[8] & pla[13] : ld (rr),a" "4,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:02 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mw A >h u > W #005H T5 AB:001 DB:-- 2 1 fMWrite r16 W #006H T6 AB:001 DB:FF MREQ 2 2 fMWrite WZ + R #007H T7 AB:001 DB:FF MREQ WR 2 3 fMWrite Y #end "#if pla[8] & ~pla[13] : ld a,(rr)" "4,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch A < d < R #002H T2 AB:000 DB:0A M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:002 DB:-- 2 1 fMRead r16 W #006H T6 AB:002 DB:02 MREQ RD 2 2 fMRead WZ + R #007H T7 AB:002 DB:02 MREQ RD 2 3 fMRead Y #end "#if pla[38] & pla[13] : ld (nn),a" "4,3,3,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:32 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead PC W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead mr Z h u > W #012H T12 AB:001 DB:FE MREQ 4 2 fMWrite WZ + R #013H T13 AB:001 DB:FE MREQ WR 4 3 fMWrite Y #end "#if pla[38] & ~pla[13] : ld a,(nn)" "4,3,3,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch A < d < R #002H T2 AB:000 DB:3A M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead PC W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead mr Z > >s0 bus bus * * * * * * #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y I/R >r8' - alu >s0 bus bus L OR * * * 0 #009H T5 AB:001 DB:-- 1 5 Y #end "#if pla[57] : ld i,a/r,a" 5 #005H T1 AB:001 DB:-- M1 1 1 fMFetch #006H T2 AB:001 DB:47 M1 MREQ RD 1 2 fMFetch #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y I/R < u < op1 #009H T5 AB:001 DB:-- 1 5 Y #end // 16-bit Load Group "#if pla[7] : ld rr,nn" "4,3,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch rh < d < R USE_SP #002H T2 AB:000 DB:01 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead PC W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead mr #008H T8 AB:002 DB:-- 3 1 fMRead PC W rl < d < R USE_SP #009H T9 AB:002 DB:02 MREQ RD 3 2 fMRead PC + R #010H T10 AB:002 DB:02 MREQ RD 3 3 fMRead Y #end "#if pla[30] & pla[13] : ld (nn),hl" "4,3,3,3,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:22 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead PC W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead mr Z l > W #012H T12 AB:001 DB:01 MREQ 4 2 fMWrite WZ + R #013H T13 AB:001 DB:01 MREQ WR 4 3 fMWrite mw WZ W #014H T14 AB:002 DB:-- 5 1 fMWrite R rh >h u > W #015H T15 AB:002 DB:02 MREQ 5 2 fMWrite WZ + R #016H T16 AB:002 DB:02 MREQ WR 5 3 fMWrite Y #end "#if pla[30] & ~pla[13] : ld hl,(nn)" "4,3,3,3,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:2A M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead PC W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead mr Z l > W USE_SP #016H T12 AB:001 DB:FF MREQ 4 2 fMWrite WZ + R #017H T13 AB:001 DB:FF MREQ WR 4 3 fMWrite mw WZ W #018H T14 AB:002 DB:-- 5 1 fMWrite R rh >h u > W USE_SP #019H T15 AB:002 DB:C3 MREQ 5 2 fMWrite WZ + R #020H T16 AB:002 DB:C3 MREQ WR 5 3 fMWrite Y #end "#if pla[31] & ~pla[33] : ld rr,(nn)" "4,3,3,3,3" #005H T1 AB:001 DB:-- M1 1 1 fMFetch #006H T2 AB:001 DB:43 M1 MREQ RD 1 2 fMFetch #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y mr #009H T5 AB:002 DB:-- 2 1 fMRead PC W #010H T6 AB:002 DB:01 MREQ RD 2 2 fMRead PC + R #011H T7 AB:002 DB:01 MREQ RD 2 3 fMRead mr Z h u > W #007H T7 AB:002 DB:02 MREQ 2 2 fMWrite SP - R #008H T8 AB:002 DB:02 MREQ WR 2 3 fMWrite mw SP - W #009H T9 AB:001 DB:-- 3 1 fMWrite - P rl >l > W #010H T10 AB:001 DB:01 MREQ 3 2 fMWrite SP - R #011H T11 AB:001 DB:01 MREQ WR 3 3 fMWrite Y #end #if pla[23] & ~pla[16] : pop qq "4,3,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:C1 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead SP W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead SP + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead mr rl < d < R #008H T8 AB:002 DB:-- 3 1 fMRead SP W #009H T9 AB:002 DB:02 MREQ RD 3 2 fMRead SP + R #010H T10 AB:002 DB:02 MREQ RD 3 3 fMRead Y rh < d < R #end "// Exchange, Block Transfer and Search Groups" "#if pla[2] : ex de,hl" 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:EB M1 MREQ RD 1 2 fMFetch Ex_DE_HL #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y #end "#if pla[39] : ex af,af'" 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:08 M1 MREQ RD 1 2 fMFetch Ex_AF_AF' #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y #end #if pla[1] : exx 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:D9 M1 MREQ RD 1 2 fMFetch EXX #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y #end "#if pla[10] : ex (sp),hl" "4,3,4,3,5" #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:E3 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:0FD DB:-- 2 1 fMRead SP W #006H T6 AB:0FD DB:03 MREQ RD 2 2 fMRead SP + R #007H T7 AB:0FD DB:03 MREQ RD 2 3 fMRead mr Z h u > W #013H T13 AB:0FE DB:00 MREQ 4 2 fMWrite SP - R #014H T14 AB:0FE DB:00 MREQ WR 4 3 fMWrite mw SP - W #015H T15 AB:0FD DB:-- 5 1 fMWrite - P rl >l > W #016H T16 AB:0FD DB:01 MREQ 5 2 fMWrite SP - R #017H T17 AB:0FD DB:01 MREQ WR 5 3 fMWrite WZ W #018H T18 AB:0FD DB:01 5 4 HL R #019H T19 AB:0FD DB:01 5 5 Y #end #if pla[0] : Non-repeating version of a block instruction "4,3,5,(5)" #always NonRep #end #if pla[12] : ldi/ldir/ldd/lddr "4,3,5,(5)" #035H T1 AB:00A DB:-- M1 1 1 fMFetch alu res H OR * * REP 0 R #036H T2 AB:00A DB:B0 M1 MREQ RD 1 2 fMFetch F < < #037H T3 AB:004 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #038H T4 AB:004 DB:-- RFSH MREQ 1 4 fMFetch Y mr #039H T5 AB:000 DB:-- 2 1 fMRead HL W #040H T6 AB:000 DB:21 MREQ RD 2 2 fMRead HL op3 R #041H T7 AB:000 DB:21 MREQ RD 2 3 fMRead mw d < R alu >s0 bus L ADD * W #042H T8 AB:000 DB:-- 3 1 fMWrite DE W alu < res H ADD R #043H T9 AB:000 DB:21 MREQ 3 2 fMWrite DE op3 R #044H T10 AB:000 DB:21 MREQ WR 3 3 fMWrite BC W #045H T11 AB:000 DB:21 3 4 BC - R WriteBC=1 Update repeat flag latch #046H T12 AB:000 DB:21 3 5 Y BR #047H T13 AB:000 DB:-- 4 1 PC W #048H T14 AB:000 DB:-- 4 2 PC - R #049H T15 AB:000 DB:-- 4 3 PC W #050H T16 AB:000 DB:-- 4 4 PC - R #051H T17 AB:000 DB:-- 4 5 Y #end #if pla[11] : cpi/cpir/cpd/cpdr "4,3,5,(5)" #035H T1 AB:00A DB:-- M1 1 1 fMFetch alu < res 0 H SUB * REP 1 R #036H T2 AB:00A DB:B1 M1 MREQ RD 1 2 fMFetch F < < ?NF_HF #037H T3 AB:004 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #038H T4 AB:004 DB:-- RFSH MREQ 1 4 fMFetch Y mr #039H T5 AB:000 DB:-- 2 1 fMRead HL W #040H T6 AB:000 DB:21 MREQ RD 2 2 fMRead HL op3 R #041H T7 AB:000 DB:21 MREQ RD 2 3 fMRead Y d < R alu >s0 bus L SUB * W #042H T8 AB:000 DB:-- 3 1 alu < res H SUB * R #043H T9 AB:000 DB:-- 3 2 #044H T10 AB:000 DB:-- 3 3 BC W #045H T11 AB:000 DB:-- 3 4 BC - R WriteBC=1 Update repeat flag latch #046H T12 AB:000 DB:-- 3 5 Y BRZ #047H T13 AB:000 DB:-- 4 1 PC W #048H T14 AB:000 DB:-- 4 2 PC - R #049H T15 AB:000 DB:-- 4 3 PC W #050H T16 AB:000 DB:-- 4 4 PC - R #051H T17 AB:000 DB:-- 4 5 Y #end // 8-bit Arithmetic and Logic Group "#if pla[65] & ~pla[52] : add/sub/and/or/xor/cmp a,r" 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch ? < u alu < res H PLA * ? ? ? * A is stored in each ALU PLA below #002H T2 AB:000 DB:80 M1 MREQ RD 1 2 fMFetch F < < PLA ?NF_HF_CF "If (NF), complement HF, CF" #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y r8 >r8 - alu >s0 bus L PLA * * * ? #end "#if pla[64] : add/sub/and/or/xor/cmp a,n" "4,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch ? < u alu < res H PLA * ? ? ? * A is stored in each ALU PLA below #002H T2 AB:000 DB:C6 M1 MREQ RD 1 2 fMFetch F < < PLA ?NF_HF_CF "If (NF), complement HF, CF" #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr r8 >r8 - alu >s0 bus L PLA * * * ? #005H T5 AB:001 DB:-- 2 1 fMRead PC W PLA #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead Y d < R alu >s0 bus L PLA * * * ? #end #if use_ixiy & pla[52] : add/sub/and/or/xor/cp (ix+d) "4,3,5,3" #005H T1 AB:001 DB:-- M1 1 1 fMFetch #006H T2 AB:001 DB:86 M1 MREQ RD 1 2 fMFetch #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y mr #009H T5 AB:002 DB:-- 2 1 fMRead PC W #010H T6 AB:002 DB:01 MREQ RD 2 2 fMRead PC + R #011H T7 AB:002 DB:01 MREQ RD 2 3 fMRead Y #012H T8 AB:002 DB:-- 3 1 WZ=IX+d #013H T9 AB:002 DB:-- 3 2 WZ=IX+d #014H T10 AB:002 DB:-- 3 3 WZ=IX+d "Reads ""n"" at the same time" #015H T11 AB:002 DB:-- 3 4 WZ=IX+d #016H T12 AB:002 DB:-- 3 5 mr WZ=IX+d Clears the IX/IY and ... #end #if ~use_ixiy & pla[52] : add/sub/and/or/xor/cp (hl) "4,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch ? < u alu < res H PLA * ? ? ? * A is stored in each ALU PLA below #002H T2 AB:000 DB:86 M1 MREQ RD 1 2 fMFetch F < < PLA ?NF_HF_CF "If (NF), complement HF, CF" #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead HL W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead WZ + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead Y d < R alu >s0 bus L PLA * * * ? #017H T13 AB:000 DB:-- 4 1 fMRead R ...continues here #018H T14 AB:000 DB:DD MREQ RD 4 2 fMRead AF > > >s0 bus bus * * * * * Reloads AF since (IX+d) used ALU core #019H T15 AB:000 DB:DD MREQ RD 4 3 fMRead Y d < R alu >s0 bus L PLA * * * ? #end #if pla[66] & ~pla[53] : inc/dec r 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch r8 < u alu < res H ADC * * V R #002H T2 AB:000 DB:05 M1 MREQ RD 1 2 fMFetch F < < ?NF_HF "If (NF), complement HF" #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y r8' >r8' - alu >s0 0 bus L ADC * * * 0 1 W #end #if pla[75] : dec #001H T1 AB:000 DB:-- M1 1 1 fMFetch 1 0 NEG_OP2 #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch 1 0 NEG_OP2 #end #if (M2 | M4) & pla[75] : dec #always 1 0 NEG_OP2 #end #if use_ixiy & pla[53] : inc/dec (ix+d) "4,3,5,4,3" #005H T1 AB:001 DB:-- M1 1 1 fMFetch #006H T2 AB:001 DB:34 M1 MREQ RD 1 2 fMFetch #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y mr #009H T5 AB:002 DB:-- 2 1 fMRead PC W #010H T6 AB:002 DB:01 MREQ RD 2 2 fMRead PC + R #011H T7 AB:002 DB:01 MREQ RD 2 3 fMRead Y #012H T8 AB:002 DB:-- 3 1 WZ=IX+d #013H T9 AB:002 DB:-- 3 2 WZ=IX+d #014H T10 AB:002 DB:-- 3 3 WZ=IX+d #015H T11 AB:002 DB:-- 3 4 WZ=IX+d #016H T12 AB:002 DB:-- 3 5 mr WZ=IX+d Clears the IX/IY and ... #end #if ~use_ixiy & pla[53] : inc/dec (hl) "4,4,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:34 M1 MREQ RD 1 2 fMFetch F < < ?NF_HF "If (NF), complement HF" #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead HL W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead d < R alu >s0 0 bus L ADC * 0 1 W #008H T8 AB:001 DB:-- 2 4 mw u > W alu < res H ADC * * V R #009H T9 AB:001 DB:-- 3 1 fMWrite R #010H T10 AB:001 DB:02 MREQ 3 2 fMWrite #011H T11 AB:001 DB:02 MREQ WR 3 3 fMWrite Y #017H T13 AB:002 DB:-- 4 1 fMRead R ...continues here #018H T14 AB:002 DB:01 MREQ RD 4 2 fMRead #019H T15 AB:002 DB:01 MREQ RD 4 3 fMRead d < R alu >s0 0 bus L ADC * 0 1 W #020H T16 AB:002 DB:-- 4 4 mw u > W alu < res H ADC * * V R #021H T17 AB:002 DB:-- 5 1 fMWrite R #022H T18 AB:002 DB:02 MREQ 5 2 fMWrite #023H T19 AB:002 DB:02 MREQ WR 5 3 fMWrite Y #end // 16-bit Arithmetic Group "#if pla[69] : add hl,ss" "4,4,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:09 M1 MREQ RD 1 2 fMFetch F < < #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * 0 * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y L >l d >s0 bus #005H T5 AB:000 DB:-- 2 1 rl >l d alu >s0 bus L ADD * USE_SP #006H T6 AB:000 DB:-- 2 2 Z >s0 bus #008H T8 AB:000 DB:-- 2 4 Y rh > alu >s0 bus L ADC * USE_SP #009H T9 AB:000 DB:-- 3 1 WZ W W > >s0 bus bus * * * * 0 * #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y Y L >l d >s0 bus #009H T5 AB:001 DB:-- 2 1 rl >l d alu >s0 bus L ADC * USE_SP #010H T6 AB:001 DB:-- 2 2 Z >s0 bus #012H T8 AB:001 DB:-- 2 4 Y rh > alu >s0 bus L ADC * USE_SP #013H T9 AB:001 DB:-- 3 1 WZ W W > >s0 bus bus * * * * 1 * #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y Y L >l d >s0 bus #009H T5 AB:001 DB:-- 2 1 rl >l d alu >s0 bus L SBC * USE_SP #010H T6 AB:001 DB:-- 2 2 Z >s0 bus #012H T8 AB:001 DB:-- 2 4 Y rh > alu >s0 bus L SBCh * USE_SP #013H T9 AB:001 DB:-- 3 1 WZ W W > >s0 bus bus * * W2 * * * "Only for DAA, write HF2 flag" #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y d alu >s0 bus L ADC * * * 1 W.daa "DAA,?NF_SUB" #end #if pla[81] : cpl 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch A < alu < res H OR * 1 NEG_OP2 #002H T2 AB:000 DB:2F M1 MREQ RD 1 2 fMFetch F < < ?NF_HF #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y alu 0 L OR * * 1 NEG_OP2 #end #if pla[82] : neg 4 #005H T1 AB:001 DB:-- M1 1 1 fMFetch A < alu < res H SUB * * V 1 * #006H T2 AB:001 DB:44 M1 MREQ RD 1 2 fMFetch F < < ?NF_HF_CF #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y Y alu 0 L SUB * * * 1 * #end #if pla[89] : ccf 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch alu < res H OR * 0 #002H T2 AB:000 DB:3F M1 MREQ RD 1 2 fMFetch F < < ^ ?~CF_HF #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y alu L OR * * 0 #end #if pla[92] : scf 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch alu < res H OR * 0 #002H T2 AB:000 DB:37 M1 MREQ RD 1 2 fMFetch F < < 1 #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y alu L OR * * 0 #end #if pla[95] : halt 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:76 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch HALT #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y #end #if pla[97] : di/ei 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:F3 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch DI_EI #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y NO_INTS "At last M/T, inhibit interrupts" #end #if pla[96] : im n 4 #005H T1 AB:001 DB:-- M1 1 1 fMFetch #006H T2 AB:001 DB:46 M1 MREQ RD 1 2 fMFetch #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch < R IM M1/T3 reads in mode # from opcode[4:3] #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y Y #end // Rotate and Shift Group #if pla[25] : rlca/rla/rrca/rra 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch A < alu < res H OR * * 0 * #002H T2 AB:000 DB:07 M1 MREQ RD 1 2 fMFetch F < < R #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y A > alu >s1 bus bus L OR * * 0 W.sh #end #if ~use_ixiy & pla[70] & ~pla[55] : rlc r 4 #005H T1 AB:001 DB:-- M1 1 1 fMFetch r8' < u alu < res H OR * * * P 0 * #006H T2 AB:001 DB:00 M1 MREQ RD 1 2 fMFetch F < < R #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y Y r8 >r8 - alu >s1 bus bus L OR * * * 0 W.sh #017H T13 AB:000 DB:-- 4 1 fMRead WZ W R OpcodeToIR ...continues here from the (ix+d) addressing mode #018H T14 AB:000 DB:DD MREQ RD 4 2 fMRead #019H T15 AB:000 DB:DD MREQ RD 4 3 fMRead mw d < R alu >s1 bus bus L OR 0 W.sh #029H T17 AB:002 DB:-- 5 1 fMWrite R u > W alu < res H OR * * * P 0 * #030H T18 AB:002 DB:BB MREQ 5 2 fMWrite #031H T19 AB:002 DB:BB MREQ WR 5 3 fMWrite Y #end #if ~use_ixiy & pla[70] & pla[55] : rlc (hl) "4,4,3" #005H T1 AB:001 DB:-- M1 1 1 fMFetch #006H T2 AB:001 DB:00 M1 MREQ RD 1 2 fMFetch F < < R #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y mr #009H T5 AB:006 DB:-- 2 1 fMRead HL W #010H T6 AB:006 DB:05 MREQ RD 2 2 fMRead #011H T7 AB:006 DB:05 MREQ RD 2 3 fMRead #012H T8 AB:006 DB:-- 2 4 mw d < R alu >s1 bus bus L OR 0 W.sh #013H T9 AB:006 DB:-- 3 1 fMWrite R u > W alu < res H OR * * * P 0 * #014H T10 AB:006 DB:0A MREQ 3 2 fMWrite #015H T11 AB:006 DB:0A MREQ WR 3 3 fMWrite Y #017H T13 AB:000 DB:-- 4 1 fMRead WZ W R OpcodeToIR ...continues here from the (ix+d) addressing mode #018H T14 AB:000 DB:DD MREQ RD 4 2 fMRead #019H T15 AB:000 DB:DD MREQ RD 4 3 fMRead mw d < R alu >s1 bus bus L OR 0 W.sh #029H T17 AB:002 DB:-- 5 1 fMWrite R u > W alu < res H OR * * * P 0 * #030H T18 AB:002 DB:BB MREQ 5 2 fMWrite #031H T19 AB:002 DB:BB MREQ WR 5 3 fMWrite Y #end #if pla[15] & op3 : rld "4,3,4,3" #005H T1 AB:001 DB:-- M1 1 1 fMFetch A < alu < res H OR * * P 0 #006H T2 AB:001 DB:67 M1 MREQ RD 1 2 fMFetch F < < #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y mr #009H T5 AB:000 DB:-- 2 1 fMRead HL W #010H T6 AB:000 DB:ED MREQ RD 2 2 fMRead WZ + R #011H T7 AB:000 DB:ED MREQ RD 2 3 fMRead Y #012H T8 AB:000 DB:-- 3 1 d < R >s0 lq L #013H T9 AB:000 DB:-- 3 2 #014H T10 AB:000 DB:-- 3 3 #015H T11 AB:000 DB:-- 3 4 mw d < R >s0 low H #016H T12 AB:000 DB:-- 4 1 fMWrite R u > W < op2 #017H T13 AB:000 DB:EE MREQ 4 2 fMWrite op1 bus #018H T14 AB:000 DB:EE MREQ WR 4 3 fMWrite Y alu L OR * * * 0 #end #if pla[15] & ~op3 : rrd "4,3,4,3" #005H T1 AB:001 DB:-- M1 1 1 fMFetch A < alu < res H OR * * P 0 #006H T2 AB:001 DB:67 M1 MREQ RD 1 2 fMFetch F < < #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y mr #009H T5 AB:000 DB:-- 2 1 fMRead HL W #010H T6 AB:000 DB:ED MREQ RD 2 2 fMRead WZ + R #011H T7 AB:000 DB:ED MREQ RD 2 3 fMRead Y #012H T8 AB:000 DB:-- 3 1 d < R >s0 lq low L #013H T9 AB:000 DB:-- 3 2 u > W < op2 #014H T10 AB:000 DB:-- 3 3 A > >s0 lq L #015H T11 AB:000 DB:-- 3 4 mw d < R >s0 low H #016H T12 AB:000 DB:-- 4 1 fMWrite R u > W < op2 #017H T13 AB:000 DB:EE MREQ 4 2 fMWrite op1 bus #018H T14 AB:000 DB:EE MREQ WR 4 3 fMWrite Y alu L OR * * * 0 #end // Bit Manipulation Group "#if ~use_ixiy & pla[72] & ~pla[55] : bit b,r" 4 #005H T1 AB:001 DB:-- M1 1 1 fMFetch alu < res H AND * * P 0 #006H T2 AB:001 DB:40 M1 MREQ RD 1 2 fMFetch F < < #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > R > >bs bus bus * * * * * * Override M1/T3 load with a bit select #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y Y r8 >r8 - alu >s0 bus L AND * * * 0 #017H T13 AB:000 DB:-- 4 1 fMRead R R >bs bus bus OpcodeToIR ...continues here from the (ix+d) addressing mode #018H T14 AB:000 DB:DD MREQ RD 4 2 fMRead #019H T15 AB:000 DB:DD MREQ RD 4 3 fMRead #020H T16 AB:000 DB:-- 4 4 Y d < R alu >s0 bus L AND * * 0 #end "#if ~use_ixiy & pla[72] & pla[55] : bit b,(hl)" "4,4" #005H T1 AB:001 DB:-- M1 1 1 fMFetch alu < res H AND * * P 0 #006H T2 AB:001 DB:06 M1 MREQ RD 1 2 fMFetch F < < #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > R > >bs bus bus * * * * * * Override M1/T3 load with a bit select #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y mr #009H T5 AB:006 DB:-- 2 1 fMRead HL W #010H T6 AB:006 DB:05 MREQ RD 2 2 fMRead #011H T7 AB:006 DB:05 MREQ RD 2 3 fMRead WZ > > * "BIT n,(HL) saves WZ in X,Y (""MEMPTR"")" #012H T8 AB:006 DB:-- 2 4 Y d < R alu >s0 bus L AND * * 0 #017H T13 AB:000 DB:-- 4 1 fMRead WZ W R >bs bus bus OpcodeToIR ...continues here from the (ix+d) addressing mode #018H T14 AB:000 DB:DD MREQ RD 4 2 fMRead #019H T15 AB:000 DB:DD MREQ RD 4 3 fMRead #020H T16 AB:000 DB:-- 4 4 Y d < R alu >s0 bus L AND * * 0 #end "#if ~use_ixiy & pla[74] & ~pla[55] : set b,r" 4 #005H T1 AB:001 DB:-- M1 1 1 fMFetch r8' < u < res H OR #006H T2 AB:001 DB:40 M1 MREQ RD 1 2 fMFetch #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > R > >bs bus bus * * * * * * Override M1/T3 load with a bit select #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y Y r8 >r8 - >s0 bus L OR #017H T13 AB:000 DB:-- 4 1 fMRead WZ W R >bs bus bus OpcodeToIR ...continues here from the (ix+d) addressing mode #018H T14 AB:000 DB:DD MREQ RD 4 2 fMRead #019H T15 AB:000 DB:DD MREQ RD 4 3 fMRead mw d < R alu >s0 bus L OR #029H T17 AB:002 DB:-- 5 1 fMWrite R u > W < res H OR #030H T18 AB:002 DB:BB MREQ 5 2 fMWrite #031H T19 AB:002 DB:BB MREQ WR 5 3 fMWrite Y #end "#if ~use_ixiy & pla[74] & pla[55] : set b,(hl)" "4,4,3" #005H T1 AB:001 DB:-- M1 1 1 fMFetch #006H T2 AB:001 DB:06 M1 MREQ RD 1 2 fMFetch #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > R > >bs bus bus * * * * * * Override M1/T3 load with a bit select #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y mr #009H T5 AB:006 DB:-- 2 1 fMRead HL W #010H T6 AB:006 DB:05 MREQ RD 2 2 fMRead #011H T7 AB:006 DB:05 MREQ RD 2 3 fMRead d < R >s0 bus L OR #012H T8 AB:006 DB:-- 2 4 mw u > W < res H OR #013H T9 AB:006 DB:-- 3 1 fMWrite R #014H T10 AB:006 DB:0A MREQ 3 2 fMWrite #015H T11 AB:006 DB:0A MREQ WR 3 3 fMWrite Y #017H T13 AB:000 DB:-- 4 1 fMRead WZ W R >bs bus bus OpcodeToIR ...continues here from the (ix+d) addressing mode #018H T14 AB:000 DB:DD MREQ RD 4 2 fMRead #019H T15 AB:000 DB:DD MREQ RD 4 3 fMRead mw d < R alu >s0 bus L OR #029H T17 AB:002 DB:-- 5 1 fMWrite R u > W < res H OR #030H T18 AB:002 DB:BB MREQ 5 2 fMWrite #031H T19 AB:002 DB:BB MREQ WR 5 3 fMWrite Y #end "#if ~use_ixiy & pla[73] & ~pla[55] : res b,r" 4 #005H T1 AB:001 DB:-- M1 1 1 fMFetch r8' < u < res H NAND #006H T2 AB:001 DB:40 M1 MREQ RD 1 2 fMFetch #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > R > >bs bus bus * * * * * * Override M1/T3 load with a bit select #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y Y r8 >r8 - >s0 bus L NAND #017H T13 AB:000 DB:-- 4 1 fMRead WZ W R >bs bus bus OpcodeToIR ...continues here from the (ix+d) addressing mode #018H T14 AB:000 DB:DD MREQ RD 4 2 fMRead #019H T15 AB:000 DB:DD MREQ RD 4 3 fMRead mw d < R alu >s0 bus L NAND #029H T17 AB:002 DB:-- 5 1 fMWrite R u > W < res H NAND #030H T18 AB:002 DB:BB MREQ 5 2 fMWrite #031H T19 AB:002 DB:BB MREQ WR 5 3 fMWrite Y #end "#if ~use_ixiy & pla[73] & pla[55] : res b,(hl)" "4,4,3" #005H T1 AB:001 DB:-- M1 1 1 fMFetch #006H T2 AB:001 DB:06 M1 MREQ RD 1 2 fMFetch #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > R > >bs bus bus * * * * * * Override M1/T3 load with a bit select #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y mr #009H T5 AB:006 DB:-- 2 1 fMRead HL W #010H T6 AB:006 DB:05 MREQ RD 2 2 fMRead #011H T7 AB:006 DB:05 MREQ RD 2 3 fMRead d < R >s0 bus L NAND #012H T8 AB:006 DB:-- 2 4 mw u > W < res H NAND #013H T9 AB:006 DB:-- 3 1 fMWrite R #014H T10 AB:006 DB:0A MREQ 3 2 fMWrite #015H T11 AB:006 DB:0A MREQ WR 3 3 fMWrite Y #017H T13 AB:000 DB:-- 4 1 fMRead WZ W R >bs bus bus OpcodeToIR ...continues here from the (ix+d) addressing mode #018H T14 AB:000 DB:DD MREQ RD 4 2 fMRead #019H T15 AB:000 DB:DD MREQ RD 4 3 fMRead mw d < R alu >s0 bus L NAND #029H T17 AB:002 DB:-- 5 1 fMWrite R u > W < res H NAND #030H T18 AB:002 DB:BB MREQ 5 2 fMWrite #031H T19 AB:002 DB:BB MREQ WR 5 3 fMWrite Y #end // Input and Output Groups "#if pla[37] & ~pla[28] : in a,(n)" "4,3,4" #001H T1 AB:000 DB:-- M1 1 1 fMFetch A < d < R #002H T2 AB:000 DB:DB M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead PC W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead ior #008H T8 AB:001 DB:-- 3 1 fIORead A W ? < < R #009H T9 AB:001 DB:-- RD IORQ 3 2 fIORead #010H T10 AB:001 DB:-- RD IORQ 3 3 fIORead #011H T11 AB:001 DB:-- RD IORQ 3 4 fIORead Y #end "#if pla[27] & ~pla[34] : in r,(c)" "4,4" #005H T1 AB:001 DB:-- M1 1 1 fMFetch r8 < d < R alu res H OR * * P 0 #006H T2 AB:001 DB:40 M1 MREQ RD 1 2 fMFetch F < < #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y ior #009H T5 AB:0FF DB:-- 2 1 fIORead BC W #010H T6 AB:0FF DB:-- RD IORQ 2 2 fIORead #011H T7 AB:0FF DB:-- RD IORQ 2 3 fIORead #012H T8 AB:0FF DB:-- RD IORQ 2 4 fIORead Y d < R alu >s0 bus bus L OR * * * 0 #end "#if pla[37] & pla[28] : out (n),a" "4,3,4" #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:D3 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead PC W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead iow A W h u > W #009H T9 AB:001 DB:03 WR IORQ 3 2 fIOWrite #010H T10 AB:001 DB:03 WR IORQ 3 3 fIOWrite #011H T11 AB:001 DB:03 WR IORQ 3 4 fIOWrite Y #end "#if pla[27] & pla[34] : out (c),r" "4,4" #005H T1 AB:001 DB:-- M1 1 1 fMFetch #006H T2 AB:001 DB:41 M1 MREQ RD 1 2 fMFetch #007H T3 AB:001 DB:-- RFSH 1 3 fMFetch #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y iow r8' >r8' - > W #009H T5 AB:0FF DB:-- 2 1 fIOWrite BC W #010H T6 AB:0FF DB:C3 WR IORQ 2 2 fIOWrite #011H T7 AB:0FF DB:C3 WR IORQ 2 3 fIOWrite #012H T8 AB:0FF DB:C3 WR IORQ 2 4 fIOWrite Y #end #if pla[91] & pla[21] : ini/inir/ind/indr "5,4,3,(5)" #035H T1 AB:00A DB:-- M1 1 1 fMFetch < res H XOR P #036H T2 AB:00A DB:B2 M1 MREQ RD 1 2 fMFetch F < < #037H T3 AB:004 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #038H T4 AB:004 DB:-- RFSH MREQ 1 4 fMFetch Y #039H T5 AB:004 DB:-- 1 5 ior #040H T6 AB:000 DB:-- 2 1 fIORead BC W #041H T7 AB:000 DB:-- RD IORQ 2 2 fIORead B > alu >s0 0 bus L ADD * NEG_OP2 #042H T8 AB:000 DB:-- RD IORQ 2 3 fIORead B < alu < res H ADD * * * NEG_OP2 #043H T9 AB:000 DB:-- RD IORQ 2 4 fIORead mw d < R alu >s0 bus S NEG_OP2 #044H T10 AB:000 DB:-- 3 1 fMWrite HL W #045H T11 AB:000 DB:B1 MREQ 3 2 fMWrite HL op3 R #046H T12 AB:000 DB:B1 MREQ WR 3 3 fMWrite Y BZ #047H T13 AB:000 DB:-- 4 1 PC W #048H T14 AB:000 DB:-- 4 2 PC - R #049H T15 AB:000 DB:-- 4 3 PC W #050H T16 AB:000 DB:-- 4 4 PC - R #051H T17 AB:000 DB:-- 4 5 Y #end #if pla[91] & pla[20] : outi/outir/outd/outdr "5,4,3,(5)" #035H T1 AB:00A DB:-- M1 1 1 fMFetch alu < res H XOR P #036H T2 AB:00A DB:B3 M1 MREQ RD 1 2 fMFetch F < < #037H T3 AB:004 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #038H T4 AB:004 DB:-- RFSH MREQ 1 4 fMFetch Y B > alu >s0 0 bus L ADD * NEG_OP2 #039H T5 AB:004 DB:-- 1 5 mr B < alu < res H ADD * * NEG_OP2 #040H T6 AB:000 DB:-- 2 1 fMRead HL W #041H T7 AB:000 DB:21 MREQ RD 2 2 fMRead HL op3 R #042H T8 AB:000 DB:21 MREQ RD 2 3 fMRead iow L >l d >s0 bus #043H T9 AB:000 DB:-- 3 1 fIOWrite BC W #044H T10 AB:000 DB:21 WR IORQ 3 2 fIOWrite d < R alu >s0 bus L ADD * S #045H T11 AB:000 DB:21 WR IORQ 3 3 fIOWrite alu < res H ADD * #046H T12 AB:000 DB:21 WR IORQ 3 4 fIOWrite Y BZ #047H T13 AB:000 DB:-- 4 1 PC W #048H T14 AB:000 DB:-- 4 2 PC - R #049H T15 AB:000 DB:-- 4 3 PC W #050H T16 AB:000 DB:-- 4 4 PC - R #051H T17 AB:000 DB:-- 4 5 Y #end // Jump Group #if pla[29] : jp nn "4,3,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:C3 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead PC W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead mr Z > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead PC W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead mr Z > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead PC W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead Y #008H T8 AB:001 DB:-- 3 1 d < R alu >s0 bus * "Reads ""e"" from the data latch" #009H T9 AB:001 DB:-- 3 2 PCl >l d alu >s0 bus L ADD * #010H T10 AB:001 DB:-- 3 3 Z alu >s0 0 bus L ADC * ?SF_NEG #012H T12 AB:001 DB:-- 3 5 Y WZ W W > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr CondShort M1/T4 evaluates a condition: force short #005H T5 AB:001 DB:-- 2 1 fMRead PC W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead Y SS #008H T8 AB:001 DB:-- 3 1 d < R alu >s0 bus * "Reads ""e"" from the data latch" #009H T9 AB:001 DB:-- 3 2 PCl >l d alu >s0 bus L ADD * #010H T10 AB:001 DB:-- 3 3 Z alu >s0 0 bus L ADC * ?SF_NEG #012H T12 AB:001 DB:-- 3 5 Y WZ W W > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y B >h alu >s0 0 bus L ADD * NEG_OP2 B=B-1 #005H T5 AB:000 DB:-- 1 5 mr B < alu < res H ADD * NEG_OP2 #006H T6 AB:001 DB:-- 2 1 fMRead PC W #007H T7 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #008H T8 AB:001 DB:01 MREQ RD 2 3 fMRead Y ZF #009H T9 AB:001 DB:-- 3 1 d < R alu >s0 bus * "Reads ""e"" from the data latch" #010H T10 AB:001 DB:-- 3 2 PCl >l d alu >s0 bus L ADD * #011H T11 AB:001 DB:-- 3 3 Z h alu >s0 0 bus L ADC * ?SF_NEG #013H T13 AB:001 DB:-- 3 5 Y WZ W W h u > W #013H T13 AB:000 DB:00 MREQ 4 2 fMWrite SP - R #014H T14 AB:000 DB:00 MREQ WR 4 3 fMWrite mw SP - W #015H T15 AB:0FF DB:-- 5 1 fMWrite - P PCl >l > W #016H T16 AB:0FF DB:03 MREQ 5 2 fMWrite SP - R #017H T17 AB:0FF DB:03 MREQ WR 5 3 fMWrite Y WZ W NOT_PC! #end "#if pla[42] : call cc,nn" "4,3,3/(4,3,4,3,3)" #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:C4 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch AF > > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:001 DB:-- 2 1 fMRead PC W #006H T6 AB:001 DB:01 MREQ RD 2 2 fMRead PC + R #007H T7 AB:001 DB:01 MREQ RD 2 3 fMRead mr Z h u > W #013H T13 AB:000 DB:00 MREQ 4 2 fMWrite SP - R #014H T14 AB:000 DB:00 MREQ WR 4 3 fMWrite mw SP - W #015H T15 AB:0FF DB:-- 5 1 fMWrite - P PCl >l > W #016H T16 AB:0FF DB:03 MREQ 5 2 fMWrite SP - R #017H T17 AB:0FF DB:03 MREQ WR 5 3 fMWrite Y WZ W NOT_PC! #end #if pla[35] : ret "4,3,3" #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:C9 M1 MREQ RD 1 2 fMFetch #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y mr #005H T5 AB:0FF DB:-- 2 1 fMRead SP W #006H T6 AB:0FF DB:01 MREQ RD 2 2 fMRead SP + R #007H T7 AB:0FF DB:01 MREQ RD 2 3 fMRead mr Z > >s0 bus bus * * * * * * #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y #005H T5 AB:000 DB:-- 1 5 mr CC #006H T6 AB:001 DB:-- 2 1 fMRead SP W #007H T7 AB:001 DB:01 MREQ RD 2 2 fMRead SP + R #008H T8 AB:001 DB:01 MREQ RD 2 3 fMRead mr Z s0 bus Store im2 vector into the ALU op1 #006H T6 AB:000 DB:-- 2 1 fMWrite - P PCh >h u > W #007H T7 AB:000 DB:00 MREQ 2 2 fMWrite SP - R #008H T8 AB:000 DB:00 MREQ WR 2 3 fMWrite mw SP - W #009H T9 AB:0FF DB:-- 3 1 fMWrite - P PCl >l > W #010H T10 AB:0FF DB:01 MREQ 3 2 fMWrite SP - R #011H T11 AB:0FF DB:01 MREQ WR 3 3 fMWrite INT INT WZ W NOT_PC! Value on the bus into ALU OP // INTR IM2 continues here... Extension for IM2 interrupt mode #012H T12 AB:001 DB:-- 4 1 fMRead I* W + R >l d >s0 bus #014H T14 AB:001 DB:01 MREQ RD 4 3 fMRead mr Z > >s0 bus bus * * * * * * CB #008H T4 AB:001 DB:-- RFSH MREQ 1 4 fMFetch Y mr #009H T5 AB:002 DB:-- 2 1 fMRead PC W #010H T6 AB:002 DB:01 MREQ RD 2 2 fMRead PC + R #011H T7 AB:002 DB:01 MREQ RD 2 3 fMRead mr #012H T8 AB:003 DB:-- 3 1 fMRead PC W WZ=IX+d #013H T9 AB:003 DB:00 MREQ RD 3 2 fMRead PC + R WZ=IX+d #014H T10 AB:003 DB:00 MREQ RD 3 3 fMRead WZ=IX+d Loads the opcode byte in parallel #015H T11 AB:003 DB:-- 3 4 WZ=IX+d #016H T12 AB:003 DB:-- 3 5 mr WZ=IX+d #017H T13 AB:000 DB:-- 4 1 R >bs bus bus OpcodeToIR Loads instruction register; starts the execute cycle // Loading a new instruction immediately changes PLA wires and continues into the new effective instructions' M4/T1 cycle #end // Special Purposes PLA Entries #if pla[3] : IX/IY 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:DD M1 MREQ RD 1 2 fMFetch IX_IY #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y NO_INTS "At last M/T, inhibit interrupts" #end #if pla[44] : CB prefix 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:CB M1 MREQ RD 1 2 fMFetch CB #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y NO_INTS "At last M/T, inhibit interrupts" "#end Only set CB ff and clear ED, XX ff" #if pla[51] : ED prefix 4 #001H T1 AB:000 DB:-- M1 1 1 fMFetch #002H T2 AB:000 DB:ED M1 MREQ RD 1 2 fMFetch ED #003H T3 AB:000 DB:-- RFSH 1 3 fMFetch #004H T4 AB:000 DB:-- RFSH MREQ 1 4 fMFetch Y Y NO_INTS "At last M/T, inhibit interrupts" "#end Only set ED ff and clear CB, XX ff" #if pla[76] : ALU CP #always CP 1 #001H T1 AB:000 DB:-- M1 1 1 fMFetch V Update P/V once on a high nibble phase #end Does not store the result! #if pla[78] : ALU SUB #always SUB 1 #001H T1 AB:000 DB:-- M1 1 1 fMFetch A < * V Update P/V and store result to A #end #if pla[79] : ALU SBC #always SBC 1 #001H T1 AB:000 DB:-- M1 1 1 fMFetch A < * V Update P/V and store result to A #end #if pla[80] : ALU ADC #always ADC 0 #001H T1 AB:000 DB:-- M1 1 1 fMFetch A < * V Update P/V and store result to A #end #if pla[84] : ALU ADD #always ADD 0 #001H T1 AB:000 DB:-- M1 1 1 fMFetch A < * V Update P/V and store result to A #end #if pla[85] : ALU AND #always AND 0 #001H T1 AB:000 DB:-- M1 1 1 fMFetch A < * P Update P/V and store result to A #002H T2 AB:000 DB:A0 M1 MREQ RD 1 2 fMFetch 0 AND clears CF #end #if pla[86] : ALU OR #always OR 0 #001H T1 AB:000 DB:-- M1 1 1 fMFetch A < * P Update P/V and store result to A #002H T2 AB:000 DB:B0 M1 MREQ RD 1 2 fMFetch 0 OR clears CF #end #if pla[88] : ALU XOR #always XOR 0 #001H T1 AB:000 DB:-- M1 1 1 fMFetch A < * P Update P/V and store result to A #002H T2 AB:000 DB:A8 M1 MREQ RD 1 2 fMFetch 0 XOR clears CF #end // State machine to compute (IX+d) #if ixy_d : Compute WZ=IX+d #001H T1 any M-cycle ? 1 d < R alu >s0 bus * "Reads ""d"" from the data latch" #002H T2 ? 2 L >l d alu >s0 bus L ADD * #003H T3 ? 3 Z alu >s0 0 bus L ADC * R ?SF_NEG Stores result into WZ #005H T5 ? 5 WZ W W