;***********************************************************************
; 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 5
        ret

                ORG        00100H
                .ent $

                LXI                H, LOLZ
                LXI SP, STACK
                ;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,01234H
                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
;
