home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol005 / cpudiag.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  13.8 KB  |  812 lines

  1. ;***********************************************************************
  2. ; MICROCOSM ASSOCIATES  8080/8085 CPU DIAGNOSTIC VERSION 1.0  (C) 1980
  3. ;***********************************************************************
  4. ;
  5. ;DONATED TO THE "SIG/M" CP/M USER'S GROUP BY:
  6. ;KELLY SMITH, MICROCOSM ASSOCIATES
  7. ;3055 WACO AVENUE
  8. ;SIMI VALLEY, CALIFORNIA, 93065
  9. ;(805) 527-9321 (MODEM, CP/M-NET (TM))
  10. ;(805) 527-0518 (VERBAL)
  11. ;
  12. ;
  13. ;
  14. ;
  15. ;
  16. ;
  17.  
  18.         ORG    00100H
  19. ;
  20. ;
  21. ;
  22.     JMP    CPU    ;JUMP TO 8080 CPU DIAGNOSTIC
  23. ;
  24. ;
  25. ;
  26.     DB    'MICROCOSM ASSOCIATES 8080/8085 CPU DIAGNOSTIC'
  27.     DB    ' VERSION 1.0  (C) 1980'
  28. ;
  29. ;
  30. ;
  31. BDOS    EQU    00005H    ;BDOS ENTRY TO CP/M
  32. WBOOT    EQU    00000H    ;RE-ENTRY TO CP/M WARM BOOT
  33. ;
  34. ;
  35. ;
  36. ;MESSAGE OUTPUT ROUTINE
  37. ;
  38. MSG:    PUSH    D    ;EXILE D REG.
  39.     XCHG        ;SWAP H&L REGS. TO D&E REGS.
  40.     MVI    C,9    ;LET BDOS KNOW WE WANT TO SEND A MESSAGE
  41.     CALL    BDOS
  42.     POP    D    ;BACK FROM EXILE
  43.     RET
  44. ;
  45. ;
  46. ;
  47. ;CHARACTER OUTPUT ROUTINE
  48. ;
  49. PCHAR:    MVI    C,2
  50.     CALL    BDOS
  51.     RET
  52. ;
  53. ;
  54. ;
  55. BYTEO:    PUSH    PSW
  56.     CALL    BYTO1
  57.     MOV    E,A
  58.     CALL    PCHAR
  59.     POP    PSW
  60.     CALL    BYTO2
  61.     MOV    E,A
  62.     JMP    PCHAR
  63. BYTO1:    RRC
  64.     RRC
  65.     RRC
  66.     RRC
  67. BYTO2:    ANI    0FH
  68.     CPI    0AH
  69.     JM    BYTO3
  70.     ADI    7
  71. BYTO3:    ADI    30H
  72.     RET
  73. ;
  74. ;
  75. ;
  76. ;************************************************************
  77. ;           MESSAGE TABLE FOR OPERATIONAL CPU TEST
  78. ;************************************************************
  79. ;
  80. OKCPU:    DB    0CH,0DH,0AH,' CPU IS OPERATIONAL$'
  81. ;
  82. NGCPU:    DB    0CH,0DH,0AH,' CPU HAS FAILED!    ERROR EXIT=$'
  83. ;
  84. ;
  85. ;
  86. ;************************************************************
  87. ;                8080/8085 CPU TEST/DIAGNOSTIC
  88. ;************************************************************
  89. ;
  90. ;NOTE: (1) PROGRAM ASSUMES "CALL",AND "LXI SP" INSTRUCTIONS WORK!
  91. ;
  92. ;      (2) INSTRUCTIONS NOT TESTED ARE "HLT","DI","EI","RIM","SIM",
  93. ;          AND "RST 0" THRU "RST 7"
  94. ;
  95. ;
  96. ;
  97. ;TEST JUMP INSTRUCTIONS AND FLAGS
  98. ;
  99. CPU:    LXI    SP,STACK    ;SET THE STACK POINTER
  100.     ANI    0    ;INITIALIZE A REG. AND CLEAR ALL FLAGS
  101.     JZ    J010    ;TEST "JZ"
  102.     CALL    CPUER
  103. J010:    JNC    J020    ;TEST "JNC"
  104.     CALL    CPUER
  105. J020:    JPE    J030    ;TEST "JPE"
  106.     CALL    CPUER
  107. J030:    JP    J040    ;TEST "JP"
  108.     CALL    CPUER
  109. J040:    JNZ    J050    ;TEST "JNZ"
  110.     JC    J050    ;TEST "JC"
  111.     JPO    J050    ;TEST "JPO"
  112.     JM    J050    ;TEST "JM"
  113.     JMP    J060    ;TEST "JMP" (IT'S A LITTLE LATE,BUT WHAT THE HELL!
  114. J050:    CALL    CPUER
  115. J060:    ADI    6    ;A=6,C=0,P=1,S=0,Z=0
  116.     JNZ    J070    ;TEST "JNZ"
  117.     CALL    CPUER
  118. J070:    JC    J080    ;TEST "JC"
  119.     JPO    J080    ;TEST "JPO"
  120.     JP    J090    ;TEST "JP"
  121. J080:    CALL    CPUER
  122. J090:    ADI    070H    ;A=76H,C=0,P=0,S=0,Z=0
  123.     JPO    J100    ;TEST "JPO"
  124.     CALL    CPUER
  125. J100:    JM    J110    ;TEST "JM"
  126.     JZ    J110    ;TEST "JZ"
  127.     JNC    J120    ;TEST "JNC"
  128. J110:    CALL    CPUER
  129. J120:    ADI    081H    ;A=F7H,C=0,P=0,S=1,Z=0
  130.     JM    J130    ;TEST "JM"
  131.     CALL    CPUER
  132. J130:    JZ    J140    ;TEST "JZ"
  133.     JC    J140    ;TEST "JC"
  134.     JPO    J150    ;TEST "JPO"
  135. J140:    CALL    CPUER
  136. J150:    ADI    0FEH    ;A=F5H,C=1,P=1,S=1,Z=0
  137.     JC    J160    ;TEST "JC"
  138.     CALL    CPUER
  139. J160:    JZ    J170    ;TEST "JZ"
  140.     JPO    J170    ;TEST "JPO"
  141.     JM    AIMM    ;TEST "JM"
  142. J170:    CALL    CPUER
  143. ;
  144. ;
  145. ;
  146. ;TEST ACCUMULATOR IMMEDIATE INSTRUCTIONS
  147. ;
  148. AIMM:    CPI    0    ;A=F5H,C=0,Z=0
  149.     JC    CPIE    ;TEST "CPI" FOR RE-SET CARRY
  150.     JZ    CPIE    ;TEST "CPI" FOR RE-SET ZERO
  151.     CPI    0F5H    ;A=F5H,C=0,Z=1
  152.     JC    CPIE    ;TEST "CPI" FOR RE-SET CARRY ("ADI")
  153.     JNZ    CPIE    ;TEST "CPI" FOR RE-SET ZERO
  154.     CPI    0FFH    ;A=F5H,C=1,Z=0
  155.     JZ    CPIE    ;TEST "CPI" FOR RE-SET ZERO
  156.     JC    ACII    ;TEST "CPI" FOR SET CARRY
  157. CPIE:    CALL    CPUER
  158. ACII:    ACI    00AH    ;A=F5H+0AH+CARRY(1)=0,C=1
  159.     ACI    00AH    ;A=0+0AH+CARRY(0)=0BH,C=0
  160.     CPI    00BH
  161.     JZ    SUII    ;TEST "ACI"
  162.     CALL    CPUER
  163. SUII:    SUI    00CH    ;A=FFH,C=0
  164.     SUI    00FH    ;A=F0H,C=1
  165.     CPI    0F0H
  166.     JZ    SBII    ;TEST "SUI"
  167.     CALL    CPUER
  168. SBII:    SBI    0F1H    ;A=F0H-0F1H-CARRY(0)=FFH,C=1
  169.     SBI    00EH    ;A=FFH-OEH-CARRY(1)=F0H,C=0
  170.     CPI    0F0H
  171.     JZ    ANII    ;TEST "SBI"
  172.     CALL    CPUER
  173. ANII:    ANI    055H    ;A=F0H<AND>55H=50H,C=0,P=1,S=0,Z=0
  174.     CPI    050H
  175.     JZ    ORII    ;TEST "ANI"
  176.     CALL    CPUER
  177. ORII:    ORI    03AH    ;A=50H<OR>3AH=7AH,C=0,P=0,S=0,Z=0
  178.     CPI    07AH
  179.     JZ    XRII    ;TEST "ORI"
  180.     CALL    CPUER
  181. XRII:    XRI    00FH    ;A=7AH<XOR>0FH=75H,C=0,P=0,S=0,Z=0
  182.     CPI    075H
  183.     JZ    C010    ;TEST "XRI"
  184.     CALL    CPUER
  185. ;
  186. ;
  187. ;
  188. ;TEST CALLS AND RETURNS
  189. ;
  190. C010:    ANI    000H    ;A=0,C=0,P=1,S=0,Z=1
  191.     CC    CPUER    ;TEST "CC"
  192.     CPO    CPUER    ;TEST "CPO"
  193.     CM    CPUER    ;TEST "CM"
  194.     CNZ    CPUER    ;TEST "CNZ"
  195.     CPI    000H
  196.     JZ    C020    ;A=0,C=0,P=0,S=0,Z=1
  197.     CALL    CPUER
  198. C020:    SUI    077H    ;A=89H,C=1,P=0,S=1,Z=0
  199.     CNC    CPUER    ;TEST "CNC"
  200.     CPE    CPUER    ;TEST "CPE"
  201.     CP    CPUER    ;TEST "CP"
  202.     CZ    CPUER    ;TEST "CZ"
  203.     CPI    089H
  204.     JZ    C030    ;TEST FOR "CALLS" TAKING BRANCH
  205.     CALL    CPUER
  206. C030:    ANI    0FFH    ;SET FLAGS BACK!
  207.     CPO    CPOI    ;TEST "CPO"
  208.     CPI    0D9H
  209.     JZ    MOVI    ;TEST "CALL" SEQUENCE SUCCESS
  210.     CALL    CPUER
  211. CPOI:    RPE        ;TEST "RPE"
  212.     ADI    010H    ;A=99H,C=0,P=0,S=1,Z=0
  213.     CPE    CPEI    ;TEST "CPE"
  214.     ADI    002H    ;A=D9H,C=0,P=0,S=1,Z=0
  215.     RPO        ;TEST "RPO"
  216.     CALL    CPUER
  217. CPEI:    RPO        ;TEST "RPO"
  218.     ADI    020H    ;A=B9H,C=0,P=0,S=1,Z=0
  219.     CM    CMI    ;TEST "CM"
  220.     ADI    004H    ;A=D7H,C=0,P=1,S=1,Z=0
  221.     RPE        ;TEST "RPE"
  222.     CALL    CPUER
  223. CMI:    RP        ;TEST "RP"
  224.     ADI    080H    ;A=39H,C=1,P=1,S=0,Z=0
  225.     CP    TCPI    ;TEST "CP"
  226.     ADI    080H    ;A=D3H,C=0,P=0,S=1,Z=0
  227.     RM        ;TEST "RM"
  228.     CALL    CPUER
  229. TCPI:    RM        ;TEST "RM"
  230.     ADI    040H    ;A=79H,C=0,P=0,S=0,Z=0
  231.     CNC    CNCI    ;TEST "CNC"
  232.     ADI    040H    ;A=53H,C=0,P=1,S=0,Z=0
  233.     RP        ;TEST "RP"
  234.     CALL    CPUER
  235. CNCI:    RC        ;TEST "RC"
  236.     ADI    08FH    ;A=08H,C=1,P=0,S=0,Z=0
  237.     CC    CCI    ;TEST "CC"
  238.     SUI    002H    ;A=13H,C=0,P=0,S=0,Z=0
  239.     RNC        ;TEST "RNC"
  240.     CALL    CPUER
  241. CCI:    RNC        ;TEST "RNC"
  242.     ADI    0F7H    ;A=FFH,C=0,P=1,S=1,Z=0
  243.     CNZ    CNZI    ;TEST "CNZ"
  244.     ADI    0FEH    ;A=15H,C=1,P=0,S=0,Z=0
  245.     RC        ;TEST "RC"
  246.     CALL    CPUER
  247. CNZI:    RZ        ;TEST "RZ"
  248.     ADI    001H    ;A=00H,C=1,P=1,S=0,Z=1
  249.     CZ    CZI    ;TEST "CZ"
  250.     ADI    0D0H    ;A=17H,C=1,P=1,S=0,Z=0
  251.     RNZ        ;TEST "RNZ"
  252.     CALL    CPUER
  253. CZI:    RNZ        ;TEST "RNZ"
  254.     ADI    047H    ;A=47H,C=0,P=1,S=0,Z=0
  255.     CPI    047H    ;A=47H,C=0,P=1,S=0,Z=1
  256.     RZ        ;TEST "RZ"
  257.     CALL    CPUER
  258. ;
  259. ;
  260. ;
  261. ;TEST "MOV","INR",AND "DCR" INSTRUCTIONS
  262. ;
  263. MOVI:    MVI    A,077H
  264.     INR    A
  265.     MOV    B,A
  266.     INR    B
  267.     MOV    C,B
  268.     DCR    C
  269.     MOV    D,C
  270.     MOV    E,D
  271.     MOV    H,E
  272.     MOV    L,H
  273.     MOV    A,L    ;TEST "MOV" A,L,H,E,D,C,B,A
  274.     DCR    A
  275.     MOV    C,A
  276.     MOV    E,C
  277.     MOV    L,E
  278.     MOV    B,L
  279.     MOV    D,B
  280.     MOV    H,D
  281.     MOV    A,H    ;TEST "MOV" A,H,D,B,L,E,C,A
  282.     MOV    D,A
  283.     INR    D
  284.     MOV    L,D
  285.     MOV    C,L
  286.     INR    C
  287.     MOV    H,C
  288.     MOV    B,H
  289.     DCR    B
  290.     MOV    E,B
  291.     MOV    A,E    ;TEST "MOV" A,E,B,H,C,L,D,A
  292.     MOV    E,A
  293.     INR    E
  294.     MOV    B,E
  295.     MOV    H,B
  296.     INR    H
  297.     MOV    C,H
  298.     MOV    L,C
  299.     MOV    D,L
  300.     DCR    D
  301.     MOV    A,D    ;TEST "MOV" A,D,L,C,H,B,E,A
  302.     MOV    H,A
  303.     DCR    H
  304.     MOV    D,H
  305.     MOV    B,D
  306.     MOV    L,B
  307.     INR    L
  308.     MOV    E,L
  309.     DCR    E
  310.     MOV    C,E
  311.     MOV    A,C    ;TEST "MOV" A,C,E,L,B,D,H,A
  312.     MOV    L,A
  313.     DCR    L
  314.     MOV    H,L
  315.     MOV    E,H
  316.     MOV    D,E
  317.     MOV    C,D
  318.     MOV    B,C
  319.     MOV    A,B
  320.     CPI    077H
  321.     CNZ    CPUER    ;TEST "MOV" A,B,C,D,E,H,L,A
  322. ;
  323. ;
  324. ;
  325. ;TEST ARITHMETIC AND LOGIC INSTRUCTIONS
  326. ;
  327.     XRA    A
  328.     MVI    B,001H
  329.     MVI    C,003H
  330.     MVI    D,007H
  331.     MVI    E,00FH
  332.     MVI    H,01FH
  333.     MVI    L,03FH
  334.     ADD    B
  335.     ADD    C
  336.     ADD    D
  337.     ADD    E
  338.     ADD    H
  339.     ADD    L
  340.     ADD    A
  341.     CPI    0F0H
  342.     CNZ    CPUER    ;TEST "ADD" B,C,D,E,H,L,A
  343.     SUB    B
  344.     SUB    C
  345.     SUB    D
  346.     SUB    E
  347.     SUB    H
  348.     SUB    L
  349.     CPI    078H
  350.     CNZ    CPUER    ;TEST "SUB" B,C,D,E,H,L
  351.     SUB    A
  352.     CNZ    CPUER    ;TEST "SUB" A
  353.     MVI    A,080H
  354.     ADD    A
  355.     MVI    B,001H
  356.     MVI    C,002H
  357.     MVI    D,003H
  358.     MVI    E,004H
  359.     MVI    H,005H
  360.     MVI    L,006H
  361.     ADC    B
  362.     MVI    B,080H
  363.     ADD    B
  364.     ADD    B
  365.     ADC    C
  366.     ADD    B
  367.     ADD    B
  368.     ADC    D
  369.     ADD    B
  370.     ADD    B
  371.     ADC    E
  372.     ADD    B
  373.     ADD    B
  374.     ADC    H
  375.     ADD    B
  376.     ADD    B
  377.     ADC    L
  378.     ADD    B
  379.     ADD    B
  380.     ADC    A
  381.     CPI    037H
  382.     CNZ    CPUER    ;TEST "ADC" B,C,D,E,H,L,A
  383.     MVI    A,080H
  384.     ADD    A
  385.     MVI    B,001H
  386.     SBB    B
  387.     MVI    B,0FFH
  388.     ADD    B
  389.     SBB    C
  390.     ADD    B
  391.     SBB    D
  392.     ADD    B
  393.     SBB    E
  394.     ADD    B
  395.     SBB    H
  396.     ADD    B
  397.     SBB    L
  398.     CPI    0E0H
  399.     CNZ    CPUER    ;TEST "SBB" B,C,D,E,H,L
  400.     MVI    A,080H
  401.     ADD    A
  402.     SBB    A
  403.     CPI    0FFH
  404.     CNZ    CPUER    ;TEST "SBB" A
  405.     MVI    A,0FFH
  406.     MVI    B,0FEH
  407.     MVI    C,0FCH
  408.     MVI    D,0EFH
  409.     MVI    E,07FH
  410.     MVI    H,0F4H
  411.     MVI    L,0BFH
  412.     ANA    A
  413.     ANA    C
  414.     ANA    D
  415.     ANA    E
  416.     ANA    H
  417.     ANA    L
  418.     ANA    A
  419.     CPI    024H
  420.     CNZ    CPUER    ;TEST "ANA" B,C,D,E,H,L,A
  421.     XRA    A
  422.     MVI    B,001H
  423.     MVI    C,002H
  424.     MVI    D,004H
  425.     MVI    E,008H
  426.     MVI    H,010H
  427.     MVI    L,020H
  428.     ORA    B
  429.     ORA    C
  430.     ORA    D
  431.     ORA    E
  432.     ORA    H
  433.     ORA    L
  434.     ORA    A
  435.     CPI    03FH
  436.     CNZ    CPUER    ;TEST "ORA" B,C,D,E,H,L,A
  437.     MVI    A,000H
  438.     MVI    H,08FH
  439.     MVI    L,04FH
  440.     XRA    B
  441.     XRA    C
  442.     XRA    D
  443.     XRA    E
  444.     XRA    H
  445.     XRA    L
  446.     CPI    0CFH
  447.     CNZ    CPUER    ;TEST "XRA" B,C,D,E,H,L
  448.     XRA    A
  449.     CNZ    CPUER    ;TEST "XRA" A
  450.     MVI    B,044H
  451.     MVI    C,045H
  452.     MVI    D,046H
  453.     MVI    E,047H
  454.     MVI    H,(TEMP0 / 0FFH)    ;HIGH BYTE OF TEST MEMORY LOCATION
  455.     MVI    L,(TEMP0 AND 0FFH)    ;LOW BYTE OF TEST MEMORY LOCATION
  456.     MOV    M,B
  457.     MVI    B,000H
  458.     MOV    B,M
  459.     MVI    A,044H
  460.     CMP    B
  461.     CNZ    CPUER    ;TEST "MOV" M,B AND B,M
  462.     MOV    M,D
  463.     MVI    D,000H
  464.     MOV    D,M
  465.     MVI    A,046H
  466.     CMP    D
  467.     CNZ    CPUER    ;TEST "MOV" M,D AND D,M
  468.     MOV    M,E
  469.     MVI    E,000H
  470.     MOV    E,M
  471.     MVI    A,047H
  472.     CMP    E
  473.     CNZ    CPUER    ;TEST "MOV" M,E AND E,M
  474.     MOV    M,H
  475.     MVI    H,(TEMP0 / 0FFH)
  476.     MVI    L,(TEMP0 AND 0FFH)
  477.     MOV    H,M
  478.     MVI    A,(TEMP0 / 0FFH)
  479.     CMP    H
  480.     CNZ    CPUER    ;TEST "MOV" M,H AND H,M
  481.     MOV    M,L
  482.     MVI    H,(TEMP0 / 0FFH)
  483.     MVI    L,(TEMP0 AND 0FFH)
  484.     MOV    L,M
  485.     MVI    A,(TEMP0 AND 0FFH)
  486.     CMP    L
  487.     CNZ    CPUER    ;TEST "MOV" M,L AND L,M
  488.     MVI    H,(TEMP0 / 0FFH)
  489.     MVI    L,(TEMP0 AND 0FFH)
  490.     MVI    A,032H
  491.     MOV    M,A
  492.     CMP    M
  493.     CNZ    CPUER    ;TEST "MOV" M,A
  494.     ADD    M
  495.     CPI    064H
  496.     CNZ    CPUER    ;TEST "ADD" M
  497.     XRA    A
  498.     MOV    A,M
  499.     CPI    032H
  500.     CNZ    CPUER    ;TEST "MOV" A,M
  501.     MVI    H,(TEMP0 / 0FFH)
  502.     MVI    L,(TEMP0 AND 0FFH)
  503.     MOV    A,M
  504.     SUB    M
  505.     CNZ    CPUER    ;TEST "SUB" M
  506.     MVI    A,080H
  507.     ADD    A
  508.     ADC    M
  509.     CPI    033H
  510.     CNZ    CPUER    ;TEST "ADC" M
  511.     MVI    A,080H
  512.     ADD    A
  513.     SBB    M
  514.     CPI    0CDH
  515.     CNZ    CPUER    ;TEST "SBB" M
  516.     ANA    M
  517.     CNZ    CPUER    ;TEST "ANA" M
  518.     MVI    A,025H
  519.     ORA    M
  520.     CPI    037H
  521.     CNZ    CPUER    ;TEST "ORA" M
  522.     XRA    M
  523.     CPI    005H
  524.     CNZ    CPUER    ;TEST "XRA" M
  525.     MVI    M,055H
  526.     INR    M
  527.     DCR    M
  528.     ADD    M
  529.     CPI    05AH
  530.     CNZ    CPUER    ;TEST "INR","DCR",AND "MVI" M
  531.     LXI    B,12FFH
  532.     LXI    D,12FFH
  533.     LXI    H,12FFH
  534.     INX    B
  535.     INX    D
  536.     INX    H
  537.     MVI    A,013H
  538.     CMP    B
  539.     CNZ    CPUER    ;TEST "LXI" AND "INX" B
  540.     CMP    D
  541.     CNZ    CPUER    ;TEST "LXI" AND "INX" D
  542.     CMP    H
  543.     CNZ    CPUER    ;TEST "LXI" AND "INX" H
  544.     MVI    A,000H
  545.     CMP    C
  546.     CNZ    CPUER    ;TEST "LXI" AND "INX" B
  547.     CMP    E
  548.     CNZ    CPUER    ;TEST "LXI" AND "INX" D
  549.     CMP    L
  550.     CNZ    CPUER    ;TEST "LXI" AND "INX" H
  551.     DCX    B
  552.     DCX    D
  553.     DCX    H
  554.     MVI    A,012H
  555.     CMP    B
  556.     CNZ    CPUER    ;TEST "DCX" B
  557.     CMP    D
  558.     CNZ    CPUER    ;TEST "DCX" D
  559.     CMP    H
  560.     CNZ    CPUER    ;TEST "DCX" H
  561.     MVI    A,0FFH
  562.     CMP    C
  563.     CNZ    CPUER    ;TEST "DCX" B
  564.     CMP    E
  565.     CNZ    CPUER    ;TEST "DCX" D
  566.     CMP    L
  567.     CNZ    CPUER    ;TEST "DCX" H
  568.     STA    TEMP0
  569.     XRA    A
  570.     LDA    TEMP0
  571.     CPI    0FFH
  572.     CNZ    CPUER    ;TEST "LDA" AND "STA"
  573.     LHLD    TEMPP
  574.     SHLD    TEMP0
  575.     LDA    TEMPP
  576.     MOV    B,A
  577.     LDA    TEMP0
  578.     CMP    B
  579.     CNZ    CPUER    ;TEST "LHLD" AND "SHLD"
  580.     LDA    TEMPP+1
  581.     MOV    B,A
  582.     LDA    TEMP0+1
  583.     CMP    B
  584.     CNZ    CPUER    ;TEST "LHLD" AND "SHLD"
  585.     MVI    A,0AAH
  586.     STA    TEMP0
  587.     MOV    B,H
  588.     MOV    C,L
  589.     XRA    A
  590.     LDAX    B
  591.     CPI    0AAH
  592.     CNZ    CPUER    ;TEST "LDAX" B
  593.     INR    A
  594.     STAX    B
  595.     LDA    TEMP0
  596.     CPI    0ABH
  597.     CNZ    CPUER    ;TEST "STAX" B
  598.     MVI    A,077H
  599.     STA    TEMP0
  600.     LHLD    TEMPP
  601.     LXI    D,00000H
  602.     XCHG
  603.     XRA    A
  604.     LDAX    D
  605.     CPI    077H
  606.     CNZ    CPUER    ;TEST "LDAX" D AND "XCHG"
  607.     XRA    A
  608.     ADD    H
  609.     ADD    L
  610.     CNZ    CPUER    ;TEST "XCHG"
  611.     MVI    A,0CCH
  612.     STAX    D
  613.     LDA    TEMP0
  614.     CPI    0CCH
  615.     STAX    D
  616.     LDA    TEMP0
  617.     CPI    0CCH
  618.     CNZ    CPUER    ;TEST "STAX" D
  619.     LXI    H,07777H
  620.     DAD    H
  621.     MVI    A,0EEH
  622.     CMP    H
  623.     CNZ    CPUER    ;TEST "DAD" H
  624.     CMP    L
  625.     CNZ    CPUER    ;TEST "DAD" H
  626.     LXI    H,05555H
  627.     LXI    B,0FFFFH
  628.     DAD    B
  629.     MVI    A,055H
  630.     CNC    CPUER    ;TEST "DAD" B
  631.     CMP    H
  632.     CNZ    CPUER    ;TEST "DAD" B
  633.     MVI    A,054H
  634.     CMP    L
  635.     CNZ    CPUER    ;TEST "DAD" B
  636.     LXI    H,0AAAAH
  637.     LXI    D,03333H
  638.     DAD    D
  639.     MVI    A,0DDH
  640.     CMP    H
  641.     CNZ    CPUER    ;TEST "DAD" D
  642.     CMP    L
  643.     CNZ    CPUER    ;TEST "DAD" B
  644.     STC
  645.     CNC    CPUER    ;TEST "STC"
  646.     CMC
  647.     CC    CPUER    ;TEST "CMC
  648.     MVI    A,0AAH
  649.     CMA    
  650.     CPI    055H
  651.     CNZ    CPUER    ;TEST "CMA"
  652.     ORA    A    ;RE-SET AUXILIARY CARRY
  653.     DAA
  654.     CPI    055H
  655.     CNZ    CPUER    ;TEST "DAA"
  656.     MVI    A,088H
  657.     ADD    A
  658.     DAA
  659.     CPI    076H
  660.     CNZ    CPUER    ;TEST "DAA"
  661.     XRA    A
  662.     MVI    A,0AAH
  663.     DAA
  664.     CNC    CPUER    ;TEST "DAA"
  665.     CPI    010H
  666.     CNZ    CPUER    ;TEST "DAA"
  667.     XRA    A
  668.     MVI    A,09AH
  669.     DAA
  670.     CNC    CPUER    ;TEST "DAA"
  671.     CNZ    CPUER    ;TEST "DAA"
  672.     STC
  673.     MVI    A,042H
  674.     RLC
  675.     CC    CPUER    ;TEST "RLC" FOR RE-SET CARRY
  676.     RLC
  677.     CNC    CPUER    ;TEST "RLC" FOR SET CARRY
  678.     CPI    009H
  679.     CNZ    CPUER    ;TEST "RLC" FOR ROTATION
  680.     RRC
  681.     CNC    CPUER    ;TEST "RRC" FOR SET CARRY
  682.     RRC
  683.     CPI    042H
  684.     CNZ    CPUER    ;TEST "RRC" FOR ROTATION
  685.     RAL
  686.     RAL
  687.     CNC    CPUER    ;TEST "RAL" FOR SET CARRY
  688.     CPI    008H
  689.     CNZ    CPUER    ;TEST "RAL" FOR ROTATION
  690.     RAR
  691.     RAR
  692.     CC    CPUER    ;TEST "RAR" FOR RE-SET CARRY
  693.     CPI    002H
  694.     CNZ    CPUER    ;TEST "RAR" FOR ROTATION
  695.     LXI    B,01234H
  696.     LXI    D,0AAAAH
  697.     LXI    H,05555H
  698.     XRA    A
  699.     PUSH    B
  700.     PUSH    D
  701.     PUSH    H
  702.     PUSH    PSW
  703.     LXI    B,00000H
  704.     LXI    D,00000H
  705.     LXI    H,00000H
  706.     MVI    A,0C0H
  707.     ADI    0F0H
  708.     POP    PSW
  709.     POP    H
  710.     POP    D
  711.     POP    B
  712.     CC    CPUER    ;TEST "PUSH PSW" AND "POP PSW"
  713.     CNZ    CPUER    ;TEST "PUSH PSW" AND "POP PSW"
  714.     CPO    CPUER    ;TEST "PUSH PSW" AND "POP PSW"
  715.     CM    CPUER    ;TEST "PUSH PSW" AND "POP PSW"
  716.     MVI    A,012H
  717.     CMP    B
  718.     CNZ    CPUER    ;TEST "PUSH B" AND "POP B"
  719.     MVI    A,034H
  720.     CMP    C
  721.     CNZ    CPUER    ;TEST "PUSH B" AND "POP B"
  722.     MVI    A,0AAH
  723.     CMP    D
  724.     CNZ    CPUER    ;TEST "PUSH D" AND "POP D"
  725.     CMP    E
  726.     CNZ    CPUER    ;TEST "PUSH D" AND "POP D"
  727.     MVI    A,055H
  728.     CMP    H
  729.     CNZ    CPUER    ;TEST "PUSH H" AND "POP H"
  730.     CMP    L
  731.     CNZ    CPUER    ;TEST "PUSH H" AND "POP H"
  732.     LXI    H,00000H
  733.     DAD    SP
  734.     SHLD    SAVSTK    ;SAVE THE "OLD" STACK-POINTER!
  735.     LXI    SP,TEMP4
  736.     DCX    SP
  737.     DCX    SP
  738.     INX    SP
  739.     DCX    SP
  740.     MVI    A,055H
  741.     STA    TEMP2
  742.     CMA
  743.     STA    TEMP3
  744.     POP    B
  745.     CMP    B
  746.     CNZ    CPUER    ;TEST "LXI","DAD","INX",AND "DCX" SP
  747.     CMA
  748.     CMP    C
  749.     CNZ    CPUER    ;TEST "LXI","DAD","INX", AND "DCX" SP
  750.     LXI    H,TEMP4
  751.     SPHL
  752.     LXI    H,07733H
  753.     DCX    SP
  754.     DCX    SP
  755.     XTHL
  756.     LDA    TEMP3
  757.     CPI    077H
  758.     CNZ    CPUER    ;TEST "SPHL" AND "XTHL"
  759.     LDA    TEMP2
  760.     CPI    033H
  761.     CNZ    CPUER    ;TEST "SPHL" AND "XTHL"
  762.     MVI    A,055H
  763.     CMP    L
  764.     CNZ    CPUER    ;TEST "SPHL" AND "XTHL"
  765.     CMA
  766.     CMP    H
  767.     CNZ    CPUER    ;TEST "SPHL" AND "XTHL"
  768.     LHLD    SAVSTK    ;RESTORE THE "OLD" STACK-POINTER
  769.     SPHL
  770.     LXI    H,CPUOK
  771.     PCHL        ;TEST "PCHL"
  772. ;
  773. ;
  774. ;
  775. CPUER:    LXI    H,NGCPU    ;OUTPUT "CPU HAS FAILED    ERROR EXIT=" TO CONSOLE
  776.     CALL    MSG
  777.     XTHL
  778.     MOV    A,H
  779.     CALL    BYTEO    ;SHOW ERROR EXIT ADDRESS HIGH BYTE
  780.     MOV    A,L
  781.     CALL    BYTEO    ;SHOW ERROR EXIT ADDRESS LOW BYTE
  782.     JMP    WBOOT    ;EXIT TO CP/M WARM BOOT
  783. ;
  784. ;
  785. ;
  786. CPUOK:    LXI    H,OKCPU    ;OUTPUT "CPU IS OPERATIONAL" TO CONSOLE
  787.     CALL    MSG
  788.     JMP    WBOOT    ;EXIT TO CP/M WARM BOOT
  789. ;
  790. ;
  791. ;
  792. TEMPP:    DW    TEMP0    ;POINTER USED TO TEST "LHLD","SHLD",
  793.             ; AND "LDAX" INSTRUCTIONS
  794. ;
  795. TEMP0:    DS    1    ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS
  796. TEMP1:    DS    1    ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS
  797. TEMP2    DS    1    ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS
  798. TEMP3:    DS    1    ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS
  799. TEMP4:    DS    1    ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS
  800. SAVSTK:    DS    2    ;TEMPORARY STACK-POINTER STORAGE LOCATION
  801. ;
  802. ;
  803. ;
  804. STACK    EQU    TEMPP+256    ;DE-BUG STACK POINTER STORAGE AREA
  805. ;
  806. ;
  807. ;
  808.     END
  809. ;
  810. ;
  811. ;
  812.