home *** CD-ROM | disk | FTP | other *** search
- ; FILE CPUTST.SRC VER 1.0
- ; CREATED 10-01-80
- ; LAST UPDATE WRITTEN BY D.A. STEELE
- ;
- ; THIS PROCEDURE WILL EXECUTE AND CHECK RESULTS OF SEVERAL
- ; INSTRUCTIONS IN EACH LOGICAL GROUP. ALL Z-80 INSTRUCTIONS
- ; WILL NOT BE TESTED NOR WILL ALL REGISTERS OF FLAGS BE TESTED
- ; FOR EACH INSTRUCTION EXECUTES.
- ;
- ; THERE ARE SOME INSTRUCTION GROUPS WHICH ARE USED SO OFTEN
- ; BY THE OPERATING SYSTEM THAT IT DOES NOT SEEM NECESSARY TO
- ; TEST THEM. THESE WOULD INCLUDE 'PUSH', 'POP', 'IN', 'OUT'.
- ;
- ; THIS MODULE SHOULD BE DECLARED EXTERNAL IN THE PASCAL MONITOR
- ; PROGRAM.
- ;
- ; FUNCTION CPUTST : INTEGER; EXTERNAL;
- ;
- ;
- NAME CPUTST
- ENTRY CPUTST
-
- CPUERR DS 2
-
- ;===============================================================
- ; ERROR ROUTINE TO BE CALLED
- ERROR: MVI A,1
- STA CPUERR
- RET
-
-
- ;===============================================================
- ; ERROR ROUTINE TO BE JUMPED TO
- JERROR: MVI A,1
- STA CPUERR
- RET ;ALL THE WAY TO THE BACKGROUND
-
- ;===============================================================
- ; THIS TEST WILL TEST THE FLAGS AS WELL AS THE CONDITIONAL
- ; CALL OPCODES
- ;
- CALLT: XRA A ;RESET C,S SET Z,P
- CNZ ERROR ;AS CALLS ARE DEPENDENT ON THE
- CC ERROR ;STACK THESE TESTS AS WELLL AS
- CNV ERROR ;OTHERS WILL DEPEND IN PART ON RAM
- CM ERROR
- MVI B,11111110B
- XRA B ;SET S,P RESET C,Z
- CZ ERROR
- CP ERROR
- CPE ERROR
- RET ;TO THE BACKGROUND
-
-
- ;===============================================================è; THIS IS TO TEST THE CONDITIONAL RETURNES
- ;
- RETT: LDA CPUERR
- INR A
- STA CPUERR
- XRA A ;RESET C,P,S SET Z
- RNZ
- RC
- RNV
- RM
- MVI B,11111110B
- XRA B ;SET S,P RESET C,Z
- RZ
- RPE
- RC
- RP
- LDA CPUERR
- DCR A
- STA CPUERR
- RET
-
-
-
- ;===============================================================
- ; THIS WILL TEST THE CONDITIONAL JUMPS
- ;
- JMPT: XRA A
- JNZ JERROR
- JC JERROR
- JNV JERROR
- JM JERROR
- MVI B,11111110B
- XRA B
- JZ JERROR
- JP JERROR
- JPE JERROR
-
- RET
-
- ;===============================================================
- ; THIS WILL TEST SOME OF THE ROTATE AND SHIFT INSTRUCTIONS
- ;
-
- ROTT: XRA A ;ZERO CARRY
- BSET 0,A
- ROTT1: RAR
- CNC ERROR
- ORA A
- CNZ ERROR
- STC
- RAR
- CC ERROR
- ORA A
- CPI 80H
- CNZ ERRORè RAR ;0100 0000
- RAR ;0010 0000
- RAR ;0001 0000
- RAR ;0000 1000
- CPI 8
- CNZ ERROR
- RLC
- RLC
- RLC
- RLC
- CPI 80H
- CNZ ERROR
- RET
- ;===========================================================
- ; THIS IS A COMPARE ROUTINE TO CPMPARE A STRING OF BITS
- ; THE LENGTH OF WHICH IS IN BC AND IS POINTED TO BY HL
- ; WITH ANOTHER STRING POINTED TO BY DE.
-
- COMP:
- PUSH PSW
- COMP1: MOV A,M ;GET ONE OF THE FIRST BYTES
- XCHG
- CCI ;COMPAIR A WITH MEMORY. INX HL
- ;AND DCX BC.
- CNZ ERROR ;IF THE BYTES ARE NOT EQUAL ERROR
- XCHG
- INX H ;INCREMENT THE OTHER POINTER
- MOV A,B ;IS IT THE END OF THE STRING
- ORA C
- NOP ;MAINTAIN CODE SIZE
- JNZ COMP1 ;IF NOT END DO IT AGAIN
- POP PSW
- RET
-
-
- ;===============================================================
- ; TEST THE BLOCK MOVE AND SEARCH FUNCTIONS
- ;
- ST1 DS 25
- ST2 DS 25
-
- BMT: XRA A
-
- BMT1: STA ST1
- LXI H,ST1
- LXI D,ST1+1
- LXI B,25
- LDIR
-
- LXI H,ST1+24
- LXI D,ST2+24
- LXI B,25
- LDDR
-
- LXI H,ST1è LXI D,ST2
- LXI B,25
- CALL COMP
-
- INR A
- JRNZ BMT1
- RET
-
- ;===============================================================
- ; TEHT VARIOUS MOVE INSTRUCTIONS
- ;
- MOVS DS 1
-
- MOVT: MVI A,0
- MOVT1: MOV H,A
- MOV L,H
- MOV D,L
- MOV E,D
- MOV B,E
- MOV C,B
- LXI H,MOVS
- MOV M,C
- MOV B,M
- CMP B
- CNZ ERROR
- INR A
- JRNZ MOVT1
- RET
-
- ;===============================================================
- ; TEST LOADS AND STORES
- ;
- LDATAX DB 0,55H
- LDATAY DB 0AAH,0
- LDATAZ DB 55H,0AAH
- LDATA0 DB 0,0
- LDATA1 DS 2
- LDATA2 DS 2
-
- CMPX: PUSH PSW
- LXI H,LDATAX
- LXI D,LDATA0
- LXI B,6
- CALL COMP
- POP PSW
- RET
-
- LOADT: LXI B,LDATA0
- LDAX B
- LXI B,LDATA1
- STAX B
- LDA LDATA0
- MOV B,A
- LDA LDATA1
- CMP Bè CNZ ERROR
- INR A
- STA LDATA0
- JRNZ LOADT
-
- LOADT1: LHLD LDATAX
- LBCD LDATAY
- LDED LDATAZ
- SHLD LDATA0
- SBCD LDATA1
- SDED LDATA2
- CALL CMPX
-
- INR A
- STA LDATAX
- STA LDATAX+1
- STA LDATAX+2
- STA LDATAX+3
- STA LDATAX+4
- STA LDATAX+5
- JRNZ LOADT1
- RET
-
- ;===============================================================
- ; TEST DOUBBLE REGISTER ADD AND SUBTRACT
- ;
- DADT: LXI H,5555H
- LXI B,0AA00H
- LXI D,00AAH
- DADC B
- DADC D
- CC ERROR ;SHOULD NOT GET CARRY
-
- MVI A,0FFH
- CMP H
- CNZ ERROR
- CMP L
- CNZ ERROR
- RET
-
- ;===============================================================
- ; TEST REGISTER INCREMENT AND DECREMENT
- ;
- INCT: LXI H,0FF00H
- INX H
- INX H
- INX H ; = FF03
- DCR H
- DCR H
- DCR H ; = FC03
- INR L
- INR L
- INR L ; = FC06
- DCX H
- DCX Hè DCX H ; = FC03
-
- INCT1 MVI B,0FFH
- INCT11 INX H
- DJNZ INCT11 ; = FD02
-
- INCT2 MVI B,0FDH
- INCT21 DCR H
- DJNZ INCT21 ; = 00
-
- MOV A,H
- CPI 0
- CNZ ERROR
- RET
-
- ;===============================================================
- ; TEST ACCUMULATOR INSTRUCTIONS
- ;
- ACCT: MVI A,10101010B
- ADI 10101010B ; SET CF AND = 01010100
- CNC ERROR
- ACI 0 ; SHOULD ADD 1 01010101
- CC ERROR
- CPI 01010101B
- CNZ ERROR
- MVI A,00111010B ; 00111010
- STC
- SBI 7CH ; 2'SC = 10000100
- ; 2'SC OF CARRY = 11111111
- ;RESULT = 10111101
- CPI 0BDH
- CNZ ERROR
-
- MVI A,10101010B
- ANI 10100000B ; = 10100000
- MVI B,01010101B
- ORA B ; = 11110101
- MVI B,10011111B
- XRA B ; = 01101010
- SUB B ; = 11001011
- CPI 11001011B
- CNZ ERROR
- RET
- ;===============================================================
- ; THIS IS A 1 MILISECOND DELAY TO ALLOW THE UART TIME TO ACT
- ;
- DELAY: PUSH B
- MVI B,222
- DELAY1: ORA A
- DCR B
- JNZ DELAY1
- POP B
- RET
-
- ;===============================================================è; TIMING TEST
- ;
- TIME:
- MVI E,'S'
- MVI C,2
- CALL 5
- LXI B,15000 ;DELAY OF 15 SEC
- TIME1: CALL DELAY
- DCX B
- MOV A,B
- ORA C
- JNZ TIME1
-
- MVI E,'F'
- MVI C,2
- CALL 5
- RET
-
- ;===============================================================
- ; CPU TEST BACKGROUND
- ;===============================================================
- ;
- CPUTST; XRA A
- STA CPUERR
- STA CPUERR+1
-
- CALL CALLT ;TEST CALLS AND FLAGS
- CALL RETT ;TEST RETURNS ABD FLAGS
- CALL JMPT ;TEST JUMPS AND FLAGS
- CALL ROTT ; " ROTATES AND SHIFTS
- CALL BMT ; " BLOCK MOVES
- CALL MOVT ; " MOVES
- CALL LOADT ; " LOADS AND STORES
- CALL DADT ; " DOUBBLE ADDS AND SUBS.
- CALL INCT ; " REG. INC. AND DEC.
- CALL ACCT ; " ACCUMULATOR INSTRUCTIONS
- CALL TIME ; TIMING TEST
-
-
- XIT: XRA A ;PREPAIR TO RETURN TO PASCAL-Z
- LXI H,CPUERR ;GET THE ADDRESS OF ERROR FLAG
- MOV E,M
- INX H
- MOV D,M
- RET
-
-
-
-
-