/ FLOPPY DISK NON-SYSTEM HANDLER / NON-SYSTEM HANDLER FOR HIGH-DENSITY FLOPPY DISKS. / LAST EDIT: 16-FEB-1988 22:00:00 CJL / COPYRIGHT (C) 1985, 1988 CHARLES LASNER ASSOCIATES. / SUPPORTED HARDWARE: / CESI MDC8 HOST ADAPTER (MINIMUM FIRMWARE REVISION 02). / OMTI 20-D OR 5000 SERIES DISK CONTROLLER (5200, 5400). / TEAC FD55G 80 TRACK HIGH-DENSITY FLOPPY DRIVES (2, 3). / THIS ASSEMBLY PRODUCES CO-RESIDENT HANDLERS FOR DRIVE TWO (FLP0) AND THREE / (FLP1). / REQUIRES PDP-8/I PROCESSOR (OR BETTER). / 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="F&77 /VERSION NUMBER FOR RESORC / BUILD HEADER, ETC. *0 /THAT'S WHERE BUILD WANTS IT! -2 /TWO HANDLERS IN THIS GROUP DEVICE FL23 /GROUP NAME DEVICE FLP0 /PERMANENT NAME DEVNUM^10+4000 /DCB WORD FLP0&177 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY DEVICE FL23 /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/(177) /JUST SEVEN-BIT TAD L7775/(7775) /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/(SBOOT) /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, CT-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. CT, 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/(40) /INDICATE FLOPPY ONE COMMON, TAD L100/(100) /GET FLOPPY UNIT BIT DCA SECTHI /STORE IN COMMAND RDF /GET CALLING FIELD TAD LCIDF/(CIF CDF) /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/(37) /JUST PAGE BITS SNA /SKIP IF ANY TAD L40/(40) /ELSE USE MAXIMUM DCA SCTCNT /STASH SECTOR COUNT TAD I FLP1 /GET FUNCTION WORD AGAIN RAR /MOVE OVER AND L37/(34) /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/(CT-LOC8)/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!