File: CB.TK of Disk: Disks/MyPDP/m8-blue-rka1-rkb1
(Source file text) 

/CB.TK 12-JUN-80

/THIS MODULE INTERPRETS THE INPUT THAT THE INPUT READER
/OF A BACKGROUND HAS ACCUMULATED. IT IS ENTERED WITH
/A POINTER TO THE BACKGROUNDS DATA AREA IN THE AC.
/IT READS THE COMMAND FROM THE NORMAL INPUT BUFFER.
/COMMANDS:
/
/AC 1234		SET THE BACKGOUNDS AC
/BOOT			BOOTSTRAP OS/8 FOR THIS BG
/CONTINUE		CONTINUE BG EXECUTION
/DELAY 1,215		SUPPLY 1 FILLER AFTER 215
/ESCAPE 376		ON INPUT, CONVERT 376 TO 233
/FIELD 12		SET THE BG INSTRUCTION AND DATAFIELD
/HOOK BG5		HOOK THIS TERMINAL TO BG # 5
/KILL			RESTART THE BG AT 7600, FIELD 0
/LEFT 225		ON OUTPUT CONVERT 210 (BACKSPACE) TO 225
/PC 1234		SET PC TO 1234
/QUIT			RUNS EXIT TASK OF MULTI-8
/RESTORE		RELOAD OS/8 ON THE BACKGROUND DISK
/SWITCH 1234		SET USERS SWITCH REGISTER TO 1234
/TALK			RUNS TALK TASK
/WHERE			RUNS THE CURRENT STATUS PRINTER OF THIS BG
/ZAP			DISCARD CURRENT LPT SPOOL OUTPUT FILE
/
/THE COMMANDS ARE RECOGNISED ON THE FIRST CHARACTER ONLY,
/THEN THE INPUT IS SCANNED FOR A NUMBER.
	"C^100+"B&3777	/NAME IS "CB"
	600		/THREE PAGE, NO CONNECTS
/JUMP TABLE FOR COMMAND A-Z
	CBAC		/A AC=1234
	CBBOOT		/B BOOT
	CBXIT		/C CONTINUE
	CBDELAY		/D DELAY 3 FILLERS FOR 212
	CBESCAPE	/E ESCAPE FROM THIS TERMINAL IS 275
	CBFIELD		/F FIELDS=33
	CBERROR		/G -
	CBHOOK		/H HOOK BG3
	CBERROR		/I -
	CBERROR		/J -
	CBKILL		/K KILL
	CBLEFT		/L LEFT (BACKSPACE) = 225
	CBERROR		/M -
	CBERROR		/N -
	CBERROR		/O -
	CBPC		/P PC=7600
	CBQUIT		/Q QUIT (LEAVE MULTI8/SINGL8)
	CBRESTOR	/R RESTORE OS8 ON THIS BG
	CBSWITCH	/S SWITCHREGISTER=7700
	CBTALK		/T TALK 1:BLA BLA BLA (NYI)
	CBERROR		/U -
	CBERROR		/V -
	CBWHERE		/W WHERE IS MY BG ?
	CBERROR		/X -
	CBERROR		/Y -
	CBZAP		/Z ZAP THE LPT SPOOLER OUTPUT
CBLIST,	.-1		/WILL BE ABSOLUTISED BY OUR DEAR MONITOR
XCBPUT,	CBPUT
CBCOMND,.
CBNUMB,	0
CB,	DCA BASE	//USES SAME ZTEM AS RESIDENT CODE
	JMS CBREAD	//GET THE FIRST CHARACTER
	TAD M215	/EMPTY LINE ?
	SNA
	 JMP CBNEXT	/YES, IGNORE THIS LINE
	TAD C215
	DCA CBCOMND	/IT DETERMINES THE ACTUAL COMMAND
