.NLIST .NLIST BEX .MCALL FSRSZ$,FDBDF$,FDAT$A,FDRC$A,FDBK$A,FDOP$A,NMBLK$ .MCALL QIOW$,DIR$,GCMLB$,CSI$,CSI$SW,CSI$SV,CSI$ND,GCML$ .MCALL FINIT$,EXIT$S,OPEN$W,OPEN$R,CLOSE$,CSI$1,CSI$2 .MCALL READ$,WRITE$,WAIT$,GET$,PUT$,GTIM$C,OPNT$D .MCALL RDBBK$,CRRG$C,WDBBK$,CRAW$C,DTRG$C ;*************************************************************************** ; ; CILUS - CORE IMAGE LIBRARY UPDATE AND SAVE (RSX-11M VERSION) ; ; CILUS IS A UTILITY PORGRAM USED FOR MANIPULATING AND PATCHING ; CORE IMAGE LIBRARIES (CIL'S), WHICH ARE USED UNDER DOS. A CORE ; IMAGE LIBRARY IS A SINGLE FILE CONTAINING ONE OR MORE CORE ; IMAGES AND AN INDEX, WHICH IS USED TO RETRIEVE THEM. THE MAIN ; USE OF CILUS IS TO BUILD AND MODIFY MONITORS. "CIL'S" ARE USED ; EXTENSIVELY BY THE 2F87F OFT TRAINERS. ; ; DIFFERENCES - ; 1. NO BOOT WILL BE PERMITTED. ; 2. NO HOOK WILL BE PERMITTED. ; 3. ATTACHING BOOTSTRAPS HAVE NOT BEEN IMPLEMENTED. ; 4. ONLY ONE PRIMARY AND ONE SECONDARY INPUT WILL BE PERMITTED. ; 5. CAN SPECIFY MAX MODULE SIZE FOR CORE EFFICENCY ; ; INPUT COMMAND STRING FORMAT: ; ; ,/SW...=/SW...,/E ; ; CREATED FROM THE DOS VERSION BY STEPHEN R. RAINIER (SINGER/LINK) ; NOVEMBER 1982 V2.A ; ;*************************************************************************** ; ; .MACRO PUSH A ;PUSH ONTO STACK MOV A,-(SP) ; .ENDM ;END PUSH ; ; .MACRO POP A ;POP FROM STACK MOV (SP)+,A ; .ENDM ;END POP ; ; .MACRO DSWERR ;DIRECTIVE IOERR BCC .+6 ; JMP IOERR ; .ENDM ;END DSWERR ; ; .MACRO PROMPT A,B,C ;CREATE NEW PROMPT STRING MOVB #A,CMDL+G.DPRM+2 ;SAVE THE NEW CHARACTERS MOVB #B,CMDL+G.DPRM+3 ; MOVB #C,CMDL+G.DPRM+4 ; .ENDM ; ; .MACRO CKS A ;STICK ON MODIFIED CHECKSUM NEG CKSUM ;MASSAGE IT MOVB CKSUM,(A)+ ;SAVE ONE BYTE OF IT CLRB (A)+ ; .ENDM ; ; .MACRO PARSE FDB,FNB,DSD,DFB ;PARSE A FILE SPEC MOV #FDB,R0 ;FDB ADDRESS MOV #FNB,R1 ;NEW FILENAME BLOCK MOV #DSD,R2 ;DATASET DESCRIPTOR ADDRESS MOV #DFB,R3 ;DEFAULT FILENAME BLOCK CALL .PARSE ;PARSE THE FILENAME BCC .+6 ;OKAY JMP CMDERR ;COMMAND ERROR .ENDM ;END PARSE ; ; .MACRO DECASC A,B ;CONVERT DECIMAL BINARY TO ASCII MOV A,B ; CLR A ; DIV #10.,A ; BIC #177760,A ; BIC #177760,B ; ADD #60,A ; ADD #60,B ; .ENDM ; ; .MACRO ASCBIN A ;CONVERT OCTAL ASCII TO BINARY CLR R1 ;CLEAR FINAL VALUE CALL $COTB ;CONVERT ASCII TO OCTAL MOV R1,A ;SAVE VALUE .ENDM ; ; .MACRO FIND A,?B,?C ;FIND A PARTICULAR CHARACTER IN STRING B: CMPB A,(R0)+ ;IS IT WHAT WE WANT? BEQ C ;YES SOB R1,B ;NO, LOOP BR .+4 ; C: DEC R1 ;DONE .ENDM ; ; .MACRO RAD50 A,B,?C ;CONVERT ASCII TO RAD50 (1 WORD) PUSH R1 ;SAVE REGS PUSH R2 ; MOV R0,ARG10 ;SAVE WHERE WE ARE NOW CLR R1 ;INIT CALL $CAT5 ;CONVERT UP TO 3 CHARACTERS MOV R1,ARG11 ;SAVE RAD50 WORD POP R2 ;RECOVER REGS POP R1 ; MOV ARG11,(A)+ ;STORE THE RAD50 WORD BCC C ;DID WE GET AN EVEN 3 CHARACTERS? TSTB -(R0) ;NO, SO BACK UP OVER TERMINATOR C: PUSH R5 ;SAVE TEMPORARILY MOV R0,R5 ;GET WHERE WE ARE NOW SUB ARG10,R5 ;CALC HOW FAR WE'VE GONE SUB R5,B ;SUBTRACT FROM COUNTER POP R5 ;GET R5 BACK .ENDM ; ; .MACRO SKIP A,?B,?C ;SKIP OVER A CERTAIN CHARACTER B: CMPB #A,(R0) ;GOT ONE? BEQ .+4 ;YES BR C ;NO, EXIT TSTB (R0)+ ;SKIP TO NEXT SOB R1,B ;LOOP C: ; .ENDM ; ; .MACRO INCR A,?B ;SKIP AHEAD IN THE INPUT BUFFER PUSH R5 ;SAVE R5 MOV #A,R5 ;GET LOOP COUNT ASR R5 ;WORDS NOT BYTES B: TST (R4)+ ;SKIP A WORD CALL DCHK ;CHECK END OF BUFFER SOB R5,B ;LOOP POP R5 ;RETRIEVE .ENDM ; ; .MACRO COP3 A,B ;COPY THREE WORDS MOV B+N.FNAM,A+N.FNAM ; MOV B+N.FNAM+2,A+N.FNAM+2 ; MOV B+N.FNAM+4,A+N.FNAM+4 ; BIS #NB.NAM,A+N.STAT ; .ENDM ; ; .MACRO DMUL A ;DOUBLE PRECISION MULTIPLY MOV A,R0 ;GET MULTIPLIER CALL $DMUL ;MULTIPLY TO R2 & R3 MOV R0,R2 ;PUT ANSWER BACK IN R2 & R3 MOV R1,R3 ; .ENDM ; ; .MACRO NEXT ?A ;SKIP THROUGH BUFFER TO NEXT RECORD MOV (R4)+,R3 ;GET RECORD LENGTH IN BYTES CALL DCHK ;CHECK FOR END OF BUFFER BIT #1,R3 ;ODD BYTE? BEQ .+4 ;NO INC R3 ;IF YES, ROUND UP ASR R3 ;MAKE IT A WORD OFFSET A: TST (R4)+ ;SKIP A WORD CALL DCHK ;CHECK FOR END OF BUFFER SOB R3,A ;LOOP .ENDM ; ; .MACRO BUMP A,?B,?C ;BUMP LCL BUFFER UP TO NEXT RECORD CLR A ;CLEAR COUNTER REGISTER B: CMP #1,(R4) ;DO WE HAVE AN EXTRA WORD? BLT C ;NO, IF > TST (R4)+ ;YES, SO SKIP IT CALL DCHK ;CHECK FOR END OF BUFFER INC A ;COUNT THE EXTRA WORDS CMP #3,A ;IF MORE THAN 3 THAN MUST BE EOF BPL B ;LOOP FOR 3 AT MOST C: ;CONTINUE .ENDM ; ; .MACRO NXTHDR ;SKIP TO NEXT HEADER RECORD CALL DIROP ;GET UP TO THE DATE/TIME WORDS IN HDR TST (R4)+ ;SKIP TIME WORDS CALL DCHK ;CHECK FOR EOB TST (R4)+ ; CALL DCHK ;CHECK FOR EOB TST (R4)+ ;SKIP DATE WORD CALL DCHK ;CHECK FOR EOB CALL DIROP2 ;SKIP REST OF MODULE ( IF ANY) .ENDM ; ; .MACRO FLGHDR ?A,?B,?C ;FLAG THIS INDEX ENTRY AS FROM SEC INP MOV INXARY+20,R1 ;GET # OF ENTRIES MOV #INXARY+40,R3 ;ADDR OF 1ST ENTRY A: CMP 20(R3),2(R2) ;FIND THE NAME BNE B ; CMP 22(R3),4(R2) ; BNE B ; MOV 6(R2),4(R3) ;FLAG INDEX ENTRY FROM SEC. INPUT BR C ; B: ADD #LDAHDR+6,R3 ;GET TO NEXT ENTRY SOB R1,A ;LOOP C: .ENDM ; ;*************************************************************************** ; BUFSIZ = 80. ;INPUT BUFFER SIZE IN BYTES BLKSIZ = 1000 ;LOGICAL BLOCK SIZE IN BYTES MAXSIZ = 20000 ;MAXIMUM REGION SIZE IN BYTES LDAHDR = 40 ;SIZE OF HEADER RECORD IN LDA FILE CILLEN = 34 ;SIZE OF CIL FILE HEADER LILLEN = 12 ;SIZE OF LICIL FILE HEADER LCLMAX = 202 ;MAXIMUM LICIL RECORD SIZE ICNUM = 100. ;NUMBER OF INDIRECT (EDIT) COMMANDS MODNUM = 107. ;MAXIMUM NUMBER OF MODULES IN CIL APR5 = 5 ;APR 5 FOR INDEX REGION APR6 = 6 ;APR 6 FOR INDEX REGION APR7 = 7 ;APR 7 FOR INDEX REGION INXARY = APR5*20000 ;ARRAY BUFFER FOR INDEX ARYSIZ = 10000 ;ARYSIZ SPL = 1 ;SPOOL SWITCH BU = 2 ;BUILD SWITCH ED = 4 ;EDIT SWITCH LO = 10 ;LOAD SWITCH LI = 20 ;DIRECTORY SWITCH DI = 20 ;DIRECTORY SWITCH DU = 40 ;DUMP SWITCH E = 100 ;END SWITCH BO = 200 ;BOOT SWITCH (WILL NOT FUNCTION) CT = 400 ;CASSETTE TAPE SWITCH(NOT IMPLEMENTED) HO = 1000 ;HOOK SWITCH MT = 2000 ;MAGTAPE SWITCH PA = 4000 ;PATCH SWITCH TA = 10000 ;TAPES SWITCH (NOT IMPLEMENTED) SI = 20000 ;SPECIFY MAX MODULE SIZE (DEFAULT=10000) ; ; EDIT COMMANDS ; C = 1 ;CHANGE D = 2 ;DELETE I = 4 ;IDENT (PA), INSERT (ED) L = 10 ;LIST N = 20 ;NAME R = 40 ;REPLACE P = 200 ;PURGE ; ;**************************************************************************** .PAGE .LIST