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
Wrap
Text File
|
2000-06-30
|
7KB
|
302 lines
; PROGRAM: IOLOADER
; AUTHOR: RICHARD CONN
; VERSION: 1.3
; DATE: 6 Jan 83
; PREVIOUS VERSIONS: 1.0 (10 Oct 82), 1.1 (29 Dec 82), 1.2 (5 Jan 83)
;
VERS EQU 13
;
; This program is Copyright (c) 1982, 1983 by Richard Conn
; All Rights Reserved
;
; ZCPR2 and its utilities, including this one, are released
; to the public domain. Anyone who wishes to USE them may do so with
; no strings attached. The author assumes no responsibility or
; liability for the use of ZCPR2 and its utilities.
;
; The author, Richard Conn, has sole rights to this program.
; ZCPR2 and its utilities may not be sold without the express,
; written permission of the author.
;
;
; IOLOADER is a program which loads a file of Redirectable I/O
; Drivers into the proper place in the CHBIOSZ for later use. This
; place is defined by the IOBADR buffer in the front of this program.
;
; IOLOADER is invoked in one of two ways:
; IOLOADER -- Loads the File SYSIO.IO
; IOLOADER filename -- Loads the File filename.IO
; IOLOADER filename.typ -- Loads the File filename.typ
;
EXT PRINT,ZGPINS,CLINE,MOVEB,LOGUD,BDOS
EXT ZFNAME,ZPFIND,F$OPEN,F$CLOSE,F$READ,INITFCB
TBUFF EQU 80H ;TBUFF OF ZCPR2
CR EQU 0DH
LF EQU 0AH
;
; Branch to Start of Program
;
jmp start
;
;******************************************************************
;
; SINSFORM -- ZCPR2 Utility Standard General Purpose Initialization Format
;
; This data block precisely defines the data format for
; initial features of a ZCPR2 system which are required for proper
; initialization of the ZCPR2-Specific Routines in SYSLIB.
;
;
; EXTERNAL PATH DATA
;
EPAVAIL:
DB 0FFH ; IS EXTERNAL PATH AVAILABLE? (0=NO, 0FFH=YES)
EPADR:
DW 40H ; ADDRESS OF EXTERNAL PATH IF AVAILABLE
;
; INTERNAL PATH DATA
;
INTPATH:
DB 0,0 ; DISK, USER FOR FIRST PATH ELEMENT
; DISK = 1 FOR A, '$' FOR CURRENT
; USER = NUMBER, '$' FOR CURRENT
DB 0,0
DB 0,0
DB 0,0
DB 0,0
DB 0,0
DB 0,0
DB 0,0 ; DISK, USER FOR 8TH PATH ELEMENT
DB 0 ; END OF PATH
;
; MULTIPLE COMMAND LINE BUFFER DATA
;
MCAVAIL:
DB 0FFH ; IS MULTIPLE COMMAND LINE BUFFER AVAILABLE?
MCADR:
DW 0FF00H ; ADDRESS OF MULTIPLE COMMAND LINE BUFFER IF AVAILABLE
;
; DISK/USER LIMITS
;
MDISK:
DB 4 ; MAXIMUM NUMBER OF DISKS
MUSER:
DB 31 ; MAXIMUM USER NUMBER
;
; FLAGS TO PERMIT LOG IN FOR DIFFERENT USER AREA OR DISK
;
DOK:
DB 0FFH ; ALLOW DISK CHANGE? (0=NO, 0FFH=YES)
UOK:
DB 0FFH ; ALLOW USER CHANGE? (0=NO, 0FFH=YES)
;
; PRIVILEGED USER DATA
;
PUSER:
DB 10 ; BEGINNING OF PRIVILEGED USER AREAS
PPASS:
DB 'chdir',0 ; PASSWORD FOR MOVING INTO PRIV USER AREAS
DS 41-($-PPASS) ; 40 CHARS MAX IN BUFFER + 1 for ending NULL
;
; CURRENT USER/DISK INDICATOR
;
CINDIC:
DB '$' ; USUAL VALUE (FOR PATH EXPRESSIONS)
;
; DMA ADDRESS FOR DISK TRANSFERS
;
DMADR:
DW 80H ; TBUFF AREA
;
; NAMED DIRECTORY INFORMATION
;
NDRADR:
DW 00000H ; ADDRESS OF MEMORY-RESIDENT NAMED DIRECTORY
NDNAMES:
DB 64 ; MAX NUMBER OF DIRECTORY NAMES
DNFILE:
DB 'NAMES ' ; NAME OF DISK NAME FILE
DB 'DIR' ; TYPE OF DISK NAME FILE
;
; REQUIREMENTS FLAGS
;
EPREQD:
DB 0FFH ; EXTERNAL PATH?
MCREQD:
DB 000H ; MULTIPLE COMMAND LINE?
MXREQD:
DB 000H ; MAX USER/DISK?
UDREQD:
DB 000H ; ALLOW USER/DISK CHANGE?
PUREQD:
DB 000H ; PRIVILEGED USER?
CDREQD:
DB 0FFH ; CURRENT INDIC AND DMA?
NDREQD:
DB 000H ; NAMED DIRECTORIES?
Z2CLASS:
DB 1 ; CLASS 1
DB 'ZCPR2'
DS 10 ; RESERVED
;
; END OF SINSFORM -- STANDARD DEFAULT PARAMETER DATA
;
;******************************************************************
;
IOBADR:
DW 0 ;Base Address of I/O System
;
; Start of Program
;
START:
CALL ZGPINS ;INIT BUFFERS
CALL PRINT ;PRINT BANNER
DB 'IOLOADER, Version ',VERS/10+'0','.',(VERS MOD 10)+'0',0
LHLD IOBADR ;BASE OF IO SYSTEM INITIALIZED?
MOV A,H
ORA L
JNZ IOL1
CALL PRINT
DB CR,LF,'I/O Base Address Not Initialized -- Aborting',0
RET
; DETERMINE FILE NAME
IOL1:
LXI H,TBUFF ;PT TO TBUFF
CALL CLINE ;EXTRACT LINE AS STRING
CALL SBLANK ;SKIP TO NON-BLANK
CPI '/' ;HELP?
JNZ IOL2 ;CONTINUE IF NOT
CALL PRINT ;PRINT HELP MESSAGE
DB CR,LF,' IOLOADER is used to load the Redirectable I/O'
DB CR,LF,'Drivers for CHBIOSZ. It is invoked by one of the'
DB CR,LF,'following forms --'
DB CR,LF,' IOLOADER <-- Loads SYSIO.IO'
DB CR,LF,' IOLOADER // <-- Print HELP Msg'
DB CR,LF,' IOLOADER file <-- Loads file.IO'
DB CR,LF,' IOLOADER file.typ <-- Loads file.typ'
DB CR,LF,0
RET
; DETERMINE FILE NAME AND FIND FILE
IOL2:
LXI D,DEFCB ;PT TO DEFAULT FCB
ORA A ;USE DEFAULT NAME?
JZ IOL2A
LXI D,FCB ;PT TO FCB
PUSH D ;SAVE PTR
CALL ZFNAME ;EXTRACT NAME DATA
LXI D,FCBTYP ;ANY TYPE SPECIFIED?
LXI H,IOTYP ;PREP TO SET UP I/O TYPE
MVI B,3 ;3 BYTES
LDAX D ;GET TYPE SPECIFIED
CPI ' ' ;ANY?
CZ MOVEB ;COPY IF NOT
POP D ;DE PTS TO FCB OF FILE TO LOOK FOR
IOL2A:
MVI B,0FFH ;SEARCH CURRENT USER/DISK FIRST
CALL ZPFIND ;SEARCH FOR FILE
JNZ IOL3 ;LOAD FILE
CALL PRINT
DB CR,LF,'I/O Driver NOT Found',0
RET
; LOAD FILE
IOL3:
CALL LOGUD ;LOG INTO DIRECTORY
CALL INITFCB ;INIT FCB
CALL F$OPEN ;OPEN FILE FOR INPUT
PUSH D ;SAVE FCB PTR
LHLD IOBADR ;GET ADDRESS OF I/O BASE
LXI D,-128 ;BACK UP 1 BLOCK
DAD D
POP D ;GET FCB PTR
SHLD DMAADR ;SAVE IN BUFFER FOR NOW
; FILE LOADING LOOP
IOL4:
PUSH D ;SAVE FCB PTR
LHLD DMAADR ;GET ADDRESS OF LAST BLOCK LOADED
LXI D,128 ;PT TO NEXT BLOCK TO LOAD
DAD D
SHLD DMAADR ;SAVE ADDRESS OF CURRENT BLOCK LOADING
XCHG ;DE PTS TO ADDRESS
MVI C,26 ;SET DMA ADDRESS
CALL BDOS
POP D ;GET FCB PTR
CALL F$READ ;READ NEXT BLOCK
ORA A ;0=CONTINUE
JZ IOL4
; CLOSE FILE
CALL F$CLOSE
; RUN THE TERMINAL INIT ROUTINE
CALL TINIT ;RUN THE INIT ROUTINE
; PRINT FINAL MESSAGE AND EXIT
CALL PRINT
DB CR,LF,'Load Complete',0
RET
;
; TERMINAL INIT ROUTINE FROM I/O DRIVERS
;
TINIT:
LHLD IOBADR ;GET ADDRESS OF I/O BASE
LXI D,9 ;ADD 9 FOR TINIT OFFSET
DAD D
PCHL
; SKIP TO NON-BLANK
SBLANK:
MOV A,M ;GET CHAR
INX H ;PT TO NEXT
CPI ' ' ;BLANK?
JZ SBLANK
DCX H ;PT TO NON-BLANK
RET
; BUFFERS
DS 60 ;30-ELT STACK
STACK: DS 2 ;OLD STACK PTR
FCBPTR: DS 2 ;POINTER TO FCB FOR FILE SEARCH
DMAADR: DS 2 ;ADDRESS OF NEXT BLOCK TO LOAD
TMPUSR: DS 1 ;CURRENT USER NUMBER
FCB:
DS 9
FCBTYP:
DS 3
DS 24
DEFCB:
DB 0 ;CURRENT DISK
DB 'SYSIO '
IOTYP:
DB 'IO '
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
END