home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / zsys / simtel20 / z3lib / zlib1.lbr / Z3GIOX.Z80 < prev    next >
Encoding:
Text File  |  1986-02-07  |  2.3 KB  |  93 lines

  1. ;
  2. ; Z3LIB Module Name:  Z3GIOX (general IOP support)
  3. ; Author:  Richard Conn
  4. ; Z3LIB  Version Number:  1.3
  5. ; Module Version Number:  1.1
  6. ;
  7.     public    putiod,getion,getios
  8.  
  9.     ext    envptr,getiop
  10.  
  11. ;
  12. ;    PUTIOD selects the device indicated by logical id in B and physical
  13. ; selection in C.  B is the number of the logical device, where CON: = 0,
  14. ; RDR: = 1, PUN: = 2, and LST: = 3.  Return with A=0 and Zero Flag Set if
  15. ; error.
  16. ;
  17. ;    Only PSW is affected.
  18. ;
  19. putiod:
  20.     push    hl        ; save regs
  21.     push    de
  22.     push    bc
  23.     call    getioc        ; get IOP address and check
  24.     jp    z,iodret
  25.     ld    de,iodret    ; set return address
  26.     push    de        ; ... on stack
  27.     inc    hl        ; pt to routine
  28.     inc    hl
  29.     inc    hl
  30.     jp    (hl)        ; "call" SELECT routine
  31. iodret:
  32.     pop    bc        ; restore regs
  33.     pop    de
  34.     pop    hl
  35.     ret            ; error flags set by NAMER in IOP
  36.  
  37. ;
  38. ;    GETION returns a pointer to the string describing the device
  39. ; whose logical number is in B and physical selection in C.  This pointer
  40. ; is in HL.  If no error, return with HL pointing to the string (terminated
  41. ; by a null) and A=0FFH with NZ.  If error (such as no IOP), A=0 and Z
  42. ; on return.
  43. ;
  44. getion:
  45.     call    getioc        ; get IOP address and check
  46.     ret    z
  47.     push    de        ; save regs
  48.     push    bc
  49.     ld    de,ionret    ; set return address
  50.     push    de        ; ... on stack
  51.     ld    de,6        ; pt to routine
  52.     add    hl,de
  53.     jp    (hl)        ; "call" NAMER routine
  54. ionret:
  55.     pop    bc        ; restore regs
  56.     pop    de
  57.     ret            ; error flags set by NAMER in IOP
  58.  
  59. ;
  60. ;    GETIOS returns a pointer to the I/O Package status table
  61. ; in HL.  This table is structured as follows:
  62. ;
  63. ;                Number of    Current
  64. ;        Bytes    Device    Devices        Assignment
  65. ;        -----    ------    ---------    ----------
  66. ;         0-1     CON:     Byte 0          Byte 1
  67. ;         2-3     RDR:     Byte 2          Byte 3
  68. ;         4-5     PUN:     Byte 4          Byte 5
  69. ;         6-7     LST:     Byte 6          Byte 7
  70. ;
  71. ;    GETIOS returns A=0 and Zero Flag Set if no IOP loaded.
  72. ; If loaded, A=0FFH and NZ and HL = address of table
  73. ;
  74. getios:
  75.     call    getioc        ; check for I/O
  76.     ret    z
  77.     jp    (hl)        ; run routine
  78.  
  79. ;
  80. ;  Return the address of the IOP in HL if exists and is loaded; return
  81. ;  A=0 and Z if error, A<>0 and NZ if OK
  82. ;
  83. getioc:
  84.     call    getiop        ; get I/O Package address
  85.     ret    z
  86.     ld    a,(hl)        ; check for loaded I/O Package
  87.     or    a
  88.     ret    z
  89.     ld    a,0ffh        ; OK
  90.     ret
  91.  
  92.     end
  93.