1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-04 15:53:01 +00:00
Files
PDP-10.its/src/clib/c10sys.cmid
Lars Brinkhoff d23ccc6f74 Fix Y2K bug in C library now() function.
Use RQDATE instead of .RDATE.
2021-09-02 18:33:35 +02:00

694 lines
12 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;
; C10SYS - C LIBRARY ROUTINES (INTERFACES TO SYSTEM CALLS)
;
; This file is ITS dependent.
;
TITLE C10SYS
.INSRT NC
.INSRT NM
; CONTAINS:
; SYSOPEN ; OPEN CHANNEL
; CLOSE ; CLOSE CHANNEL
; CHNLOC ; FIND AVAILABLE CHANNEL
; UIIOT ; PERFORM UNIT INPUT IOT
; UOIOT ; PERFORM UNIT OUTPUT IOT
; SYSREAD ; PERFORM BLOCK INPUT IOT
; SYSWRITE ; PERFORM BLOCK OUTPUT IOT
; SIOT ; STRING IOT
; SYSFINISH ; FORCE OUTPUT AND WAIT FOR COMPLETION
; SYSFORCE ; FORCE OUTPUT TO DEVICE
; RESET ; RESET CHANNEL
; STATUS ; GET CHANNEL STATUS
; RFPNTR ; READ FILE ACCESS POINTER
; ACCESS ; PERFORM RANDOM ACCESS ON CHANNEL
; FILLEN ; GET FILE LENGTH
; FILNAM ; GET FILE NAME FROM CHANNEL
; RAUTH ; READ FILE AUTHOR
; SAUTH ; SET FILE AUTHOR
; RDMPBT ; READ DUMP BIT
; SDMPBT ; SET DUMP BIT
; SREAPB ; SET DO-NOT-REAP BIT
; RFDATE ; READ FILE CREATION DATE
; SFDATE ; SET FILE CREATION DATE
; SRDATE ; SET FILE REFERENCE DATE
; DSKUPD ; UPDATE FILE INFO
; RESRDT ; RESTORE FILE INFO
; TTYGET ; GET TTY STATUS
; TTYSET ; SET TTY STATUS
; CNSGET ; GET CONSOLE PARAMETERS
; CNSSET ; SET CONSOLE PARAMETERS
; ITYIC ; READ TTY INTERRUPT CHARACTER
; WHYINT ; WHY WAS I INTERRUPTED?
; SYSLISTEN ; LISTEN FOR TTY INPUT
; RCPOS ; READ CURSOR POSITION
; SCML ; SET # OF COMMAND LINES
; GETCPU ; RETURN CPU TIME IN 4.069 USEC
; CPUTM ; RETURN CPU TIME IN 1/60 SECONDS
; SLEEP ; GO TO SLEEP
; ETIME ; RETURN A TIME FOR ELAPSED TIME MEASUREMENT
; NOW ; GET CURRENT DATE AND TIME
; CORBLK ; PERFORM PAGE HACKING
; CORTYP ; GET INFORMATION ABOUT PAGE
; PAGEID ; GET NAMED PUBLIC PAGE
; PGWRIT ; CAUSE PAGE TO BE WRITTEN ON DISK
; RSNAME ; READ SNAME
; SSNAME ; SET SNAME
; RUNAME ; READ USER NAME
; RSUSET ; WHAT = RSUSET (WHERE)
; WSUSET ; WHAT = WSUSET (WHERE, WHAT)
; RUSET ; WHAT = RUSET (WHO, WHERE)
; WUSET ; WHAT = WUSET (WHO, WHERE, WHAT)
; WUSRVAR ; RC = WUSRVAR (JOB, SPEC, VALUE)
; DELETE ; DELETE A FILE
; SYSDEL ; DELETE FILE
; RENMWO ; RENAME FILE OPEN FOR OUTPUT
; SYSRNM ; EC = SYSRNM (FS1, FS2)
; SYSLNK ; EC = MAKE LINK (FS1, FS2)
; DIRSIZ ; READ DIRECTORY SIZE, QUOTA INFO
; TRANAD ; RC = TRANAD (JOB, FROM, TO, FLAGS)
; TRANCL ; RC = TRANCL (JOB, FLAGS)
; TRANDL ; RC = TRANDL (JOB, FILESPEC, FLAGS)
; SYSLOAD ; LOAD A PROGRAM
; PDUMP ; PDUMP A PROGRAM
; UCLOSE ; DESTROY INFERIOR JOB
; SYSDISOWN ; EC = SYSDISOWN (JOBCH)
; REOWN ; EC = REOWN (JOBCH)
; SYSDTACH ; EC = SYSDTACH (JOBCH)
; SYSATACH ; EC = SYSATACH (JOBCH, TTY)
; ATTY ; GIVE TTY TO INFERIOR
; DTTY ; TAKE TTY FROM INFERIOR
; WFNZ ; WAIT FOR WORD TO BECOME NON-ZERO
; WFZ ; WAIT FOR WORD TO BECOME ZERO
; VAL7RET ; VALRET AN ASCIZ STRING
; DEMSIG ; SIGNAL A DEMON PROCESS
; SSTATUS ; OBTAIN SYSTEM STATUS
; MAKTAG ; CREATE A TAG (GLOBAL LABEL)
; GOTAG ; GOTO A TAG, DISMISSING INTERRUPTS
CENTRY SYSOPEN,[CHAN, FILSPC, MODE] ; OPEN CHANNEL
HRLZ B,MODE
HRR B,CHAN
HRRZ C,FILSPC
SYSCAL OPEN,[B ? (C) ? 1(C) ? 2(C) ? 3(C)]
RETURN
CENTRY CLOSE,[CHAN] ; CLOSE CHANNEL
SYSCAL CLOSE,[CHAN]
RETURN
CENTRY CHNLOC ; FIND AVAILABLE CHANNEL
FIRSTC==1 ; CHANGE TO 0 IF SYSTEM FIXED SO THAT
; CHANNEL 0 IS NOT ARBITRARILY SMASHED
; BY .CALL MLINK, ETC.
MOVEI B,FIRSTC
CL$1: SYSCAL RFNAME,[B ? 2000,,C]
JUMPE C,CL$2 ; CHANNEL NOT OPEN
ADDI B,1
CAIGE B,20
GO CL$1
SETO A,
GO CL$RET
CL$2: MOVE A,B
CL$RET: RETURN
CENTRY UIIOT,[CHAN] ; PERFORM UNIT INPUT IOT
MOVE A,CHAN
ANDI A,17
LSH A,23.
IOR A,[.IOT A]
XCT A
RETURN
CENTRY UOIOT,[CHAN,DATA] ; PERFORM UNIT OUTPUT IOT
MOVE A,CHAN
ANDI A,17
LSH A,23.
IOR A,[.IOT DATA]
XCT A
MOVE A,DATA
RETURN
CENTRY SYSREAD,[CHAN,BUFFP,NWORDS] ; PERFORM BLOCK INPUT IOT
XENTRY SYSWRITE,SYSREAD ; PERFORM BLOCK OUTPUT IOT
MOVN A,NWORDS ; MINUS NUMBER OF WORDS
HRLZ 0,A
HRR 0,BUFFP ; SET UP CPTR
MOVE C,CHAN
ANDI C,17
LSH C,23.
IOR C,[.IOT 0]
XCT C
HLRE C,0 ; NEW COUNTER
SUB C,A ; NUMBER OF WORDS WRITTEN/READ
MOVE A,C
RETURN
CENTRY SIOT,[CHAN,BYTP,NBYTES] ; STRING IOT
SYSCAL SIOT,[CHAN ? BYTP ? NBYTES],SI$LOS
MOVE A,NBYTES
SI$RET: RETURN
SI$LOS: CROAK SIOT LOST
GO SI$RET
CENTRY SYSFINISH,[CHAN]
SYSCAL FINISH,[CHAN]
RETURN
CENTRY SYSFORCE,[CHAN]
SYSCAL FORCE,[CHAN]
RETURN
CENTRY RESET,[CHAN] ; RESET CHANNEL
MOVE A,CHAN
ANDI A,17
LSH A,23.
IOR A,[.RESET]
XCT A
SETZ A,
RETURN
CENTRY STATUS,[CHAN] ; GET CHANNEL STATUS
MOVE A,CHAN
LSH A,23.
IOR A,[.STATUS A]
XCT A
RETURN
CENTRY RFPNTR,[CHAN] ; READ FILE ACCESS POINTER
SYSCAL RFPNTR,[CHAN ? MOVEM B],RP$LOS
MOVE A,B
RP$RET: RETURN
RP$LOS: MOVN A,A
GO RP$RET
CENTRY ACCESS,[CHAN,POS] ; PERFORM RANDOM ACCESS ON CHANNEL
SYSCAL ACCESS,[CHAN ? POS]
RETURN
CENTRY FILLEN,[CHAN] ; GET FILE LENGTH
SYSCAL FILLEN,[CHAN ? 2000,,B],FL$LOS
MOVE A,B
FL$RET: RETURN
FL$LOS: MOVN A,A
GO FL$RET
CENTRY FILNAM,[CHAN,FILSPC] ; GET FILE NAME FROM CHANNEL
HRLZ B,CHAN ; CHANNEL
HRR B,FILSPC ; FILESPEC FOR RESULTS
MOVE C,4(B) ; SAVE 5TH WORD
.RCHST B, ; READ CHANNEL STATUS
HRLZS (B) ; LEFT ADJUST DEV
MOVEM C,4(B) ; RESTORE 5TH WORD
RETURN ; DONE
CENTRY RAUTH,[CHAN]
SYSCAL RAUTH,[CHAN ? MOVEM B],RA$LOS
MOVE A,B
RA$RET: RETURN
RA$LOS: MOVN A,A
GO RA$RET
CENTRY SAUTH,[CHAN,AUTHOR]
SYSCAL SAUTH,[CHAN ? AUTHOR]
RETURN
CENTRY RDMPBT,[CHAN]
SYSCAL RDMPBT,[CHAN ? MOVEM B],RD$LOS
MOVE A,B
RD$RET: RETURN
RD$LOS: MOVN A,A
GO RD$RET
CENTRY SDMPBT,[CHAN,BIT]
SYSCAL SDMPBT,[CHAN ? BIT]
RETURN
CENTRY SREAPB,[CHAN,BIT]
SYSCAL SREAPB,[CHAN ? BIT]
RETURN
CENTRY RFDATE,[CHAN] ; READ FILE CREATION DATE
SYSCAL RFDATE,[CHAN ? 2000,,B],RF$LOS
MOVE A,B
RF$RET: RETURN
RF$LOS: MOVN A,A
GO RF$RET
CENTRY SFDATE,[CHAN,FDATE] ; SET FILE CREATION DATE
SYSCAL SFDATE,[CHAN ? FDATE]
RETURN
CENTRY SRDATE,[CHAN,FDATE] ; SET FILE REFERENCE DATE
SYSCAL SRDATE,[CHAN ? FDATE]
RETURN
CENTRY DSKUPD,[CHAN]
SYSCAL DSKUPD,[CHAN]
RETURN
CENTRY RESRDT,[CHAN]
SYSCAL RESRDT,[CHAN]
RETURN
CENTRY TTYGET,[CHAN,BLOCK] ; GET TTY STATUS - WRITES 3 VALUES
HRRZ B,BLOCK
SYSCAL TTYGET,[CHAN ? MOVEM (B) ? MOVEM 1(B) ? MOVEM 2(B)]
RETURN
CENTRY TTYSET,[CHAN,BLOCK] ; SET TTY STATUS - READS 3 VALUES
HRRZ B,BLOCK
SYSCAL TTYSET,[CHAN ? (B) ? 1(B) ? 2(B)]
RETURN
CENTRY CNSGET,[CHAN,BLOCK] ; GET CONSOLE STATUS - WRITES 5 VALUES
HRRZ B,BLOCK
SYSCAL CNSGET,[CHAN ? MOVEM (B) ? MOVEM 1(B) ? MOVEM 2(B)
MOVEM 3(B) ? MOVEM 4(B)]
RETURN
CENTRY CNSSET,[CHAN,BLOCK] ; SET CONSOLE STATUS - READS 5 VALUES
HRRZ B,BLOCK
SYSCAL CNSSET,[CHAN ? (B) ? 1(B) ? 2(B) ? 3(B) ? 4(B)]
RETURN
CENTRY WHYINT,[CHAN,BLOCK]
HRRZ B,BLOCK
SYSCAL WHYINT,[CHAN ? (B) ? 1(B) ? 2(B) ? 3(B) ? 4(B)]
RETURN
CENTRY ITYIC,[CHAN] ; READ TTY INTERRUPT CHARACTER
MOVE A,CHAN ; CHANNEL
.ITYIC A,
SETO A,
RETURN
CENTRY SYSLISTEN,[CHAN] ; NCHARS = SYSLISTEN(CHAN)
SYSCAL LISTEN,[CHAN ? MOVEM B],LI$LOS
MOVE A,B
LI$RET: RETURN
LI$LOS: MOVN A,A
GO LI$RET
CENTRY RCPOS,[CHAN] ; READ TTY CURSOR POSITION (V,,H)
SYSCAL RCPOS,[CHAN ? 2000,,B],RC$LOS
MOVE A,B
RC$RET: RETURN
RC$LOS: MOVN A,A
GO RC$RET
CENTRY SCML,[CHAN,NUMBER]
SYSCAL SCML,[CHAN ? NUMBER]
RETURN
CENTRY GETCPU ; RETURN CPU TIME IN 4.069 USEC
.SUSET [24,,A]
RETURN
CENTRY CPUTM ; RETURN CPU TIME IN 1/60 SECONDS
.SUSET [24,,A]
LSH A,-12.
RETURN
CENTRY SLEEP,[TIME] ; GO TO SLEEP
MOVE A,TIME
.SLEEP A,
RETURN
CENTRY ETIME ; RETURN A TIME FOR ELAPSED TIME MEASUREMENT
.RDTIME A,
LSH A,1
RETURN
CENTRY NOW,[PCAL] ; GET CURRENT DATE AND TIME
HRRZ D,PCAL ; CAL POINTER
.CALL [SETZ ? 'RQDATE ? SETZM A]
JRST [SETZ A, ? RETURN]
LDB B,[331100,,A] ; YEAR
ADDI B,1900.
MOVEM B,(D)
LDB B,[270400,,A]
MOVEM B,1(D) ; MONTH
LDB B,[220500,,A]
MOVEM B,2(D) ; DAY
LDB A,[012100,,A]
IDIVI A,60.
MOVEM B,5(D) ; SECOND
IDIVI A,60.
MOVEM B,4(D) ; MINUTE
MOVEM A,3(D) ; HOUR
MOVEI A,(D)
RETURN
CENTRY CORBLK,[A1,A2,A3,A4,A5] ; PERFORM PAGE HACKING
SYSCAL CORBLK,[A1 ? A2 ? A3 ? A4 ? A5]
RETURN
CENTRY CORTYP,[PAGNO,OUTPUT] ; GET INFORMATION ABOUT PAGE
MOVE B,OUTPUT
SYSCAL CORTYP,[PAGNO ? 2000,,(B) ? 2000,,1(B) ? 2000,,2(B)
2000,,3(B)]
RETURN
CENTRY PAGEID,[VPN,IDN] ; GET NAMED PUBLIC PAGE
SYSCAL PAGEID,[VPN ? IDN ? 2000,,B],PI$LOS
MOVE A,B
PI$RET: RETURN
PI$LOS: MOVN A,A
GO PI$RET
CENTRY PGWRIT,[JOB,VPN]
SYSCAL PGWRIT,[JOB ? VPN]
RETURN
CENTRY RSNAME ; READ SNAME
.SUSET [.RSNAM,,A]
RETURN
CENTRY SSNAME,[NAME] ; SET SNAME
MOVE A,NAME
.SUSET [.SSNAM,,A]
RETURN
CENTRY RUNAME ; READ USER NAME
.SUSET [.RUNAM,,A]
RETURN
CENTRY RSUSET,[WHERE]
HRLZ A,WHERE
TLZ A,600000 ; CLEAR DIRECTION AND BLOCK BITS
ADDI A,A ; RESULT TO A
.SUSET A ; DO IT
RETURN
CENTRY WSUSET,[WHERE,WHAT]
HRLZ B,WHERE
TLO B,400000 ; SET DIRECTION BIT
TLZ B,200000 ; CLEAR BLOCK BIT
ADDI B,A ; TAKE WORD FROM A
MOVE A,WHAT
.SUSET B ; DO IT
RETURN
CENTRY RUSET,[WHO,WHERE]
HRLZ B,WHERE
TLZ B,600000 ; CLEAR DIRECTION AND BLOCK BITS
ADDI B,A ; RESULT TO A
HRRZ A,WHO
ANDI A,17 ; CHANNEL NUMBER
LSH A,23.
IOR A,[.USET B]
XCT A ; DO IT
RETURN
CENTRY WUSET,[WHO,WHERE,WHAT]
HRLZ B,WHERE
TLO B,400000 ; SET DIRECTION BIT
TLZ B,200000 ; CLEAR DIRECTION BIT
ADDI B,A ; TAKE WORD FROM A
HRRZ C,WHO
ANDI C,17 ; CHANNEL NUMBER
LSH C,23.
IOR C,[.USET B]
MOVE A,WHAT
XCT C ; DO IT
RETURN
CENTRY WUSRVAR,[JOB,SPEC,VALUE]
SETZ A,
SYSCAL USRVAR,[JOB ? SPEC ? VALUE]
RETURN
CENTRY DELETE,[FILNAM],[FDEV,FDIR,FFN1,FFN2] ; DELETE A FILE
MOVEI A,FDEV ; POINTER TO FILESPEC
CALL FPARSE,[FILNAM,A] ; CONSTRUCT FILESPEC
MOVEI A,FDEV
CALL SYSDELETE,[A] ; DELETE THAT FILE
RETURN
CENTRY SYSDELETE,[FILSPC] ; DELETE FILE
MOVE B,FILSPC ; ADDRESS OF FILESPEC BLOCK
HRLZI C,(SIXBIT/DSK/)
SKIPN (B)
MOVEM C,(B)
.SUSET [.RSNAM,,C]
SKIPN 3(B)
MOVEM C,3(B)
SYSCAL DELETE,[(B) ? 1(B) ? 2(B) ? 3(B)]
RETURN
CENTRY RENMWO,[CHAN,FILSPC] ; RENAME FILE OPEN FOR OUTPUT
HRRZ B,FILSPC
SYSCAL RENMWO,[CHAN ? 1(B) ? 2(B)]
RETURN
CENTRY SYSRNM,[FILSP1,FILSP2]
HRRZ B,FILSP1
HRRZ C,FILSP2
SYSCAL RENAME,[(B) ? 1(B) ? 2(B) ? 3(B) ? 1(C) ? 2(C) ? 3(C)]
RETURN
CENTRY SYSLNK,[FILSP1,FILSP2]
HRRZ B,FILSP1
HRRZ C,FILSP2
SYSCAL MLINK,[(B) ? 1(B) ? 2(B) ? 3(B) ? 1(C) ? 2(C) ? 3(C)]
RETURN
CENTRY DIRSIZ,[CHAN,BLOCK] ; WRITES 2 VALUES
HRRZ B,BLOCK
SYSCAL DIRSIZ,[CHAN ? (B) ? 1(B)]
RETURN
CENTRY TRANAD,[JOB,FROM,TO,FLAGS]
HRRZ B,JOB
HRL B,FLAGS
HRRZ C,FROM ; FROM FILESPEC
HRLI C,-4 ; MAKE IT A CPTR
HRRZ D,TO ; TO FILESPEC
HRLI D,-4 ; MAKE IT A CPTR
SYSCAL TRANAD,[B ? C ? D]
RETURN
CENTRY TRANCL,[JOB,FLAGS]
HRRZ B,JOB
HRL B,FLAGS
SKIPN FLAGS
HRLI B,300003 ; DEFAULT FLAGS
SYSCAL TRANCL,[B]
RETURN
CENTRY TRANDL,[JOB,FILSPC,FLAGS]
HRRZ B,JOB
HRL B,FLAGS
HRRZ C,FILSPC
HRLI C,-4 ; MAKE IT A CPTR
SYSCAL TRANDL,[B ? C]
RETURN
CENTRY SYSLOAD,[JOB,CHAN],[RCODE,OLDIOC] ; LOAD A PROGRAM
SETZM RCODE
CALL ON,[[[2]],[[1]]]
MOVEM A,OLDIOC
SYSCAL LOAD,[JOB ? CHAN],LD$LOS
LD$1: CALL ON,[[[2]],OLDIOC]
MOVE A,RCODE
RETURN
LD$LOS: SETOM RCODE
GO LD$1
CENTRY PDUMP,[JOBCH,DSKCH]
SETZ B,
SYSCAL PDUMP,[JOBCH ? DSKCH ? B]
RETURN
CENTRY UCLOSE,[JCHAN] ; DESTROY INFERIOR JOB
MOVE A,JCHAN
ANDI A,17
LSH A,23.
IOR A,[.UCLOSE]
XCT A
RETURN
CENTRY SYSDISOWN,[JCHAN]
SYSCAL DISOWN,[JCHAN]
RETURN
CENTRY REOWN,[JCHAN]
SYSCAL REOWN,[JCHAN]
RETURN
CENTRY SYSDTACH,[JCHAN]
SYSCAL DETACH,[JCHAN]
RETURN
CENTRY SYSATACH,[JCHAN,TTY] ; TTY<0 => DEFAULT
SKIPGE TTY
GO AT$1
SYSCAL ATTACH,[JCHAN ? TTY]
AT$RET: RETURN
AT$1: SYSCAL ATTACH,[JCHAN]
GO AT$RET
CENTRY ATTY,[JOB] ; GIVE TTY TO INFERIOR
MOVE B,JOB
ANDI B,17
LSH B,23.
IOR B,[.ATTY]
SETZ A,
XCT B
SETO A,
RETURN
CENTRY DTTY,[JOB] ; TAKE TTY FROM INFERIOR
MOVE B,JOB
ANDI B,17
LSH B,23.
IOR B,[.DTTY]
SETZ A,
XCT B
SETO A,
RETURN
CENTRY WFNZ,[PTR] ; WAIT FOR WORD TO BECOME NON-ZERO
MOVE A,PTR
SKIPN (A)
.HANG
MOVE A,(A)
RETURN
CENTRY WFZ,[PTR] ; WAIT FOR WORD TO BECOME ZERO
MOVE A,PTR
SKIPE (A)
.HANG
MOVE A,(A)
RETURN
CENTRY VAL7RET,[STR] ; VALRET AN ASCIZ STRING
HRRZ A,STR
HRLI A,(.VALUE)
XCT A
RETURN
CENTRY DEMSIG,[DEMON] ; SIGNAL A DEMON PROCESS
SYSCAL DEMSIG,[DEMON]
RETURN
CENTRY SSTATUS,[VALBLK] ; RETURNS 7 VALUES
HRRZ B,VALBLK
SYSCAL SSTATUS,[MOVEM (B) ? MOVEM 1(B) ? MOVEM 2(B)
MOVEM 3(B) ? MOVEM 4(B) ? MOVEM 5(B) ? MOVEM 6(B)]
RETURN
CENTRY MAKTAG,[TAGP]
HRRZ A,TAGP ; TAG POINTER
MOVE B,(P) ; RETURN PC
MOVEM B,(A) ; SAVE RETURN PC
MOVEI B,-2(P) ; STACK POINTER BEFORE CALL
MOVEM B,1(A) ; SAVE STACK POINTER
RETURN
CENTRY GOTAG,[TAGP]
MCALL DISMISS
MOVE A,TAGP
MOVE P,1(A)
HRRZ D,(A)
GO (D)
END