/ FLOPPY DISK SYSTEM HANDLER / 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 A SET OF HANDLERS FOR SYS AND UP TO TWO ADDITIONAL / CO-RESIDENT HANDLERS. THE SYSTEM HANDLER CAN BE BOOTSTRAPPED ON EITHER DRIVE / TWO OR THREE; THE ASSOCIATED NON-SYSTEM CO-RESIDENT HANDLERS WILL ADDRESS / DRIVE TWO (FLP0) AND THREE (FLP1). UNLIKE CERTAIN OTHER HANDLERS, THE / CO-RESIDENT HANDLERS' UNITS ARE NOT AFFECTED BY THE BOOTSTRAP UNIT OF SYS. / THE USER CAN DETERMINE IF FLP0 OR FLP1 IS ANOMALOUS TO THE SYSTEM UNIT AS / NECESSARY, SINCE USER PREFERENCE MAY DICTATE THIS. / 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 SBOOT= 7600 /NORMAL SYSTEM BOOSTRAP ADDRESS VERSION="F&77 /VERSION NUMBER FOR RESORC / BUILD HEADER, ETC. *0 /THAT'S WHERE BUILD WANTS IT! -3 /TWO HANDLERS IN THIS GROUP DEVICE FDSK /GROUP NAME DEVICE SYS /PERMANENT NAME DEVNUM^10+4000 /DCB WORD SYSENT&177+2000 /ENTRY POINT WORD 0 /BUILD WANTS IT THIS WAY 120^32/^2%2 /DEVICE LENGTH FOR ZEROING SYS: TO 2080 BLOCKS DEVICE FDSK /GROUP NAME DEVICE FLP0 /PERMANENT NAME DEVNUM^10+4000 /DCB WORD FLP0&177+1000 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY DEVICE FDSK /GROUP NAME DEVICE FLP1 /PERMANENT NAME DEVNUM^10+4000 /DCB WORD FLP1&177+1000 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY BSTART-BEND /BOOTSTRAP LENGTH / THE BOOTSTRAP CODE FOLLOWS (WHEN BINARY OUTPUT RESUMES). / MANUAL BOOTSTRAP FOR FLOPPY SYSTEM. HERE, NOPUNCH /FOOL THE ASSEMBLER *0 /WHERE THE CODE IS READ IN SCNDBT, *21 /GET TO TOGGLE-IN REGION SHORTBT,CAF /POWER CLEAR IS GOOD ENOUGH TO CLEAR AC TAD BTUNIT /GET BOOTSTRAP VALUE DSIM /START IT UP BOVRLAY,JMP . /WAIT FOR OVERLAY BTUNIT, 1001 /BOOTSTRAP VALUE; 1401 FOR UNIT 3 / IT IS ALSO POSSIBLE TO BOOTSTRAP THE SYSTEM BY EXECUTING A BOOT COMMAND / FROM AN EXTERNAL LOCATION: *400 /ANYWHERE PAST 377 WILL DO EXTRNBU,CAF /POWER CLEAR IS GOOD ENOUGH TO CLEAR AC TAD EXTUNIT /GET BOOTSTRAP VALUE DSIM /START IT UP ISZ .-2 /WAIT FOR JMP .-1 /AWHILE DSRS /GET STATUS NOW SPA /SKIP IF NOT BUSY JMP .-2 /ELSE WAIT FOR IT SZA /SKIP IF OK HLT /ELSE COMPLAIN TAD EXTUNIT /GET UNIT BITS AGAIN JMP BEXTERN /CONTINUE THERE EXTUNIT,1001 /BOOTSTRAP VALUE; 1401 FOR UNIT 3 *HERE /RESTORE ORIGIN HERE, ENPUNCH /RESTORE BINARY OUTPUT RELOC SCNDBT /WHERE THIS CODE COMES IN BSTART, DCA BOVRLAY /SAVE PASSED UNIT DSRS /GET CURRENT STATUS SPA /SKIP IF NOT BUSY JMP .-2 /ELSE WAIT FOR IT SZA /BETTER BE CLEAR HLT /ELSE BARF! BLOOP, TAD I BFROM1 /GET A FIELD ONE WORD CDF 10 /GOTO FIELD ONE DCA I BCOUNT /STORE IT CDF 00 /BACK TO FIELD ZERO TAD I BFROM2 /GET A FIELD ZERO WORD DCA I BCOUNT /STORE IT ISZ BCOUNT /DONE ALL YET? JMP BLOOP /NO, GO BACK FOR MORE / THE FOLLOWING TWO WORDS MUST BE HERE (TO BE AUTO-INDEX REGISTERS) / AND EXECUTE AS AND INSTRUCTIONS. BFROM1, BSTART-1 /WHERE FIELD ONE CODE IS NOW BFROM2, BSTART+200-1 /WHERE FIELD ZERO CODE IS NOW B400, 400 /CONSTANT 0400 TAD BOVRLAY /GET BOOTSTRAP UNIT AND B400/(400) /JUST ODD UNIT BIT JMP BMORE /CONTINUE THERE BOVRLAY,JMP BSTART /OVERLAYS WAITING MACHINE HERE IFNZRO 25-. BEXTERN,DCA BOVRLAY /EXTERNAL BOOTSTRAP STARTS HERE;SAVE PASSED UNIT JMP BLOOP /CONTINUE THERE BMORE, SZA CLA /SKIP IF EVEN UNIT CMA /ELSE CREATE BACKUP VALUE TAD I BSYSZAP/(SYSZAP)/ADD ON CURRENT VALUE DCA I BSYSZAP/(SYSZAP)/STORE IT BACK JMP I B7605/(7605) /GO START IT UP BCOUNT, SBOOT /COUNTER AND POINTER BSYSZAP,SYSZAP /WHERE TO ZAP THE CODE B7605, 7605 /WHERE TO RESTART OS/8 BEND= . /END OF BOOTSTRAP OVERLAY CODE RELOC /RESTORE REAL ORIGIN PAGE /ACTUAL HANDLER CODE HERE RELOC 7600 /WHERE IT EXECUTES SBOOT, ZBLOCK 7 /BUILD WANTS IT THIS WAY SYSENT, VERSION /SYSTEM HANDLER ENTRY POINT S7600, CLA!400 /CLEAN UP TAD SYSENTRY /GET OUR CALLER DCA FLP1 /MAKE IT THEIRS SYSZAP, JMP SYSCOMMON /**** BOOT UNIT 3 **** JMP SYSCOMMON-1 S100, 100 /CONSTANT 0100 FLP0, VERSION /FLOPPY ZERO HANDLER ENTRY POINT SCMPTR, SPA SZL CLA /COMMAND POINTER;THIS CLEARS THE AC SCIF, CIF 00 /CIF CONSTANT;THIS CAN BE SKIPPED TAD FLP0 /GET OUR CALLER DCA FLP1 /MAKE IT THEIRS JMP SYSCOMMON /CONTINUE THERE FLP1, VERSION /FLOPPY ONE HANDLER ENTRY POINT CLA /CLEAN UP TAD S40/(40) /GET ODD UNIT BIT SYSCOMM,TAD S100/(100) /GET DRIVE PAIR BIT DCA SECTHI /STORE IN COMMAND RDF /GET CALLING FIELD TAD SCIF/(CIF) /TURN INTO CIF RETURN FIELD INSTRUCTION DCA SYSRETURN /STORE IN-LINE NL4000 /SET READ/WRITE MASK AND I FLP1 /GET THE BIT CLL IAC RTL /4 IF READING, 5 IF WRITING RAL /10 IF READING, 12 IF WRITING DCA RWCOM /STORE IN COMMAND TAD I FLP1 /GET FUNCTION WORD RTR;RTR;RTR /MOVE OVER AND S37/(37) /JUST PAGE BITS SNA /SKIP IF ANY TAD S40/(40) /ELSE USE MAXIMUM DCA SCTCNT /STORE IN COMMAND TAD I FLP1 /GET FUNCTION WORD AGAIN RAR /MOVE OVER AND S37/(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 /STORE IN COMMAND ISZ FLP1 /BUMP TO RECORD NUMBER TAD I FLP1 /GET RECORD NUMBER CLL RAL /DOUBLE TO PAGE-SIZE BLOCKS DCA SECTLO /STORE IN COMMAND TAD SECTLO /GET IT BACK AND S7600/(7400) /JUST HIGH-ORDER BITS RTL;RTL;RAL /MOVE UP DCA SECTMD /STORE IN COMMAND ISZ FLP1 /BUMP TO ERROR RETURN DSRS /GET STATUS NOW SPA CLA /SKIP IF IDLE JMP .-2 /ELSE WAIT FOR IT DSHI /SEND HIGH-ORDER COMMAND ADDRESS DSRS /GET STATUS SMA CLA /SKIP IF BUSY JMP .-2 /ELSE WAIT FOR IT DSCF /CLEAR DONE FLAG NOW TAD SCMPTR/(TABLE) /POINT AT OUR COMMAND DSGO /GO START IT UP JMS SWAIT /WAIT FOR COMMAND TO TAKE DSIM /FINISH THE COMMAND JMS SWAIT /WAIT FOR COMMAND TO COMPLETE ISZ FLP1 /BUMP TO GOOD RETURN SYSRETU,.-. /WILL BE CIF RETURN FIELD JMP I FLP1 /RETURN TO CALLER SWAIT, .-. /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 SWAIT /ELSE RETURN NL4000 /SET ERROR VALUE JMP SYSRETURN /TAKE FAILING RETURN ZBLOCK SPA SZL CLA-. /EMPTY SPACE / COMMAND TABLE. TABLE, 6!DMA /TABLE LENGTH PLUS 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 S37, 37 /CONSTANT 0037 S40, 40 /CONSTANT 0040 RELOC /TURN OFF RELOCATION $ /THAT'S ALL FOLK!