home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / sigmv027.ark / CPUTST.SRC < prev    next >
Encoding:
Text File  |  1985-02-10  |  10.6 KB  |  375 lines

  1. ;    FILE CPUTST.SRC          VER 1.0
  2. ;    CREATED   10-01-80
  3. ;    LAST UPDATE              WRITTEN BY D.A. STEELE
  4. ;
  5. ;    THIS PROCEDURE WILL EXECUTE AND CHECK RESULTS OF SEVERAL
  6. ;    INSTRUCTIONS IN EACH LOGICAL GROUP.  ALL Z-80 INSTRUCTIONS
  7. ;    WILL NOT BE TESTED NOR WILL ALL REGISTERS OF FLAGS BE TESTED
  8. ;    FOR EACH INSTRUCTION EXECUTES.  
  9. ;
  10. ;    THERE ARE SOME INSTRUCTION GROUPS WHICH ARE USED SO OFTEN
  11. ;    BY THE OPERATING SYSTEM THAT IT DOES NOT SEEM NECESSARY TO
  12. ;    TEST THEM.  THESE WOULD INCLUDE 'PUSH', 'POP', 'IN', 'OUT'.
  13. ;
  14. ;    THIS MODULE SHOULD BE DECLARED EXTERNAL IN THE PASCAL MONITOR
  15. ;    PROGRAM.
  16. ;
  17. ;    FUNCTION CPUTST : INTEGER; EXTERNAL;
  18. ;
  19. ;
  20.           NAME      CPUTST
  21.           ENTRY     CPUTST
  22.  
  23. CPUERR    DS        2
  24.  
  25. ;===============================================================
  26. ;    ERROR ROUTINE TO BE CALLED
  27. ERROR:    MVI       A,1
  28.           STA       CPUERR
  29.           RET
  30.  
  31.  
  32. ;===============================================================
  33. ;    ERROR ROUTINE TO BE JUMPED TO
  34. JERROR:   MVI       A,1
  35.           STA       CPUERR
  36.           RET                 ;ALL THE WAY TO THE BACKGROUND
  37.  
  38. ;===============================================================
  39. ;    THIS TEST WILL TEST THE FLAGS AS WELL AS THE CONDITIONAL
  40. ;    CALL OPCODES
  41. ;
  42. CALLT:    XRA       A         ;RESET C,S   SET Z,P
  43.           CNZ       ERROR     ;AS CALLS ARE DEPENDENT ON THE
  44.           CC        ERROR     ;STACK THESE TESTS AS WELLL AS
  45.           CNV       ERROR     ;OTHERS WILL DEPEND IN PART ON RAM
  46.           CM        ERROR
  47.           MVI       B,11111110B
  48.           XRA       B         ;SET S,P   RESET C,Z
  49.           CZ        ERROR
  50.           CP        ERROR
  51.           CPE       ERROR
  52.           RET                 ;TO THE BACKGROUND
  53.  
  54.  
  55. ;===============================================================è;    THIS IS TO TEST THE CONDITIONAL RETURNES
  56. ;
  57. RETT:     LDA       CPUERR
  58.           INR       A
  59.           STA       CPUERR
  60.           XRA       A         ;RESET C,P,S   SET Z
  61.           RNZ
  62.           RC
  63.           RNV
  64.           RM
  65.           MVI       B,11111110B
  66.           XRA       B         ;SET S,P RESET C,Z
  67.           RZ
  68.           RPE
  69.           RC
  70.           RP
  71.           LDA       CPUERR
  72.           DCR       A
  73.           STA       CPUERR
  74.           RET
  75.  
  76.  
  77.  
  78. ;===============================================================
  79. ;    THIS WILL TEST THE CONDITIONAL JUMPS
  80. ;
  81. JMPT:     XRA       A
  82.           JNZ       JERROR
  83.           JC        JERROR
  84.           JNV       JERROR
  85.           JM        JERROR
  86.           MVI       B,11111110B
  87.           XRA       B
  88.           JZ        JERROR
  89.           JP        JERROR
  90.           JPE       JERROR
  91.  
  92.           RET
  93.  
  94. ;===============================================================
  95. ;    THIS WILL TEST SOME OF THE ROTATE AND SHIFT INSTRUCTIONS
  96. ;
  97.  
  98. ROTT:     XRA       A         ;ZERO CARRY
  99.           BSET      0,A
  100. ROTT1:    RAR
  101.           CNC       ERROR
  102.           ORA       A
  103.           CNZ       ERROR
  104.           STC
  105.           RAR
  106.           CC        ERROR
  107.           ORA       A
  108.           CPI       80H
  109.           CNZ       ERRORè          RAR                 ;0100 0000
  110.           RAR                 ;0010 0000
  111.           RAR                 ;0001 0000
  112.           RAR                 ;0000 1000
  113.           CPI       8
  114.           CNZ       ERROR
  115.           RLC
  116.           RLC
  117.           RLC
  118.           RLC
  119.           CPI       80H
  120.           CNZ       ERROR
  121.           RET
  122. ;===========================================================
  123. ;    THIS IS A COMPARE ROUTINE TO CPMPARE A STRING OF BITS
  124. ;    THE LENGTH OF WHICH IS IN BC AND IS POINTED TO BY HL
  125. ;    WITH ANOTHER STRING POINTED TO BY DE.
  126.  
  127. COMP:
  128.           PUSH      PSW
  129. COMP1:    MOV       A,M       ;GET ONE OF THE FIRST BYTES
  130.           XCHG
  131.           CCI                 ;COMPAIR A WITH MEMORY. INX HL
  132.                               ;AND DCX BC.
  133.           CNZ       ERROR     ;IF THE BYTES ARE NOT EQUAL ERROR
  134.           XCHG
  135.           INX       H         ;INCREMENT THE OTHER POINTER
  136.           MOV       A,B       ;IS IT THE END OF THE STRING
  137.           ORA       C
  138.           NOP                 ;MAINTAIN CODE SIZE         
  139.           JNZ       COMP1     ;IF NOT END DO IT AGAIN
  140.           POP       PSW
  141.           RET
  142.  
  143.  
  144. ;===============================================================
  145. ;    TEST THE BLOCK MOVE AND SEARCH FUNCTIONS
  146. ;
  147. ST1       DS        25
  148. ST2       DS        25
  149.  
  150. BMT:      XRA       A
  151.  
  152. BMT1:     STA       ST1
  153.           LXI       H,ST1
  154.           LXI       D,ST1+1
  155.           LXI       B,25
  156.           LDIR
  157.  
  158.           LXI       H,ST1+24
  159.           LXI       D,ST2+24
  160.           LXI       B,25
  161.           LDDR
  162.  
  163.           LXI       H,ST1è          LXI       D,ST2
  164.           LXI       B,25
  165.           CALL      COMP
  166.  
  167.           INR       A
  168.           JRNZ      BMT1
  169.           RET
  170.  
  171. ;===============================================================
  172. ;    TEHT VARIOUS MOVE INSTRUCTIONS
  173. ;
  174. MOVS      DS        1
  175.  
  176. MOVT:     MVI       A,0
  177. MOVT1:    MOV       H,A
  178.           MOV       L,H
  179.           MOV       D,L
  180.           MOV       E,D
  181.           MOV       B,E
  182.           MOV       C,B
  183.           LXI       H,MOVS
  184.           MOV       M,C
  185.           MOV       B,M
  186.           CMP       B
  187.           CNZ       ERROR
  188.           INR       A
  189.           JRNZ      MOVT1
  190.           RET
  191.  
  192. ;===============================================================
  193. ;    TEST LOADS AND STORES
  194. ;
  195. LDATAX    DB        0,55H
  196. LDATAY    DB        0AAH,0
  197. LDATAZ    DB        55H,0AAH
  198. LDATA0    DB        0,0
  199. LDATA1    DS        2
  200. LDATA2    DS        2
  201.  
  202. CMPX:     PUSH      PSW
  203.           LXI       H,LDATAX
  204.           LXI       D,LDATA0
  205.           LXI       B,6
  206.           CALL      COMP
  207.           POP       PSW
  208.           RET
  209.  
  210. LOADT:    LXI       B,LDATA0
  211.           LDAX      B
  212.           LXI       B,LDATA1
  213.           STAX      B
  214.           LDA       LDATA0
  215.           MOV       B,A
  216.           LDA       LDATA1
  217.           CMP       Bè          CNZ       ERROR
  218.           INR       A
  219.           STA       LDATA0
  220.           JRNZ      LOADT
  221.  
  222. LOADT1:   LHLD      LDATAX
  223.           LBCD      LDATAY
  224.           LDED      LDATAZ
  225.           SHLD      LDATA0
  226.           SBCD      LDATA1
  227.           SDED      LDATA2
  228.           CALL      CMPX
  229.  
  230.           INR       A
  231.           STA       LDATAX
  232.           STA       LDATAX+1
  233.           STA       LDATAX+2
  234.           STA       LDATAX+3
  235.           STA       LDATAX+4
  236.           STA       LDATAX+5
  237.           JRNZ      LOADT1
  238.           RET
  239.  
  240. ;===============================================================
  241. ;    TEST DOUBBLE REGISTER ADD AND SUBTRACT
  242. ;
  243. DADT:     LXI       H,5555H
  244.           LXI       B,0AA00H
  245.           LXI       D,00AAH
  246.           DADC      B
  247.           DADC      D
  248.           CC        ERROR          ;SHOULD NOT GET CARRY
  249.  
  250.           MVI       A,0FFH
  251.           CMP       H
  252.           CNZ       ERROR
  253.           CMP       L
  254.           CNZ       ERROR
  255.           RET
  256.  
  257. ;===============================================================
  258. ;    TEST REGISTER INCREMENT AND DECREMENT
  259. ;
  260. INCT:     LXI       H,0FF00H
  261.           INX       H
  262.           INX       H
  263.           INX       H              ; = FF03
  264.           DCR       H
  265.           DCR       H
  266.           DCR       H              ; = FC03
  267.           INR       L
  268.           INR       L
  269.           INR       L              ; = FC06
  270.           DCX       H
  271.           DCX       Hè          DCX       H              ; = FC03
  272.  
  273. INCT1     MVI       B,0FFH
  274. INCT11    INX       H
  275.           DJNZ      INCT11         ; = FD02
  276.  
  277. INCT2     MVI       B,0FDH
  278. INCT21    DCR       H
  279.           DJNZ      INCT21         ; = 00
  280.  
  281.           MOV       A,H
  282.           CPI       0
  283.           CNZ       ERROR
  284.           RET
  285.  
  286. ;===============================================================
  287. ;    TEST ACCUMULATOR INSTRUCTIONS
  288. ;
  289. ACCT:     MVI       A,10101010B
  290.           ADI         10101010B    ; SET CF AND = 01010100
  291.           CNC       ERROR
  292.           ACI       0              ; SHOULD ADD 1 01010101
  293.           CC        ERROR
  294.           CPI       01010101B
  295.           CNZ       ERROR
  296.           MVI       A,00111010B    ;                 00111010
  297.           STC
  298.           SBI       7CH            ; 2'SC =          10000100
  299.                                    ; 2'SC OF CARRY = 11111111
  300.                                    ;RESULT =         10111101
  301.           CPI       0BDH
  302.           CNZ       ERROR
  303.  
  304.           MVI       A,10101010B
  305.           ANI         10100000B    ; = 10100000
  306.           MVI       B,01010101B
  307.           ORA       B              ; = 11110101
  308.           MVI       B,10011111B
  309.           XRA       B              ; = 01101010
  310.           SUB       B              ; = 11001011
  311.           CPI         11001011B
  312.           CNZ       ERROR
  313.           RET
  314. ;===============================================================
  315. ;    THIS IS A 1 MILISECOND DELAY TO ALLOW THE UART TIME TO ACT
  316. ;
  317. DELAY:    PUSH      B
  318.           MVI       B,222
  319. DELAY1:   ORA       A
  320.           DCR       B
  321.           JNZ       DELAY1
  322.           POP       B
  323.           RET
  324.  
  325. ;===============================================================è;    TIMING TEST
  326. ;
  327. TIME:     
  328.           MVI       E,'S'
  329.           MVI       C,2
  330.           CALL      5
  331.           LXI       B,15000   ;DELAY OF 15 SEC
  332. TIME1:    CALL      DELAY
  333.           DCX       B
  334.           MOV       A,B
  335.           ORA       C
  336.           JNZ       TIME1
  337.           
  338.           MVI       E,'F'
  339.           MVI       C,2
  340.           CALL      5
  341.           RET
  342.  
  343. ;===============================================================
  344. ;    CPU TEST BACKGROUND 
  345. ;===============================================================
  346. ;
  347. CPUTST;   XRA       A
  348.           STA       CPUERR
  349.           STA       CPUERR+1
  350.  
  351.           CALL      CALLT          ;TEST CALLS AND FLAGS
  352.           CALL      RETT           ;TEST RETURNS ABD FLAGS
  353.           CALL      JMPT           ;TEST JUMPS AND FLAGS
  354.           CALL      ROTT           ;  "  ROTATES AND SHIFTS
  355.           CALL      BMT            ;  "  BLOCK MOVES
  356.           CALL      MOVT           ;  "  MOVES
  357.           CALL      LOADT          ;  "  LOADS AND STORES
  358.           CALL      DADT           ;  "  DOUBBLE ADDS AND SUBS.
  359.           CALL      INCT           ;  "  REG. INC. AND DEC.
  360.           CALL      ACCT           ;  "  ACCUMULATOR INSTRUCTIONS
  361.           CALL      TIME           ; TIMING TEST
  362.           
  363.  
  364. XIT:      XRA       A              ;PREPAIR TO RETURN TO PASCAL-Z
  365.           LXI       H,CPUERR       ;GET THE ADDRESS OF ERROR FLAG
  366.           MOV       E,M  
  367.           INX       H
  368.           MOV       D,M
  369.           RET        
  370.  
  371.  
  372.  
  373.  
  374.  
  375.