mirror of
https://github.com/PDP-10/its.git
synced 2026-01-27 20:47:38 +00:00
LD10, Lisp display slave.
This commit is contained in:
730
src/l/slave.8
Normal file
730
src/l/slave.8
Normal file
@@ -0,0 +1,730 @@
|
||||
|
||||
;;; **************************************************************
|
||||
TITLE ***** MACLISP ****** NEWIO DISPLAY SLAVE PACKAGE *************
|
||||
;;; **************************************************************
|
||||
;;; ** (C) COPYRIGHT 1976 MASSACHUSETTS INSTITUTE OF TECHNOLOGY **
|
||||
;;; ****** THIS IS A READ-ONLY FILE! (ALL WRITES RESERVED) *******
|
||||
;;; **************************************************************
|
||||
|
||||
.FASL
|
||||
IF1, .INSRT SYS:.FASL DEFS
|
||||
|
||||
.MLLIT==1
|
||||
TMPC==0 ;TEMP CHANNEL
|
||||
|
||||
VERPRT SLAVE
|
||||
|
||||
|
||||
;;; IMPURE AREA! BEWARE!
|
||||
|
||||
SIXOPD: 0
|
||||
SIXPG: 0
|
||||
|
||||
DEFINE FOODEF NAM,PT
|
||||
DEFINE NAM
|
||||
@<FOOTBL+PT> TERMIN
|
||||
TERMIN
|
||||
|
||||
ZZ==100
|
||||
.XCREF ZZ
|
||||
FOOTBL:
|
||||
IRP A,,[DENABL,DFUNCTION,ERRLOC,ASTATE,ARYNUM,XARG,YARG,PENPOS,DBRITE
|
||||
DSCALE,WRDCNT,MORFLG,DBUFFER]
|
||||
FOODEF A,\.-FOOTBL
|
||||
ZZ
|
||||
ZZ==ZZ+1
|
||||
TERMIN ;ARGUMENT CELLS
|
||||
LFOOTBL==.-FOOTBL
|
||||
BFLNTH==1777-ZZ
|
||||
|
||||
|
||||
ZZ==1
|
||||
.XCREF ZZ
|
||||
IRP FOO,,[CREATE,DISADD,DISSUB,DFLUSH,DDISALINE,DCLEAR,DMOVE,DGET,DSEND
|
||||
BLINK,UNBLINK,DCHANGE,DTEXT,DCOPY,WHERE,DPOINT,DNOOP,SHOWPEN,HIDEPEN
|
||||
LINK,UNLINK,MOTION,DLISTINF,DLIST,DSET,DFRAME]
|
||||
FOO==ZZ
|
||||
ZZ=ZZ+1
|
||||
.XCREF ZZ
|
||||
TERMIN
|
||||
|
||||
DEFINE DISON
|
||||
.SPECIAL ^F TERMIN
|
||||
DEFINE DISPON
|
||||
.SPECIAL ^N TERMIN
|
||||
DEFINE DISFIL
|
||||
.SPECIAL THE-DISPLAY-SLAVE-DIS-DEVICE-FILE TERMIN
|
||||
DEFINE SIXFIL
|
||||
.SPECIAL THE-DISPLAY-SLAVE-PDP-6-FILE TERMIN
|
||||
DEFINE SIXCHN
|
||||
.SPECIAL THE-DISPLAY-SLAVE-PDP-6-CHANNEL TERMIN
|
||||
|
||||
.SXEVAL (SETQ ^F NIL
|
||||
^N NIL
|
||||
THE-DISPLAY-SLAVE-DIS-DEVICE-FILE NIL
|
||||
THE-DISPLAY-SLAVE-PDP-6-FILE NIL
|
||||
THE-DISPLAY-SLAVE-PDP-6-CHANNEL NIL)
|
||||
|
||||
.ENTRY DISPLAY SUBR 0003 ;SUBR 2
|
||||
DISPLAY: MOVEI R,DISADD ;FOR BACKTRACEING PURPOSES, THIS IS HERE
|
||||
JRST DISP1
|
||||
|
||||
.ENTRY THE-DISPLAY-SLAVE-^Y-INTERRUPT SUBR 0003 ;SUBR 2
|
||||
CN.Y: PUSHJ P,CLZDIS
|
||||
SKIPE DISON
|
||||
SKIPN SIXOPD
|
||||
POPJ P,
|
||||
SETZM DENABL
|
||||
SETZM DISON
|
||||
PUSHJ P,DISLEEP
|
||||
JRST YF.MES
|
||||
POPJ P,
|
||||
|
||||
.ENTRY THE-DISPLAY-SLAVE-^N-INTERRUPT SUBR 0003 ;SUBR 2
|
||||
CN.N: SKIPN DISFIL
|
||||
POPJ P,
|
||||
SKIPE DISON
|
||||
SKIPN SIXOPD
|
||||
JRST CN.N1
|
||||
SETZM DENABL
|
||||
PUSHJ P,DISLEEP
|
||||
JRST DERR0(A)
|
||||
CN.N1: SETZM DISON
|
||||
PUSH P,[CN.N2]
|
||||
PUSH P,[.SX ((DIS)) ]
|
||||
PUSH P,[.SX (OUT SINGLE ASCII) ]
|
||||
MOVNI T,2
|
||||
JCALL 16,.FUNCTION OPEN
|
||||
CN.N2: MOVEM A,DISFIL
|
||||
HRRZ B,.SPECIAL OUTFILES
|
||||
CALL 2,.FUNCTION CONS
|
||||
MOVEM B,.SPECIAL OUTFILES
|
||||
MOVEI A,.ATOM T
|
||||
MOVEM A,DISPON
|
||||
POPJ P,
|
||||
|
||||
.ENTRY THE-DISPLAY-SLAVE-^F-INTERRUPT SUBR 0003 ;SUBR 2
|
||||
CN.F: SKIPN DISON
|
||||
SKIPN SIXFIL ;CAUSES SLAVE TO TRY TO GRAB 340
|
||||
POPJ P, ;IF IT DOESN'T ALREADY HAVE IT
|
||||
PUSHJ P,CLZDIS
|
||||
SETOM DENABL
|
||||
PUSHJ P,DISLEEP
|
||||
JRST YF.MES
|
||||
MOVEI A,.ATOM T
|
||||
MOVEM A,DISON
|
||||
POPJ P,
|
||||
|
||||
YF.MES: STRT @DERR0(A)
|
||||
POPJ P,
|
||||
|
||||
.SXEVAL (SSTATUS TTYINT #6 (QUOTE THE-DISPLAY-SLAVE-^F-INTERRUPT))
|
||||
.SXEVAL (SSTATUS TTYINT #16 (QUOTE THE-DISPLAY-SLAVE-^N-INTERRUPT))
|
||||
.SXEVAL (SSTATUS TTYINT #31 (QUOTE THE-DISPLAY-SLAVE-^Y-INTERRUPT))
|
||||
|
||||
CLZDIS: SETZM DISPON ;(SETQ ^N NIL)
|
||||
SETZ A,
|
||||
EXCH A,DISFIL
|
||||
JUMPE A,CLZDS2
|
||||
PUSH P,A
|
||||
HRRZ B,.SPECIAL OUTFILES
|
||||
CALL 2,.FUNCTION *DELQ
|
||||
MOVEM A,.SPECIAL OUTFILES
|
||||
HRRZ A,(P)
|
||||
HRRZ B,.SPECIAL ECHOFILES
|
||||
CALL 2,.FUNCTION *DELQ
|
||||
MOVEM A,.SPECIAL ECHOFILES
|
||||
POP P,A
|
||||
CALL 1,.FUNCTION CLOSE
|
||||
CLZDS2: POPJ P,
|
||||
|
||||
DISLEEP:
|
||||
MOVEI A,DNOOP
|
||||
MOVEM A,DFUNCTION
|
||||
AOS (P) ;SKIPS IF SLAVE IS ALIVE AND WELL
|
||||
MOVEI T,20. ;ELSE, NOSKIP AND LEAVE ERROR NUMBER IN A
|
||||
SKIPL SIXOPD
|
||||
MOVEI T,100. ;FOR PDP10, WAIT UP TO 3.3 SECONDS
|
||||
DISLP3: MOVEI T,1 ;[FOR PDP6, UP TO .6 SECS] FOR SLAVE TO RESPOND
|
||||
.SLEEP T,
|
||||
SKIPE A,ERRLOC
|
||||
DISLP4: SOSA (P)
|
||||
SKIPN DFUNCTION
|
||||
POPJ P,
|
||||
SOJL T,DISLP4
|
||||
JRST DISLP3
|
||||
|
||||
|
||||
|
||||
WAITSK: MOVEI F,1111. ;WAITS 1/30TH OF A SECOND, IN FAST MODE
|
||||
XCT (T)
|
||||
SOJN F,.-1
|
||||
JUMPN F,2(T)
|
||||
MOVEI F,30. ;JDC SAYS 10. ISN'T ENOUGH
|
||||
SKIPL SIXOPD
|
||||
MOVEI F,100. ;SKIP IF XCT'D SKIP WORKS WITHIN SOME
|
||||
WASKP1: JUMPLE F,1(T) ;REASONABLE QUANTUM. BUT NO SKIP IF
|
||||
MOVEI D,1 ;IT DOESN'T
|
||||
.SLEEP D, ;THEN WAITS N 30THS OF A SECOND
|
||||
WASKP2: XCT (T) ;IN SLOW MODE
|
||||
SOJA F,WASKP1
|
||||
JRST 2(T)
|
||||
|
||||
CLSSIX: SKIPN SIXOPD
|
||||
POPJ P,
|
||||
LOCKI
|
||||
SETZM DENABL
|
||||
PUSHJ P,DISLEEP
|
||||
MOVEI A,NIL
|
||||
SETZM DISON
|
||||
SETZM SIXOPD
|
||||
.CALL CLSSX7
|
||||
.VALUE
|
||||
MOVE T,@SIXCHN
|
||||
LSH T,27
|
||||
IOR T,[.UCLOSE]
|
||||
XCT T
|
||||
SETZM SIXCHN
|
||||
SETZM SIXFIL
|
||||
UNLKPOPJ
|
||||
|
||||
CLSSX7: SETZ
|
||||
SIXBIT \CORBLK\ ;HACK CORE PAGE
|
||||
1000,,0 ;DELETE PAGE
|
||||
1000,,-1 ;FROM ME
|
||||
402000,,SIXPG ;THIS PAGE
|
||||
|
||||
|
||||
OPNSIX: SKIPE SIXOPD
|
||||
POPJ P,
|
||||
MOVE T,[SIXBIT \USR\]
|
||||
PUSHJ P,ALFILE
|
||||
MOVEM A,SIXFIL
|
||||
MOVE TT,F
|
||||
JSP T,FXCONS
|
||||
MOVEM A,SIXCHN
|
||||
LOCKI ;R<0 => SLAVE IS PDP6, >0 => PDP10
|
||||
MOVNI R,1 ;R=0 => TRYING TO LOAD 6'S MEMORY AND START UP
|
||||
.CALL [ SETZ
|
||||
SIXBIT \OPEN\
|
||||
5000,,7 ;IMAGE BLOCK OUTPUT
|
||||
,,@SIXCHN ;CHANNEL #
|
||||
,,[SIXBIT \USR\] ;USR DEVICE
|
||||
1000,,0 ;MY UNAME
|
||||
400000,,[SIXBIT \PDP6\]] ;JNAME=PDP6
|
||||
JRST OP10
|
||||
OP6D2: SKIPN SIXPG
|
||||
JRST OP6D2Q
|
||||
MOVEI TT,1
|
||||
PUSHJ P,GETCOR
|
||||
SKIPN TT
|
||||
LERR [SIXBIT \NO CORE FOR MAPPING DISPLAY SLAVE!\]
|
||||
MOVE D,[-LFOOTBL,,FOOTBL]
|
||||
ADDM TT,(D)
|
||||
AOBJN D,.-1
|
||||
LSH TT,-12
|
||||
MOVEM TT,SIXPG
|
||||
OP6D2Q: .CALL SIXMAP
|
||||
.VALUE
|
||||
OPD62A: MOVEM R,SIXOPD ;IF OPENING 6, THEN R=-1 WILL ALLOW SECOND TRY
|
||||
OP6A: MOVEI TT,DCLEAR ;R = 0 SAYS TRY 10SLAVE IF NO RESPONSE
|
||||
MOVEM TT,DFUNCTION
|
||||
JSP T,WAITSK
|
||||
SKIPE DFUNCTION
|
||||
JRST OP6C
|
||||
AOS DISON
|
||||
SETZM MORFLG
|
||||
SKIPL SIXOPD ;CLEARING WORKED, SO SLAVE IS RUNNING WELL
|
||||
|
||||
UNLKPOPJ
|
||||
JSP D,OPDSMS ;ANNOUNCE FACT, IF PDP6 WAS GRABBED
|
||||
SETZ [SIXBIT \SLAVE GRABBED^M!\]
|
||||
UNLKPOPJ
|
||||
|
||||
|
||||
OP6C: JUMPGE R,OP6B ;ON FIRST FAILURE, TRY TO LOAD DISPLAY FROM DISK
|
||||
.OPEN TMPC,[SIXBIT \ &SYSATSIGN6SLAVE\]
|
||||
OP6C1: LERR DERR1
|
||||
.CALL [ SETZ
|
||||
SIXBIT \RESET\
|
||||
400000,,@SIXCHN ]
|
||||
.VALUE
|
||||
.CALL LSIXC ;LOAD UP SIX
|
||||
.VALUE
|
||||
.CLOSE TMPC,
|
||||
MOVE TT,[JRST 2000] ;IF PDP6 IS RUNNING, IT WILL BE AT LOCATION 41
|
||||
MOVE T,SIXPG
|
||||
LSH T,12
|
||||
MOVEM TT,41(T)
|
||||
AOJA R,OP6A
|
||||
|
||||
SIXMAP: SETZ
|
||||
SIXBIT \CORBLK\ ;HACK CORE PAGE
|
||||
1000,,300000 ;READ/WRITE ACCESS
|
||||
1000,,-1 ;MY PAGE
|
||||
,,SIXPG ;PAGE NUMBER
|
||||
,,@SIXCHN ;FROM PDP6
|
||||
401000,,0 ;ITS PAGE 0
|
||||
|
||||
|
||||
OP10: JSP D,OPDSMS
|
||||
[SIXBIT \NOT AVAILABLE!\]
|
||||
JRST OPNTEN
|
||||
OP6B: PUSHJ P,CLSSIX
|
||||
JUMPN R,DERR0
|
||||
JSP D,OPDSMS
|
||||
[SIXBIT \NOT RUNNING!\]
|
||||
OPNTEN: .CALL [ SETZ
|
||||
SIXBIT \OPEN\
|
||||
5000,,6 ;IMAGE BLOCK INPUT
|
||||
,,@SIXCHN
|
||||
,,[SIXBIT \USR\] ;USR DEVICE
|
||||
1000,,0 ;MY UNAME
|
||||
400000,,[SIXBIT \DSLAVE\]] ;RANDOM JOB
|
||||
.VALUE
|
||||
.OPEN TMPC,[SIXBIT \ &SYSATSIGN10SLAV\]
|
||||
JRST OP6C1
|
||||
.CALL LSIXC
|
||||
.VALUE
|
||||
.CLOSE TMPC,
|
||||
.CALL SIXMAP
|
||||
.VALUE
|
||||
MOVEM F,XARG ;0 => 340 SLAVE, "TNM" => GT40 SLAVE
|
||||
MOVE T,@SIXCHN
|
||||
LSH T,27
|
||||
IOR T,[.USET [.SUPC,,[2000]]] ;LOC OF STARTING ADDRESS
|
||||
XCT T
|
||||
MOVE T,@SIXCHN
|
||||
LSH T,27
|
||||
IOR T,[.USET [.SUSTP,,[0]]] ;BREATHE SOME LIFE INTO SLAVE
|
||||
XCT T
|
||||
MOVEI R,1 ;R=1 SAYS 10SLAVE TAKEN
|
||||
JRST OP6D2
|
||||
|
||||
OPDSMS: PUSHJ P,IOGBND
|
||||
STRT [SIXBIT \^MPDP6 !\]
|
||||
STRT @(D)
|
||||
SKIPL (D) ;SKIP FOLLOWING MSG IF ANNOUNCING PDP6 GRABBED
|
||||
STRT [SIXBIT \ TRYING PDP10 SLAVE^M!\]
|
||||
PUSHJ P,UNBIND
|
||||
JRST 1(D)
|
||||
|
||||
LSIXC: SETZ
|
||||
SIXBIT \LOAD\
|
||||
,,@SIXCHN ;TO CHANNEL
|
||||
401000,,TMPC ;FROM CHANNEL
|
||||
|
||||
CK6OPN: SKIPE SIXOPD ;QUICK CHECK FOR A WORKING SLAVE
|
||||
JRST (T)
|
||||
PUSH P,T
|
||||
CK6NOPN: SKIPE SIXOPD ;LOOP AROUND THE FAIL-ACT UNTIL SLAVE IS OPENED
|
||||
CCK6NOPN: POPJ P,CK6NOPN
|
||||
DISNOPN: PUSH P,CCK6NOPN ;CAUSES RETRY OF TEST, AND EXIT THRU (T) IF WIN
|
||||
%FAC DERR2
|
||||
|
||||
|
||||
CSENDIT: SKIPN SIXOPD ;CHECK FIRST, THEN SENDIT
|
||||
PUSHJ P,DISNOPN
|
||||
MOVEM R,ARYNUM ;ARYNUM ARGUMENT IN R
|
||||
SENDIT: MOVEM TT,DFUNCTION ;TT=FUNCTION NUMBER
|
||||
SNDT1: AOS (P) ;SKIP IF WIN
|
||||
SNDT1A: JSP T,WAITSK
|
||||
SKIPE DFUNCTION
|
||||
JRST SNDT2
|
||||
ERRTST: MOVE TT,ARYNUM ;LEAVE ARYNUM IN TT
|
||||
SKIPN D,ERRLOC ;MUST BE AN ERROR
|
||||
POPJ P, ;ERRLOC=0 => NO ERRORS
|
||||
ERTST1: JSP T,FIX1A
|
||||
CALL 1,.FUNCTION NCONS
|
||||
MOVEI B,.ATOM DISPLAY
|
||||
CALL 2,.FUNCTION XCONS
|
||||
SOS (P) ;NO SKIP IF LOSE
|
||||
%FAC @DERR0(D)
|
||||
|
||||
SNDT2: SKIPE ERRLOC ;COME HERE WHEN THINGS HAVE BEEN GOING ON FOR A LONG TIME
|
||||
JRST ERRTST
|
||||
CAIE TT,DFRAME
|
||||
CAIN TT,MOTION ;TT STILL HAS DFUNCTION IN IT
|
||||
JRST SNDT1A ;MOTION IS ALLOWED TO GO ON FOR EVER
|
||||
SETZB TT,D ;DEAD SLAVE - BOO HOO
|
||||
JRST ERTST1
|
||||
|
||||
.ENTRY DISINI LSUBR 1003 ;LSUBR (0 . 2)
|
||||
DISINI: AOJG T,DCLR1
|
||||
AOJL T,DISTMA
|
||||
SETZ F,
|
||||
JUMPN T,DCLR5
|
||||
POP P,A
|
||||
PUSHJ P,SIXMAK
|
||||
HLRZ F,TT
|
||||
PUSHJ P,CLSSIX
|
||||
LOCKI
|
||||
PUSHJ P,OPNTEN
|
||||
JRST DCLR5A
|
||||
|
||||
DCLR5: PUSHJ P,OPNSIX ;GRAB SLAVE IF POSSIBLE
|
||||
DCLR5A: POP P,A ;IF ARGUMENT GIVEN, THEN SET ASTATE
|
||||
JSP T,FXNV1
|
||||
DCLR3: JUMPL TT,.+2
|
||||
CAILE TT,3 ;IF ARG NOT IN RANGE 0 - 3, THEN DONT CHANGE ASTATE
|
||||
MOVE TT,ASTATE
|
||||
EXCH TT,ASTATE
|
||||
JRST FIX1
|
||||
|
||||
DCLR1: SKIPN SIXOPD
|
||||
JRST DCLR4
|
||||
MOVEI TT,DCLEAR ;OTHERWISE SIMPLY CLEAR AND INITIALIZE
|
||||
MOVEM TT,DFUNCTION
|
||||
JSP T,WAITSKP
|
||||
SKIPE DFUNCTION
|
||||
JRST SNDT2
|
||||
JRST DCLR3
|
||||
DCLR4: SETZ F,
|
||||
PUSHJ P,OPNSIX
|
||||
MOVE TT,ASTATE
|
||||
JRST FIX1
|
||||
|
||||
.ENTRY DISCREATE LSUBR 1003 ;LSUBR (0 . 2)
|
||||
DISCREATE: MOVE TT,T
|
||||
JSP T,CK6OPN
|
||||
SETZM XARG
|
||||
SETZM YARG
|
||||
AOJG TT,DSCRT1
|
||||
AOJN TT,DISTMA
|
||||
POP P,C
|
||||
POP P,B
|
||||
PUSHJ P,DISXY
|
||||
DSCRT1: MOVEI TT,CREATE
|
||||
PUSHJ P,SENDIT
|
||||
POPJ P, ;CUT OUT ON FAILURE
|
||||
JRST FIX1
|
||||
|
||||
.ENTRY DISCOPY SUBR 0002 ;SUBR 1
|
||||
DISCOPY: MOVEI R,DCOPY
|
||||
PUSHJ P,DISP1B
|
||||
POPJ P, ;CUT OUT ON FAILURE
|
||||
JRST FIX1
|
||||
|
||||
.ENTRY DISBLINK SUBR 0003 ;SUBR 2
|
||||
DISBLINK: MOVEI R,BLINK ;DISPLAY ALSO ENTERS HERE
|
||||
DISP1: SKIPN B ;ENTER WITH FUN NUMBER IN R, LISP NUM FOR ARYNUM IN A
|
||||
AOSA R ;DISADD ==> DISSUB, BLINK ==> UNBLINK, ETC.
|
||||
DISP1C: MOVEI B,.ATOM T
|
||||
PUSHJ P,DISP1B
|
||||
JFCL
|
||||
MOVEI A,(B)
|
||||
POPJ P,
|
||||
|
||||
DISP1B: JSP T,FXNV1 ;SKIPS IF ACTION WINS
|
||||
EXCH TT,R ;ARYNUM IN R, FUNCTION IN TT
|
||||
DISXIT: PUSHJ P,CSENDIT
|
||||
POPJ P, ;CUT OUT ON FAILURE
|
||||
DISXT2: AOS (P)
|
||||
POPJ P,
|
||||
|
||||
.ENTRY DISLINK SUBR 0004 ;SUBR 3
|
||||
DISLINK: MOVEI R,LINK
|
||||
JSP T,FXNV2
|
||||
MOVE B,C
|
||||
JRST DSMK1
|
||||
|
||||
.ENTRY DISMARK SUBR 0003 ;SUBR 2
|
||||
DISMARK: MOVEI R,SHOWPEN
|
||||
JSP T,FXNV2
|
||||
HRLZ B,TT+1 ;IF 2ND ARG IS 0, THEN DO A UNMARK
|
||||
DSMK1: JSP T,CK6OPN
|
||||
MOVEM TT+1,XARG
|
||||
JRST DISP1
|
||||
|
||||
.ENTRY DISFRAME SUBR 0002 ;SUBR 1
|
||||
DISFRAME: JSP T,FXNV1
|
||||
JSP T,CK6OPN
|
||||
MOVEM TT,WRDCNT
|
||||
MOVEI TT,DFRAME
|
||||
PUSHJ P,SENDIT
|
||||
JFCL
|
||||
MOVEI A,.ATOM T
|
||||
POPJ P,
|
||||
|
||||
.ENTRY DISET LSUBR 2004 ;LSUBR (1 . 3)
|
||||
DISET: MOVEI F,1
|
||||
MOVNI TT,2
|
||||
JSP D,PPBSL
|
||||
MOVEI R,DSET
|
||||
JRST DAL2
|
||||
.ENTRY DISFLUSH LSUBR 0 ;LSUBR ANY
|
||||
DISFLUSH: MOVEI A,NIL
|
||||
AOJG T,CLSSIX ;(DISFLUSH) SAYS TO FLUSH SLAVE
|
||||
MOVN C,T
|
||||
MOVEI R,DFLUSH ;(DISFLUSH N) SAYS FLUSH DISPLAY ITEM N
|
||||
POP P,A
|
||||
PUSHJ P,DISP1B
|
||||
JFCL
|
||||
SOJGE C,.-3
|
||||
MOVEI A,.ATOM T
|
||||
POPJ P,
|
||||
|
||||
.ENTRY DISAPOINT LSUBR 4005 ;LSUBR (3 . 4)
|
||||
DISAPOINT: MOVEI R,DPOINT
|
||||
JRST DAL0
|
||||
.ENTRY DISALINE LSUBR 4006 ;LSUBR (3 . 5)
|
||||
DISALINE: MOVEI R,DDISALINE
|
||||
DAL0: MOVNI TT,2
|
||||
MOVEI F,3
|
||||
JSP D,PPBSL
|
||||
DAL1: POP P,B
|
||||
POP P,A
|
||||
MOVEI T,3
|
||||
CAMN T,ASTATE
|
||||
JRST DAL3
|
||||
DAL4: JSP T,FXNV1
|
||||
JSP T,FXNV2
|
||||
DAL5: MOVEM TT,XARG
|
||||
MOVEM TT+1,YARG
|
||||
DAL2: POP P,A
|
||||
JRST DISP1C
|
||||
|
||||
DAL3: JSP T,FLTSKP ;OOPS, POLAR COORDINATES
|
||||
JSP T,DALMES
|
||||
MOVE A,B
|
||||
MOVE TT+1,TT
|
||||
JSP T,FLTSKP
|
||||
JSP T,DALMES
|
||||
EXCH TT,TT+1
|
||||
JRST DAL5
|
||||
|
||||
|
||||
.ENTRY DISLOCATE SUBR 0004 ;SUBR 3
|
||||
DISLOCATE: PUSHJ P,DISXY
|
||||
MOVEI R,DMOVE
|
||||
JRST DISP1C
|
||||
|
||||
DISXY: MOVEI F,XARG ;YARG=XARG+1
|
||||
DISXY1: JSP T,CK6OPN
|
||||
JSP T,FXNV2
|
||||
MOVEM D,(F)
|
||||
JSP T,FXNV3
|
||||
MOVEM R,1(F)
|
||||
POPJ P,
|
||||
|
||||
DSCLUZ: SUB P,[3,,3] ;LOSE AT DISCUSS
|
||||
POPJ P,
|
||||
|
||||
.ENTRY DISCUSS LSUBR 5006 ;LSUBR (4 . 5)
|
||||
DISCUSS: MOVEI F,4
|
||||
MOVNI TT,1
|
||||
JSP D,PPBSL
|
||||
POP P,A
|
||||
DSCS2: MOVEI TT,0
|
||||
PUSH P,[DSCLUZ] ;JUST IN CASE MFGWT LOSES
|
||||
JSP T,MFGWT ;SO NOW 6 IS LOCKED OUT OF BUFFER
|
||||
SUB P,[1,,1]
|
||||
HRROI R,DSCS1
|
||||
MOVNI AR1,BFLNTH*BYTSWD
|
||||
MOVEI AR2A,DBUFFER ;MUST DO IT THIS WAY
|
||||
HRLI AR2A,440700
|
||||
PUSHJ P,PRINTA
|
||||
MOVEI TT,BFLNTH*BYTSWD(AR1) ;# OF BYTES INSRTED
|
||||
MOVEM TT,WRDCNT
|
||||
MOVEI R,DTEXT
|
||||
SETOM MORFLG
|
||||
JRST DAL1
|
||||
|
||||
DSCS1: AOSGE AR1 ;FUNCTION CALLED BY PRINC
|
||||
IDPB A,AR2A
|
||||
POPJ P,
|
||||
|
||||
PPBSL: SKIPN SIXOPD ;PROCESS OPTIONAL BSL AND PENPOS ARGS
|
||||
PUSHJ P,DISNOPN ;F HOLDS NUMBER OF REQUIRED ARGS
|
||||
ADD F,T ;TT HOLDS -<MAXIMUN NUMBER OF OPTIONAL ARGS>
|
||||
CAML F,TT
|
||||
CAILE F,0
|
||||
DISTMA: LERR DERR3 ;WNA - DSLAVE
|
||||
PPBSL1: JUMPE F,(D)
|
||||
MOVE A,(P)
|
||||
JUMPE A,PPBSL2
|
||||
CALL 1,.FUNCTION TYPEP
|
||||
CAIN A,.ATOM LIST
|
||||
JRST PPBSL3
|
||||
AOJE TT,.+2 ;IF ONLY ONE OPTIONAL PERMITTED, IT MUST BE BSL
|
||||
CAIE A,.ATOM FIXNUM
|
||||
JRST PPBSL4
|
||||
MOVE A,(P)
|
||||
JSP T,FXNV1
|
||||
MOVEM TT,PENPOS
|
||||
PPBSL2: SUB P,[1,,1]
|
||||
MOVEI TT,0
|
||||
AOJA F,PPBSL1
|
||||
|
||||
PPBSL3: MOVE A,(P) ;PROCESS A BSL LIST
|
||||
HLRZ A,(A)
|
||||
JSP T,FXNV1
|
||||
MOVEM TT,DBRITE
|
||||
HRRZ A,@(P)
|
||||
JUMPE A,PPBSL2
|
||||
HLRZ A,(A)
|
||||
JSP T,FXNV1
|
||||
MOVEM TT,DSCALE
|
||||
JRST PPBSL2
|
||||
|
||||
.ENTRY DISCHANGE SUBR 0004 ;SUBR 3
|
||||
DISCHANGE: MOVEI F,DBRITE ;DSCALE=DBRITE+1
|
||||
PUSHJ P,DISXY1
|
||||
MOVEI R,DCHANGE
|
||||
JRST DISP1C
|
||||
|
||||
.ENTRY DISMOTION SUBR 0005 ;SUBR 4
|
||||
DISMOTION: PUSHJ P,DISXY
|
||||
EXCH A,AR1
|
||||
JSP T,FLTSKP
|
||||
JSP T,IFLOAT
|
||||
EXCH A,AR1
|
||||
MOVEM TT,WRDCNT
|
||||
MOVEI R,MOTION
|
||||
PUSHJ P,DISP1B
|
||||
POPJ P, ;CUT OUT ON FAILURE
|
||||
MOVE D,[-2,,XARG]
|
||||
JRST DSCB1A
|
||||
|
||||
.ENTRY DISLIST LSUBR 1002 ;LSUBR (0 . 1)
|
||||
DISLIST: AOJG T,DSLS1
|
||||
JUMPN T,DISTMA
|
||||
POP P,A
|
||||
MOVEI R,DLISTINF
|
||||
PUSHJ P,DISP1B
|
||||
POPJ P, ;CUT OUT ON FAILURE
|
||||
JRST DSLS2
|
||||
DSLS1: MOVEI TT,DLIST
|
||||
PUSHJ P,CSENDIT
|
||||
POPJ P, ;CUT OUT ON FAILURE
|
||||
DSLS2: MOVN D,XARG
|
||||
JUMPE D,DSLS2Q
|
||||
HRLI D,DBUFFER
|
||||
MOVSS D
|
||||
JRST DSCB1A
|
||||
|
||||
DSLS2Q: SETZ A,
|
||||
POPJ P,
|
||||
|
||||
.ENTRY DISCRIBE SUBR 0002 ;SUBR 1
|
||||
DISCRIBE: MOVEI R,WHERE
|
||||
PUSHJ P,DISP1B
|
||||
POPJ P, ;CUT OUT ON FAILURE
|
||||
MOVEI D,DBUFFER ;MUST DO IT THIS WAY
|
||||
HRLI D,-10
|
||||
DSCB1A: MOVEI B,NIL
|
||||
HLRE R,D
|
||||
DSCB1: MOVE TT,(D)
|
||||
JSP T,FIX1A
|
||||
PUSH P,A
|
||||
AOBJN D,DSCB1
|
||||
MOVE T,R
|
||||
JCALL 16,.FUNCTION LIST
|
||||
|
||||
MFGWT: SKIPN MORFLG ;MORFLG WAIT - I.E., WAIT UNTIL MORFLG GOES TO ZERO
|
||||
JRST (T)
|
||||
PUSH P,T
|
||||
JSP T,WAITSK
|
||||
SKIPE MORFLG
|
||||
CAIA
|
||||
POPJ P,
|
||||
SUB P,[1,,1]
|
||||
AOS (P)
|
||||
JRST SNDT2
|
||||
|
||||
.ENTRY DISGORGE SUBR 0002 ;SUBR 1
|
||||
DISGORGE: JSP T,CK6OPN
|
||||
JSP T,MFGWT
|
||||
SETOM MORFLG
|
||||
JSP T,FXNV1
|
||||
MOVEM TT,ARYNUM
|
||||
HRLOI R,DSEND
|
||||
HLRZM R,DFUNCTION
|
||||
JSP T,MFGWT
|
||||
MOVE TT,WRDCNT
|
||||
PUSH P,[DSGQX1]
|
||||
PUSH P,[NIL]
|
||||
PUSH P,[.ATOM FIXNUM ]
|
||||
PUSH FXP,TT
|
||||
MOVEI A,(FXP)
|
||||
PUSH P,A
|
||||
MOVNI T,3
|
||||
JCALL 16,.FUNCTION *ARRAY
|
||||
DSGQX1: SUB FXP,[1,,1]
|
||||
HRRZ R,TTSAR(B)
|
||||
MOVE TT,WRDCNT
|
||||
DSGRG1: JSP T,MFGWT
|
||||
CAIG TT,BFLNTH
|
||||
SKIPA F,TT
|
||||
MOVEI F,BFLNTH
|
||||
ADDI F,-1(R)
|
||||
HRLI R,DBUFFER
|
||||
BLT R,(F)
|
||||
MOVEI R,1(F)
|
||||
HRREI TT,-BFLNTH(TT)
|
||||
JUMPLE TT,CPOPJ
|
||||
SETOM MORFLG
|
||||
JRST DSGRG1
|
||||
|
||||
|
||||
DSGQX4: SUB P,[1,,1]
|
||||
WTA [BAD ARG - DISGOBBLE!]
|
||||
.ENTRY DISGOBBLE SUBR 0002 ;SUBR 1
|
||||
DISGOBBLE: PUSH P,A
|
||||
CALL 1,.FUNCTION TYPEP
|
||||
CAIN A,.ATOM ARRAY
|
||||
JRST DSGQX3
|
||||
HRRZ A,(P)
|
||||
MOVEI A,.ATOM ARRAY
|
||||
CALL 2,.FUNCTION GET
|
||||
JUMPE A,DSGQX4
|
||||
DSGQX3: SUB P,[1,,1]
|
||||
JSP T,MFGWT
|
||||
MOVE R,ASAR(A)
|
||||
HLRE TT,-1(R)
|
||||
HRRZ R,-1(R)
|
||||
MOVNS TT
|
||||
MOVEM TT,WRDCNT
|
||||
MOVEI F,DGET
|
||||
MOVEM F,DFUNCTION
|
||||
DSGBL1: CAIG TT,BFLNTH
|
||||
SKIPA F,TT
|
||||
MOVEI F,BFLNTH
|
||||
MOVEI T,DBUFFER
|
||||
HRL T,R
|
||||
ADD R,F
|
||||
ADDI F,DBUFFER
|
||||
SUBI F,1 ;MUST DO IT THIS WAY
|
||||
BLT T,(F)
|
||||
HRREI TT,-BFLNTH(TT)
|
||||
SETOM MORFLG
|
||||
JSP T,MFGWT
|
||||
JUMPG TT,DSGBL1
|
||||
PUSHJ P,SNDT1
|
||||
POPJ P, ;CUT OUT ON FAILURE
|
||||
JRST FIX1
|
||||
|
||||
DERR1: SIXBIT \DSLAVE FILE MISSING!\
|
||||
DERR2: SIXBIT \DISPLAY SLAVE HAS NOT BEEN OPENED!\
|
||||
DERR3: [SIXBIT \WRONG NUMBER OF ARGS TO SOME FUNCTION - DSLAVE!\]
|
||||
|
||||
DALMES: WTA [FLONUM ARG REQUIRED - DISPLAY SLAVE!]
|
||||
JRST -1(T)
|
||||
|
||||
PPBSL4: MOVE A,(P)
|
||||
WTA [BAD ARG TO SOME DISPLAY FUN!]
|
||||
JRST PPBSL1
|
||||
|
||||
|
||||
DERR0: LERR [SIXBIT \SLAVE HAS DIED!\]
|
||||
DERR: LERR [SIXBIT \TOO MANY DISPLAY ITEMS!\] ;TABLE OF ERRORS
|
||||
LERR [SIXBIT \DISPLAY MEMORY FULL!\] ;RETURNED FROM SLAVE
|
||||
LER3 [SIXBIT \ UNKNOWN DISPLAY ITEM!\]
|
||||
LERR [SIXBIT \ENORMOUS VECTOR!\]
|
||||
LERR [SIXBIT \BAD RELATIVE VECTOR - DSLAVE!\]
|
||||
LERR [SIXBIT \BAD FUNCTION - DSLAVE!\]
|
||||
LERR [SIXBIT \340 NOT AVAILABLE!\]
|
||||
LER3 [SIXBIT \ HAS TOO MANY DISPLAY INFERIORS!\]
|
||||
|
||||
FASEND
|
||||
|
||||
Reference in New Issue
Block a user