File VDSK.PA (PAL assembler source file)

Directory of image this file is from
This file as a plain text file

/******** 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 ! $$$$$$$$



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search