mirror of
https://github.com/PDP-10/its.git
synced 2026-01-17 08:43:21 +00:00
5322 lines
101 KiB
Plaintext
Executable File
5322 lines
101 KiB
Plaintext
Executable File
; I T S MISCELLANEOUS DEVICES
|
||
|
||
IFN PTRP,[
|
||
|
||
SUBTTL PAPER TAPE PUNCH ROUTINES
|
||
|
||
PTPO: JSP Q,STDOPN
|
||
7,,PTPUSR
|
||
PTPA,,PTPB
|
||
PTPWA,,PTPWB
|
||
PTPI,,0
|
||
PTPI,,0
|
||
|
||
BPIPUN: JSP E,NBTOCH
|
||
CAIN A,EOFCH
|
||
POPJ P,
|
||
JRST APIPU2
|
||
|
||
APIPUN: SKIPGE C
|
||
SKIPA A,(C)
|
||
UMOVE A,(C)
|
||
ANDI A,177
|
||
APIPU2: CAIN A,14
|
||
JRST PUNFF
|
||
TRO A,200
|
||
JRST PIPUN3
|
||
|
||
PIPUN: SKIPGE C
|
||
SKIPA A,(C)
|
||
UMOVE A,(C)
|
||
PIPUN3: SKIPG PUNCC
|
||
JRST PUNW1
|
||
PIPUN2: IDPB A,PUNIP
|
||
HRRZ A,PUNIP
|
||
CAIN A,PUNBE-1
|
||
MOVEI A,PUNBO
|
||
HRRM A,PUNIP
|
||
SOS PUNCC
|
||
PUNST: SKIPGE PUNNT
|
||
POPJ P, ;PUNCH OUT OF TAPE
|
||
CONSO PTP,7
|
||
CONO PTP,10+PCHCHN
|
||
POPJ P,
|
||
|
||
PUSHJ P,PUNW2
|
||
PUNW1: PUSHJ P,UFLS
|
||
JRST PIPUN2
|
||
|
||
PUNW2: SKIPG T,PUNCC
|
||
POPJ P,
|
||
CAIL T,PUNSIZ*2
|
||
JRST POPJ1
|
||
JRST POPJ3
|
||
|
||
PUNFF: MOVEI T,55
|
||
CAMLE T,PUNCC
|
||
PUSHJ P,UFLS
|
||
MOVSI B,-4
|
||
PUSHJ P,PUNFF2
|
||
MOVEI A,214
|
||
PUSHJ P,PIPUN2
|
||
MOVSI B,-50
|
||
PUNFF2: MOVEI A,0
|
||
PUSHJ P,PIPUN2
|
||
AOBJN B,PUNFF2
|
||
POPJ P,
|
||
|
||
WBPIPN: JSP Q,WRDBT
|
||
WAPIPN: MOVEI T,6
|
||
CAMLE T,PUNCC
|
||
PUSHJ P,UFLS
|
||
SKIPGE C
|
||
SKIPA B,(C)
|
||
UMOVE B,(C)
|
||
MOVSI E,-6
|
||
WPIPN2: MOVEI A,2
|
||
LSHC A,6
|
||
PUSHJ P,PIPUN2
|
||
AOBJN E,WPIPN2
|
||
POPJ P,
|
||
|
||
PBRK1: MOVEI A,PUNSIZ*4-4
|
||
CAMG A,PUNCC
|
||
JRST PUNSTP
|
||
CONSZ PTP,100 ;CHECK NO TAPE FLAG
|
||
JRST PBRK2 ;PUNCH OUT OF TAPE
|
||
ILDB A,PUNOP
|
||
DATAO PTP,A
|
||
HRRZ A,PUNOP
|
||
CAIN A,PUNBE-1
|
||
MOVEI A,PUNBO
|
||
HRRM A,PUNOP
|
||
AOSA PUNCC
|
||
PUNSTP: CONO PTP,0
|
||
JRST LPBKRT
|
||
|
||
PBRK2: SETOM PUNNT ;PTP OUT OF TAPE
|
||
JRST PUNSTP
|
||
|
||
;PTP SLOW CLOCK ROUTINE
|
||
PTPCHK: SKIPGE PUNNT
|
||
CONSZ PTP,100
|
||
POPJ P,
|
||
HRRZM P,PUNNT
|
||
JRST PUNST ;PTP HAS TAPE NOW
|
||
|
||
EBLK
|
||
|
||
PUNNT: 105 ;-1 => PTP OUT OF TAPE
|
||
PUNCC: PUNSIZ*4-4
|
||
PUNIP: (1000)PUNBO-1
|
||
PUNOP: (1000)PUNBO-1
|
||
PUNBO: BLOCK PUNSIZ
|
||
PUNBE:
|
||
|
||
BBLK
|
||
|
||
PUNCLR: MOVEI A,PUNSIZ*4-4
|
||
MOVE B,PUNIP
|
||
MOVEM A,PUNCC
|
||
MOVEM B,PUNOP
|
||
POPJ P,
|
||
|
||
PUNFIN: MOVE T,PUNSIZ*4-4 ;.CALL FINISH
|
||
CAMLE T,PUNCC
|
||
PUSHJ P,UFLS
|
||
POPJ P,
|
||
|
||
AFEED: HRRZ A,(R)
|
||
CAIL A,PTPI ;LOWEST PTP DEV #
|
||
CAILE A,PTPWB ;HIGHEST PTP DEV #
|
||
POPJ P, ;PTP NOT OPEN ON CHNL
|
||
MOVEI A,0
|
||
PUSHJ P,PIPUN3
|
||
JRST POPJ1
|
||
|
||
SUBTTL PAPER TAPE READER ROUTINES
|
||
|
||
PTRCHX==10 ;NUMBER OF CHARACTERS IGNORED AT END OF TAPE
|
||
|
||
PTRO: PUSH P,[PTRO1] ;SO STDOPN WILL RETURN
|
||
JSP Q,STDOPN
|
||
7,,PTRUSR
|
||
REDUAI,,REDBAI ;ASCII MODE
|
||
REDUII,,REDBII ;IMAGE MODE
|
||
REDUTI,,0 ;ALL 8 HOLES MODE
|
||
REDUTI,,0 ;" " " "
|
||
|
||
;RETURN FROM STDOPN
|
||
PTRO1: POPJ P, ;OPEN LOST
|
||
AOS (P) ;OPEN WON, MAKE RETURN SKIP
|
||
SKIPE PTRUSE
|
||
POPJ P, ;READER ALREADY OPEN, DON'T RESET
|
||
;READER NOT ALREADY OPEN, SO
|
||
;RESET PTR POINTERS AND START UP READER
|
||
CONO PI,PTROFF ;INHIBIT INTERRUPTS
|
||
MOVEI T,20 ;BUSY FLAG
|
||
PUSHJ P,PTRST ;START UP READER IF NOT ALREADY RUNNING
|
||
;RESET PTR BUFFER POINTERS
|
||
PTRZAP: MOVE A,[041000,,PTRBUF-1] ;BUFFER BYTE POINTER
|
||
MOVEM A,PTRIP ;BUFFER INPUT (INTERRUPT) POINTER
|
||
MOVEM A,PTROP ;BUFFER OUTPUT (IOT) POINTER
|
||
MOVEI A,PTRCHX ;REINITIALIZE CHARACTER COUNT
|
||
MOVNM A,PTRCC ;" " "
|
||
CONO PI,PTRON ;RE-ENABLE INTERRUPTS
|
||
JRST PTRSIW ;RESET STATUS OF IMAGE WORD AND RETURN
|
||
|
||
;CLOSE CHANNEL ON WHICH PTR OPEN
|
||
|
||
PTRCLS: CONO PI,PTROFF ;INHIBIT INTERRUPTS
|
||
SOSL PTRUSE ;DECREMENT USE COUNTER
|
||
JRST PTRONJ ;PTR OPENED ON MORE CHANNELS
|
||
SETOM PTRUSR ;NO MORE OPENS ON READER, INDICATE NO USER
|
||
SETOM PTRDIE ;EVENTUALLY TURN OFF READER
|
||
JRST PTRZAP ;RESET BUFFER STATUS
|
||
|
||
PTRRS: CONO PI,PTROFF ;PTR .RESET ROUTINE
|
||
JRST PTRZAP
|
||
|
||
;BLOCK ASCII INPUT
|
||
|
||
PTRBAI: JSP E,INBTCH ;DO IT A CHARACTER AT A TIME
|
||
|
||
;GET AN ASCII CHARACTER IN W
|
||
|
||
PTRUAI:
|
||
PTRCHA: PUSHJ P,PTRCH ;GET CHARACTER - SKIPS IF EOF.
|
||
TRZA W,200 ;CLEAR 200 BIT
|
||
JRST POPJ1
|
||
JUMPE W,PTRCHA ;IF RESULT ZERO THEN DON'T CALL IT ASCII
|
||
CAIN W,177 ;IF RUBOUT,
|
||
JRST PTRCHA ;THEN IGNORE IT
|
||
POPJ P, ;ASCII, USE IT
|
||
|
||
PTRBII: JSP W,WRDBTI ;BLOCK IMAGE INPUT.
|
||
|
||
;UNIT IMAGE INPUT
|
||
;END-OF-FILE GIVES SIXBIT /######/
|
||
|
||
PTRUII: PUSHJ P,PTRCH ;GET CHARACTER
|
||
TRNE W,200
|
||
CAIA ;CALL IT BINARY IF 200 SET, OR IF EOF.
|
||
JRST PTRUII
|
||
IDPB W,PTRIBP
|
||
JUMPL W,PTRUI2 ;IF REACHED EOF, SKIP 1 OR 2.
|
||
SOSLE PTRICC ;IF WORD NOT FULL,
|
||
JRST PTRUII ;THEN GO BACK FOR MORE
|
||
JRST PTRUI1 ;ELSE RETURN THE WORD.
|
||
|
||
PTRUI2: SOSG B,PTRICC
|
||
JRST PTRUI3
|
||
CAIE B,5
|
||
JRST PTRUII
|
||
JRST PTRUI4
|
||
|
||
PTRUI3: AOS (P) ;IF WE REACHED EOF, SKIP TWICE.
|
||
PTRUI4: AOS (P) ;REACHED EOF BEFORE WORD; SKIP ONCE.
|
||
PTRUI1: MOVE W,PTRIW ;WORD FULL,
|
||
PTRSIW: MOVEI B,6 ;NOW REINITIALIZE POINTERS TO WORD
|
||
MOVEM B,PTRICC ;CHARACTER COUNT OF WORD
|
||
MOVE B,[440600,,PTRIW] ;POINTER TO WORD
|
||
MOVEM B,PTRIBP
|
||
POPJ P,
|
||
|
||
;GET A CHARACTER IN W OR SKIP RETURNING -1,,EOFCH IF NONE AVAILABLE
|
||
|
||
PTRUTI: ;UNIT MODE ALL-HOLES INPUT.
|
||
PTRCH: MOVEI T,20 ;BUSY FLAG
|
||
PUSHJ P,PTRCHW ;WAIT FOR A CHARACTER
|
||
PUSHJ P,UFLS
|
||
SOSGE I,PTRCC ;DECREMENT CHARACTER COUNT
|
||
JRST PTRCH1 ;BUFFER EMPTY
|
||
MOVEI T,10 ;DONE FLAG
|
||
CAIGE I,REDSIZ-PTRCHX ;IF BUFFER LESS THAN 1/4-FULL,
|
||
PUSHJ P,PTRST ;THEN MAKE SURE READER RUNNING
|
||
ILDB W,PTROP ;GET CHARACTER
|
||
HRRZ B,PTROP ;RING THE BUFFER
|
||
CAIL B,PTRBUF+REDSIZ-1
|
||
MOVEI B,PTRBUF
|
||
HRRM B,PTROP
|
||
POPJ P,
|
||
|
||
;END-OF-FILE ENCOUNTERED DURING PTRCH
|
||
|
||
PTRCH1: AOS PTRCC ;RESTORE CHARACTER COUNT TO ITS ORIGINAL STATE
|
||
JRST UNIEOF
|
||
|
||
;SKIP IF CHARACTER IN BUFFER OR END-OF-TAPE
|
||
|
||
PTRCHW: SKIPG PTRCC ;IF CHARACTER IN BUFFER,
|
||
CONSO PTR,400 ;OR POWER IS OFF,
|
||
JRST POPJ1 ;THEN EXIT SKIPPING
|
||
;OTHERWISE,
|
||
;MAKE SURE READER RUNNING
|
||
|
||
PTRST: CONSZ PTR,7
|
||
CONSO PTR,30 ;IF RUNNING,
|
||
JRST .+2
|
||
POPJ P, ;THEN THAT'S ALL
|
||
CONO PTR,PTRCHN(T) ;NOT RUNNING, RESTART WITH SELECTED FLAG
|
||
SETOM PTRDIE ;LET SLOW CLOCK FIGURE OUT IF THERE'S TAPE
|
||
POPJ P,
|
||
|
||
;PTR INTERRUPT ROUTINE
|
||
|
||
PTRBRK: AOSN PTRSTP ;IF READER SHOULD BE STOPPED THIS BREAK,
|
||
JRST PTRFUL ;THEN STOP IT (BUFFER FULL)
|
||
DATAI PTR,A ;GET CHARACTER
|
||
SETOM PTRDIE ;TELL SLOW CLOCK THAT BREAK HAS HAPPENED
|
||
IDPB A,PTRIP ;PUT IN BUFFER
|
||
HRRZ A,PTRIP ;RING THE BUFFER
|
||
CAIN A,PTRBUF+REDSIZ-1
|
||
MOVEI A,PTRBUF
|
||
HRRM A,PTRIP
|
||
AOS A,PTRCC ;TOTAL CHARACTER COUNT-PTRCHX
|
||
CAIGE A,REDSIZ*4-10-PTRCHX
|
||
JRST LPBKRT
|
||
SETOM PTRSTP ;STOP READER AT NEXT BREAK
|
||
JRST LPBKRT
|
||
|
||
PTRFUL: CONO PTR,PTRCHN ;BUFFER FULL, STOP READER
|
||
MOVEI A,1 ;TELL SLOW CLOCK...
|
||
MOVEM A,PTRDIE ;NOT TO TURN IT OFF
|
||
JRST LPBKRT
|
||
|
||
;SLOW CLOCK ROUTINE
|
||
;CHECKS READER EVERY HALF-SECOND
|
||
|
||
PTRCHK: AOS A,PTRDIE
|
||
CAIN A,1 ;IF UNINTENTIONALLY STOPPED FOR OVER HALF-SECOND
|
||
CONO PTR,400 ;THEN TURN THE READER OFF
|
||
POPJ P,
|
||
|
||
EBLK
|
||
;PTR VARIABLES
|
||
|
||
PTRDIE: -264 ;END-OF-TAPE DETECTION
|
||
PTRSTP: 0 ;-1 => STOP READER AT NEXT BREAK (SET DURING BREAK WHEN BUFFER FULL)
|
||
PTRIP: 041000,,PTRBUF-1 ;BUFFER INPUT (INTERRUPT) POINTER
|
||
PTROP: 041000,,PTRBUF-1 ;BUFFER OUTPUT (IOT) POINTER
|
||
PTRBUF: BLOCK REDSIZ ;READER BUFFER
|
||
PTRCC: -PTRCHX ;NUMBER OF CHARACTERS IN BUFFER -PTRCHX
|
||
|
||
PTRIW: 0 ;CURRENT WORD FOR IMAGE MODE
|
||
PTRIBP: 440600,,PTRIW ;POINTER TO CURRENT WORD
|
||
PTRICC: 0 ;CHARACTER COUNT TO CURRENT IMAGE MODE WORD
|
||
|
||
BBLK
|
||
|
||
] ;END OF IFN PTRP
|
||
|
||
SUBTTL LINE PRINTER ROUTINES
|
||
|
||
IFN NLPTP,[
|
||
NLPTO: MOVE A,UTMPTR(U)
|
||
SKIPGE NLUSR
|
||
SKIPL TTYTYP-USRRCE(A)
|
||
JRST TPLO
|
||
SETOM NLFREE
|
||
MOVEI T,LPTBSZ
|
||
CAME T,NLPTBR ;WAIT TILL LPT BUFFER IS EMPTY.
|
||
PUSHJ P,UFLS
|
||
CONSZ NLPT,207 ;AND LPT ISN'T STILL PRINTING LAST WD
|
||
PUSHJ P,UFLS
|
||
PUSH P,[NLPTO1]
|
||
JSP Q,STDOPN
|
||
1,,NLUSR
|
||
NLPTDN,,NLPTBN
|
||
|
||
NLPTO1: POPJ P, ;LPT NOT AVAIL & NOT ASSIGNED.
|
||
;LPT ASSIGNED, INIT IT.
|
||
CONO NLPT,1000 ;PUT LPT INTERFACE IN IMAGE MODE,
|
||
DATAO NLPT,[23*2] ;TURN ON THE LPT'S MOTOR.
|
||
MOVEI I,1000
|
||
CONSZ NLPT,200 ;WAIT TILL IT IS ON.
|
||
SOJG I,.-1
|
||
AOS (P)
|
||
NLPTO3: HRROI I,NLPTCF
|
||
HRROI C,I
|
||
PUSHJ P,BNLPTO ;CAN'T PCLSR SINCE BUFFER IS EMPTY.
|
||
HRRZ I,NLPTBP
|
||
HRLI I,010700
|
||
MOVEM I,NLPTIP
|
||
POPJ P,
|
||
|
||
NLPTCF: 15_29.+14_22.+177_15.+177_8+177_1
|
||
]
|
||
|
||
IFN GLPTP,[ ;GOULD ELECTROSTATIC PRINTER ROUTINES
|
||
|
||
IFE DL10P,.ERR GOULD PRINTER WITHOUT A PDP11 TO RUN IT?
|
||
|
||
;OPEN ROUTINE
|
||
|
||
GLPTO: SKIPE GLPTER
|
||
JRST OPNL7 ;DEV NOT READY IF 11 UNHAPPY
|
||
MOVEI Q,[1,,LPTUSR
|
||
GLPTDN,,GLPTBN]
|
||
PUSHJ P,STDOPN
|
||
POPJ P,
|
||
SETZM GLPGRF
|
||
TLNE C,10 ;BIT 3.4 => GRAPHICS MODE.
|
||
SETOM GLPGRF
|
||
JRST POPJ1
|
||
|
||
|
||
|
||
|
||
|
||
|
||
;IOT ROUTINES
|
||
|
||
SKIPA T,[SIOKT] ;SIOT HANDLER = UNIT HANDLER MINUS ONE
|
||
GLPTDO: MOVEI T,CHRKTO
|
||
MOVE E,[440700,,5]
|
||
JRST GLPTOO
|
||
|
||
GLPTBO: MOVEI T,BLKT
|
||
MOVE E,[444400,,1]
|
||
GLPTOO: JSP B,(T)
|
||
SETZ GLPMPP
|
||
GLPMPC
|
||
GLPBGB
|
||
GLPBWW
|
||
JRST 4,.
|
||
SKIPE GLPTBC
|
||
|
||
;CLOSE ROUTINE
|
||
|
||
GLPCLS: SKIPE GLPMPP ;IF THERE'S AN UN-SENT BUFFER,
|
||
PUSHJ P,GLPBWW ;BARK AT THE PDP11
|
||
SKIPE GLPTBC ;WAIT FOR ALL BUFFERED STUFF TO BE SENT
|
||
PUSHJ P,UFLS
|
||
PUSHJ P,GLPBG0 ;AVOID IOCERR AT NEXT OPEN
|
||
IRPS CH,,12 14 177 105
|
||
MOVE C,[SETZ I] ;AT CLOSE SEND FF, EOF
|
||
MOVEI I,CH ;THIS CAN'T PCLSR ONCE IT GETS A NEW BUFFER.
|
||
PUSHJ P,GLPTDO
|
||
TERMIN
|
||
SETZM GLPGRF
|
||
PUSHJ P,GLPBWW ;WRITE LAST BUFFER
|
||
SETOM LPTUSR
|
||
SETOM LPTUSE
|
||
POPJ P,
|
||
|
||
;BUFFER GET ROUTINE
|
||
|
||
GLPBGB: SKIPE GLPTER
|
||
JRST IOCER1 ;DEV NOT READY IF 11 UNHAPPY ABOU IT.
|
||
SKIPE GLPTBC
|
||
POPJ P, ;BUFFER BUSY
|
||
GLPBG0: MOVEI TT,GLPTBF
|
||
MOVEI J,GLPBSZ
|
||
JRST SIOBGX
|
||
|
||
;BUFFER DISCARD ROUTINE
|
||
|
||
GLPBWW: MOVE D,[450000,,GLPTBF-1] ;DL10 BYTE POINTER (7-BIT BYTES)
|
||
SKIPE J,GLPGRF
|
||
HRLI D,340000 ;GRAPHICS MODE => 8-BIT BYTES
|
||
MOVEM D,GLPTBP
|
||
SKIPN D,GLPMPP ;COMPUTE # CHARS IN BUFFER
|
||
POPJ P,
|
||
JUMPL D,[SOJA D,GLPBW1]
|
||
MOVEI TT,15 ;INDEPENDENT OF E, BLOCK VS UNIT, ETC.
|
||
TLNE D,760000
|
||
JRST [ IDPB TT,D ? JRST .-1 ]
|
||
GLPBW1: MOVEI D,-GLPTBF+1(D)
|
||
IMUL D,[4 ? 5]+1(J) ;GRAPHICS => 4, ELSE 5.
|
||
MOVEM D,GLPTBC ;START THE PDP11
|
||
SETZM GLPMPP ;FLAG THAT BUFFER IS NOT ACTIVE AT M.P. LEVEL
|
||
SETZM GLPMPC
|
||
POPJ P,
|
||
|
||
;NOTE: TPL CODE HAS DELIBERATELY BEEN OMITTED.
|
||
;THE DL10 LIMITS THE BUFFER SIZE TO 256 WORDS. WITH THIS SMALL
|
||
;A BUFFER THE SYSTEM JOB CAN'T DRIVE THE PRINTER AT FULL SPEED
|
||
;BECAUSE IT CAN ONLY IOT ONCE A SECOND OR SO.
|
||
;ANYWAY, THE NECESSARY TPL CODE IS HAIRY.
|
||
] ;END IFN GLPTP
|
||
|
||
IFN OLPTP,[
|
||
|
||
LPTLPP==60.
|
||
|
||
LPTO: CAMN U,OLUSR
|
||
JRST LPTO2 ;ALREADY HAS IT
|
||
MOVE A,UTMPTR(U) ;GET POINTER TO USER RESOURCE
|
||
;(TTY DEPENDANT)
|
||
SKIPL TTYTYP-USRRCE(A)
|
||
JRST TPLO
|
||
LPTO2: PUSH P,[LPTO1]
|
||
JSP Q,STDOPN
|
||
1,,OLUSR
|
||
LPTDN,,LPTBN
|
||
|
||
LPTO1: POPJ P, ;OPEN LOST
|
||
SKIPE OLUSE ;OPEN WON
|
||
JRST POPJ1 ;NOT FIRST OPEN BY THIS USER
|
||
AOS (P)
|
||
LPTRS2: MOVEI A,15 ;ENTRY FROM LPTRS, DUMP OUT CRUD ON THIS LINE THEN FORM FEED
|
||
PUSHJ P,PILPT
|
||
MOVEI A,14
|
||
JRST PILPT
|
||
|
||
BLPTO: MOVEI E,PILPT
|
||
JRST NBTOCH
|
||
|
||
PILPT1: SKIPGE C
|
||
SKIPA A,(C)
|
||
UMOVE A,(C)
|
||
ANDI A,177
|
||
PILPT: CAIN A,177
|
||
POPJ P, ;IGNORE RUBOUTS
|
||
MOVEI T,130. ;LPTCC COMPARED WITH 132. BY SYSTEM JOB BEFORE TRY OF .OPEN
|
||
CAMLE T,LPTCC
|
||
JRST LPTW1 ;WAIT
|
||
LPTIM: CAIGE A,40
|
||
JRST LPTRC
|
||
CAIL A,140
|
||
SUBI A,40
|
||
LPTIM2: AOSN LPTBSF
|
||
PUSHJ P,LPC ;PRINT PREV STUFF AND SPACE OVER
|
||
AOS T,LINEPOS
|
||
BADCOL: CAIN T,-1 ;PATCH NUM OF BAD COL IN HERE WHEN NECESSARY
|
||
JRST LPTBC1
|
||
CAILE T,120.
|
||
JRST PILPT2
|
||
LPC1: SUBI A,40
|
||
IDPB A,LPTIP
|
||
HRRZ A,LPTIP
|
||
CAIN A,LPTBE-1
|
||
MOVEI A,LPTBO
|
||
HRRM A,LPTIP
|
||
SOS LPTCC
|
||
CONSO OLPT,7
|
||
CONO OLPT,LPTCHN
|
||
POPJ P,
|
||
|
||
LPTBC1: PUSH P,A
|
||
MOVEI A,40
|
||
PUSHJ P,LPC1
|
||
POP P,A
|
||
JRST LPC1
|
||
|
||
LPTRC: CAIN A,10
|
||
JRST LPTBS ;BACK SPACE
|
||
CAIN A,11
|
||
JRST LPTTAB
|
||
CAIN A,12
|
||
JRST LPTLF
|
||
CAIN A,14
|
||
JRST LPTFF
|
||
CAIN A,EOFCH
|
||
JRST LPTEOF
|
||
SETOM PCL
|
||
CAIE A,15
|
||
JRST LPTRCH
|
||
LPT.CR: SETZM LINEPOS
|
||
SETZM LPTBSF
|
||
JRST LPC1
|
||
|
||
PUSHJ P,LPTW2
|
||
LPTW1: PUSHJ P,UFLS
|
||
JRST LPTIM
|
||
|
||
LPTW2: CAMLE T,LPTCC
|
||
POPJ P,
|
||
MOVE T,LPTCC
|
||
CAIL T,<LPTBE-LPTBO>*2
|
||
JRST POPJ1
|
||
JRST POPJ3
|
||
|
||
LPTBS: SKIPG LINEPOS
|
||
POPJ P, ;AT BEG OF LINE, IGNORE
|
||
SOS LINEPOS
|
||
SETOM LPTBSF
|
||
POPJ P,
|
||
|
||
LPTRCH: CAIN A,33
|
||
JRST LPTALT
|
||
MOVE B,A
|
||
MOVEI A,"^
|
||
PUSHJ P,LPTIM2
|
||
MOVEI A,100(B)
|
||
JRST LPTIM2
|
||
|
||
LPTALT: MOVEI A,"$
|
||
JRST LPTIM2
|
||
|
||
PILPT2: SOS LINEPOS
|
||
POPJ P,
|
||
|
||
LPTEOF: SKIPE OLUSR
|
||
POPJ P,
|
||
SUB P,[1,,1] ;SYSTEM JOB HACKING SO CLOBBER TO EOF
|
||
XCTR XRW,[CLEARM (C)]
|
||
POPJ P,
|
||
|
||
LPTCLS: SKIPLE OLUSE ;LPT CLOSE, IS THIS THE ONLY CHANNEL LPT OPEN ON
|
||
JRST LPTCL3
|
||
SKIPN LINEPOS ;THIS IS LAST CLOSE, CHECK TO SEE IF LOSER LEFT POSITION SCREWED
|
||
SKIPE LPTPPS
|
||
PUSHJ P,LPTCL2 ;INCREMENT TO NEXT PAGE
|
||
MOVEI T,SCRTPC
|
||
IORM T,SUPCOR ;LOOK FOR TPL FILES TO PRINT
|
||
SETOM OLUSR ;DO THIS FIRST SO DONT NEED CLOCK OFF LPT HACKED BY ONE JOB AT A TIME
|
||
LPTCL3: SOS OLUSE ;DECREMENT USE COUNT
|
||
POPJ P,
|
||
|
||
LPTCL2: MOVEI A,100.
|
||
CAMLE A,LPTCC
|
||
POPJ P, ;NO ROOM FORGET IT
|
||
MOVEI A,15
|
||
PUSHJ P,LPTIM
|
||
MOVEI A,14
|
||
JRST LPTIM
|
||
LPTTAB: PUSHJ P,LPTS
|
||
LDB J,[300,,LINEPOS]
|
||
JUMPE J,CPOPJ
|
||
JRST .-3
|
||
|
||
LPTS: MOVEI A,40
|
||
JRST LPTIM2
|
||
|
||
LPTLF: AOS J,LPTPPS ;LINE FEED, INCREMENT LINE #
|
||
CAIL J,LPTLPP ;END OF PAGE?
|
||
LPTFF: SETZM LPTPPS ;END OF PAGE CLEAR OUT PAGE POS (ENTRY FOR FF)
|
||
PUSHJ P,LPC
|
||
JRST LPC1
|
||
|
||
LPC: MOVE J,LINEPOS ;CR AND SPACE BACK OVER TO LINPOS
|
||
MOVE B,A
|
||
MOVEI A,15
|
||
AOSN PCL
|
||
SKIPE LINEPOS
|
||
PUSHJ P,LPT.CR
|
||
CLEARM LPTBSF ;IN CASE WAS ALREADY AT BEG OF LINE
|
||
SOJL J,LPC2
|
||
PUSHJ P,LPTS
|
||
JRST .-2
|
||
|
||
LPC2: MOVE A,B
|
||
POPJ P,
|
||
|
||
EBLK
|
||
|
||
LPTCC: <LPTBE-LPTBO>*5-5
|
||
LINEPOS: 0 ;LINE POSITION # CHARS PRINTED THIS LINE BEFORE CURRENT
|
||
LPTPPS: 0 ;PAGE POSITION (# LINES PRINTED BEFORE CURRENT)
|
||
|
||
PCL: 0 ;INCREMENTED BY LF OR FF, SETOMED BY OHTER CONTROL CHARS
|
||
;PROBABLY UNNECESSARY BUT NOT WORTH FLUSHING
|
||
LPTBSF: 0 ;-1 => BACKSPACES HAVE BEEN TYPED, CR AND SPACE OVER BEFORE MAKING INK
|
||
|
||
LPTIP: 700,,LPTBO-1
|
||
LPTOP: 700,,LPTBO-1
|
||
|
||
BBLK
|
||
|
||
LPTCN: CAIN A,<15-40>&177
|
||
JRST LPTCR ;CRR
|
||
CAIN A,<12-40>&177
|
||
MOVEI A,400 ;LINE FEED
|
||
CAIN A,<14-40>&177
|
||
MOVEI A,401 ;FORM FEED
|
||
CAIE A,177 ;SKIP IF LOOKS LIKE A LEFT ARROW
|
||
JRST LPTCN1 ;GO TO PRINT
|
||
HRRZ A,LPTOP ;LOAD OUPUT POINTER
|
||
CAIE A,LPTBE-1 ;SKIP IF CURRENT PNTR = END OF BUFFER
|
||
JRST LPENT3 ;REAL LEFT ARR
|
||
MOVE A,[350700,,LPTBO]
|
||
MOVEM A,LPTOP
|
||
JRST LPENT2
|
||
]
|
||
|
||
IFN NLPTP,[
|
||
NLPT1: SKIPGE C
|
||
SKIPA A,(C)
|
||
UMOVE A,(C)
|
||
MOVE B,NLPTIP
|
||
TLNN B,760000
|
||
JRST NLPTW ;MAY NOT BE ROOM
|
||
NLPTW1: IDPB A,NLPTIP
|
||
MOVE T,NLPTIP
|
||
CAMN T,NLPTEP
|
||
SUBI T,LPTBSZ
|
||
HRRM T,NLPTIP
|
||
TLNE T,760000
|
||
POPJ P,
|
||
SOSGE NLPTBR
|
||
JRST 4,.
|
||
NLPTGO: CONO PI,LPTOFF
|
||
CONSO NLPT,7
|
||
CONO NLPT,100+LPTCHN ;SET OUTPUT DONE
|
||
JRST LPTONJ
|
||
|
||
NLPTW: SKIPG NLPTBR
|
||
PUSHJ P,UFLS
|
||
JRST NLPTW1
|
||
|
||
EBLK
|
||
|
||
NLPTIP: 010700,,NLPTBO-1
|
||
NLPTBO: BLOCK LPTBSZ
|
||
NLPTEP: 010700,,NLPTBO+LPTBSZ-1
|
||
NLPTPP: NLPTBO ;OUTPUT PNTR (PI)
|
||
NLPTBR: LPTBSZ
|
||
NLPTBP: 004400,,NLPTBO-1 ;BLKT POINTER
|
||
NLPTBC: LPTBSZ ;BLKT CNT = MIN(# WDS TILL END OF BUF,NLPTBR)
|
||
NLPTOP: NLPTBO ;VALUE OF NLPTBP BEFORE BLKT CALL
|
||
NLFREE: -1 ;-1 => LPT IN USE RECENTLY.
|
||
;0 => NOT IN USE SINCE LAST VSCLK.
|
||
;1 => NOT SINCE NEXT-TO-LAST VSCLK.
|
||
;=>2 => LPT MOTOR NOW OFF.
|
||
|
||
BBLK
|
||
|
||
BNLPTO: MOVE B,NLPTBP
|
||
MOVEM B,NLPTOP
|
||
PUSH P,[BNLPT1]
|
||
MOVE E,[444400,,1]
|
||
JSP B,BLKT
|
||
SETZ NLPTBP
|
||
NLPTBC
|
||
BNLPTG
|
||
BNLPT1
|
||
@J
|
||
SKIPG NLPTBR
|
||
|
||
BNLPT1: MOVE T,NLPTBP
|
||
MOVE W,T
|
||
CAMN T,[004400,,NLPTBO+LPTBSZ-1]
|
||
MOVE T,[004400,,NLPTBO-1]
|
||
MOVEM T,NLPTBP
|
||
EXCH T,NLPTOP
|
||
SUB T,W ;- # WORDS WRITTEN
|
||
ADDB T,NLPTBR ;DECREASE ROOM
|
||
JUMPL T,[JRST 4,.]
|
||
JRST NLPTGO
|
||
|
||
BNLPTG: MOVE TT,NLPTBP
|
||
MOVE J,NLPTBR
|
||
MOVEI T,NLPTBO+LPTBSZ-1
|
||
SUBI T,(TT) ;# WORDS UNTIL END OF BUFFER
|
||
CAMLE J,T
|
||
MOVE J,T
|
||
MOVEM J,NLPTBC
|
||
JRST POPJ1
|
||
|
||
NLPTCL: SKIPLE NLPTBR ;ENOUGH ROOM?
|
||
PUSHJ P,NLPTO3
|
||
SETOM NLFREE
|
||
SETOM NLUSR
|
||
SETOM NLUSE
|
||
POPJ P,
|
||
|
||
NLPDCL: MOVSI H,760000
|
||
SKIPA A,[177]
|
||
NLPDC1: PUSHJ P,NLPTW1
|
||
TDNE H,NLPTIP
|
||
JRST NLPDC1
|
||
HRRZ A,NLPTIP
|
||
CAIN A,NLPTBO+LPTBSZ-1
|
||
MOVEI A,NLPTBO-1
|
||
HRLI A,004400
|
||
MOVEM A,NLPTBP
|
||
MOVNI A,(A)
|
||
ADDI A,NLPTBO+LPTBSZ-1
|
||
MOVE B,NLPTBR
|
||
CAMLE A,B
|
||
MOVE A,B
|
||
MOVEM A,NLPTBC
|
||
JRST NLPTCL
|
||
]
|
||
|
||
IFN NTYP\OLPTP\NLPTP\PLTP\340P\PDP6P\STKP\PTRP,[
|
||
|
||
EBLK
|
||
LPTA: 0
|
||
LPTB: 0
|
||
LPTACS: BLOCK 15
|
||
|
||
LPTBRK: 0
|
||
BBLK
|
||
MOVEM A,LPTA
|
||
IFN NTYP,[ ;A KLUDGE FOR THE PDP 11 ON DM
|
||
CONI NTY,A
|
||
TRNE A,7 ;NO PIA
|
||
TRNN A,200000 ;NO FLAG
|
||
CAIA
|
||
JRST NTYBRK ;AHH, FLAG AND PIA
|
||
]
|
||
|
||
IFN OLPTP,[
|
||
CONSZ OLPT,7
|
||
CONSZ OLPT,10
|
||
JRST .+2
|
||
JRST LPENT1 ;LINE PRINTER
|
||
]
|
||
IFN NLPTP,[
|
||
CONSZ NLPT,7
|
||
CONSO NLPT,100 ;DONE
|
||
JRST .+2
|
||
JRST NLPENT ;NEW LINE PRINTER
|
||
]
|
||
IFN 340P,[
|
||
CONI DIS,A
|
||
TRNN A,77
|
||
JRST LPTBR2
|
||
CONSZ DIS,7400
|
||
JUMPL A,SRECYC ;SPECIAL DISPLAY CHNL
|
||
]
|
||
LPTBR2: MOVEM B,LPTB
|
||
IFN PLTP,[
|
||
CONSZ PLT,SDS+PDS
|
||
JRST PLTBRK ;PLOTTER
|
||
]
|
||
IFN PTRP,[
|
||
CONSZ PTR,7
|
||
CONSO PTR,10
|
||
JRST .+2
|
||
JRST PTRBRK
|
||
CONSZ PTP,10
|
||
JRST PBRK1 ;PAPER TAPE PUNCH
|
||
]
|
||
IFN PDP6P,[
|
||
CONSO DSDEV,7
|
||
JRST .+3
|
||
CONSZ DSDEV,10
|
||
JRST DSDBRK ;INTERRUPT FROM OTHER PROCESSOR
|
||
]
|
||
IFN STKP,[
|
||
CONSZ STK,7
|
||
CONSO STK,10
|
||
JRST .+2
|
||
JRST STKINT ;STANFORD KEYBOARD
|
||
]
|
||
LPBKRT: MOVE A,LPTA
|
||
JRST 12,@LPTBRK
|
||
|
||
LPTRT1: MOVS A,[C,,LPTACS]
|
||
BLT A,17
|
||
LPTRT3: MOVE B,LPTB
|
||
MOVE A,LPTA
|
||
JRST 12,@LPTBRK
|
||
] ;END IFN OLPTP\ ETC.
|
||
.ELSE [
|
||
EBLK
|
||
LPTBRK: 0
|
||
BBLK
|
||
JRST 4,.
|
||
]
|
||
|
||
IFN OLPTP,[
|
||
LPENT3: MOVEI A,177
|
||
JRST LPTCN1
|
||
|
||
LPTCR: CONO OLPT,10+LPTCHN ;PRINT LINE
|
||
AOS LPTCC
|
||
JRST LPBKRT
|
||
|
||
LPENT1: MOVEI A,<LPTBE-LPTBO>*5-5
|
||
CAMG A,LPTCC
|
||
JRST LPTSTP
|
||
LPENT2: ILDB A,LPTOP
|
||
TRNE A,100
|
||
JRST LPTCN
|
||
LPTCN1: DATAO OLPT,A ;OUTPUT CHARACTER
|
||
AOS A,LPTCC
|
||
CONSZ OLPT,10
|
||
JRST LPBKRT
|
||
CAIGE A,<LPTBE-LPTBO>*5-5
|
||
JRST LPENT2
|
||
LPTSTP: CONO OLPT,0 ;CLEAR PIA
|
||
MOVEI A,SCRTPC
|
||
SKIPGE LPTUSR
|
||
IORM A,SUPCOR ;LPT NOW IDLE
|
||
JRST LPBKRT
|
||
|
||
EBLK
|
||
|
||
LPTBO: BLOCK LPTBSZ-1
|
||
-1
|
||
LPTBE:
|
||
|
||
BBLK
|
||
|
||
STALPT: MOVE E,LINEPOS
|
||
DPB E,[130700,,D]
|
||
DPB A,[60300,,D] ;MODE
|
||
MOVE E,LPTCC
|
||
CAIG E,150.
|
||
TRO D,1_9.
|
||
CAIL E,30000
|
||
TRO D,1_<9.+1>
|
||
POPJ P,
|
||
|
||
LPTRS: CONO PI,LPTOFF
|
||
MOVEI A,5*<LPTBE-LPTBO>-5
|
||
MOVEM A,LPTCC
|
||
MOVE A,[700,,LPTBO-1]
|
||
MOVEM A,LPTIP
|
||
MOVEM A,LPTOP
|
||
SETZM LINEPOS
|
||
CONO PI,LPTON
|
||
JRST LPTRS2
|
||
|
||
]
|
||
|
||
IFN NLPTP,[
|
||
NLPENT: MOVE A,NLPTBR
|
||
CAIN A,LPTBSZ
|
||
JRST NLPTST
|
||
CAIL A,LPTBSZ
|
||
JRST 4,.
|
||
DATAO NLPT,@NLPTPP
|
||
AOS A,NLPTPP
|
||
CAIN A,NLPTBO+LPTBSZ
|
||
MOVEI A,NLPTBO
|
||
MOVEM A,NLPTPP
|
||
AOS NLPTBR
|
||
JRST LPBKRT
|
||
|
||
NLPTST: CONO NLPT,200 ;CLEAR DONE AND PIA
|
||
MOVEI A,SCRTPC
|
||
SKIPGE NLUSR
|
||
IORM A,SUPCOR ;LPT NOW IDLE
|
||
JRST LPBKRT
|
||
|
||
NLPTRS: CONO PI,LPTOFF
|
||
MOVE A,[010700,,NLPTBO-1]
|
||
MOVEM A,NLPTIP
|
||
MOVEI A,NLPTBO
|
||
MOVEM A,NLPTPP
|
||
MOVE A,[004400,,NLPTBO-1]
|
||
MOVEM A,NLPTBP
|
||
MOVEM A,NLPTOP
|
||
MOVEI A,LPTBSZ
|
||
MOVEM A,NLPTBR
|
||
MOVEM A,NLPTBC
|
||
CONO PI,LPTON
|
||
JRST NLPTO3
|
||
]
|
||
|
||
SUBTTL STANFORD KEYBOARD
|
||
|
||
IFN STKP,{
|
||
;3.4 => DON'T HANG ON IOT IF NO CHAR (RETURN -1 INSTEAD)
|
||
;3.5 = 1 => DON'T DO CHAR CONVERSION
|
||
; = 0 => CONVERT ACCORDING TO OTHER BITS
|
||
;3.6 = 1 => ITS MODE (CTRL DOES CTRL AND META IS 8TH BIT)
|
||
; = 0 => STANFORD MODE (400 = META, 200 = CTRL, AND ALL THE
|
||
; CHARS FROM 1-177 CAN BE GENERATED WITH TOP AND SHIFT.)
|
||
;3.7 = 1 => IF 3.5 = 0, 3.6 = 1, THEN DON'T INPUT META BIT
|
||
|
||
STKO: TLNE C,3 ;BLOCK OR OUTPUT
|
||
JRST OPNL12 ;MODE NOT AVAILABLE
|
||
CONO PI,CLKOFF
|
||
SKIPL STKUSR
|
||
JRST OPNL10 ;DEVICE NOT AVAILABLE
|
||
MOVEM U,STKUSR
|
||
AOSE STKUSE
|
||
JRST 4,. ;CAN ONLY BE OPEN ONCE
|
||
CONO PI,CLKON
|
||
HRRZ A,UUAC(U)
|
||
MOVE A,CHNBIT(A)
|
||
ROT D,-2
|
||
DPB D,[220400,,A]
|
||
MOVEM A,STKMSK
|
||
MOVE A,STKBP
|
||
MOVEM A,STKIP
|
||
MOVEM A,STKOP
|
||
SETZM STKBC
|
||
DATAI STK,A ;CLEAR DONE
|
||
CONO STK,LPTCHN
|
||
MOVEI A,STKDP
|
||
MOVEM A,(R)
|
||
JRST POPJ1
|
||
|
||
STKCLS: CONO STK,0 ;CLEAR PIA
|
||
SOSL STKUSE
|
||
JRST 4,. ;CAN ONLY BE OPEN ONCE
|
||
SETOM STKUSR
|
||
POPJ P,
|
||
|
||
STKRS: CONO PI,LPTOFF
|
||
MOVE A,STKBP
|
||
MOVEM A,STKIP
|
||
MOVEM A,STKOP
|
||
SETZM STKBC
|
||
JRST LPTONJ
|
||
|
||
STKI: MOVE TT,STKMSK
|
||
TLNE TT,1
|
||
JRST STKI1
|
||
PCLT
|
||
SKIPG STKBC
|
||
PUSHJ P,UFLS
|
||
STKI2: ILDB A,STKOP
|
||
SOS STKBC
|
||
TLNN TT,2
|
||
JRST STKCV ;DO CONVERSION
|
||
STKI3: MOVE W,A
|
||
MOVE A,STKOP
|
||
CAMN A,STKEP
|
||
SUBI A,STKBL
|
||
HRRM A,STKOP
|
||
POPJ P,
|
||
|
||
STKI1: SKIPLE STKBC
|
||
JRST STKI2
|
||
JRST STTYI3
|
||
|
||
STKINT: MOVEM B,LPTB
|
||
DATAI STK,B
|
||
ANDI B,1777 ;CURRENTLY 10 BITS
|
||
MOVE A,STKBC
|
||
CAIL A,STKBS
|
||
JRST LPTRT3 ;NO ROOM. JUST IGNORE CHAR
|
||
IDPB B,STKIP
|
||
AOS STKBC
|
||
MOVE A,STKIP
|
||
CAMN A,STKEP
|
||
SUBI A,STKBL
|
||
HRRM A,STKIP
|
||
MOVE A,STKUSR
|
||
HRRZ B,STKMSK
|
||
AND B,MSKST2(A)
|
||
IORM B,IFPIR(A)
|
||
JRST LPTRT3
|
||
|
||
EBLK
|
||
STKBL==40
|
||
STKBS==STKBL*3
|
||
STKIP: 001400,,STKIB-1
|
||
STKIB: BLOCK STKBL
|
||
STKEP: 001400,,STKIB+STKBL-1
|
||
STKBP: 001400,,STKIB-1
|
||
STKOP: 001400,,STKIB-1
|
||
STKBC: 0
|
||
STKMSK: 0 ;BIT FOR CHANNEL STK OPEN ON
|
||
;3.1 => DON'T HANG ON IOTS MODE
|
||
;3.2 => DON'T CONVERT CHARS
|
||
;3.3 => ITS MODE
|
||
;3.4 => DON'T INPUT META IN ITS MODE
|
||
BBLK
|
||
|
||
STKCV: LDB B,[000600,,A] ;LOW 6 BITS
|
||
CAIN B,33
|
||
JRST STKCV1 ;33
|
||
CAIL B,35
|
||
CAILE B,47
|
||
JRST .+2
|
||
JRST STKCV2 ;35-47
|
||
CAIL B,74
|
||
CAILE B,77
|
||
JRST .+2
|
||
JRST STKCV3 ;74-77
|
||
TRNE A,400
|
||
JRST STKCVT ;TOP IS ON
|
||
CAIG B,32
|
||
JRST STKCV4 ;0-32
|
||
CAIN B,34 ;SKIP IF 50-73
|
||
JRST STKCVB ;34
|
||
STKCVX: TLNN TT,4 ;SKIP ON ITS MODE
|
||
JRST STKCVY ;STANFORD MODE
|
||
ANDI A,1000 ;META BIT
|
||
LSH A,-2
|
||
TLNN TT,10 ;SKIP ON DON'T INPUT META BIT
|
||
IORI B,(A)
|
||
MOVE A,B
|
||
JRST STKI3
|
||
|
||
STKCVY: LDB D,[110100,,A] ;META BIT
|
||
LSH D,8 ;IN 400 POSITION
|
||
ANDI A,200 ;CTRL BIT
|
||
IORI A,(D)
|
||
IORI A,(B)
|
||
JRST STKI3
|
||
|
||
STKCV1: MOVEI B,15
|
||
JRST STKCVX
|
||
|
||
STKCV2: MOVEI Q,-35(B) ;35-47 (-35)
|
||
IDIVI Q,5
|
||
LDB B,STKBPT(J)
|
||
JRST STKCVX
|
||
|
||
STKCV3: CAIE B,74
|
||
JRST STKCV5 ;75-77
|
||
MOVEI B,177
|
||
JRST STKCVX
|
||
|
||
STKCV5: MOVEI B,33
|
||
JRST STKCVX
|
||
|
||
STKCVT: CAIG B,32 ;TOP IS ON
|
||
JRST STKCT1 ;0-32
|
||
CAIN B,34
|
||
JRST STKCT2 ;34
|
||
MOVEI Q,-50(B) ;50-73 (-50)
|
||
MOVE D,B
|
||
IDIVI Q,5
|
||
LDB B,STKBP1(J)
|
||
TRNE A,200 ;SKIP IF CTRL IS OFF
|
||
TLNN TT,4 ;SKIP IF ITS MODE
|
||
JRST STKCVX
|
||
CAIL D,52
|
||
CAILE D,72
|
||
TRZ B,100 ;50,51,73
|
||
JRST STKCVX
|
||
|
||
STKCT1: MOVE Q,B ;0-32 TOP ON
|
||
MOVE D,B
|
||
IDIVI Q,5
|
||
LDB B,STKBP2(J)
|
||
TRNE A,200 ;SKIP IF CTRL IS OFF
|
||
TLNN TT,4 ;SKIP IF ITS MODE
|
||
JRST STKCVX
|
||
CAIN D,12
|
||
TRZ B,100
|
||
JRST STKCVX
|
||
|
||
STKCT2: MOVEI B,16
|
||
JRST STKCVX
|
||
|
||
STKCV4: TLNN TT,4 ;SKIP IF ITS MODE
|
||
JRST STKCV6
|
||
TRNE A,200
|
||
JRST STKCVX ;ITS, CTRL
|
||
STKCV6: TRO B,100
|
||
TRNN A,100
|
||
TRO B,40 ;SHIFT WAS OFF
|
||
JRST STKCVX
|
||
|
||
STKCVB: MOVEI B,134
|
||
TRNE A,200 ;SKIP IF CTRL IS OFF
|
||
TLNN TT,4 ;SKIP IF ITS MODE
|
||
JRST STKCVX
|
||
TRZ B,100
|
||
JRST STKCVX
|
||
|
||
DEFINE STKM A,B,C,D,E
|
||
A_29.+B_22.+C_15.+D_8+E_1
|
||
TERMIN
|
||
|
||
DEFINE STKM1 TBL
|
||
350700,,TBL(Q)
|
||
260700,,TBL(Q)
|
||
170700,,TBL(Q)
|
||
100700,,TBL(Q)
|
||
010700,,TBL(Q)
|
||
TERMIN
|
||
|
||
STKBPT: STKM1 STKTBL
|
||
STKTBL: STKM 12,0,0,40,0
|
||
STKM 33,0,0,11,14
|
||
STKM 13,0,0,0,0
|
||
|
||
STKBP1: STKM1 STKTB1
|
||
STKTB1: STKM 133,135,26,174,41
|
||
STKM 5,77,17,60,36
|
||
STKM 22,23,20,21,44
|
||
STKM 45,32,30,1,136
|
||
|
||
STKBP2: STKM1 STKTB2
|
||
STKTB2: STKM 0,34,7,6,74
|
||
STKM 100,76,33,75,47
|
||
STKM 137,31,27,25,24
|
||
STKM 173,176,4,43,35
|
||
STKM 46,140,10,37,3
|
||
STKM 42,2,0,0,0
|
||
};IFN STKP
|
||
|
||
SUBTTL INTERFACE (?) TO DM PDP11 ON NTY (REALLY WANT A CAIOS)
|
||
IFN NTYP,[
|
||
IFN TK10P, .ERR YOU REALLY WILL LOSE WITH BOTH TTY AND 11 ON NTY
|
||
NTYOPN: PUSHJ P,NTYOP1 ;SET UP OPEN
|
||
POPJ P, ;OPEN LOST?
|
||
SKIPE NTYUSE ;IF THIS IS FIRST OPEN, DO SOME INITIALIZING
|
||
JRST POPJ1
|
||
CONO NTY,0 ;STOP INTS
|
||
SETOM NTYOAC
|
||
MOVE A,[NTYIOI,,NTYIOR]
|
||
BLT A,NTYORM ;INITIALIZE ALL THE POINTERS AND COUNTERS
|
||
CONO NTY,620000+NTYCHN
|
||
JRST POPJ1
|
||
|
||
NTYOP1: ROT D,1 ;MODE BACK, TO GET INPUT & OUTPUT
|
||
JSP Q,STDOPN
|
||
3,,NTYUSR
|
||
NTYIT,,NTYOT
|
||
0,,0 ;NTYBIT,,NTYBOT
|
||
|
||
NTYRS==CPOPJ
|
||
|
||
NTYCLS: SOSL NTYUSE ;-1 MEANS FREE (USE STDCLS?)
|
||
POPJ P,
|
||
SETOM NTYUSE
|
||
SETOM NTYUSR
|
||
POPJ P,
|
||
|
||
;MAIN PROGRAM ROUTINES FOR IOT/SIOT ...
|
||
|
||
NTYBI==IOCR10
|
||
NTYBO==IOCR10
|
||
|
||
NTYTO::
|
||
NTYOPT: PCLT ;PUT OUTPUT INTO BUFFER
|
||
SKIPG C
|
||
SKIPA A,(C)
|
||
UMOVE A,(C) ;FETCH THE USERS BYTE
|
||
SKIPG NTYORM ;WAIT FOR ROOM
|
||
PUSHJ P,UFLS
|
||
IDPB A,NTYOIP
|
||
SOSGE A,NTYORM
|
||
JRST 4,. ;WENT BELOW ZRO?
|
||
AOSN NTYOAC
|
||
CONO NTY,10+NTYCHN ;NOT ACTIVE, START PI LEVEL
|
||
AOSGE NTYOIR
|
||
POPJ P,
|
||
MOVE A,[NTYOII,,NTYOIR] ;RING AROUND THE ROSY
|
||
BLT A,NTYOIP
|
||
POPJ P,
|
||
NTYTI::
|
||
NTYIGT: MOVEI T,NTYIBS*4
|
||
PCLT
|
||
CAMG T,NTYIRM
|
||
PUSHJ P,UFLS ;WAIT UNTIL A BYTE COMES IN
|
||
ILDB W,NTYIOP
|
||
AOS NTYIRM ;NOW MORE ROOM
|
||
AOSGE NTYIOR ;RING?
|
||
POPJ P,
|
||
MOVE B,[NTYIOI,,NTYIOR] ;REDO POINTERS
|
||
BLT B,NTYIOP
|
||
POPJ P,
|
||
|
||
;INTERRUPT ROUTINES
|
||
|
||
NTYBRK: TRC A,2000 ;DEVICE #
|
||
TRNE A,7000
|
||
JRST NTYSEL ;STOPPED ON OTHER DEVICE
|
||
TRNE A,40
|
||
JRST NTYIPT ;INPUT
|
||
TRNE A,20
|
||
JRST NTYOGT ;OUTPUT
|
||
NTYRET: CONO NTY,620000+NTYCHN ;RESTART
|
||
JRST LPBKRT
|
||
|
||
NTYSEL: TRC A,2000 ;HAVE TO KNOCK DOWN SOME OTHER FLAG
|
||
ANDI A,7000
|
||
LSH A,3
|
||
CONO NTY,400000+NTYCHN(A)
|
||
CONSZ NTY,40
|
||
DATAI NTY,A ;CLEAR INPUT
|
||
CONSZ NTY,20
|
||
CONO NTY,20+NTYCHN ;CLEAR OUTPUT
|
||
AOS NTYERR
|
||
JRST NTYRET
|
||
|
||
NTYOGT: MOVEI A,NTYOBS*4
|
||
CAMG A,NTYORM
|
||
JRST [SETOM NTYOAC
|
||
CONO NTY,20+NTYCHN
|
||
JRST NTYRET]
|
||
ILDB A,NTYOOP
|
||
AOS NTYORM
|
||
DATAO NTY,A
|
||
AOSGE NTYOOR
|
||
JRST NTYRET
|
||
MOVE A,[NTYOOI,,NTYOOR]
|
||
BLT A,NTYOOP ;ZAP THE POINTER AND COUNT (RING BUF)
|
||
JRST NTYRET
|
||
|
||
NTYIPT: SOSG NTYIRM
|
||
CONO NTY,100+NTYCHN ;IF HDWE NOT IN, BUFFER WILL BE CLOBBERED
|
||
;BUT ALSO, THE COUNT WILL BE NEG!!!
|
||
DATAI NTY,A
|
||
IDPB A,NTYIIP
|
||
AOSGE NTYIIR
|
||
JRST NTYRET
|
||
MOVE A,[NTYIII,,NTYIIR]
|
||
BLT A,NTYIIP ;RING THE BUFFER POINTERS
|
||
JRST NTYRET
|
||
|
||
;DATA AREAS FOR THE NTY INTERFACE TO DM PDP 11
|
||
|
||
NTYIBS==1000
|
||
NTYOBS==100
|
||
|
||
NTYIOI: -NTYIBS*4 ;STUFF TO INITIALIZE INPUT SIDE
|
||
041000,,NTYIBF-1
|
||
NTYIII: -NTYIBS*4
|
||
041000,,NTYIBF-1
|
||
NTYIBS*4
|
||
|
||
NTYOOI: -NTYOBS*4 ;INITIALIZES OUTPUT SIDE
|
||
041000,,NTYOBF-1
|
||
NTYOII: -NTYOBS*4
|
||
041000,,NTYOBF-1
|
||
NTYOBS*4
|
||
|
||
EBLK
|
||
|
||
NTYIOR: -NTYIBS*4 ;RING COUNTER, INPUT BUFFER, OUTPUT PART
|
||
NTYIOP: 041000,,NTYIBF-1 ;BYTE POINTER, " "
|
||
NTYIIR: -NTYIBS*4 ;RING CTR, INPUT BUFFER, INPUT PART
|
||
NTYIIP: 041000,,NTYIBF-1 ;BYTE POINTER, " "
|
||
NTYIRM: NTYIBS*4 ;ROOM EMPTY IN IN BUFFER
|
||
|
||
NTYOOR: -NTYOBS*4 ;RING CTR, OUTPUT BUFF, OUT PART
|
||
NTYOOP: 041000,,NTYOBF-1 ; BYT PTR, " "
|
||
NTYOIR: -NTYOBS*4 ;RING CTR, OUT BUFF, IN PART
|
||
NTYOIP: 041000,,NTYOBF-1 ;BYT PTR, " "
|
||
NTYORM: NTYOBS*4 ;ROOM IN THE OUTPUT BUFFER
|
||
|
||
NTYIBF: BLOCK NTYIBS ;INPUT BUFFER
|
||
NTYOBF: BLOCK NTYOBS ;OUTPUT BUFFER
|
||
|
||
NTYOAC: -1 ;FLAG, OUTPUT ACTIVE UNLESS -1
|
||
NTYUSR: -1
|
||
NTYUSE: -1
|
||
|
||
NTYERR: 0
|
||
|
||
BBLK
|
||
];NTYP
|
||
|
||
SUBTTL PDP-10 TO PDP-11 INTERFACE AND XGP
|
||
|
||
IFN TEN11P,[
|
||
EBLK
|
||
T11MP: BLOCK 256. ;CONTENTS OF TEN11 MAP, -1 => CONFLICT PAGE
|
||
BBLK
|
||
;ELSE 0 => AVAIL
|
||
;4.9=1 => CONTENTS OF MAP WD EXCEPT 4.7-4.3 => USE COUNT
|
||
IFN XGP,XGPTP==376 ;PAGE NUMBER IN 10-11 RESERVED FOR CLK LEVEL XGP HACKS
|
||
|
||
;PLACE WD IN A IN AVAIL 10-11 MAP ENTRY (RETURN IN RH B)
|
||
T11AD: SKIPE TEN11F
|
||
POPJ P,
|
||
MOVE C,A
|
||
JSP Q,T11FND ;SKIP UNLESS NO MAP ENTRIES AVAIL
|
||
JRST T11A1 ;WD ALREADY IN PAGE
|
||
MOVEI C,0 ;FIND FREE PAGE
|
||
JSP Q,T11FND
|
||
JRST T11A2
|
||
POPJ P, ;NO FREE PGS AVAIL
|
||
|
||
T11A1: LDB E,[350500,,T11MP(B)]
|
||
CAIN E,37
|
||
JRST T11FN2 ;USAGE COUNT MAX FOR THAT ENTRY
|
||
AOS E
|
||
DPB E,[350500,,T11MP(B)]
|
||
JRST POPJ1
|
||
|
||
|
||
T11A2: MOVEM A,T11MP(B)
|
||
MOVEM A,400000+T11CP*2000(B) ;STORE IN HARDWARE
|
||
JRST POPJ1
|
||
|
||
T11FND: MOVSI B,-256.
|
||
T11FN1:
|
||
IFN XGP,[ CAMN B,[-256.+XGPTP,,XGPTP] ;DON'T ALLOCATE SPECIAL XGP ENTRY TO OTHER USERS
|
||
JRST T11FN2
|
||
]
|
||
MOVE E,T11MP(B)
|
||
TLZ E,174000 ;USE COUNT BITS
|
||
CAMN E,C
|
||
JRST (Q) ;FOUND IT
|
||
T11FN2: AOBJN B,T11FN1
|
||
JRST 1(Q) ;CANT FIND IT
|
||
|
||
|
||
;DELETE REF TO T11 PAGE IN B
|
||
T11DL: SKIPE TEN11F
|
||
POPJ P,
|
||
MOVE E,T11MP(B)
|
||
AOJE E,CPOPJ ;REALLY CONFLICT PAGE
|
||
LDB E,[350500,,T11MP(B)]
|
||
SOJL E,T11DL1 ;DELETING LAST REF TO PAGE?
|
||
DPB E,[350500,,T11MP(B)]
|
||
POPJ P,
|
||
|
||
T11DL1: CLEARM T11MP(B)
|
||
CLEARM 400000+T11CP*2000(B)
|
||
POPJ P,
|
||
]
|
||
|
||
IFN TEN11P,[
|
||
|
||
;.CALL ADR
|
||
; LOSE
|
||
; WIN
|
||
;ADR/ SETZ
|
||
; SIXBIT /T11MP/
|
||
; ARG 1 VIRT PAGE #
|
||
; ARG 2 DESIRED T11 MAP WORD
|
||
|
||
NT11M: TDNE A,[-400] ;TEMP? TEN11 CALL A HAS USER PG
|
||
JRST OPNL33 ;INVALID ARG - BAD USER PAGE #.
|
||
SKIPE TEN11F
|
||
JRST OPNL7 ;DEVICE NOT READY.
|
||
PUSHJ P,UPLC
|
||
MOVE W,A
|
||
JUMPGE B,OPNL33
|
||
TLZ B,174000 ;DONT ALLOW ANYTHING IN USAGE COUNT BITS
|
||
MOVE D,B
|
||
LDB E,Q
|
||
JUMPE E,NT11M1 ;PAGE MUST BE FREE OR ABS, OTHERWISE ERROR
|
||
CAIE E,-1
|
||
JRST OPNL13 ;FILE ALREADY EXISTS
|
||
LDB B,T
|
||
ANDI B,PMRCM
|
||
LDB E,[.BP <PMRCM-377> B] ;GET MOBY #
|
||
ANDI B,377
|
||
CAIN E,T11CPA_-18.
|
||
PUSHJ P,T11DL
|
||
MOVEI B,0
|
||
DPB B,Q
|
||
DPB B,T
|
||
NT11M1: MOVE R,Q
|
||
MOVE A,D
|
||
PUSHJ P,T11AD
|
||
JRST OPNL37 ;NO CORE AVAILABLE.
|
||
ADDI B,200000+<<T11CPA_-18.>_8> ;ADDRESS CORRECT MOBY
|
||
TLNE A,200000
|
||
TRO B,400000 ;WRITE PERMISSION
|
||
DPB B,T
|
||
MOVEI C,-1
|
||
DPB C,R
|
||
LSH W,10.
|
||
ADDI W,2000
|
||
CAMLE W,HUSRAD(U)
|
||
MOVEM W,HUSRAD(U)
|
||
JRST POPJ1
|
||
]
|
||
.ELSE NT11M: JRST OPNL1 ;NO SUCH DEVICE.
|
||
IFN XGP,[
|
||
;CLOCK LEVEL XGP CODE FOR FILLING IMAGE MODE BUFFERS
|
||
;ASSUMES XGP11P IS POINTER TO FIRST 11 RING NODE
|
||
;AND THAT THE 11 BUFFER RING STRUCTURE IS:
|
||
|
||
; POINTER TO NEXT NODE OF BUFFER
|
||
; USE WORD (0=> EMPTY)
|
||
; POINTER TO BUFFER (ASSUMED TO BE 1K 10 STYLE, 2K 11 STYLE)
|
||
|
||
;
|
||
;THE NODES AND THE BUFFERS MUST BEGIN ON EVEN PDP-11 WORDS
|
||
;I.E. 11 ADDRESSES ENDING WITH TWO ZEROES.
|
||
|
||
;THIS CODE USES A SPECIAL 10-11 INTERFACE ENTRY
|
||
;NAMELY, XGPTP, AND THREE EXEC PAGES, XGPC WHICH POINTS TO
|
||
;THE LOW 2K OF PDP-11 CORE, USED FOR THE RING NODE POINTERS
|
||
;XGPUB WHICH POINTS TO THE CURRENTLY HACKED USER PAGE
|
||
;AND XGPB WHICH POINTS PERMANENTLY TO THE 10-11 PAGE CORRESPONDING
|
||
;TO XGPTP
|
||
|
||
XGP11==1 ;PDP-11 RUNNING XGP
|
||
XGPCA==XGPC*2000+400000 ;EXEC ADR OF LOW PDP-11 CORE
|
||
XGPBA==XGPB*2000+400000 ;EXEC ADR OF BUFFER IN PDP-11
|
||
XGPUBA==XGPUB*2000+400000 ;EXEC ADR OF CURRENT PAGE IN USER'S MAP
|
||
XGNTPG==117. ;MAX # TIED DOWN PAGES (WOULD YOU BELIEVE...)
|
||
X11BFP==102 ;LOC OF XGP BUFF HEAD IN 11 (PDP11 ADR 410)
|
||
|
||
XGPCLK: PUSH P,A
|
||
PUSH P,B
|
||
MOVE A,XGPTM1 ;TIME FIRST PAGE LOCKED IN CORE
|
||
ADDI A,30.*60. ;1 MINUTE
|
||
CAMGE A,TIME ;WIN?
|
||
JSP Q,XGPFLS ;LOSE...
|
||
SKIPL XGPINI ;DON'T HACK UNTIL MAIN PGM HAS PAGES TIED DOWN
|
||
JRST POPBAJ
|
||
SPM XGPSPM ;SAVE OLD MAP
|
||
XGPC1: MOVE A,XGP11P ;GET POINTER TO FIRST PDP-11 BUFFER
|
||
MOVE A,XGPCA(A) ;GET CONTENTS FROM PDP-11
|
||
LDB B,[242000,,A] ;GET NEXT RING POINTER
|
||
LDB A,[042000,,A] ;GET USE WORD
|
||
JUMPN A,POPBAJ ;BUFFERS FULL
|
||
TRNE B,3
|
||
JSP Q,XGPFLS ;NEW BUF POINTER NOT ON EVEN WD BNDY
|
||
LSH B,-2 ;CONVERT TO 10 ADDRESS
|
||
SKIPE B
|
||
CAIL B,2000 ;IS IT WITHIN CONTROL PAGE?
|
||
JSP Q,XGPFLS ;FLUSH
|
||
EXCH B,XGP11P ;SETUP NEXT POINTER, GET BACK OLD ONE
|
||
MOVEM B,XGPOB ;SAVE OLD POINTER FOR HACKING BUFF FULL
|
||
MOVE B,XGPCA+1(B) ;GET POINTER TO 11 BUFFER
|
||
LDB B,[242000,,B]
|
||
TRNE B,3
|
||
JSP Q,XGPFLS
|
||
LSH B,8 ;SETUP 10-11 ENTRY
|
||
IOR B,[600000+<XGP11_8>,,1777] ;R/W, PROT INFINITE
|
||
MOVEM B,400000+2000*T11CP+XGPTP ;GRONK INTO 10-11 INTERFACE
|
||
MOVEM B,T11MP+XGPTP ;FOR DEBUGGING ONLY
|
||
ILDB A,XGP10P ;GET POINTER TO NEXT 10 PAGE
|
||
CAIL A,TSYSM ;LOSE
|
||
JRST 4,. ;MAIN PGM HAS POINTER TO NXM
|
||
JUMPE A,XGPFIN ;HERE WE ARE DONE, I HOPE. DEUS GRATIUS
|
||
MOVE B,A ;SAVE MMSWP ENTRY # TO CLEAR OUT TIE DOWN
|
||
IORI A,600000 ;R/W
|
||
DPB A,[.XGPUB+EXEUMP] ;GRONK EXEC MAP
|
||
LPMR XGPSPM ;RESET ASSOC REGS
|
||
MOVE A,[XGPUBA,,XGPBA]
|
||
BLT A,XGPBA+1777 ;DO THE STUFF!
|
||
MOVSI A,-1
|
||
ADDM A,MMSWP(B) ;CLEAR TIE DOWN, PHEW!
|
||
SKIPGE MMSWP(B) ;STOP BUGGY LOSSAGE
|
||
JRST 4,.
|
||
PUSHJ P,XGPBIT ;GET TABLE INFO
|
||
TDNN A,XGPMTB(B)
|
||
JRST 4,. ;UNTIED PAGE NOT TIED DOWN
|
||
ANDCAM A,XGPMTB(B) ;CLEAR THE BIT
|
||
MOVEI A,0
|
||
DPB A,[.XGPUB+EXEUMP] ;CLEAR EXEC PAGE MAP
|
||
MOVE A,XGPOB ;GET OLD RING PTR
|
||
MOVEI B,30 ;CHANGE RH ONLY TO A 1
|
||
MOVEM B,XGPCA(A) ;SET BUFFER FULL
|
||
JRST XGPC1 ;LOOP TO GET A NEW BUFFER
|
||
|
||
|
||
|
||
XGPFIN: SETZM XGPINI
|
||
JSP Q,XGPFLS
|
||
|
||
;MMSWP ENTRY IN B,
|
||
;RETURNS BIT IN A
|
||
;WD OF TABLE IN B
|
||
XGPBIT: MOVE A,B
|
||
IDIVI A,36.
|
||
MOVNS B
|
||
PUSH P,A
|
||
MOVSI A,400000
|
||
LSH A,(B)
|
||
JRST POPBJ
|
||
|
||
;CALLED FROM CORE ALLOCATOR WHEN FLUSHING PAGES
|
||
;OF A JOB WHICH HAVE LH OF MMSWP NON ZERO.
|
||
|
||
XGPCFL: CAME U,XGPUSR ;ARE WE CONCERNED?
|
||
POPJ P, ;NOPE
|
||
PUSH P,A
|
||
PUSH P,B
|
||
MOVE B,TT ;B GETS MMSWP INDEX
|
||
PUSHJ P,XGPBIT ;GET INDEXES INTO XGPMTB
|
||
TRNN A,XGPMTB(B) ;IS THIS A PAGE BEING HACKED BY XGP?
|
||
JRST POPBAJ ;NOPE
|
||
;FALLS THRU
|
||
|
||
;XGPFLS IS CALLED AT THE CLOCK LEVEL IF ANYTHING GOES WRONG WITH ANYTING
|
||
;AND AT THE END OF THE RUN.
|
||
;IT FREES THE WORLD, AND FLUSHES THE XGP USER
|
||
|
||
XGPFLS: MOVEM Q,XFLSPC
|
||
SETOM XGPUSR ;FLUSHES XGP, ALSO PREVENTS TIMING ERRORS IF XGPFLS CALLED
|
||
;AT CLOCK LEVEL, SINCE IT WON'T BE ANY MORE
|
||
PUSH P,C
|
||
PUSH P,D
|
||
CLEARB A,B
|
||
MOVSI C,400000
|
||
MOVSI D,-1
|
||
XGPFL1: TDNN C,XGPMTB(B)
|
||
JRST XGPFL3 ;THIS PAGE NOT HACKED
|
||
ADDM D,MMSWP(A) ;UNTIE THIS PAGE
|
||
SKIPGE MMSWP(A)
|
||
JRST 4,.
|
||
ANDCAM C,XGPMTB(B) ;AND FLUSH THIS BIT
|
||
XGPFL3: ROT C,-1 ;MOVE ON TO NEXT BIT
|
||
SKIPGE C ;BEG OF NEW WORD?
|
||
AOS B ;YES, AOS XGPMTB INDEX
|
||
CAIGE A,TSYSM-1 ;FINISHED WITH ALL OF MMSWP ENTRIES?
|
||
XGPFL2: AOJA A,XGPFL1 ;NOPE, LOOP BACK FOR MORE FUN
|
||
POP P,D
|
||
POP P,C
|
||
JRST POPBAJ
|
||
|
||
|
||
;MAIN PROGRAM BUFFER TIE DOWN ROUTINES
|
||
;.CALL FOO
|
||
;FOO: SETZ
|
||
; SIXBIT /XGPIM/
|
||
; SETZ POINTER TO [# OF PAGES,,FIRST PAGE]
|
||
|
||
NXGPIM: XCTR XRW,[MOVES B,(A)] ;GET POINTER, AND CHECK FOR WRITE
|
||
JUMPL B,XCONT ;CONTINUING A PREVIOUS CALL
|
||
SKIPN TEN11F
|
||
SKIPL XGPUSR
|
||
POPJ P, ;LOSE
|
||
MOVEI C,X11BFP ;BUFF HEAD IN 11 DEFINED AS 1000
|
||
MOVEM C,XGP11P
|
||
MOVE C,XGPCA(C) ;GET BUFF POINTER FROM 11
|
||
JUMPE C,CPOPJ ;LOSE, THE 10-11 IS LOSING OR PGM LOSING
|
||
MOVE C,TIME
|
||
MOVEM C,XGPTM1 ;SET UP TIMEOUT ON PAGE LOCK
|
||
SETZM XGPINI ;SAY NOT ACTIVE
|
||
MOVEM U,XGPUSR ;AND BEING LOADED
|
||
SETZM XGPTAB
|
||
MOVE C,[XGPTAB,,XGPTAB+1]
|
||
BLT C,XGPTAB+LXTAB-1 ;CLEAR OUT OLD PAGE BUF TABLE
|
||
MOVE C,[441400,,XGPTAB]
|
||
MOVEM C,XGP10P ;SETUP BYTE POINTER TO PAGE LIST
|
||
XTIE: TLO B,400000
|
||
UMOVEM B,(A)
|
||
HRRZ C,B
|
||
HRRZ E,B ;C,E GET PAGE # NEXT TO BE TIED DOWN
|
||
HLRZ D,B ;D GETS COUNT OF PAGES LEFT
|
||
LSH C,10.
|
||
UMOVE B,20(C) ;BRING IN THAT LOSING PAGE
|
||
PUSHJ P,SWTL
|
||
CIRPSW
|
||
TRZ D,400000
|
||
CAIL D,XGNTPG ;MAX # PAGES TIED DOWN
|
||
JRST XLOSE
|
||
EXCH E,A
|
||
CAIL A,400
|
||
JRST XLOSE ;PAGE OUT OF REASONABLE RANGE
|
||
PUSH P,A
|
||
PUSHJ P,UPLC ;FIND OUT PAGE MAP ENTRY
|
||
LDB B,Q
|
||
CAIN B,-1
|
||
JRST XLOSE1
|
||
LDB B,T
|
||
ANDI B,PMRCM
|
||
CAIL B,TSYSM
|
||
JRST 4,.
|
||
PUSHJ P,XGPBIT
|
||
CONO PI,CLKOFF ;CLOCK OFF TO PREVENT PAGES 1/2 TIED DOWN
|
||
TDNN A,XGPMTB(B) ;WE HAVE HIT THIS PAGE ALREADY
|
||
CAME U,XGPUSR ;TIMEOUT OR OTHER GROSS LOSSAGE
|
||
JRST XLOSE1 ;DON'T TIE THIS ONE DOWN, AND FLUSH ALL THE REST
|
||
IORM A,XGPMTB(B) ;SET BIT IN XGP MEM TABLE
|
||
LDB B,T
|
||
ANDI B,PMRCM
|
||
IDPB B,XGP10P ;PUT IN BUFFER LIST
|
||
MOVSI A,1
|
||
ADDM A,MMSWP(B) ;TIE IT DOWN GOOD (FOR ALL YOU BONDAGE FREAKS)
|
||
CONO PI,CLKON
|
||
PUSHJ P,LSWPOP ;CIRPSW
|
||
POP P,B
|
||
SOJLE D,XBFIN ;WE ARE DONE TYING START XGPING
|
||
AOS B
|
||
HRL B,D
|
||
MOVE A,E ;NOW, LOOP FOR MORE CRUFTIES, OR
|
||
XCONT: CAME U,XGPUSR ;REENTER HERE IF THE MAD SWAPPER HAD US SWAPPED OUT
|
||
POPJ P,
|
||
JRST XTIE
|
||
|
||
XLOSE1: CONO PI,CLKON ;CLEANUP AFTER LOSSAGE
|
||
SUB P,[1,,1]
|
||
XLOSE: PUSHJ P,LSWPOP ;CIRPSW
|
||
PUSH P,A
|
||
PUSH P,B
|
||
JSP Q,XGPFLS ;FLUSH THE LAST VESTIGE OF THIS ABORTIVE ATTEMPT TO CAUSE WINNAGE
|
||
|
||
XBFIN: SETOM XGPINI ;THE WORST IS OVER, SIT BACK AND RELAX
|
||
MOVE A,[441400,,XGPTAB]
|
||
MOVEM A,XGP10P
|
||
JRST POPJ1 ;TELL HIM HE MAY EVEN WIN SOMEDAY
|
||
|
||
XPLO: CONO PI,CLKOFF
|
||
PUSHJ P,XPLST
|
||
JRST XPLO1
|
||
CONO PI,CLKOFF
|
||
PUSHJ P,XPLWT
|
||
PUSHJ P,UFLS
|
||
MOVE T,XPLU
|
||
SKIPE IOCHNM(T)
|
||
JRST XPLO2
|
||
MOVE T,SV40(T)
|
||
CAME T,[.SLEEP 17,]
|
||
XPLO2: JRST OPNL10
|
||
CONO PI,CLKON
|
||
MOVNI A,1
|
||
MOVSI B,(SIXBIT /XPL/)
|
||
PUSHJ P,CLIO
|
||
POPJ P,
|
||
MOVE A,UTMPTR(U)
|
||
MOVE B,XPLU
|
||
MOVEM A,UTMPTR(B)
|
||
JRST POPJ1
|
||
|
||
XPLO1: PUSHJ P,UDELAY
|
||
JRST XPLO
|
||
|
||
XPLST: SKIPL T,XPLU
|
||
PUSHJ P,XPLIN
|
||
JRST POPJ1
|
||
HRROI A,XPL
|
||
CONO PI,UTCOFF
|
||
PUSHJ P,NUJBST
|
||
JRST UTCONJ
|
||
JRST UTCOJ1
|
||
|
||
XPLWT: SKIPGE T,XPLU
|
||
POPJ P,
|
||
PUSHJ P,XPLIN
|
||
SKIPGE IOCHNM(T)
|
||
JRST POPJ1
|
||
MOVS Q,SV40(T)
|
||
CAIN Q,(.SLEEP 17,)
|
||
AOS (P)
|
||
POPJ P,
|
||
|
||
XPLIN: PUSH P,U
|
||
CAML T,USRHI
|
||
JRST XPLIN1
|
||
HLRE U,UNAME(T)
|
||
AOJN U,XPLIN1
|
||
MOVSI U,(SIXBIT /XPL/)
|
||
CAME U,JNAME(T)
|
||
XPLIN1: AOS -1(P)
|
||
POP P,U
|
||
POPJ P,
|
||
|
||
;VARIABLES AREA
|
||
EBLK
|
||
|
||
XGPTAB: BLOCK XGNTPG/3+1 ;PAGE #'S OF XGP BUFS IN 12 BIT BYTES
|
||
LXTAB==.-XGPTAB
|
||
XGP11P: 0 ;POINTER TO 11 RING STRUCTURE (10 STYLE ADR INTO XGPC)
|
||
XGPOB: 0 ;TEMP FOR OLD XGP11P
|
||
XGP10P: 0 ;BYTE POINTER INTO XGPTAB FOR GETTING 10 BUFFERS
|
||
XGPMTB: BLOCK TSYSM/36.+1 ;BIT TABLE FOR KEEPING
|
||
;TRACK OF AOSES OF MMSWP
|
||
XGPUSR: -1 ;XGP USER INDEX, -1 IF NONE
|
||
XGPINI: 0 ;IF -1, SIGNAL TO CLK CODE THAT ALL BUFFERS ARE NOW TIED DOWN.
|
||
XFLSPC: 0 ;PC OF LAST CALL TO XGPFLS
|
||
XGPSPM: BLOCK 8 ;STORAGE FOR PAGE MAP ENTRIES
|
||
XGPTM1: 0 ;TIME FIRST PAGE TIED DOWN
|
||
XPL: SIXBIT /XPL/ ;FILE + JNAME OF XPL INTERPRETER
|
||
XPLU: 0 ;INDEX OF LOADED XPL
|
||
|
||
BBLK
|
||
]
|
||
|
||
IFE XGP,NXGPIM: JRST OPNL1 ;NO SUCH DEVICE
|
||
|
||
SUBTTL ROBOT ARM ROUTINES
|
||
|
||
IFN ARMP,[
|
||
NARMCH==11.
|
||
|
||
AARMOVE: UMOVE A,(J)
|
||
JUMPGE A,CPOPJ
|
||
CAMGE A,[-100,,]
|
||
JRST ILUUO
|
||
CONO PI,CLKOFF
|
||
CAMN U,ARMUSR
|
||
JRST AARM1A
|
||
SKIPL ARMUSR
|
||
JRST ILUUO
|
||
; CONO TIPDEV,0
|
||
; CONI TIPDEV,C
|
||
; JUMPE C,ILUUO ;DONT ALLOW ARM TO RUN WITHOUT TIPBRK
|
||
; DATAI TIPDEV,C
|
||
; TRNN C,1
|
||
; JRST ILUUO ;WRIST DETENT OFF NORMAL- BARF
|
||
; CONO TIPDEV,TIPBCH
|
||
MOVEM U,ARMUSR
|
||
AARM1A: CONO PI,CLKON
|
||
MOVSI B,-NARMCH
|
||
AARM1: SETZM ARMDF(B)
|
||
SKIPN ARMF
|
||
SETOM DESTIN(B) ;NOT PREV IN USE, INITIALIZE
|
||
AOBJN B,AARM1
|
||
SKIPN ARMF
|
||
SETOM OMPXIF
|
||
SKIPN ARMF
|
||
PUSHJ P,IMXON ;START IMX
|
||
SETOM ARMF ;ARM NOW IN USE
|
||
SETOM DLSRCH
|
||
ARML: UMOVE E,(A) ;PICK UP COMM
|
||
LDB C,[220400,,E]
|
||
JUMPE C,ARML1 ;NO INDEX
|
||
XCTR XRW,[HRRZ Q,(C)]
|
||
ADD E,Q
|
||
TLZ E,17
|
||
ARML1: TLZE E,20
|
||
XCTR XRW,[HRR E,(E)]
|
||
LDB D,[360600,,E] ;CHNL
|
||
LDB C,[300600,,E] ;OP
|
||
CAIGE D,NARMCH
|
||
CAIL C,NARMOP
|
||
JRST ARMLOS
|
||
PUSHJ P,@ARMOPT(C)
|
||
AOBJN A,ARML
|
||
ADF1: MOVSI D,-NARMCH
|
||
ADFL: SKIPL A,ARMDF(D)
|
||
JRST ADF2
|
||
TLNE A,100000
|
||
JRST .+3
|
||
MOVE C,RMAXV(D)
|
||
MOVEM C,MAXV(D)
|
||
ADF2: AOBJN D,ADFL
|
||
SETZM DLSRCH
|
||
JUMPL B,POPJ1
|
||
POPJ P,
|
||
|
||
ARMLOS: SETZM DLSRCH
|
||
JRST ILUUO
|
||
|
||
ARMOPT: ASDEST ;0 SET DEST
|
||
ASVEL ;1 SET VELOC
|
||
ATDEST ;2 COMPARE COMPUTED POSN
|
||
ATVEL ;3 COMPARE COMPUTED VELOC
|
||
AADST ;4 COMPARE ACTUAL POS
|
||
ARPOST ;5 READ CURRENT POSITION
|
||
NARMOP==.-ARMOPT
|
||
|
||
ARPOST: LDB B,IMPXPP(D) ;READ POSITION
|
||
UMOVEM B,(E)
|
||
POPJ P,
|
||
|
||
ASDEST: ANDI E,7777
|
||
CAMGE E,DESMIN(D)
|
||
MOVE E,DESMIN(D)
|
||
CAMLE E,DESMAX(D)
|
||
MOVE E,DESMAX(D)
|
||
MOVEM E,DESTIN(D)
|
||
MOVSI E,600000
|
||
ADFSET: IORM E,ARMDF(D)
|
||
POPJ P,
|
||
|
||
ASVEL: ANDI E,7777
|
||
CAMLE E,RMAXV(D)
|
||
MOVE E,RMAXV(D)
|
||
MOVEM E,MAXV(D)
|
||
MOVSI E,500000
|
||
JRST ADFSET
|
||
|
||
AADST: LDB C,IMPXPP(D) ;COMPARE ACTUAL POSITION
|
||
SUB C,DESTIN(D)
|
||
JRST ATD1
|
||
|
||
ATDEST: SKIPA C,DESTIN(D) ;COMPARE COMPUTED POSITION
|
||
ATVEL: SKIPA C,VELOC(D) ;COMPARE COMPUTED VELOCITY
|
||
SUB C,POST(D)
|
||
ATD1: MOVMS C
|
||
CAMLE C,E
|
||
TLO B,400000
|
||
POPJ P,
|
||
|
||
SERVO: MOVSI A,-NARMCH
|
||
AOSN OMPXIF
|
||
JRST SERVI
|
||
SERV1: MOVE T,DESTIN(A)
|
||
SUB T,POST(A)
|
||
SKIPN VELOC(A)
|
||
JUMPE T,SERVX
|
||
SERV1A: MOVN B,MAXV(A)
|
||
MOVE C,VELOC(A)
|
||
SUB C,MAXA(A)
|
||
CAMGE C,B
|
||
MOVE C,B
|
||
MOVE B,VELOC(A)
|
||
ADD B,MAXA(A)
|
||
CAMLE B,MAXV(A)
|
||
MOVE B,MAXV(A)
|
||
CAMG T,B
|
||
CAMGE T,C
|
||
JRST SERV2
|
||
MOVM D,T
|
||
CAMLE D,MAXA(A)
|
||
JRST SERV2
|
||
SERV3: MOVEM T,VELOC(A)
|
||
ADDB T,POST(A)
|
||
IOR T,OMPXP(A)
|
||
DATAO OMPX,T
|
||
SERVX: AOBJN A,SERV1
|
||
SERVR: JRST ARMSVR
|
||
|
||
SERV2: SKIPGE T
|
||
SKIPA D,C
|
||
MOVE D,B
|
||
SUB T,VELOC(A)
|
||
MOVM E,D
|
||
IMUL D,E
|
||
IDIV D,MAXA(A)
|
||
ASH D,-1
|
||
CAMGE D,T
|
||
SKIPA E,B
|
||
MOVE E,C
|
||
MOVE C,E
|
||
XOR C,VELOC(A)
|
||
JUMPGE C,SERV2A
|
||
MOVE C,E
|
||
XOR C,T
|
||
JUMPGE C,SERV2A
|
||
SKIPA T,VELOC(A)
|
||
SERV2A: MOVE T,E
|
||
JRST SERV3
|
||
|
||
SERVI: LDB B,IMPXPP(A) ;INITIALIZE TO CURRENT ARM STATE
|
||
MOVEM B,POST(A)
|
||
SETZM VELOC(A)
|
||
SKIPGE DESTIN(A)
|
||
MOVEM B,DESTIN(A)
|
||
IOR B,OMPXP(A)
|
||
DATAO OMPX,B
|
||
AOBJN A,SERVI
|
||
JRST SERVR
|
||
|
||
AARMOFF: CAME U,ARMUSR
|
||
POPJ P,
|
||
CONO TIPDEV,0
|
||
SETZM ARMF
|
||
PUSHJ P,IMXCL1
|
||
SETOM ARMUSR
|
||
POPJ P,
|
||
|
||
AARMRS: CAME U,ARMUSR ;RESET ARM LOCK FLAGS
|
||
POPJ P,
|
||
MOVSI A,-NARMCH
|
||
AARMR1: SKIPL ARMLOK(A)
|
||
JRST AARMR2
|
||
CONO PI,OMXOFF
|
||
SETOM DESTIN(A) ;RELOAD ARM COMM FROM CURRENT POS
|
||
CLEARM ARMLOK(A)
|
||
SETOM OMPXIF
|
||
CONO PI,OMXON
|
||
AARMR2: AOBJN A,AARMR1
|
||
POPJ P,
|
||
|
||
|
||
TIPBRK: DATAI TIPDEV,B
|
||
TRNE B,1 ;WRIST DETENT
|
||
JRST TIPBR2
|
||
SETOM ARMLOK+ARMVRT ;UNHAPPINESS
|
||
TIPBR2: EXCH B,TIPBR
|
||
XOR B,TIPBR
|
||
SKIPGE A,ARMUSR
|
||
JRST TIPBR1
|
||
ANDI B,7
|
||
LSH B,ATPSFT
|
||
IORM B,PIRQC(A)
|
||
TIPBR1: JRST OMXRET
|
||
|
||
|
||
EBLK
|
||
|
||
;JOINT ASSIGN
|
||
;0-10 AMF SWING VERT HORIZ YAW TILT GRIP ROTATE EXTEND ROLL
|
||
;11-12 NEW VIDI FOCUS IRIS
|
||
|
||
ARMVRT==1 ;CHNL # OF ARM VERT
|
||
|
||
DESMIN: IRPS A,,0 41 233 0 0 0 0 0 0 0 0
|
||
A
|
||
TERMIN
|
||
DESMAX: IRPS A,,7777 7777 7323 7777 7777 7777 7777 7777 7777 7777 7777
|
||
A
|
||
TERMIN
|
||
DESTIN: BLOCK NARMCH ;-1 NOT COMMANDED + VAL OF POSITION COMMAND
|
||
POST: BLOCK NARMCH ;POSITION OF ARM AT PI LEVEL
|
||
VELOC: BLOCK NARMCH
|
||
MAXV: BLOCK NARMCH
|
||
ARMDF: BLOCK NARMCH ;4.9 VARIABLE CHANGED 4.5 POS VAR 4.7 VEL 4.6 ACC
|
||
ARMLOK: BLOCK NARMCH ;IF -1 AXIS LOCKED DO NOT ALLOW CHNG IN COMMAND
|
||
|
||
MAXA: REPEAT NARMCH,14
|
||
RMAXV: REPEAT NARMCH,140
|
||
|
||
OMPXP: IRPS A,,2 3 4 6 7 12 11 10 5 32 31
|
||
A,,
|
||
TERMIN
|
||
|
||
IMPXPP: IRPS A,,102 103 104 106 107 112 111 110 105 132 131
|
||
301400-140000*<A-A/3*3>,,MPXBUF+A/3
|
||
TERMIN
|
||
|
||
ARMUSR: -1 ;-1 OR INDEX OF USER DOING ARMOVE
|
||
OMPXIF: 0 ;-1 => INITIALIZE DESTINS'S TO CURRENT ARM POSITION
|
||
ARMF: 0 ;-1 ARM IN USE, 0 NO ARMOV EXECUTED
|
||
TIPBR: 0 ;TIP BREAK REG LAST TIME READ IN
|
||
BBLK
|
||
]
|
||
|
||
SUBTTL INPUT MULTIPLEXOR
|
||
|
||
IFN IMXP,[
|
||
APOTSE: CONI MPX,T
|
||
JUMPE T,ILUUO ;MPX NOT AVAIL
|
||
MOVE C,B
|
||
APOTS1: UMOVE A,(C)
|
||
ANDI A,377 ;GET IMPX CHNL
|
||
JUMPE A,CPOPJ ;CHNL 0 = END OF LIST
|
||
IDIVI A,3 ;COMPUTE MPXBUF INDEX
|
||
ADD A,MPXPT(B) ;FORM BYTE PTR
|
||
MOVSI B,-NPOTCH ;SET UP TN DELETE PREVIOUS POT CONN
|
||
PTS1: CAMN A,POTBPT(B) ;IS ENTRY FOR SAME CHNL
|
||
SKIPG POTUSR(B) ;AND ACTIVE
|
||
JRST PTS2 ;NO,KEEP LOOKING
|
||
CAME U,POTUSR(B) ;IS THIS USER THE ONE WHO MADE ENTRY
|
||
JRST ILUUO ;NO,ILLEGAL
|
||
PUSHJ P,NARK ;DEACTIVATE AND FREE ENTRY
|
||
|
||
PTS2: AOBJN B,PTS1 ;TRY NEXT ENTRY
|
||
MOVEI B,400000 ;MASK FOR DELETE ONLY
|
||
XCTR XRW,[TDNE B,(C)] ;SKIP ON NEW ENTRY WANTED
|
||
JRST PTSR ;TRY FOR NEXT BLOCK
|
||
MOVSI B,-NPOTCH ;SET UP TO FIND FREE ENTRY
|
||
PTS3: SKIPL POTUSR(B) ;SKIP ON FREE
|
||
PTS4: AOBJN B,PTS3 ;TRY OTHER SLOTS
|
||
JUMPGE B,ILUUO ;NO SLOTS AVAIL
|
||
CONO PI,CLKOFF ;PREVENT OTHER GRABBERS
|
||
SKIPGE POTUSR(B) ;SKIP IF JUST TAKEN
|
||
JRST PTS5 ;OKAY FOR SURE
|
||
CONO PI,CLKON ;REENABLE
|
||
JRST PTS4 ;TRY ANOTHER
|
||
|
||
PTS5: SETZM POTUSR(B) ;MARK TAKEN
|
||
AOS IMXNTO
|
||
AOS POTCON ;INCREMENT NUMBER SLOTS IN USE
|
||
PUSHJ P,IMXON ;START IMPX
|
||
CONO PI,CLKON ;AND ENABLE
|
||
PTS6: MOVEM A,POTBPT(B) ;SAVE PTR TO MPXBUF FOR MPX ROUTINE
|
||
XCTR XRW,[HRRZ A,1(C)] ;GET USER ADR
|
||
XCTRI XRW,[MOVES (A)]
|
||
JRST .+2
|
||
JRST PTSL1 ;NO,LOSE
|
||
XCTR XRW,[HLL A,1(C)] ;GET BYTE FIELDS
|
||
TLNN A,777700 ;IF NONE SPECIFIED
|
||
TLC A,4400 ;ASSUME FULL WORD
|
||
TLZ A,77 ;FLUSH INDEX,INDIRECT
|
||
MOVEM A,POTVPT(B) ;SAVE AS USER MEM PTR FOR MPX ROUTINE
|
||
PTS7: UMOVE A,(C)
|
||
ANDI A,3 ;GET FLOAT + ABS BITS
|
||
MOVEI D,PUFLI ;ADDR OF FLOATING INCREMENTAL UPDATE
|
||
TRNN A,1 ;SKIP ON FLOATING
|
||
MOVEI D,PUFXI ;ADDR OF FIXED INCREMENTAL UPDATE
|
||
TRNE A,2 ;SKIP ON NOT ABSOLUTE
|
||
SOS D ;ABS ROUTINE STARTS ONE BEFORE INCREMENTAL
|
||
MOVEM D,POTUPD(B) ;SAVE ROUTINE ADDR FOR MPX ROUTINE
|
||
PTS8: XCTR XRW,[MOVN D,2(C)] ;GET LOWER LIMIT
|
||
MOVNM D,POTOFS(B) ;SAVE AS OFFSET FOR MPX ROUTINE
|
||
TRNE A,1 ;SKIP ON FIXED
|
||
JRST PTS9 ;GO SET FLOATING PARAMS
|
||
XCTR XRW,[ADD D,3(C)] ;UL-LL
|
||
ASH D,-2 ;SCALE MULTIPLIER
|
||
|
||
PTS9R: MOVEM D,POTSCL(B) ;STORE SCALE FACTOR FOR MPX ROUTINE
|
||
LDB D,POTVPT(B) ;GET CURRENT VARIABLE VALUE
|
||
TRNE A,1 ;SKIP ON FIXED
|
||
JRST PTS10 ;COMPUTE FLOATING INCR VALUE
|
||
SUB D,POTOFS(B) ;D_VAL-LL FIXED
|
||
MOVSI E,200000 ;SET TO ROUND VALUE
|
||
ASHC D,-25. ;SCALE TO GET 12 BIT VALUE
|
||
DIV D,POTSCL(B) ;COMPUTE INCR VAL FOR VAR
|
||
PTS10R: HRROM D,POTVAL(B) ;STORE INCR VALUE FOR MPX ROUTINE
|
||
MOVEM U,POTUSR(B) ;STORE USER TO ACTIVATE MPX ROUTINE
|
||
PTSR: ADDI C,4 ;ADVANCE POINTER TO NEXT 4 WORD BLOCK
|
||
JRST APOTS1 ;GO SET MORE TABLE ENTRIES
|
||
|
||
PTS9: FADR D,3(C) ;UL-LL IN FLOATING
|
||
FSC D,-12. ;SCALE DOWN FOR POT RANGE
|
||
JRST PTS9R ;RETURN WITH SCALE FACTOR
|
||
|
||
PTS10: FSBR D,POTOFS(B) ;D_VAL-LL FLOATING
|
||
FDVR D,POTSCL(B) ;COMPUTE INCR VAL FLOATING
|
||
MULI D,400 ;FIX INCR VAL
|
||
TSC D,D ;WORK FOR BELOW LOWER LIMIT
|
||
ASH E,-243(D) ;VALUE IN E
|
||
MOVE D,E ;TO D LIKE FIXED
|
||
JRST PTS10R ;RETURN WITH INCR VALUE
|
||
|
||
|
||
PTSL1: PUSHJ P,NARK
|
||
PUSHJ P,TPFLT
|
||
JRST UUOTRO
|
||
|
||
;POTS UPDATE CALLED BY MPX ROUTINE
|
||
|
||
UPOTS: SPM UPTPGT
|
||
MOVSI A,-NPOTCH ;SET UP TO LOOP FOR ALL POT TABLE POSITIONS
|
||
SETZM UPUSR ;INDICATE NO USER SET UP
|
||
UPOT1: SKIPLE U,POTUSR(A) ;SKIP ON SLOT UNUSED OR IN PROCESS
|
||
JRST UPOT2 ;GO TRY TO UPDATE VAR
|
||
UPOTR: AOBJN A,UPOT1 ;TRY NEXT POT TABLE ENTRY
|
||
LPMR UPTPGT ;RESTORE MAP
|
||
JRST UPOTRT ;DONE
|
||
|
||
UPOT2: CAMN U,UPUSR ;IS THIS USER LAST UPDATED
|
||
JRST UPOT3 ;YES, RELOCATION IS SETUP
|
||
MOVE T,USTP(U) ;TEST TO SEE IF
|
||
SKIPN UMAPS(U) ;MAP LOADED TO POINT TO OTHER USER
|
||
TLNE T,BUCSTP+BCSTOP ;USER BEING MOVED
|
||
JRST UPOTR ;YES DON'T UPDATE FOR HIM
|
||
MOVEM U,UPUSR ;SAVE AS LAST USER SET UP
|
||
LPMR UPGML(U) ;LOAD USERS MAP
|
||
UPOT3: LDB B,POTBPT(A) ;GET CURRENT ABS POSITION
|
||
HLRZ C,POTVAL(A) ;GET POS LAST TIME
|
||
TRNE C,400000 ;SKIP UNLESS FIRST TIME
|
||
JRST UPOT3A
|
||
MOVE T,B
|
||
SUB T,C
|
||
MOVMS T
|
||
CAMG T,PTNOIS
|
||
JRST UPOTR
|
||
UPOT3B: HRLM B,POTVAL(A) ;SAVE FOR NEXT TIME
|
||
SUB B,C ;GET AMOUNT OF INCREMENT
|
||
CAIL C,5252 ;SKIP IF NOT IN UPPER THIRD
|
||
JUMPG B,UPOT4 ;JUMP IF IN UPPER THIRD AND GOING UP
|
||
CAIGE C,2525 ;SKIP IF NOT IN LOWER THIRD
|
||
JUMPL B,UPOT5 ;JUMP IF IN LOWER THIRD AND GOING DOWN
|
||
UPOT6: HRRE C,POTVAL(A) ;GET PREV INCREMENTAL VALUE
|
||
ADD C,B ;UPDATE BY POT INCR
|
||
CAILE C,7777 ;IF NEW VALUE WOULD EXCEED 7777
|
||
MOVEI C,7777 ;CLAMP IT TO 7777
|
||
CAIGE C,0 ;IF NEW VALUE WOULD BE LESS THAN 0
|
||
MOVEI C,0 ;CLAMP IT TO 0
|
||
HRRM C,POTVAL(A) ;STORE NEW INCR VALUE
|
||
JSP B,@POTUPD(A) ;CALL ROUTINE TO COMPUTE NEW VARIABLE VALUE
|
||
HRRZ T,POTVPT(A) ;STORE VAR IN USER MEM
|
||
XCTRI XR,[MOVE B,(T)]
|
||
JRST .+2
|
||
JRST INARK
|
||
MOVEI D,B
|
||
HLL D,POTVPT(A)
|
||
DPB C,D
|
||
XCTRI XW,[MOVEM B,(T)] ;STORE VAR IN USER MEM
|
||
JRST UPOTR
|
||
|
||
INARK: SETOM POTUSR(A) ;THIS POT A LOSER, FLUSH
|
||
SOS POTCON
|
||
SOS IMPXF
|
||
SOSGE IMXNTO
|
||
DATAO DSDEVN,[MPX]
|
||
JRST UPOTR ;RETURN FOR MORE POTS
|
||
|
||
UPOT4: HRREI C,-6(B) ;C_DELTA-6
|
||
IMULI C,3 ;C_DELTA*3-22
|
||
CAMLE C,B ;IF POT TURNED UP FAST
|
||
MOVEM C,B ;THEN BOOST INCREMENT
|
||
JRST UPOT6 ;RETURN TO STORE
|
||
|
||
UPOT5: HRREI C,6(B) ;C_DELTA+6
|
||
IMULI C,3 ;C_DELTA*3+22
|
||
CAMGE C,B ;IF POT TURNED DOWN FAST
|
||
MOVEM C,B ;THEN DECREASE DECREMENT
|
||
JRST UPOT6 ;RETURN TO STORE
|
||
|
||
PUFXA: HLRZ C,POTVAL(A) ;ABS ENTRY, USE DIRECT VALUE
|
||
PUFXI: MUL C,POTSCL(A) ;INCR ENTRY, SCALE VALUE
|
||
ASHC C,25. ;200000,,=FULL WORD
|
||
ADD C,POTOFS(A) ;OFFSET VALUE
|
||
JRST (B) ;RETURN WITH USER FIELD VALUE
|
||
|
||
PUFLA: HLRZ C,POTVAL(A) ;ABS ENTRY FOR FLOAT PT
|
||
PUFLI: TLC C,232000 ;FLOAT POT VALUE
|
||
FAD C,C ;NORMALIZE
|
||
FMPR C,POTSCL(A) ;SCALE FLOATING VALUE
|
||
FADR C,POTOFS(A) ;ADD OFFSET
|
||
JRST (B) ;RETURN WITH NEW FLOATING VAR VALUE
|
||
|
||
UPOT3A: MOVE C,B ;FIRST TIME USE CURRENT VALUE
|
||
JRST UPOT3B
|
||
|
||
|
||
NARK: SETOM POTUSR(B) ;TURN OFF AND FREE POT CHANNEL
|
||
SOS POTCON ;DECREMENT # OF SLOTS IN USE
|
||
JRST IMXCL1 ;FLUSH THIS USE OF MPX AND MAYBE DEASSIGN MPXR
|
||
|
||
POTCLS: MOVEI A,NARK ;ON CLOSE FLUSH ALL ENTRIES FOR USER
|
||
POTCLA: MOVSI B,-NPOTCH ;SET UP TO TEST ALL ENTRIES FOR USER U
|
||
POTCL1: CAMN U,POTUSR(B) ;SKIP IF DIFFERENT USER
|
||
PUSHJ P,(A) ;FLUSH IT MAYBE
|
||
AOBJN B,POTCL1 ;TRY ALL SLOTS
|
||
POPJ P, ;DONE
|
||
|
||
EBLK
|
||
POTUSR: REPEAT NPOTCH,-1 ;-1=FREE, 0=PROCESS, +=USER INDEX
|
||
POTBPT: BLOCK NPOTCH ;BYTE PTR INTO MPXBUF
|
||
POTVPT: BLOCK NPOTCH ;BYTE PTR INTO USER MEM INDEXED BY R
|
||
POTVAL: BLOCK NPOTCH ;DIRECT VALUE,,INCR VALUE
|
||
POTUPD: BLOCK NPOTCH ;ADDR OF ROUTINE TO COMPUTE NEW VALUE
|
||
POTSCL: BLOCK NPOTCH ;SCALE FACTOR FOR VARIABLE
|
||
POTOFS: BLOCK NPOTCH ;OFFSET FOR VARIABLE
|
||
MPXPT: REPEAT 3,301400-140000*.RPCNT,,MPXBUF ;POINTERS FOR 12 BIT MPX BYTES
|
||
UPUSR: 0 ;USER FOR WHOM RELOC SETUP AND NOT STOPPED
|
||
UPTPGT: BLOCK 8 ;SAVE MAP
|
||
|
||
POTCON: -1 ;<NUMBER OF POTS CONNECTED>-1
|
||
|
||
PTNOIS: 3 ;IGNORE ANY CHANGE < OR = THIS AS POT NOISE
|
||
]
|
||
|
||
SUBTTL 340 DISPLAY
|
||
|
||
IFN 340P,[
|
||
;
|
||
; DISPLAY INTERRUPT ROUTINE
|
||
;
|
||
DRECYC: 0
|
||
;
|
||
BBLK
|
||
;
|
||
MOVEM A,LPTA
|
||
MOVE A,DRECYC
|
||
MOVEM A,LPTBRK
|
||
MOVE A,[B,,LPTB]
|
||
BLT A,LPTB+17-B+1-1
|
||
JRST DRECY1
|
||
SRECYC: MOVE A,[B,,LPTB]
|
||
BLT A,LPTB+17-B+1-1
|
||
CONSZ DIS,2000
|
||
JRST DSLTPB ;LIGHT PEN BREAK
|
||
SKIPGE 340MD
|
||
JRST SRCYRB ;RANDOM BREAK
|
||
CONSZ DIS,5000
|
||
JRST SRCY4
|
||
DRECY1:
|
||
; DATAI 710,A
|
||
; SUB A,LQTIM
|
||
; CAIL A,32000./2
|
||
; JRST DISF2 ;MISSING CLOCK BREAK DUE TO DIS
|
||
HLRE A,DBLKOP
|
||
SKIPL A
|
||
TDZA A,A
|
||
MOVNS A
|
||
ADDB A,DWDS ;CREDIT BACK WDS NOT USED
|
||
JUMPL A,DISF2
|
||
HRRZS DBLKOP
|
||
SKIPE 340MD
|
||
JRST SRCY3 ;IDS OR DIS
|
||
SRCY1: HRRZ A,LDISP
|
||
JUMPE A,ENDLIS
|
||
JSP B,DPFTCH
|
||
JUMPL A,SRCY2A ;SINGLE BLKO PNTR
|
||
MOVEM A,LDISP ;LIST
|
||
HLRZS A
|
||
JUMPE A,SRCY5 ;THIS ENTRY NULL
|
||
JSP B,DPFTCH
|
||
SKIPGE LMODE
|
||
JRST SRCY1A ;DSTRT
|
||
SRCY1C: JUMPGE A,SRCY5
|
||
MOVEM A,LUBLKP ;SAVE FOR DEBUGGING
|
||
HLRO C,A
|
||
MOVNS D,C ;+ COUNT
|
||
LDB E,[1200,,A] ;WD WITHIN PG
|
||
ADD E,D
|
||
LSH E,-10.
|
||
AOS E
|
||
MOVE J,E ;SAVE # EXEC PGS REQD
|
||
SUBI E,N340PB
|
||
JUMPG E,SRCY2B ;CANT MAKE IT IN ONE WHACK
|
||
MOVN Q,E ;SAVE MAX ACCEPT STARTING EXEC PG #
|
||
HRLZS E
|
||
HRRZ C,A
|
||
CAIGE C,20
|
||
JRST DISLOS
|
||
ANDI C,776000 ;USER PG #
|
||
MOVNI R,1 ;BEST STARTING PLACE SO FAR
|
||
SRCY2D: CAMN C,340DA(E) ;LOOK FOR PG SET UP TO RIGHT USER PG
|
||
JRST SRCY2F ;FOUND ONE
|
||
SRCY2I: AOBJN E,SRCY2D
|
||
HRRZ E,R
|
||
JUMPGE R,SRCY2C ;PARTIALLY SET UP PLACE FOUND
|
||
AOS 340DP
|
||
CAML Q,340DP ;NONE AVAIL, IS RING PNTR IN ACCEPTABLE AREA?
|
||
SKIPA E,340DP ;YES
|
||
CLEARB E,340DP ;NO RESET
|
||
SRCY2C: MOVE R,DDAD(E)
|
||
LSH R,-10.
|
||
DPB R,[121000,,A] ;SWITCH BLKO PNTR TO EXEC MD PG
|
||
MOVEM A,LDBLKP
|
||
MOVEM A,DBLKOP
|
||
HLRES A ;FOR GROSS DISPLAY LISTS
|
||
ADDM A,DWDS ;APPROX TO WDS TO DISPLAY
|
||
IDIVI A,1000.
|
||
SOS A ;QUOTIENT MAY BE ZERO
|
||
MOVEM A,DISDIE
|
||
MOVNI A,EWRT
|
||
ADDM A,DWDS
|
||
ADDI E,2 ;OFFSET FOR POINTER PAGES
|
||
MOVEI A,0
|
||
SRCY2E: CAME C,A340P1(E) ;PG SET TO RIGHT ADR?
|
||
JRST SRCY2J ;NO SET UP
|
||
SRCY2K: ADDI C,2000
|
||
AOS E
|
||
SOJG J,SRCY2E ;SET UP ALL PGS IN BLOCK
|
||
CONSZ DIS,5400
|
||
CONO DIS,100\SDCHN_3\DISCHN
|
||
JRST SRCYCX
|
||
|
||
SRCY2J: JSP B,DDFTC
|
||
MOVEI B,-2(E)
|
||
MOVEM B,340DP
|
||
JRST SRCY2K
|
||
|
||
SRCY2B: JRST DISLOS ;TEMP
|
||
|
||
SRCY2F: MOVE D,J ;FIRST PAGE MATCHES, DO ENOUGH ADDITIONAL PAGES MATCH?
|
||
SOJLE D,SRCY2C ;ONLY ONE PAGE NEEDED. WINS
|
||
MOVEI TT,2000(C)
|
||
MOVEI R,1(E)
|
||
SRCY2H: CAME TT,340DA(R)
|
||
JRST SRCY2G ;NOT SET UP FOR WHOLE BLOCK
|
||
ADDI TT,2000
|
||
AOS R
|
||
SOJG D,SRCY2H
|
||
JRST SRCY2C ;SET UP FOR WHOLE BLOCK. WIN
|
||
|
||
SRCY2G: HRRZ R,E ;SAVE BEST SO FAR
|
||
JRST SRCY2I
|
||
DPFTCH: HRRZ C,A
|
||
CAIGE C,20
|
||
JRST DISLOS
|
||
TRZ C,1777
|
||
MOVSI E,-N340PB-2
|
||
DPFTC2: CAME C,A340P1(E) ;PG SET UP TO RIGHT ADR?
|
||
JRST DPFTC1 ;NO
|
||
TRZ A,776000 ;YES RETCH REL ADR
|
||
XCTRI [MOVE A,@DPAP(E)]
|
||
JRST (B) ;NO FAULT
|
||
JRST 4,. ;SHOULD HAVE BEEN VERIFIED WHEN LOADED
|
||
|
||
DPFTC1: AOBJN E,DPFTC2 ;LOOP ON ALL EXEC PNTR PAGES
|
||
MOVE E,340PP ;NONE SET UP SO SELECT ONE TO SET UP
|
||
AOS D,340PP ;INCR IT FOR NEXT TIME
|
||
CAILE D,1
|
||
CLEARM 340PP ;RESET
|
||
DDFTC: SPM DPBS ;ENTRY FOR DATA PGS STORE MAP
|
||
SKIPGE U,DISUSR
|
||
JRST 4,.
|
||
SKIPL CIRPSW
|
||
JRST DDFTC2 ;MAP MIGHT CHANGE
|
||
SKIPGE A340P1(E)
|
||
JRST DDFTC3
|
||
SETOM A340P1(E) ;WIPE OUT OLD ENTRY
|
||
LDB W,DPEP(E) ;PICK UP OLD PAGE
|
||
TRZN W,600000 ;NO ACCESS
|
||
JRST 4,.
|
||
ANDI W,PMRCM
|
||
CAIL W,TSYSM
|
||
JRST 4,.
|
||
MOVEI R,0
|
||
DPB R,DPEP(E)
|
||
SKIPGE DDEXCF+340P1(E)
|
||
JRST DDFTC3
|
||
LDB R,[MUR,,MEMBLT(W)]
|
||
CAIE R,MURUSR
|
||
JRST 4,.
|
||
MOVSI R,-1
|
||
ADDM R,MMSWP(W) ;REDUCE COUNT OF EXEC REFS
|
||
DDFTC3: MOVE W,C ;SET PAGE IN E TO PNT TO ADR IN C
|
||
LSH W,-10. ;GET USR PG #
|
||
ROT W,-1 ;GET WD # AND SAVE WHICH HALF IN SIGN
|
||
ADDI W,UPGMP(U)
|
||
HLRZ R,(W)
|
||
SKIPGE W
|
||
HRRZ R,(W) ;PICKS UP PAGE ENTRY
|
||
HLRZ T,UPGCP-UPGMP(W)
|
||
SKIPGE W
|
||
HRRZ T,UPGCP-UPGMP(W)
|
||
TRNN R,600000
|
||
JRST DDFTC1 ;NO ACCESS OR SWAPPED OUT
|
||
LDB Q,[PMRCAD,,R]
|
||
CAIN T,-1
|
||
JRST DDFTC4 ;ABS PG
|
||
CAILE Q,TSYSM
|
||
JRST 4,.
|
||
SKIPGE MEMBLT(Q)
|
||
JRST DDFTC2 ;CAN'T SET UP EXEC PG POINTING TO THIS ONE
|
||
LDB TT,[MUR,,MEMBLT(Q)]
|
||
CAIE TT,MURUSR
|
||
JRST 4,.
|
||
CLEARM DDEXCF+340P1(E)
|
||
MOVSI TT,1
|
||
ADDM TT,MMSWP(Q) ;AOS COUNT OF EXEC PGS
|
||
DDFTC5: MOVEM C,A340P1(E)
|
||
DPB R,DPEP(E) ;STORE USERS PG ENTRY IN EXEC MAP
|
||
LPMR DPBS ;RESET ASSOC REG
|
||
ANDI A,1777 ;FLUSH USER ADR EXCEPT WD IN PAGE
|
||
XCTRI [MOVE A,@DPAP(E)] ;REF PAGE TO MAKE SURE ITS THERE, ETC
|
||
JRST (B)
|
||
JRST 4,.
|
||
|
||
DDFTC4: SETOM DDEXCF+340P1(E) ;INDICATE PAGE POINTING TO ABS PAGE
|
||
JRST DDFTC5
|
||
|
||
DDFTC1: JUMPE R,DISLOS ;MAP COMPLETELY 0 MUST BE ILM
|
||
JUMPE T,DISLOS ;ILM
|
||
MOVEM U,DISSWI
|
||
LDB W,[121000,,C]
|
||
MOVEM W,DISSPG ;RQ PG IN
|
||
DDFTC2: MOVNI A,3 ;HANG FOR 3 60THS
|
||
JRST DISF2A
|
||
|
||
SRCY1A: JUMPGE A,SRCY1B
|
||
MOVEI A,-1(A)
|
||
SRCY1D: JSP B,DPFTCH
|
||
SOJA A,SRCY1C
|
||
|
||
SRCY1B: TLNN A,777000
|
||
JRST SRCY5
|
||
HLRZ A,LDISP
|
||
JRST SRCY1D
|
||
|
||
SRCY3: SOSGE DTIME
|
||
JRST DISF ;LIMIT REPETITION RATE
|
||
SKIPL NDSFMS ;SKIP ON FRAME HACK NOT ACTIVE
|
||
JSP B,ENDFM1 ;MAYBE STOP DISPLAY AFTER SPEC # OF FRAMES
|
||
MOVE A,IDBLKP
|
||
MOVEM A,DBLKOP
|
||
CONO DIS,100\SDCHN_3\DISCHN
|
||
SETOM DISDIE
|
||
JRST SRCYCX
|
||
|
||
SRCY4: CONO DIS,200\SDCHN_3\DISCHN ;EDGE GRONK DIS AND KEEP GOING
|
||
JRST SRCYCX
|
||
|
||
DISF2: MOVNI A,300.
|
||
DISF2A: MOVEM A,DTIME
|
||
SETOM DISON
|
||
JRST DISF3
|
||
|
||
DISF: SETOM DISON
|
||
DISF1: MOVEI A,1
|
||
MOVEM A,DTIME
|
||
DISF3: CONO DIS,100
|
||
DISF4: MOVEI A,DIS300-1
|
||
MOVEM A,DBLKOP
|
||
SRCYCX: MOVE A,[JSR DBLKPB]
|
||
SRCYB1: MOVEM A,40+2*DISCHN
|
||
SRCYB2: JRST LPTRT1
|
||
|
||
DIS300: 3000
|
||
3000
|
||
|
||
DCRSTP: SKIPE 340MD ;STOP DISPLAY FOR CORE SHUFFLING
|
||
POPJ P, ;BUFFER NOT IN USER CORE SO NO ACTION
|
||
DCRST1: SETOM CDISOF
|
||
CONO DIS,0
|
||
POPJ P,
|
||
|
||
DCRRST: SKIPE 340MD ;DISPLAY RESTART
|
||
POPJ P,
|
||
SKIPL DISOFF
|
||
CONO DIS,SDCHN_3+DISCHN
|
||
CLEARM CDISOF
|
||
POPJ P,
|
||
|
||
DSLTPB: DATAI DIS,LLTPSN
|
||
AOS LTPCNT
|
||
HRRZ A,LLTPSN
|
||
ADDM A,LTPCY
|
||
HLRZ A,LLTPSN
|
||
ADDM A,LTPCX
|
||
SKIPGE B,DISUSR
|
||
JRST 4,.
|
||
MOVEI A,%PILTP
|
||
AND A,MSKST(B)
|
||
IORM A,PIRQC(B)
|
||
CONO DIS,@LTPDCN
|
||
JRST SRCYCX
|
||
|
||
EBLK
|
||
|
||
DBLKP1: 0
|
||
DBLKPB: 0
|
||
|
||
BBLK
|
||
MOVEM A,DBLKP1
|
||
MOVE A,[BLKO DIS,DBLKOP]
|
||
MOVEM A,40+2*DISCHN
|
||
MOVE A,DBLKP1
|
||
JRST 12,@DBLKPB
|
||
|
||
SRCYRB: CONI DIS,A
|
||
SKIPGE A
|
||
CONO DIS,100 ;WOULD ASSIGN IF IDLE
|
||
MOVE A,[JSR DIGNOR]
|
||
JRST SRCYB1
|
||
|
||
EBLK
|
||
|
||
DIGNOR: 0
|
||
|
||
BBLK
|
||
CONO DIS,0
|
||
DATAO DSDEV,[DSNDIS]
|
||
JRST 12,@DIGNOR
|
||
|
||
ENDLIS: SETOM DISDIE
|
||
MOVE A,DROOT
|
||
MOVEM A,LDISP
|
||
SOSGE DTIME
|
||
JRST DISF ;LIMIT REPETION RATE
|
||
SKIPL NDSFMS
|
||
JSP B,ENDFM1 ;HACK FRAME HACK
|
||
CONO DIS,100\SDCHN_3\DISCHN
|
||
JRST SRCY1
|
||
|
||
ENDFM1: SKIPE NDSFMS ;STOP DISPLAY IF SPEC # OF FRAMES UP ELSE RETURN
|
||
SOSGE NDSFMS
|
||
JRST ENDFM2 ;STOP WORLD
|
||
JRST (B)
|
||
|
||
ENDFM2: SETOM DISOFF
|
||
JRST DISF1
|
||
|
||
SRCY5: MOVNI A,EWRT/2
|
||
ADDB A,DWDS
|
||
JUMPGE A,SRCY1
|
||
JRST DISF2
|
||
|
||
DISLOS: SKIPE 340MD
|
||
JRST 4,.
|
||
SKIPGE A,DISUSR
|
||
JRST 4,DISF2A
|
||
MOVEI B,%PIDIS
|
||
IORM B,PIRQC(A)
|
||
MOVSI A,(SETZ)
|
||
JRST DISF2A ;DIE FOR A LONG TIME
|
||
|
||
SRCY2A: SOSGE DTIME
|
||
JRST DISF
|
||
SKIPL NDSFMS
|
||
JSP B,ENDFM1
|
||
CONO DIS,100\SDCHN_3\DISCHN
|
||
JRST SRCY1C
|
||
|
||
|
||
SUBTTL 340 DISPLAY - .DSTART, .DSTRTL
|
||
|
||
DISACR: CAME U,DISUSR
|
||
POPJ P,
|
||
SKIPE 340MD ;COME HERE IF PAGE BEING FLUSHED + EXEC PAGE POINTING TO IT
|
||
JRST 4,. ;SHOULD NOT BE SET UP TO USER PAGE
|
||
CONO PI,UTCOFF
|
||
SETOM A340P1-340P1(T)
|
||
SKIPGE DDEXCF(T)
|
||
JRST DISAC1
|
||
ADDB J,MMSWP(TT)
|
||
SKIPGE J
|
||
JRST 4,.
|
||
DISAC1: SKIPGE DISOFF
|
||
JRST POPJ1
|
||
PUSH P,T
|
||
PUSHJ P,DISZAP
|
||
POP P,T
|
||
JRST POPJ1
|
||
|
||
;ROUTINES TO START 340 DISPLAY WITH DIS BUFF IN USERS CORE
|
||
ADSTART: TDZA E,E ;CALL 10,
|
||
ADSTL: MOVNI E,1 ;CALL 12,
|
||
MOVEI A,0
|
||
PUSHJ P,ADSDV
|
||
POPJ P,
|
||
SETOM DISOFF
|
||
CONO DIS,0
|
||
CLEARM 340MD
|
||
MOVEM E,LMODE
|
||
HRRZ C,40
|
||
MOVEM C,DROOT
|
||
MOVEM C,LDISP
|
||
SETZM DISOFF
|
||
PUSHJ P,DISZAP
|
||
JRST CLKOJ1
|
||
|
||
ANDIS: CAME U,DISUSR
|
||
POPJ P,
|
||
UMOVE A,(J)
|
||
JUMPL A,ANDIT1 ;WAIT FOR COMPLETION OF LAST NDIS
|
||
JUMPE A,ANDIT2 ;RETURN COUNT LEFT FROM LAST NDIS
|
||
MOVEM A,NDSFMS ;DISPLAY N TIMES AND THEN STOP
|
||
SKIPL DISOFF
|
||
JRST POPJ1
|
||
SETOM DISDIE
|
||
CLEARM DISOFF
|
||
PUSHJ P,DISZAP
|
||
JRST POPJ1
|
||
|
||
ANDIT1: SKIPL DISOFF
|
||
PUSHJ P,UFLS
|
||
POPJ P,
|
||
|
||
ANDIT2: MOVE A,NDSFMS
|
||
JRST APTUAJ
|
||
|
||
SUBTTL 340 DISPLAY - .DSTOP, .DCLOSE, .LTPEN
|
||
ADSTOP: CAMN U,DISUSR ;OPER 16
|
||
SKIPGE DISOFF
|
||
POPJ P,
|
||
ADCLB: PUSH P,B
|
||
PUSH P,C
|
||
MOVSI C,-1
|
||
SETOM DISOFF
|
||
SETZM DBLINK
|
||
CONO DIS,0
|
||
MOVEI A,1
|
||
MOVEM A,DTIME
|
||
SETZM DISON
|
||
SETOM DISDIE
|
||
CONO PI,UTCOFF
|
||
MOVSI A,-N340CL
|
||
ADCLB1: SETOM A340P1(A)
|
||
LDB B,DPEP(A)
|
||
ANDI B,600000+PMRCM
|
||
SKIPGE DDEXCF+340P1(A)
|
||
JRST ADCLB2 ;POINTING TO EXEC PG
|
||
TRZE B,600000
|
||
ADDM C,MMSWP(B)
|
||
ADCLB2: AOBJN A,ADCLB1
|
||
CLEARM 340PP
|
||
CLEARM 340DP
|
||
CLEARM EXEUMP+.340P1
|
||
REPEAT N340PB/2,CLEARM EXEUMP+.DPG0+.RPCNT
|
||
MOVE A,[JSR DIGNOR]
|
||
MOVEM A,40+2*DISCHN
|
||
CONO PI,UTCON
|
||
POP P,C
|
||
JRST POPBJ
|
||
|
||
ADCL1: SOSE DISNTO
|
||
POPJ P,
|
||
JRST AIDS7
|
||
|
||
ADCLOSE: CAME U,DISUSR ;OPER 15
|
||
POPJ P,
|
||
SKIPLE 340MD
|
||
JRST AIDS8
|
||
AIDS7: PUSHJ P,ADCLB
|
||
PUSHJ P,ADCL2
|
||
JFCL
|
||
AIDS9: SETOM 340MD
|
||
SETOM DISUSR
|
||
DATAO DSDEV,[DSNDIS] ;DEASSIGN DIS
|
||
POPJ P,
|
||
|
||
AIDS8: MOVE A,U ;FLUSH CHNLS IN CASE OF .DCLOSE FROM DIS OR IDS
|
||
PUSHJ P,CHSCAA
|
||
PUSHJ P,ADSDV4
|
||
JRST AIDS7
|
||
|
||
ALTPEN: MOVE C,B
|
||
CAME U,DISUSR ;CALL 14,
|
||
JRST ALTPP2
|
||
XCTR XR,[SKIPL A,(C)]
|
||
JRST ALTPP1
|
||
TLNN A,377777
|
||
JRST .+3
|
||
SKIPN LTPCNT
|
||
PUSHJ P,UFLS
|
||
ALTPP1: CONO PI,LPTOFF ;INHIBITS LPEN BREAKS
|
||
MOVE A,LDISP
|
||
XCTRI XW,[MOVEM A,4(C)]
|
||
SKIPA A,DBLKOP
|
||
JRST ALTPPL
|
||
TRZ A,400000
|
||
LDB B,[121000,,A]
|
||
LDB B,[121000,,A340P1-340P1(B)]
|
||
DPB B,[121000,,A]
|
||
XCTRI XW,[MOVEM A,5(C)]
|
||
SKIPA B,C
|
||
JRST ALTPPL
|
||
HRLI B,LLTPSN
|
||
XCTRI XBW,[BLT B,3(C)]
|
||
JRST .+2
|
||
JRST ALTPPL
|
||
SETZB A,LTPCNT
|
||
MOVEM A,LTPCY
|
||
MOVEM A,LTPCX
|
||
JRST LPTONJ
|
||
|
||
ALTPP2: XCTR XW,[SETZM (C)]
|
||
XCTR XW,[SETZM 1(C)]
|
||
POPJ P,
|
||
|
||
ALTPPL: CONO PI,LPTON
|
||
PUSHJ P,TPFLT
|
||
JRST ALTPEN
|
||
|
||
SUBTTL 340 DISPLAY
|
||
|
||
ADSDV: ;A HAS NEW 340MD
|
||
CONO PI,CLKOFF
|
||
CONI DIS,T ;DIS AVAILABLE
|
||
JUMPN T,ADSDV1 ;YES
|
||
CONO DIS,0
|
||
CONI DIS,T
|
||
JUMPE T,ADSDVN ;DIS NOT AVAIABLE
|
||
ADSDV1: SKIPL T,DISUSR
|
||
CAMN U,DISUSR
|
||
JRST ADSDVY ;YES
|
||
CAME U,UMASTER
|
||
JRST ADSDVM ;MAYBE
|
||
ADSDV2: SKIPGE A,DISUSR ;TAKE AWAY DISPLAY
|
||
JRST ADSDV3
|
||
PUSHJ P,RPCCK
|
||
ADSDV7: SKIPL DISUSR
|
||
SKIPG 340MD
|
||
JRST ADSDV3
|
||
PUSH P,R
|
||
PUSHJ P,CHSCAA ;CHANGE 340 CHANNELS TO NUL DEV
|
||
PUSHJ P,ADSDV4
|
||
POP P,R
|
||
SETZM DISNTO
|
||
ADSDV3: MOVE A,340MD
|
||
ADSDVY: SETZM DBLINK
|
||
SETOM NDSFMS ;TURN OFF FRAMER HACK
|
||
CAME A,340MD
|
||
JUMPE A,ADSDV5 ;SAME USER CLOBBERING HIS IDS OR DIS
|
||
ADSDV6: PUSHJ P,ADCLB
|
||
MOVEM U,DISUSR
|
||
ADCL2: SKIPGE A,340BF
|
||
JRST CLKOJ1
|
||
LSH A,-10.
|
||
PUSHJ P,MEMR
|
||
SETOM 340BF
|
||
JRST CLKOJ1
|
||
|
||
ADSDV4: HRRZ Q,(R)
|
||
CAIG Q,DN340L
|
||
CAIGE Q,DN340B
|
||
POPJ P, ;NOT A 340 CH
|
||
CAIL Q,DN340C
|
||
SKIPA T,[NLODN] ;UNIT MODE
|
||
MOVEI T,NLBDN ;BLOCK MODE
|
||
SOS DISNTO
|
||
HRRM T,(R)
|
||
POPJ P,
|
||
|
||
ADSDV5: SKIPGE 340MD
|
||
JRST ADSDV6
|
||
MOVE A,DISUSR
|
||
JRST ADSDV7
|
||
|
||
ADSDVM: CAMN T,UMASTER
|
||
JRST ADSDVN ;CURRENT USER UMASTER
|
||
MOVE T,UTMPTR(U)
|
||
MOVE T,TTYTYP-USRRCE(T) ;GET BITS FOR NEW GUY IN LH OF T
|
||
HRR T,DISUSR
|
||
HRR T,UTMPTR(T)
|
||
HLR T,TTYTYP-USRRCE(T)
|
||
TRNE T,%TT3HP
|
||
JRST ADSEQ1 ;CURRENT USER HAS HIGH PRIORITY
|
||
TRNE T,%TT340
|
||
JRST ADSEQ2 ;CURRENT USER NEAR 340
|
||
TLNN T,%TT340+%TT3HP ;GIVE TO NEW GUY IF HE IS EITHER
|
||
JRST ADSEQ
|
||
ADSWIN: JRST ADSDV2
|
||
|
||
ADSEQ1: TLNN T,%TT3HP
|
||
JRST ADSDVN ;NO
|
||
ADSEQ: SKIPL TTYTBL(U) ;MAYBE
|
||
JRST ADSWIN
|
||
ADSDVN: JRST CLKONJ
|
||
|
||
ADSEQ2: TLNE T,%TT3HP
|
||
JRST ADSWIN
|
||
TLNN T,%TT340
|
||
JRST ADSDVN
|
||
JRST ADSEQ
|
||
|
||
SUBTTL 340 DISPLAY AS ASCII DEVICE
|
||
|
||
DISO: PUSHJ P,AIDS1
|
||
JRST OPNL10 ;NOT AVAILABLE
|
||
AOS DISNTO
|
||
SETOM 340DMD
|
||
LDB B,[20200,,D]
|
||
AOS B
|
||
LSH B,4
|
||
MOVEM B,CSCALE
|
||
LDB TT,[40200,,CSCALE]
|
||
MOVNS TT
|
||
MOVEI T,170.
|
||
LSH T,(TT)
|
||
TRZ T,7
|
||
MOVEM T,DISCHS ;CHARS THAT WILL FIT THIS SIZE
|
||
MOVEI T,88.
|
||
LSH T,(TT)
|
||
MOVEM T,DISLNL ;LINES THAT WILL FIT
|
||
PUSHJ P,DSIZAP
|
||
MOVSI T,-1777
|
||
HRR T,340BF
|
||
SOS T
|
||
MOVEM T,IDBLKP
|
||
SETZM DISOFF
|
||
PUSHJ P,DISZAP
|
||
SETOM 340T
|
||
JSP Q,OPSLD3
|
||
DN340C,,DN340B
|
||
DN340H,,DN340W
|
||
|
||
340FF: SKIPL 340T
|
||
JRST 340FF1
|
||
MOVE A,TIME
|
||
MOVEM A,340T
|
||
340FF1: MOVE T,340T
|
||
ADDI T,30.*3
|
||
CAML T,TIME
|
||
PUSHJ P,UFLS
|
||
SETOM 340T
|
||
PUSHJ P,ADCLB
|
||
PUSHJ P,DSIZAP
|
||
JRST DISZAP
|
||
|
||
DSIZAP: SETZM DBLOAT
|
||
SETZM 340XMD
|
||
SETZM DBLINK
|
||
MOVE T,340BF
|
||
MOVEI A,34117
|
||
IOR A,CSCALE
|
||
MOVEM A,(T)
|
||
PUSH T,[221700060000]
|
||
HRLI T,0600
|
||
MOVEM T,340BFP
|
||
MOVE A,[403737403737]
|
||
MOVEI B,1(T)
|
||
HRLS B
|
||
AOS B
|
||
MOVEM A,1(T)
|
||
BLT B,1775(T)
|
||
MOVE A,DISLNL
|
||
MOVEM A,DISLNS
|
||
MOVE A,DISCHS
|
||
MOVNM A,DISCHC
|
||
MOVEI T,(HRRZ I,(A))
|
||
HRLM T,AIDC1
|
||
POPJ P,
|
||
|
||
|
||
340B: MOVEI E,340D
|
||
JRST NBTOCH
|
||
|
||
340C: SKIPGE C
|
||
SKIPA A,(C)
|
||
UMOVE A,(C)
|
||
ANDI A,177
|
||
340D: CAIN A,^C
|
||
POPJ P,
|
||
CAIN A,^L
|
||
JRST 340FF
|
||
CAIN A,^T
|
||
JRST DSIZAP
|
||
SKIPE DISLNS
|
||
SKIPGE DBLOAT
|
||
POPJ P,
|
||
CAIN A,^B
|
||
JRST BLNKON
|
||
CAIN A,^E
|
||
JRST BLNKOF
|
||
SKIPE 340XMD
|
||
PUSHJ P,340D1 ;ENTER CHR MOD INF NOT ALREADY
|
||
340E: EBLK
|
||
AIDC1: HRRZ\HLRZ I,DISTBL(A)
|
||
BBLK
|
||
TRNN I,-100
|
||
JRST 340FC ;NORMAL CHR
|
||
TRNN I,-200
|
||
JRST 340K ;FAKE OUT 340 NON-SPACING CHRS
|
||
PUSHJ P,(I) ;ROUTINE DISPATCH (MAY SKIP OR SKIP TWICE)
|
||
JRST 340E ;WRONG CASE OR SOMETHING, TRY AGAIN
|
||
340F: IDPB I,340BFP
|
||
340F2: MOVE J,340BFP
|
||
ANDI J,1777
|
||
CAIL J,1776
|
||
SETOM DBLOAT
|
||
POPJ P,
|
||
|
||
340FC1: SKIPL DISCHC ;DISPLAY IF COUNT NOT OUT BUT DONT INCR COUNT
|
||
340FC: AOSG DISCHC ;INCR COUNT + DISPLAY IF NOT OUT
|
||
JRST 340F
|
||
JRST 340F2
|
||
|
||
340HD1: SKIPN 340XMD ;ESCAPE TO PARAM MODE
|
||
PUSHJ P,340H1
|
||
340D1: MOVEI I,74117 ;PARAM WD
|
||
IOR I,CSCALE
|
||
PUSHJ P,340F ;STORE PARAM WD
|
||
MOVEI I,6
|
||
DPB I,[300600,,340BFP] ;SWITCH TO CHR MODE
|
||
SETZM 340XMD
|
||
POPJ P,
|
||
|
||
340K: MOVEI I,40 ;SPACE TO MAKE SPACING
|
||
PUSHJ P,340FC1
|
||
XCT AIDC1 ;GET NON-SPACING LETTER AND DISPLAY
|
||
JRST 340FC
|
||
|
||
340W: JSP Q,WRDBT
|
||
XCTR XRW,[MOVSS (C)]
|
||
PUSHJ P,340H
|
||
XCTR XRW,[MOVSS (C)]
|
||
340H: SKIPGE DBLOAT
|
||
POPJ P,
|
||
SKIPN 340XMD
|
||
PUSHJ P,340H1 ;ENTER HALF WD MODE IF NOT ALREADY
|
||
UMOVE I,(C) ;PICK UP LOSERS HALF WD
|
||
JRST 340F
|
||
|
||
340H1: MOVEI I,37 ;IN CHR MODE, EXCAPE
|
||
PUSHJ P,340F
|
||
LDB I,[360600,,340BFP]
|
||
JUMPE I,340H2
|
||
CAIE I,22
|
||
JRST 340H1
|
||
340H2: MOVEI A,22
|
||
DPB A,[300600,,340BFP]
|
||
SETOM 340XMD
|
||
POPJ P,
|
||
|
||
BLNKON: MOVE A,DBLINK
|
||
CAIL A,DBLNKN
|
||
POPJ P,
|
||
PUSHJ P,340HD1
|
||
MOVE B,340BFP
|
||
AND B,[770060,,1777] ;ADR OF PARAM WD TO BLINK INTEN OF
|
||
TLO B,300+B
|
||
MOVE A,DBLINK
|
||
MOVEM B,DBLNKB(A)
|
||
AOS DBLINK
|
||
MOVEI T,15.
|
||
PUSHJ P,CLQADD
|
||
BLINKB
|
||
JRST 340F2
|
||
|
||
BLNKOF: PUSHJ P,340HD1
|
||
JRST 340F2
|
||
|
||
BLNKBR: SKIPN A,DBLINK
|
||
JRST CLQRET ;BLINKING TURNED OFF
|
||
SKIPL B,340BF
|
||
SKIPGE CDISOFF
|
||
JRST BLNKB3
|
||
MOVE C,DBLNKF
|
||
BLNKB2: DPB C,DBLNKB-1(A)
|
||
SOJG A,BLNKB2
|
||
SETCMM DBLNKF ;COMPLEMENT FLAG
|
||
BLNKB3: MOVEI T,15. ;1/4 SEC
|
||
MOVEI C,BLINKB
|
||
JRST CLQREE
|
||
|
||
SUBTTL 340 DISPLAY
|
||
|
||
AIDS1: MOVEI A,2
|
||
PUSHJ P,ADSDV ;DETERMINE IF THIS LOSER SHOULD GET DISPLAY
|
||
POPJ P,
|
||
AIDS3: PUSHJ P,TCALL
|
||
JRST IOMQ
|
||
JRST AIDS2 ;NO MEM AVAIL
|
||
MOVEI B,MUDISB
|
||
MOVE T,A
|
||
LSH T,10.
|
||
MOVEM T,340BF
|
||
DPB B,[MUR,,MEMBLT(A)]
|
||
MOVEI B,2
|
||
MOVEM B,340MD
|
||
JRST POPJ1
|
||
|
||
AIDS2: SKIPG MEMFR
|
||
JRST AIDS9
|
||
PUSHJ P,LOSSET
|
||
AIDS9
|
||
PUSHJ P,UDELAY
|
||
PUSHJ P,LSWDEL
|
||
JRST AIDS3
|
||
|
||
IFN 0,[
|
||
;INTERPRETIVE DISPLAY COMPILER
|
||
|
||
IDISO: PUSHJ P,AIDS1
|
||
JRST OPNL10 ;NOT AVAIL
|
||
AOS DISNTO
|
||
SETZM 340DMD
|
||
SETOM AISWS
|
||
HRLI T,442200
|
||
MOVEM T,340BFP
|
||
MOVEI Q,10135 ;TURN OFF LP SCALE 1 INT 5
|
||
IDPB Q,340BFP
|
||
MOVEI T,1_4
|
||
MOVEM T,CSCALE
|
||
MOVEM T,VSCALE
|
||
MOVEM T,ISCALE
|
||
MOVSI A,(MOVE) ;DONT HACK CHR'S PER LINE
|
||
MOVEM A,DISCHS
|
||
MOVNM A,DISCHC
|
||
CONO DIS,500
|
||
MOVEI A,DN340I
|
||
JRST OPNSLT
|
||
|
||
|
||
340I: MOVEM C,AIDPCP
|
||
UMOVE C,(C)
|
||
|
||
AIDL: UMOVE R,(C)
|
||
AIDL2: TRNE R,1
|
||
JRST AIDL1 ;NOT CHR MODE
|
||
MOVEI Q,(HRRZ I,(A))
|
||
HRLM Q,AIDC1
|
||
MOVE Q,CSCALE
|
||
IORI Q,60100
|
||
PUSHJ P,AIDPY
|
||
MOVE J,[220600,,Q]
|
||
AIDCL: MOVE B,[440700,,R]
|
||
AIDC3: ILDB A,B
|
||
EBLK
|
||
AIDC1: HRRZ\HLRZ I,DISTBL(A)
|
||
BBLK
|
||
TRNN I,-100
|
||
JRST AIDC5
|
||
TRNN I,-200
|
||
JRST AIDC7
|
||
PUSHJ P,(I)
|
||
JRST AIDC1
|
||
AIDC5: IDPB I,J
|
||
TLNN J,770000
|
||
PUSHJ P,AIDC2
|
||
TLNE B,760000
|
||
JRST AIDC3
|
||
AOS C
|
||
UMOVE R,(C)
|
||
MOVE I,UEXIT
|
||
CAMN I,[JRST ONEFLS]
|
||
JRST AIDC6
|
||
TRNN R,1
|
||
JRST AIDCL
|
||
AIDC6: MOVEI I,37
|
||
IDPB I,J
|
||
TLNE J,770000
|
||
JRST .-2
|
||
PUSHJ P,AIDC2
|
||
|
||
AIDL1: MOVE B,UEXIT
|
||
CAMN B,[JRST ONEFLS]
|
||
JRST AIDI
|
||
LDB B,[30300,,R]
|
||
AOJA C,@AIDTB(B)
|
||
|
||
AIDC7: MOVEI I,40
|
||
PUSHJ P,AIDC4
|
||
XCT AIDC1
|
||
JRST AIDC5
|
||
|
||
AIDI: MOVE R,AIDPCP
|
||
UMOVEM C,(R)
|
||
SOS UUOH
|
||
JRST UUOE1
|
||
|
||
AIDTB: AIER1
|
||
AIPT
|
||
AIVC
|
||
AIINC
|
||
AIOP
|
||
AIVC
|
||
REPEAT 2,AIER1
|
||
|
||
AIPT: LDB I,[251600,,R] ;PICK UP Y
|
||
SUB I,DWDB
|
||
MOVEI TT,220000
|
||
DPB I,[1200,,TT]
|
||
LSH I,-10.
|
||
ANDI I,17
|
||
MOVEM I,YFLD
|
||
LDB I,[61600,,R] ;X
|
||
SUB I,DWDL
|
||
MOVEI E,0
|
||
TRNE R,2
|
||
TRO E,2000 ;INTENSIFY
|
||
DPB I,[1200,,E]
|
||
LSH I,-10.
|
||
ANDI I,17
|
||
MOVEM I,XFLD
|
||
MOVEI Q,20000
|
||
PUSHJ P,AIDPY
|
||
MOVE Q,TT
|
||
PUSHJ P,AIDPY
|
||
MOVE Q,E
|
||
PUSHJ P,AIDPY
|
||
JRST AIDL
|
||
|
||
AIDC4C: SKIPL DISCHC
|
||
POPJ P,
|
||
JRST AIDC4
|
||
]
|
||
AIDC4B: AOSLE DISCHC
|
||
POPJ P,
|
||
AIDC4:
|
||
IFN 0,[
|
||
SKIPGE 340DMD
|
||
JRST AIDC4A ;DIS
|
||
IDPB I,J
|
||
TLNE J,770000
|
||
POPJ P,
|
||
AIDC2: PUSHJ P,AIDPY
|
||
MOVEI Q,0
|
||
MOVE J,[220600,,Q]
|
||
POPJ P,
|
||
]
|
||
AIDC4A: IDPB I,340BFP
|
||
POPJ P,
|
||
IFN 0,[
|
||
AIDPY: HRLS Q
|
||
DATAI DIS,AIDPIC
|
||
DATAO DIS,Q
|
||
AIDP1: MOVEI H,50
|
||
AIDP1A: CONSZ DIS,DVEF+DHEF ;EDGE FLAGS
|
||
JRST DEGFS
|
||
CONSO DIS,200
|
||
SOJG H,AIDP1A
|
||
JUMPE H,AIER2
|
||
CONSZ DIS,DVEF+DHEF
|
||
JRST DEGFS
|
||
SKIPN XFLD
|
||
SKIPE YFLD
|
||
JRST AIDP2
|
||
DEG4B: HRRZ H,340BFP
|
||
SUB H,340BF
|
||
CAIL H,1777
|
||
JRST AIER3
|
||
IDPB Q,340BFP
|
||
AIDP2: MOVEI Q,0
|
||
POPJ P,
|
||
|
||
DEGFS: DATAI DIS,DEGVCC
|
||
CONI DIS,H
|
||
LSH H,-15.
|
||
ANDI H,7
|
||
CAIN H,4 ;VECTOR
|
||
JRST DEGVC
|
||
SKIPN XFLD
|
||
SKIPE YFLD
|
||
JRST DEG5A
|
||
MOVEI Q,400000
|
||
CAIN H,3
|
||
MOVEI Q,373737
|
||
PUSH P,H
|
||
PUSHJ P,DEG4B ;LEAVING INSERT APPROPRIATE ESCAPE INSTEAD
|
||
POP P,H
|
||
DEG5A: CONO DIS,200
|
||
MOVEI TT,50.
|
||
CONSO DIS,DVEF+DHEF+200
|
||
SOJG TT,.-1
|
||
JUMPE TT,AIER2
|
||
CONSO DIS,200
|
||
JRST DEG5A ;RIDE OUT TO FINAL EDGE
|
||
DATAI DIS,TT
|
||
XOR TT,AIDPIC
|
||
TRNN TT,1000
|
||
JRST DEG5B
|
||
HRR TT,AIDPIC
|
||
TRNE TT,1000
|
||
AOS XFLD
|
||
TRNN TT,1000
|
||
SOS XFLD
|
||
DEG5B: TLNN TT,1000
|
||
JRST DEG4
|
||
HLL TT,AIDPIC
|
||
TLNN TT,1000
|
||
SOS YFLD
|
||
TLNE TT,1000
|
||
AOS YFLD
|
||
JRST DEG4
|
||
|
||
DEG5: MOVE TT,DEGVCC
|
||
CONSZ DIS,DVEF
|
||
JRST DEG1
|
||
DEG3: CONSO DIS,DHEF
|
||
JRST DEG4
|
||
TRNE TT,1000
|
||
SOS XFLD
|
||
TRNN TT,1000
|
||
AOS XFLD
|
||
DEG4: MOVEI TT,0
|
||
DPB TT,[44000,,XFLD]
|
||
DPB TT,[44000,,YFLD]
|
||
CONSO DIS,200
|
||
CONO DIS,200 ;CONTINUE
|
||
MOVEI TT,100.
|
||
CONSO DIS,200+DVEF+DHEF
|
||
SOJG TT,.-1
|
||
JUMPE TT,AIER2
|
||
SKIPN XFLD
|
||
SKIPE YFLD
|
||
JRST AIDP1 ;NOT COMING ON
|
||
DEG4F: DATAI DIS,TT
|
||
CAIN H,4
|
||
MOVE TT,DEGVCC
|
||
PUSH P,Q ;COMING ON PRODUCE SETPOINT
|
||
PUSH P,H
|
||
MOVEI Q,20100
|
||
IOR Q,@DEGSCT(H)
|
||
PUSHJ P,DEG4B
|
||
HLRZ Q,TT
|
||
IORI Q,220000
|
||
PUSHJ P,DEG4B
|
||
HRRZ Q,TT
|
||
CONI DIS,H
|
||
LSH H,-15.
|
||
DPB H,[150300,,Q]
|
||
MOVE TT,(P)
|
||
CAIN TT,4
|
||
JRST DEGVC1
|
||
DEG4D: SUB P,[2,,2]
|
||
JRST AIDP1
|
||
|
||
DEGSCT: [0]
|
||
[0]
|
||
[0]
|
||
CSCALE
|
||
VSCALE
|
||
VSCALE
|
||
ISCALE
|
||
[0]
|
||
|
||
DEG1: TLNE TT,1000
|
||
SOS YFLD
|
||
TLNN TT,1000
|
||
AOS YFLD
|
||
JRST DEG3
|
||
|
||
DEGVC: SETOM DEGVCF
|
||
SKIPN XFLD
|
||
SKIPE YFLD
|
||
JRST DEG5 ;NOT GOING OFF
|
||
CLEARM DEGVCF
|
||
HRRZ A,AIDPIC
|
||
HLRZ B,AIDPIC
|
||
PUSHJ P,DEG4C
|
||
CONSZ DIS,DVEF
|
||
SUBI B,2
|
||
CONSZ DIS,DHEF
|
||
SUBI A,2
|
||
SKIPGE A
|
||
MOVEI A,0
|
||
SKIPGE B
|
||
MOVEI B,0
|
||
DPB B,[100700,,Q]
|
||
DPB A,[700,,Q]
|
||
TRO Q,400000
|
||
PUSHJ P,DEG4B
|
||
JRST DEG5
|
||
|
||
DEGVC1: SKIPN XFLD
|
||
SKIPE YFLD
|
||
SKIPLE DEGVCF
|
||
JRST .+2
|
||
JRST DEG4D ;VECTOR TOTALLY OUT OF IT
|
||
IORI Q,100000
|
||
PUSHJ P,DEG4B
|
||
POP P,H
|
||
POP P,Q
|
||
DATAI DIS,A
|
||
HLRZ B,A
|
||
HRRZS A
|
||
PUSHJ P,DEG4C
|
||
DPB B,[100700,,Q]
|
||
DPB A,[700,,Q]
|
||
MOVE A,DEGVCC
|
||
MOVEM A,AIDPIC
|
||
JRST AIDP1
|
||
|
||
DEG4C: HRRZ I,DEGVCC
|
||
SUB A,I
|
||
HLRZ I,DEGVCC
|
||
SUB B,I
|
||
MOVMS A
|
||
MOVMS B
|
||
CAIGE A,1000
|
||
JRST .+3
|
||
MOVNS A
|
||
ADDI A,2000
|
||
CAIGE B,1000
|
||
JRST .+3
|
||
MOVNS B
|
||
ADDI B,2000
|
||
LDB I,[40200,,VSCALE]
|
||
MOVNS I
|
||
ASH A,(I) ;GET X INC IN A
|
||
ASH B,(I) ;Y IN B
|
||
POPJ P,
|
||
|
||
AIINC: MOVE Q,ISCALE
|
||
IORI Q,140100
|
||
PUSHJ P,AIDPY
|
||
SETOM DDINCI
|
||
MOVEI Q,0
|
||
MOVE B,[200400,,Q]
|
||
AIIN1: MOVE D,[440600,,R]
|
||
AIIN8: ILDB T,D
|
||
LDB E,[200,,T] ;LOAD COUNT
|
||
JUMPE E,AIIN5 ;NULL INCREMENT
|
||
AIIN7: TRNN T,4 ;SKIP ON INTENSIFY
|
||
JRST AIIN2
|
||
SKIPG DDINCI ;SKIP ON SET TO INTENSIFY
|
||
JRST AIIN3
|
||
|
||
AIIN7A: LDB H,[30300,,T]
|
||
MOVE H,DINCT(H)
|
||
IDPB H,B
|
||
PUSHJ P,AIIN6 ;MAYBE START NEW WORD
|
||
SOJG E,AIIN7
|
||
|
||
AIIN5: TLNE D,700000
|
||
JRST AIIN8
|
||
UMOVE R,(C)
|
||
LDB H,[30300,,R]
|
||
TRNE R,1
|
||
CAIE H,3 ;INC MODE
|
||
TROA Q,400000
|
||
AOJA C,AIIN1
|
||
PUSHJ P,AIIN6A
|
||
JRST AIDL2
|
||
|
||
AIIN6: TLNE B,770000
|
||
POPJ P,
|
||
|
||
AIIN6A: PUSHJ P,AIDPY
|
||
MOVEI Q,0
|
||
SETOM DDINCI
|
||
MOVE B,[200400,,Q]
|
||
POPJ P,
|
||
|
||
AIIN2: SKIPN DDINCI
|
||
JRST AIIN7A ;INTENSITY AGREES
|
||
AIIN3: SKIPL DDINCI
|
||
PUSHJ P,AIIN6A
|
||
HRRZM P,DDINCI
|
||
TRNE T,4
|
||
TROA Q,200000
|
||
CLEARM DDINCI
|
||
JRST AIIN7
|
||
|
||
AIVC: MOVE Q,VSCALE
|
||
IORI Q,100100
|
||
LDB A,[251700,,R] ;DY
|
||
LDB B,[61700,,R] ;DX
|
||
TRNE A,40000
|
||
ORCMI A,77777
|
||
TRNE B,40000
|
||
ORCMI B,77777
|
||
MOVM E,A
|
||
MOVM TT,B
|
||
MOVE H,VSCALE
|
||
LSH H,-4
|
||
ANDI H,3
|
||
MOVNS H
|
||
LSH E,(H)
|
||
LSH TT,(H)
|
||
JUMPN E,.+2
|
||
JUMPE TT,AIDL
|
||
PUSHJ P,AIDPY
|
||
AIVCL: MOVE H,E
|
||
MOVE J,TT
|
||
AIVC3: CAIG J,177
|
||
CAILE H,177
|
||
JRST AIVC2
|
||
SUB E,H
|
||
DPB H,[100700,,Q]
|
||
SKIPGE A
|
||
TRO Q,1_<8+7>
|
||
SUB TT,J
|
||
DPB J,[700,,Q]
|
||
SKIPGE B
|
||
TRO Q,1_7
|
||
TRNE R,1_1
|
||
TRO Q,200000
|
||
JUMPN E,.+3
|
||
JUMPN TT,.+2
|
||
TRO Q,400000
|
||
PUSH P,A
|
||
PUSH P,B
|
||
PUSH P,E
|
||
PUSH P,TT
|
||
PUSHJ P,AIDPY
|
||
POP P,TT
|
||
POP P,E
|
||
POP P,B
|
||
POP P,A
|
||
JUMPN E,AIVCL
|
||
JUMPN TT,AIVCL
|
||
JRST AIDL
|
||
|
||
AIVC2: LSH J,-1
|
||
LSH H,-1
|
||
JRST AIVC3
|
||
|
||
AIOP: LDB B,[60300,,R]
|
||
JRST @AIOPT(B)
|
||
|
||
AIOPT: AIER5
|
||
AIPSJ
|
||
AIPPJ
|
||
AIJMP
|
||
AIPSH
|
||
AIIPOP ;5
|
||
AIPS
|
||
AIER5
|
||
AIER5
|
||
|
||
AIPSJ: XCTR XRW,[AOS D,43] ;PICK UP PDL PNTR AND INCR
|
||
XCTR XRW,[MOVEM C,(D)] ;STORE RETURN PC
|
||
AIJMP: HLRZ C,R
|
||
JRST AIDL
|
||
|
||
AIPPJ: UMOVE D,43
|
||
XCTR XRW,[HRRZ C,(D)]
|
||
JUMPE C,AIEXT ;POPJ INTO 0 START SIGNAL
|
||
XCTR XRW,[SOS 43]
|
||
JRST AIDL
|
||
|
||
AIEXT: SKIPL AISWS
|
||
JRST AIDST3
|
||
AIDST: MOVEI Q,3000
|
||
PUSHJ P,DEG4B
|
||
MOVE A,340BF
|
||
ADD A,[-2000-1,,-1]
|
||
MOVEM A,IDBLKP
|
||
MOVEM A,DBLKOP
|
||
MOVEI A,1
|
||
MOVEM A,DTIME
|
||
SETZM DISOFF
|
||
CONO DIS,1100\DISCHN\SDCHN_3
|
||
AIDST3: POPJ P,
|
||
|
||
AIPSH: HLRZ TT,R
|
||
UMOVE TT,(TT)
|
||
XCTR XRW,[AOS D,43]
|
||
UMOVEM TT,(D)
|
||
JRST AIDL
|
||
|
||
AIIPOP: HLRZ TT,R
|
||
XCTR XRW,[SOS D,43]
|
||
UMOVE E,1(D)
|
||
UMOVEM E,(TT)
|
||
JRST AIDL
|
||
|
||
AIPS: LDB A,[140600,,R]
|
||
HLRZ B,R
|
||
CAIL A,AIMXP
|
||
JRST AIER7
|
||
ANDI B,3
|
||
LSH B,4
|
||
XCT AIPST(A)
|
||
JRST AIDL
|
||
|
||
AIPST: JRST AIER7
|
||
HLLEM R,AISWS ;START MODE
|
||
MOVEM B,CSCALE
|
||
MOVEM B,ISCALE
|
||
MOVEM B,VSCALE
|
||
JRST AIPSA
|
||
HLRM R,DWDL
|
||
HLRM R,DWDB
|
||
AIMXP==.-AIPST
|
||
|
||
AIPSA: MOVEM B,CSCALE
|
||
MOVEM B,ISCALE
|
||
MOVEM B,VSCALE
|
||
JRST AIDL
|
||
]
|
||
EBLK
|
||
XFLD: 0 ;HIGH ORDER BITS OF X COOR REG (LIGHT=0)
|
||
YFLD: 0 ; ... Y
|
||
CDISOF: 0 ;DISPLAY OFF IN CORE ALLOC
|
||
340BF: -1 ;POINTER TO 1K BLOCK FOR 340 BF (MEM ADR)
|
||
340BFP: 0 ;POINTER TO 340BF
|
||
DBLNKN==10.
|
||
DBLINK: 0 ;0=IDLE ;+N=NUM OF ENTRIES
|
||
DBLNKF: 0 ;BLINK FLAG, -1 MEANS START BLINK OFF
|
||
DBLNKB: BLOCK DBLNKN ;BYTE POINTER TO PARAMETER HW TO CHANGE
|
||
BLINKB: 0 ;CLOCK QUEUE BLOCK
|
||
-1
|
||
JRST BLNKBR
|
||
AIDPCP: 0 ;USER LOCN WHERE TO STORE BACK PC IF NECC
|
||
CSCALE: 0 ;SCALE FOR CHR WRDS
|
||
ISCALE: 0 ;SCALE FOR INCREMENT
|
||
VSCALE: 0 ;SCALE FOR VECTOR WDS
|
||
DWDL: 0 ;14 BIT COOR OF LH 340
|
||
DWDB: 0 ;14 BIT COOD OF BOT 340
|
||
DEGVCF: 0 ;EDGE FLAG FOR VECT -1 UNLESS GOING AWAY
|
||
DEGVCC: 0 ;COORD AT EDGE
|
||
DDINCI: 0 ;-1 CURRENT INTENSITY NOT COMMITED (IN INCREMENT MODE)
|
||
;+ => 1 - => 0
|
||
AISWS: 0 ;SELECT DISPLAY START MODE -1 STARTS DISPLAY AFTER IOT
|
||
AIDPIC: 0 ;COORDINATES AT START OF AIDPY
|
||
|
||
LLTPSN: 0 ;. TO .+3 BLTED TO USER
|
||
LTPCNT: 0
|
||
LTPCY: 0
|
||
LTPCX: 0
|
||
LTPDCN: 200\SDCHN_3\DISCHN
|
||
|
||
LDISP: 0 ;DISPLAY LINK POINTER
|
||
LMODE: 0 ;LISP LINK MODE FLAG
|
||
DISOFF: -1 ;-1 IF DIS NOT IN USE OR STOPPED DUE TO FRAME HACK
|
||
DTIME: 0
|
||
|
||
340MD: -1 ;MODE IN WHICH DISPLAY OPEN
|
||
;-1 NOT DISPLAYING 0 .DSTART ETC 2 AS DIS OR IDS
|
||
340DMD: 0 ;0 IDS -1 DIS
|
||
340XMD: 0 ;IN DIS, 0=CH 1=IMAGE
|
||
DBLOAT: 0
|
||
340T: 0 ;TIMER FOR DIS PAGE
|
||
LUBLKP: 0 ;LAST USER BLKO PNTR SET UP AT IN LEVEL, FOR DEBUGGING
|
||
|
||
;START 340 EXECPG AREA
|
||
|
||
A340P1: -1 ;USER ADR THAT EXEC PG SET UP FOR
|
||
A340P2: -1
|
||
340DA: REPEAT N340PB,-1
|
||
N340CL==.-A340P1 ;THIS BLOCK MUST BE CONSEC
|
||
340DP: 0 ;0=> N30PB-1 PNTR TO DATA PGS
|
||
340PP: 0 ;PNTR TO 340P1 OR P2 ALTNERATELY
|
||
|
||
DPAP: 400000+340P1*2000(A) ;EXEC ADR TO REF PAGE
|
||
400000+340P2*2000(A)
|
||
DDAD: REPEAT N340PB, 400000+<DPG0+.RPCNT>*2000(A)
|
||
|
||
DPEP: .340P1+EXEUMP ;BYTE PNTR TO EXEC MAP PAGE ENTRY
|
||
.340P2+EXEUMP
|
||
DDEP: REPEAT N340PB, CONC .DPG,\.RPCNT,+EXEUMP
|
||
|
||
DPBS: BLOCK 8 ;SAVE PAGE BOX AT PI DIS LVL
|
||
|
||
DROOT: 0 ;DIS RESTART POINTER TO LOSER CORE
|
||
DBLKOP: 0 ;TEMP DIS BLKO PTR
|
||
LDBLKP: 0 ;LAST
|
||
DISON: 0 ;-1 IF DIS STOPPED AFTER SPECIAL INT OR BLKO OVERFLOW
|
||
;IE RESTART AFTER PASSAGE OF TIME
|
||
DISDIE: 0 ;0 ;-1 IF DIS HASNT DIED
|
||
DISTPR: 0 ;-1 TO TURN OFF DISPLAY
|
||
IDBLKP: 0 ;BLKO PNTR IF IN INTERP DISPLAY MODE
|
||
NDSFMS: -1 ;-1 NOT HACKING FRAME HACK ELSE NUMBER OF FRAMES REMAINING
|
||
DISNTO: 0 ;# TIMES DIS OR IDS OPEN
|
||
DWDS: 0 ;- # WDS SENT TO DIS-EWRT PER TRIP THRU SRECYC
|
||
;RESET TO MDISWD EVERY 1/30
|
||
;IF <0 DISPLAY STOPS FOR 5 SEC -300.->DTIME
|
||
|
||
DISCHS: 0 ;LENGTH OF LINE IN CURRENT SIZE
|
||
DISCHC: 0 ;-# CHR POS REMAINING
|
||
DISLNL: 0 ;# OF LINES WILL FIT CURRENT SIZE
|
||
DISLNS: 0 ;# LINES REMAINING
|
||
BBLK
|
||
|
||
DEFINE LC A
|
||
A,,DISLC
|
||
TERMIN
|
||
|
||
DEFINE UC A
|
||
DISUC,,A
|
||
TERMIN
|
||
|
||
DEFINE AC A
|
||
A,,A
|
||
TERMIN
|
||
|
||
|
||
|
||
ADISCR: MOVE I,DISCHS
|
||
MOVNM I,DISCHC
|
||
MOVEI I,34
|
||
JRST POPJ1
|
||
|
||
DISALF: SOS DISLNS
|
||
MOVEI I,33
|
||
JRST POPJ1
|
||
|
||
DSATB: MOVEI I,40 ;B
|
||
PUSHJ P,AIDC4B
|
||
LDB I,[300,,DISCHC]
|
||
SKIPG DISCHC
|
||
JUMPN I,DSATB
|
||
JRST POPJ2
|
||
|
||
DISBLB: MOVEI I,50 ;DOWN ARROW
|
||
PUSHJ P,AIDC4B
|
||
TRO A,100 ;CONVERT TO UC LETTER
|
||
DISUC: SKIPA I,[HRRZ I,35(A)] ;SWITCH TO UC
|
||
DISLC: MOVE I,[HLRZ I,36(A)] ;SWITCH TO LC
|
||
PUSHJ P,AIDC4 ;STORE CASE CODE
|
||
HLLM I,AIDC1
|
||
POPJ P,
|
||
|
||
ADISBS: MOVEI I,72 ;BACKSPACE
|
||
SOS DISCHC
|
||
JRST POPJ1
|
||
|
||
DISRUB: MOVEI I,"X&77 ;LC X
|
||
PUSHJ P,AIDC4
|
||
MOVEI I,72 ;340 BACKSPACE
|
||
PUSHJ P,AIDC4
|
||
MOVEI A,"O ;YES, A
|
||
POPJ P, ;LOOP BACK
|
||
|
||
DISTBL: POPJ2,,POPJ2 ;IGNORE 0
|
||
REPEAT 6,LC DISBLB
|
||
LC 63 ;BELL
|
||
LC ADISBS
|
||
AC DSATB
|
||
AC DISALF
|
||
LC DISBLB
|
||
LC DISBLB
|
||
AC ADISCR
|
||
REPEAT 33-16,LC DISBLB
|
||
LC 47 ;ALT MD (RT ARROW)
|
||
REPEAT 4,LC DISBLB
|
||
AC 40
|
||
REPEAT 133-41,UC <.-DISTBL>&77
|
||
LC 53
|
||
LC 52 ;BACKSLASH
|
||
LC 54
|
||
LC 100+67
|
||
LC 60
|
||
LC 100+66
|
||
REPEAT 173-141,LC <.-DISTBL-140>
|
||
LC 55
|
||
LC 62 ;VERTICAL BAR=174
|
||
LC 56
|
||
LC 43 ;TILDE=176
|
||
LC DISRUB
|
||
IFN .-DISTBL-200,PRINTX /DISTBL LOSS/
|
||
|
||
|
||
DINCT: 10
|
||
2
|
||
14
|
||
3
|
||
12
|
||
16
|
||
17
|
||
13
|
||
|
||
|
||
|
||
REPEAT NDOPL, CONC AIER,\.RPCNT+1,: JSP D,AIER
|
||
|
||
AIER: HRRZ R,UUAC(U)
|
||
ADDI R,IOCHNM(U)
|
||
MOVEI D,1+1-AIER1(D)
|
||
LSH D,6+18.
|
||
IORM D,IOCHST-IOCHNM(R)
|
||
MOVE T,AIDPCP
|
||
UMOVEM C,(T)
|
||
JRST IOCERR
|
||
]
|
||
|
||
IFN VIDP,[
|
||
;
|
||
SUBTTL NEW VIDISECTOR ROUTINES
|
||
;
|
||
TVCO: HLRZ D,C
|
||
SKIPA Q,[TVCOBK]
|
||
NVIDI: MOVEI Q,NVDOBK
|
||
PUSH P,R
|
||
PUSH P,[NVIDI2]
|
||
JRST STDOP1
|
||
|
||
NVIDI2: JRST POPAJ
|
||
POP P,R
|
||
PUSHJ P,NVDGET
|
||
JRST NVIDI3
|
||
NVIDI1: MOVEM A,(R)
|
||
CAIN Q,TVCOBK
|
||
AOS NTVCOS
|
||
CAIN Q,TVCOBK
|
||
TLNE C,1 ;ONLY DO IF TVC OUTPUT OPEN
|
||
PUSHJ P,TVCNOS
|
||
JRST POPJ1
|
||
|
||
NVIDI3: PUSHJ P,OPNL25
|
||
JRST NVDCLS
|
||
|
||
NVDOBK: 1,,NVDUSR
|
||
NVIDOP,,BNVIDO
|
||
|
||
BNVIDI: JSP Q,WRDBT
|
||
NVIDIT: SKIPGE NVDIFL
|
||
PUSHJ P,UFLS
|
||
UMOVE B,(C)
|
||
MOVEM B,NVDCOR
|
||
CONO PI,OMXOFF
|
||
SETOM NVDIFL
|
||
PUSHJ P,NVDVS1 ;TURNS OMPCH ON
|
||
SKIPGE NVDIFL
|
||
PUSHJ P,UFLS
|
||
MOVE B,NVDCOR
|
||
UMOVEM B,(C)
|
||
POPJ P,
|
||
|
||
RNVDIB: JSP Q,WRDBT
|
||
RNVDIU: SKIPN NVDCNT ;TVC INPUT
|
||
JRST RNVDO2
|
||
XCTR XRW,[MOVES (C)] ;MAKE SURE GOING TO WIN
|
||
MOVE T,NVDOPT
|
||
CAMN T,NVDVPT
|
||
PUSHJ P,UFLS
|
||
MOVE B,(T)
|
||
SOS NVDCNT
|
||
UMOVEM B,(C)
|
||
AOS T,NVDOPT
|
||
CAIL T,NVDBUF+NVDLNG
|
||
MOVEI T,NVDBUF
|
||
MOVEM T,NVDOPT
|
||
POPJ P,
|
||
|
||
TVCOBK: 3,,NVDUSR
|
||
DNVDIU,,DNVDOU
|
||
DNVDIB,,DNVDOB
|
||
|
||
TVCCLS: SOSGE NTVCOS
|
||
PUSHJ P,TVCINI ;TRY TO AVOID GARBAGE PNT PART WAY VIDISECTED
|
||
NVDCLS: SOSGE NVDUSE
|
||
PUSHJ P,VIDFLS
|
||
POPJ P,
|
||
|
||
TVCNOS: LDB A,[251700,,C] ;TVC OPEN ROUTINE
|
||
TVCN1: TRZ A,703000 ;DONT LET LOSER FOOL AROUND
|
||
IORI A,NVDCHN_15.
|
||
LDB B,[20300,,A] ;DCO
|
||
JUMPE B,TVCO3
|
||
CAIN B,7
|
||
JRST TVCO6 ;DCO DISABLED FOR DCL=7
|
||
IMUL B,[-100]
|
||
TVCO4: ADDI B,1300
|
||
TVCO7: MOVEM B,NVDDK ;DARK VALUE CORRECT FOR DCO
|
||
MOVE TT,A
|
||
XOR TT,TVCONO
|
||
TRNE T,340
|
||
JRST TVCO5 ;CHANGE IN VIDI SELECTION STATUS
|
||
TVCO5A: MOVEM A,TVCONO
|
||
POPJ P,
|
||
|
||
TVCO3: LDB T,[200,,A] ;CONF
|
||
CAIN T,3
|
||
MOVNI B,100 ;IF CONF=3 & DCO=0 VALUE 100 LESS THAN PREDICTED ABOVE
|
||
JRST TVCO4
|
||
|
||
TVCO5: TRZ A,700000 ;CLEAR CHNL OUT OF TVCONO
|
||
CONO NVDX,(A) ;START RLYS
|
||
MOVEI T,2
|
||
SKIPL TVQBLK+1 ;WAIT IF PREV RQ NOT SATISFIED
|
||
PUSHJ P,UFLS
|
||
PUSHJ P,CLQADD ;RQ LATER TRANSFER TO VIDD1
|
||
TVQBLK
|
||
JRST TVCO5A
|
||
|
||
TVCO6: LDB T,[200,,A] ;CONF
|
||
IMUL T,[-200] ;CALCULATE WHEN OVF HAPPENS
|
||
ADDI T,2000
|
||
JRST TVCO7
|
||
|
||
TVCINI: CONO PI,OMXOFF
|
||
SETZM NVDCNT
|
||
MOVE T,NVDIPT
|
||
MOVEM T,NVDVPT
|
||
MOVEM T,NVDOPT
|
||
MOVE T,NVDBKR
|
||
CAIN T,1
|
||
SETOM NVDBKR
|
||
JRST OMXONJ
|
||
|
||
VIDFLS: SKIPL NVDUSE ;SKIP IF OPENS ON NVD, .VSCAN
|
||
POPJ P,
|
||
DATAO DSDEV,[DSNVID] ;DEASSIGN VIDI
|
||
SETOM NVDUSR
|
||
POPJ P,
|
||
|
||
NVDGET: CONO NVDX,@TVCONO ;TRY TO ASSIGN BAT
|
||
CONI NVDX,TT
|
||
JUMPE TT,CPOPJ
|
||
JRST POPJ1
|
||
|
||
|
||
NVDBRK: MOVE T,NVDBKR
|
||
JRST NVTAB(T) ;DISPATCH ON REASON FOR BREAK
|
||
|
||
JRST NEWORK ;STARTUP OF SOME NEW FUNCTION
|
||
NVTAB: JRST SCNB1 ;NEW VSCAN POINT
|
||
JRST TVB1 ;NEW TVC POINT
|
||
JRST INVD1 ;NEW NVD PNT
|
||
; JRST DRET ;NEW DAEMON POINT
|
||
|
||
TVB1: DATAI NVDX,@NVDVPT ;READ IN OF TV POINT
|
||
CONI NVDX,T
|
||
LSH T,-11.
|
||
DPB T,[220200,,@NVDVPT] ;READ ALL RELAVENT INFO FROM BAT
|
||
TRNE T,3
|
||
JRST TVB2 ;DCO OR OVFL
|
||
MOVE T,@NVDVPT
|
||
ANDI T,1777
|
||
CAMLE T,NVDDK
|
||
JRST TVB2 ;DUE TO NOISE/PROB DARKER THAN DCO
|
||
TVB3: AOS T,NVDVPT
|
||
CAIL T,NVDBUF+NVDLNG
|
||
MOVEI T,NVDBUF
|
||
MOVEM T,NVDVPT ;INCREMENT TO NEXT POINT
|
||
JRST NEWORK
|
||
|
||
TVB2: MOVE T,NVDDK
|
||
DPB T,[1200,,@NVDVPT]
|
||
DPB T,[240600,,@NVDVPT] ;PUT IN FLOATING PART
|
||
LSH T,-6
|
||
DPB T,[330400,,@NVDVPT]
|
||
JRST TVB3
|
||
|
||
TVNEXT: MOVE T,NVDVPT
|
||
CAMN T,NVDIPT
|
||
JRST TVCFIN
|
||
MOVEI T,1 ;SET UP FOR NEXT TV POINT
|
||
MOVEM T,NVDBKR
|
||
MOVE T,NVDVPT
|
||
HLRZ T,@NVDVPT
|
||
CONO NVDX,@TVCONO
|
||
DATAO NVDX,T
|
||
EXCH T,VIDXOL
|
||
SUB T,VIDXOL
|
||
MOVMM T,VIDTEM
|
||
HRRZ T,@NVDVPT
|
||
DATAO NVDY,T
|
||
EXCH T,VIDYOL
|
||
SUB T,VIDYOL
|
||
MOVMS T
|
||
CAMGE T,VIDTEM
|
||
MOVE T,VIDTEM
|
||
CAIL T,1000
|
||
JRST TVB5
|
||
DATAO NVDT,[-4]
|
||
NVDBR4: JRST OMXRET
|
||
|
||
TVB5: TLC T,232000 ;CALCULATE SETTLING TIME
|
||
FAD T,T
|
||
LDB T,[330400,,T]
|
||
DATAO NVDT,SETLL-10.(T)
|
||
JRST NVDBR4
|
||
|
||
SETLL: ;SETTLING TIME IN 10 MICROSEC
|
||
-6 ;DEFLECTING 512 - 1023
|
||
-10 ;1024 - 2047
|
||
-16 ;2048 - 4095
|
||
-26 ;4096 - 8191
|
||
-45 ;8192 - 16383
|
||
-70 ;16384
|
||
|
||
RNVDOB: JSP Q,WRDBT
|
||
RNVDOU: MOVEI T,NVDLNG-1 ;TO PREVENT HANGUP AT PI ON WRAPAROUND
|
||
CAMG T,NVDCNT
|
||
JRST RNVDO2
|
||
UMOVE B,(C)
|
||
MOVEM B,@NVDIPT
|
||
AOS NVDCNT
|
||
AOS T,NVDIPT
|
||
CAIL T,NVDBUF+NVDLNG
|
||
MOVEI T,NVDBUF
|
||
MOVEM T,NVDIPT
|
||
CONO PI,OMXOFF
|
||
SETOM TVFLG
|
||
NVDVS1: MOVE T,TVCONO
|
||
SKIPGE NVDBKR
|
||
CONO NVDX,2000(T)
|
||
JRST OMXONJ
|
||
|
||
RNVDO2: POP P,T ;CALLED FROM RNVDI ALSO
|
||
ANDI T,-1
|
||
CAIE T,WRDBRT
|
||
JRST IOCER9
|
||
POPJ P,
|
||
|
||
NEWORK:; SKIPGE DAEMFL
|
||
; JRST DNEXT
|
||
SKIPL SCNUSR ;DEFLECT FOR NEW VSCAN POINT
|
||
JRST SCNB2
|
||
SKIPGE NVDIFL ;NVD
|
||
JRST INVD2
|
||
SKIPGE TVFLG ;DEFLECT FOR NEW TVC POINT
|
||
JRST TVNEXT
|
||
SETOM NVDBKR ;NO MORE CROCKS FOR VIDISECTOR TO DO
|
||
MOVE T,TVCONO
|
||
TRZ T,703000 ;SAVE STATE OF VIDI SELECT
|
||
CONI NVDX,A
|
||
CONO NVDX,(T)
|
||
SKIPN A
|
||
DATAO DSDEV,[DSNVID] ;RE DEASSIGN VIDI IF WAS DEASSIGNED
|
||
;(CONO DID CLEAR PIA, DONE, AND SET MODE FLOPS THO)
|
||
JRST OMXRET
|
||
|
||
TVCFIN: SETZM TVFLG
|
||
JRST NEWORK
|
||
|
||
INVD1: DATAI NVDX,NVDCOR
|
||
CONI NVDX,T
|
||
LSH T,-11.
|
||
DPB T,[220200,,NVDCOR]
|
||
SETZM NVDIFL
|
||
JRST NEWORK
|
||
|
||
INVD2: MOVEI T,2
|
||
MOVEM T,NVDBKR
|
||
CONO NVDX,@TVCONO
|
||
HLRZ T,NVDCOR
|
||
DATAO NVDX,T
|
||
HRRZ T,NVDCOR
|
||
DATAO NVDY,T
|
||
DATAO NVDT,[-7]
|
||
JRST NVDBR4
|
||
|
||
SUBTTL NEW VIDISECTOR ROUTINES - .VSTST
|
||
|
||
AVSTST: UMOVE A,(J)
|
||
CAME U,NVDUSR
|
||
JRST AVST4
|
||
JUMPE A,AVST1 ;READ CURRENT STATE
|
||
JUMPL A,AVST2
|
||
AVST3: SKIPL SCNUSR ;HANGUP TILL VSCAN FINISHED
|
||
PUSHJ P,UFLS
|
||
AVST2:
|
||
SCNSTP: CONO PI,OMXOFF ;FLUSH VSCAN ENTIRELY
|
||
SKIPGE SCNUSR
|
||
JRST OMXONJ ;ALREADY FINISHED
|
||
SETOM SCNUSR
|
||
SOSGE NVDUSE
|
||
SETOM NVDUSR
|
||
SKIPN NVDBKR ;IGNORE VSCAN POINT IN PROGRESS IF ANY
|
||
SETOM NVDBKR
|
||
VSLS2: PUSH P,A
|
||
PUSH P,B
|
||
PUSH P,W
|
||
MOVSI B,-1
|
||
MOVSI W,-2
|
||
SCNS2: LDB A,VEXT(W)
|
||
TRNN A,600000
|
||
JRST SCNS4
|
||
ANDI A,PMRCM
|
||
ADDM B,MMSWP(A)
|
||
SCNS4: MOVEI A,0
|
||
DPB A,VEXT(W)
|
||
AOBJN W,SCNS2
|
||
MOVE A,USER
|
||
SPM UPGML(A)
|
||
LPMR UPGML(A)
|
||
POP P,W
|
||
POP P,B
|
||
POP P,A
|
||
PUSHJ P,VIDFLS
|
||
JRST OMXONJ
|
||
|
||
AVST4: JUMPE A,ILUUO
|
||
POPJ P,
|
||
|
||
AVST1: SKIPGE SCNUSR
|
||
POPJ P,
|
||
MOVE A,NVDPTR
|
||
SUBI A,400000+VSB1*2000
|
||
JRST APTUAJ
|
||
|
||
;CHECK TO SEE IF MEM PROTECT STILL OK
|
||
SCNACR: CAMN U,SCNUSR
|
||
POPJ P,
|
||
AOS (P)
|
||
JRST SCNSTP
|
||
|
||
;STOP SCAN
|
||
SCNSTC: CONO NVDX,0
|
||
POPJ P,
|
||
|
||
;RESTART SCAN AFTER STOP FOR SHUFFLING
|
||
SCNRST: CONO NVDX,NVDCHN_17
|
||
POPJ P,
|
||
|
||
|
||
SUBTTL NEW VIDISECTOR ROUTINES - .VSCAN
|
||
|
||
AVSCAN: XCTR XRW,[MOVES (C)]
|
||
XCTR XRW,[MOVES 12(C)]
|
||
SKIPL SCNUSR
|
||
PUSHJ P,UFLS
|
||
CONO PI,CLKOFF
|
||
CAME U,NVDUSR
|
||
SKIPGE NVDUSE
|
||
AOSA NVDUSE
|
||
JRST ILUUO
|
||
MOVEM U,NVDUSR
|
||
CONO PI,CLKON
|
||
PUSHJ P,NVDGET
|
||
JRST VSLOS
|
||
A.VS1: SETZM BATMXA
|
||
XCTR XRW,[HLRZ A,2(C)]
|
||
MOVEM A,NVDCNX
|
||
MOVEM A,NVDCN3
|
||
XCTR XRW,[HRRZ A,2(C)]
|
||
MOVEM A,NVDCNY
|
||
IRPS XY,,X Y P X Y P,A12,,1 1 1 2 2 2,N,,3 6 11 4 7 12,YX,,X X X Y Y Y
|
||
UMOVE A,N(C)
|
||
IDIV A,NVDCN!YX
|
||
MOVEM A,BATD!XY!A12
|
||
TERMIN
|
||
IRP XY,,[P,X,Y]ADR,,[[[1,,]],5(C),10(C)]
|
||
MOVE A,BATD!XY!1
|
||
ADD A,BATD!XY!2
|
||
ASH A,-1
|
||
IFE .IRPCNT, ADD A,ADR
|
||
IFN .IRPCNT, XCTR XRW,[ADD A,ADR]
|
||
MOVEM A,BAT!XY!1
|
||
MOVEM A,BAT!XY!2
|
||
IFN .IRPCN,[IDIV A,BATP1
|
||
MOVEM A,NVID!XY]
|
||
TERMIN
|
||
XCTR XRW,[HRRZ B,1(C)]
|
||
LDB A,[121000,,B]
|
||
CAIL A,376
|
||
JRST VSLOS
|
||
MOVEI W,0
|
||
PUSHJ P,VSMS1
|
||
MOVEI W,1
|
||
PUSHJ P,VSMS1
|
||
SPM UPGML(U)
|
||
LPMR UPGML(U)
|
||
HRRZ R,B
|
||
ANDI R,776000
|
||
ADDI R,4000-2000
|
||
XCTR XRW,[HLRO D,1(C)]
|
||
MOVE A,NVDCNX
|
||
IMUL A,NVDCNY
|
||
JUMPLE A,VSLOS ;SIZE OF RASTOR
|
||
MOVNS D ;PLUS COUNT
|
||
CAMLE A,D
|
||
JRST VSLOS ;WON'T FIT
|
||
CAML A,R
|
||
JRST VSLOS ;WON'T FIT IN EXEC PGS
|
||
ADD A,B
|
||
MOVEM A,BATMXA
|
||
LDB A,[121000,,A]
|
||
PUSHJ P,UPLC
|
||
LDB A,T
|
||
TRC A,600000
|
||
TRCE A,600000 ;SKIP ON R/W/F
|
||
JRST VSLOS ;TOP PAGE LOSES
|
||
ANDI B,1777
|
||
ADDI B,400000+VSB1*2000
|
||
MOVEM B,NVDPTR
|
||
XCTR XRW,[HRRZ A,(C)]
|
||
PUSHJ P,TVCN1
|
||
MOVE A,[JRST SCNG1]
|
||
MOVEM A,SCNB1A
|
||
CONO PI,OMXOFF
|
||
MOVEM U,SCNUSR
|
||
MOVE A,TVCONO
|
||
SKIPGE NVDBKR
|
||
CONO NVDX,2000(A)
|
||
CONO PI,OMXON
|
||
XCTR XRW,[SKIPL (C)]
|
||
POPJ P,
|
||
JRST AVST3
|
||
|
||
VSLS3: PUSHJ P,LSWPOP
|
||
VSLOS: PUSHJ P,VSLS1
|
||
JRST ILUUO
|
||
|
||
|
||
VPGLOS: PUSHJ P,VSLS1
|
||
PUSHJ P,TPFLT
|
||
JRST UUOTRO
|
||
|
||
VSLS1: SOSGE NVDUSE
|
||
SETOM NVDUSR
|
||
CONO PI,OMXOFF
|
||
JRST VSLS2
|
||
|
||
VSMS1: PUSHJ P,SWTL
|
||
CIRPSW
|
||
LDB A,[121000,,B]
|
||
ADD A,W
|
||
MOVEM A,VSMPG
|
||
PUSHJ P,UPLC
|
||
CONO PI,CLKOFF
|
||
LDB A,Q
|
||
JUMPE A,VSMS2 ;NO ACCESS
|
||
CAIN A,-1
|
||
JRST VSLS3
|
||
LDB A,T
|
||
TRNN A,600000
|
||
JRST VSMS3 ;SWAPPED OUT
|
||
TRNN A,400000
|
||
JRST VSLS3 ;RD ONLY
|
||
TRO A,200000
|
||
VSMS2: DPB A,T ;CHANGE R/W/F TO R/W
|
||
LDB TT,VEXT(W)
|
||
DPB A,VEXT(W)
|
||
MOVSI Q,1
|
||
ANDI A,PMRCM
|
||
SKIPE A
|
||
ADDM Q,MMSWP(A)
|
||
JUMPE TT,VSLS4
|
||
ANDI TT,PMRCM
|
||
MOVSI Q,-1
|
||
ADDM Q,MMSWP(TT)
|
||
VSLS4: PUSHJ P,LSWPOP
|
||
JRST CLKONJ
|
||
|
||
VSMS3: PUSHJ P,LSWPOP
|
||
MOVE A,VSMPG
|
||
SOSGE NVDUSE
|
||
SETOM NVDUSR
|
||
PUSHJ P,CWAIT
|
||
SKIPL VIDSWI
|
||
MOVEM U,VIDSWI
|
||
MOVEM A,VIDSPG
|
||
SKIPL VIDSWI
|
||
PUSHJ P,UFLS
|
||
SUB P,[1,,1]
|
||
JRST AVSCAN
|
||
SCNB1: DATAI NVDX,@NVDPTR
|
||
CONI NVDX,T
|
||
LSH T,-11.
|
||
DPB T,[220200,,@NVDPTR]
|
||
TRNE T,3
|
||
JRST SCNB1C ;OVF OR DCO?
|
||
MOVE T,@NVDPTR
|
||
ANDI T,1777
|
||
CAMG T,NVDDK ;OR VALUE GREATER THAN DCO LEVEL
|
||
JRST NEWORK
|
||
SCNB1C: MOVE T,NVDDK
|
||
DPB T,[1200,,@NVDPTR]
|
||
DPB T,[240600,,@NVDPTR] ;PUT IN FLOATING PART
|
||
LSH T,-6
|
||
DPB T,[330400,,@NVDPTR]
|
||
JRST NEWORK
|
||
|
||
SCNB2: CONO NVDX,@TVCONO ;SETUP FOR NEXT VSCAN POINT
|
||
DATAO NVDX,NVIDX
|
||
DATAO NVDY,NVIDY
|
||
MOVE T,NVIDX
|
||
EXCH T,VIDXOL
|
||
SUB T,VIDXOL
|
||
MOVMM T,VIDTEM
|
||
MOVE T,NVIDY
|
||
EXCH T,VIDYOL
|
||
SUB T,VIDYOL
|
||
MOVMS T
|
||
CAMGE T,VIDTEM
|
||
MOVE T,VIDTEM
|
||
CAIL T,1000
|
||
JRST SCNT5
|
||
DATAO NVDT,[-4]
|
||
SCNT4: CLEARM NVDBKR
|
||
EBLK
|
||
SCNB1A: JRST SCNG1 ;OR AOS (AOSA) NVDPTR
|
||
BBLK
|
||
JRST SCNS1 ;HOMO LINEAR FROB
|
||
SCNB1B: SOSG NVDCNX ;SIMPLE MINDED
|
||
JRST SCNB3
|
||
IRPC X,,XY
|
||
MOVE T,BATD!X!1
|
||
ADDB T,BAT!X!1
|
||
HLRZM T,NVID!X
|
||
TERMIN
|
||
SCNBX: JRST OMXRET
|
||
|
||
SCNT5: TLC T,232000 ;CALCULATE SETTLING TIME
|
||
FAD T,T
|
||
LDB T,[330400,,T]
|
||
DATAO NVDT,SETLL-10.(T)
|
||
JRST SCNT4
|
||
|
||
SCNB3: SOSG NVDCNY
|
||
JRST SCNB4
|
||
IRPC X,,XY
|
||
MOVE T,BATD!X!2
|
||
ADDB T,BAT!X!2
|
||
MOVEM T,BAT!X!1
|
||
HLRZM T,NVID!X
|
||
TERMIN
|
||
|
||
MOVE T,NVDCN3
|
||
MOVEM T,NVDCNX
|
||
JRST SCNBX
|
||
|
||
SCNB4: SKIPL NVDCNY ;WAIT FOR LAST DATAO TO RETURN A POINT
|
||
JRST SCNBX
|
||
SETOM SCNUSR
|
||
SOSL NVDUSE
|
||
JRST NEWORK
|
||
SETOM NVDUSR
|
||
DATAO DSDEV,[DSNVID] ;DEASSIGN BAT
|
||
MOVSI B,-1
|
||
MOVSI W,-2
|
||
SCNB4B: LDB A,VEXT(W)
|
||
TRNN A,600000
|
||
JRST SCNB4A
|
||
ANDI A,PMRCM
|
||
ADDM B,MMSWP(A)
|
||
SCNB4A: MOVEI A,0
|
||
DPB A,VEXT(W)
|
||
AOBJN W,SCNB4B
|
||
JRST NEWORK
|
||
|
||
SCNS1: MOVEM U,NVDTMU
|
||
SOSG NVDCNX
|
||
JRST SCNS3
|
||
IRPC X,,PXY
|
||
MOVE T,BATD!X!1
|
||
ADDB T,BAT!X!1
|
||
IFN .IRPCN,[IDIV T,BATP1
|
||
MOVEM T,NVID!X]
|
||
TERMIN
|
||
|
||
SCNBX1: MOVE U,NVDTMU
|
||
JRST SCNBX
|
||
|
||
SCNS3: SOSG NVDCNY
|
||
JRST SCNB4
|
||
IRPC X,,PXY
|
||
MOVE T,BATD!X!2
|
||
ADDB T,BAT!X!2
|
||
MOVEM T,BAT!X!1
|
||
IFN .IRPCN,[IDIV T,BATP1
|
||
MOVEM T,NVID!X]
|
||
TERMIN
|
||
MOVE T,NVDCN3
|
||
MOVEM T,NVDCNX
|
||
JRST SCNBX1
|
||
|
||
SCNG1: MOVSI T,(AOSA)
|
||
SKIPN BATDP1
|
||
SKIPE BATDP2
|
||
MOVSI T,(AOS)
|
||
HRRI T,NVDPTR
|
||
MOVEM T,SCNB1A
|
||
TLNN T,(AOSA-AOS)
|
||
JRST SCNS1
|
||
JRST SCNB1B
|
||
|
||
|
||
SUBTTL NEW VIDISECTOR ROUTINES
|
||
|
||
EBLK
|
||
|
||
NVDIPT: NVDBUF ;POINTER TO INSERT IN BUF
|
||
NVDVPT: NVDBUF ;POINTER TO WORD BEING VIDISECTED
|
||
NVDOPT: NVDBUF ;POINTER TO WITHDRAW FROM BUF
|
||
NVDCNT: 0 ;NUMBER PTS IN BUF
|
||
NVDBUF: BLOCK NVDLNG
|
||
VIDSTRT: 0
|
||
LBTCNO: 0 ;LAST CONO TO BAT
|
||
NVDIFL: 0 ;+=> RQ TO READ NVD PNT
|
||
NVDCOR: 0 ;NVD DEV, COORDINATES TO PI, READ DATA FROM PI
|
||
NTVCOS: -1 ;# TVC OPENS
|
||
|
||
IRPC X,,XYP
|
||
IRPC N,,12
|
||
BAT!X!!N: 0
|
||
BATD!X!!N: 0
|
||
TERMIN
|
||
TERMIN
|
||
|
||
NVDCNX: 0
|
||
NVDCNY: 0
|
||
NVDCN3: 0
|
||
NVIDX: 0
|
||
NVIDY: 0
|
||
BATMXA: 0
|
||
NVDPTR: 0
|
||
NVDTMU: 0
|
||
SCNUSR: -1 ;USER IN CURRENT .VSCAN, -1 .VSCAN FREE
|
||
SCNREL: 0
|
||
TVCONO: 0 ;CONO FOR TVC DEVICE AND VSCAN (NORM HAS CHNL BUT NOT IF IN VIDDLY)
|
||
NVDDK: 0 ;-1=>VID VALUE CORRESP TO DCO
|
||
TVFLG: 0 ;-1=>TVC WORK IN PROGRESS
|
||
NVDBKR: -1 ;REASON LAST POINT READ IN, DISPATCH ADDRESS FOR INTS
|
||
;-1 NONE 0 VSCAN 1 TVC 2 NVD
|
||
TVQBLK: 0 ;CLOCK QUEUE BLOCK
|
||
-1
|
||
JRST VIDD1
|
||
VIDXOL: 0 ;OLD VIDI CORDS
|
||
VIDYOL: 0 ;OLD VIDI CORDS
|
||
VIDTEM: 0 ;LARGEST DELTA
|
||
VSMPG: 0
|
||
VEXT: .VSB1+EXEUMP
|
||
.VSB2+EXEUMP
|
||
|
||
BBLK
|
||
|
||
VIDD1: MOVEI A,NVDCHN_15.
|
||
IORB A,TVCONO ;RESTORE CHNLS TO TVCONO
|
||
CONO NVDX,2000(A) ;CAUSE EVENTUAL VIDI INT TO SEE IF ANYTHING YO DO
|
||
JRST CLQRET ;RETURN TO CLOCK ROUTINE
|
||
]
|
||
|
||
SUBTTL VIDEO SWITCH AND VIDEO BUFFER ROUTINES
|
||
|
||
;SYSTEM CALLS FOR HACKING THE VIDEO SWITCH AND VIDEO BUFFERS.
|
||
|
||
IFE N11TYS,[
|
||
NVDBF==OPNL1
|
||
NVIDSW==OPNL1
|
||
]
|
||
|
||
IFN N11TYS,[
|
||
|
||
VBDFLS: PUSH P,B
|
||
PUSH P,T
|
||
PUSH P,I
|
||
PUSH P,Q
|
||
PUSH P,C
|
||
MOVSI B,-MXVBN ;FLUSH ALL BUFFERS ASSIGNED TO JOB IN U
|
||
VBDFL3: CAMN U,VBAST(B)
|
||
JRST VBDFL1
|
||
VBDFL2: AOBJN B,VBDFL3
|
||
SKIPE NVDBA(U)
|
||
JRST 4,.
|
||
VBDFL6: POP P,C
|
||
POP P,Q
|
||
POP P,I
|
||
POP P,T
|
||
POP P,B
|
||
POPJ P,
|
||
|
||
VBDFL1: JSP Q,11CM1
|
||
JRST VBDFL4 ;LOST..
|
||
PUSH P,B
|
||
JSP Q,NVDBU2 ;FLUSH BUFFER
|
||
JFCL ;PDP11 TIMED OUT
|
||
JFCL ;PDP11 GAVE NEGATIVE REPLY
|
||
POP P,B
|
||
JRST VBDFL2
|
||
|
||
VBDFL5: CAMN U,VBAST(B)
|
||
VBDFL4: SETOM VBAST(B)
|
||
AOBJN B,VBDFL5
|
||
CLEARM NVDBA(U)
|
||
JRST VBDFL6
|
||
|
||
;VIDBUF SYSTEM CALL - ASSIGN OR DEASSIGN VIDEO BUFFERS
|
||
NVDBF: JSP Q,11CM1 ;SET UP ACS, LOCK SWITCH.
|
||
JRST OPNL7 ;LOST
|
||
JUMPGE A,NVDBU1 ;JUMP IF DEASSIGN COMMAND
|
||
MOVSI C,2_<16.+4-18.>
|
||
JSP Q,NVDCMD ;TELL PDP11 TO ASSIGN BUFFER.
|
||
JRST OPNL7 ;PDP11 TIMED OUT
|
||
JRST OPNL6 ;PDP11 GAVE NEGATIVE REPLY
|
||
HRRZ A,C
|
||
CAIL A,MXVBN
|
||
JRST OPNL6 ;PDP11 HAS MORE VIDEO BUFFERS THAN WE DO
|
||
AOS NVDBA(U) ;WON
|
||
MOVEM U,VBAST(A)
|
||
JRST POPJ1
|
||
|
||
NVDBU1: MOVE B,A ;DEASSIGN VIDEO BUFFER
|
||
CAIGE B,MXVBN ;CHECK THAT VIDEO BUFFER IS LEGAL
|
||
CAME U,VBAST(B) ;AND BELONGS TO THIS JOB
|
||
JRST OPNL33 ;NOT LEGAL VIDEO BUFFER NO
|
||
JSP Q,NVDBU2 ;TELL PDP11 TO FREE THE BUFFER.
|
||
JRST OPNL7 ;TIMED OUT
|
||
JRST OPNL23 ;GAVE NEG REPLY
|
||
JRST POPJ1 ;WON
|
||
|
||
EBLK
|
||
;TABLE OF VIDEO BUFFER ASSIGNMENTS.
|
||
VBAST: REPEAT MXVBN,-1 ;-1 => FREE, ELSE USR IDX.
|
||
11CVSR: -1 ? 0 ;SWITCH TO LOCK TO PROTECT 10-TO-11 COMMAND VARS.
|
||
BBLK
|
||
|
||
;VIDSW SYSTEM CALL - SET VIDEO SWITCH.
|
||
NVIDSW: JSP Q,11CM1 ;LOCK SWITCH, ETC.
|
||
JRST OPNL7
|
||
LSH A,4.+16.
|
||
LSH B,4.+16.
|
||
MOVEM A,1(I)
|
||
MOVEM B,2(I)
|
||
MOVSI C,1_<16.+4-18.>
|
||
JSP Q,NVDCMD
|
||
JRST OPNL7 ;TIMED OUT
|
||
JRST OPNL23 ;PDP11 DIDN'T FEEL LIKE SWITCHING THE SWITCH
|
||
JRST POPJ1
|
||
|
||
NVDBU2: SETOM VBAST(B) ;GIVE DEASSIGN COMMAND TO 11
|
||
LSH B,4.+16.
|
||
MOVEM B,1(I) ;WHICH ONE TO DEASSIGN
|
||
SOSGE NVDBA(U)
|
||
JRST 4,.
|
||
MOVSI C,3_<16.+4-18.>
|
||
;GIVE COMMAND IN C TO PDP11, WAIT, RETURN (Q) IF 11 TIMES OUT,
|
||
;1(Q) IF 11 GIVES NEGATIVE REPLY AND 2(Q) IF SUCESSFUL
|
||
;IN ANY CASE, SWITCH IS UNLOCKED
|
||
;ASSUMES ARGS ALREADY SET UP, AND 11CVSR LOCKED.
|
||
NVDCMD: MOVEM C,(I) ;STORE COMMAND-TYPE, TELLING PDP11 TO GO.
|
||
NVDCM1: CAME C,(I)
|
||
JRST NVDCM2 ;IT'S FINISHED, WE WIN.
|
||
SOJG T,NVDCM1 ;LOOP FOR A WHILE,
|
||
PUSHJ P,LSWPOP
|
||
JRST (Q) ;FAIL - 11 TIMED OUT
|
||
|
||
NVDCM2: MOVE C,1(I) ;RETURNED ARG IN CASE OF ASSIGN VIDEO BUFFER
|
||
LSH C,-4.-16.
|
||
SKIPGE (I) ;PDP11 FINISHED: DID COMMAND SUCCEED?
|
||
AOS Q ;YES SKIP EXTRA TIME
|
||
SETZM (I)
|
||
PUSHJ P,LSWPOP
|
||
JRST 1(Q)
|
||
|
||
;LOCK SWITCH AND SET UP.. RETURN TO (Q) IF FAILS (SWITCH NOT LOCKED IN THAT CASE)
|
||
;RETURN TO 1(Q) IF SUCEEDS
|
||
|
||
11CM1: SKIPL TT11P
|
||
JRST (Q)
|
||
PUSHJ P,SWTL
|
||
11CVSR
|
||
LDB T,[061600,,TT11HA]
|
||
LDB I,[061600,,400000+TTPG0*2000(T)]
|
||
ADDI I,400000+TTPG0*2000 ;I HAS 10-TO-11 COMMAND BFR ADDR.
|
||
MOVSI T,1 ;# TIMES TO LOOP WAITING FOR 11 TO ACKNOWLEDGE
|
||
11CM2: SKIPG (I)
|
||
JRST 1(Q) ;11 READY FOR COMMAND.
|
||
SOJG T,11CM2
|
||
PUSHJ P,LSWPOP
|
||
JRST (Q) ;TIMED OUT
|
||
]
|
||
|
||
SUBTTL TABLET AND ROBOT CONSOLE
|
||
|
||
IFN TABP,[
|
||
|
||
ITAB: IFE TABCLK,[
|
||
SOSLE TABRTC
|
||
JRST ITAB6
|
||
SKIPGE TABUSR
|
||
JRST ITAB7
|
||
MOVE A,TABRTE
|
||
MOVEM A,TABRTC
|
||
CONO RBTCON,RTABC_3+TABCHN
|
||
] IFN TABCLK, CONO RBTCON,RTABC_3
|
||
ROT A,36.*2
|
||
DATAI RBTCON,A
|
||
JUMPL A,ITAB ;TRY AGAIN
|
||
LDB B,[400300,,A]
|
||
CAME B,TABLSZ
|
||
JRST ITAB2
|
||
CAIN B,7
|
||
JRST ITAB3 ;PEN OUT OF CONTACT
|
||
LDB B,[221400,,A] ;X
|
||
SUB B,TABLSX
|
||
MOVMS B
|
||
CAML B,TABDTA
|
||
JRST ITAB2
|
||
LDB B,[1400,,A]
|
||
SUB B,TABLSY
|
||
MOVMS B
|
||
CAML B,TABDTA
|
||
JRST ITAB2
|
||
ITAB3: AOS B,TABSMC
|
||
CAIL B,77
|
||
JRST ITAB2
|
||
ITAB5: IFN TABCLK,[
|
||
MOVE T,TABRTE
|
||
MOVEI C,TABQBK
|
||
SKIPL TABUSR
|
||
JRST CLQREE
|
||
JRST CLQRET
|
||
] IFE TABCLK,[
|
||
JRST OMXRET
|
||
|
||
ITAB6: DATAI RBTCON,A ;FLUSH DATA
|
||
JRST OMXRET
|
||
|
||
ITAB7: CONO RBTCON,0
|
||
JRST OMXRET
|
||
]
|
||
ITAB2: MOVE B,TABSMC
|
||
DPB B,[140600,,TABLST]
|
||
SETZM TABSMC
|
||
HRRZM A,TABLSY
|
||
LDB B,[221400,,A]
|
||
MOVEM B,TABLSX
|
||
LDB B,[400300,,A]
|
||
MOVEM B,TABLSZ
|
||
EXCH A,TABLST
|
||
JUMPE A,ITAB5 ;JUST STARTING UP
|
||
MOVE B,TABCC
|
||
CAIL B,LTABBF
|
||
JRST ITAB4 ;FULL
|
||
MOVEM A,@TABIP
|
||
AOS TABCC
|
||
AOS B,TABIP
|
||
CAIL B,TABBFE
|
||
MOVEI B,TABBUF
|
||
MOVEM B,TABIP
|
||
JRST ITAB5
|
||
|
||
ITAB4: MOVSI B,(SETZ) ;SET DATA LOST
|
||
IORM B,TABLST
|
||
JRST ITAB5
|
||
|
||
]
|
||
|
||
IFN RBTCP,[
|
||
|
||
;ROBOT CONSOLE READ SWITCHES
|
||
ARBTC: UMOVE A,(J)
|
||
CONO PI,TABOFF
|
||
CONO RBTCON,RLTSWC_3+IFE TABCLK,TABCHN
|
||
ROT A,36.*2
|
||
DATAO RBTCON,A
|
||
ROT A,36.*2
|
||
DATAI RBTCON,A
|
||
CONO PI,TABON
|
||
UMOVEM A,(J)
|
||
POPJ P,
|
||
|
||
;DATA FORM
|
||
;4.9 DATA LOST BEFORE THIS
|
||
;4.8-4.6 TAB "Z"
|
||
;4.5-4.4 USUSED
|
||
;4.3-3.1 TABLET X
|
||
;2.9-2.4 REPEAT COUNT
|
||
;2.4-1.1 TABLET Y
|
||
|
||
TABO: PUSH P,[TABO1]
|
||
JSP Q,STDOPN
|
||
1,,TABUSR
|
||
DTABUI,,DTABBI
|
||
|
||
TABO1: POPJ P, ;OPEN LOST
|
||
SKIPE TABUSE ;OPEN WON
|
||
JRST POPJ1 ;NOT FIRST OPEN
|
||
LDB T,[250300,,C]
|
||
AOS T
|
||
MOVEM T,TABRTE ;TABLET RATE (IGNORE THIS MANY BETWEEN TAKES)
|
||
LDB T,[300600,,C]
|
||
MOVEM T,TABDTA ;DELTA FOR COORD TO BE DIFFERENT
|
||
PUSHJ P,TABCLR
|
||
IFE TABCLK, CONO RBTCON,RTABC_3+TABCHN
|
||
IFN TABCLK,[ PUSHJ P,CLQAD1 ;START UP CLOCK LEVEL
|
||
TABQBK
|
||
] JRST POPJ1
|
||
|
||
BTABI: UMOVE J,(C) ;INITIAL AOBJN PNT
|
||
JSP Q,WRDBT
|
||
UTABI: SKIPG TABCC ;TABLET .IOT
|
||
JRST TABI1 ;NO DATA AVAIL, SEE IF BEING ACCUMULATED
|
||
UTABI1: MOVE A,@TABOP
|
||
UMOVEM A,(C)
|
||
AOS T,TABOP
|
||
CAIL T,TABBFE
|
||
MOVEI T,TABBUF
|
||
MOVEM T,TABOP
|
||
SOS TABCC
|
||
POPJ P,
|
||
|
||
TABI1: HRRZ T,(P)
|
||
CAIN T,WRDBRT
|
||
JRST TABI2
|
||
TABI3: SKIPG TABCC
|
||
PUSHJ P,UFLS
|
||
JRST UTABI1
|
||
|
||
TABI2: XCTR XRW,[CAMN J,(H)]
|
||
JRST TABI3 ;NO WDS TRANSFERRED
|
||
SUB P,[1,,1] ;RETURN TO USER SOME HAVE BEEN TRANSFERRED
|
||
POPJ P,
|
||
|
||
TABCLR: CONO PI,TABOFF
|
||
SETZM TABCC
|
||
MOVEI T,TABBUF
|
||
MOVEM T,TABIP
|
||
MOVEM T,TABOP
|
||
SETZM TABSMC
|
||
SETZM TABLST
|
||
CLEARM TABLSX
|
||
CLEARM TABLSY
|
||
CLEARM TABLSZ
|
||
IFE TABCLK, SETZM TABRTC
|
||
CONO PI,TABON
|
||
POPJ P,
|
||
EBLK
|
||
|
||
TABBUF: BLOCK LTABBF
|
||
TABBFE:
|
||
TABOP: TABBUF ;OUTPUT PNTR (MP)
|
||
TABIP: TABBUF ;INPUT PNTR (PI)
|
||
TABCC: 0 ;ACTIVE WDS IN TAB BUFFER
|
||
TABSMC: 0 ;COUNT OF TIMES "SAME" DATA RECEIVED FOR TAB
|
||
TABLST: 0 ;LAST DATA
|
||
TABLSZ: 0 ;Z OF LAST DATA
|
||
TABLSX: 0 ;X
|
||
TABLSY: 0 ;Y
|
||
TABDTA: 0 ;DELTA FOR COORD TO BE DIFFERENT
|
||
TABRTE: 0 ;TABLET RATE (TAKE EVERY N'TH ONE)
|
||
IFN TABCLK,[TABQBK: 0 ;CLOCK QUEUE BLOCK
|
||
-1
|
||
JRST ITAB
|
||
]
|
||
IFE TABCLK,[
|
||
TABRTC: 0 ;COUNT WITHIN TABRTE
|
||
]
|
||
BBLK
|
||
]
|
||
IFN IMXP,[
|
||
|
||
SUBTTL INPUT MULTIPLEXOR ROUTINES
|
||
|
||
IMPXO: CONI MPX,T
|
||
JUMPE T,OPNL25
|
||
TRNN D,2
|
||
JRST IMPXO2 ;READ AT MN PRGM
|
||
SKIPGE IMPXF ;IMAGE (READ AT PI)
|
||
SETOM MPXWF
|
||
PUSHJ P,IMXON
|
||
IMPXO2: AOS IMXNTO
|
||
HLL A,C
|
||
JSP Q,OPSLD3
|
||
IMXDN,,BIMXDN
|
||
IMPXDN,,BIMPXD
|
||
|
||
IMXON: AOSGE IMPXF
|
||
JRST 4,. ;SHOULD NOT HAVE BEEN LESS THAN -1
|
||
PUSHJ P,CLQAD1 ;START CLOCK LEVEL
|
||
MPXBLK
|
||
POPJ P,
|
||
|
||
BIMPXS: JSP Q,WRDBT
|
||
IMPXS: SKIPGE MPXWF
|
||
PUSHJ P,UFLS
|
||
UMOVE A,(C)
|
||
ANDI A,377
|
||
CAILE A,LCHN
|
||
JRST IMPXS1
|
||
AIMXW5: IDIVI A,3
|
||
LDB A,IMPXT(B)
|
||
UMOVEM A,(C)
|
||
POPJ P,
|
||
|
||
IMPXCL: TRNE A,4 ;SKIP ON WAS READING AT MP
|
||
IMXCL1: SOS IMPXF ;WAS READING AT PI
|
||
SOSGE IMXNTO
|
||
DATAO DSDEVN,[MPX]
|
||
POPJ P,
|
||
|
||
IMPXRS: SETOM MPXWF
|
||
POPJ P,
|
||
|
||
IMPXT: 301400,,MPXBUF(A)
|
||
141400,,MPXBUF(A)
|
||
1400,,MPXBUF(A)
|
||
|
||
BIMXS1: JSP Q,WRDBT
|
||
IMPXS1: UMOVE A,(C)
|
||
TDZE A,[-400]
|
||
JRST IOCER4
|
||
AIMXW4: MOVE T,MPXWF
|
||
CAILE A,LCHN
|
||
MOVNI T,2 ;CHNL NOT READ IN BY PI HACK
|
||
AIMXW2: SKIPL IMXSW
|
||
PUSHJ P,UFLS
|
||
CAME T,MPXWF
|
||
AOJGE T,AIMXW3 ;PI FROB HAS CYCLED (MAYBE)
|
||
AOSE IMXSW
|
||
JRST AIMXW2 ;READING IMX AT PI
|
||
DATAO MPX,A ;SELECT CHNL
|
||
CONO MPX,0 ;START CONVERSION
|
||
MOVEI B,62
|
||
CONSO MPX,10
|
||
SOJG B,.-1
|
||
JUMPE B,IMPXFE
|
||
XCTR XRW,[DATAI MPX,(C)]
|
||
IMX1: SETOM IMXSW
|
||
POPJ P,
|
||
|
||
AIMXW3: SKIPGE MPXWF
|
||
JRST AIMXW4 ;IT WAS JUST SETOMMED
|
||
JRST AIMXW5 ;HAS BEEN READ IN BY PI HACK SO GOBBLE DATA
|
||
|
||
IMPXFE: XCTR XRW,[SETOM (C)]
|
||
JRST IMX1
|
||
|
||
IMPXSR: AOSE IMXSW
|
||
JRST MPXRT1 ;USING IMX AT MN PRGM LVL
|
||
MOVE T,[<-LCHN>/3-1,,MPXBUF-1]
|
||
MOVEM T,MPXPTR ;SET UP BLKI POINTER
|
||
MOVE T,[BLKI MPX,MPXPTR]
|
||
MOVEM T,IMXLC ;SET UP DC INTERUPT LOCN
|
||
MOVE T,[JSR MPXCYC]
|
||
MOVEM T,IMXLC+1 ;SET UP DC INT LOC+1
|
||
DATAO MPX,[0] ;READ STARTING WITH CHNL 0
|
||
CONO MPX,140+DCCHN
|
||
MOVEI T,5 ;12TH SEC
|
||
IFN ARMP,SKIPN ARMF
|
||
SKIPL POTCON
|
||
MOVEI T,2 ;1/30 SEC, HAIRY POTS
|
||
JRST .+2
|
||
MPXRT1: MOVEI T,1 ;LOST RETRY IN 1/60
|
||
MOVEI C,MPXBLK
|
||
SKIPL IMPXF
|
||
JRST CLQREE ;RE-ENTER RQ
|
||
JRST CLQRET ;RETURN
|
||
|
||
EBLK
|
||
|
||
OMXNTO: -1
|
||
IMXNTO: -1
|
||
IMPXF: -1 ;-1 IF MPX NOT RUNNING
|
||
MPXWF: 0
|
||
MPXBLK: 0 ;CLOCK QUEUE BLOCK
|
||
-1
|
||
JRST IMPXSR
|
||
MPXPTR: 0
|
||
IMXST: 0
|
||
IMXSW: -1 ;-1 IF IMX AVAIL
|
||
IMXTBB: LCHN
|
||
MPXBUF: BLOCK <LCHN>/3+1
|
||
IMXTBE==.-1
|
||
|
||
IMXACS: BLOCK 20
|
||
MPXCYC: 0
|
||
|
||
BBLK
|
||
|
||
CONO MPX,0
|
||
SETOM IMXSW
|
||
AOS MPXWF
|
||
MOVEM T,IMXST
|
||
MOVE T,[JSR MPXCYC]
|
||
MOVEM T,IMXLC
|
||
MOVE T,IMXST
|
||
; SKIPGE POTCON
|
||
; SKIPE ARMF
|
||
; JRST MPXCYG
|
||
JRST 12,@MPXCYC
|
||
|
||
MPXCYG: MOVEM 17,IMXACS+17
|
||
MOVEI 17,IMXACS
|
||
BLT 17,IMXACS+16
|
||
IFN ARMP,[
|
||
SKIPE ARMF
|
||
JRST SERVO
|
||
ARMSVR:]
|
||
SKIPL POTCON
|
||
JRST UPOTS
|
||
UPOTRT: MOVSI 17,IMXACS
|
||
BLT 17,17
|
||
JRST 12,@MPXCYC
|
||
]
|
||
IFN OMXP,[
|
||
|
||
SUBTTL OUTPUT MULTIPLEXOR ROUTINES
|
||
|
||
OMPXO: CONI OMPX,T
|
||
JUMPE T,OPNL25
|
||
AOS OMXNTO
|
||
HLL A,C
|
||
JSP Q,OPSLD3
|
||
OMPXDN,,BOMPXDN
|
||
OMXDN,,BOMXDN
|
||
|
||
BOMXDS:
|
||
BOMPXS: JSP Q,WRDBT
|
||
OMXDS:
|
||
OMPXS: XCTR XRW,[DATAO OMPX,(C)] ;ZAP CHNL
|
||
POPJ P,
|
||
|
||
OMPXCL: SOSGE OMXNTO
|
||
DATAO DSDEVN,[OMPX]
|
||
POPJ P,
|
||
|
||
EBLK
|
||
OMXACS: BLOCK 20
|
||
|
||
OMPXBK: 0
|
||
BBLK
|
||
MOVEM 17,OMXACS+17
|
||
MOVEI 17,OMXACS
|
||
BLT 17,OMXACS+16
|
||
IFN VIDP,[
|
||
CONSZ NVDX,700000
|
||
CONSO NVDX,1000
|
||
JRST .+2
|
||
JRST NVDBRK
|
||
]
|
||
IFN ARMP,[
|
||
CONSZ TIPDEV,10
|
||
JRST TIPBRK
|
||
]
|
||
IFN TABP,[
|
||
CONSZ RBTCON,7
|
||
CONSO RBTCON,10
|
||
JRST .+2
|
||
JRST ITAB
|
||
]
|
||
; MOVEI J,OMPCHN
|
||
; JSP E,SPUR ;SPURIOUS INT
|
||
OMXRET: MOVSI 17,OMXACS
|
||
BLT 17,17
|
||
JRST 12,@OMPXBK
|
||
]
|
||
|
||
SUBTTL MORSE CODE SENDER (COD DEVICE)
|
||
|
||
IFN CODP,[
|
||
; CODITC==CODBFL*5-1 ;WHEN TO TRY TO INTERRUPT
|
||
|
||
CLKCOD: SETOM TT ;USED AS A FLAG
|
||
MOVE B,CODWD
|
||
LSH B,-1
|
||
CLKCC3: CAIN B,1
|
||
JRST CLKCC1
|
||
LDB A,[100,,B]
|
||
EXCH A,LSTBIT
|
||
CAME A,LSTBIT
|
||
DATAO 70,LSTBIT
|
||
MOVEM B,CODWD
|
||
MOVE T,CODSPD
|
||
MOVEI C,CODTIM
|
||
JRST CLQTTR ;RE-ENTER OR NOT DEPENDING ON TT
|
||
|
||
CLKCC1: MOVE A,CODCC
|
||
CAIL A,CODBFL*5
|
||
JRST CLKCC5
|
||
CLKCC8: AOS CODCC
|
||
ILDB B,CODPTR
|
||
MOVE A,CODPTR
|
||
CAMN A,[10700,,CODBUF+CODBFL-1]
|
||
HRRI A,CODBUF-1
|
||
HRRM A,CODPTR
|
||
CAIL B,140
|
||
JRST CLKCC2
|
||
CAIGE B,40
|
||
JRST CLKCC1
|
||
MOVE B,CODTBL-40(B)
|
||
JRST CLKCC3
|
||
CLKCC6: MOVE B,CDRUB
|
||
JRST CLKCC3
|
||
CLKCC2: CAIN B,177
|
||
JRST CLKCC6
|
||
SUBI B,137
|
||
MOVEM B,CODSPD
|
||
JRST CLKCC1
|
||
|
||
CLKCC5:
|
||
; CAIN A,CODITC
|
||
; JRST CLKCC7
|
||
MOVEI B,2
|
||
SETZM TT ;INDICATE IDLE
|
||
JRST CLKCC3
|
||
|
||
;CLKCC7: MOVE A,CODUSR ;GET INDEX OF USER
|
||
; MOVE B,CODITB ;GET CHANNELS OPEN MASK
|
||
; AND B,MSKST2(A) ;FIND OUT WHAT CODE CHANNELS ENABLED,
|
||
; MOVNM B,CODITD
|
||
; AND B,CODITD
|
||
; IORM B,IFPIR(A) ;AND REQUEST INTERRUPT ON LOWEST NUMBERED ONE
|
||
; JRST CLKCC8 ;SEND REMAINING CHARACTER(S) IN BUFFER
|
||
|
||
;RETURN HERE FROM STDOPN
|
||
CODO1: POPJ P, ;NON-SKIP RETURN
|
||
AOS (P) ;DO NOT CHANGE TO JRST POPJ1 AT END
|
||
MOVEI I,1 ;INDICATE "IOPOP"
|
||
|
||
;CODE DEVICE IOPUSH AND IOPOP ROUTINE (SETS INTERRUPT MASK)
|
||
|
||
CODIOP: SUBI R,IOCHNM(U) ;GET "AC FIELD" (ROUTINES THAT NEED IT RESTORE R)
|
||
MOVE A,CHNBIT(R) ;SET UP INTERRUPT BIT
|
||
XCT CDPTBL(I) ;IORM OR ANDCAM TO CODITB
|
||
POPJ P,
|
||
|
||
CDPTBL: ANDCAM A,CODITB ;IOPUSH AND CLOSE
|
||
IORM A,CODITB ;IOPOP AND OPEN
|
||
|
||
;COD CLOSE ROUTINE
|
||
CODCLS: MOVEI I,0 ;TO SIMULATE IOPUSH
|
||
PUSHJ P,CODIOP ;CLEAR RELEVANT INTERRUPT BIT
|
||
CONO PI,CLKOFF ;CLOSE, USE STANDARD SEQUENCE
|
||
SOSGE CODUSE
|
||
SETOM CODUSR
|
||
JRST CLKONJ
|
||
|
||
SEND: SKIPGE C
|
||
SKIPA A,(C)
|
||
XCTR XRW,[MOVE A,(C)] ;UNIT OUTPUT
|
||
CAIA
|
||
BSEND: JSP E,NBTOCH ;BLOCK OUTPUT
|
||
ANDI A,177
|
||
CAIN A,"S-100
|
||
JRST CODSSS
|
||
SKIPE CODSSF
|
||
JRST CODSST
|
||
SKIPG CODCC ;WAIT FOR ROOM
|
||
PUSHJ P,UFLS
|
||
IDPB A,CODIPT
|
||
MOVE A,CODIPT
|
||
CAMN A,[10700,,CODBUF+CODBFL-1]
|
||
HRRI A,CODBUF-1
|
||
HRRM A,CODIPT
|
||
SOS CODCC
|
||
MOVE T,CODSPD
|
||
PUSHJ P,CLQADD ;START UP CLOCK LEVEL
|
||
CODTIM
|
||
POPJ P,
|
||
|
||
CODO: PUSH P,[CODO1] ;CODO1 SETS UP INTERRUPT BIT
|
||
JSP Q,STDOPN
|
||
1,,CODUSR
|
||
CODDN,,CODBN
|
||
|
||
|
||
CODSSS: SETOM CODSSF
|
||
POPJ P,
|
||
|
||
CODSST: SETZM CODSSF
|
||
SUBI A,137
|
||
JUMPLE A,CPOPJ
|
||
MOVEM A,CODSPD
|
||
POPJ P,
|
||
|
||
CODRS: CONO PI,CLKOFF
|
||
MOVEI A,CODBFL*5
|
||
MOVEM A,CODCC
|
||
MOVE A,CODIPT
|
||
MOVEM A,CODPTR
|
||
JRST CLKONJ
|
||
|
||
CODFIN: MOVE T,CODBFL*5 ;.CALL FINISH
|
||
CAMLE T,CODCC
|
||
PUSHJ P,UFLS
|
||
POPJ P,
|
||
|
||
EBLK
|
||
CODITB: 0 ;MASK OF CHANNELS OPEN, 1.1=>0
|
||
CODITD: 0 ;RANDOM SCRATCH LOCATION
|
||
CODWD: 2 ;CURRENT WORD
|
||
CODTIM: 0 ;CLOCK QUEUE BLOCK
|
||
-1
|
||
JRST CLKCOD
|
||
CODSPD: 3 ;CODE SPEED (SET FROM CHARS >=140) WPM= 75./(CODSPD)
|
||
CODCC: CODBFL*5
|
||
CODPTR: 440700,,CODBUF
|
||
CODIPT: 440700,,CODBUF
|
||
LSTBIT: 0 ;FLUSH 60 CPS CHIRPS
|
||
CODSSF: 0
|
||
|
||
CODBUF: BLOCK CODBFL
|
||
BBLK
|
||
|
||
DEFINE GCODE A
|
||
BIT=1
|
||
WRD=0
|
||
IRPC B,,[A]
|
||
IFSE B,-,[WRD=WRD+7*BIT
|
||
BIT=BIT_4]
|
||
IFSE B,.,[WRD=WRD+BIT
|
||
BIT=BIT_2]
|
||
IFSE B, ,[BIT=BIT_2]
|
||
TERMIN
|
||
WRD+4*BIT
|
||
TERMIN
|
||
|
||
CODTBL: 20
|
||
GCODE -.-.-
|
||
GCODE .-..-.
|
||
GCODE -. .-.
|
||
REPEAT 2,1
|
||
GCODE . ...
|
||
GCODE .----.
|
||
REPEAT 2,GCODE -.--.-
|
||
GCODE .-.-
|
||
GCODE . ...
|
||
GCODE --..--
|
||
GCODE -....-
|
||
GCODE .-.-.-
|
||
GCODE -..-.
|
||
IRP A,,[-----,.----,..---,...--,....-,.....,-....,--...,---..,----.]
|
||
GCODE A
|
||
TERMIN
|
||
GCODE ---...
|
||
GCODE -.-.-.
|
||
27727 ;K WITH LONG LAST DAH
|
||
GCODE -...-
|
||
GCODE ...-.-
|
||
GCODE ..--..
|
||
GCODE ...-.
|
||
IRP A,,[.-,-...,-.-.,-..,.,..-.,--.,....,..,.---,-.-,.-..,--,-.,---,.--.,--.-
|
||
.-.,...,-,..-,...-,.--,-..-,-.--,--..]
|
||
GCODE A
|
||
TERMIN
|
||
GCODE -.--.
|
||
GCODE -.-..-..
|
||
GCODE .-.-.
|
||
GCODE .-...
|
||
GCODE -.. .
|
||
|
||
CDRUB: GCODE ........
|
||
|
||
EXPUNGE WRD,BIT
|
||
|
||
]
|
||
IFN PLTP,[
|
||
|
||
SUBTTL CALCOMP PLOTTER ROUTINES
|
||
|
||
PLOT: SKIPGE C
|
||
SKIPA A,(C)
|
||
UMOVE A,(C)
|
||
PLOT1: SKIPE A
|
||
CAIN A,EOFCH
|
||
POPJ P,
|
||
SKIPG PLBFS
|
||
JRST PLOTW1
|
||
PLOTW2: IDPB A,PLPTR
|
||
MOVE A,PLPTR
|
||
CAMN A,[600,,PLBUF+LPLBUF-1]
|
||
HRRI A,PLBUF-1
|
||
HRRM A,PLPTR
|
||
SOS PLBFS
|
||
AOSN PLON
|
||
CONO PLT,SDS+PLTCHN
|
||
POPJ P,
|
||
|
||
PUSHJ P,PLOTW3
|
||
PLOTW1: PUSHJ P,UFLS
|
||
JRST PLOTW2
|
||
|
||
PLOTW3: SKIPG T,PLBFS
|
||
POPJ P,
|
||
CAIL T,LPLBUF*5
|
||
JRST POPJ1
|
||
JRST POPJ3
|
||
|
||
BPLOT: MOVEI E,PLOT1
|
||
JRST NBTOCH
|
||
|
||
PLOTO: MOVEI Q,PLOTOC
|
||
PUSHJ P,STDOPN
|
||
POPJ P,
|
||
AOS (P)
|
||
PLOTEL: ;TELL WHO'S USING THE PLOTTER
|
||
BUG INFO,[PLOTTER USER],SIXBIT,UNAME(U),SIXBIT,JNAME(U)
|
||
POPJ P,
|
||
|
||
PLOTOC: 1,,PLTUSR
|
||
PLTDN,,PLTBN
|
||
|
||
PLTRS: MOVEI A,LPLBUF*6
|
||
MOVE B,PLPTR
|
||
CONO PI,LPTOFF
|
||
MOVEM A,PLBFS
|
||
MOVEM B,PLIPTR
|
||
JRST LPTONJ
|
||
|
||
PLTBRK: MOVE A,PLBFS
|
||
CAIN A,LPLBUF*6
|
||
JRST PLSTP
|
||
AOS PLBFS
|
||
ILDB A,PLIPTR
|
||
MOVE B,PLIPTR
|
||
CAMN B,[600,,PLBUF+LPLBUF-1]
|
||
HRRI B,PLBUF-1
|
||
HRRM B,PLIPTR
|
||
ANDI A,77
|
||
LSH A,3
|
||
TRO A,SDC+PDC+SD+PLTCHN
|
||
TRNE A,PUP+PDN
|
||
TRC A,SD#PD
|
||
CONO PLT,(A)
|
||
JRST LPTRT3
|
||
|
||
|
||
PLSTP: CONO PLT,SDC+PDC
|
||
SETOM PLON
|
||
JRST LPTRT3
|
||
|
||
EBLK
|
||
PLBUF: BLOCK LPLBUF
|
||
PLON: -1
|
||
PLPTR: 440600,,PLBUF
|
||
PLIPTR: 440600,,PLBUF
|
||
PLBFS: LPLBUF*6
|
||
IPL: SIXBIT /IPL/ ;FILE NAME 2 OF IPL JOB (USED FOR LOADING ASO JNAME OF IPL JOB)
|
||
IPLU: 0 ;USER INDEX OF IPL JOB IF IT EXISTS OR -1 IF IPL BEING LOADED
|
||
|
||
;INTERPRET PLOTTER OPEN ROUTINE
|
||
BBLK
|
||
IPLO: CONO PI,CLKOFF
|
||
PUSHJ P,IPLST ;INITIATE LOADING OF IPL JOB
|
||
JRST IPLO1
|
||
PUSHJ P,PLOTEL
|
||
CONO PI,CLKOFF
|
||
PUSHJ P,IPLWT ;WAIT FOR IPL JOB TO FINISH LOADING
|
||
PUSHJ P,UFLS
|
||
MOVE T,IPLU ;INDEX OF IPL JOB
|
||
SKIPE IOCHNM(T)
|
||
JRST IPLO2 ;IPL JOB OPNS CLA ON CNNL 0
|
||
MOVE T,SV40(T)
|
||
CAME T,[.SLEEP 17,] ;IPL JOB DOES SLEEP 17, WHEN READY
|
||
IPLO2: JRST OPNL10 ;DEVICE NOT AVAILABLE
|
||
CONO PI,CLKON
|
||
MOVE T,IPLU
|
||
MOVE A,UNAME(T) ;SET UP CLI OPEN
|
||
MOVSI B,(SIXBIT /IPL/)
|
||
PUSHJ P,CLIO
|
||
POPJ P,
|
||
MOVE A,UTMPTR(U)
|
||
MOVE B,IPLU
|
||
MOVEM A,UTMPTR(B)
|
||
JRST POPJ1
|
||
|
||
IPLO1: PUSHJ P,UDELAY
|
||
JRST IPLO
|
||
|
||
IPLST: SKIPL T,IPLU ;MAKE SURE IPL JOB NOT ALREADY BEING LOADED
|
||
PUSHJ P,IPLIN ;MAKE SURE IPL JOB NOT ALREADY IN
|
||
JRST POPJ1 ;DONT LOAD
|
||
HRROI T,IPL
|
||
CONO PI,UTCOFF
|
||
PUSHJ P,NUJBST
|
||
JRST UTCONJ
|
||
JRST UTCOJ1
|
||
|
||
;ROUTINE TO SEE IF IPL JOB WINS. CLKOFF OR CLKBRK IN PROGRESS
|
||
IPLWT: SKIPGE T,IPLU ;CHECK IPL JOB LOADING FLAG
|
||
POPJ P, ;IPL JOB STILL LOADING WAIT
|
||
PUSHJ P,IPLIN ;SEE IF IPL JOB IN CORE
|
||
SKIPE IOCHNM(T) ;SEE IF IPL JOB IN USE
|
||
JRST POPJ1 ;LOSE
|
||
MOVE T,SV40(T) ;SEE IF IPL JOB READY
|
||
CAMN T,[.SLEEP 17,] ;IPL JOB DOES .SLEEP 17, WHEN READY
|
||
AOS (P) ;READY WIN
|
||
POPJ P, ;NOT READY YET, WAIT
|
||
|
||
IPLIN: PUSH P,U ;ROUTINE TO SEE IF IPL JOB IN. C(T)=C(IPLU), CLKOFF OR CLKBRK IN PROGRESS
|
||
CAML T,USRHI
|
||
JRST IPLIN1 ;USER VARIABLES SLOT FLUSHED
|
||
HLRO U,UNAME(T)
|
||
AOJN U,IPLIN1 ;UNAME OF IPL JOB IS -1 (IN LH)
|
||
MOVSI U,(SIXBIT /IPL/)
|
||
CAME U,JNAME(T)
|
||
IPLIN1: AOS -1(P) ;IPL JOB NOT IN, SO SKIP
|
||
POP P,U
|
||
POPJ P,
|
||
|
||
]
|
||
;UTC MUST BE OFF!
|
||
NUJBST: MOVEI TT,MXCZS ;ENTRY FROM ELSEWHERE TO DO SIMILAR THINGS
|
||
SKIPL DEDTIM ;SKIP IF SYS DEAD
|
||
CAMG TT,UTTYCT
|
||
POPJ P, ;RING BUFFER FULL, WAIT
|
||
MOVEM T,@UTTYI
|
||
AOS UTTYCT
|
||
AOS TT,UTTYI
|
||
CAIL TT,UTTYS+MXCZS
|
||
MOVEI TT,UTTYS
|
||
MOVEM TT,UTTYI
|
||
SETOM 1(T) ;SET JOB LOADING FLAG
|
||
JRST POPJ1
|
||
|
||
SUBTTL PDP-6 AS INFERIOR
|
||
|
||
IFN PDP6P,[
|
||
;.IPDP CH,
|
||
;INTERRUPT THE PDP6, I/O CH SHOULD HAVE PDP6 OPEN AS INFERIOR
|
||
;THIS CALL DOESNT SKIP OR INTERRUPT TO THE USER
|
||
|
||
AIPDP: MOVSI T,%CLS6
|
||
SKIPGE A,(R)
|
||
TDNN T,CLSTB(A)
|
||
POPJ P,
|
||
CONO PI,LPTOFF
|
||
CONI DSDEV,T
|
||
ANDI T,7
|
||
CONO DSDEV,20(T)
|
||
JRST LPTONJ
|
||
|
||
;PDP-6 DEVICE
|
||
;INTERRUPT FROM PDP6, MAYBE GENERATE IO CHANNEL USER INTERRUPT
|
||
|
||
DSDBRK: CONO DSDEV,10 ;TURN OFF FLAG
|
||
;ALSO KEEP IT FROM INTERRUPTING FOR A WHILE
|
||
;GETS TURNED ON AT DISMISS, SETOM PICLR AND SLOW CLK
|
||
SKIPGE A,PDPISR
|
||
JRST LPTRT3 ;NO ONE WANTS AN INT
|
||
MOVE B,PDPMSK
|
||
AND B,MSKST2(A)
|
||
MOVNM B,PDPTMP
|
||
AND B,PDPTMP
|
||
IORM B,IFPIR(A) ;GENERATE USER INT
|
||
JRST LPTRT3
|
||
|
||
;PDP6 .OPEN ROUTINE (GET HERE FROM USR OPEN)
|
||
|
||
PDPO: SKIPL PDP6UP ;MAKE IT EASY TO MARK PDP6 AS DOWN.
|
||
JRST OPNL10
|
||
TLNN C,20
|
||
JRST PDPO1 ;DON'T TRY TO ENABLE INTERRUPTS
|
||
TLO C,400000 ;TRY TO ENABLE INTERRUPTS
|
||
SKIPL PDPISR
|
||
CAMN U,PDPISR
|
||
JRST PDPO1
|
||
JRST OPNL12
|
||
|
||
PDPO1: PUSH P,U
|
||
PUSHJ P,PDPO2
|
||
JRST POPUJ
|
||
AOS -1(P)
|
||
POP P,U
|
||
SKIPL (R)
|
||
JRST .+3
|
||
AOS PDPISE
|
||
MOVEM U,PDPISR;GOT IT AS INFERIOR
|
||
PUSHJ P,LSWPOP ;RELEASE TREESW
|
||
MOVEI I,1 ;DO "IOPOP" INTO CHNL
|
||
|
||
PDPIOP: SKIPL (R)
|
||
POPJ P, ;NOT OPEN TO INTERRUPT
|
||
SUBI R,IOCHNM(U)
|
||
MOVE A,CHNBIT(R)
|
||
ADDI R,IOCHNM(U) ;RESTORE R
|
||
XCT PDPIOT(I)
|
||
POPJ P,
|
||
|
||
PDPIOT: ANDCAM A,PDPMSK
|
||
IORM A,PDPMSK
|
||
|
||
PDPCLS: MOVEI I,0 ;CLOSE
|
||
PUSHJ P,PDPIOP ;=> DO "IOPUSH"
|
||
PDPCL1: CONO PI,CLKOFF
|
||
SOSGE PDPUSE
|
||
SETOM PDPUSR ;LAST CHANNEL CLOSED
|
||
SKIPL (R)
|
||
JRST CLKONJ ;NOT INTERRUPT ENABLED THIS CHNL
|
||
SOSGE PDPISE
|
||
SETOM PDPISR ;LAST CHANNEL CLOSED
|
||
JRST CLKONJ
|
||
|
||
|
||
PDPO3: MOVEI U,(A) ;MAKE U INDEX OF SUPERIOR
|
||
PDPO2: SKIPL A,SUPPRO(U) ;GET POINTER TO SUPERIOR, SKIP IF TOP LEVEL
|
||
JRST PDPO3 ;TRY AGAIN
|
||
HLRZ D,C
|
||
TLO C,200000 ;SIGNAL PDP6 TO UBI ETC
|
||
JSP Q,STDOPN
|
||
3,,PDPUSR
|
||
PDPUII,,PDPUIO
|
||
PDPBII,,PDPBIO
|
||
|
||
;.UCLOSE PDP6
|
||
PDPUCL: MOVSI C,%CLS6 ;GET PDP6 CLSTB BIT
|
||
MOVEI R,IOCHNM(U) ;GET PNTR TO USER'S IO CHNL AREA
|
||
HRLI R,-20 ;MAKE AOBJN PNTR TO ALL CHNLS
|
||
PUSHJ P,PDPCCK ;CHECK CHNL
|
||
PUSHJ P,PDPCZP ;CLOSE CHNL IF PDP6 OPEN ON IT
|
||
AOBJN R,.-2 ;REPEAT FOR ALL CHNLS
|
||
HRLI R,-LUIOP/2 ;MAKE AOBJN PNTR TO IO PDL (ADR ALREADY THERE)
|
||
PUSHJ P,PDPCCK ;CHECK ENTRY FOR PDP6
|
||
PUSHJ P,PDPPZP ;CLEAR ENTRY IF PDP6 CHNL
|
||
AOJ R, ;INCR TO SKIP IOCHST ENTRY
|
||
AOBJN R,.-3 ;REPEAT FOR WHOLE IO PDL
|
||
POPJ P, ;ALL PDP6 CHNLS THIS JOB SHOULD NOW BE CLOSED
|
||
|
||
PDPCCK: HRRZ B,(R) ;GET CLSTB INDEX FROM IOCHNM
|
||
TDNN C,CLSTB(B) ;IF NOT PDP6 CHNL
|
||
AOS (P) ;SKIP CLOSING CHNL
|
||
POPJ P,
|
||
|
||
;CLOSE PDP6 USER CHNL
|
||
PDPCZP: PUSHJ P,PDPCLS ;ADJUST PDP6 VARS
|
||
JRST STDCLX ;CLOBBER CHNL & RETURN
|
||
|
||
;CLEAR PDP6 IO PDL ENTRY
|
||
PDPPZP: PUSHJ P,PDPCL1 ;ADJUST PDP6 VARS (EXCEPT PDPMSK)
|
||
SETZB A,(R) ;CLEAR SAVED IOCHNM
|
||
DPB A,[4000,,1(R)] ;CLEAR SAVED IOCHST (SAVING CHNL # FOR .IOPDL)
|
||
POPJ P,
|
||
PDPCLR: OFFSET 20-. ;ROUTINE TO BE MOVED
|
||
CONO PI,11577 ;CLEAR PI
|
||
CONO 655550 ;CLEAR PROCESSOR
|
||
DATAO 20,.+1 ;RELEASE DEVICES
|
||
SETZ ;CLEAR 0, ALSO BIT FOR DEASSIGNMENT (^)
|
||
HRRZI 1,1 ;BLT POINTER 0,,1
|
||
BLT 1,41 ;CLEAR AC'S, SELF, AND 41
|
||
PDPCLE==.
|
||
OFFSET 0 ;BACK TO NORMAL
|
||
EBLK
|
||
|
||
PDPTMP: 0 ;TEMP FOR INT
|
||
PDPMSK: 0 ;MASK OF INT BITS OF CHNLS OPEN
|
||
|
||
BBLK
|
||
|
||
PDPRST: PUSHJ P,MP6LD
|
||
MOVE C,[400020,,400021]
|
||
XCTR XW,[CLEARM 400020]
|
||
XCTR XBRW,[BLT C,437777]
|
||
MOVE C,[PDPCLR,,400020]
|
||
XCTR XBW,[BLT C,400000+PDPCLE-1]
|
||
MOVE C,[JRST 20]
|
||
UMOVEM C,400041
|
||
PUSHJ P,UDELAY
|
||
UMOVE A,400041
|
||
JUMPE A,PDPRS2 ;JUMP ON ROUTINE WON, DON'T HAVE TO CLEAR IT OUT
|
||
XCTR XW,[CLEARM 400020]
|
||
MOVE C,[400020,,400021]
|
||
XCTR XBRW,[BLT C,400041]
|
||
PDPRS2: JRST MPLDZ
|
||
];IFN PDP6P
|
||
|
||
SUBTTL DL10MP SYSTEM CALL
|
||
|
||
IFN DL10P,[
|
||
;.CALL DL10MP
|
||
; ARG 1 - PAGE #
|
||
;CREATES A READ/WRITE, UNENCACHED, ABSOLUTE PAGE AT THAT POINT
|
||
;IN THE USER'S MAP. THE PAGE CONTAINS THE DL10 CONTROL AREA.
|
||
; VAL 1 - AOBJN POINTER TO DL10 CONTROL AREA WITHIN PAGE
|
||
; VAL 2 - POINTER TO 3 WORDS USED FOR PDP11 EXAMINE/DEPOSIT COMMANDS
|
||
; VAL 3 - POINTER TO FIRST FREE WORD WITHIN DL10 CONTROL AREA
|
||
|
||
DL10MP: TDNE A,[-400]
|
||
JRST OPNL33 ;PAGE NUMBER TOO BIG
|
||
PUSHJ P,UPLC
|
||
LDB C,Q ;GET CIRC POINTER
|
||
CAIE C,-1
|
||
JUMPN C,OPNL13 ;PAGE SLOT ALREADY IN USE
|
||
BUG INFO,[DL10MP BY],SIXBIT,UNAME(U),SIXBIT,JNAME(U)
|
||
MOVEI C,600000+<DL10AR_-10.> ;SUITABLE PTW
|
||
DPB C,T
|
||
MOVEI C,-1 ;ABS CIRC PNTR
|
||
DPB C,Q
|
||
CLRPGM (U)
|
||
LSH A,10. ;USER'S VIRTUAL ADDRESS
|
||
ADDI A,2000
|
||
CAMLE A,HUSRAD(U)
|
||
MOVEM A,HUSRAD(U)
|
||
SUBI A,2000-<DL10AR&1777> ;VIR ADDR OF START OF DL10 CONTROL AREA
|
||
HRLI A,-100 ;SIZE OF DL10 CONTROL AREA
|
||
MOVEI B,DL10XD-DL10AR(A)
|
||
MOVEI C,DLXEND-DL10AR(A)
|
||
JRST POPJ1
|
||
];DL10P
|
||
|
||
SUBTTL TRAP DEVICE
|
||
|
||
;.CALL TRPOPN
|
||
; ARG 1 - <JOB> SPEC
|
||
; ARG 2 - CHANNEL NUMBER IN THAT JOB TO BE OPENED AS TRAP DEVICE
|
||
; ARG 3 - IOCHNM WORD (ONLY LH IS USED)
|
||
; ARG 4 - IOCHST WORD
|
||
;THIS GIVES THE INFERIOR A TRAP DEVICE CHANNEL, WHICH GIVES
|
||
;A %PITRP INTERRUPT ON MOST OPERATIONS. THE INFERIOR SIGNALS
|
||
;ITS DESIRE TO GET SUCH A CHANNEL BY OPENING THE TRAP DEVICE,
|
||
;WHICH ALSO GIVES A %PITRP INTERRUPT.
|
||
;TRPOPN IS ALSO USEFUL FOR STORING ERROR CODES INTO IOCHST OF AN ALREADY-OPEN TRAP CHANNEL
|
||
|
||
TRPOPN: TDNE B,[-NIOCHN]
|
||
JRST OPNL14 ;BAD CHANNEL NUMBER
|
||
MOVE J,A
|
||
JSP T,NCORUI
|
||
JFCL
|
||
IFN PDP6P,[
|
||
CAIN J,-1
|
||
JRST OPNL34
|
||
];PDP6P
|
||
JSP T,NCORWR
|
||
JRST OPNL31 ;CAN'T MODIFY JOB
|
||
ADDI B,IOCHNM(J) ;GET IOCHNM WORD ADDRESS
|
||
HRRZ T,(B)
|
||
CAIE T,DNTRAP
|
||
JUMPN T,OPNL13 ;FILE ALREADY EXISTS (YOU MUST CLOSE THE CHANNEL FIRST)
|
||
HRRI C,DNTRAP
|
||
MOVEM C,(B)
|
||
MOVEM D,IOCHST-IOCHNM(B)
|
||
JRST LSWPJ1 ;UNLOCK DIELOK, TAKE SUCCESS RETURN
|