.TITLE STUFF
.IDENT /V01/
.MCALL QIO$,DIR$,RETURN
.MACRO PUSH,A
.IRP X,
MOV X,-(SP)
.ENDM
.ENDM PUSH
.MACRO POP,A
.IRP X,
MOV (SP)+,X
.ENDM
.ENDM POP
;
; STUFF DATA AREA SKELETON
SKELETON:
QIO$ 400,0,0,0,0,0,<0,0,0,0,0,0>
.WORD 0
ENDSKELETON:
;
; MISCELLANEOUS
NULL = -1
DSW = 0
ISW = Q.IOPL+4
JUMPTAB:.WORD SLUN,SBUFFER,SSIZE,SEFN,SPRI,SIOST,SISW,SFNC
MAX = <.-JUMPTAB+2>/2
.PAGE
STUFF::
;
; PUSH DATA AREA SKELETON ONTO THE STACK
MOV #ENDSKELETON,R4
.REPT ENDSKELETON-SKELETON/2
PUSH -(R4)
.ENDM
;
; PROCESS THE PARAMETERS PASSED
MOVB @R5,R4 ; LOAD NUMBER OF PARAMETERS PASSED
BLE NONE ; NO PAREMETERS PASSED
CMP R4,#MAX ; MAXIMUM NUMBER PASSED?
BGE ALL ; YES, PROCESS ALL PARAMETERS
ASL R4 ; * PROCESS ONLY THOSE
JMP @JUMPTAB-2(R4) ; * PARAMETERS PASSED
.PAGE
ALL:
;
; PROCESS THE UIC PARAMETER
SUIC: CMP #NULL,22(R5) ; IS PARAMETER OMITTED?
BEQ SFNC ; YES, ASSUME DEFAULT
MOV @22(R5),Q.IOPL+12(SP) ; NO, SET UIC OF MCR TASK
;
; PROCESS THE FNC PARAMETER
SFNC: CMP #NULL,20(R5) ; IS PARAMETER OMITTED?
BEQ SISW ; YES, ASSUME DEFAULT
MOV #404,Q.IOFN(SP) ; NO, SET TO ONLY INITIATE MCR COMMAND
;
; PROCESS THE ISW PARAMETER
SISW: CMP #NULL,16(R5) ; IS PARAMETER OMITTED?
BEQ SIOST ; YES, ASSUME DEFAULT
MOV 16(R5),ISW(SP) ; NO, SAVE THE ADDRESS
;
; PROCESS THE IOST PARAMETER
SIOST: CMP #NULL,14(R5) ; IS PARAMETER OMITTED?
BEQ SPRI ; YES, ASSUME DEFAULT
MOV 14(R5),Q.IOSB(SP); NO, PUT ADDRESS IN THE DPB
;
; PROCESS THE PRI PARAMETER
SPRI: CMP #NULL,12(R5) ; IS PARAMETER OMITTED?
BEQ SEFN ; YES, ASSUME DEFAULT
MOVB @12(R5),Q.IOPR(SP);NO, PUT PRIORITY IN THE DPB
;
; PROCESS THE EFN PARAMETER
SEFN: CMP #NULL,10(R5) ; IS PARAMETER OMITTED?
BEQ SSIZE ; YES, ASSUME DEFAULT
MOVB @10(R5),Q.IOEF(SP);NO, PUT EVENT FLAG NUMBER IN THE DPB
;
; PROCESS THE SIZE PARAMETER
SSIZE: CMP #NULL,6(R5) ; IS PARAMETER OMITTED?
BEQ SBUFFER ; YES, ASSUME DEFAULT
; DEFAULT MAY CAUSE A HANDLER ERROR RETURN
MOV @6(R5),Q.IOPL+2(SP); NO, PUT BUFFER SIZE IN THE DPB
;
; PROCESS BUFFER PARAMETER
SBUFFER:CMP #NULL,4(R5) ; IS PARAMETER OMITTED?
BEQ SLUN ; YES, ASSUME DEFAULT
; DEFAULT WILL CAUSE A HANDLER ERROR RETURN
MOV 4(R5),Q.IOPL(SP); NO, PUT BUFFER ADDRESS IN THE DPB
TST Q.IOPL+2(SP) ; A SIZE SPECIFIED?
BGT SLUN ; YES, PROCESS LUN INFORMATION
MOV 4(R5),R4 ; *
10$: TSTB (R4)+ ; *
BNE 10$ ; * DETERMINE LENGTH OF COMMAND STRING
DEC R4 ; *
SUB 4(R5),R4 ; *
MOV R4,Q.IOPL+2(SP) ; *
;
; PROCESS THE LUN PARAMETER
SLUN: CMP #NULL,2(R5) ; IS PARAMETER OMITTED?
BEQ NONE ; YES, ASSUME DEFAULT
; DEFAULT WILL CAUSE A DIRECTIVE ERROR
MOV @2(R5),Q.IOLU(SP); NO, PUT LOGICAL UNIT NUMBER IN THE DPB
;
NONE:
.PAGE
;
; ISSUE MCR STUFF QIO
DIR$
;
; PROCESS THE ISW
POP R4 ; ISW PARAMETER SPECIFIED?
BEQ EXIT ; NO, EXIT
MOV DSW,@R4 ; YES, RETURN DIRECTIVE STATUS WORD
;
; EXIT
EXIT: RETURN
.END