Subversion Repositories NedoOS

Rev

Rev 2254 | Blame | Compare with Previous | Last modification | View Log | Download

  1. ; Main driver for the Z80 tester.
  2. ;
  3. ; Copyright (C) 2012-2023 Patrik Rak (patrik@raxoft.cz)
  4. ;
  5. ; This source code is released under the MIT license, see included license.txt.
  6.  
  7.             org     0x8000
  8.  
  9. main:       di                                  ; disable interrupts
  10.             push    iy                          ; preserve stuff needed by BASIC
  11.             exx
  12.             push    hl
  13.  
  14.             call    printinit                   ; init printing module
  15.  
  16.             call    print                       ; print the header
  17.             db      "Z80 "
  18.             testname
  19.             db      " test"
  20.             db      23,32-13,1,127," 2012 RAXOFT",13,13,0
  21.  
  22.             ld      bc,0                        ; setup for test loop
  23.             ld      hl,testtable
  24.             jr      .entry
  25.  
  26. .loop       push    hl                          ; call the test wrapper
  27.             push    bc
  28.             call    .test
  29.             pop     bc
  30.             pop     hl
  31.  
  32.             add     a,b                         ; accumulate failures
  33.             ld      b,a
  34.  
  35.             inc     c                           ; count number of tests
  36.  
  37. .entry      ld      e,(hl)                      ; fetch test address
  38.             inc     hl
  39.             ld      d,(hl)
  40.             inc     hl
  41.  
  42.             ld      a,d                         ; loop until we are done
  43.             or      e
  44.             jr      nz,.loop
  45.  
  46.             call    print                       ; print result intro
  47.             db      13,"Result: ",0
  48.  
  49.             ld      a,b                         ; no failures means success
  50.             or      a
  51.             jr      z,.ok
  52.  
  53.             call    printdeca                   ; print number of failed tests
  54.  
  55.             call    print
  56.             db      " of ",0
  57.  
  58.             ld      a,c
  59.             call    printdeca
  60.  
  61.             call    print
  62.             db      " tests failed.",13,0
  63.             jr      .done
  64.  
  65. .ok         call    print                       ; print success message
  66.             db      "all tests passed.",13,0
  67.  
  68. .done       pop     hl                          ; return to BASIC
  69.             exx
  70.             pop     iy
  71.             ei
  72.             ret
  73.  
  74. .test       push    bc                          ; preserve number of failures
  75.  
  76.             ld      a,c                         ; print test number
  77.             call    printdeca
  78.  
  79.             ld      a,' '
  80.             call    printchr
  81.  
  82.             ld      hl,1+3*vecsize+4            ; print test name
  83.             add     hl,de
  84.  
  85.             call    printhl
  86.  
  87.             pop     bc                          ; restore number of failures
  88.  
  89.             ld      a,(hl)                      ; see if some special check is needed
  90.             cp      1
  91.             jr      z,.incheck
  92.             jr      nc,.pass
  93.  
  94. .failcheck  or      b                           ; some prior failure means do the test
  95.             jr      nz,.pass
  96.  
  97.             call    print                       ; print that the test was skipped
  98.             db      23,32-7,1,"Skipped",13,0
  99.  
  100.             ret                                 ; return success
  101.  
  102. .incheck    xor     a                           ; expected IN value means do the test
  103.             in      a,(0xfe)
  104.             cp      0xbf                        ; %10111111 - just MIC bit is zero
  105.             jr      z,.pass
  106.  
  107.             ld      e,a
  108.  
  109.             call    print                       ; print the IN mismatch message
  110.             db      23,32-6,1,"FAILED",13
  111.             db      "IN FE:",0
  112.  
  113.             ld      a,e
  114.             call    printhexa
  115.  
  116.             call    print
  117.             db      23,32-11,1,"Expected:BF",13,0
  118.  
  119.             inc     a                           ; return failure
  120.             ret
  121.  
  122. .pass       ld      hl,1+3*vecsize              ; store expected CRC address
  123.             add     hl,de
  124.             push    hl
  125.  
  126.             ex      de,hl                       ; run the test with test vector at HL
  127.  
  128.             call    test
  129.  
  130.             ld      hl,data+3                   ; store computed CRC
  131.  
  132.             ld      (hl),e
  133.             dec     hl
  134.             ld      (hl),d
  135.             dec     hl
  136.             ld      (hl),c
  137.             dec     hl
  138.             ld      (hl),b
  139.  
  140.             pop     de                          ; get expected CRC address
  141.  
  142.             ld      b,4                         ; compare CRCs
  143.             call    .cmp
  144.  
  145.             jr      nz,.mismatch                ; check for mismatch
  146.  
  147.             call    print                       ; print success
  148.             db      23,32-2,1,"OK",13,0
  149.  
  150.             ret                                 ; return success
  151.  
  152. .mismatch   call    print                       ; print mismatched and expected CRC
  153.             db      23,32-6,1,"FAILED",13
  154.             db      "CRC:",0
  155.  
  156.             call    printcrc
  157.  
  158.             call    print
  159.             db      "   Expected:",0
  160.  
  161.             ex      de,hl
  162.             call    printcrc
  163.  
  164.             ld      a,13
  165.             call    printchr
  166.  
  167.             ld      a,1                         ; return failure
  168.             ret
  169.  
  170. .cmp        push    hl                          ; compare B bytes at HL and DE
  171.             push    de
  172. .cmploop    ld      a,(de)
  173.             xor     (hl)
  174.             jr      nz,.exit
  175.             inc     de
  176.             inc     hl
  177.             djnz    .cmploop
  178. .exit       pop     de
  179.             pop     hl
  180.             ret
  181.  
  182.             include print.asm
  183.  
  184.             align   256
  185.  
  186.             include idea.asm
  187.             include tests.asm
  188.  
  189. ; EOF ;
  190.