(George Source)
Macros used: ALTLEN, GEOERR, GETCHAP, JENVNOT, JNENVX, LABFIX
22FL #SEG DATUM70 [BOB NICHOLSON 22^= #LIS K0DATUM 23DW # 23YG # THIS SEGMENT DATUMISES BLOCK AND WORD ADDRESSES 24D6 # ON ENTRY BSL1 CONTAINS ADDRESS 24XQ # BSL2 CONTAINS POINTER TO FILE DESCRIPTION 25CB # BSL3 CONTAINS COUNT 25X2 # ON EXIT X1 CONTAINS DATUMISED ADDRESS 26BL # X2 CONTAINS ZERO OR MAXIMUM COUNT FOR TRANSFER 26W= # 27*W # LINK IN BSL4 27TG # PF1 FOR DATUMADD 28*6 # PF2 FOR DATUMBLK 28SQ # 29#B # 29S2 # DATUMADD ENTRY 2=?L LABFIX APF1 [D 2=R= PF1 LDX 1 BSL1 2?=W SRL 12 7 [CONVERT X1 TO BLOCK PART 2?QG SRL 2 17 [OF ADDRESS,X2 WORD PART 2#=6 STO 2 BSL5 [SAVE WORD PART 2#PQ BRN R1 2*9B # 2*P2 # DATUMBLK ENTRY 2B8L LABFIX APF2 2BN= PF2 STOZ BSL5 [WORDS 2C7W LDX 1 BSL1 2CMG R1 STO 0 BSL4 [SAVE LINK 2D76 LDX 2 BSL2 [POINTER TO DESCRIPTION 2DLQ LDCH 0 A1(2) 2F6B SBN 0 9 2FL2 BZE 0 R2 [JUMP IF TYPE 9 2G5L SBN 0 16 2GK= BZE 0 R3 [TYPE 25 2H4W DVS 0 A1+4(2) 2HJG [X0= BLOCK 2J46 [X1= CYLINDER 2JHQ TXL 1 A1+3(2) 2K3B BCC R4 [JUMP IF CYLINDER OUT OF RANGE 2KH2 ADX 1 A1+1(2) [ADD STARTING CYLINDER 2L2L LDX 2 A1+4(2) [BLOCKS/SEGMENT 2LG= SBX 2 0 [ 2L^W SLL 2 7 [X2=MAXIMUM TRANSFER IN WORDS 2MFG STO 2 BSL1 2M^6 SMO BSL2 2NDQ ADX 0 A1+2 [ADD START BLOCK 2NH# ... JNENVX R8,MEEP,2 [J IF NOT EMULATION 2NKX ... ERX 0 1 [SWAP 2NML ... ERS 0 1 [CONTENTS 2NP* ... ERX 0 1 [OF X0&X1 2NR4 ... SMO BSL2 [RECALCULATE DATUMISED 2NSR ... MPA 0 A1+4 [BLOCK NO INTO X1 2NWG ...R8 2NYB SMO BSL2 2PD2 LDX 2 A1 2PXL ANDN 2 #77 2QC= SMO 2 2QWW CALL 2 PF4 [CALL ADDRESS CONVERSION ROUTINE 2RBG LDX 1 0 2RW6 LDX 2 BSL1 2S*Q BRN R7 2STB # SLOW DRUM 2T*2 R2 SLL 1 7 [CONVERT TO WORD ADDRESS 2TSL ADX 1 BSL5 2W#= R3 LDX 0 A1+1(2) [ 2WRW TXL 1 A1+2(2) [ 2X?G BCC R4 [JUMP IF ADDRESS OUT OF RANGE 2XR6 LDX 2 A1+2(2) [ 2Y=Q SBX 2 1 [MAXIMUM TRANSFER 2YQB ADX 1 0 [ 2^=2 SMO BSL2 2^PL LDX 0 A1 329= SRL 0 18 32NW SBN 0 9 338G BZE 0 R7 [JUMP IF TYPE 9 33N6 SLL 2 7 [CONVERT TO WORDS 33S3 ...# CHECK TRANSFER WITHIN 30K EXEC LIMIT 33XY ...R7 LDN 0 30 343T ... SLL 0 10 347Q ... TXL 2 0 34?M ... BCS RR7 34CJ ... LDX 2 0 34HF ...RR7 TXL 2 BSL3 34MB BCC R5 3572 BRN R6 35LL R4 LDN 1 0 366= R5 LDN 2 0 36KW R6 LDX 0 BSL4 375G EXIT 0 0 [ 37K6 # DEVICE CONVERSION ROUTINES X0=BLOCK X1=CYLINDER 384Q # 38JB LABFIX APF3 3942 PF3 SMO BSL1 39HL BRN £ 3=3= PF4 3=GW #TRA PF4+EDS 3?2G BRN QEDS [ EDS 3?G6 #TRA PF4+EMDS 3?^Q BRN QEMDS [ MEDS 3#FB #TRA PF4+EMCF 3#^2 BRN QMCF [ MCF 3*DL #TRA PF4+AFDS 3*Y= BRN QAFDS [ 2A DISC 3BCW #TRA PF4+BFDS 3BXG BRN QBFDS [ 2B DISC 3CC6 #TRA EDS>EMDS>EMCF>BFDS>AFDS+1+PF4 3CWQ # 3DBB # EDS CONVERSION ROUTINE 3DW2 # 3D^6 ...QEDS 3F4= ... STO 0 BSL5 [PRESERVE X0 3F7B ... JENVNOT QEDS1,MEEP [J IF NOT EMULATION 3F=G ... LDX 0 1 3F*L ... ORX 0 GSIGN [SET B0 OF BLOCK NO 3FDQ ... EXIT 2 0 3FHW ...QEDS1 3FM2 ... LDX 0 BSL5 [REINSTATE X0 3FQ6 ... SLL 0 17 [BLOCK TO TOP 7 BITS 3FT= SLC 01 20 [X0 HOLDS TOP 4 BITS OF CYLINDER 3G#W SLL 0 2 3GSG SLL 01 4 [2ND PART OF CYLINDER 3H#6 SLL 0 2 3HRQ SLL 01 4 [1ST PART OF BLOCK 3J?B SLL 0 3 3JR2 SLL 01 3 [2ND PART OF BLOCK 3K=L EXIT 2 0 3KQ= # 3L9W QEMDS [EDS(30),SAME STRUCTURE AS 2B 3LPG # 2A FDS CONVERSION 3M96 QAFDS SLL 0 12 [BLOCK TO TOP 12 BITS 3MNQ SRC 01 12 3N8B EXIT 2 0 3NN2 # 3P7L # 2B FDS CONVERSION 3PM= QBFDS 3Q6W STO 1 BSL5 [SAVE CYLINDER 3QLG LDX 1 0 3R66 DVS 0 BSFD [DIVIDE BLOCK BY BLOCKS PER SURFACE 3RKQ SLL 1 9 [SURFACE TO MIDDLE & BITS 3S5B DEX 0 1 [SECTOR TO BOTTOM 9 BITS 3SK2 LDX 0 BSL5 3T4L SLL 0 15 [CYLINDER TO TOP 9 BITS 3TJ= DLA 1 0 3W3W EXIT 2 0 3WHG QMCF 3X36 GEOERR 0,TYPE WRG 3X4C ...# SUBROUTINES (AT <4096) FOR BSTS 3X5N ... LABFIX XALTLEN 3X6^ ... ALTLEN 3,4 3X8= ... EXIT 5 0 3X9H ... LABFIX XGETCHAP 3X=S ...#SKI JSKI10 3X#5 ... GETCHAP 7 3X*B ...#SKI JSKI10<1$1 3XBM ... GETCHAP 5 3XCY ... EXIT 3 0 3XF9 ...# 3XGQ #END ^^^^ ...15423011000800000000