2012-12-06 63 views
1

我为英特尔8080编写了一个模拟器,并且想检查我的实施指令是否正确。是否有测试套件或方法来测试每条指令是否正确?英特尔8080模拟器测试仪

我的模拟器是用C写

+0

您应该考虑评估我的新答案,因为您之前接受的HBP答案已经因链接腐烂而被删除。 – JAL

回答

2

不幸的是,骚动链接都是早就死了。所以我会尽量发布一个更全面的答案,不依赖于链接。

您正在寻找的是一套8080/8085 CPU诊断练习。我找到了三个组成了相当全面的测试套件。

  • 八千零八十五分之八千零八十○CPU诊断,1.0版,由微观世界Associates公司
  • 诊断II,版本1.2,CPU测试通过超柔Associates公司
  • 八千零八十五分之八千零八十○CPU训练器由Ian缪和Frank Cringles

下面是一个缩影CPU Diag(诊断)测试套件的ASM:

;*********************************************************************** 
; MICROCOSM ASSOCIATES 8080/8085 CPU DIAGNOSTIC VERSION 1.0 (C) 1980 
;*********************************************************************** 
; Load into virtual altair with: ALTAIR L=TEST.HEX 
; Then press F2 to view screen, and 'G' to execute the test. 
; 
;DONATED TO THE "SIG/M" CP/M USER'S GROUP BY: 
;KELLY SMITH, MICROCOSM ASSOCIATES 
;3055 WACO AVENUE 
;SIMI VALLEY, CALIFORNIA, 93065 
;(805) 527-9321 (MODEM, CP/M-NET (TM)) 
;(805) 527-0518 (VERBAL) 
; 
     CPU 8080  
     ORG 00100H 

     LXI  H, LOLZ 
     CALL MSG 
     JMP  CPU ;JUMP TO 8080 CPU DIAGNOSTIC 
; 
LOLZ: DB "MICROCOSM ASSOCIATES 8080/8085 CPU DIAGNOSTIC VERSION 1.0 (C) 1980", 0dh, 0ah, 24h 
; 
BDOS EQU  00005H ;BDOS ENTRY TO CP/M 
WBOOT: JMP  0 
; 
;MESSAGE OUTPUT ROUTINE 
; 
MSG: MOV A,M ; Get data 
     CPI '$' ; End? 
     RZ 
     CALL PCHAR ; Output 
     INX H ; Next 
     JMP MSG ; Do all 
; 
; 
;CHARACTER OUTPUT ROUTINE 
; 
PCHAR: PUSH PSW 
     PUSH D 
     PUSH H 
     MOV E,A 
     MVI C,2 
     CALL BDOS 
     POP  H 
     POP D 
     POP PSW 
     RET 
; 
; 
; 
BYTEO: PUSH PSW 
     CALL BYTO1 
     MOV E,A 
     CALL PCHAR 
     POP PSW 
     CALL BYTO2 
     MOV E,A 
     JMP PCHAR 
BYTO1: RRC 
     RRC 
     RRC 
     RRC 
BYTO2: ANI 0FH 
     CPI 0AH 
     JM BYTO3 
     ADI 7 
BYTO3: ADI 30H 
     RET 
; 
; 
; 
;************************************************************ 
;   MESSAGE TABLE FOR OPERATIONAL CPU TEST 
;************************************************************ 
; 
OKCPU: DB 0DH,0AH 
     DB "CPU IS OPERATIONAL$" 
; 
NGCPU: DB 0DH,0AH 
     DB " CPU HAS FAILED! ERROR EXIT=$" 
; 
; 
; 
;************************************************************ 
;    8080/8085 CPU TEST/DIAGNOSTIC 
;************************************************************ 
; 
;NOTE: (1) PROGRAM ASSUMES "CALL",AND "LXI SP" INSTRUCTIONS WORK! 
; 
;  (2) INSTRUCTIONS NOT TESTED ARE "HLT","DI","EI", 
;   AND "RST 0" THRU "RST 7" 
; 
; 
; 
;TEST JUMP INSTRUCTIONS AND FLAGS 
; 
CPU: LXI SP,STACK ;SET THE STACK POINTER 
     ANI 0 ;INITIALIZE A REG. AND CLEAR ALL FLAGS 
     JZ J010 ;TEST "JZ" 
     CALL CPUER 
