perm filename CHANGE.FAI[IP,NET] blob
sn#702363 filedate 1983-03-06 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00005 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 Changes to page 14 of CLKSER[S,SYS]:
C00003 00003 Replace page 64 of COMCSS[S,SYS]:
C00007 00004 Change to page 92 of UUOCON[S,SYS]:
C00008 00005 Change to page 96 of UUOCON[S,SYS]:
C00009 ENDMK
C⊗;
;Changes to page 14 of CLKSER[S,SYS]:
;In the once-a-second section:
IFN IMPNUM,<
HGMAC(??)
PUSHACS ;only if we care about ACs preserved
PUSHJ P,IMPSEC↑
POPACS ;if we did a PUSHACS
>;IFN IMPNUM
;Every tick:
IFN IMPNUM,<
SKIPE IMPRQF↑ :ANY IMP REQUESTS PENDING?
PUSHJ P,IMPTIK↑ ;YES, SERVICE THEM
>;IFN IMPNUM
;or if ACs need to be preserved:
IFN IMPNUM,<
SKIPN IMPRQF↑
JRST NIMPRQ
PUSHACS
PUSHJ P,IMPTIK↑
POPACS
NIMPRQ:
>;IFN IMPNUM
;Replace page 64 of COMCSS[S,SYS]:
;IOSETC ITMCNT ITMCN1 ITMCN2
;CALLED FROM INPUT AND OUTPUT UUOS.
;CALLING SEQUENCE
; MOVE JBUF,<ADDRESS OF USER'S BUFFER HEADER>
; MOVE TAC1,<ADDRESS OF BUFFER>
; MOVE ITEM,<BUFFER WC>
; PUSHJ P,IOSETC
; EXIT ALWAYS RETURNS HERE
;SETS JBFPTR18-35:=C(TAC1 18-35)
;JBFCTR:=C(ITEM)*[WORD LENGTH/BYTE SIZE]
;WHERE: WORD LENGTH:=36 DECIMAL
; BYTE SIZE:=C(JBFPTR6-11)
; [X]:= INTEGER PART OF X
↑IOSETC:MOVSI TAC,7777 ;CLEAR BYTE POINTER IN BUFFER HEADER.
XCTR XRW,[ANDM TAC,1(JBUF)] ;CLEAR ALL BUT BYTE SIZE, INDEX.
XCTR XRW,[HRRM TAC1,1(JBUF)] ;SET ADDRESS PART.
XCTR XRW,[AOS 1(JBUF)] ;ADVANCE ADDRESS TO WC WORD
XCTR XLB,[LDB AC2,[POINT 6,1(JBUF),11]] ;USER'S BYTE SIZE.
PUSHJ P,ITMCNT
XCTR XW,[MOVEM ITEM,2(JBUF)] ;STORE ITEM COUNT IN USER'S BUFFER HEADER
POPJ P, ;EXIT TO USER.
;Subroutine to compute number of bytes in a buffer.
;CALLING SEQUENCE
; MOVE TAC1,<ADDRESS OF BUFFER>
; MOVE ITEM,<BUFFER WC>
; PUSHJ P,ITMCNT
; EXIT ALWAYS RETURNS HERE
;If LH(ITEM) is nonzero it assumed to be the LH of a byte pointer, and the
;byte count is adjusted to account for unused bytes. This is for special
;devices, like the IMP, which compute an exact byte count.
↑ITMCNT:XCTR XLB,[LDB TAC1,[POINT 17,(TAC1),17]] ;GET BUFFER SIZE
IFN IMPNUM,<
HLLZ AC1,ITEM ;Get LH of byte ptr
HRRZ ITEM,ITEM ;Get word count
CAIG ITEM,-1(TAC1) ;Word count too big?
JRST ITMCN1 ;No.
MOVEI ITEM,-1(TAC1) ;Yes, reduce it
SETZ AC1, ;And forget about later adjustment
ITMCN1:
>;IFN IMPNUM
IFE IMPNUM,<
CAILE ITEM,-1(TAC1) ;IS THE DATA WC TOO BIG?
MOVEI ITEM,-1(TAC1) ;YES. REDUCE IT TO WHAT CAN FIT IN BUFFER
>;IFE IMPNUM
MOVEI TAC,=36 ;COMPUTE ITEM COUNT FROM NUMBER OF DATA
IDIV TAC,AC2 ; WORDS*NUMBER OF BYTES/WORD USING THIS
IMUL ITEM,TAC ; BYTE SIZE.
IFN IMPNUM,<
JUMPE AC1,ITMCN2 ;Jump if no byte ptr
LDB AC1,[POINT 6,AC1,5] ;Number of unused bits in last word
CAIL AC1,=36 ;Virgin byte ptr?
JRST ITMCN2 ;Yes - don't believe it!
IDIV AC1,AC2 ;Compute leftovers
SUBI ITEM,(AC1) ;Subtract from byte count
ITMCN2:
>;IFN IMPNUM
POPJ P, ;EXIT TO USER.
;Change to page 92 of UUOCON[S,SYS]:
;Replace:
INPUT2: XCTR XR,[HRRZ ITEM,1(TAC1)] ;GET ACTUAL WC FROM THE BUFFER.
;With:
INPUT2:
IFN IMPNUM,<
MOVSI AC1,DEPCBC ;Does WC word in buffer contain a byte ptr?
TDNE AC1,DEVCMR(DDB)
XCTR XR,[SKIPA ITEM,1(TAC1)] ;Yes. Set ITEM to entire word
>;IFN IMPNUM
XCTR XR,[HRRZ ITEM,1(TAC1)] ;No. Set item to word count in buffer
;Change to page 96 of UUOCON[S,SYS]:
;Replace:
XCTR XRW,[HRRM TAC,(TAC1)] ;STORE WORD COUNT IN 3RD WORD OF BUFFER.
;With:
IFE IMPNUM,<
XCTR XRW,[HRRM TAC,(TAC1)] ;STORE WORD COUNT IN 3RD WORD OF BUFFER.
>;IFE IMPNUM
IFN IMPNUM,<
HRRZ TAC,TAC ;Zero LH(TAC)
MOVSI AC2,DEPCBC
TDNE AC2,DEVCMR(DDB) ;Should we store LH of byte ptr?
XCTR XR,[HLL TAC,(JBUF)] ;Yes
XCTR XRW,[MOVEM TAC,(TAC1)] ;Store in 3rd word of buffer
>;IFN IMPNUM