home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / jsage / znode3 / z3util / array10b.lbr / ARRAY4.ZZ0 / ARRAY4.Z80
Encoding:
Text File  |  1993-06-07  |  3.1 KB  |  100 lines

  1. ;Library Name: ARRAYLIB
  2. ;Module Name: USEMDU
  3. ;Author: Al Hawley
  4. ;Date: 06 Mar 1987
  5. ;Version number: 1.0a
  6. ;Previous version: 1.0 dated 4 March 1987
  7.  
  8. ;Version History:
  9.     
  10. ;Program Function: ARRAYLIB is a collection of subroutines which
  11. ;    implement the management of byte arrays in programs written
  12. ;    for Z80 or HD64180 based computers. This module is one of the
  13. ;    set, and may require the presence of others.
  14.  
  15. ;***************************************************
  16. ;        COPYRIGHT NOTICE
  17. ;ARRAYLIB is copyright by A. E. Hawley on March 4, 1987.
  18. ;It may be freely distributed, but it must not be sold 
  19. ;either separately or as part of a package without the 
  20. ;written consent of the author.  The author may be reached 
  21. ;via electronic mail at the Ladera Z-Node in Los Angeles,
  22. ;213-670-9465, or by U.S. Mail at:
  23. ;
  24. ;    6032 Chariton Ave.
  25. ;    Los Angeles, CA. 90056
  26. ;    Voice Phone: 213-649-3575
  27. ;
  28. ;        RELEASE NOTICE
  29. ;ARRAYLIB is released for beta test through the Z-system 
  30. ;users group Z-SIG.  It may be reached through the 
  31. ;Lillipute Z-Node in Chicago, 312-649-1730.
  32.  
  33. ;***************************************************
  34.  
  35.     name usemdu
  36. ;This module contains the following routines:
  37.     public arrmaxdu
  38. ;..and uses the following external routines:
  39.     ext arrfr0$e,arxltbit,arvisiti,ardoblok,arrbcmsk
  40.  
  41. arrmaxdu:
  42. ;initialize an array whose assignment is to
  43. ;represent a disk/user bitmap. this routine
  44. ;sets all bits to '1' in the range from
  45. ; disk A, user 0 through the row designated by maxdsk and 
  46. ; the bit position in that row designated by maxusr. 
  47. ;on entry, the array must have been defined by
  48. ;a call to ARRDEFDU or ARRAYDEF. In addition, bc must
  49. ;contain maximum disk(1-16) and maximum user (0-31)
  50.  
  51.     push    bc        ;save input arguments
  52.     xor    a        ;initialization value
  53.     call    arrfr0$e    ;initialize to empty
  54. ;ARRFR0$E returns error code in A and CY set if array
  55. ;is undefined.
  56.     pop    bc
  57.     ret    c        ;ret if array is undefined
  58.     dec    b        ;convert drive(1..) to row(0..)
  59.     call    arxltbit    ;convert user into a column number and 
  60.                 ;a remainder (in acc and in reg e)
  61.     push    bc        ;save row, col
  62.     push    de        ;save bit position (e)
  63. ;set up function for ARDOBLOK to perform
  64.     ld    hl,wrtacc
  65.     ld    a,0ffh        ;value to write
  66.     ld    (wrtacc+1),a
  67.     call    arvisiti
  68. ;walk through the array up to max d/u
  69. ;marking all bits '1'
  70.     xor    a        ;make a zero
  71.     cp    c        ;only 1 column to do?
  72.     jr    z,lastcol    ;yes, if c=0
  73. ;more than one column, do all but the last one
  74.     dec    c        ;do last column separately
  75.     ld    d,b        ;last addr in block
  76.     ld    e,c        ;..in de
  77.     ld    bc,0        ;start at row 0, col 0
  78.     call    ardoblok
  79. ;now recover the remainder, and initialize the
  80. ;last column if the remainder is not 0.
  81. lastcol:
  82.     pop    de        ;max user, modulo 8
  83.     ld    a,e        ;..in a
  84.     call    arrbcmsk    ;generate mask in a
  85.     ld    (wrtacc+1),a
  86.     pop    de        ;last row, max user
  87.     ld    b,0        ;start at row 0
  88.     ld    c,e        ;..and max user
  89.     call    ardoblok    ;install the mask in the max user col
  90.     ret
  91.  
  92. ;function for ARRVISIT to perform - write a byte at hl
  93. ;the byte to write is determined by in-the-code modification
  94. wrtacc:    ld    (hl),0        ;0 is replaced before call from ARRVISIT:
  95.     ret
  96.  
  97. ;*************************************************
  98.  
  99.     end
  100.