File: OS8.PA of Tape: Sources/RTS/s3
(Source file text)
/OS/8 SUPPORT TASK FOR RTS-8 WM TASK= OS8 CUR= 0 INIWT= 0 PARTNO= 0 CPABLE= 1 WRITE= 1 TS8LOC= 200 /LOCATION IN RTS-8 CINT= 6204 /CLEAR USER INTERRUPT FF SINT= 6254 /SKIP ON USER INTERRUPT CUF= 6264 /CLEAR USER BUFFER FF. SUF= 6274 /SET USER BUFF.FF.;NO INTS TILL JMPS;UBFF>USER FIELD FF. DPSZ= 7451 /FOR EAE MODE TEST KSFX= OSKBDV^10+6001 KCCX= OSKBDV^10+6002 KRSX= OSKBDV^10+6004 KRBX= OSKBDV^10+6006 TSFX= OSTTDV^10+6001 TCFX= OSTTDV^10+6002 TSKX= OSTTDV^10+6005 TLSX= OSTTDV^10+6006 PSKF= 6661 /LINE PRINTER IOT'S PSKI= 6665 /FOR MODIFIED TTY INTERFACE PSLS= 6666 PSSE= 6651 /SKIP ERROR PSCE= 6652 /CLEAR ERROR PSIE= 6655 /SET/CLEAR INTENA /LINE PRINTER OUTPUT ROUTINE - USES RTS-8 LPT DRIVER IFDEF LPT < XLLS, TAD AC DCA I LPBUF /STORE CHAR IN LPT MESSAGE BUFFER ISZ LPBUF TAD AC AND (177 TAD (-15 /CHECK TO SEE IF THE CHARACTER CLL TAD (3 /IS A FORMS MOVEMENT CHARACTER ISZ LPBUFC /(I.E. LF,VT,OR FF) SZL CLA /OR IF THE MESSAGE BUFFER IS FULL SKP CLA JMP I (XNOP /NEITHER - RETURN TO OS/8 JOB DCA I LPBUF /ZERO IS THE BUFFER END CODE CAL SENDW /MOVE THE BUFFER TO THE LINE PRINTER LPT LPMESG TAD (LPTBUF DCA LPBUF /RE-INITIALIZE THE BUFFER PPOINTER TAD (-LPTCNT DCA LPBUFC /AND COUNTER JMP I (XNOP /AND CONTINUE LPBUF, LPTBUF LPBUFC, -LPTCNT /THIS MUST GO SOMEWHERE ELSE IN A RESIDENT PART /LPTCNT= /AS MUCH AS I CAN SPARE RIGHT NOW /LPMESG, ZBLOCK 3 / 6000 /UNPACKED ASCII, NO CRLF / 0 /DUMMY INPUT BUFFER WORD /LPTBUF, ZBLOCK LPTCNT+1 /ASSURE A ZERO AT THE END > FIELD 0 *5200 /TABLE OF CORRESPONDENCES BETWEEN OS/8 CODE NUMBER AND TASK NUMBER HNDTAB, ZBLOCK 20 /FIRST WORD IS UNUSED - MUST BE 0 FLAGS, /LIST OF ALL OS8 FLAGS TSFEF, 0 /TTY OUTPUT FLAG KSFEF, 1 /TTY INPUT FLAG NFLAGS= .-FLAGS CAFLGS, 0 /SUB EMULATING 'CAF'; CLEAR FLAGS ETC. DCA AC DCA IONSW /IOF DCA INTSW /NO INTERRUPT REQUESTS TAD (DEVSTA-1 DCA UTEMP TAD (FLAGS-1 DCA OP CAFLOP, ISZ UTEMP /LOOP FOR SETTING INITIAL IONOFF TAD I UTEMP SNA JMP I CAFLGS /0 IS END OF DEVSTA LIST AND (3777 /KILL ION BIT CLL RAL SPA /TEST INIT ION BIT STL /SET ION RAR DCA I UTEMP TAD I UTEMP /GET # OF FLAGS TO CLEAR AND K7 CIA DCA CHKINT ISZ OP CLA IAC DCA I OP ISZ CHKINT /SET ALL FLAGS TO SLEEP JMP .-4 JMP CAFLOP /NEXT DEVICE /FORMAT OF DEVSTA LIST: 2000 IF INIT ION + 000N /N=NUMBER OF FLAGS PER DEVICE,BITS 3-8 FREE FOR FUTURE USE? DEVSTA, 2000+2 /DEVICE # 1 = TTY 0 /END OF LIST XCAF, JMS CAFLGS /USE ROUTINE ALSO USED BY OS8BOOT JMP I (XNOP /TASK ONE LEVEL HIGHER THAN OS8 TO RECOGNIZE INTERRUPTS TASK2= OS8I CUR2= 0 INIWT2= 0 START2, CAL WAITE OS8INT /INITIALIZED TO 1 ISZ OS8INT TAD IONSW /INTERRUPT ON? SNA CLA JMP START2 /NO IGNORE; FLAG ALREADY SET STA DCA INTSW /YES; SET INTERRUPT REQUEST TAD USERSW /ARE WE OUT OF CONTROL? SNA CLA /NO; INTERPRETING : WILL CATCH INTSW ON EXIT JMP START2 DCA USERSW /YES; DERAIL OS8 INTO CONTROL TAD I (OS8^4+TSTABL AND (6000 DCA LNKGT DCA I (OS8^4+TSTABL TAD I (OS8^4+TSTABL+1 DCA PC TAD (GOBACK DCA I (OS8^4+TSTABL+1 TAD I (OS8^4+TSTABL+2 DCA AC DCA I (OS8^4+TSTABL+2 JMP START2 /CALLED FROM GOBACK WHEN INTSW SET; TEST IF INTREQ PENDING /IF SO, GENERATE SOFTWARE INTERRUPT CHKINT, 0 ION /GIVE HIM ONE MORE CHANCE JMS I (INTREQ IOF /WATCH OUT NOW! SZA CLA JMP GOTINT /GOT ONE /ONE LAST CHANCE IF INTERRUPT ISZ INTSW /CAME UP DURING LIST TEST JMP I CHKINT /TOO BAD; ALL THIS FOR NOTHING GOTINT, DCA IONSW /CLEAR THESE FLAGS NOW DCA INTSW ION TAD UIF TAD UDF DCA SFR /SET SOFT SAVE FIELD DCA UDF DCA UCDF /SET DF = 0 ; 'HNDRET' WILL DO REST CDF OS8F0 DCA WT TAD PC /'JMS 0' DCA I WT CLA IAC DCA PC JMP I (HNDRET INTSET, TAD (DEVSTA-1 /ION FOR SPECIFIED DEVICE IN AC DCA UTEMP TAD I UTEMP AND (3777 SZL /LINK SAYS IF ION OR OFF TAD (4000 DCA I UTEMP SNL JMP I (XNOP /IOF; DON'T CHECK FOR REQUEST SKP XSKPI, ISZ PC /SKIPPING POSSIBILITY FOR NOP XNOPI, TAD IONSW /INTERRUPT REQUEST SNA CLA /NO ION : NO REQUEST JMP I (XNOP STA DCA INTSW /LET'S HOPE FOR THE BEST JMP I (XNOP PAGE /TELETYPE OUTPUT HANDLER XTLSUB, 0 /ROUTINE TO OUTPUT CHAR IN AC DCA XTLTEM /SAVE CHAR TAD OWCNT TAD (OWLEN SNA CLA JMP .-3 /WAIT FOR BUFFER TO HAVE SPACE TAD XTLTEM DCA I OWPUT TAD OWPUT /STORE CHAR IN BUFFER AND BUMP POINTER IAC AND (-OWLEN-1 DCA OWPUT CIF 0 /DELICATE CODE AHEAD STA CLL TAD OWCNT DCA OWCNT /BUMP BUFFER COUNT TAD XTLTEM SNL TLSX /PRINT IF FIRST CHAR IN BUFFER CLA TAD OWCNT TAD (OWLEN /ANY SPACE LEFT? SNA CLA IAC /NO SET FLAG DCA I (TSFEF /YES; CLEAR FLAG JMP I XTLSUB XTLTEM, 0 XTSF, TAD I (TSFEF SNA CLA /BUFFER FULL? JMP I (XSKP /NO - SKIP RETURN TAD (TSFEF EFWAIT, DCA EF /GENERAL IOT WAIT ROUTINE CLA IAC TAD PC DCA WT TAD PC AND (177 /CHECK IF NEXT LOCATION IS A "JMP .-1" - TAD (5200 CIA CCIF TAD I WT /IF IT IS WE SHOULD HANG SZA CLA /OTHERWISE DO A NON-SKIP RETURN JMP I (XNOPI CAL WAITE EF, 0 JMP I (XSKPI /DO A SKIP RETURN AFTER WAITING XTCF, CLA IAC XTFL, DCA I (TSFEF JMP I (XNOPI XTLS, CLA IAC DCA I (TSFEF XTPC, TAD AC JMS XTLSUB /CALL SUBROUTINE USED TO PRINT ERRORS JMP I (XNOPI /KEEP ON TRUCKING XTSK, AC0001 /DEV # 1 JMS I (INTREQ SZA CLA ISZ PC JMP I (XNOP /TELETYPE OUTPUT INTERRUPT ROUTINE TTINT, ZBLOCK 2 IFZERO PDP8E <TSFX> IFNZRO PDP8E <TSKX> JMP I TTINT CDF CIF 0 IFNZRO PDP8E < TSFX /KEYBOARD OR PRINTER? JMP I (KBINT /KEYBOARD > TCFX /CLEAR PRINTER FLAG TAD OWCNT SMA CLA /IGNORE UNSOLICITED INTERRUPTS (LA30) POSTDS TAD OWGET IAC AND (-OWLEN-1 DCA OWGET TAD I OWGET ISZ OWCNT TLSX /PRINT NEXT CHAR FROM BUFFER STA TAD OWCNT TAD (OWLEN SNA CLA /IF BUFFER JUST BECAME UNFULL, TAD (TSFEF /SET EVENT FLAG POSTIO, SNA /GENERAL IO INTERRUPT DISMISS POSTDS /NO FLAG, JUST DISMISS DCA EFTST /STORE ADDRESS OF FLAG AC4000 AND I EFTST /ARE WE WAITING ON FLAG? SNA CLA JMP .+3 /NO TAD EFTST /YES;POST IT POSTDS DCA I EFTST /CLEAR FLAG TAD (OS8INT /AND SEE IF WE WANT INTERRUPT POSTDS EFTST, 0 OWGET, OWBASE OWPUT, OWBASE OWCNT, 0 XLOOK, CCIF /GETS WORD FROM REAL FIELD ISZ PC TAD I PC AND (70 TAD 21 /DCDF LOCATION IN RTSMON DCA .+1 /CHANGE TO SPECIFIED FIELD HLT TAD I AC /ADRESS IN AC JMP I (XACSTO /CONTENTS IN AC INTSDV, TAD (INTSOP-RTSOP RTSDV, TAD (RTSOP JMP I (SPCIOT /AND SO ON PAGE /INITIALIZATION CODE - OVERWRITTEN BY RING BUFFERS START, CAL SKPINS TTINT /LINK IN OS/8 TELETYPE IFZERO PDP8E < CAL SKPINS KBINT > OWBASE= START OWLEN= 20 IRBASE= OWBASE+OWLEN IRLEN= 10 IREND= IRBASE+IRLEN CDF CIF OS8F0 /OS/8 INITIALIZATION CODE LOADS JMS I OSINIT /INTO OS/8 FAKE FIELD 0 DCA WD /TELL OSBOOT ABOUT START TAD BOOTAD CAL POST CDF CUR HLT /WE NEVER COME BACK HERE! BOOTAD, BOOTEF OSINIT, INITOS IFNZRO IRBASE&IRLEN <IRBNDY,__ERROR__> IFNZRO OWBASE&OWLEN <OWBNDY,__ERROR__> IFNZRO .-IREND&4000 <ZBLOCK IREND-.> /THIS IS CALLED FROM OSBOOT TO RESTART OS8 HNDRET, TAD UDF CLL RTL RAL DCA UIF TAD UIF DCA IBR /FOR COMPLETE SIMULATION TAD UIF TAD (CDF OS8F0 DCA UCIF JMP I (COMBAC /KEYBOARD HANDLER XKSF, TAD I (KSFEF SNA CLA /INPUT BUFFER EMPTY? JMP I (XSKP /NO - SKIP TAD (KSFEF JMP I (EFWAIT /YES - WAIT XKRB, STA DCA REDFLG TAD I IRGET XKCC, DCA AC XKCF, ISZ REDFLG /IF CHAR WAS READ GET NEXT JMP I (XNOP /NO - IGNORE CIF 0 TAD I (KSFEF SZA CLA JMP I (XNOP /DON'T READ FROM EMPTY BUFFER ISZ IRCNT SKP IAC DCA I (KSFEF /IF BUFFER NOT EMPTY, POST FLAG TAD IRGET IAC AND (-IRLEN-1 DCA IRGET JMP I (XNOPI XKRS, STA DCA REDFLG /THIS CHAR WAS READ; TAD I IRGET /NEXT KCC WILL GET NEXT JMP I (XOR /OR CHAR INTO AC XKIE, TAD AC /SET OR CLEAR INTENA RAR CLA IAC /DEV #1:STANDARD CALL FOR INTSET JMP I (INTSET KBINT, IFZERO PDP8E < 0;0 /LINKAGE INTO SKIP CHAIN KSFX JMP I KBINT CDF CIF 0 > KRBX KBSTOR, DCA I IRPUT TAD I IRPUT AND (177 CLL TAD (-4 /IF ^A,^B,^C IS TYPED, SNL JMP CHKCTA /CHECK ON ^A BREAK TAD (4-17 /17=^O CLL RAR /ODD BIT IN LINK SNA JMP CTLCHR /^O AND ^P AND (7774 /ALLOW 2 BITS=8 CHARS SZA CLA JMP NOCTRC SZL /THROW OUT ^R,^T,^V JMP NOCTRC /WE ARE LEFT WITH ^Q,^S AND ^U CTLCHR, TAD IRPUT /MAKE IT THE ONLY CHAR IN THE BUFFER DCA IRGET DCA IRCNT NOCTRC, TAD IRPUT /UPDATE PUT POINTER IAC AND (-IRLEN-1 DCA IRPUT TAD IRCNT CIA CLL AND (-IRLEN-1 /BUMP CHAR COUNT MOD IRLEN CMA DCA IRCNT SZL TAD (KSFEF /IF FIRST CHAR IN BUFFER SET EVENT FLAG JMP I (POSTIO /OTHERWISE JUST DISMISS CHKCTA, TAD (3 /IS IT ^A? SZA CLA JMP CTLCHR /NO: ^B OR ^C DCA WD /SIGNAL RESTART TAD (BOOTEF POSTDS /START BOOT JOB OF HIGHER PRIORITY REDFLG, 0 IRGET, IRBASE IRPUT, IRBASE IRCNT, 0 PAGE /ILLEGAL IOT HANDLER - PRINT MESSAGE AND RETURN TO KEYBOARD MONITOR ILLIOT, 0 /SO WE KNOW WHERE THE ERROR CAME FROM CLA CLL CDF 0 TAD (BOOTEF /START BOOT JOB CAL POST CDF CUR HLT /IT DOES NOT RETURN HERE CHNGDF, TAD UDF /BUILD NEW UCDF CLL RTL RAL TAD (CDF OS8F0 DCA UCDF JMP UCDF /MISCELLANEOUS ROUTINES XEAE, BSW /COMES IN WITH EAE BITS CLL RAL /HIGH ORDER EAE BIT IN LINK DCA WT /IF LOW ORDER EAE BITS ALL SET = 3400 SWP DCA OP /SAVE MQ IN OP DPSZ /NOW TEST MODE: AC & MQ = 0 JMP MODEA /NO SKIP IS OLD EAE MODEB, TAD WT /IT SKIPPED, GET BACK EAE BITS SZL /IF HIGH ORDER EAE BIT IS SET JMP DBLPRC /IT IS A NEW DOUBLE PREC. INST. RTL SNA JMP SNGWRD /NMI IS A SINGLE WORD INSTRUCTION RTL DBLPRC, SNA /WE JUMP INTO TEST HERE WITH ALL BITS JMP SNGWRD /ASC AND (SCA IN DBLPRC MODE) ALSO CLL /SNGPRC MODEB DROPS IN HERE WITH A SMALL NUMBER TAD (-1400 /TEST IF .GE. SWBA SZL CLA JMP SNGWRD /YES: NEW DBLPRC SNGWRD INSTS. DBLWRD, CLA IAC /OK; ALL THIS DOUBLE WORD INSTS. TAD PC /BUMP PC TO SECOND WORD DCA WT /STORE IN STANDARD LOC CCIF TAD I WT /FETCH SECOND WORD DCA WD+1 /STORE IN EXEC; XINLIN WILL RESET TO 'SKP' CCDF /SET USER DATA FIELD FOR EAE ACCES SNGWRD, TAD OP /FROM HERE ON ALSO SNGWRD INSTS. MQL /RELOAD MQ JMP I (XINLIN /REJOIN MAIN LOOP IN EMULAT MODEA, AC6000 /TEST FOR MODE A DBLWRD INSTS. RTR /GIVES 1400 AND WT /ONLY NMI&SCA DO NOT HAVE THESE BITS SZA CLA /SET AND ONLY NMI&SCA ARE SNGWRD JMP DBLWRD JMP SNGWRD XSKON, TAD IONSW SZA CLA ISZ PC C200, 200 XIOF, DCA IONSW DCA INTSW JMP I (XNOP XION, TAD C200 DCA IONSW STA DCA INTSW CLA IAC TAD I (EXECUT /WE NEED ONE LEVEL OF RECURSIVENESS DCA ILLIOT /FOR THIS INST. (RMF,ION SEQUENCE) ISZ PC C77, 77 JMS I (EMULAT /DELAY ION TURN ON BY ONE CDF 0 /CAREFUL! DF MAY BE SET TAD (CIFHNG DCA I (EMULAT JMP I ILLIOT XSRQ, JMS I (INTREQ SZA CLA XSKP, ISZ PC JMP I (XNOP XGTF, DCA AC JMS I (INTREQ TAD LNKGT TAD IONSW XRIB, TAD SFR JMP I (XOR XRTF, TAD AC AND (6000 DCA LNKGT TAD C200 DCA IONSW STA DCA INTSW TAD AC AND C77 DCA SFR XRMF, TAD SFR AND K7 JMS I (FLDTST DCA UDF DCA UCDF TAD SFR CLL RTR RAR AND K7 JMP I (FRMF XRDF, TAD UDF CLL RTL RAL SKP XRIF, TAD UIF XOR, DCA WT /GENERAL OR WITH AC TAD AC CMA AND WT TAD AC XACSTO, DCA AC JMP I (XNOP PAGE / TSS/8 INTERRUPT HANDLER TSINT, DCA AC DCA USERSW /RESET NO CONTROL FLAG DCA INTSW GTF AND (6000 DCA LNKGT STA TAD 0 DCA PC /SAVE PC,AC,LINK,GT FROM INTERRUPT CINT /CLEAR USER INTERRUPT FLAG ION /RESTORE INTERRUPTS JMS EXECUT /EXECUTE ONE IOT OS8ERR /ILLEGAL AT INTERRUPT LEVEL GOBACK, IOF ISZ INTSW SKP JMS I (CHKINT TAD LNKGT /GENERAL OS8 STARTUP /OR 'JMP EMUALL' FOR TOTAL EMULATION TAD UIF TAD UDF TAD (OS8F0%10+OS8F0+100 RTF DCA USERSW /SET NO CONTROL SWITCH TAD AC JMP I PC /GO TO OS/8 IN USER MODE EMUALL, DCA INTSW /RESET IT NOW ION JMP I .+1 CIFHNG /INTO EMULATE LOOP JMPEMU= JMP EMUALL TADLNK= TAD LNKGT XSEM, TAD (JMPEMU-TADLNK XCEM, TAD (TADLNK /SET OR CLEAR EMULATION DCA GOBACK+4 JMP XNOP /EXECUTE A TRAPPED IOT OR OSR /CALLED FROM TRAP ROUTINE AND FROM CIF INTERPRETER ("RECURSIVELY") /FIRST RETURN NOT IOT OR OSR;SECOND RETURN IOT WAS EXECUTED EXECUT, 0 UCIFX, HLT /CDF TO USERS INSTRUCTION FIELD TAD I PC CDF 0 DCA WD /ALWAYS STORE INST. IN 'WD' CLL TAD WD /GET TRAP INSTRUCTION AND K7700 TAD (-6200 /CHECK FOR MEMORY GROUP SZA JMP TSTMOR /GO CHECK OTHER THINGS TAD WD /QUEER 20 DEVICE CODE CLL RTR RAR AND K7 /THIS GIVES THE X OF THE 2X GROUP DCA OP /WE DECLARE THIS AS OPERATION CODE TAD WD AND K7 /AND CHANGE THE OPERATION CODE TAD (JMP I LIST20 DCA .+1 HLT /GO THERE QUICKLY /**__________________ TSTMOR, TAD (200 SNL /IF ITS NOT IOT OR OPR,THE PREVIUOS JMP MBERR /INST WAS SKP HLT - MAYBE ERROR CLL RTL K7700, SMA CLA /TEST IOT OR OPR JMP IOTS /IOT'S TAD WD /OPERATES AND (407 TAD (-404 /OSR ONLY LEGAL OPR MBERR, SZA CLA /CLEARS AC FROM 'MBERR' JMP I EXECUT /ERROR RETURN (MAYBE) SIMTST, CLL RAR /TEST IF ONE SZA CLA JMP XNOP /NO-VALUES OD 2-3777 SIMULA, TAD AC /SIMULATE IOT WHICH CHANGES THE AC JMS EXEC DCA AC JMP XERET /**-------------- XCDF, TAD OP TAD (-OSFLDS SMA JMP .-2 /REDUCE MODULO OSFLDS TAD (OSFLDS DCA UDF DCA UCDF /TELL IT TO RECALCULATE NEXT TIME XNOP, ISZ PC K77, 77 XERET, ISZ EXECUT /NO ERROR RETURN JMP I EXECUT /LEAVE EXECUT WITH PC BUMPED IOTS, TAD WD /IOT AND K7 /OPERATION CODE DCA OP TAD WD CLL RTR RAR AND K77 /DEVICE CODE TAD (DEVLST DCA WT /POINTER TO DEVICE LIST TAD I WT SNA OS8ERR /NOT DEFINED IN LIST; ERROR SMA /**K** OPCODE LISTS MUST RESIDE ABOVE 4000 JMP SIMTST SPCIOT, TAD OP /OFFSET ADDED FOR OP CODE LIST DCA WT TAD I WT SNA OS8ERR /OP CODE NOT DEFINED ERROR DCA WT JMP I WT /GO THERE /**__________________ LIST20, HCALL XCDF XCIF XCDI INTSDV RTSDV 0 0 PAGE /CODE TO HANDLE CDF'S AND CIF'S XCDI, TAD OP JMS FLDTST DCA UDF DCA UCDF /RESET CDF SUBR XCIF, TAD OP FRMF, JMS FLDTST CLL RTL RAL DCA IBR /SAVE IF BACKUP ISZ PC JMS EMULAT /EMULATE TILL A JMP OR JMS ENCOUNTERED CIFHNG, JMP .-1 EMULAT, 0 JMS I (EXECUT SKPOPR, SKP /NOT IOT OR OSR;TREAT FURTHER JMP I EMULAT CLL TAD WD SPA JMP NONSTD JMS GEFADR /GET EFFECTIVE ADDRESS TAD WD AND K7000 /ISOLATE OPCODE TAD (AND I WT /FORM EQUIVALENT INSTRUCTION DCA WD JMP XINLIN /AND EXECUTE IT IN LINE FLDTST, 0 TAD (-OSFLDS SMA OS8ERR /DOMAIN OVERFLOW TAD (OSFLDS JMP I FLDTST /SUBROUTINE TO COMPUTE EFFECTIVE ADDRESSES;COME IN WITH 'WD' GEFADR, 0 AND (177 DCA WT TAD WD AND (200 CIA AND PC TAD WT DCA WT /ADD PAGE BITS TO DISPLACEMENT CCIF TAD WD AND (400 SNA CLA /IF NO INDIRECT ADDRESS, JMP I GEFADR /OPERAND FIELD = IF TAD WT AND (7770 TAD (7770 SNA CLA /TEST FOR AUTO-XRS ISZ I WT TAD I WT DCA WT CCDF /IF INDIRECT ADDRESSING, JMP I GEFADR /OPERAND FIELD = DF NONSTD, TAD (1000 SNL /CHECK FOR JMP OR JMS JMP JMPJMS /YES - NOT LONG NOW AND (401 /OPR BITS CLL RAR SNA CLA JMP XINLIN /GROUP 1: ROTATES ETC. SNL JMP HLTTST TAD WD AND (56 /TEST FOR EAE BITS SZA JMP I (XEAE JMP XINLIN HLTTST, AC0002 /GROUP 2: SKIPS AND WD SZA CLA OS8ERR /HLT! /**FALL INTO NEXT PAGE /EXECUTE INSTRUCTION WITH AC AND LINK XINLIN, AC4000 AND LNKGT CLL RAL TAD AC JMS EXEC /EXECUTE IN PAGE 0 DCA AC TAD (4000 /DO NOT DESTROY LINK SGT CLA /RECALCULATE GT ; EAE MIGHT HAVE CHANGED IT RAR DCA LNKGT TAD SKPOPR DCA WD+1 /WASTEFUL EAE RESET JMP I EMULAT /INTERPRET JMP OR JMS JMPJMS, JMS GEFADR /GET EFFECTIVE ADDRESS TAD IBR TAD (CDF OS8F0 DCA UCIF TAD IBR DCA UIF CCIF TAD WD RTL /CHECK FOR JMS SPA CLA JMP XJMP /NO CLA IAC TAD PC DCA I WT /SAVE RETURN ADDRESS CLA IAC /AND BUMP JUMP ADDRESS XJMP, TAD WT DCA PC COMBAC, CDF 0 TAD UCIF DCA I (UCIFX JMP I (GOBACK PAGE /ROUTINE TO HANDLE SPECIAL OS/8 HANDLER IOT /FORMAT OF SPECIAL IOT USAGE IS AS FOLLOWS: / TAD (INTERNAL DEVICE CODE / 6200 /DATA FIELD IS FIELD OF HANDLER ARGUMENTS / POINTER TO OS/8 HANDLER ENTRY POINT / RETURN IS TO THE ERROR OR NORMAL RETURN OF THE HANDLER HCALL, CCIF ISZ PC /GO TO NEXT WD TAD I PC DCA PC /PC CONTAINS HANDLER ENTRY PT ADDR TAD I PC DCA PC /PC CONTAINS ARGUMENT LIST ADDR IFDEF OS8F < STA TAD UDF SNA CLA /IF WE ARE CALLING THE TAD PC /KEYBOARD MONITOR, TAD (-OSKBML SZA TAD (OSKBML-OSUSRL /USR, SZA TAD (OSUSRL-OSCDLD /OR COMMAND DECODER INTO CORE, SZA CLA /RELEASE THE OS8F INTERLOCK JMP NOPOST /SINCE THE USR DIRECTORY BUFFER IS CLEAR. TAD (INTLOK CAL POST /OS8F INTERLOCK IS A STANDARD EVENT FLAG CDF CUR /IN THE CURRENT FIELD NOPOST, > TAD AC AND (7760 /CHECK UNIT NUMBER LT 16. SZA CLA OS8ERR /IF NOT, ILLEGAL IOT TAD (HNDTAB TAD AC DCA AC CCDF /ARG LIST IN DATA FIELD TAD I PC AND (7707 DCA ARGS+1 /GET FIRST WORD EXCEPT FOR FIELD TAD I PC AND (70 TAD (-OSFLDS^10 SMA OS8ERR TAD (OSFLDS^10+OS8F0 TAD ARGS+1 DCA ARGS+1 ISZ PC TAD I PC DCA ARGS+2 ISZ PC TAD I PC DCA ARGS+3 IFDEF OS8F < CLA IAC TAD ARGS+3 AND (7770 /IF THE I/O IS TO A DIRECTORY BLOCK SNA /WE MUST SET THE OS8F INTERLOCK TAD INTLOK /(IF IT WAS CLEAR) TO PREVENT SNA CLA /SIMULTANEOUS UPDATE OF ISZ INTLOK /THE OS/8 DIRECTORY > ISZ PC NOP /PROTECT AGAINST WIERD OR MALICIOUS BACKGROUNDERS CDF CUR TAD I AC /GET HANDLER TASK NUMBER SNA OS8ERR /ILLEGAL HANDLER IOT CLL RTR RAR AND (177 /IN BITS 3-8 OF TABLE ENTRY DCA HTASK TAD I AC /GET UNIT NUMBER AND K7 /IN BITS 9-11 DCA ARGS CAL SENDW /SEND THE I/O REQUEST TO THE APPROPRIATE TASK HTASK, 0 IOMESS /AND WAIT FOR COMPLETION TAD IOSTS /USE RETURN STATUS TO DETERMINE SNA /WHETHER WE FAKE A NORMAL OR ERROR RETURN ISZ PC SZA CLA AC4000 /TRADITIONAL ERROR VALUE DCA AC JMP I (HNDRET INTREQ, 0 /TEST INT.REQ. FOR ALL OR 1 DEVICE STL /LINK TELLS IF 1 OR ALL SNA CLL IAC /ONE DEVICE TAD (DEVSTA-2 DCA UTEMP TAD (FLAGS-1 DCA OP FLGADD, AND K7 /GO TEST NEXT DEV. TAD OP DCA OP ISZ UTEMP TAD I UTEMP SNA JMP I INTREQ /0 IS END OF LIST SMA SNL JMP FLGADD /NO ION AND ALL SMA JMP NINTEX /NO ION AND ONE AND K7 CIA DCA FLGCNT /SET # OF FLAGS FLGLOP, ISZ OP TAD I OP SNA CLA JMP INTEX /INTERRUPT REQUEST ISZ FLGCNT JMP FLGLOP /MORE SNL JMP FLGADD /FOR ALL; NEXT NINTEX, SKP CLA INTEX, TAD (1000 /CORRECT STATUS BIT JMP I INTREQ FLGCNT, 0 PAGE /TABLES FOR OS/8 SUPPORT TASK /TABLE OF LEGAL DEVICE CODE'S DEVLST, ZBLOCK 100 *DEVLST+0 PRCOP *DEVLST+1 NOOP /NO HSR *DEVLST+2 NOOP /NO HSP *DEVLST+14 NOOP /WE ARE NOT A PDP12 AND NO FLUX-METER *DEVLST+15 NOOP /NO SC/MAGNET *DEVLST+16 NOOP /NO TRIPLE DAC *DEVLST+17 NOOP /NO BRUKER MAGNET *DEVLST+OSKBDV OSKBOP *DEVLST+OSTTDV OSTTOP *DEVLST+5 TV1OP /SPECIAL LIST TO PREVENT ION FOR DISPLAY-PLOTTER *DEVLST+6 SIMOP /SIMULATE ALL *DEVLST+7 SIMOP /SIMULATE ALL *DEVLST+20 /THE NEXT 10 LOCS ARE NOT USED /WE USE THEM FOR RTS 62X5 IOT'S RTSOP, 0 /RETURN CLOCK RATE= 6205 (RCR) 0 /START CLOCK= 6215 (STM) 0 /RETURN TIME= 6225 (USR) XSEM /SET EMULATE= 6235 (SEM) XCEM /CLEAR EMULATE= 6245 (CEM) XSKP /SKIP ON RTS= 6255 (SRT) XLOOK /LOOK INTO FOREGROUND= 6265 (LIF) 0 /TIME OF DAY= 6275 (TOD) *DEVLST+30 *DEVLST+31 SIMOP SIMOP /VENUS INTERFACE *DEVLST+33 0 0 /SYSTEM CONSOLE= ERROR *DEVLST+52 NOOP /NO I/O # 1 *DEVLST+55 NOOP /WE HAVE NO FPP (FOR THE MOMENT) *DEVLST+56 NOOP NOOP /NO TIMER-COUNTER-DVM *DEVLST+65 NOOP /AND NO ANALEX PRINTER *DEVLST+66 LPTROP *DEVLST+100 /SPACE FOR 8 OP CODE LISTS PRCOP, ZBLOCK 10 *PRCOP XSKON XION XIOF XSRQ XGTF XRTF SIMULA /SGT XCAF *PRCOP+10 OSKBOP, ZBLOCK 10 *OSKBOP XKCF XKSF XKCC *OSKBOP+4 XKRS XKIE XKRB *OSKBOP+10 OSTTOP, ZBLOCK 10 *OSTTOP XTFL XTSF XTCF *OSTTOP+4 XTPC XTSK XTLS *OSTTOP+10 INTSOP, ZBLOCK 10 *INTSOP XNOP /CINT XRDF XRIF XRIB XRMF XNOP /SINT XNOP /CUF 0 /SUF; ERROR *INTSOP+10 TV1OP, ZBLOCK 10 *TV1OP XNOP /DIEN SIMULA /DSPD SIMULA /DSCD SIMULA /DSLP SIMULA /DSDF SIMULA /DRIS SIMULA /DSFF SIMULA /DCFF LPTROP, ZBLOCK 10 IFNDEF LPT < *LPTROP+1 SIMULA /XSKP *LPTROP+6 SIMULA /XLLS > IFDEF LPT < *LPTROP+1 XSKP *LPTROP+6 XLLS > *LPTROP+10 PAGE / OS/8 INITIALIZATION CODE - CREATES FAKE SYSTEM HEAD /AND ESTABLISHES RELATIONSHIP BETWEEN OS/8 DEVICE HANDLER NAMES /AND RTS-8 DRIVERS FIELD OS8F0%10 *4000 /A GOOD SAFE PLACE INITOS, 0 IOF /ALL KINDZA HANKY-PANKY GOING ON! 6077 /CLEAR STATUS&INTERRUPT DISPLAY CLA 6315 /CLEAR VENUS INTERRUPT IFNDEF LPT < PSIE /DISABLE INTERRUPTS > CDF 0 TAD (TSINT DCA I (TS8LOC /SET UP TSS/8 "TRAP VECTOR" IN RTS-8 EXEC DCA I (JSBITS /MAKE SURE CORE IS SAVED WHEN WE CALL THE USR TAD I (BATLOC AND (4777 /KILL BATCH IN PROGRESS FLAG DCA I (BATLOC /BECAUSE WE WILL SURELY DESTROY BMON. IMOVLP, CDF 0 TAD I P7600 CDF OS8F0 DCA I P7600 CDF 10 TAD I P7600 /MOVE BOTH SYSTEM HEAD PAGES CDF OS8F0 /INTO OS8F1 LOCS 7400-7577 DCA I P7400 ISZ P7400 ISZ P7600 JMP IMOVLP TAD I (BATLOC /CLEAR OUT THE OS/8 AND (4707 /BATCH IN PROGRESS FLAG TAD (OSFLDS-1^10+1000 /SET SOFT CORE SIZE AND BIT 2 TELLS OS/8 ABOUT RTS8 DCA I (BATLOC IMOVHN, TAD I FKHND1 DCA I FKHND2 /MOVE THE RTS-8 FAKE SYSTEM HANDLER INTO PLACE ISZ FKHND1 ISZ FKHND2 ISZ FKHNDC JMP IMOVHN CIF 10 JMS I (7700 /LOAD THE OS/8 USR INTO CORE (REAL CORE!) 10 JMP I (INIHNL FKHND1, FAKHND FKHND2, 7607 FKHNDC, FAKHND-FAKEND P7600, 7600 P7400, 7400 FAKHND, RELOC 7607 /FAKE OS/8 SYSTEM HANDLER FAKSYS, ISZ DVNUM ISZ DVNUM ISZ DVNUM ISZ DVNUM ISZ DVNUM /17(8) ENTRY POINTS ISZ DVNUM ISZ DVNUM ISZ DVNUM ISZ DVNUM ISZ DVNUM ISZ DVNUM ISZ DVNUM ISZ DVNUM ISZ DVNUM ISZ DVNUM F17, 17 CLA /JUST IN CASE TAD DVNUM /GET ENTRY POINT NUMBER CMA TAD FAKTAD /TRANSFORM INTO "TAD" ON ENTRY POINT DCA .+1 HLT /GET CALLING ADDRESS DCA FAKPTR AC2000 TAD .-3 /NOW FORM A "DCA ENTRY POINT" DCA .+2 TAD FAKISZ HLT /RESTORE ENTRY POINT TAD DVNUM CIA FAKTAD, TAD F17 /GET RTS-8 INTERNAL REFERENCE NUMBER DCA FAKT DCA DVNUM /CLEAR DVNUM FOR NEXT CALL TAD FAKT 6200 /MAGIC IOT FAKPTR /POINTER TO POINTER TO ARGLIST DVNUM, 0 FAKT, 0 FAKPTR, 0 FAKISZ, ISZ DVNUM RELOC FAKEND= . PAGE /LOOP WHICH RELATES OS/8 AND RTS HANDLERS INIHNL, ISZ HPTR TAD I HPTR /GET NEXT HANDLER NAME SNA JMP ASDONE /NO MORE DCA ASNAM1 ISZ HPTR TAD I HPTR DCA ASNAM2 /STORE HANDLER NAME IN "INQUIRE" ISZ HPTR CIF 10 JMS I (200 12 /IS HANDLER THERE? ASNAM1, 0 ASNAM2, 0 0 JMP INIHNL /HANDLER NOT IN SYSTEM CONFIGURATION TAD ASNAM2 TAD (OS8HND-201 /FLD 1 RELOCATED DCA HNDPTR /GET POINTER INTO RESIDENT HANDLER TABLE TAD ASNAM2 TAD (HNDTAB DCA HTBPTR /AND EQUIVALENT PTR INTO RTS-8 TABLE TAD (FAKSYS-1 TAD ASNAM2 /ASSIGN ONE OF THE 17 ENTRY POINTS IN THE DCA I HNDPTR /FAKE SYSTEM HANDLER TO THIS DEVICE TAD I HPTR /GET THE RTS-8 TASK AND UNIT NUMBER CDF 0 DCA I HTBPTR /MAKE THE CORRESPONDING ENTRY IN THE CDF OS8F0 /OS8 SUPPORT TASK TABLE JMP INIHNL /GET THE NEXT HANDLER HTBPTR, HNDTAB+1 HNDPTR, 0 HPTR, DECOTA-1 ASDONE, CIF 10 JMS I (200 11 /KICK OUT THE USR CDF OS8F0 TAD I (INITOS DCA HPTR /SAVE RETURN ADRESS ION /INTERRUPTS CAN GO BACK ON NOW /** FALL INTO NEXT PAGE ** /STORE OS8 RESIDENT ON A STANDARD FILE CAL SENDW OS8F SAVEMS TAD SAVEST SZA HLT /ERROR; TRY AGAIN TAD SAVEBL DCA WRITBL /FOUND EMPTY GO WRITE CAL SENDW OSSYSD WRITMS TAD WRITST SZA HLT TAD SAVEBL CDF 0 DCA I (BOOTBK /ALL OK;STORE BLK# FOR RESTART CIF 0 JMP I HPTR SAVEMS, ZBLOCK 3 OSSYSD^10+0+2000 /ENTER ON SYS: SAVEFN /FILENAME SAVEST, 0 SAVEBL, 0 SAVELN, 1 /1 BLK LONG SAVEFN, FILENAME BOOT.RT WRITMS, ZBLOCK 3 0 /UNIT 0 WRITFN, 2^100+OS8F0+4000 7400 WRITBL, 0 WRITST, 0 PAGE /DEVICE CORRESPONDENCE TABLE DECOTA, DEVICE SYS OSSYSD^10 DEVICE DSK OSSYSD^10+1 IFDEF DTA < DEVICE DTA0 DTA^10+0 DEVICE DTA1 DTA^10+1 DEVICE DTA2 DTA^10+2 DEVICE DTA3 DTA^10+3 DEVICE DTA4 DTA^10+4 DEVICE DTA5 DTA^10+5 DEVICE DTA6 DTA^10+6 DEVICE DTA7 DTA^10+7 > IFDEF LTA < DEVICE LTA0 LTA^10+0 DEVICE LTA1 LTA^10+1 DEVICE LTA2 LTA^10+2 DEVICE LTA3 LTA^10+3 DEVICE LTA4 LTA^10+4 DEVICE LTA5 LTA^10+5 DEVICE LTA6 LTA^10+6 DEVICE LTA7 LTA^10+7 > IFDEF RK8 < DEVICE RKA0 RK8^10+0 DEVICE RKB0 RK8^10+4 DEVICE RKA1 RK8^10+1 DEVICE RKB1 RK8^10+5 DEVICE RKA2 RK8^10+2 DEVICE RKB2 RK8^10+6 DEVICE RKA3 RK8^10+3 DEVICE RKB3 RK8^10+7 > IFDEF SIDK < DEVICE DKA0 SIDK^10+0 DEVICE DKB0 SIDK^10+1 DEVICE DKA1 SIDK^10+2 DEVICE DKB1 SIDK^10+3 > IFDEF SDA < DEVICE SDA0 SDA^10+0 DEVICE SDA1 SDA^10+1 > IFDEF RX8A < DEVICE RXA0 RX8A^10+0 DEVICE RXA1 RX8A^10+1 > IFDEF RX8B < DEVICE RXB0 RX8B^10+0 DEVICE RXB1 RX8B^10+1 > IFDEF RX8C < DEVICE RXC0 RX8C^10+0 DEVICE RXC1 RX8C^10+1 > IFDEF RX8D < DEVICE RXD0 RX8D^10+0 DEVICE RXD1 RX8D^10+1 > IFDEF OS8COM < DEVICE RTS8 OS8COM^10+OS8F0 > 0 PAGE XLIST 0