File: RXX1SY.PA of Tape: OS8/OS8-Latest/new-12
(Source file text)
/RX01 (RX02) FLOPPY SYSTEM HANDLER / / / / / / / / /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, ZUERICH, 1-JAN-80 /FLOPPY DISK HANDLER SYSTEM /DEFINITIONS OF RX8/E IOT'S RXSVER= "M&77 DEVCOD= 750 /DEVICECODE LCD= 6001+DEVCOD /LOAD COMMAND REGISTER XDR= 6002+DEVCOD /TRANSFER DATA REGISTER STR= 6003+DEVCOD /SKIP ON TRANSFER REQUEST FLAG, CLEAR FLAG SER= 6004+DEVCOD /SKIP ON ERROR FLAG, CLEAR FLAG SDN= 6005+DEVCOD /SKIP ON DONE FLAG, CLEAR FLAG INTR= 6006+DEVCOD /INTERRUPT ENABLE/DISABLE INIT= 6007+DEVCOD /INITIALIZE CONTROLLER AND RECALIBRATE DRIVES /NOTES ON THIS HANDLER: /THIS HANDLER READS AND WRITES THE DISK IN "12-BIT" MODE, IN WHICH /ONLY 6 BITS OF EVERY 8-BIT BYTE ARE USED. AN RX01 CARTRIDGE /CONTAINS 494 OS/8 BLOCKS UNDER THIS METHOD /TO MAXIMIZE SPEED ON THE DEVICE, THE HANDLER READS AND WRITES DATA /ON A TRACK WITH A TWO-WAY INTERLEAVE - I.E. RECORDS 1-26 ON A TRACK /ARE WRITTEN IN THE SEQUENCE: / 1,3,5,7,9,11,13,15,17,19,21,23,25,2,4,6,8,10,12,14,16,18,20,22,24,26 /IN THIS WAY THE HANDLER CAN TRANSFER DATA AT A 5KHZ WORD RATE /MAIN CHANGE FROM OLD RX01SY IS THAT THE NEXT DISK ADDRESS IS /CALCULATED DURING THE DATA TARNSFER TO/FROM THE DISK TO ITS /SECTOR BUFFER. THIS IS NEEDED FOR SLOW 8S !. /ALSO THE CODE HAS BEEN MODIFIED SO THAT IT RUNS ON RX02'S *0 /ORIGIN FOR BUILD -1 /ONE ENTRY POINT DEVICE RXX1 /"RXX1" IS THE GROUP NAME DEVICE SYS /"SYS" IS THE ENTRY POINT NAME 4250 /DCB WORD - DEVICE TYPE 25, DIRECTORY DEVICE 2007 /2000 MEANS SYS HANDLER,7 IS ENTRY POINT OFFSET 0 /THIS WORD ALWAYS SEEMS TO BE 0 DECIMAL 76^26%4 /THE NUMBER OF OS8 BLOCKS ON THE DEVICE OCTAL BOOTST-BOOTND /LENGTH OF THE BOOTSTRAP RELOC 2 BOOTST, X7577, 7577 SECT, 1 /FIRST SECTOR, GETS UPDATED FAKRET, JMS GET1 /GET SECOND HALF OF FIELD 1 DCA CDF10 /NEXT IS FIELD 0 CDF 0 K1002, TAD X7577 /NICE BOOT STARTS AT 2! DCA XR /RESET AUTO FOR FIELD 0 JMS GET1 JMS GET1 /GET 2 HALFS OF FIELD 0 TAD UNIT DCA I PUNIT /TRANSFER UNIT TO SYS-HANDLER INIT /SET FLAG JMS I X7577 /HAHA XR, 7600+BOOTND-BOOTST-1 /LOC 17 PUNIT, S4UNIT /UNIT LOC IN SYS-HANDLER=7623 GET1, FAKRET /FIRST RETURN TAD K1002 /KILL 7000 FROM 'UNIT' AND SET 2 FOR READ TAD UNIT LCD CLA STL RTL TAD SECT /GOES 3,5,7. 1 WAS HARDWARE BOOT JMS LOAD DCA SECT /KEEP FOR NEXT CLA IAC /ALWAYS TRACK 1 JMS LOAD HANGGG, SDN JMP LOAD+1 SER SKP HLT SNA JMP I GET1 /GO BACK IF FROM SILO LOOP CLA STL RTL /GIVE READ SILO COMMAND LCD CDF10, CDF 10 JMS LOAD DCA I XR LP, JMP CDF10 BOOTND, RELOC /HARDWARE BOOTSTRAP (MODIFIED, SEE RX01BT.PA) NOPUNCH *24 BOOT, TAD K3002 /MAKE 2000 OUT OF 7000, SET 2 TAD UNIT LCD CLA IAC JMS LOAD /SECTOR 1 JMS LOAD /TRACK 1 CLL RAL /AC=2 FOR READ START, HANGGG, SDN JMP LOAD+1 SER SNA SKP CLA JMP GOODRD /TO READ WITH AC=2 TAD UNIT /ON ERROR CIA TAD X6030 DCA UNIT /FLIP UNIT JMP BOOT /AND TRY AGAIN,AGAIN,AGAIN... GOODRD, LCD LP, JMS LOAD K3002, DCA BOOTST /FIRST ONLY USE AS CONSTANT ISZ .-1 JMP LP LOAD, 0 STR JMP HANGGG XDR JMP I LOAD UNIT, 7024 /CANONICAL LOCATIONS X6030, 6030 /. ENPUNCH *200 RELOC 7600 ZBLOCK 7 /SYSTEM SPACE / COMMENTS: / LINK REMAINS 0 THROUGH THE MAIN PROCESSING LOOP / EXCEPT AS MANIPULATED BY DIVSUB AND AT END OF WRITE / / OVERALL LOOP CONTROL THROUGH BC IS MILDLY ODD. / BC STARTS WITH COUNT OF THE # OF WORDS TO BE TRANSFERRED. / BC IS DECREMENTED 101 TIMES AT THE SILO CODE, AND INCREMENTED / 1 TIME AFTER THE I/O OPERATION. / A READ OPERATION STARTS AND FINISHES AT THE MIDDLE OF THE LOOP. / A WRITE OEPRATION STARTS AT THE TOP, AND FINISHES AT BOTTOM. / THUS, A 1 BLOCK READ INCREMENTS 1, -101, 1, -101 AND EXITS FROM MIDDLE. / AND, A 1 BLOCK WRITE INCREMENTS -101, 1, -101, 1 AND EXITS FROM BOTTOM. / / DIVISION IS CARRIED OUT IN PARALLEL WITH I/O OPERATION BECAUSE OF / TIMING CONSIDERATIONS OF THE VT78. / / THERE IS NO ERROR RETRY, NOT PARTICULARLY CRITICAL FOR A FLOPPY. SYS, RXSVER CLA STL RTL /CLEAR AC AND SET = 2 FOR CDI RDF /FETCH CALLER'S FIELD TAD SCDF0 /MAKE CDF CIF TO HIS FIELD DCA SRET /FOR RETURN TAD I SYS /GET FUNCTION AND S70 /KEEP BITS FOR CDF TAD SCDF0 /ADDING IN CDF LITERAL DCA BUFCDF /CDF INSTRUCTION TO USER'S BUFFER S36, 36 S33, 33 /KEEP S4UNIT AT SAME PLACE TAD I SYS /MAKE CONTROL COUNT S4UNIT, RAL /7004 (7024 FOR UNIT #1) DOUBLES AS /LITERAL FOR READ-WRITE COMMAND AND S7600 /MAKE CONTROL COUNT FOR TOTAL DCA BC CML RTL /FUNCTION CODE, 0=WRITE, 2=READ MQL /KEEP IN MQ FOR 'OR' OPERATION ISZ SYS TAD I SYS /FETCH BUFFER ADDRESS DCA BUF ISZ SYS TAD I SYS /OS8 BLOCK # CLL RTL /TIMES 4 TO BE FLOPPY SECTOR # DCA RECO ISZ SYS /ERROR EXIT FROM I/O CALL JMS DIVSUB /COMPUTE TRACK/SECTOR FOR FIRST I/O MQA /READ OR WRITE START DIFFERENTLY SZA CLA /SKIP ON WRITE JMP STREAD /GO TO READ / / WRITE FALLS THRU....... / / TOP OF MAIN PROCESSING LOOP / SETSLO, JMS LDCMD /SET SILO TO LOAD-UNLOAD DEPENDING TAD S7700 /SILO CONTROL COUNT 100 OCTAL DCA FLPWC BUFCDF, HLT /CDF TO USER'S BUFFER PLACED HERE TRLOOP, TAD I BUF /FETCH A WORD IN CASE WRITE STR /WAIT JMP .-1 XDR /AC TO SILO; OR; SILO TO AC DCA I BUF /PLACE A WORD IN CASE READ; WRITE REPLACES SAME. ISZ BUF /MOVE TO NEXT BUFFER LOCATION (MAY SKIP) S70, 70 /THIS LITERAL WILL ACT AS NOP ISZ FLPWC /DONE WITH 100 OCTAL SILO OPERATION JMP TRLOOP /NO SCDF0, CDF 0 /ONLY HERE FOR CODE POSITIONING CLL STA /CLEAR LINK TAD S7700 /DECREMENT BY 101 AND SET LINK TAD BC /CLEARS LINK AGAIN WHEN NECESSARY SNA /SKIP UNLESS READ DONE JMP OKEX /READ EXIT. DCA BC /ENDS UP -1 IF WRITE AND WRONG LINK /WHO CARES, IT'S THE END / / MIDDLE OF MAIN PROCESSING LOOP / STREAD, TAD S4UNIT /READ STARTS HERE JMS LDCMD /SET UP DO DO READ OR WRITE I/O TAD SECTOR /LOAD PRECOMPUTED SECTOR INFO STR JMP .-1 /IN CASE NOT READY XDR S7700, 7700 /CLEAR AC, CAN'T SKIP (XDR LEAVES AC ALONE) TAD TRACK /TRACK STR /ILLEGAL 7700 ENTRY WILL HANG; THE FUNCTION JMP .-1 /IS NOT SET UP (LDCMD) XDR S7600, 7600 /CLEAR AC AGAIN ISZ RECO /MOVE TO NEXT FLOPPY SECTOR JMS DIVSUB /COMPUTE NEXT TRACK AND SECTOR DURING THIS I/O TAD S36 /WAIT FOR I/O TO COMPLETE WITH READ ERROR JMS LDCMD /FAST AND RX02 COMPATIBLE ISZ BC /CHECK FOR WRITE EXIT JMP SETSLO /NO, BACK TO TOP OKEX, ISZ SYS /BUMP TO REGULAR EXIT SRET, HLT /CDF CIF FOR USER'S CALLING FIELD JMP I SYS /GONE / / / DIVSUB NEEDS AC AND LINK = 0 / / COMPUTES TRACK IN 'TRACK', SECTOR IN 'SECTOR', FROM # IN 'RECO' / / REPEATED SUBTRACTS OF 13 DECIMAL LEAVE THE HIGH N-1 BITS OF / QUOTIENT IN TRACK, THE LOW BIT OF QUOTIENT IN LINK, AND THE / REMAINDER IN AC. THE INTERLEAVE IS ACCOMPLISHED BY SHIFTING / LOW QUOTIENT BIT INTO LOW REMAINDER BIT. / DIVSUB, 0 DCA TRACK /INIT QUOTIENT FOR DIVIDE TAD RECO /RECORD # MASSAGED IN AC DIVLP, SNL /LINK USAGE REVERSED FROM RICHIE'S CODE ISZ TRACK /ISZ EVERY OTHER TIME, ==DIVIDE BY 26 TAD SM15 /THE -13 DECIMAL SMA /SKIP ON DONE JMP DIVLP /MORE RAL /LINK USAGE REVERSED; INTERLEAVE!! TAD S33 /ADD 33, MAKING SECTOR DCA SECTOR JMP I DIVSUB /LEAVING LINK AND AC 0 / / LDCMD / FLPWC=. /COUNTER IN ENTRY POINT FOR SILO LOOP ONLY LDCMD, 0 MQA /OR IN READ/WRITE AND S36 /BE SURE ONLY LEGAL BITS SDN /WAIT JMP .-1 LCD /COMMAND FROM AC, WHICH IS CLEARED SER /SKIP IF ERROR (I/O ONLY) JMP I LDCMD /OK, RETURN CLL CML CLA RAR /CONVENTIONAL ERROR RETURN 4000 IN AC JMP SRET /SET CDF AND EXIT / SM15, -15 / / USE DATA BREAK LOCATIONS FOR TEMPORARIES / SECTOR=7750 TRACK=7751 RECO=7752 BUF=7753 BC=7754 /THESE MUST BE SLANTED! RELOC $-$-$