File: D1.TK of Disk: Disks/MyPDP/m8-blue-rka1-rkb1
(Source file text)
/D1.TK 22-SEP-80 /THIS TASK CAN BE CALLED BY A GIANT IOT (21). /IT HANDLES THE SETTING AND READING OF THE /FIRST DIGITAL IN-OUT INTERFACE - DR8-EA / /CALLING SEQUENCE: / / TAD (21 / 6770 / JMP .+4 / COMMAND/ERROR / MASK / DATA / ........ / /COMMAND: 0000 READ DIGITAL INPUT / 0001 SET DIGITAL OUTPUT / /ERROR CODE: 0000 OK / 0001 INTERFACE BAD (ONLY OUTPUT FUNCTION) / /VALUE RETURNED TO DATA: / / INPUT: INPUT REG .AND. MASK / OUTPUT: (MASK.AND.DATA).OR.(.NOT.MASK.AND.(OLD OUT REG)) / SET/CLEAR OUT REG. WITH (MASK.AND.DATA) DBDI=D1+6000 /CLEAR INTENA DBEI=D1+6001 /SET INTENA DBSK=D1+6002 /SKIP ON INPUT DBCI=D1+6003 /CLEAR INPUT BITS DBRI=D1+6004 /READ INPUT BITS DBCO=D1+6005 /CLEAR OUTPUT BITS DBSO=D1+6006 /SET OUTPUT BITS DBRO=D1+6007 /READ OUTPUT BITS *0 CDF 10 /GIGATB IS IN FIELD 1 GIGATB+21 "D^100+"1&3777 *200 D1NAME, "D^100+"1&3777 /TASK NAME IS "D1" 200 /ONE PAGE IS SUFFICIENT D1STAT, 0 D1IO, DCA D1STAT SZL /CLOSE ? JMP D1CLOS /YES TAD D1STAT TAD (UASEM-1 /FIND FREE UASEM ENTRY DCA ZTEM1 D1UALP, ISZ ZTEM1 TAD I ZTEM1 /SEARCH SNA /IS IT FREE ? JMP D1UAFR /YES CIA TAD D1NAME /IS IT MY NAME ? SZA CLA JMP D1UALP /NO, SEARCH D1UAFR, TAD D1NAME DCA I ZTEM1 /STORE NAME AC0003 TAD D1STAT /ADDRESS OF UPC DCA D1UPC AC0002 TAD D1UPC DCA D1TEM /ADDRESS OF UAC DCA I D1TEM /CLEAR AC OF 20 CODE TAD I D1UPC /GET UPC IAC /SET ADDRESS OF 'COMMAND' DCA D1UPC AC0001 TAD D1UPC DCA D1ARG /SET POINTER TOO ARG1 AC0004 TAD D1STAT JMS DEFER /GET UFLDS AND C70 /PICK OUT INSTRUCTION FIELD TAD I D1STAT TAD (-EMULATE+INCORE/SET INCORE REQUEST TO INSTR.FLD DCA I D1STAT JMS MONITOR /FORCE BS IN INCORE HANDLING SIGNAL BSSLOT TAD D1STAT TAD (USLOT JMS DEFER DCA D1TEM JMS MONITOR /WAIT ON BS READY WAIT D1TEM, 0 TAD C6201 DCA CDFSUB+1 JMS CDFSUB TAD I D1ARG //GET ARG1 DCA D1MASK //ALWAYS MASK ISZ D1ARG //ADVANCE TO DATA TAD I D1UPC //GET COMMAND SZA CLA //OUTPUT ? JMP D1OUT //YES DBRI //READ INPUT REG AND D1MASK //CONSIDER ONLY MASKED DCA D1RES //RESULT TAD D1RES DBCI //CLEAR ONLY RESULT BITS D1REL, CLA TAD D1RES //SEND RESULT DCA I D1ARG CDF 10 JMS MONITOR RETURN RELEASE D1OUT, DCA I D1UPC //CLEAR FUNCTION NOW (NO ERRORS) TAD I D1ARG //GET DATA CMA //BITS TO CLEAR AND D1MASK //ONLY THOSE IN MASK DBCO //CLEAR THOSE JMS BOUNCE //WAIT FOR RELAYS DBRO //READ OUTPUT REGISTER FIRST MQL //KEEP A WHILE TAD I D1ARG //GET DATA AND D1MASK //BITS FOR SET MQA //OR IN OLD BITS DBSO //I.E. SET NEW BITS, LEAVE OLD ONES JMS BOUNCE //WAIT AGAIN DBRO //READ FINAL RESULT DCA D1RES JMP D1REL //END BOUNCE, 0 //WAIT FOR RELAY BOUNCE AC4000 //USES BIT 00 OF INPUT AS SIGNAL DBCI //CLEAR BIT 00 OF INPUT DCA CDFSUB //CLEAR TIMOUT D1L, ISZ CDFSUB //INTERFACE BAD ? SKP CLA JMP D1ERR //YES, OLD PDP8 JMS MONITOR PRECEDE //WAIT A WHILE DBRI //READY ? SMA CLA JMP D1L //NOT YET AC4000 /CLEAR AGAIN DBCI CLA JMP I BOUNCE D1ERR, AC0001 DCA I D1UPC //SET ERROR CODE 1 JMP D1REL //GO BACK WITH RUBBISH CDFSUB, 0 HLT //CDF TO BACKGROUND FIELD JMP I CDFSUB D1CLOS, JMS MONITOR EXIT SWPOUT D1UPC, 0 D1ARG, 0 D1RES, 0 D1MASK, 0 PAGE $-$-$