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 / ZCPR2 / IOLOADER.MQC / IOLOADER.MAC
Text File  |  2000-06-30  |  7KB  |  302 lines

  1. ;  PROGRAM:  IOLOADER
  2. ;  AUTHOR:  RICHARD CONN
  3. ;  VERSION:  1.3
  4. ;  DATE:  6 Jan 83
  5. ;  PREVIOUS VERSIONS:  1.0 (10 Oct 82), 1.1 (29 Dec 82), 1.2 (5 Jan 83)
  6. ;
  7. VERS    EQU    13
  8.  
  9. ;
  10. ;    This program is Copyright (c) 1982, 1983 by Richard Conn
  11. ;    All Rights Reserved
  12. ;
  13. ;    ZCPR2 and its utilities, including this one, are released
  14. ; to the public domain.  Anyone who wishes to USE them may do so with
  15. ; no strings attached.  The author assumes no responsibility or
  16. ; liability for the use of ZCPR2 and its utilities.
  17. ;
  18. ;    The author, Richard Conn, has sole rights to this program.
  19. ; ZCPR2 and its utilities may not be sold without the express,
  20. ; written permission of the author.
  21. ;
  22.  
  23.  
  24. ;
  25. ;    IOLOADER is a program which loads a file of Redirectable I/O
  26. ; Drivers into the proper place in the CHBIOSZ for later use.  This
  27. ; place is defined by the IOBADR buffer in the front of this program.
  28. ;
  29. ;    IOLOADER is invoked in one of two ways:
  30. ;        IOLOADER -- Loads the File SYSIO.IO
  31. ;        IOLOADER filename -- Loads the File filename.IO
  32. ;        IOLOADER filename.typ -- Loads the File filename.typ
  33. ;
  34.     EXT    PRINT,ZGPINS,CLINE,MOVEB,LOGUD,BDOS
  35.     EXT    ZFNAME,ZPFIND,F$OPEN,F$CLOSE,F$READ,INITFCB
  36.  
  37. TBUFF    EQU    80H    ;TBUFF OF ZCPR2
  38. CR    EQU    0DH
  39. LF    EQU    0AH
  40.  
  41. ;
  42. ;  Branch to Start of Program
  43. ;
  44.     jmp    start
  45.  
  46. ;
  47. ;******************************************************************
  48. ;
  49. ;  SINSFORM -- ZCPR2 Utility Standard General Purpose Initialization Format
  50. ;
  51. ;    This data block precisely defines the data format for
  52. ; initial features of a ZCPR2 system which are required for proper
  53. ; initialization of the ZCPR2-Specific Routines in SYSLIB.
  54. ;
  55.  
  56. ;
  57. ;  EXTERNAL PATH DATA
  58. ;
  59. EPAVAIL:
  60.     DB    0FFH    ; IS EXTERNAL PATH AVAILABLE? (0=NO, 0FFH=YES)
  61. EPADR:
  62.     DW    40H    ; ADDRESS OF EXTERNAL PATH IF AVAILABLE
  63.  
  64. ;
  65. ;  INTERNAL PATH DATA
  66. ;
  67. INTPATH:
  68.     DB    0,0    ; DISK, USER FOR FIRST PATH ELEMENT
  69.             ; DISK = 1 FOR A, '$' FOR CURRENT
  70.             ; USER = NUMBER, '$' FOR CURRENT
  71.     DB    0,0
  72.     DB    0,0
  73.     DB    0,0
  74.     DB    0,0
  75.     DB    0,0
  76.     DB    0,0
  77.     DB    0,0    ; DISK, USER FOR 8TH PATH ELEMENT
  78.     DB    0    ; END OF PATH
  79.  
  80. ;
  81. ;  MULTIPLE COMMAND LINE BUFFER DATA
  82. ;
  83. MCAVAIL:
  84.     DB    0FFH    ; IS MULTIPLE COMMAND LINE BUFFER AVAILABLE?
  85. MCADR:
  86.     DW    0FF00H    ; ADDRESS OF MULTIPLE COMMAND LINE BUFFER IF AVAILABLE
  87.  
  88. ;
  89. ;  DISK/USER LIMITS
  90. ;
  91. MDISK:
  92.     DB    4    ; MAXIMUM NUMBER OF DISKS
  93. MUSER:
  94.     DB    31    ; MAXIMUM USER NUMBER
  95.  
  96. ;
  97. ;  FLAGS TO PERMIT LOG IN FOR DIFFERENT USER AREA OR DISK
  98. ;
  99. DOK:
  100.     DB    0FFH    ; ALLOW DISK CHANGE? (0=NO, 0FFH=YES)
  101. UOK:
  102.     DB    0FFH    ; ALLOW USER CHANGE? (0=NO, 0FFH=YES)
  103.  
  104. ;
  105. ;  PRIVILEGED USER DATA
  106. ;
  107. PUSER:
  108.     DB    10    ; BEGINNING OF PRIVILEGED USER AREAS
  109. PPASS:
  110.     DB    'chdir',0    ; PASSWORD FOR MOVING INTO PRIV USER AREAS
  111.     DS    41-($-PPASS)    ; 40 CHARS MAX IN BUFFER + 1 for ending NULL
  112.  
  113. ;
  114. ;  CURRENT USER/DISK INDICATOR
  115. ;
  116. CINDIC:
  117.     DB    '$'    ; USUAL VALUE (FOR PATH EXPRESSIONS)
  118.  
  119. ;
  120. ;  DMA ADDRESS FOR DISK TRANSFERS
  121. ;
  122. DMADR:
  123.     DW    80H    ; TBUFF AREA
  124.  
  125. ;
  126. ;  NAMED DIRECTORY INFORMATION
  127. ;
  128. NDRADR:
  129.     DW    00000H    ; ADDRESS OF MEMORY-RESIDENT NAMED DIRECTORY
  130. NDNAMES:
  131.     DB    64    ; MAX NUMBER OF DIRECTORY NAMES
  132. DNFILE:
  133.     DB    'NAMES   '    ; NAME OF DISK NAME FILE
  134.     DB    'DIR'        ; TYPE OF DISK NAME FILE
  135.  
  136. ;
  137. ;  REQUIREMENTS FLAGS
  138. ;
  139. EPREQD:
  140.     DB    0FFH    ; EXTERNAL PATH?
  141. MCREQD:
  142.     DB    000H    ; MULTIPLE COMMAND LINE?
  143. MXREQD:
  144.     DB    000H    ; MAX USER/DISK?
  145. UDREQD:
  146.     DB    000H    ; ALLOW USER/DISK CHANGE?
  147. PUREQD:
  148.     DB    000H    ; PRIVILEGED USER?
  149. CDREQD:
  150.     DB    0FFH    ; CURRENT INDIC AND DMA?
  151. NDREQD:
  152.     DB    000H    ; NAMED DIRECTORIES?
  153. Z2CLASS:
  154.     DB    1    ; CLASS 1
  155.     DB    'ZCPR2'
  156.     DS    10    ; RESERVED
  157.  
  158. ;
  159. ;  END OF SINSFORM -- STANDARD DEFAULT PARAMETER DATA
  160. ;
  161. ;******************************************************************
  162. ;
  163. IOBADR:
  164.     DW    0    ;Base Address of I/O System
  165.  
  166. ;
  167. ;  Start of Program
  168. ;
  169. START:
  170.     CALL    ZGPINS        ;INIT BUFFERS
  171.     CALL    PRINT        ;PRINT BANNER
  172.     DB    'IOLOADER, Version ',VERS/10+'0','.',(VERS MOD 10)+'0',0
  173.     LHLD    IOBADR        ;BASE OF IO SYSTEM INITIALIZED?
  174.     MOV    A,H
  175.     ORA    L
  176.     JNZ    IOL1
  177.     CALL    PRINT
  178.     DB    CR,LF,'I/O Base Address Not Initialized -- Aborting',0
  179.     RET
  180.  
  181. ;  DETERMINE FILE NAME
  182. IOL1:
  183.     LXI    H,TBUFF        ;PT TO TBUFF
  184.     CALL    CLINE        ;EXTRACT LINE AS STRING
  185.     CALL    SBLANK        ;SKIP TO NON-BLANK
  186.     CPI    '/'        ;HELP?
  187.     JNZ    IOL2        ;CONTINUE IF NOT
  188.     CALL    PRINT        ;PRINT HELP MESSAGE
  189.     DB    CR,LF,'    IOLOADER is used to load the Redirectable I/O'
  190.     DB    CR,LF,'Drivers for CHBIOSZ.  It is invoked by one of the'
  191.     DB    CR,LF,'following forms --'
  192.     DB    CR,LF,'       IOLOADER        <-- Loads SYSIO.IO'
  193.     DB    CR,LF,'       IOLOADER //        <-- Print HELP Msg'
  194.     DB    CR,LF,'       IOLOADER file    <-- Loads file.IO'
  195.     DB    CR,LF,'       IOLOADER file.typ    <-- Loads file.typ'
  196.     DB    CR,LF,0
  197.     RET
  198.  
  199. ;  DETERMINE FILE NAME AND FIND FILE
  200. IOL2:
  201.     LXI    D,DEFCB    ;PT TO DEFAULT FCB
  202.     ORA    A    ;USE DEFAULT NAME?
  203.     JZ    IOL2A
  204.     LXI    D,FCB    ;PT TO FCB
  205.     PUSH    D    ;SAVE PTR
  206.     CALL    ZFNAME    ;EXTRACT NAME DATA
  207.     LXI    D,FCBTYP    ;ANY TYPE SPECIFIED?
  208.     LXI    H,IOTYP    ;PREP TO SET UP I/O TYPE
  209.     MVI    B,3    ;3 BYTES
  210.     LDAX    D    ;GET TYPE SPECIFIED
  211.     CPI    ' '    ;ANY?
  212.     CZ    MOVEB    ;COPY IF NOT
  213.     POP    D    ;DE PTS TO FCB OF FILE TO LOOK FOR
  214. IOL2A:
  215.     MVI    B,0FFH    ;SEARCH CURRENT USER/DISK FIRST
  216.     CALL    ZPFIND    ;SEARCH FOR FILE
  217.     JNZ    IOL3    ;LOAD FILE
  218.     CALL    PRINT
  219.     DB    CR,LF,'I/O Driver NOT Found',0
  220.     RET
  221.  
  222. ;  LOAD FILE
  223. IOL3:
  224.     CALL    LOGUD        ;LOG INTO DIRECTORY
  225.     CALL    INITFCB        ;INIT FCB
  226.     CALL    F$OPEN        ;OPEN FILE FOR INPUT
  227.     PUSH    D        ;SAVE FCB PTR
  228.     LHLD    IOBADR        ;GET ADDRESS OF I/O BASE
  229.     LXI    D,-128        ;BACK UP 1 BLOCK
  230.     DAD    D
  231.     POP    D        ;GET FCB PTR
  232.     SHLD    DMAADR        ;SAVE IN BUFFER FOR NOW
  233.  
  234. ;  FILE LOADING LOOP
  235. IOL4:
  236.     PUSH    D        ;SAVE FCB PTR
  237.     LHLD    DMAADR        ;GET ADDRESS OF LAST BLOCK LOADED
  238.     LXI    D,128        ;PT TO NEXT BLOCK TO LOAD
  239.     DAD    D
  240.     SHLD    DMAADR        ;SAVE ADDRESS OF CURRENT BLOCK LOADING
  241.     XCHG            ;DE PTS TO ADDRESS
  242.     MVI    C,26        ;SET DMA ADDRESS
  243.     CALL    BDOS
  244.     POP    D        ;GET FCB PTR
  245.     CALL    F$READ        ;READ NEXT BLOCK
  246.     ORA    A        ;0=CONTINUE
  247.     JZ    IOL4
  248.  
  249. ;  CLOSE FILE
  250.     CALL    F$CLOSE
  251.  
  252. ;  RUN THE TERMINAL INIT ROUTINE
  253.     CALL    TINIT    ;RUN THE INIT ROUTINE
  254.  
  255. ;  PRINT FINAL MESSAGE AND EXIT
  256.     CALL    PRINT
  257.     DB    CR,LF,'Load Complete',0
  258.     RET
  259.  
  260. ;
  261. ;  TERMINAL INIT ROUTINE FROM I/O DRIVERS
  262. ;
  263. TINIT:
  264.     LHLD    IOBADR        ;GET ADDRESS OF I/O BASE
  265.     LXI    D,9        ;ADD 9 FOR TINIT OFFSET
  266.     DAD    D
  267.     PCHL
  268.  
  269. ;  SKIP TO NON-BLANK
  270. SBLANK:
  271.     MOV    A,M    ;GET CHAR
  272.     INX    H    ;PT TO NEXT
  273.     CPI    ' '    ;BLANK?
  274.     JZ    SBLANK
  275.     DCX    H    ;PT TO NON-BLANK
  276.     RET
  277.  
  278. ;  BUFFERS
  279.     DS    60    ;30-ELT STACK
  280. STACK:    DS    2    ;OLD STACK PTR
  281.  
  282. FCBPTR:    DS    2    ;POINTER TO FCB FOR FILE SEARCH
  283.  
  284. DMAADR:    DS    2    ;ADDRESS OF NEXT BLOCK TO LOAD
  285.  
  286. TMPUSR:    DS    1    ;CURRENT USER NUMBER
  287.  
  288. FCB:
  289.     DS    9
  290. FCBTYP:
  291.     DS    3
  292.     DS    24
  293.  
  294. DEFCB:
  295.     DB    0    ;CURRENT DISK
  296.     DB    'SYSIO   '
  297. IOTYP:
  298.     DB    'IO '
  299.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  300.  
  301.     END
  302.