/ STAND-ALONE CASSETTE HANDLER / DEC-8E-UCASA-A-LA / COPYRIGHT 1972 / DIGITAL EQUIPMENT CORPORATION / MAYNARD MASSACHUSETTS 01754 / OCTOBER 19, 1972 KCLR=6700 /CLEAR ALL /CLEAR STATUS A AND B REGISTERS. KSDR=6701 /SKIP ON DATA FLAG KSEN=6702 /SKIP ON ERROR KSBF=6703 /SKIP ON READY FLAG KLSA=6704 /LOAD STATUS A FROM AC 4-11 /CLEAR AC, THEN /LOAD 8 BIT COMPLEMENT OF STATUS A /BACK INTO AC KSAF=6705 /SKIP ON ANY FLAG OR ERROR KGOA=6706 /ASSERT THE CONTENTS OF STATUS A, /TRANSFER DATA IF READ OR WRITE KRSB=6707 /READ STATUS B INTO AC 4-11 ORG2=1400 ORG3=1600 ORG1=1200 /ORIGIN FOR SUBROUTINE AFIELD=1 /FIELD OF SUBROUTINE F=10^AFIELD INT=1 DISMIS=6 /THIS ROUTINE LEAVES WITH INTERRUPTS OFF AND DEVICE SELECTED /AND READY. /THE NEW UNIT NUMBER (0-7) IS IN THE AC. /THE UNIT NUMBER IS IN BITS 8-11 OF THE AC. /RETURN 1 IS MADE IF THE UNIT IS NOT READY. /CINUSE IS SET TO 1. /THE HANDLER MUST NOT ALREADY BE IN USE. /THE DATA FIELD IS INTERROGATED /AND A RETURN CIF CDF IS BUILT /AND STORED IN LOCATION RETCIF FIELD AFIELD *ORG1 IFNZRO INT < WAIT, 0 RDF TAD (CIF CDF DCA WAITEND CDF F CWAIT, TAD I (CINUSE SNA JMP WLV /ZERO MEANS READY SMA CLA JMP CWAIT /1 MEANS IN USE DCA I (CINUSE /-1 MEANS HAD ERROR TAD I (BSTATE /LEAVE WITH STATUS REGISTER B IN AC SKP /TAKE ERROR RETURN WLV, ISZ WAIT WAITEND,HLT JMP I WAIT > FIXDVC, 0 DCA DVC RDF TAD (CIF CDF CDF F DCA TMP TAD I FIXDVC DCA ERRET ISZ FIXDVC TAD TMP DCA I ERRET IFNZRO INT TAD DVC RAR /MOVE UNIT TO LINK; DEVICE TO AC AND (3 /MASK OFF DEVICE CODE DCA DVC /SAVE DEVICE CODE SZL TAD (100 DCA ABUNIT /SET UNIT IN BIT 5 TAD DVC CLL RTL RAL /UGLY DCA DVC /MOVE TO BITS 6-8 TAD (IOTBL DCA IOTPTR IOTLOOP,TAD I IOTPTR SNA /END OF TABLE? JMP CHECKR /YES DCA TMP TAD I TMP AND (7707 /MASK OUT OLD DVC TAD DVC /INSERT NEW ONE DCA I TMP /REPLACE ISZ IOTPTR /POINT TO NEXT ONE JMP IOTLOOP TMP, 0 DVC, 0 /DEVICE CODE IOTPTR, 0 CHECKR, JMS I (CLEAR TAD (200 JMS I (LOADA /SELECT DRIVE JMS I (CHECKB AND (7735 /IGNORE EOT/BOT FLAG /AND WLO TAD (-1 SZA CLA JMP I ERRET /NOT READY ISZ I (CINUSE JMP I FIXDVC ERRCOV, KCLR TAD (250+INT JMS I (LOADA JMS I (GO /BACKSPACE BLOCK JMS I (CRET /WAIT JMS I (CHECKB AND (374 /KILL WRITE-LOCK BIT SZA CLA JMP I (ERRR JMS I (SETUP /RE-SET UP OPERATION JMP I (CRET+1 /GO AWAY IOTBL, IOT0 IOT1 IOT4 IOT5 IOT6 IOT6C IOT7 ERRCOV 0 LOADA, 0 TAD ABUNIT IOT4, KLSA CLA JMP I LOADA ABUNIT, 0 ERRET, 0 /ERROR RETURN LOCATION PAGE *ORG2 UTIL, 0 DCA TEMPU DCA REWSW /ZERO REWIND SWITCH TAD I UTIL TAD (-10 SNA ISZ REWSW ISZ UTIL TAD (210+INT DCA TEMPFN TAD TEMPU JMS I (FIXDVC /FIX DEVICE CODE UTEND /UNIT NOT READY TAD (UT DCA CRET /SET RETURN ADDRESS TAD TEMPFN JMS I (LOADA JMS GO /INITIATE UTIL IFZERO INT ISZ UTIL UTEND, HLT IFNZRO INT JMP I UTIL UT, JMS CHECKB /LOOK AT STATUS B AND (50 /CHECK FOR CL, EMPTY, OR WLO /GIVE NO ERROR ON WLO ************ /BAD FOR WRGAP SNA JMP OK /NO ERRORS TAD (-40 SZA CLA JMP NOTOK /ERROR NOT CL TAD REWSW SNA CLA /CL OK IF DID REWIND NOTOK, STA OK, JMS CLEAR IFNZRO INT IFZERO INT < TAD CINUSE SMA CLA JMP UTEND-1 TAD BSTATE /ERROR JMP UTEND > TEMPU, 0 TEMPFN, 0 REWSW, 0 /1 MEANS OPERATION IS REWIND CHECKB, 0 IOT7, KRSB /READ STATUS B INTO AC 4-11 DCA BSTATE /SAVE STATUS B TAD BSTATE JMP I CHECKB CLEAR, 0 DCA CINUSE /LEAVE STATUS CONDITION IN AC; -1 MEANS ERROR IOT0, KCLR /CLEAR STATUS A AND B JMP I CLEAR GO, 0 IOT6, KGOA /ASSERT CONTENTS OF STATUS A CLA JMP I GO CHK, 0 JMS I (CHECKB AND (376 IOT1, KSDR SKP /DATA FLAG NOT UP - JMP I CHK TAD (-20 SNA CLA /IS IT END OF FILE? JMP I (ERRR /YES, ERROR - BUT DON'T RETRY TAD BSTATE JMP I CHK CINUSE, 0 /1 MEANS HANDLER IN USE BSTATE, 0 /STATUS OF REGISTER B ON ERROR IFNZRO INT < CRET, 0 CIF CDF 0 JMP I .+1 DISMIS IOT5, KSAF NXTSKP, HLT JMP I CRET > IFZERO INT < CRET, 0 CDF F IOT5, KSAF JMP .-1 JMP I CRET > PAGE *ORG3 HANDLER,0 DCA TUN TAD I HANDLER /GET FUNCTION CONTROL WORD AND L70 /ISOLATE FIELD OF BUFFER TAD (CDF DCA WCDF TAD I HANDLER /RETRIEVE FUNCTION CONTROL WORD RAL /READ/WRITE BIT TO LINK CLA RAL DCA RW /RW=1 IF WRITE ISZ HANDLER /POINT TO BUFFER ADDRESS TAD I HANDLER /GET BUFFER ADDRESS DCA BUFFER /SAVE IT ISZ HANDLER /POINT TO ERROR RETURN TAD TUN JMS I (FIXDVC LV /NOT READY TAD WCDF DCA BFIELD TAD WCDF DCA BFLD STA CLL RTL /TAD (-3 DCA ERKNT JMS SETUP /SET UP READ OR WRITE IFZERO INT ISZ HANDLER /POINT TO GOOD RETURN LV, HLT IFNZRO INT JMP I HANDLER TUN, 0 /TEMP RW, 0 /1 IF WRITE ERKNT, -3 SETUP, 0 TAD RW TAD (WRITEX DCA I (CRET /SET RETURN ADDRESS TAD BUFFER DCA BPTR TAD I (BSIZE CMA /WANT TO READ ONE MORE TAD RW DCA BKNT TAD RW CLL RTL RTL /WRITE FN CODE=20 TAD (200+INT /SELECT AND INTERRUPT ENABLE JMS I (LOADA WCDF, HLT TAD RW SZA CLA TAD I BPTR CDF F JMS I (GO JMP I SETUP READX, JMS I (CHK AND L374 SZA JMP ERRX IOT6C, KGOA /GET CHAR JUST READ DCA BYTE ISZ BKNT SKP JMP RWCRC BMODE, TAD BYTE BFLD, HLT DCA I BPTR ISZ BPTR L374, 374 JMP I (CRET+1 /CRET ALREADY SET UP BSIZE, 200 RWCRC, TAD (260+INT /ENABLE, ENABLE INTER, READ CRC JMS I (LOADA JMS I (GO JMS I (CRET JMS I (CHK CRCMN, JMS I (GO JMS I (CRET JMS I (CHECKB AND (7775 /IGNORE WLO TAD (-1 ERRX, SNA CLA /ERRORS? JMP ERRR+1 /NO - CLEAN BILL OF HEALTH ISZ ERKNT /TRY 3 TIMES JMP I (ERRCOV /RETRY ERRR, STA /ERROR WHILE READING CRC JMS I (CLEAR IFNZRO INT IFZERO INT < TAD I (CINUSE SMA CLA JMP LV-1 TAD I (BSTATE JMP LV > WRITEX, JMP READX JMS I (CHK SZA JMP ERRX ISZ BKNT SKP JMP WCRC BFIELD, HLT ISZ BPTR L70, 70 TAD I BPTR JMS I (GO JMP I (CRET+1 WCRC, TAD (260+INT JMS I (LOADA JMP CRCMN BKNT, 0 /NUMBER OF CHARS EXPECTED BPTR, 0 /NEXT LOCATION IN BUFFER TO STORE INTO BYTE, 0 /TEMPORARILY HOLDS BYTE FOUND BUFFER, 0 PAGE $