/******** VIRTUAL DISK HANDLER ******** /LAST EDIT: 23-MRT-76, ELC (DSK0 REMOVED, RENAMED RKB0=DSK0) /LAST EDIT: 5-AUGUST-75, JV /CREATED: 27-JULY-75, JV /THIS HANDLER IMPLEMENTS 8 VIRTUAL DISKS. THESE ARE /FILES, WHICH ARE USED AS FILE-STRUCTURED DEVICES. / /THE FILES MUST BE ON SYS, OR ON A DEVICE WHOSE HAND- /LER IS CORESIDENT WITH SYS (LIKE RKB0). FIRST A /LOOKUP IS DONE TO THE FILE, THEN THE STARTING BLOCK /OF THE FILE IS ADDED TO THE REQUESTED BLOCK NUMBER. /ONCE FOUND, THE STARTING BLOCK IS REMEMBERED, THUS /NO SECOND LOOKUP IS NEEDED. HOWEVER, WHEN TRANSFER- /ING DATA FROM ONE VIRTUAL DISK TO ANOTHER, ANY NEW /CALL TO THIS HANDLER CAUSES A NEW LOOKUP TO BE DONE. / /THE PROBLEM IS, THAT THE FIRST CALL TO THIS HANDLER /WILL COME IN MOST OF THE CASES FROM OR VIA USR. /IF THE CALLER HAS SAVED CORE TO GET USR, WE CANNOT /USE THE DISK AGAIN FOR SAVING HIS VERSION OF USR. /THUS THESE HANDLERS WORK ONLY IF BIT 11 OF THE JSW0000-11777 ARE SAVED, ANKUP THE FILE DSKN.M8 ON ON RKB0 (N IS THE REQUERETURN FROM USR, 10000-11777 IS WRITTEN BACK. /IF THE FILE IS NOT FOUND, THE ERROR RETURN IS TAKEN. / /THESE HANDLERS PROVED TO WORK PROPERLY FOR MOST /OS/8 V3 PROGRAMS (PIP,EDIT,PAL8,ABSLDR,FOTP,DIRECT, /RESORCBOOT,FORT,SABR,E.O. IT ELY THROUGH THE ERROR RERAMS: ASK THE AUTHOR OF OF THE JSW MAY BE A 1. VERSION=1 RK8E=1 /IF NO RK8E, DO NOT DEFINE RK8E ! /NOTEST=1/DEFINE IT, IF YOU DON'T LIKE A LENGTH TEST /DIRECTIONS FOR CHANGES IN NAMES: /FILENAMES: SEE LABEL DKFILN / NOTE: CHAR 3 MUST BE "K", CHAR 4 AN OCTAL DIGIT ! /DEVICE NAMES: SEE NEXT PAGE (PAGE ZERO) OR WITH THE / BUILD COMMAND $NA DSK1=... /DEVICE RKB0: SEE LABEL DKDVNR, AND PREV. LOCAT. *0 -7 /7 DEVICE HANDLERS DEVICE VDSK /GROUP NAME IS VDSK (VIRTUAL DEVICE DSK1 /DISK) 4510 /FILE#STRUCTURED, DEV # 51 DSK1 /ENTRYPOINT OFFSET ZBLOCK 2 DEVICE VDSK DEVICE DSK2 4520 DSK2 ZBLOCK 2 DEVICE VDSK DEVICE DSK3 4530 DSK3 ZBLOCK 2 DEVICE VDSK DEVICE DSK4 4540 DSK4 ZBLOCK 2 DEVICE VDSK DEVICE DSK5 4550 DSK5 ZBLOCK 2 DEVICE VDSK DEVICE DSK6 4560 DSK6 ZBLOCK 2 DEVICE VDSK DEVICE DSK7 4570 DSK7 ZBLOCK 2 /WE MAKE USE OF THE FACT, THAT THE SECOND 12-BIT /WORD OF FILENAME DSK#.M8 IS EQUAL TO 13 TAD DSK#, IF DSK1 IS ATUNIT = - (TAD DSK#) = - 0 /HOLDS RETURN ADDRESS ETC. DSK2, ISZ DKUNIT DSK3, ISZ DKUNIT DSK4, ISZ DKUNIT DSK5, ISZ DKUNIT DSK6, ISZ DKUNIT DSK7, ISZ DKUNIT CLA CLL TAD DKUNIT DKJMP, JMP DKSTRT *200 DKJSW, JSW /MUST BE AT 200 (FOR DK3600) JSW=7746 / -TAD-DSK7 /6411=-1367 DCA DKTAD TAD (-TAD-DXT CALL. DCA DKUNIT D DKTAD DCA DKDCA DKTAD, HLT /TAD DSK# DCA DSK0 /DSK0 WILL POINT TO DTV TAD (ISZ DKUNIT DKDCA, HLT /RESET DSK# FOR NEXT CALL. TAD I DSK0 ISZ DSK0 DCA DKFUNC /TRANSFER DTV TO THIS PAGE TAD I DSK0 ISZ DSK0 DCA DKADDR /THAT'S 2 TAD I DSK0 ISZ DSK0 /POINTS TO ERROR RETURN DCA DKBLCK /THAT'S 3 RDF TAD DK6203 /PREPARE RETURN DCA DKEXIT CDF 10 TAD I (7700 /17700 MAY HOLD SPECIAL CODE. DK6203, CDF CIF 0 DCA DKTEM DKTEM=DKDCA TAD DKTAD /"TAD DSK#" = 1360+# = "K#" CIA TAD DKFILN+1 /GET LAST FILE WE LOOKED UP SNA CLA /IS IT THE SAME ONE ? /(FIRST TRY MUST ALWAYS FAIL) JMP DKSECN /YES, THAT'S EASY (NO LOOKUP) TAD I DKJSW /JOB STATUS WORD CLL RAR /BIT 11 TO LINK SNL JMP DKEREX /THIS IS TOO DANGEROUS CLL RAL /SET BACK WITH BIT 11 ZERO DK3600, DCA I DKJSW /SO THAT USR WILL SAVE CORE TAD DKTAD DCA DKFILN+1 /THE BIG DEAL JMS DKSETP /PUT THE REAL ADDRESS OF /FILPTR IN SETPTR. (RELOCAT.) DKFILN, FILENA NAMES LOOKED UP DKSETTH REAL ADDRESS IFDEF R7700 10 /USRIN, LOAND HANDLER TO 7607 (SYS:) DCA DKHAND CLA IAC /SET DEV # TO 1 DCA DKDVNR > DKRTRY, TAD DKSETP /TAD (DKFILN DCA DKFBLK IFDEF RK8E < TAD DKDVNR /FOR RK8E: TRY SYS: AND RKB0: CIF 10 JMS I (200 /USR IS I /FOR NON-RK8E IT'S EASIYS HAS DEVICE # 1 CIF S AND JMS I (7700 /RES 2 /LOOKUP DKFBLK, DKFILN /OVERLAYED BY STARTING BLOCK DKFILG, 0 /OVERLAYED BY MINUS LENGTH. IFDEF RK8E < JMP DKRKB0 /TRY RKB0: OR GIVE ERROR > IFNDEF RK8E < JMP DKERST /NOT FOUND: ERROR. > JMS DKRSET DKSECN, IFNDEF NOTEST < /TEST MAY BE OMITTED BY DE- TAD DKFUNC /FINING NOTEST > TAD (7700 AND DK3600 CLL RTL /FIRST GET # OF BLOCKS RTL RTL /ONE BLOCK TOO FEW, LINK=0 TAD DKBLCK TAD DKFILG SZL CLA /USE IT AS CONSTANT ! JMP DKEREX /DON'T GO OUTSIDE FILE > TAD DKBLCK TAD DKFBLK /ADD STARTING BLOCK OF FILE DCA DKBLCK JMS I DKHAND /SYSTEM HANDLER, (OR RKB0:) DKFUNC, 0 /HERE THE CALLING SEQUENCE DKADDR, 0 /IS COPIED. DKBLCK, 0 /THE BLOCK # SPECIFIED + THE /START. BLOCK # OF THE FILE. JMP DKEREX /ERROR ON SYSTEM DEVICE !! ISZ DSK0 DKEXIT, HLT /RETURN, CDF CIF CALL. FLD. JMP I DSK0 IFDEF RK8E < DKRKB0, STA TAD DKDVNR /IS THIS THE FIRST TRY ? SZA CLA JMP DKERST /BOTH SYS: AND RKB0: FAT KNOW THE INTERNAL JMB0. 12 /INQUIRE /003-1 /DSK0: (RENAME RKBOVERLAYED BY DEVICE NUMBER DKHAND, 7607 /OVERLAYED BY 7621 FOR RKB0 JMP DKERST /RKB0: NOT FOUND, ERROR RETURN JMP DKRTRY /NOW RKB0NR MUST BE NONZERO > DKERST,JMS DKRSET /ERROR WHEN DATA NEED BE RESET DCA DKFILN+1 /NEXT ONE MUST LOOKUP AGAIN! DKEREX, STA JMP DKEXIT DKRSET, 0 IFDEF RK8E < CIF 10 JMS I (200 11 /USROUT, GET CORE AGAIN > ISZ I DKJSW TAD DKTEM CDF 10 DCA I (7700 /THIS LOCATION MAY HOLD DATA CDF 0 JMP I DKRSET IFNDEF RK8E < DKHAND, 7607 > O=DSK0 /DON'T FORGET LOCATIONS 360-371 O=DKJMP /ARE ALREADY IN USE AS ENTRY POINTS ! $$$$$$$$