/MDC8 FLOPPY NON-SYSTEM HANDLER / LAST EDIT: 17-FEB-1985 03:00:00 CJL / OS/8 NON-SYSTEM HANDLER FOR TEAC FD-55G 5.25" (8") FLOPPY DRIVES ON / UNIT TWO AND THREE OF OMTI 20-D CONTROLLER WITH CESI MDC8. / HANDLER ASSUMES MDC802 FIRMWARE. / REQUIRES PDP-8/I PROCESSOR (OR BETTER). / (C) 1985 CHARLES LASNER ASSOCIATES. / ASSEMBLY INSTRUCTIONS: / CHANGE "DEVCODE" TO PROPER DEVICE CODE AS NECESSARY (DEFAULT IS 70). / CHANGE "DEVNUM" TO PROPER OS/8 DEVICE NUMBER AS NECESSARY (DEFAULT IS 62). / MAY BE ASSEMBLED WITH '/J' (OS/8 PAL8 '/F') SWITCH SET. / ASSEMBLY DEFINITIONS, ETC. / MDC8 IOT DEFINITIONS. IFNDEF DEVCODE /USES 670X BY DEFAULT DSEI= DEVCODE^10+6000 /INTERRUPT ENABLE/DISABLE PER AC[11] DSSF= DEVCODE^10+6001 /SKIP ON DONE FLAG DSCF= DEVCODE^10+6002 /CLEAR DONE FLAG DSHI= DEVCODE^10+6003 /LOAD HIGH-ORDER COMMAND ADDRESS DSGO= DEVCODE^10+6004 /LOAD LOW-ORDER COMMAND AND GO / = DEVCODE^10+6005 /UNUSED DSRS= DEVCODE^10+6006 /READ STATUS DSIM= DEVCODE^10+6007 /INTERFACE MAINTENANCE INSTRUCTION / OTHER DEFINITIONS. IFNDEF DEVNUM /USE 62 FOR DEFAULT OS/8 DEVICE NUMBER DMA= 4000 /DMA INDICATOR NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 VERSION="E&77 /VERSION NUMBER FOR RESORC / BUILD HEADER, ETC. *0 /THAT'S WHERE BUILD WANTS IT! -2 /TWO HANDLERS IN THIS GROUP DEVICE MDFL /GROUP NAME DEVICE FLP0 /PERMANENT NAME DEVNUM^10+4000 /DCB WORD FLP0&177 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY DEVICE MDFL /GROUP NAME DEVICE FLP1 /PERMANENT NAME DEVNUM^10+4000 /DCB WORD FLP1&177 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY PAGE /ACTUAL HANDLER CODE GOES HERE TSTKBD, .-. /TEST FOR <^C> ROUTINE KSF /FLAG UP? JMP I TSTKBD /NO, RETURN KRS /YES, READ IT IN AND L177 /JUST SEVEN-BIT TAD L7775 /COMPARE TO <^C> SZA CLA /SKIP IF IT MATCHES JMP I TSTKBD /ELSE JUST RETURN LCIDF, CIF CDF 00 /BACK TO FIELD 0 JMP I L7600 /BACK TO OS/8 MONITOR WAIT, .-. /WAIT ROUTINE DSSF /FLAG UP? JMP .-1 /NO, WAIT FOR IT DSCF /YES, CLEAR IT DSRS /GET STATUS NOW CLL RAL /REMOVE BUSY BIT SNA CLA /SKIP IF ANY ERRORS JMP I WAIT /ELSE RETURN NL4000 /SET ERROR VALUE JMP CALLRETURN /TAKE ERROR RETURN COMPTR, TABLE-LOC8 /COMMAND TABLE POINTER ADJUSTMENT FACTOR L100, 100 /CONSTANT 0100 L177, 177 /CONSTANT 0177 L37, 37 /CONSTANT 0037 L40, 40 /CONSTANT 0040 L7775, 7775 /CONSTANT 7775 / COMMAND TABLE. TABLE, 6!DMA /TABLE LENGTH WITH DMA INDICATOR RWCOM, .-.&377 /0010 IF READING, 0012 IF WRITING SECTHI, .-.&377 /UNIT BITS AND HIGH-ORDER SECTOR ADDRESS SECTMD, .-.&377 /MIDDLE SECTOR ADDRESS SECTLO, .-.&377 /LOW-ORDER SECTOR ADDRESS SCTCNT, .-.&377 /SECTOR COUNTER (1-40) CONTRL, 0&377 /CONTROL WORD TRFLD, .-.&377 /BANK (0000) AND TRANSFER FIELD (0-7) TRADDR, .-. /TRANSFER ADDRESS ZBLOCK 260-. /EMPTY SPACE FLP0, VERSION /FLOPPY 0 ENTRY POINT L7600, CLA!400 /CLEAN UP TAD FLP0 /GET OUR CALLER DCA FLP1 /MAKE IT THEIRS JMP COMMON /CONTINUE THERE FLP1, VERSION /FLOPPY 1 ENTRY POINT CLA /CLEAN UP TAD L40 /INDICATE FLOPPY ONE COMMON, TAD L100 /GET FLOPPY UNIT BIT DCA SECTHI /STORE IN COMMAND RDF /GET CALLING FIELD TAD LCIDF /MAKE INTO CIF CDF RETURN INSTRUCTION DCA CALLRET /SAVE FOR EXIT LATER NL4000 /SET READ/WRITE MASK AND I FLP1 /GET READ/WRITE BIT CLL IAC RTL /4 IF READING, 5 IF WRITING RAL /10 IF READING, 12 IF WRITING DCA RWCOM /STASH COMMAND TAD I FLP1 /GET FUNCTION WORD RTR;RTR;RTR /MOVE OVER AND L37 /JUST PAGE BITS SNA /SKIP IF ANY TAD L40 /ELSE USE MAXIMUM DCA SCTCNT /STASH SECTOR COUNT TAD I FLP1 /GET FUNCTION WORD AGAIN RAR /MOVE OVER AND L37 /JUST FIELD BITS (MOSTLY) CLL RTR /MOVE DOWN DCA TRFLD /STORE (BANK AND) FIELD ISZ FLP1 /BUMP TO TRANSFER ADDRESS TAD I FLP1 /GET TRANSFER ADDRESS DCA TRADDRESS /STASH IN COMMAND ISZ FLP1 /BUMP TO RECORD NUMBER TAD I FLP1 /GET RECORD NUMBER CLL RAL /DOUBLE TO PAGE-SIZE BLOCKS DCA SECTLO /STORE LOW-ORDER SECTOR ADDRESS TAD SECTLO /GET IT BACK AND L7600/7400 /JUST HIGH-ORDER BITS RTL;RTL;RAL /MOVE UP DCA SECTMD /STORE MIDDLE SECTOR ADDRESS ISZ FLP1 /BUMP TO ERROR RETURN JMS LOC8 /FIND OUT WHERE WE ARE LOADED LOC8, .-. /WILL BE OUR OWN PC JMS TSTKBD /CHECK FOR <^C> DSRS /GET STATUS SPA CLA /SKIP IF CONTROLLER IS IDLE JMP .-3 /ELSE WE MIGHT AS WELL WAIT DSHI /SEND HIGH-ORDER COMMAND ADDRESS DSRS /GET STATUS SMA CLA /SKIP IF BUSY JMP .-2 /ELSE KEEP WAITING DSCF /CLEAR DONE FLAG NOW TAD LOC8 /GET OUR PC TAD COMPTR /ADJUST TO COMMAND TABLE DSGO /GO START IT UP JMS WAIT /WAIT FOR COMMAND TO TAKE DSIM /FINISH THE COMMAND JMS WAIT /WAIT FOR COMMAND TO COMPLETE JMS TSTKBD /CHECK FOR <^C> ISZ FLP1 /BUMP RETURN ADDRESS CALLRET,.-. /WILL BE CIF CDF RETURN INSTRUCTION JMP I FLP1 /RETURN TO CALLER $ /THAT'S ALL FOLK!