File: ME.TK of Disk: Disks/MyPDP/m8-blue-rka1-rkb1
(Source file text)
/ME.TK 10-JUN-80 /**UASEM VERSION** /THIS IS AN ALTERNATIVE MAGTAPE EMULATOR, WHICH /TRULY EMULATES THE IOTS FOR A TM8E OR TC58 /MAGTAPE CONTROL. THIS APPROACH HAS THE ADVANTAGE /THAT NON-OS/8 MAGTAPE HANDLERS WILL FUNCTION /IN THE BACKGROUND OF MULTI8. /PREAMBLE: ME="M^100+"E&3777 IFDEF TM8E < *0;CDF 10;EMTAB+70;ME *0;CDF 10;EMTAB+71;ME *0;CDF 10;EMTAB+72;ME /TASK HEADER: *200 MENAME, ME /NAME IS 'ME' 201 /ONE PAGE TASK ONE CONNECTED IR XMTA, MTA MEIR MEBASE, 0 /POINTER TO BASE OF CALLING BG /TASK CODE: DCA MEBASE / SZL /RELEASE CALL ? JMP MEQUIT /YES, CLEAN UP AND QUIT TAD MEBASE TAD (UASEM-1 /SETUP POINTER TO UASEM DCA MEUPC /IN OUR BG TABLE MEASLP, ISZ MEUPC TAD I MEUPC /LOOK AT ENTRY SNA /IS IT FREE ? JMP MEASFR /YES, GO PUT IN MY NAME CIA TAD MENAME /WAS IT ALREADY USED BY ME ? SZA CLA JMP MEASLP /NO, SOME OTHER TASK, LOOK FOR MORE MEASFR, TAD MENAME DCA I MEUPC /OK, PUT MY NAME IN UASEM TABLE MEOK, AC0003 /PREPARE SOME POINTERS TAD MEBASE / DCA MEUPC / AC0002 / TAD MEUPC / DCA MEUAC / AC0001 / TAD MEUAC / JMS DEFER /GET TRAPPED INSTRUCTION AND C77 / TAD (JMP TABLE /YES, MAKE DISPATCH JUMP DCA .+1 HLT / TABLE, JMP NOOP /6700 .... NOT TM8E INSTRUCTION JMP DOIT /6701 LWCR LOAD WORD COUNT REG JMP DOIT /6702 CWCR CLEAR WORD COUNT REG JMP DOIT /6703 LCAR LOAD CURRENT ADDRESS REG JMP DOIT /6704 CCAR CLEAR CURRENT ADDRESS REG JMP DOLCMR /6705 LCMR LOAD COMMAND REG JMP DOLFGR /6706 LFGR LOAD FUNCTION REG AND (GO) JMP DOIT /6707 LDBR LOAD DATA BUFFER REG JMP NOOP /6710 .... NOT TM8E INSTRUCTION JMP DOIT /6711 RWCR READ WORD COUNT REG JMP DOIT /6712 CLT CLEAR TRANSPORT JMP DOIT /6713 RCAR READ CURRENT ADDRESS REG JMP DORMSR /6714 RMSR READ MAIN STATUS REG JMP DORCMR /6715 RCMR READ COMMAND REG JMP DOIT /6716 RFSR READ FUNCTION REG & STATUS JMP DOIT /6717 RDBR READ DATA BUFFER JMP NOOP /6720 .... NOT TM8E INSTRUCTION JMP DOIT /6721 SKEF SKIP IF ERROR FLAG JMP DOIT /6722 SKCB SKIP IF CONTROL NOT BUSY JMP DOSKJD /6723 SKJD SKIP WHEN JOB DONE JMP DOIT /6724 SKTR SKIP WHEN TAPE READY JMP DOIT /6725 CLF CLEAR CONTROLLER & MASTER JMP DOIT /6726 CKDL MAINTENANCE JMP NOOP /6727 SBRM MAINTENANCE MEQUIT, 6725 /CLF, CLEAR CONTROLLER JMS MONITOR EXIT SWPOUT /AND RETURN DOIT, TAD I X /GET INSTRUCTION AGAIN DCA MEINST /AND PUT IT AHEAD TAD I MEUAC /GET USER AC IN AC MEINST, HLT /THE IOT SKP /JUST IN CASE IT IS A SKIP MESKP, ISZ I MEUPC /INCREMENT USER PC NOP /YOU NEVER KNOW MECLA, DCA I MEUAC /RESTORE USER AC NOOP, JMS MONITOR /AND RETURN RETURN / DOLCMR, TAD I MEUAC /GET USERS AC DCA COMAND /AND STORE IN COMMAND LATCH JMP MECLA /FINISHED WITH THIS INSTRUCTION DOLFGR, TAD COMAND / AND C70 /EXTRACT BUFFER FIELD TAD I MEBASE /REQUEST BUFFER FIELD IN MEMORY TAD (-EMULATE+INCORE DCA I MEBASE / JMS MONITOR /KICK SCHEDULER ACTIVE SIGNAL BSSLOT TAD MEBASE TAD (USLOT JMS DEFER /GET USERS EVENT # DCA .+3 JMS MONITOR /WAIT TILL FIELD RESIDENT WAIT MEUPC, 0 /GETS USLOT MQL /MQ CONTAINS REAL BUFFER FIELD TAD COMAND /GET ORIGINAL COMMAND WORD AND (7407 /KILL DANGEROUS BITS TAD C100 /SET INTERRUPT ENABLE MQA /INSERT REAL BUFFER FIELD BITS 6705 /LCMR, THERE IT GOES ! TAD I MEUAC /GET USERS AC AND C7700 / EMA INC: NOT ALLOWED!! 6706 /LFGR, I HOPE THE USER GAVE A 'GO' JMP MECLA / DORCMR, TAD COMAND /READ COMMAND REGISTER JMP MECLA /AND RETURN DOSKJD, JMS MONITOR /WAIT FOR JOB DONE FLAG WAIT MTA CLA / TAD I MEUAC /DON'T DISTURB AC ! JMP MESKP /READY, LET BG SKIP DORMSR, TAD MESTAT /GET ERROR-REG. JMP MECLA MEIR, 6714 /IR-SERV-ROUT. DCA MESTAT /STORE STAT-REG. 6725 /CLEAR FLAGS TAD XMTA CIF 0 JMS I ZSOFINT MESTAT, 0 /VARIABLES: COMAND, 0 MEUAC, 0 PAGE / > IFDEF TC58 < *0;CDF 10;EMTAB+70;ME *0;CDF 10;EMTAB+71;ME *0;CDF 10;EMTAB+72;ME *0;CDF 10;EMTAB+73;ME /TASK HEADER: *200 ME /NAME IS 'ME' 400 /TWO PAGE TASK /PAGE HEADER: XINIT, INIT XTABLE, TABLE MEBASE, 0 /POINTER TO BASE OF CALLING BG /TASK CODE: JMS I XINIT /INITIALIZATION DCA MEBASE / TAD MEBASE /PREPARE SOME POINTERS TAD (UAC / DCA MEUAC / TAD MEBASE / TAD (UPC / DCA MEUPC / TAD MEBASE / TAD (UINST / JMS DEFER /GET TRAPPED INSTRUCTION AND C37 /ONLY 6700 - 6737 TAD XTABLE DCA ZTEM1 /INDEX IN TABLE CDTOIF // TAD I ZTEM1 // DCA ZTEM1 // CDF 10 /RESTORE DATAFIELD JMP I ZTEM1 / DOMTAF, 6711 /MTCR, CONTROL READY ? SKP /NO, DON'T CLEAR COMMAND LATCH DCA COMAND /RESET COMMAND REGISTER DOIT, TAD I X /GET INSTRUCTION AGAIN DCA MEINST /AND PUT IT AHEAD TAD I MEUAC /GET USER AC IN AC MEINST, HLT /THE IOT SKP /JUST IN CASE IT IS A SKIP MESKP, ISZ I MEUPC /INCREMENT USER PC NOP /SAFETY FIRST MECLA, DCA I MEUAC /RESTORE USER AC NOOP, JMS MONITOR /AND RETURN RETURN / DOMTLF, TAD I MEUAC /GET USER AC DCA MEFLD /AND STORE FIELD BITS JMP NOOP / DOMTRC, TAD COMAND /OR COMMAND REGISTER INTO AC MQL TAD I MEUAC MQA JMP MECLA /AND STORE RESULT IN AC DOMTCM, TAD I MEUAC /GET USER AC IN MQ MQL / TAD COMAND / AND (7707 /CLEAR BIT 6-8 MQA /OR AC 0-5, 9-11 IN COMMAND DCA COMAND /NEW VALUE OF COMMAND LATCH JMP NOOP /DO NOT CLEAR THE AC (?) DOMTSF, JMS MONITOR /WAIT FOR DONE FLAG WAIT MTA CLA CLL JMS GETFLD /GET USERS FIELD 0 IN CORE TAD C6201 /MAKE CDF TO VIRTUAL FIELD 0 DCA MECDF / CDF 0 //GET REAL CA AND WC FROM FIELD 0 TAD I (7752 // MQL TAD I (7753 // MECDF, CDF //SET DATAFIELD TO VIRTUAL FIELD 0 DCA I (7753 //AND STORE RESULTING WC AND CA MQA // DCA I (7752 // CDF 10 /RESTORE DATAFIELD TAD I MEUAC /(DON'T DISTURB USER AC) JMP MESKP /LET USER SKIP DOMTLC, TAD I MEUAC /GET USER AC DCA COMAND /AND STORE IN COMMAND LATCH JMP NOOP /DONE DOMTGO, JMS GETFLD /GET VIRTUAL FIELD 0 IN CORE CDTOAC //CHANGE DATAFIELD TO VIRTUAL FIELD 0 TAD I (7752 //GET USERS CURRENT ADDRESS REGISTER MQL //SAVE FOR A WHILE TAD I (7753 //GET WORD COUNT AS WELL CDF 0 //NOW ADDRESS REAL FIELD 0 DCA I (7753 //STORE REAL WORDCOUNT MQA // DCA I (7752 //AND CURRENT ADDRESS CDF 10 /RESTORE DATAFIELD TAD MEFLD /GET FIELD BITS CLL RTL /SHIFT TO BIT 6-8 RAL JMS GETFLD /GET TARGET FIELD IN CORE CLL RTR /SHIFT REAL FIELD # TO BITS 9-11 RAR / 6734 /AND LOAD FIELD NUMBER IN CONTROL CLA / TAD COMAND /LOAD COMMAND IN CONTROL AND (7773 / TAD C4 / 6716 /MTLC CLA / 6722 /MTGO START THE TAPE ! JMP NOOP /AND RETURN GETFLD, 0 /ROUTINE TO GET A FIELD IN CORE AND C70 /CLEAR GARBAGE TAD I MEBASE /ADD VIRTUAL FIELD BITS TO BG STATUS TAD (-EMULATE+INCORE /CLEAR EMULATE, SET INCORE DCA I MEBASE / JMS MONITOR /SIGNAL BACKGROUND SCHEDULER SIGNAL BSSLOT TAD MEBASE /GET USERS EVENT NUMBER TAD (USLOT JMS DEFER / DCA .+3 / JMS MONITOR /AND WAIT TILL TARGET FIELD IN CORE WAIT 0 /(GETS USER EVENT #) JMP I GETFLD /RETURN COMAND, 0 MEFLD, 0 MEUAC, 0 MEUPC, 0 PAGE /PAGE HEADER: TABLE, NOOP /6700 DOMTSF /6701 MTSF DOIT /6702 NOOP /6703 DOIT /6704 NOOP /6705 DOIT /6706 MTRS NOOP /6707 NOOP /6710 DOIT /6711 MTCR DOMTAF /6712 MTAF NOOP /6713 DOMTCM /6714 MTCM NOOP /6715 DOMTLC /6716 MTLC NOOP /6717 NOOP /6720 DOIT /6721 MTTR DOMTGO /6722 MTGO NOOP /6723 DOMTRC /6724 MTRC NOOP /6725 NOOP /6726 NOOP /6727 NOOP /6730 NOOP /6731 NOOP /6732 NOOP /6733 DOMTLF /6734 MTLF NOOP /6735 NOOP /6736 NOOP /6737 MEPAT, 0 /INITIALISATION CODE: INIT, 0 DCA ZTEM1 /SAVE AC SZL /EXIT CALL ? JMP MEQUIT /YES TAD ZTEM1 TAD (UASEM-1 /SETUP POINTER TO UASEM DCA MEPAT /IN OUR BG TABLE MEASLP, ISZ MEPAT TAD I MEPAT /LOOK AT ENTRY SNA /IS IT FREE ? JMP MEASFR /YES, GO PUT IN MY NAME CIA TAD MENAME /WAS IT ALREADY USED BY ME ? SZA CLA JMP MEASLP /NO, SOME OTHER TASK, LOOK FOR MORE MEASFR, TAD MENAME DCA I MEPAT /OK, PUT MY NAME IN UASEM TABLE TAD ZTEM1 JMP I INIT /EXECUTE TASK MEQUIT, JMS MONITOR /EXIT EXIT SWPOUT MENAME, "M^100+"E&3777 PAGE / > $-$-$