.NLIST .TITLE EXPMC - RSXMULTI MACRO LIBRARY ; ; MODIFICATIONS ; ; ; EDIT NUMBER = 0006 ; EDITED BY: DANIEL B. CURTIS 22 MAR 79 17:33 ;- ; ; MOVA - MOVE AN ADDRESS IN POSITION INDEPENDENT CODE ; ; USAGE: MOVA ADDR,R4 ; .MACRO MOVA $ADDR,$REG MOV %7,$REG ADD #<$ADDR-.>,$REG .ENDM MOVA .MACRO MOVSAD $ADDR,$REG ; ; MOVSAD - MOVE SYSTEM ADDRESS IN PIC AND WITH BASE OFFSETS ; MOV #<120000&<$ADDR->>,$REG .ENDM MOVSAD ; ; PUSH - PUSH A LIST OF ARGUMENTS ON THE STACK ; ; USAGE: PUSH ; .MACRO PUSH $LIST .IF NB <$LIST> .IRP $1,<$LIST> .IF NB <$1> MOV $1,-(%6) .IFF CLR -(%6) .ENDC .ENDR .IFF CLR -(%6) .ENDC .ENDM PUSH ; ; POP - POP A LIST OF ARGUMENTS OFF THE STACK ; ; USAGE: POP ; .MACRO POP $LIST .IF NB <$LIST> .IRP $1,<$LIST> .IF NB <$1> MOV (%6)+,$1 .IFF TST (%6)+ .ENDC .ENDR .IFF TST (%6)+ .ENDC .ENDM POP ; ; BLKZ - GENERATE A BLOCK OF ZERO WORDS ; ; USAGE: .BLKZ 4 ; .MACRO .BLKZ $NWORD .REPT $NWORD .WORD 0 .ENDR .ENDM .BLKZ ; ; CAMAC OPERATIONS DEFINITION ; .MACRO CAM$DF .MCALL QIOW$ AD16=0 Q.IOBA=Q.IOPL Q.IOBL=Q.IOPL+2 Q.IOCR=Q.IOPL+4 Q.IOFA=Q.IOPL+6 Q.IOMO=Q.IOPL+10 AD24=1 XA16=2 XA24=3 XS16=4 XS24=5 ST16=6 ST24=7 ; ; CAMAC QIO BLOCK GENERATION ; .MACRO CAMBLK $LN,$M,$CL,$N=1,$A=0,$F,$ADR,CNT=1,EVF=0,ISB=0,AST=0 $M1=<$M&3>*40000 $M2=<$M&4>*20000 .IF NE <$M&1> $BC=4*CNT .IFF $BC=2*CNT .ENDC $CB=0 .IRP $CR,<$CL> $CT=1000 .REPT $CR-1 $CT=$CT*2 .ENDR $CB=$CB!$CT .ENDM $FNA=$M1!<1000*<$F&37>>!<20*<$N&37>>!<$A&17> QIOW$ 3200,$LN,EVF,,ISB,AST,<$ADR,$BC,$CB,$FNA,$M2> .ENDM CAMBLK .ENDM CAM$DF ; ; SUB-TASKING MACROS ; ; ; SUB-TASK CONTROL BLOCK OFFSETS ; .MACRO TCBDF .ASECT .=0 T.LNK: .BLKW ;LINK TO NEXT TCB T.STA: .BLKB ;CURRENT TASK STATE T.PTY: .BLKB ;PRIORITY LEVEL T.RSM: .BLKW ;RESUME BIT MASK T.SUS: .BLKW ;SUSPEND BIT MASK T.CSP: .BLKW ;CURRENT STACK POINTER T.ISP: .BLKW ;INITIAL STACK POINTER T.IPC: .BLKW ;INITIAL PROGRAM COUNTER T.GRD: .BLKW ;STACK GUARD WORD .PSECT .ENDM TCBDF .MACRO SUBTDF .GLOBL TACTV,TRSUM,TEXIT,TSUSP .GLOBL TASTE,TIDLE ; ; TACTV - START A SUB-TASK ; ; USAGE: TACTV #TCB<,ERRXR> ; .MACRO TACTV $TCB,$ERRXR,?$A .IF DIF <$TCB>, MOV $TCB,R0 .ENDC CALL TACTV .IF NB $ERRXR BCC $A JSR PC,$ERRXR $A: .ENDC .ENDM TACTV ; ; TRSUM - RESUME A SUB-TASK ; ; USAGE: TRSUM #TCB,#RBITS<,ERRXR> ; .MACRO TRSUM $TCB,$MASK,$ERRXR,?$A .IF DIF <$TCB>, MOV $TCB,R0 .ENDC .IF DIF <$MASK>, MOV $MASK,R1 .ENDC CALL TRSUM .IF NB $ERRXR BCC $A JSR PC,$ERRXR $A: .ENDC .ENDM TRSUM ; ; TEXIT - TERMINATE THE CURRENT SUB-TASK ; ; USAGE: TEXIT ; .MACRO TEXIT $ERRXR,?$A CALL TEXIT .IF NB $ERRXR BCC $A JSR PC,$ERRXR $A: .ENDC .ENDM TEXIT ; ; TSUSP - SUSPEND THE CURRENT SUB-TASK ; ; USAGE: TSUSP #SBITS<,ERRXR> ; .MACRO TSUSP $MASK,$ERRXR,?$A .IF DIF <$MASK>, MOV $MASK,R0 .ENDC CALL TSUSP .IF NB $ERRXR BCC $A JSR PC,$ERRXR $A: .ENDC .ENDM TSUSP ; ; TASTE - AST SUB-TASKING INITIATION ; ; USAGE: TASTE ; .MACRO TASTE CALL TASTE .ENDM TASTE ; ; TCB - SUB-TASK CONTROL BLOCK GENERATOR ; ; USAGE TCB 50,START,40 ; .MACRO TCB $PRTY,$TASK,$LSTAK,?$STK .MCALL .BLKZ .WORD 0 .BYTE -1,$PRTY .WORD 0,0,0,$STK,$TASK,125252 .BLKZ $LSTAK $STK: .ENDM TCB .ENDM SUBTDF .MACRO ERR$DF M$$SGN=0 .MACRO ERRLOG $MOD$,$TXT$,$PCT$ ; ; DEFINE ERROR LOGGING UTILITY ; .NCHR $MST$,<$TXT$> .IIF DIF <$MOD$>, MOV R1,-(SP) ;SAVE R1 MOVE \M$$SGN,R1 CALL ERRPRT .IF IDN <$MOD$>,ABRT IOT .ENDC .IIF DIF <$MOD$>, MOV (SP)+,R1 ;RESTORE R1 .PSECT ERRTXT LABL \M$$SGN .BYTE $MST$ .ASCII "$TXT$" .PSECT $PCT$ M$$SGN=M$$SGN+1 .ENDM ERRLOG .MACRO MOVE,$A$,$B$ MOV #MSG$'$A$,$B$ .ENDM MOVE .MACRO LABL,$A$ MSG$'$A$: .ENDM LABL .ENDM ERR$DF .MACRO HRDOF,PST .IF DF H$$RDA ; ; THIS MACRO DEFINES THE DATA STRUCTURE OFFSETS FOR THE HIGH RATE VERSION ; OF THE DATA ACCUSITION SYSTEM ; .ASECT ; ; PRIMARY DATA STRUCTURE ; .=0 P.SQNM: .BLKW 1 ;ACE Q NUMBER P.SBAD: .BLKW 1 ;BUFFER ADDRESS P.SSIZ: .BLKW 1 ;BUFFER SIZE P.SOPL: .BLKW 1 ;OPL ADDRESS P.SIZ: .BLKW 1 ;SIZE OF PDS BUFFER PART ; ; OPERATION LIST STRUCTURE (OPL) ; .=0 O.PEPS: .BLKW 1 ;EVENT PART SIZE O.PEPM: .BLKW 2 ;EVENT PART MAPPING O.PESA: .BLKW 2 ;EVENT PART DATA AREA 18 BIT PHYSICAL ADDRESS O.PESO: .BLKW 1 ;EVENT PART STARTING OFFSET INTO BUFFER O.PEEO: .BLKW 1 ;EVENT PART ENDING OFFSET INTO BUFFER O.PEGP: .BLKW 1 ;EVENT GAP SIZE O.PBFR: .BLKW 1 ;BYTES LEFT IN BUFFER O.PEDS: .BLKW 1 ;EVENT PART DYNAMIC SIZE O.PFLG: .BLKW 1 ;FLAG WORD OP.FBC=1 ;FORCE BUFFER CHANGE O.PNDS: .BLKB 1 ;NUMBER OF DATA SOURCES .BLKB 1 ;RESERVED O.PDST: .BLKB 1 ;INDEX TO DATA SOURCE 1 ; ; DATA SOURCE STRUCTURES ; .=0 D.SCSR: .BLKW 1 ;POINTER TO DATA SOURCE CSR/VEC INFO BLOCK D.SCDT: .BLKW 1 ;POINTER TO COP DONE ADDRESS TABLE D.SSDT: .BLKW 1 ;POINTER TO COP STRING DONE ADDRESS TABLE D.SADA: .BLKW 1 ;POINTER TO ALL DONE ROUTINE D.SERT: .BLKW 1 ;POINTER TO ERROR ADDRESS TABLE ; ; ; LOCAL DATA ADJANCY ASSUMED -- MODIFY AT OWN RISK ; D.SFLG: .BLKW 1 ;DATA SOURCE FLAGS DS.IOP=100000 ;OPERATION INTERRUPTED DS.ACT=1 ;DATA SOURCE ACTIVE D.SSTA: .BLKW 1 ;ADDRESS OF COP STRING TABLE D.SCTA: .BLKW 1 ;CURRENT POINTER INTO COP STRING TABLE D.SCCA: .BLKW 1 ;CURRENT COP ADDRESS D.SOPR: .BLKW 1 ;NUMBER OF OPERATIONS D.SRPT: .BLKW 1 ;REPEAT COUNT D.SBTT: .BLKW 1 ;NUMBER OF BYTES TO TRANSFER D.SCAD: .BLKW 2 ;CURRENT 18 BIT PHYSICAL ADDRESS D.SESO: .BLKW 1 ;DATA SOURCE OFFSET INTO EVENT PART DATA AREA D.SEEO: .BLKW 1 ;DATA SOURCE LIMIT OFFSET INTO EVENT PART DATA AREA D.SBTL: .BLKW 1 ;NUMBER OF BYTES TILL LIMIT D.SEXC: .BLKW 1 ;TEMPERARY STORAGE FOR EXTENDED WORD COUNT ; ; END OF ASSUMED DATA ADJANCY ; .PSECT PST .ENDC .ENDM HRDOF ; .MACRO OPLDF ; ; THIS MACRO DEFINES ALL OF THE OPL OFFSETS ; O$PDON=0 O$PCDN=2 O$PERR=4 O$PNOO=6 O$PFLG=7 O$PNDS=10 O$PWSI=11 O$PIND=12 .ENDM OPLDF .MACRO QHEADR TYP,ARG1 ; ;THIS MACRO IS USED TO GENEREATE A QUEUE HEADER ;TYPE CAN BE EITHER BLANK OR 'ACE' ;IF BLANK, THE LAST TWO WORDS IN THE HEADER ARE SET ;TO ZERO, IF 'ACE' THE NUMBER REQUIRED TO RUN IS SET TO ARG1 ; .IF B, .WORD 0,.-2 .WORD 0,0 .IFF .IF IDN,, .WORD 0,.-2 .WORD 0 .BYTE 0,ARG1 .IFF .ERROR ;WRONG QUEUE TYPE SPECIFIED .ENDC .ENDC .ENDM QHEADR ; .MACRO OLLHIN,ACP,CDP,USERQ ; ; THIS MACRO IS USED TO INITALIZE THE QUEUE HEADER TABLE ;ACP IS THE NUMBER OF APPERATIS TO CORE QUEUE PAIRS ;CDP IS THE NUMBER OF CORE TO DISK QUEUE PAIRS AND USERQ ;IS THE NUMBER OF USER QUEUES REQUIRED ; OLLSTH:: .WORD <2*ACP>+<2*CDP>+ .BYTE ACP,CDP ; .REPT ACP QHEADR ACE,1 QHEADR .ENDR .REPT QHEADR .ENDR .REPT USERQ QHEADR .ENDR .ENDM OLLHIN ; .MACRO SAVRG ; ;THIS MACRO SAVES REGISTERS 3-5 ; JSR R5,$SAVRG .ENDM SAVRG ; ; .MACRO SAVAL ; ;THIS MACRO SAVES ALL REGISTERS ; JSR PC,$SAVAL .ENDM SAVAL ; ; .MACRO SAVVR ; ;THIS MACRO SAVES R0-R2 ; JSR R2,$SAVVR .ENDM SAVVR ; .MACRO DISINT ; ;THIS MACRO DISABLES INTERUPTS BY SETTING THE PROCESSOR ;PRIORITY TO 7 ; PR7=340 BISB #PR7,@#PSW .ENDM DISINT ; ; .MACRO ENBINT ; ;THIS MACRO ENABLES INTERUPTS ; BICB #PR7,@#PSW .ENDM ENBINT .MACRO ST1BDF ; ;THIS MACRO DEFINES THE BITS IN THE $DAST1 STATUS WORD ; S1$NEE=1 ;NOT ENOUGH ELEMENTS S1$OFF=2 ;DA ELECTRONICS OFF S1$RUN=4 ;DA RUNNING S1$RST=10 ;REQUEST DLT TO STOP S1$RGO=20 ;REQUEST DLT TO GO S1$RTR=40 ;REQUEST TO TERMINATE DA S1$RCM=100 ;DA RECEVED A GOOD COMMAND FROM RECEVE PACKIT S1$SRQ=200 ;DA IS TO BE STOPPED AS END OF SPILL S1$RMD=400 ;NEED TO RESUME MD S1$RDL=1000 ;NEED TO RESUME DLT S1$QFB=2000 ;FULL BUFFER NEEDS TO BE QUEUED S1$TOF=4000 ;TURN OFF DLT S1$CIN=10000 ;DA IS CONNECTED TO INTERRUPTS S1$TRM=20000 ;DA IS TO TERMINATE AS REQUESTED FROM SOME TASK S1$SUS=40000 ;SHOW DA SUSPENDED S1$ACT=100000 ;SHOW DA IS ACTIVE .ENDM ST1BDF ; ; DEFINE THE STATE BITS IN $DAST2 (SPOOLING PROCESS) ; .MACRO ST2BDF S2$DAC=100000 ;MEMORY/DISK TASK ACTIVE S2$DSU=40000 ; SUSPENDED S2$LOG=20000 ;DATA LOGGING ENABLED S2$LAC=10000 ;DISK/TAPE TASK ACTIVE S2$LSU=4000 ; SUSPENDED S2$DFL=200 ;DISK BUFFER FULL S2$TRQ=100 ;TERMINATE REQUEST S2$RRQ=40 ;RESUME REQUEST .ENDM ST2BDF ; ; DEFINE THE STATE BITS IN $DAST3 (SYNC TASK) ; .MACRO ST3BDF S3$ACT=100000 ;TASK ACTIVE S3$SUS=40000 ;TASK SUSPENDED S3$SPL=20000 ;SPILL PHASE S3$MON=10000 ;MONITORS ENABLED S3$SRQ=200 ;SUSPEND REQUEST S3$TRQ=100 ;TERMINATE REQUEST .ENDM ST3BDF ; ; DEFINE THE STATE BITS IN $DAST4 (MONITOR TASK) ; .MACRO ST4BDF S4$ACT=100000 ;TASK ACTIVE S4$SUS=040000 ;TASK SUSPENDED S4$SWC=000002 ;ENABLE SWIC BLOCK S4$EXP=000001 ;ENABLE EXP BLOCK .ENDM ST4BDF .MACRO PKCODF ; ; THIS MACRO DEFINES STANDARD CODES USED FOR THE CONTROLL OF TASKS ; AND INTERTASK COMMUNNICATION ; SY.TRM=100 ;TERMINATE REQUEST SY.SUS=101 ;SUSPEND REQUEST SY.RES=102 ;RESUME REQUEST SY.DIA=103 ;DIAGNOSTIC FUNCTION SY.ACK=104 ;ACKNOWLEDGE FUNCTION SY.NAK=105 ;NOT ACKNOWLEDGE SY.ESP=106 ;END-SPILL RESUME REQUEST ; DA.RPL=200 ;DA BEGINRUN ,ENDRUN, SUSPENDRUN, RESUME RUN REPLY ; ; MULTI COMMUNICATION CODES ; MU.RVB=201 ;REQUEST VIRTUAL BLOCK MU.SVB=202 ;SPECIFY VIRTUAL BLOCK .ENDM PKCODF .MACRO RQB$DF .MCALL FDB$DF FDB$DF ;FILE DESCRIPTOR DEFS .ASECT .=F.SBK Q.NOQ: .BLKW ;NUMBER OF OUTPUT QUEUES Q.RSZ: .BLKW ;RING BUFFER RECORD SIZE Q.INP: .BLKW ;INPUT QUEUE INDEX Q.OBK: .BLKW ;OUTPUT QUEUE BLOCK .=0 Q.OUP: .BLKW ;OUTPUT QUEUE INDEX Q.CNT: .BLKW ;OUTPUT QUEUE COUNT Q.TYP: .BLKW ;OUTPUT QUEUE TYPE Q.LOQ=.-Q.OUP ;SUB-STRUCTURE SIZE .PSECT .ENDM RQB$DF .MACRO RQE$DF DQ.MTY=-1 ;QUEUE EMPTY DQ.QNM=-2 ;INVALID QUEUE NUMBER DQ.FUL=-3 ;QUEUE FULL .ENDM RQE$DF .MACRO RQB $NOQ,$RSZ .WORD $NOQ,$RSZ .WORD 0 .REPT $NOQ .WORD 0,0,0 .ENDR .ENDM RQB .MACRO FDB$DF ; ; THIS MACRO DEFINES THE OFFSETS TO THE FILE DISCRIPTER BLOCK USED ; IN DACOMN !!!!! IT IS NOT TO BE CONFUSED WITH FCS FDBS!!!!! ; .ASECT .=0 F.FID: .BLKW 3 ;OFFSET FOR FILE ID F.HLB: .BLKB 1 ;HIGH LOGICAL BLOCK NUMBER F.RES: .BLKB 1 ;RESERVED BYTE F.LLB: .BLKW 1 ;LOW LOGICAL BLOCK NUMBER F.HFSZ: .BLKW 1 ;HIGH FILE SIZE IN BLOCKS F.LFSZ: .BLKW 1 ;LOW FILE SIZE IN BLOCKS F.FVBN: .BLKW 1 ;FIRST USABLE VBN F.LVBN: .BLKW 1 ;LAST USABLE VBN F.SBK: ;SPOOLING QCB .PSECT .ENDM FDB$DF .MACRO SGP$DF ; ; THIS MACRO DEFINES THE SYSTEM GAP OFFSETS ; .ASECT .=0 S.GLNK: .BLKW 1 ;LINK WORD S.GESZ: .BLKW 1 ;BYTES THIS EVENT S.GSTA: .BLKW 1 ;STATUS WORD S.GLEV: .BLKW 1 ;LOW PART OF EVENTS S.GHEV: .BLKW 1 ;HIGH PART OF EVENTS S.GIOS: .BLKW 2 ;I/O STATUS BLOCK .PSECT .ENDM SGP$DF .MACRO BBX$DF ; ; THIS MACRO DEFINES THE BITS IN THE BISON BOX INPUT DATA REGISTER ; THE UPPER 8 BITS ARE DEFINED TO BE THE PROPERTY OF THE USER AND ; DIAGNOSTIC FUNCTIONS ; ; THE LOWER 8 BITS ARE FOR DA AND OTHER TASK USE ; BB$EXC=1 ;BIT TO TURN THE EXPARIMENTAL ELECTRONICS ON OR OFF BBXCSR=177520 ;IOPAGE ADDRESS OF THE BISON BOX CSR BBXOUT=BBXCSR+2 ;IOPAGE ADDRESS OF BISON BOX OUTPUT REGISTER BBXIN=BBXCSR+4 ;IOPAGE ADDRESS OF BISON BOX INPUT REGISTER BBXRST=BBXCSR+6 ;IOPAGE ADDRESS OF BISON BOX RESET REGISTER ENAINT=100 ;INTERUPT A ENABLE ENBINT=40 ;INTERUPT B ENABLE INBBIT=100000 ;INTERUPT B (EVENT INTERRUPT) BIT BB$SPT=1 ;THE SPILL TYPE FLAG, 1=> START SPILL, 0=> END SPILL ; .ENDM BBX$DF .MACRO CMD$DF ; ; THIS MACRO IS USED TO DEFINE THE BIT PATTERNS AND FUNCTION CODES ; FOR THE RSX CAMAC DRIVER ; ; DEFINE THE FUNCTION CODES ; IO.CPW=400 IO.NDT=402 IO.CPR=1000 IO.CRR=1001 IO.CDM=3000 IO.LPR=3001 ; DEFINE THE RETURN SELECT ; CM.CSR=00 CM.FNA=10 CM.CS =20 CM.EWC=30 CM.ASM=40 CM.TOP=50 ;DEFINE THE REJECT MESSAGE BIT ; CM.NMS=200 .ENDM CMD$DF .LIST