Subversion Repositories NedoOS

Rev

Rev 2265 | 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.             nop
  74.             jp      EMU_QUIT
  75.  
  76.  
  77. .test       push    bc                          ; preserve number of failures
  78.  
  79.             ld      a,c                         ; print test number
  80.             call    printdeca
  81.  
  82.             ld      a,' '
  83.             call    printchr
  84.  
  85.             ld      hl,1+3*vecsize+4            ; print test name
  86.             add     hl,de
  87.  
  88.             call    printhl
  89.  
  90.             pop     bc                          ; restore number of failures
  91.  
  92.             ld      a,(hl)                      ; see if some special check is needed
  93.             cp      1
  94.             jr      z,.incheck
  95.             jr      nc,.pass
  96.  
  97. .failcheck  or      b                           ; some prior failure means do the test
  98.             jr      nz,.pass
  99.  
  100.             call    print                       ; print that the test was skipped
  101.             db      23,32-7,1,"Skipped",13,0
  102.  
  103.             ret                                 ; return success
  104.  
  105. .incheck    xor     a                           ; expected IN value means do the test
  106.             in      a,(0xfe)
  107.             cp      0xbf                        ; %10111111 - just MIC bit is zero
  108.             jr      z,.pass
  109.  
  110.             ld      e,a
  111.  
  112.             call    print                       ; print the IN mismatch message
  113.             db      23,32-6,1,"FAILED",13
  114.             db      "IN FE:",0
  115.  
  116.             ld      a,e
  117.             call    printhexa
  118.  
  119.             call    print
  120.             db      23,32-11,1,"Expected:BF",13,0
  121.  
  122.             inc     a                           ; return failure
  123.             ret
  124.  
  125. .pass       ld      hl,1+3*vecsize              ; store expected CRC address
  126.             add     hl,de
  127.             push    hl
  128.  
  129.             ex      de,hl                       ; run the test with test vector at HL
  130.  
  131.             call    test
  132.  
  133.             ld      hl,data+3                   ; store computed CRC
  134.  
  135.             ld      (hl),e
  136.             dec     hl
  137.             ld      (hl),d
  138.             dec     hl
  139.             ld      (hl),c
  140.             dec     hl
  141.             ld      (hl),b
  142.  
  143.             pop     de                          ; get expected CRC address
  144.  
  145.             ld      b,4                         ; compare CRCs
  146.             call    .cmp
  147.  
  148.             jr      nz,.mismatch                ; check for mismatch
  149.  
  150.             call    print                       ; print success
  151.             db      23,32-2,1,"OK",13,0
  152.  
  153.             ret                                 ; return success
  154.  
  155. .mismatch   call    print                       ; print mismatched and expected CRC
  156.             db      23,32-6,1,"FAILED",13
  157.             db      "CRC:",0
  158.  
  159.             call    printcrc
  160.  
  161.             call    print
  162.             db      "   Expected:",0
  163.  
  164.             ex      de,hl
  165.             call    printcrc
  166.  
  167.             ld      a,13
  168.             call    printchr
  169.  
  170.             ld      a,1                         ; return failure
  171.             ret
  172.  
  173. .cmp        push    hl                          ; compare B bytes at HL and DE
  174.             push    de
  175. .cmploop    ld      a,(de)
  176.             xor     (hl)
  177.             jr      nz,.exit
  178.             inc     de
  179.             inc     hl
  180.             djnz    .cmploop
  181. .exit       pop     de
  182.             pop     hl
  183.             ret
  184.  
  185.             include print.asm
  186.  
  187.             align   256
  188.  
  189.             include idea.asm
  190.             include tests.asm
  191.  
  192. ; EOF ;
  193.