CBLOOP,	JMS CBREAD
	TAD M215
	SNA
	 JMP CBRNCH	/END OF LINE: DO IT NOW
	TAD (215-230	/SEE IF IT IS A NUMBER
	SMA
	 JMP CBLOOP	/NO, SKIP IT
	TAD (10
	SPA
	 JMP CBLOOP	/NOT OCTAL, SKIP IT
	DCA ZTEM1
	TAD CBNUMB	/CBNUMB STARTS OFF ZERO
	CLL RTL
	RAL
	AND C7770
	TAD ZTEM1
	DCA CBNUMB	/WE HAVE TAKEN THE NEW OCTIDE IN ACCOUNT
	JMP CBLOOP	/SEE IF THERE'S MORE

CBRNCH,	TAD CBCOMND	/GET COMMAND CHARACTER
	TAD (-"A	/RANGE CHECK A-Z
	SPA		/
	 JMP CBERROR	/
	TAD ("A-"Z	/
	SMA SZA		/
	 JMP CBERROR	/
	TAD CBLIST	/ADD END OF JUMP TABLE
	JMS DEFER	/GET JUMP ADDRESS
	DCA X		/
	JMP I X		/AND JUMP !
CBREAD,	0		/READ A CHAR FROM INPUT BUFFER
	CLA CLL
	CDTOIF
	CIF 10
	JMS I (MTQ
	   UBUFIN
	 JMP CBERROR
	AND (337	/KILL LOWERCASE BIT
	JMP I CBREAD

CBAC,	TAD CBNUMB	/STORE CBNUMB IN USERS AC
	JMS I XCBPUT
	   UAC
	JMP CBNEXT	/ASK FOR NEW COMMANDS

CBSWITCH,TAD CBNUMB
	JMS I XCBPUT
	   USW
	JMP CBNEXT	/ASK FOR MORE

CBPC,	TAD CBNUMB
	JMS I XCBPUT
	   UPC		/DROP IN HIS PC
	JMP CBNEXT

CBFIELD,TAD CBNUMB
	AND (6077	/LINK, GTF AND FIELD BITS
	TAD (100	/SET USERMODE
	JMS I XCBPUT
	   UFLDS
	CDF 10
	DCA I (BJOB	/MAKE SURE MEMORY MANAGEMENT IS RELOADED
CBNEXT,	AC0001		/1 IS GET-NEXT-COMMAND RETURN
CBXIT,	JMS MONITOR
	   EXIT SWPOUT
CBERROR,ACM1		/SEVERAL ERRORS SHOW ?
	JMP CBXIT
CBKILL,	TAD C7600
	JMS I XCBPUT
	   UPC
	AC0100		/SET USERMODE, FIELD 00
	JMS I XCBPUT
	   UFLDS
	CDF 10
	DCA I (BJOB	/MAKE SURE MEMORY MANAGEMENT IS RELOADED
	JMP CBXIT	/AND START THE BG

CBZAP,	JMS MONITOR	/STOP THE LP SPOOLER AND
	   BREAK	/DISCARD THE CURRENT OUTPUT FILE
	   "P^100+"S&3777
	 NOP		/IGNORE ERRORS
	JMP CBNEXT	/OTHER COMMANDS ?

PAGE
BOXDTV,	BODTV		/RELOCATED POINTER
BOLAMP,	CBLAMP
BOUSTAT,0		/POINTER TO STATUS WORD

/TRANSFERVECTOR:
BODTV,	0400
	7000
	0040		/OS/8 SCRATCH BLOCK

FLAG,	0

CBREST,	ISZ FLAG	/RESTORE
CBBOOT,	CDF 10		/BOOT
	TAD BASE
	DCA BOUSTAT
	TAD I BOUSTAT	/LOOK IF WE CAN DO IT
	AND (INACTIVE+EMULATE+INCORE
	SMA SZA
	 JMP BOERR	/NO, BG IS UNSAFE
	SMA CLA
	 JMP BOOTOK	/HE'S RUNNING, PROCEED
	TAD BOUSTAT	/HE'S INACTIVE. IS THAT SAFE ?
	TAD (UCUR
	JMS DEFER
	TAD M4		/ADDRESS OF BACKLINK OF CE
	CDF 0		//
	JMS DEFER	//
	CDF 10		/
	SZA CLA		/IF HE DID EXIT, IT'S OK
	 JMP BOERR	/NOGO, TO DANGEROUS
BOOTOK,	TAD I BOUSTAT	/REQUEST FIELD 0 IN CORE
	AND (-INACTIVE-EMULATE-BGSTOP-INCORE-1
	TAD (INCORE	/SET INCORE
	DCA I BOUSTAT
	JMS MONITOR	/GO AND TELL THE BG SCHEDULER
	   SIGNAL
	   BSSLOT
	TAD BOUSTAT	/FIND SLOT TO WAIT
	TAD (USLOT
	JMS DEFER
	DCA BOSLOT
	JMS MONITOR	/WAIT FOR BG IN CORE
	   WAIT
BOSLOT,	   0		/OVERLAID WITH CORRECT SLOT#
	TAD BODTV	/GOT REAL FIELD IN 6-8
	DCA BODTV	/SET FUNCTION WORD
	CDTOIF		/THE ACTUAL TRANSFER-AND-WAIT
	TAD BOXDTV
	JMS MONITOR
	   CALL
	   "S^100+"Y&3777
	 JMP .-3	/BUSY? REPEAT
	DCA .+3		/SAVE SLOT TO WAIT FOR
	JMS MONITOR
	   WAIT
	   0
	CDF 10
	SZA CLA
	 JMP BOERR
	AC0002		/TAD (UPC-1
	TAD BOUSTAT
	DCA AUTO10
	TAD (7200
	TAD FLAG	/ADD 1 IF RESTORE
	DCA I AUTO10	/RESET PC
	AC0100
	DCA I AUTO10	/RESET FIELDS WORD
	DCA I AUTO10	/AND THE AC
	TAD BODTV
	AND C70
	TAD C6201
	DCA BOCDF1
	TAD BOUSTAT
	TAD (UCHNL0+1-1
	DCA AUTO10
	TAD I AUTO10	/GET DEVICE TYPE
	AND C7770	/DISCARD UNIT #
BOCDF1,	  HLT		//
	DCA I (7000	//PUT IN 'BGNUMB'
	CDF 10		//
	TAD ("S^100+"Y&3777	//TASK FOR DSK0
	DCA I AUTO10	//
	TAD (6500	//TYPE AND UNIT FOR DSK0
	DCA I AUTO10	//
	TAD FLAG	//WAS THIS A RESTORE ?
	SNA CLA
	 JMP CBNORS	//NO, LEAVE CHANNELS AS DEFINED
IFDEF SINGL8 <
	TAD ("D^100+"K&3777	//TASK FOR DSK1: >
	DCA I AUTO10	//
IFDEF SINGL8 <
	TAD (6511	//TYPE AND UNIT FOR DSK1: >
	DCA I AUTO10	//
IFDEF SINGL8 <
	TAD ("D^100+"K&3777	//TASK FOR DSK2: >
	DCA I AUTO10	//
IFDEF SINGL8 <
	TAD (6522	//TYPE AND UNIT FOR DSK2: >
	DCA I AUTO10	//
CBNORS,	TAD (-EMULATE-1	//CLEAR EMULATE BIT
	AND I BOUSTAT	//
	DCA I BOUSTAT	//
	TAD	BOUSTAT	//WITH BASE IN AC
	JMP I	BOLAMP	//GO LIGHT THE LEDS

BOERR,	 ACM1
	JMS MONITOR
	   EXIT SWPOUT

CBPUT,	0		/SUBROUTINE TO STORE IN BG-DATA
	DCA MONITOR	/STORE TEMPORARY
	TAD I CBPUT
	TAD BASE
	DCA X
	TAD MONITOR
	CDF 10
	DCA I X
	CDTOIF
	ISZ CBPUT
	JMP I CBPUT

PAGE
XCBNUMB,	CBNUMB
	0

CBHOOK,
IFNDEF SINGL8 <
	TAD I XCBNUMB	/NUMBER OF BG TO HOOK TO
	SPA SNA		/RANGE TEST
	 JMP CBBAD	/TOO SMALL
	TAD (-BGMAX-1	/
	SMA CLA		/
	 JMP CBBAD	/TOO LARGE
	TAD I XCBNUMB	/GET THE NUMBER AGAIN
	CIA		/MAKE IT NEGATIVE >
IFDEF SINGL8 <
	TAD BASE	/WHAT BG ARE WE NOW ?
	TAD (UNUMB	/
	CDF 10		//
	JMS DEFER	//
	AND (1		//
	CMA		//SWITCH TO THE OTHER BG >
	DCA ZTEM1	/FOR USE AS A COUNTER
	CDF 10		//W'RE GOING TO ADDRESS BG TABLES
	TAD (BGDATA	//START WITH BG1
	JMP .+3		//
	TAD (UNEXT	//GET POINTER TO NEXT BG
	JMS DEFER	//
	ISZ ZTEM1	//GOT HIM ?
	 JMP .-3	//NO, TRY NEXT ONE
	DCA ZTEM2	//REMEMBER THE NEW BG
	TAD ZTEM2	//
	TAD (UKB	//YES, GET HIS KB TCBP
	JMS DEFER	//
	SZA CLA		//IS IT DETACHED ?
	 JMP CBBAD	//NO, LEAVE IT
	TAD BASE	//OK, NO MOVE OUR TTY TCBPS
	TAD (UKB	//
	DCA ZTEM1	//CAN'T USE DEFER, NEED X
	TAD I ZTEM1	//GET TCBP OF KB
	DCA I X		//AND STORE IT IN THE NEW BG
	DCA I ZTEM1	//DETACH OLD BG
	ISZ ZTEM1	//ADDRESS UTTY
	ISZ X		//
	TAD I ZTEM1	//TO GET OUTPUT TO THE TERMINAL
	DCA I X		//
/	DCA I ZTEM1	//STOP OUTPUT FROM DETACHED BG
	TAD ZTEM2	//BASE OF NEW BG
CBLAMP,	JMS MONITOR	//LET LA SWITCH LAMPS
	   RUN
	   "L^100+"A&3777
	 JMP .-3	//BUSY, MUST COME THRU
	JMP CBOKAY	//OK RETURN
CBDELAY,TAD I XCBNUMB	/GET THE NUMBER
	DCA ZTEM1	/THAT'S JUST A NICE PLACE TO KEEP IT
	JMS SETUP	//GET POINTER TO TTY TABLE
	TAD (TTFCHR	//OFFSET TO FILLER CHARACTER
	DCA X		//
	TAD ZTEM1	//GET USER INPUT
	AND (377	//THIS PART IS THE NEW CHARACTER
	CIA		//BUT MAKE IT NEGATIVE
	DCA I X		//BEFORE YOU STORE IT IN THE TABLE
	ISZ X		//THIS SHOULD GIVE US THE FILLER COUNT
	TAD ZTEM1	//USERS INPUT AGAIN
	CLL RTL		//
	RTL		//BITS 0-2 INTO 9-11
	AND C7		//CLEAN UP
	CIA		//COUNTERS ARE NEGATIVE USUALLY
	DCA I X		//NEW FILL COUNT
	JMP CBOKAY	//DONE !

CBLEFT,	TAD I XCBNUMB	/GET USER INPUT
	DCA ZTEM1	/
	JMS SETUP	//GIVES POINTER TO TTY TABLE IN AC
	TAD (TTBACK	//OFFSET TO BACKSPACE CHAR
	DCA X		//THIS LOC CONTAINS XCODE-210
	TAD ZTEM1	//USERS INPUT
	AND (377	//JUST TO HELP HIM A BIT
	TAD (-210	//
	DCA I X		//SET HIS NEW BACKSPACE CODE
	JMP CBOKAY	//DONE

CBESCAPE,TAD I XCBNUMB	/
	DCA ZTEM1	/SEE ABOVE
	CDF 10		//
	TAD BASE	//
	TAD (UKB	//
	JMS DEFER	//GET TCBP OF KB HANDLER
	TAD M1		//FOR BLOCK #
	CDF 0		//
	JMS DEFER	//GET POINTER TO DATA TABLE
	CDF 10		//
	TAD (KKESCP	//OFFSET TO ESCAPE CELL
	DCA X		//THIS LOC CONTAINS -ESCAPE CODE
	TAD ZTEM1	//USER INPUT
	AND (377	//JUST TO HELP HIM
	CIA		//FOR COMPARE
	DCA I X		//THAT SETS HIS NEW ESCAPE CODE
CBOKAY,	SKP CLA		//
CBBAD,	ACM1		//
	JMS MONITOR
	   EXIT SWPOUT
SETUP,	0
	CDF 10		//
	TAD BASE	//
	TAD (UTTY	//
	JMS DEFER	//GET TCBP OF TTY HANDLER
	CDF 0		//LOTS OF VOLATILE STUFF HERE !!!
	TAD M1		//GOING TO ACCESS HIS BLOCK #, WHICH
	JMS DEFER	//ACTUALLY IS HIS DATA POINTER
	CDF 10		//
	JMP I SETUP	//

BE="B^100+"E&3777
EX="E^100+"X&3777
TK="T^100+"K&3777

CBWHERE,TAD (BE-EX	/BACKGROUND ERROR PRINT
CBQUIT,	TAD (EX-TK	/BACK TO OS/8 TASK
CBTALK,	TAD (TK		/READ-TOO-BROADCAST TASK
CBRUN,	DCA RUNNAM	/RUN VARIOUS TASKS
	CDF 10		//
	TAD BASE	//
	JMS MONITOR	//
	   RUN		/DO A RUN WE STILL WANT TO DO SOMETHING
RUNNAM,	   0		/GETS "X^100+"Y&3777 NAME
	 JMP CBBAD	//BUSY ERROR
	JMS MONITOR	//NOW WE STALL CB FOR A WHILE
	   STALL	//THIS LETS RUNNED TASKS FILL OR BLOCK
IFNDEF SYRX02 <DGNTICK%2//THE TTO HANDLER: OUR B> WILL FOLLOW >
IFDEF SYRX02 <DGNTICK	//THE TTO HANDLER: OUR B> WILL FOLLOW >
	AC0001		//GET NEXT COMMAND
	JMP CBBAD+1	//NORMAL RETURN

	PAGE
	$-$-$