File: RB01NS.PA of Tape: OS8/OS8-V40/v40-10
(Source file text)
/BYTE MODE HANDLER PDP8-E/VT-78 / / / / / / / / /COPYRIGHT (C) 1980 BY DATAPLAN GMBH, LAUDA, BRD / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DATAPLAN GMBH. /DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR ANY ERRORS THAT MAY APPEAR /IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DATAPLAN'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DATAPLAN. / /DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY /OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DATAPLAN. / / / / / / / / / / / /WVDM, DP, ZUERICH, 1-JAN-80 / PDP-11 COMPATIBLE OS/8 FLOPPY HANDLER -JVZ- /(C) 1979 LAB DATA SYSTEMS, SEATTLE. ALL RIGHTS RESERVED. /THIS IS A NON-SYSTEM DEVICE DRIVER FOR THE RX01,02 FLOPPY /DISK SYSTEM WHICH USES SINGLE DENSITY BYTE MODE (IBM 3740 /FORMAT) TO GET 658 OS/8 BLOCKS PER DISKETTE. /A PDP11-COMPATIBLE FORMAT IS USED SO THAT INFORMATION CAN /BE EASILY TRANSFERRED BETWEEN PDP8 AND PDP11 SYSTEMS. AS /AN OPTION, HOWEVER, ONE MAY SWITCH TO A SPECIAL 'VT/78' /FORMAT IN ORDER TO READ OR WRITE BYTE-MODE FLOPPIES USING /THIS FORMAT: JUST CHANGE 'VT78SW' (LOCATION '200') TO 1. / THIS HANDLER WILL WORK WITH EITHER THE RX01 OR THE RX02 /CONTROLLER: 'ONCE-ONLY' INITIALIZATION CODE DETECTS WHICH /SYSTEM IS IN USE, AND MAKES APPROPRIATE CHANGES THE FIRST /TIME THE HANDLER IS CALLED. ONLY SINGLE-DENSITY DISKETTES /SHOULD BE USED; DOUBLE DENSITY DISKETTES WILL GIVE ERRORS /NOTE: TYPING CTRL/C ON THE KEYBOARD WILL ABORT THE OPERA- /TION AND RETURN TO OS/8. ANY OTHER KEY WILL BE IGNORED. /IN ORDER TO ZERO THE DIRECTORY OF A DEVICE, THE FOLLOWING /CHANGE MUST BE MADE TO THE OS/8 PROGRAM 'PIP.SV': / .GET SYS PIP / .ODT / 13641/XXXX 6556 = -NUMBER OF BLOCKS AVAILABLE / 13642/XXXX 6556 THE SAME FOR VT78 FORMAT / ^C / .SAVE SYS PIP / .SAVE SYS PIP (TWICE TO KEEP SAME LOCATION) /TO CHANGE FROM 'PDP11' FORMAT TO 'VT/78' FORMAT, JUST SET /LOCATION '200' TO A NON-ZERO VALUE: / / .SET D1: LOC 200,1 (SWITCH TO VT/78 FORMAT) /OR / .SET D1: LOC 200,0 (CHANGE TO PDP11 FORMAT) / PARAMETER BLOCK FOR 'BUILD' PAGE 0 -2 /TWO HANDLERS, RBA0: AND RBA1: DEVICE RB01 /GROUP NAME FOR HANDLER DEVICE RBA0 /DEVICE NAME 4410 /FILE-STRUCTURED, DEVICE TYPE 41 RBA0&177+4000 /TWO-PAGE HANDLER, ENTRY AT LOC 61 ZBLOCK 2 /ZERO IF NOT SYSTEM HANDLER DEVICE RB01 /REPEAT EVERYTHING DEVICE RBA1 /BUT CHANGE THE NAME 4410 /COULD ALSO BE 4420 FOR VT78 (SET RBA1 VT78) RBA1&177+4000 /ENTRY POINT IS LOC 65 ZBLOCK 2 VERSION="M&77 /DEFINE THE VERSION NUMBER / DEFINE I/O INSTRUCTION CODES RX8= 6750 /DEFINE DEVICE ADDRESS LCD= 1 /LOAD COMMAND REGISTER XDR= 2 /TRANSFER DATA STR= 3 /SKIP ON TRANSFER FLAG, CLEAR IT SER= 4 /SKIP ON ERROR, CLEAR FLAG SDN= 5 /SKIP ON DONE, CLEAR FLAG INIT= 7 /GENERATE INITIALIZE PULSE / DEFINE THE FUNCTION CODES / FILL BUFFER= 0 / EMPTY BUFFER= 2 / WRITE SECTOR= 4 / READ SECTOR= 6 / SET DENSITY= 10 (RX02 ONLY) / READ STATUS= 12 / WRITE DEL DATA= 14 / READ ERROR REG= 16 / DRIVE 1 SELECT= 20 / BYTE MODE SEL= 100 / MAINT. MODE= 200 (GOOD FOR SETTING FLAGS) / DOUBLE DENSITY=400 / DOUBLE SIDED= 1000 PAGE 1 RETRYS, -1-2 /RETRY COUNT: EASY TO CHANGE! /LOOP HERE READING THREE BYTES AT A TIME, PACKING THEM INTO /MEMORY TWO WORDS AT A TIME USING THE STANDARD OS/8 PACKING /SCHEME. HAPPILY THIS IS THE SAME AS THE PDP11 DATA FORMAT! RDLOOP, JMS I XMOVB /GET THE FIRST BYTE DCA BYTE1 /SAVE FOR LATER JMS I XMOVB /GET THE SECOND BYTE DCA BYTE2 /SAVE IT JMS I XMOVB /GET THE THIRD BYTE CLL RTL CLL RTL /SHIFT HALFWAY OVER DCA TEMP /SAVE THIS FOR A MOMENT TAD TEMP AND P7400 /MASK OFF BITS 0-3 TAD BYTE1 /MERGE WITH BITS 4-11 DCA I BUF /STORE WORD1 AWAY ISZ BUF /ADVANCE POINTER P20, 20 /PROTECT THE ISZ TAD TEMP /NOW DO THE SECOND WORD CLL RTL CLL RTL /FINISH THE SHIFT AND P7400 TAD BYTE2 /MERGE DCA I BUF /PUT IT AWAY ISZ BUF /ADVANCE BUFFER POINTER P70, 70 /IN CASE ISZ SKIPS ISZ WC /ARE WE DONE? JMP RDLOOP /NOT YET /BECAUSE OS/8 TRANSFERS ARE SPECIFIED IN UNITS OF 'PAGES' /(1 PAGE=128 WORDS=192 BYTES), WHEREAS DISK TRANSFERS ARE /ALWAYS IN UNITS OF SECTORS (1 SECTOR=128 BYTES), THE LAST /TRANSFER MAY NOT USE UP ALL THE DATA STORED IN THE SILO. /THIS MEANS THAT THE DONE FLAG WILL NOT BE SET, CAUSING /THE HANDLER TO 'HANG' ON THE NEXT CALL. THE SOLUTION IS /SIMPLY TO CLEAR OUT THE SILO AT THE END OF EACH CALL: JMS I XCLEAR /EMPTY THE SILO RX8OUT, ISZ RBA0 /SKIP THE ERROR RETURN JMP REXIT /AND GO BACK TO THE CALLER /LOOP HERE TO UNPACK 2 12-BIT WORDS INTO 3 BYTES, PUTTING /THEM INTO THE SILO AND EVENTUALLY WRITING THEM TO DISK... WRLOOP, JMS PUTBUF /PUT AWAY THE FIRST BYTE DCA TEMP /BUT SAVE BITS 0-3 JMS PUTBUF /PUT AWAY THE SECOND BYTE CLL RTR /SHIFT LOW-ORDER BITS CLL RTR TAD TEMP /MERGE WITH HIGH-ORDER CLL RTR CLL RTR /SHIFT ALL 8 BITS INTO PLACE JMS I XMOVB /MOVE INTO THE SILO P7600, 7600 /DON'T FORGET THE 'CLA'! ISZ WC /MORE WORDS TO TRANSFER? JMP WRLOOP /YES - CONTINUE HERE /CALL THE 'CLEAR' ROUTINE AGAIN TO FINISH FILLING THE SILO /SO WE CAN WRITE OUT THE LAST DISK SECTOR BEFORE RETURNING. JMS I XCLEAR /ZERO FILLS THE REST OF THE SECTOR JMS I XIOSUB /NOW WRITE OUT THE LAST SECTOR JMP RX8OUT /ALL DONE - TAKE THE 'GOOD' RETURN XMOVB, MOVEB-ERCNT /THESE ARE ALL RELATIVE LOCATIONS XINITL, INITLZ-ERCNT /WHICH ARE INITIALIZED TO ABSOLUTE XIOSUB, IOSUB-ERCNT XCLEAR, CLEAR-ERCNT XKBRTN, KBCHEK-ERCNT XCCHEK, CCHECK-ERCNT RBA0, VERSION /ENTRY POINT FOR DRIVE 0 CLA /NEVER TRUST THE CALLER! JMP DRV0 /AND MERGE WITH 'RBA1' CALL P175, 175 TRYCNT, RBA1, VERSION /ENTRY POINT FOR DRIVE 1 CLA /BE SURE! TAD RBA1 DCA RBA0 /MOVE RETURN ADDRESS TO RBA0 TAD P20 /GET UNIT SELECT CODE DRV0, DCA DRIVE /SAVE FOR PAGE 2 RDF /GET CALLING FIELD TAD CDI0 /GENERATE THE RETURN 'CDI' DCA REXIT /SAVE FOR EXIT AND ANY RETRIES TAD RETRYS /SET THE RETRY COUNT (1 RETRY) DCA TRYCNT /RE-USE THE SECOND ENTRY POINT JMS TEMP /ZAPPED AFTER ONCE-ONLY CODE /COME BACK TO THIS POINT AFTER INITIALIZATION WITH AC=0, /OR AFTER AN ERROR WITH AC=-2, TO REPEAT THE WHOLE THING ERCNT, ISZ TRYCNT /CHECK THE ERROR COUNT JMP AGAIN /DON'T GIVE UP YET... REXIT, HLT /'CDI CF' STORED HERE ISZ RBA0 /ADVANCE THE RETURN POINT JMP I RBA0 /(AC=-2 FOR ERROR RETURN) AGAIN, TAD RBA0 /RESET ARGUMENT POINTER DCA RBA0 TAD REXIT /RESTORE THE CALLING DATA FIELD DCA .+1 COUNTR, XMOVB-XCCHEK-2 /'CDI CF' CAUTION!! NO JUMPS!! / NOW SCAN THE ARGUMENT LIST TAD I RBA0 /GET THE FUNCTION WORD RAL AND P7600 /ISOLATE THE PAGE COUNT CIA /NEGATE STL RAR DCA WC /SAVE DOUBLE-WORD COUNT SM0 /SET BIT 0 IN THE AC TAD I RBA0 /PUT R/W BIT IN THE LINK AND P70 /ISOLATE THE MEMORY FIELD TAD CDF0 /ADD 'CDF 0' DCA SETFLD /SET DF AFTER INITIALIZATION ISZ RBA0 /ADVANCE TO BUFFER ADDRESS TAD I RBA0 DCA BUF ISZ RBA0 /ADVANCE TO THE BLOCK NUMBER TAD I RBA0 TAD I RBA0 /X3 TO GET LOGICAL SECTOR NUMBER TAD I RBA0 /LINK HOLDS READ/WRITE BIT: L=0 FOR READ, L=1 FOR WRITE CDI0, CDF CIF 0 /CHANGE TO THIS FIELD (FINALLY!) JMS I XINITL /INITIALIZE FOR THIS CALL DRIVE, 0 /UNIT*20 + 100 /AC NOW HAS READ/WRITE BIT: POS FOR READ, NEG FOR WRITE SETFLD, HLT /'CDF BF' SMA CLA /SKIP IF WRITE JMP RDLOOP /JUMP TO READ JMP WRLOOP /JUMP TO WRITE /THIS SUBROUTINE SENDS A 12-BIT WORD TO THE SILO, RETURNING /THE BITS WHICH WERE NOT USED SO THEY CAN BE COMBINED INTO /THE THIRD BYTE. TIMING IN THE WRITE LOOP IS NOT QUITE SO /CRITICAL, THUS WE CAN AFFORD TO USE A SUBROUTINE FOR THIS. PUTBUF, 0 TAD I BUF /GET A 12-BIT WORD JMS I XMOVB /SEND IT (AC NOT CLEARED) AND P7400 /STRIP HIGH-ORDER BITS ISZ BUF /STEP BUFFER POINTER P7400, 7400 /PROTECT THE 'ISZ' JMP I PUTBUF /AC=BITS 0-3 /THIS IS 'ONCE-ONLY' CODE TO DETERMINE ABSOLUTE ADDRESSES /ON THE SECOND PAGE. IT IS EXECUTED ON THE FIRST CALL. TEMP, 0 /ADDRESS OF 'ERCNT' SAVED BY 'JMS' BYTE1, TAD XMOVB-1 /ADD ABSOLUTE ADDRESS BYTE2, DCA XMOVB-1 /TO THE PAGE OFFSET... WC, ISZ BYTE1 /ADVANCE THROUGH THE LIST BUF, ISZ BYTE2 /THE FIRST TIME IS A 'NOP' DCA ERCNT-1 /REMOVE THE 'JMS TEMP' INSTR. TAD TEMP /USE ERROR RETURN AS THE OFFSET ISZ COUNTR /DONE? JMP BYTE1 /NOT QUITE YET... /NOW GO TO PAGE 2 TO DETERMINE WHICH CONTROLLER WE HAVE JMS I XCCHEK /ERROR RETURN IS IN THE AC /THIS ROUTINE CHECKS THE KEYBOARD BUFFER WHEN THE FLAG /IS UP TO SEE IF THE USER IS TRYING TO ABORT BY TYPING /CTRL/C. ANY OTHER CHAR IS REMOVED TO SPEED UP THE LOOP. TAD P7600 /USE 7600 TO SET THE PARITY BIT KRS /READ THE BUFFER TAD P175 /COMPARE WITH CODE FOR CTRL/C SZA CLA /IS THAT WHAT WE HAVE? JMP I XKBRTN /NO, RETURN TO WAIT LOOP CDF0, CDF 0 /DON'T FORGET TO DO THIS! JMP I P7600 /RETURN TO THE OS/8 MONITOR PAGE 2 /DEFINE TWO MICRO-CODED INSTRUCTIONS (GOOD ON ALL 8'S): SM0= CLA STL RAR /'MINUS 0' = '4000' SM2= STA CLL RAL /NOTE: VALUE IN 'VT78SW' DETERMINES THE DATA FORMAT: / 0=PDP11 COMPATIBLE (2-WAY SECTOR INTERLEAVING) / 1 (OR ANY NON-ZERO VALUE) GIVES 'VT/78' FORMAT VT78SW, 0 /RELATIVE LOCATION = '200' P116, 116 /MOVE ERROR REGISTER /THIS ROUTINE SETS UP PARAMETERS FOR EACH HANDLER CALL INITLZ, 0 /AC= 3X OS/8 BLOCK NUMBER DCA LSECTR /SAVE LOGICAL SECTOR NUMBER TAD . /! SZL /CHECK READ/WRITE BIT AND M200 /LEAVE '1200' FOR WRITE RAR /READ=>0502, WRITE=>4500 TAD I INITLZ /ADD THE UNIT SELECT BIT DCA FUNCTN JMS DIVIDE /COMPUTE DISK ADDRESS TAD FUNCTN P7740, SMA SZA CLA /READ OR WRITE? JMS IOSUB /READ THE FIRST SECTOR JMS FNCALL /DO THE SILO OP TAD FUNCTN ISZ INITLZ JMP I INITLZ /AC IS POSITIVE FOR 'READ' / THIS ROUTINE MOVES DATA INTO OR OUT OF THE SILO MOVEB, 0 ISZ BYTCNT /TRANSFERRED 128 BYTES YET? JMP MOVIE /NO DCA CLEAR /SAVE THE AC FOR WRITE JMS IOSUB /READ OR WRITE A SECTOR JMS FNCALL /RESET SILO OPERATION TAD CLEAR /RESTORE THE AC ISZ BYTCNT /COUNT BYTE-IN-PROGRESS MOVIE, RX8 STR /CHECK THE TRANSFER FLAG JMP .-1 RX8 XDR /READ OR WRITE A LITTLE BYTE JMP I MOVEB /RETURNING WITH IT IN THE AC /THIS ROUTINE CHECKS THAT THE SILO OPERATION IS FINISHED /SO THAT THE DONE FLAG WILL COME UP AT THE END. CLEAR, 0 /FINISH THE SILO OPERATION SKP CLA /(WE MAY ALREADY BE DONE) JMS TRNSFR /MOVE A BYTE IN OR OUT ISZ BYTCNT /CHECK THE BYTE COUNTER JMP .-2 /THIS GOES VERY QUICKLY JMP I CLEAR /OK: THE DONE FLAG IS UP NOW /THIS ROUTINE PERFORMS ALL THE ACTUAL DISK OPERATIONS IOSUB, 0 TAD P7004 /ADD 4 TO THE SILO OP CODE JMS FNCALL /SEND COMBINATION TO CONTROLLER TAD SECTOR /GET THIS SECTOR JMS TRNSFR /SEND IT TO THE CONTROLLER TAD TRACKN /NOW GET THE TRACK NUMBER CLL IAC /PLUS ONE JMS TRNSFR /SEND IT TO THE CONTROLLER ISZ LSECTR /COMPUTE THE NEXT DISK ADDR JMS DIVIDE /WHILE THIS ONE IS FINISHING /NOW WE HAVE TO WAIT FOR THE DISK TO FINISH SO WE CAN /TEST IF THERE WERE ANY PROBLEMS. WE CAN'T JUST TEST /THE 'DONE' FLAG BECAUSE THAT WILL CLEAR IT, CAUSING /THE NEXT OPERATION TO HANG, SO WE MOVE THE ERROR REG. TAD P116 /MOVE ERROR REGISTER TO INTERFACE JMS FNCALL /IN ORDER TO SET THE DONE FLAG... RX8 SER /SKIP ON ANY ERRORS JMP I IOSUB /RETURN - THERE WEREN'T ANY /TOO BAD! SOMETHING WENT WRONG, SO DO AN 'INIT' AND RETRY: RX8 INIT /BANG THINGS AROUND A BIT SM2 /SET THE AC TO -2 FOR A RETRY JMP I ERROR /AND GO CHECK THE ERROR COUNT /'DIVIDE' COMPUTES THE PHYSICAL TRACK AND SECTOR ADDRESSES /FROM THE LOGICAL SECTOR NUMBER. THE CALCULATION OVERLAPS /THE SECTOR OPERATION, SO WE HAVE ABOUT 5.7 MSEC TO DO IT, /EXCEPT FOR THE FIRST SECTOR ON A READ CALL. THUS 1 BLOCK /READS (SUCH AS 'FUTIL' SCANS) PERFORM BEST IF WE USE THIS /HIGH-SPEED DIVIDE ROUTINE RATHER THAN THE SHORTER, SLOWER /'SUBTRACT-UNTIL-OVERFLOW' VERSION. DIVIDE, 0 TAD (-201 DCA BYTCNT /RESET THE BYTE COUNTER TAD VT78SW CLL CMA /SET THE FORMAT SWITCH DCA FNCALL TAD P7740 /SET THE BIT COUNTER DCA TRACKN TAD LSECTR /GET THE DIVIDEND DCA SECTOR TAD M26X64 /GET THE DIVISOR JMP DVENTR DVLOOP, RAL /SHIFT IN THE QUOTIENT DCA TRACKN /UPDATE TRACK AND BIT COUNTER TAD TRNSFR /SHIFT THE DIVISOR ONE PLACE STL RAR DVENTR, DCA TRNSFR /THIS ALSO CLEARS THE LINK TAD TRNSFR /SUBTRACT THIS POWER TAD SECTOR SZL /SKIP IF SUBTRACT FAILED DCA SECTOR /SUCCESSFUL - UPDATE RESULT CLA /CLEAR AC IF UNSUCCESSFUL TAD TRACKN /GET THE TRACK NUMBER SPA /TEST FOR END OF LOOP JMP DVLOOP /KEEP GOING /WE NOW HAVE THE LOGICAL TRACK NUMBER (0-76) IN THE AC AND /THE LOGICAL SECTOR (0-12) IN 'SECTOR'. THE LINK IS SET IF /THE ACTUAL SECTOR NUMBER WAS .GT. 12. WE NOW COMBINE ALL /THESE THINGS TO COMPUTE THE PHYSICAL TRACK AND SECTOR NO. /USING EITHER A 2- OR 4-WAY INTERLEAVE & A 6-SECTOR OFFSET: / [ < 6*TRACK + (2 OR 4)*SECTOR + SECTOR/13 > MOD 26 ] + 1 /NOTE: THE INSTRUCTION AT 'DVDONE+3' DETERMINES WHETHER WE /USE 'PDP11' FORMAT OR 'VT/78' FORMAT. IF THE ISZ SKIPS WE /GET PDP11 FORMAT, BUT IF NOT WE GET VT/78 FORMAT. THIS IS /SET UP DYNAMICALLY EACH TIME THE DIVIDE ROUTINE IS CALLED. DVDONE, TAD TRACKN /AC=2*TRACK NO.,L=HALFTRACK TAD TRACKN /3X TRACK NUMBER TAD SECTOR /ADD IN SECTOR OFFSET ISZ FNCALL /WHICH FORMAT? TAD SECTOR /USE 'VT/78' FORMAT P7004, RAL /SHIFT IN THE HALFTRACK BIT / NOW REDUCE THIS NUMBER MODULO TWENTY-SIX TAD M32 /JUST KEEP SUBTRACTING 26! SMA /UNDERFLOW? JMP .-2 /NOT YET TAD P33 /RESTORE REMAINDER (PLUS 1) DCA SECTOR /SAVE NEXT PHYSICAL SECTOR JMP I DIVIDE /GO WAIT FOR THE DONE FLAG /SUBROUTINE TO LOAD THE COMMAND BUFFER. NOTE THAT THE RX02 /REQUIRES A SECOND BYTE TO COMPLETE THE COMMAND SEQUENCE.. FNCALL, 0 /ENTRY POINT SERVES MANY PURPOSES! SPA SNA /SKIP FOR ERROR TRANSFER TAD FUNCTN /BYTE MODE + UNIT*20 + R/W*2 RX8 SDN /WAIT FOR DONE FLAG TO COME UP JMP KBCHEK+2 /CHECK THE KEYBOARD WHILE WE WAIT RX8 LCD /LOAD THE COMMAND / THE NEXT INSTRUCTION GETS 'NOPPED' FOR THE RX01 RX01, JMS TRNSFR /RX02 COMMANDS NEED ANOTHER BYTE JMP I FNCALL /RETURN NOW TO CALL /CHECK THE KEYBOARD OCCASIONALLY, IN CASE THE USER WANTS /TO ABORT THE OPERATION BY TYPING CTRL/C... KBCHEK, TAD TRNSFR /RESTORE THE COMMAND JMP FNCALL+3 /SOME CHARACTER IN BUFFER (MAYBE ^P?) KSF /CHECK FOR OPERATOR ABORT JMP FNCALL+3 /HE'S HAPPY DCA TRNSFR /SAVE THE COMMAND JMP I CCHECK /GO CHECK FOR CTRL/C /SUBROUTINE TO WAIT FOR THE DATA FLAG, THEN DO TRANSFER: TRNSFR, 0 RX8 STR /READY YET? JMP RX02 /NOT YET RX8 XDR /OK - DO IT M200, 7600 /CLEAR THE AC JMP I TRNSFR RX02, ISZ CLEAR /THIS IS ONCE-ONLY JMP TRNSFR+1 /BUT THIS INSTRUCTION STAYS BYTCNT, DCA RX01 /WE TIMED OUT, SO IT JMP I TRNSFR /MUST NOT BE AN RX02 / ONCE-ONLY CODE TO CHECK WHICH CONTROLLER WE HAVE / NOTE: WE USE THE FACT THAT IN BYTE MODE THE RX02 / REQUIRES A SECOND BYTE TO COMPLETE THE COMMAND.. / THE RX01 DOES NOT, AND SO NEVER SETS THE TR FLAG CCHECK, 0 /HOLDS ADDRESS OF CTRL/C CHECK ERROR, DCA ERROR /SAVE ERROR RETURN FROM PAGE 1 TRACKN, TAD P116 /'TRANSFER ERROR REG' SECTOR, JMS FNCALL /THIS SETS THE FLAG FOR LATER FUNCTN, ISZ TRNSFR+2 /REMOVE THE TIMEOUT TRAP LSECTR, JMP I ERROR /END OF INITIALIZATION DECIMAL M32, -26^1 /FLOPPY DISK CONSTANTS P33, +26+1 M26X64, -26^64 /MASTER TRACK DIVISOR OCTAL $$$$ /THE END