mirror of
https://github.com/MoleskiCoder/EightBitNet.git
synced 2024-11-04 19:06:12 +00:00
9a1d5cc762
Signed-off-by: Adrian Conlon <Adrian.conlon@gmail.com>
806 lines
14 KiB
NASM
806 lines
14 KiB
NASM
;***********************************************************************
|
|
; 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,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
|
|
;
|
|
END
|
|
|