File: CR.TK of Disk: Disks/MyPDP/m8-blue-rka1-rkb1
(Source file text)
/CR.TK 9-SEP-79 /TWOPAGE EMULATOR FOR CARDREADER. ONE PAGE CODE, ONE PAGE /BUFFER. EMULATES THE FOLLOWING IOT'S: /6672 READ ONE CARD AND SKIP. IF CARDREADER NOT READY, / DON'T SKIP. ONE CARD IS READ INTO INTERNAL BUFFER. / /6671 SKIP WHEN BUFFER IS EMTIED, DON'T SKIP IF MORE CHAR / IN BUFFER. / /6631 SKIP IF DATA FLAG. PATCHED WITH A SKP. / /6632 ONE CHARACTER FROM THE BUFFER GOES INTO UAC. / /PUT NAME IN EMTAB: *0 CDF 10 /EMTAB IS IN FIELD 1 EMTAB+63 "C^100+"R&3777 *0 CDF 10 /EMTAB IS IN FIELD 1 EMTAB+67 "C^100+"R&3777 *0 CDF BGFLD /KILL 'DEVICE CDR...' IN M5.PA CDRPAT 0000 *200 "C^100+"R&3777 /TASK NAME IS CR 401 /TWO PAGES, ONE CONNECT. CCRD, CRD /THE CARDREADER EVENT CRINT /INTERRUPT ENTRY POINT CRBUF, CRBBEG /BEGIN OF BUFFER XINIT, INIT CRPATCH, 0 CR, JMS I XINIT /'CHANGED TO: /SZL /DID HE QUIT ? JMP CRCLR /YES, RELEASE DEVICE TAD C3 /(UPC DCA CRUPC TAD CRUPC IAC JMS DEFER /GET HIS VIRTUAL FIELDS AND C70 /INSTRUCTION FIELD TAD CRUPC TAD (UFLD0-UPC /GET REAL FIELD JMS DEFER TAD C6201 /MAKE A CDF DCA CRCDF+1 ACM1 TAD I CRUPC /ADDRESS OF USERS INSTRUCTION DCA CRPNT TAD CRUPC TAD C2 DCA CRUAC /POINTER TO UAC TAD CRUAC IAC JMS DEFER /GET INSTRUCTION TAD (-6672 SNA /SELET CARDREADER ? JMP CRREAD /YES, READCARD TAD (6672-6671 SNA /SKIP IF DONE ? JMP SKDONE TAD (6671-6632 SNA /READ COLLUM ? JMP CRDAT TAD (6632-6631 SZA CLA /SKIP IF DATA READY? JMP CRRET /NO, DO NOTHING JMS EQUAL /POINTERS EQUAL ? CRSKP, SKP /NO JMP CRRET /YES, DO NOTHING TAD CRPNT DCA CRTPNT /REMEMBER THIS POINT TAD CRSKP JMS CRCDF DCA I CRPNT /RESTORE SKIP INSTRUCTION CRSRET, CDF 10 ISZ I CRUPC /LET HIM SKIP CRRET, CLA CLL JMS MONITOR RETURN CRREAD, AC0001 /ENABLE INTERRUPTS 6635 6672 /SELECT CARDREADER JMP CRRET /NOT READY, RETURN CLA CLL DCA CRDONE /CLEAR SOFTWARE DONE TAD CRBUF DCA CRADRI /INITIALISE INPUT POINTER TAD CRADRI DCA CRADRO /INITIALISE OUTPUT POINTER JMP CRSRET /TAKE SKIP-RETURN CRDAT, AC0001 TAD CRADRO AND C177 TAD CRBUF DCA CRADRO /BUMP WITH WRAP-AROUND FOR SAFETY CDTOIF //TO FIELD OF BUFFER TAD I CRADRO //GET NEXT CHAR CDF 10 DCA I CRUAC /DROP IN USERS AC JMS EQUAL /POINTERS EQUAL? JMP CRRET /NO, JUST RETURN TAD CRINT /YES, RESTORE SKIP-ON-DATA JMS CRCDF DCA I CRTPNT /RESTORE INSTRUCTION JMP CRRET SKDONE, JMS EQUAL JMP CRRET TAD CRDONE SZA CLA /REALY FINISHED ? JMP CRSRET /YES JMP CRRET /NO CRCLR, CLA DCA I CRPATCH /REMOVE MYSELF FROM ASEMTB JMS MONITOR EXIT SWPOUT /INTERRUPT ROUTINES: CRINT, 6631 ///DATA FLAG UP ? JMP CREND ///MUST BE END OF CARD AC0001 /// TAD CRADRI /// AND C177 /// TAD CRBUF /// DCA CRADRI ///BUMP WITH WRAP AROUND FOR SAFETY 6632 ///READ COLLUM ALFA, CLEARS FLAG DCA I CRADRI ///PUT CHAR IN BUFFER INTEXT, CDF CIF 00 /// JMP I ZFSTEXT ///INTERRUPT EXIT CREND, 6671 ///DONE FLAG UP ? JMP INTEXT ///GHOST INTERRUPT 6674 ///CLEAR DONE FLAG CLA CMA /// DCA CRDONE /// JMP INTEXT /// EQUAL, 0 TAD CRADRO CIA TAD CRADRI SNA CLA ISZ EQUAL JMP I EQUAL CRCDF, 0 /CDF TO USERS REAL INSTRUCTION FIELD CDF JMP I CRCDF CRUPC, 0 CRDONE, 0 CRTPNT, 0 CRUAC, 0 CRPNT, 0 CRADRI, 0 CRADRO, 0 PAGE CRBBEG, CRPATCH INIT, 0 DCA ZTEM1 /REMEMBER AC TAD (ASEMTB-1 DCA AUTO10 TAD I AUTO10 SZA CLA /LOOK FOR FREE ENTRY IN ASEMTB JMP .-2 TAD AUTO10 DCA ZTEM2 CDF 0 // TAD I (CURTSK // CDF 10 / DCA I ZTEM2 TAD ZTEM2 CDTOIF DCA I CRBBEG /STORE ASEMTB ENTRY IN CRPATCH ACM1 TAD INIT DCA INIT TAD (SZL / DCA I INIT /REMOVE CALL TO INIT CDF 10 /RESTORE ORIGINAL DATAFIELD CLL /LINK MUST BE ZERO HERE TAD ZTEM1 /RESTORE AC JMP I INIT /RETURN TO MAIN LINE