J010: JNC J020 ;TEST "JNC" 
     CALL CPUER 
J020: JPE J030 ;TEST "JPE" 
     CALL CPUER 
J030: JP J040 ;TEST "JP" 
     CALL CPUER 
J040: JNZ J050 ;TEST "JNZ" 
     JC J050 ;TEST "JC" 
     JPO J050 ;TEST "JPO" 
     JM J050 ;TEST "JM" 
     JMP J060 ;TEST "JMP" (IT'S A LITTLE LATE,BUT WHAT THE HELL! 
J050: CALL CPUER 
J060: ADI 6 ;A=6,C=0,P=1,S=0,Z=0 
     JNZ J070 ;TEST "JNZ" 
     CALL CPUER 
J070: JC J080 ;TEST "JC" 
     JPO J080 ;TEST "JPO" 
     JP J090 ;TEST "JP" 
J080: CALL CPUER 
J090: ADI 070H ;A=76H,C=0,P=0,S=0,Z=0 
     JPO J100 ;TEST "JPO" 
     CALL CPUER 
J100: JM J110 ;TEST "JM" 
     JZ J110 ;TEST "JZ" 
     JNC J120 ;TEST "JNC" 
J110: CALL CPUER 
J120: ADI 081H ;A=F7H,C=0,P=0,S=1,Z=0 
     JM J130 ;TEST "JM" 
     CALL CPUER 
J130: JZ J140 ;TEST "JZ" 
     JC J140 ;TEST "JC" 
     JPO J150 ;TEST "JPO" 
J140: CALL CPUER 
J150: ADI 0FEH ;A=F5H,C=1,P=1,S=1,Z=0 
     JC J160 ;TEST "JC" 
     CALL CPUER 
J160: JZ J170 ;TEST "JZ" 
     JPO J170 ;TEST "JPO" 
     JM AIMM ;TEST "JM" 
J170: CALL CPUER 
; 
; 
; 
;TEST ACCUMULATOR IMMEDIATE INSTRUCTIONS 
; 
AIMM: CPI 0 ;A=F5H,C=0,Z=0 
     JC CPIE ;TEST "CPI" FOR RE-SET CARRY 
     JZ CPIE ;TEST "CPI" FOR RE-SET ZERO 
     CPI 0F5H ;A=F5H,C=0,Z=1 
     JC CPIE ;TEST "CPI" FOR RE-SET CARRY ("ADI") 
     JNZ CPIE ;TEST "CPI" FOR RE-SET ZERO 
     CPI 0FFH ;A=F5H,C=1,Z=0 
     JZ CPIE ;TEST "CPI" FOR RE-SET ZERO 
     JC ACII ;TEST "CPI" FOR SET CARRY 
CPIE: CALL CPUER 
ACII: ACI 00AH ;A=F5H+0AH+CARRY(1)=0,C=1 
     ACI 00AH ;A=0+0AH+CARRY(0)=0BH,C=0 
     CPI 00BH 
     JZ SUII ;TEST "ACI" 
     CALL CPUER 
SUII: SUI 00CH ;A=FFH,C=0 
     SUI 00FH ;A=F0H,C=1 
     CPI 0F0H 
     JZ SBII ;TEST "SUI" 
     CALL CPUER 
SBII: SBI 0F1H ;A=F0H-0F1H-CARRY(0)=FFH,C=1 
     SBI 00EH ;A=FFH-OEH-CARRY(1)=F0H,C=0 
     CPI 0F0H 
     JZ ANII ;TEST "SBI" 
     CALL CPUER 
ANII: ANI 055H ;A=F0H<AND>55H=50H,C=0,P=1,S=0,Z=0 
     CPI 050H 
     JZ ORII ;TEST "ANI" 
     CALL CPUER 
ORII: ORI 03AH ;A=50H<OR>3AH=7AH,C=0,P=0,S=0,Z=0 
     CPI 07AH 
     JZ XRII ;TEST "ORI" 
     CALL CPUER 
XRII: XRI 00FH ;A=7AH<XOR>0FH=75H,C=0,P=0,S=0,Z=0 
     CPI 075H 
     JZ C010 ;TEST "XRI" 
     CALL CPUER 
; 
; 
; 
;TEST CALLS AND RETURNS 
; 
C010: ANI 000H ;A=0,C=0,P=1,S=0,Z=1 
     CC CPUER ;TEST "CC" 
     CPO CPUER ;TEST "CPO" 
     CM CPUER ;TEST "CM" 
     CNZ CPUER ;TEST "CNZ" 
     CPI 000H 
     JZ C020 ;A=0,C=0,P=0,S=0,Z=1 
     CALL CPUER 
C020: SUI 077H ;A=89H,C=1,P=0,S=1,Z=0 
     CNC CPUER ;TEST "CNC" 
     CPE CPUER ;TEST "CPE" 
     CP CPUER ;TEST "CP" 
     CZ CPUER ;TEST "CZ" 
     CPI 089H 
     JZ C030 ;TEST FOR "CALLS" TAKING BRANCH 
     CALL CPUER 
C030: ANI 0FFH ;SET FLAGS BACK! 
     CPO CPOI ;TEST "CPO" 
     CPI 0D9H 
     JZ MOVI ;TEST "CALL" SEQUENCE SUCCESS 
     CALL CPUER 
CPOI: RPE  ;TEST "RPE" 
     ADI 010H ;A=99H,C=0,P=0,S=1,Z=0 
     CPE CPEI ;TEST "CPE" 
     ADI 002H ;A=D9H,C=0,P=0,S=1,Z=0 
     RPO  ;TEST "RPO" 
     CALL CPUER 
CPEI: RPO  ;TEST "RPO" 
     ADI 020H ;A=B9H,C=0,P=0,S=1,Z=0 
     CM CMI ;TEST "CM" 
     ADI 004H ;A=D7H,C=0,P=1,S=1,Z=0 
     RPE  ;TEST "RPE" 
     CALL CPUER 
CMI: RP  ;TEST "RP" 
     ADI 080H ;A=39H,C=1,P=1,S=0,Z=0 
     CP TCPI ;TEST "CP" 
     ADI 080H ;A=D3H,C=0,P=0,S=1,Z=0 
     RM  ;TEST "RM" 
     CALL CPUER 
TCPI: RM  ;TEST "RM" 
     ADI 040H ;A=79H,C=0,P=0,S=0,Z=0 
     CNC CNCI ;TEST "CNC" 
     ADI 040H ;A=53H,C=0,P=1,S=0,Z=0 
     RP  ;TEST "RP" 
     CALL CPUER 
CNCI: RC  ;TEST "RC" 
     ADI 08FH ;A=08H,C=1,P=0,S=0,Z=0 
     CC CCI ;TEST "CC" 
     SUI 002H ;A=13H,C=0,P=0,S=0,Z=0 
     RNC  ;TEST "RNC" 
     CALL CPUER 
CCI: RNC  ;TEST "RNC" 
     ADI 0F7H ;A=FFH,C=0,P=1,S=1,Z=0 
     CNZ CNZI ;TEST "CNZ" 
     ADI 0FEH ;A=15H,C=1,P=0,S=0,Z=0 
     RC  ;TEST "RC" 
     CALL CPUER 
CNZI: RZ  ;TEST "RZ" 
     ADI 001H ;A=00H,C=1,P=1,S=0,Z=1 
     CZ CZI ;TEST "CZ" 
     ADI 0D0H ;A=17H,C=1,P=1,S=0,Z=0 
     RNZ  ;TEST "RNZ" 
     CALL CPUER 
CZI: RNZ  ;TEST "RNZ" 
     ADI 047H ;A=47H,C=0,P=1,S=0,Z=0 
     CPI 047H ;A=47H,C=0,P=1,S=0,Z=1 
     RZ  ;TEST "RZ" 
     CALL CPUER 
; 
; 
; 
;TEST "MOV","INR",AND "DCR" INSTRUCTIONS 
; 
MOVI: MVI A,077H 
     INR A 
     MOV B,A 
     INR B 
     MOV C,B 
     DCR C 
     MOV D,C 
     MOV E,D 
     MOV H,E 
     MOV L,H 
     MOV A,L ;TEST "MOV" A,L,H,E,D,C,B,A 
     DCR A 
     MOV C,A 
     MOV E,C 
     MOV L,E 
     MOV B,L 
     MOV D,B 
     MOV H,D 
     MOV A,H ;TEST "MOV" A,H,D,B,L,E,C,A 
     MOV D,A 
     INR D 
     MOV L,D 
     MOV C,L 
     INR C 
     MOV H,C 
     MOV B,H 
     DCR B 
     MOV E,B 
     MOV A,E ;TEST "MOV" A,E,B,H,C,L,D,A 
     MOV E,A 
     INR E 
     MOV B,E 
     MOV H,B 
     INR H 
     MOV C,H 
     MOV L,C 
     MOV D,L 
     DCR D 
     MOV A,D ;TEST "MOV" A,D,L,C,H,B,E,A 
     MOV H,A 
     DCR H 
     MOV D,H 
     MOV B,D 
     MOV L,B 
     INR L 
     MOV E,L 
     DCR E 
     MOV C,E 
     MOV A,C ;TEST "MOV" A,C,E,L,B,D,H,A 
     MOV L,A 
     DCR L 
     MOV H,L 
     MOV E,H 
     MOV D,E 
     MOV C,D 
     MOV B,C 
     MOV A,B 
     CPI 077H 
     CNZ CPUER ;TEST "MOV" A,B,C,D,E,H,L,A 
; 
; 
; 
;TEST ARITHMETIC AND LOGIC INSTRUCTIONS 
; 
     XRA A 
     MVI B,001H 
     MVI C,003H 
     MVI D,007H 
     MVI E,00FH 
     MVI H,01FH 
     MVI L,03FH 
     ADD B 
     ADD C 
     ADD D 
     ADD E 
     ADD H 
     ADD L 
     ADD A 
     CPI 0F0H 
     CNZ CPUER ;TEST "ADD" B,C,D,E,H,L,A 
     SUB B 
     SUB C 
     SUB D 
     SUB E 
     SUB H 
     SUB L 
     CPI 078H 
     CNZ CPUER ;TEST "SUB" B,C,D,E,H,L 
     SUB A 
     CNZ CPUER ;TEST "SUB" A 
     MVI A,080H 
     ADD A 
     MVI B,001H 
     MVI C,002H 
     MVI D,003H 
     MVI E,004H 
     MVI H,005H 
     MVI L,006H 
     ADC B 
     MVI B,080H 
     ADD B 
     ADD B 
     ADC C 
     ADD B 
     ADD B 
     ADC D 
     ADD B 
     ADD B 
     ADC E 
     ADD B 
     ADD B 
     ADC H 
     ADD B 
     ADD B 
     ADC L 
     ADD B 
     ADD B 
     ADC A 
     CPI 037H 
     CNZ CPUER ;TEST "ADC" B,C,D,E,H,L,A 
     MVI A,080H 
     ADD A 
     MVI B,001H 
     SBB B 
     MVI B,0FFH 
     ADD B 
     SBB C 
     ADD B 
     SBB D 
     ADD B 
     SBB E 
     ADD B 
     SBB H 
     ADD B 
     SBB L 
     CPI 0E0H 
     CNZ CPUER ;TEST "SBB" B,C,D,E,H,L 
     MVI A,080H 
     ADD A 
     SBB A 
     CPI 0FFH 
     CNZ CPUER ;TEST "SBB" A 
     MVI A,0FFH 
     MVI B,0FEH 
     MVI C,0FCH 
     MVI D,0EFH 
     MVI E,07FH 
     MVI H,0F4H 
     MVI L,0BFH 
     ANA A 
     ANA C 
     ANA D 
     ANA E 
     ANA H 
     ANA L 
     ANA A 
     CPI 024H 
     CNZ CPUER ;TEST "ANA" B,C,D,E,H,L,A 
     XRA A 
     MVI B,001H 
     MVI C,002H 
     MVI D,004H 
     MVI E,008H 
     MVI H,010H 
     MVI L,020H 
     ORA B 
     ORA C 
     ORA D 
     ORA E 
     ORA H 
     ORA L 
     ORA A 
     CPI 03FH 
     CNZ CPUER ;TEST "ORA" B,C,D,E,H,L,A 
     MVI A,000H 
     MVI H,08FH 
     MVI L,04FH 
     XRA B 
     XRA C 
     XRA D 
     XRA E 
     XRA H 
     XRA L 
     CPI 0CFH 
     CNZ CPUER ;TEST "XRA" B,C,D,E,H,L 
     XRA A 
     CNZ CPUER ;TEST "XRA" A 
     MVI B,044H 
     MVI C,045H 
     MVI D,046H 
     MVI E,047H 
     MVI H,(TEMP0/0FFH) ;HIGH BYTE OF TEST MEMORY LOCATION 
     MVI L,(TEMP0&0FFH) ;LOW BYTE OF TEST MEMORY LOCATION 
     MOV M,B 
     MVI B,000H 
     MOV B,M 
     MVI A,044H 
     CMP B 
     CNZ CPUER ;TEST "MOV" M,B AND B,M 
     MOV M,D 
     MVI D,000H 
     MOV D,M 
     MVI A,046H 
     CMP D 
     CNZ CPUER ;TEST "MOV" M,D AND D,M 
     MOV M,E 
     MVI E,000H 
     MOV E,M 
     MVI A,047H 
     CMP E 
     CNZ CPUER ;TEST "MOV" M,E AND E,M 
     MOV M,H 
     MVI H,(TEMP0/0FFH) 
     MVI L,(TEMP0&0FFH) 
     MOV H,M 
     MVI A,(TEMP0/0FFH) 
     CMP H 
     CNZ CPUER ;TEST "MOV" M,H AND H,M 
     MOV M,L 
     MVI H,(TEMP0/0FFH) 
     MVI L,(TEMP0&0FFH) 
     MOV L,M 
     MVI A,(TEMP0&0FFH) 
     CMP L 
     CNZ CPUER ;TEST "MOV" M,L AND L,M 
     MVI H,(TEMP0/0FFH) 
     MVI L,(TEMP0&0FFH) 
     MVI A,032H 
     MOV M,A 
     CMP M 
     CNZ CPUER ;TEST "MOV" M,A 
     ADD M 
     CPI 064H 
     CNZ CPUER ;TEST "ADD" M 
     XRA A 
     MOV A,M 
     CPI 032H 
     CNZ CPUER ;TEST "MOV" A,M 
     MVI H,(TEMP0/0FFH) 
     MVI L,(TEMP0&0FFH) 
     MOV A,M 
     SUB M 
     CNZ CPUER ;TEST "SUB" M 
     MVI A,080H 
     ADD A 
     ADC M 
     CPI 033H 
     CNZ CPUER ;TEST "ADC" M 
     MVI A,080H 
     ADD A 
     SBB M 
     CPI 0CDH 
     CNZ CPUER ;TEST "SBB" M 
     ANA M 
     CNZ CPUER ;TEST "ANA" M 
     MVI A,025H 
     ORA M 
     CPI 037H 
     CNZ CPUER ;TEST "ORA" M 
     XRA M 
     CPI 005H 
     CNZ CPUER ;TEST "XRA" M 
     MVI M,055H 
     INR M 
     DCR M 
     ADD M 
     CPI 05AH 
     CNZ CPUER ;TEST "INR","DCR",AND "MVI" M 
     LXI B,12FFH 
     LXI D,12FFH 
     LXI H,12FFH 
     INX B 
     INX D 
     INX H 
     MVI A,013H 
     CMP B 
     CNZ CPUER ;TEST "LXI" AND "INX" B 
     CMP D 
     CNZ CPUER ;TEST "LXI" AND "INX" D 
     CMP H 
     CNZ CPUER ;TEST "LXI" AND "INX" H 
     MVI A,000H 
     CMP C 
     CNZ CPUER ;TEST "LXI" AND "INX" B 
     CMP E 
     CNZ CPUER ;TEST "LXI" AND "INX" D 
     CMP L 
     CNZ CPUER ;TEST "LXI" AND "INX" H 
     DCX B 
     DCX D 
     DCX H 
     MVI A,012H 
     CMP B 
     CNZ CPUER ;TEST "DCX" B 
     CMP D 
     CNZ CPUER ;TEST "DCX" D 
     CMP H 
     CNZ CPUER ;TEST "DCX" H 
     MVI A,0FFH 
     CMP C 
     CNZ CPUER ;TEST "DCX" B 
     CMP E 
     CNZ CPUER ;TEST "DCX" D 
     CMP L 
     CNZ CPUER ;TEST "DCX" H 
     STA TEMP0 
     XRA A 
     LDA TEMP0 
     CPI 0FFH 
     CNZ CPUER ;TEST "LDA" AND "STA" 
     LHLD TEMPP 
     SHLD TEMP0 
     LDA TEMPP 
     MOV B,A 
     LDA TEMP0 
     CMP B 
     CNZ CPUER ;TEST "LHLD" AND "SHLD" 
     LDA TEMPP+1 
     MOV B,A 
     LDA TEMP0+1 
     CMP B 
     CNZ CPUER ;TEST "LHLD" AND "SHLD" 
     MVI A,0AAH 
     STA TEMP0 
     MOV B,H 
     MOV C,L 
     XRA A 
     LDAX B 
     CPI 0AAH 
     CNZ CPUER ;TEST "LDAX" B 
     INR A 
     STAX B 
     LDA TEMP0 
     CPI 0ABH 
     CNZ CPUER ;TEST "STAX" B 
     MVI A,077H 
     STA TEMP0 
     LHLD TEMPP 
     LXI D,00000H 
     XCHG 
     XRA A 
     LDAX D 
     CPI 077H 
     CNZ CPUER ;TEST "LDAX" D AND "XCHG" 
     XRA A 
     ADD H 
     ADD L 
     CNZ CPUER ;TEST "XCHG" 
     MVI A,0CCH 
     STAX D 
     LDA TEMP0 
     CPI 0CCH 
     STAX D 
     LDA TEMP0 
     CPI 0CCH 
     CNZ CPUER ;TEST "STAX" D 
     LXI H,07777H 
     DAD H 
     MVI A,0EEH 
     CMP H 
     CNZ CPUER ;TEST "DAD" H 
     CMP L 
     CNZ CPUER ;TEST "DAD" H 
     LXI H,05555H 
     LXI B,0FFFFH 
     DAD B 
     MVI A,055H 
     CNC CPUER ;TEST "DAD" B 
     CMP H 
     CNZ CPUER ;TEST "DAD" B 
     MVI A,054H 
     CMP L 
     CNZ CPUER ;TEST "DAD" B 
     LXI H,0AAAAH 
     LXI D,03333H 
     DAD D 
     MVI A,0DDH 
     CMP H 
     CNZ CPUER ;TEST "DAD" D 
     CMP L 
     CNZ CPUER ;TEST "DAD" B 
     STC 
     CNC CPUER ;TEST "STC" 
     CMC 
     CC CPUER ;TEST "CMC 
     MVI A,0AAH 
     CMA 
     CPI 055H 
     CNZ CPUER ;TEST "CMA" 
     ORA A ;RE-SET AUXILIARY CARRY 
     DAA 
     CPI 055H 
     CNZ CPUER ;TEST "DAA" 
     MVI A,088H 
     ADD A 
     DAA 
     CPI 076H 
     CNZ CPUER ;TEST "DAA" 
     XRA A 
     MVI A,0AAH 
     DAA 
     CNC CPUER ;TEST "DAA" 
     CPI 010H 
     CNZ CPUER ;TEST "DAA" 
     XRA A 
     MVI A,09AH 
     DAA 
     CNC CPUER ;TEST "DAA" 
     CNZ CPUER ;TEST "DAA" 
     STC 
     MVI A,042H 
     RLC 
     CC CPUER ;TEST "RLC" FOR RE-SET CARRY 
     RLC 
     CNC CPUER ;TEST "RLC" FOR SET CARRY 
     CPI 009H 
     CNZ CPUER ;TEST "RLC" FOR ROTATION 
     RRC 
     CNC CPUER ;TEST "RRC" FOR SET CARRY 
     RRC 
     CPI 042H 
     CNZ CPUER ;TEST "RRC" FOR ROTATION 
     RAL 
     RAL 
     CNC CPUER ;TEST "RAL" FOR SET CARRY 
     CPI 008H 
     CNZ CPUER ;TEST "RAL" FOR ROTATION 
     RAR 
     RAR 
     CC CPUER ;TEST "RAR" FOR RE-SET CARRY 
     CPI 002H 
     CNZ CPUER ;TEST "RAR" FOR ROTATION 
     LXI B,H 
     LXI D,0AAAAH 
     LXI H,05555H 
     XRA A 
     PUSH B 
     PUSH D 
     PUSH H 
     PUSH PSW 
     LXI B,00000H 
     LXI D,00000H 
     LXI H,00000H 
     MVI A,0C0H 
     ADI 0F0H 
     POP PSW 
     POP H 
     POP D 
     POP B 
     CC CPUER ;TEST "PUSH PSW" AND "POP PSW" 
     CNZ CPUER ;TEST "PUSH PSW" AND "POP PSW" 
     CPO CPUER ;TEST "PUSH PSW" AND "POP PSW" 
     CM CPUER ;TEST "PUSH PSW" AND "POP PSW" 
     MVI A,012H 
     CMP B 
     CNZ CPUER ;TEST "PUSH B" AND "POP B" 
     MVI A,034H 
     CMP C 
     CNZ CPUER ;TEST "PUSH B" AND "POP B" 
     MVI A,0AAH 
     CMP D 
     CNZ CPUER ;TEST "PUSH D" AND "POP D" 
     CMP E 
     CNZ CPUER ;TEST "PUSH D" AND "POP D" 
     MVI A,055H 
     CMP H 
     CNZ CPUER ;TEST "PUSH H" AND "POP H" 
     CMP L 
     CNZ CPUER ;TEST "PUSH H" AND "POP H" 
     LXI H,00000H 
     DAD SP 
     SHLD SAVSTK ;SAVE THE "OLD" STACK-POINTER! 
     LXI SP,TEMP4 
     DCX SP 
     DCX SP 
     INX SP 
     DCX SP 
     MVI A,055H 
     STA TEMP2 
     CMA 
     STA TEMP3 
     POP B 
     CMP B 
     CNZ CPUER ;TEST "LXI","DAD","INX",AND "DCX" SP 
     CMA 
     CMP C 
     CNZ CPUER ;TEST "LXI","DAD","INX", AND "DCX" SP 
     LXI H,TEMP4 
     SPHL 
     LXI H,07733H 
     DCX SP 
     DCX SP 
     XTHL 
     LDA TEMP3 
     CPI 077H 
     CNZ CPUER ;TEST "SPHL" AND "XTHL" 
     LDA TEMP2 
     CPI 033H 
     CNZ CPUER ;TEST "SPHL" AND "XTHL" 
     MVI A,055H 
     CMP L 
     CNZ CPUER ;TEST "SPHL" AND "XTHL" 
     CMA 
     CMP H 
     CNZ CPUER ;TEST "SPHL" AND "XTHL" 
     LHLD SAVSTK ;RESTORE THE "OLD" STACK-POINTER 
     SPHL 
     LXI H,CPUOK 
     PCHL  ;TEST "PCHL" 
; 
; 
; 
CPUER: LXI H,NGCPU ;OUTPUT "CPU HAS FAILED ERROR EXIT=" TO CONSOLE 
     CALL MSG 
     XTHL 
     MOV A,H 
     CALL BYTEO ;SHOW ERROR EXIT ADDRESS HIGH BYTE 
     MOV A,L 
     CALL BYTEO ;SHOW ERROR EXIT ADDRESS LOW BYTE 
     JMP WBOOT ;EXIT TO CP/M WARM BOOT 
; 
; 
; 
CPUOK: LXI H,OKCPU ;OUTPUT "CPU IS OPERATIONAL" TO CONSOLE 
     CALL MSG 
     JMP WBOOT ;EXIT TO CP/M WARM BOOT 
; 
; 
; 
TEMPP: DW TEMP0 ;POINTER USED TO TEST "LHLD","SHLD", 
      ; AND "LDAX" INSTRUCTIONS 
; 
TEMP0: DS 1 ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS 
TEMP1: DS 1 ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS 
TEMP2 DS 1 ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS 
TEMP3: DS 1 ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS 
TEMP4: DS 1 ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS 
SAVSTK: DS 2 ;TEMPORARY STACK-POINTER STORAGE LOCATION 
; 
; 
; 
STACK EQU TEMPP+256 ;DE-BUG STACK POINTER STORAGE AREA 
; 
     END 

另外两个测试套件可以在Alexander Demin's i8080-core repomy fork中找到。不幸的是,我只有Microcosm测试套件的asm。