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 $-$-$