LOADERFT867

(George Source)

Macros used: JENVNOT

LOADERFT867.txt
22FL    #OPT  K0LOADERFT=0  
22^= ...#SEG  LOADERFT85                   [DICK RUSBRIDGE/MARK DRUKKER 
233T ...#  ######################################################## 
236D ...#   
2393 ...#  (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982   
23?L ...#   
23B9 ...#  #########################################################
23DW    #LIS  K0LOADER>K0LOADERFT>K0ALLGEO  
23YG    #   
24D6    #   
24XQ    #     THIS SEGMENT IS A CONTINUATION OF LOADERFS
25CB    #   
25X2    #   
26BL                   8HLOADERFT   
26W=    #   
27*W    #   
27TG    N81            81                  [EDS8S HAVE 80 BLOCKS PER CYLINDER   
28*6    #SKI  G4
28G# ...(   
28MG ...XBIGMC         +1024*96 
28SQ    OGELLDATA      +K18-K42            [START ADDRESS OF LOADER'S CORE  
294J ...)   
29#B    #   
29S2    #   
2=?L    OWDCONV                            [ROUTINE TO FIND BLOCK SIZE OF A FILE
2=R=          LDX   6  BLFAC+1(1)          [AND TO ENSURE THAT IT'S FULL DEPTH  
2?=W          ANDX  6  OLAST(2)            [PICK UP START BLOCK NUMBER IN FILE  
2?QG          LDX   7  BLFAC+2(1)   
2#=6          ANDX  7  OLAST(2)            [THE END BLOCK NUMBER
2#PQ          LDX   5  BLFAC+4(1)          [AND THE BLOCKS PER CYLINDER 
2*9B          SBX   7  6                   [CALCULATE NUMBER OF BLOCKS IN FILE  
2*P2          STO   7  4                   [AND SAVE THE BLOCK COUNT
2B8L          DVS   6  5
2BN=          BZE   6  OFULL               [J IF THE FILE IS FULL DEPTH : OK
2C7W          LDN   1  OMNOTFULL(2)        [PRINT "FILESTORE NOT FULL DEPTH"
2CMG          CALL  0  OUTCON              [ON THE OPERATORS' CONSOLE   
2D76          BRN      OGRFORCE            [AND FORCE A GENERAL RESTORE 
2DLQ    OFULL EXIT  0  0                   [EXIT : FILE LOOKS REASONABLE SO FAR 
2F6B    #   
2FL2    #   
2G5L    #     MAIN ENTRY POINT  
2GK=    #   
2H4W    #   
2HJG    OSTARTCOPY  
2HNC ...      LDX   1   BK18X   
2HS# ...      ADS   1   ODISCINCA+2(2)  
2HY9 ...      ADS   1   ODISCOUTCA+2(2) 
2J46          LDN   1  ODISC1(2)           [POINT TO BASE FILE'S DESC AREA  
2JHQ          CALL  0  OWDCONV             [GET NUMBER OF BLOCKS IN THE FILE
2K3B          STO   4  OBLOCKCOUNT(2)      [AND SAVE THE TOTAL COUNT
2KH2          LDN   1  ODISC2(2)           [POINT TO RECIPIENT FILE'S   
2L2L          CALL  0  OWDCONV             [DESC AREA AND GET NUMBER OF BLOCKS  
2LG=          TXL   4  OBLOCKCOUNT(2)      [IS THE SECOND FILE BIG ENOUGH?  
2L^W          BCC      SIZEOK              [J IF IT IS  
2MFG          LDN   6  JLFSNAMES+3(2)      [THE RECIPIENT FILE IS TOO SMALL 
2M^6          LDN   7  OMTSNAME(2)         [SO PUT ITS NAME IN THE  
2NDQ          BCHX  7  £
2NYB          MVCH  6  12                  ["FILE TOO SMALL" MESSAGE
2PD2          LDN   1  OMTOOSMALL(2)
2PXL          CALL  0  OUTCON              [PRINT IT ON THE OPERATORS CONSOLE   
2QC=          BRN      OGRFORCE            [AND FORCE A GENERAL RESTORE 
2QWW    SIZEOK  
2RBG          LDN   6  JLFSNAMES(2) 
2RW6          LDN   7  ONAME1(2)           [MOVE FILENAMES INTO THE "COPYING
2S*Q          MOVE  6  3
2STB          ADN   6  3
2T*2          LDN   7  ONAME2(2)           [FILESTORE" MESSAGE AND PRINT THE
2TSL          MOVE  6  3
2W#=          LDN   1  OMCOPY(2)           [MESSAGE ON THE OPERATORS' CONSOLE   
2WRW          CALL  0  OUTCON   
2X?G          LDX   7  ODISC2+BLFAC+4(2)   [PICK UP NUMBER OF BLOCKS/CYLINDER   
2XR6          STO   7  ONOBPERC(2)         [AND SAVE IT FOR USE BY OCONV
2Y=Q          TXL   7  N81(2)              [COPYING EDS8S OR EDS30/60S? 
2YQB          BCS      XEDS8               [J IF EDS8 : COPY WHOLE CYLINDERS
2^6W ...      SRL   7  1                   [EDS30/60 SO COPY HALF CYLINDERS 
2^PL    XEDS8   
2^QM ...      JENVNOT  NOEMU,MEEP          [J IF NOT EMULATING  
2^RN ...      LDN   6  256                 [32K IN BLOCKS   
2^SP ...ROUND TXL   6  7
2^TQ ...      BCC      NOTMAX              [J IF COUNT<32K ELSE.... 
2^WD ...      SRL   7  1                   [...HALVE COUNT AND TRY AGAIN
2^X6 ...      BRN      ROUND
2^XS ...NOTMAX  
2^YT ...      LDX   6  CORES
2^^W ...      SBX   6  ODISCINCA+2(2)      [LARGEST TRANSFER WE CAN DO...   
322X ...      SRL   6  7                   [...IN BLOCKS
323Y ...RETRY TXL   6  7
324^ ...      BCC      NOEMU               [J   WE CAN DO TRANSFER  
3262 ...      SRL   7  1                   [HALVE TRANSFER COUNT
3273 ...      BRN      RETRY
3284 ...NOEMU   
329=          STO   7  OPERIBLOCKS(2)      [REMEMBER SIZE OF EACH PERI IN BLOCKS
32NW          SLL   7  7                   [CONVERT THE PERI SIZE TO WORDS AND  
335W ...#SKI  G4
33GW ...(   
33XW ...      LDX   0  CORES               [GET SIZE OF M/C 
34#W ...      TXL   0  XBIGMC(2)           [ENOUGH ROOM ABOVE LOADER FOR
34PW ...      BCC      XBIG                [BUFFER  J IF THERE IS   
3572          LDX   0  FVARST              [PICK UP ADDRESS OF VARIABLE STORE   
36KW          LDX   1  OGELLDATA(2)        [PICK UP ADDRESS OF LOADER'S CORE
375G          SBX   1  0                   [X1=AVAILABLE GAP IN VARIABLE STORE  
37*# ...      SRL   7  1                   [SET COUNT TO COPY QUARTER CYLINDERS 
37K6          TXL   7  1                   [ENOUGH ROOM FOR PERI BUFFERS?   
384Q          BCS      XBUFFEROK           [J IF THERE IS   
38JB          LDN   1  OMBIGEXEC(2)        [ELSE PRINT "EXECUTIVE TOO LARGE"
3942          CALL  0  OUTCON              [MESSAGE ON THE OPERATOR'S CONSOLE   
39HL          BRN      OGRFORCE            [AND FORCE A GENERAL RESTORE 
3=3=    XBUFFEROK   
3=64 ...      STO   0  ODISCINCA+2(2)      [AND SET UP THE CTSA'S IN
3=8W ...      STO   0  ODISCOUTCA+2(2)     [THE DISC PERI CONTROL AREAS 
3=BG ...      LDX   6  OPERIBLOCKS(2)      [AND RESET THE TRANSFER  
3=F# ...      SRL   6  1                   [COUNT IN BLOCKS 
3=J6 ...      STO   6  OPERIBLOCKS(2)   
3=LY ...XBIG
3=PQ ...)   
3=SJ ...      STO   7  ODISCINCA+1(2)      [STORE DISC PERI COUNTS IN THE   
3=XB ...      STO   7  ODISCOUTCA+1(2)     [INPUT AND OUTPUT DISC CONTROL AREAS 
3?2G          STOZ     OFIXFLAG(2)         [DISCS TO BE "FIXED" FROM NOW ON 
3?G6    ROUNDAGAIN  
3?^Q ...      LDX   1  ODISC1+BLFAC+1(2)   [PICK UP BLOCK ADDRESS OF THE FIRST  
3#FB ...      ANDX  1  OLAST(2)            [BLOCK IN THE BASE FILE  
3#^2 ...      ADX   1  OBLOCKS(2)          [ADD IN NUMBER OF BLOCKS ALREADY READ
3*DL ...      CALL  6  OCONV2              [AND THEN TO HARDWARE FORMAT 
3BXG          STO   0  ODISCINCA+3(2)      [INSERT DTSA IN THE CONTROL AREA 
3CC6          LDX   3  ODISCIN(2)          [PICK UP THE DEVICE LIST POINTER 
3CWQ          LDN   1  ODISCINCA(2)        [POINT TO THE INPUT CONTROL AREA 
3DBB          CALL  0  OPERIDISC           [READ FROM THE BASE DISC 
3DW2          BRN      OGRFORCE            [J IF THE DISC FAILED AND ABORT  
3F*L ...      LDX   1  ODISC2+BLFAC+1(2)   [PICK UP BLOCK ADDRESS OF THE FIRST  
3FT= ...      ANDX  1  OLAST(2)            [BLOCK IN THE RECIPIENT FILE 
3G#W ...      ADX   1  OBLOCKS(2)          [ADD IN NUMBER OF BLOCKS ALREADY READ
3GSG ...      CALL  6  OCONV2              [AND THEN TO HARDWARE FORMAT 
3J?B          STO   0  ODISCOUTCA+3(2)     [INSERT DTSA IN THE CONTROL AREA 
3JR2          LDX   3  ODISCOUT(2)         [PICK UP THE DEVICE LIST POINTER 
3K=L          LDN   1  ODISCOUTCA(2)       [POINT TO THE OUTPUT CONTROL AREA
3KQ=          CALL  0  OPERIDISC           [WRITE TO THE RECIPIENT DISC 
3L9W          BRN      OGRFORCE            [J IF THE DISC FAILED AND ABORT  
3LPG          LDX   7  OPERIBLOCKS(2)      [PICK UP NUMBER OF BLOCKS JUST COPIED
3M96          ADS   7  OBLOCKS(2)          [INCREMENT THE RUNNING COUNT 
3MNQ          LDX   7  OBLOCKS(2)   
3N8B          TXL   7  OBLOCKCOUNT(2)      [HAVE WE FINISHED YET?   
3NN2          BCS      ROUNDAGAIN          [J IF MORE TO BE COPIED  
3P7L    ONOGENRES                          [FINISHED SO SUPPRESS GEN RESTORE
3PM=          LDN   1  OMGRSUPPRES(2)      [PRINT "GENERAL RESTORE  
3Q6W          CALL  0  OUTCON              [SUPPRESSED" MESSAGE ON THE CONSOLE  
3QLG          LDN   6  0                   [REMEMBER NO GENERAL RESTORE 
3R66          BRN      RETURN              [AND GO BACK TO LOADERI  
3RKQ    #   
3S5B    OGRFORCE
3SK2          LDN   1  OMGREQUEST(2)       [PRINT "GENERAL RESTORE  
3T4L          CALL  0  OUTCON              [REQUESTED" MESSAGE ON THE CONSOLE   
3TJ=          LDN   6  1                   [REMEMBER TO FORCE GEN RESTORE   
3W3W    RETURN  
3WHG          LDX   7  OLINK(2)            [RESTORE LINK BACK TO LOADERI
3X36          EXIT  7  0                   [AND RETURN  
3XGQ    #   
3Y2B    #   
3YG2    #     BUFFER AREAS TO CONTAIN THE SYSTEM CONTROL AREAS AND  
3Y^L    #     FILE AREA CELLS READ BY THE OSEARCHDISC ROUTINE:  
3^F=    #   
3^YW    #   
42DG    OSCA
42Y6    #GAP  129   
43CQ    OSCAFAC 
43XB    #GAP  129   
44C2    #   
44WL    #   
45B=    #ALT  K9LOADERFT=0?+37?            [MEND AREA   
45TW    #GAP  100   
46*G    #   
46T6    #   
47#Q    #END
47SB    #OVE
^^^^ ...234377230001