home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / UTILS / ARC-LBR / NLUPATCH.MAC < prev    next >
Text File  |  2000-06-30  |  3KB  |  77 lines

  1. ; Patches to NULU 1.51 (to 1.52) for faster CRC generation, and to
  2. ; allow CCITCRC use (the last two bytes of the file are not included
  3. ; in its internal CRC self-check, allowing them to be patched to the
  4. ; CCITCRC checksum, causing CCITCRC to report 0). Load time cut from
  5. ; 4.9 secs to 2.3 secs on 2.5 Mhz Kaypro 4 of which 1.2 is load time.
  6. ; C.B. Falconer, 680 Hartford Tpk, Hamden Conn. 06517 (203) 281-1438
  7. ;
  8. ; Suggest changing the Y command so that it reports the library
  9. ; directory (if open) in a compact form, unless a drive spec is used,
  10. ; when it reports the drive directory.  Analogous to the D command.
  11. ;
  12. ; The only video characteristic I have is FLASHING.  Useless with
  13. ; the present setup.   If used to report attribute bits, the headers
  14. ; flash.  Suggest two more strings, and define them by system usage
  15. ; rather than terminal characteristics.  Seems to be 1: Sweep header
  16. ; 2: attribute bits 3: directory headers, with 2 and 3 merged now.
  17. ; Attribute bits could be reported by setting the file character to
  18. ; lower case (a blank becomes a `).  Could be conditioned by a
  19. ; user settable patch, i.e. 0..5 = none, video case 1, 2, 3, lowcase.
  20. ;
  21.     org    010ch;        Revised sign-on, ISO std. date
  22.     db    '2 (86/2/23)  '
  23. ;
  24.     org    0149h;        Revised self-check range and CRC
  25.     lxi    b,03a7fh
  26.     ds    3;        unchanged orig. call
  27.     lxi    d,0da91h;    revised crc checksum for file
  28. ;
  29.     org    01a60h
  30. ; crc for (bc) bytes from (hl) up, initialized to (de)
  31. ; leaves de pointing past last byte.  Result in hl, bc=0
  32. ; a,f,b,c,d,e,h,l
  33. .crcrg:    xchg
  34. crcrg1:    mov a,c ! ora b ! rz;    zero range, exit
  35.     push    d;        CRC push/pop d moved to here
  36.     ldax d    ! call .crc
  37.     pop    d
  38.     inx d    ! dcx b
  39.     jmp    crcrg1
  40. ;
  41.     org    03a11h
  42. ; This algorithm needs no final zeroes injected, but returns
  43. ; with the bytes interchanged from the slow routine.
  44. .fincrc:
  45.     push    psw
  46.     mov a,h ! mov h,l ! mov l,a
  47.     pop    psw
  48.     ret
  49. ;
  50.     org    03b14h;        for NULU 1.51 to 1.52 patch
  51. ; This crc routine updates the checkword in (bc) using the byte
  52. ; passed in (a). The checkwords computed are suitable for IBM
  53. ; floppy disk communications. The two byte checkword is the word
  54. ; produced by the generating polynomial x**16 + x**12 + x**5 + 1.
  55. ; The checksum should be initialized to 0ffffh (i.e. 0ffffh is
  56. ; passed in bc when the checksum sequence is started) to detect
  57. ; variations in length of initial zero strings. The new checksum
  58. ; is returned in (bc).
  59. ; a,f,b,c-->        FOR NULU patch, hl for bc, de modified.
  60. .crc:    ;push    d;    changes to alter i/o reg bc/hl. bc in PASCLIB
  61.     xra    l;            c/l
  62.     mov    d,a
  63.     rrc ! rrc ! rrc ! rrc
  64.     ani 0fh    ! xra d ! mov e,a
  65.     rrc ! rrc ! rrc
  66.     mov    d,a
  67.     ani 1fh    ! xra h ! mov l,a;    b/h, c/l
  68.     mov a,d    ! ani 0e0h
  69.     xra e    ! mov h,a;        b/h
  70.     mov    a,d
  71.     rrc
  72.     ani 0f0h ! xra l ! mov l,a;    c/l
  73. ;    pop    d;        <-- REMOVED TO FIT IN NULU space.
  74.     ret
  75. ;
  76.     end
  77. e#