/MDC8 FLOPPY SYSTEM HANDLER / LAST EDIT: 17-FEB-1985 03:00:00 CJL / OS/8 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 REQUIRES MDC802 FIRMWARE. / REQUIRES PDP-8/I PROCESSOR (OR BETTER). / (C) 1985 CHARLES LASNER ASSOCIATES. / ASSEMBLY INSTRUCTIONS: / CHANGE "DEVCODE" TO PROPER DECIDE 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="E&77 /VERSION NUMBER FOR RESORC / BUILD HEADER, ETC. *0 /THAT'S WHERE BUILD WANTS IT! -3 /TWO HANDLERS IN THIS GROUP DEVICE MDFS /GROUP NAME DEVICE SYS /PERMANENT NAME DEVNUM^10+4000 /DCB WORD SYSENT&177+2000 /ENTRY POINT WORD 0 /BUILD WANTS IT THIS WAY 3722 /DEVICE LENGTH FOR ZEROING SYS: /2002 DECIMAL BLOCKS DEVICE MDFS /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 MDFS /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 /1401 FOR UNIT 3/BOOTSTRAP VALUE / IT IS ALSO POSSIBLE TO BOOTSTRAP THE SYSTEM BY EXECUTING A BOOT COMMAND / FROM AN EXTERNAL LOCATION: *1000 /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 /1401 FOR UNIT 3/BOOTSTRAP VALUE *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 /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 /ADD ON CURRENT VALUE DCA I BSYSZAP /STORE IT BACK JMP I B7605 /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 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 /GET ODD UNIT BIT SYSCOMM,TAD S100 /GET DRIVE PAIR BIT DCA SECTHI /STORE IN COMMAND RDF /GET CALLING FIELD TAD SCIF /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 /JUST PAGE BITS SNA /SKIP IF ANY TAD S40 /ELSE USE MAXIMUM DCA SCTCNT /STORE IN COMMAND TAD I FLP1 /GET FUNCTION WORD AGAIN RAR /MOVE OVER AND S37 /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 /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 S100, 100 /CONSTANT 0100 S37, 37 /CONSTANT 0037 S40, 40 /CONSTANT 0040 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 RELOC /TURN OFF RELOCATION $ /THAT'S ALL FOLK!