Trailing-Edge
-
PDP-10 Archives
-
BB-D351C-SM_3-16-83
-
sources/init.p11
There are 5 other files named init.p11 in the archive. Click here to see a list.
.SBTTL INIT - initialization for line blocks,DQ11S,KMC11S,DUP11S,DMC11S
; this once-only subroutine is called from check11 for each
; device(controlled by assembly conditionals in configuration file.
; after check11 has finished, this subroutine is overlayed by
; free storage.
.REPT 0
COPYRIGHT (c) 1982,1981, 1980, 1979
DIGITAL EQUIPMENT CORPORATION, maynard, mass.
THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
TRANSFERRED.
THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
CORPORATION.
DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
.ENDR
; REVISION HISRORY
VINIT=001
VEDIT=VEDIT+VINIT
.SBTTL define line blocks
NL=0
.REPT NLINES
DEFLCB \NL
NL=NL+1
.ENDR
.SBTTL initialization of dq11s
; subroutine called by check11 to check the dq11
.IF NE,FT.DQ ;dq's are the line drivers for dn8x series
CKADQ1: MOV R1,-(SP) ;SAVE R1
MOV R2,-(SP) ;SAVE R2
MOV R3,-(SP) ;SAVE R3
MOV R4,-(SP) ;SAVE R4
MOV #EBCENQ,R1 ;CHAR TO MATCH
CALL CKDQSC ;TRY TO MATCH THIS CHAR
BCS 15$ ;FAILED, PRINT MESSAGE
MOV #EBCETX,R1
CALL CKDQSC
BCS 15$ ;FAILED
MOV #EBCETB,R1
CALL CKDQSC
BCS 15$ ;FAILED.
11$: TST 6(R0) ;IS DQ SET FOR SYNC INTERRUPTS ?
BMI 12$
MOV R0,-(SP) ;SAVE BLOCK POINTER
BIS #CKFERR,CHKFLG ;FLAG WE DON'T LIKE IT
CALL CKDIDT ;IDENTIFY CULPRIT
JSR R0,CKTCRL
.ASCIZ \ doesn't interrupt for sync chars\
.EVEN
MOV (SP)+,R0 ;GET BLOCK POINTER BACK
12$: MOV NSLINS,R4 ;GET NUMBER OF THIS DQ11
CMP R4,#NLINES ;check for max desired lines
BGE 14$ ;ignore extras
13$: ASL R4 ;LINE NUMBER * 2
MOV 0(R0),LINCSR(R4) ;REMEMBER CSR ADDRESS
MOV 2(R0),LINVEC(R4) ;REMEMBER VECTOR ADDRESS
MOV #DQDRV,LINTYP(R4) ;set line driver type
INC NSLINS ;count this synch line
INC NDQ11 ;increment number of dq11s
14$: MOV (SP)+,R4 ;RESTORE R4
MOV (SP)+,R3 ;RESTORE R3
MOV (SP)+,R2 ;RESTORE R2
MOV (SP)+,R1 ;RESTORE R1
RETURN
; HERE WHEN THE SPECIAL CHARACTERS ARE NOT RIGHT.
15$: MOV R0,-(SP) ;SAVE DQ11 BLOCK POINTER
CALL CKDIDT ;TYPE DEVICE NAME
JSR R0,CKTCRL ;TYPE FOLLOWING MESSAGE
.ASCIZ \ Special characters should be 055, 003 and 046, \
.EVEN
JSR R0,CKTCRL
.ASCIZ \ but are: \
.EVEN
MOV (SP),R3 ;GET BLOCK POINTER
MOV 10(R3),R0 ;GET FIRST CHARACTER
CALL CKTOCT ;TYPE FIRST CHAR
JSR R0,CKTSTR ;TYPE COMMA
.ASCIZ \, \
.EVEN
MOV (SP),R3 ;GET BLOCK POINTER
MOV 12(R3),R0 ;GET SECOND CHARACTER
CALL CKTOCT ;TYPE SECOND CHAR
JSR R0,CKTSTR ;TYPE "AND"
.ASCIZ \ and \
.EVEN
MOV (SP),R3 ;GET BLOCK POINTER
MOV 14(R3),R0 ;GET THIRD CHARACTER
CALL CKTOCT ;TYPE THIRD CHAR
MOV (SP)+,R0 ;RESTORE BLOCK POINTER
BIS #CKFERR,CHKFLG ;FLAG ERROR IN CHECK11
JMP 11$ ;GO DO THE OTHER TESTS
; SUBROUTINE TO CHECK SPECIAL CHARACTERS IN THE DQ11
CKDQSC: CMP R1,10(R0) ;IS CHAR RIGHT ?
BEQ 11$
CMP R1,12(R0) ;TRY NEXT SLOT
BEQ 11$
CMP R1,14(R0)
BEQ 11$
; HERE WHEN SPECIAL CHARACTERS ARE WRONG.
SEC ;FLAG ERROR
RETURN
; HERE WHEN SPECIAL CHARACTER IS RIGHT.
11$: CLC ;FLAG SUCCESS
RETURN
.ENDC ;.IF NE,FT.DQ
.SBTTL initialization for the dup11s
; this once-only subroutine is called from check11 for each
; dup11.
.IF NE,FT.DUP!FT.KDP
CKAUP1: MOV R1,-(SP) ;SAVE R1
MOV R2,-(SP) ;SAVE R2
MOV R3,-(SP) ;SAVE R3
MOV R4,-(SP) ;SAVE R4
11$: MOV NSLINS,R4 ;GET NUMBER OF THIS DUP11
CMP R4,#NLINES ;check for enough dups
BGE 13$ ;ignore extras
; HERE WHEN WE CAN USE THIS DUP11 LINE.
12$: ASL R4 ;LINE NUMBER * 2
MOV 0(R0),LINCSR(R4) ;REMEMBER CSR ADDRESS
MOV 2(R0),LINVEC(R4) ;REMEMBER VECTOR ADDRESS
.IF NE,FT.KDP
MOV #KDPDRV,LINTYP(R4) ;set line driver type
.IFF
MOV #DUPDRV,LINTYP(R4) ;set line driver type
.ENDC ;.IF NE,FT.KDP
INC NSLINS ;count this synch line
INC NDUP11 ;increment number of dup11
13$: MOV (SP)+,R4 ;RESTORE R4
MOV (SP)+,R3 ;RESTORE R3
MOV (SP)+,R2 ;RESTORE R2
MOV (SP)+,R1 ;RESTORE R1
RETURN
.ENDC ; .IF NE,FT.DUP!FT.KDP
.SBTTL check DMC11
; subroutine called by check11 to check the DMC11
.IF NE,FT.DMC ;IF ON A DN22
CKAMC1:
SAVE <R1,R2,R3,R4> ;SAVE SOME REGISTERS
MOV DMCSR,R4 ;ALREADY HAVE ONE?
BNE 10$ ;YES
MOV 0(R0),DMCSR ;SAVE CSR
MOV 2(R0),DMCVEC ;SAVE INTERRUPT VECTOR ADDRESS
10$: RESTORE <R4,R3,R2,R1>
RETURN
.ENDC ;END IF NE,FT.DMC
; SUBROUTINE CALLED BY CHECK11 TO CHECK THE KMC11S
.IF NE,FT.KDP
CKAMD1: MOV R1,-(SP) ;SAVE R1
MOV R2,-(SP) ; AND R2
MOV R3,-(SP) ; AND R3
MOV R4,-(SP) ; AND R4
MOV NKMC11,R4 ;NUMBER OF KMC11S ALREADY
CMP R4,#NKMCR ;check no. kmc's available
BGE 13$ ;ignore extras
; HERE IF THERE ARE NOT TOO MANY KMC11S
11$: ASL R4 ;KMC11 NUMBER * 2
MOV 0(R0),R3 ;POINT TO CSR
MOV #MD.CLR,(R3) ;CLEAR MICROPROCESSOR
CLR (R3) ;TURN OFF CLEAR BIT
CLR 2(R3) ;CLEAR SEL 2
CLR 4(R3) ;CLEAR SEL 4
CLR 6(R3) ;CLEAR SEL 6
MOV #MD.RMO,(R3) ;SELECT CRAM
MOV 6(R3),R1 ;FETCH LOCATION 0
CMP #<B15+B8>,R1 ;BRANCH TO ZERO?
BNE 14$ ;NO, CRAM NOT LOADED.
MOV #1,4(R3) ;LOCATION 1
MOV #MD.RMO,(R3) ;SELECT CRAM
MOV 6(R3),R1 ;FETCH LOCATION 1
CMP #1,R1 ;CORRECT VERSION NUMBER?
BNE 14$ ;NO, FAIL.
INC NKMC11 ;YES, WE HAVE A KMC11
MOV 0(R0),MDCSR(R4) ;REMEMBER CSR ADDRESS
MOV 2(R0),MDVEC(R4) ; AND VECTOR ADDRESS
MOV #MHCODE-10,R1 ;START OF VERSION NUMBER
MOV #MDVER,R2 ;PLACE TO PUT IT
MOV #4,R3 ;LENGTH OF VERSION NUMBER
12$: MOV (R1)+,(R2)+ ;COPY VERSION NUMBER
SOB R3,12$ ; ... ALL OF IT.
13$: MOV (SP)+,R4 ;RESTORE R4
MOV (SP)+,R3 ; AND R3
MOV (SP)+,R2 ; AND R2
MOV (SP)+,R1 ; AND R1
RETURN
; ERROR TYPEOUTS FOR KMC11
14$: MOV NKMC11,R1
INC R1
BIC #177770,R1
ADD #'0,R1
MOVB R1,15$
JSR R0,CKTCRL
.ASCII /? KMC11 #/
15$: .ASCIZ /0 microcode is invalid /
.EVEN
BIS #CKFERR,CHKFLG ;FLAG AN ERROR
BR 13$
.ENDC ;.IF NE,FT.KDP