PCTCRTR8

(George Source)

Macros used: ACROSS, BXE, BXU, COOR1, DCA, DLCA, FINDLCA, FPUT, GLPERI, HUNTACT, LOCKC, MENDAREA, MHUNTW, SEGENTRY, UNLOCK

PCTCRTR8.txt
22FL    #SEG  PCTCRTR8                     [G CONSTANTINIDES
22^=    #LIS  K0PCTCRTR>K0PCT>K0ALLGEO  
23DW                   8HPCTCRTR8   
23YG    # ENTRY POINTS  
24D6          SEGENTRY K1PCTCRTR,Z1PCTCRTR  
24XQ          MENDAREA APCTGAP,K100PCTCRTR  
25CB    #   
25X2    XCNCL          #76107623           [CANCEL ETX  
26BL    XSUB           #76127623           [DC4 ETX 
26W=    XDC4           #76047623           [SUB ETX 
27*W    NBIT45         #74777777           [MASK FOR UNSETTING THE DC4 & EOT BIT
27TG    ONEDAY         24*3600/K9*1000  
28*6    YEMODE40004    #40004000           [MODE #40004 SHIFTED LEFT 9 PLACES.  
28JY ...XCONT          +50  
28SQ    #   
29#B    TESTBUF 
29S2          LDN   4  0
2=?L          MVCH  3  4
2=R=    STEST   
2?=W          BXE   0  XCNCL(1),ZCNCL   
2?QG          BXE   0  XSUB(1),ZCNCL
2#=6          ERX   0  XDC4(1)  
2#PQ          BNZ   0  XETX 
2*9B    ZDC4  LDCT  0  #20  
2*P2          ORS   0  EWAIT(2) 
2B8L          EXIT  7  0
2BN=    #   
2C7W    XETX  ANDN  0  -1                  [REPEAT READ IF DOESN'T END WITH ETX 
2CMG          BZE   0  (7)  
2D76          ERN   0  #7623$#7607         [OR ETB. 
2DLQ          BNZ   0  ZENQX
2F6B          EXIT  7  0
2FL2    #   
2G5L    #   
2GK=    REFIND                             [LOCKC   
2H4W          MHUNTW   2,A7020,ALCB 
2HJG          EXIT  1  0
2J46    #   
2JHQ    REFINDA                            [FIND THE A7020/INPUT BLOCK FOR LOCKC
2K3B          MHUNTW   3,A7020,INFORM   
2KH2          LDX   2  FPTPCT(3)
2L2L          SBN   2  FPTPCT   
2LG=          EXIT  1  0
2L^W    #   
2MFG    #   
2M^6    #     SELECT AND THEN READ FROM A REMOTE CARD OR TAPE READER ON A 7020  
2NDQ    #     CONNECTED THROUGH A MULTIPLEXOR OR UNIPLEXOR  
2NYB    #   
2PD2    Z1PCTCRTR   
2PXL    #   
2QC=    # FIRST CHECK THAT ALL BUFFERS ARE AVAILABLE.   
2QWW          CALL  1  REFINDA  
2RBG          BXU   5  APCTID(2),POLE   
2RW6          LDX   4  BUFFNUM(2)   
2S*Q          SBX   4  FREBUFF(2)          [J. IF FREBUFF < BUFFNUM 
2STB          BNZ   4  NOTYET   
2T*2          SMO      FX1  
2TSL          LDX   6  NBIT45              [UNSET THE DC4 AND EOT MARKERS   
2W#=          ANDS  6  EWAIT(2) 
2WRW    #   
2X?G          CALL  1  REFIND              [FIND THE LCB & LOCK IT  
2XR6          LOCKC    2,REFIND 
2Y=Q          MHUNTW   3,A7020,ALCB 
2YQB          LDEX  4  GUNITNO(3)          [LINE NUMBER 
2^=2          STO   4  ACOMMUNE3(2)        [SAVE LINK NUMBER
2^PL          FINDLCA  ,4   
329=          SRC   4  9                   [TO TOP NINE BITS
32NW          DCA      ,STO,4,MODE  
338G          LDN   0  1
33N6          DLCA     1,DLA,0,MODE 
347Q          LDN   0  7
34MB          DLCA     1,DLA,0,COUNT
3572          LDN   0  GENQ1(3) 
35LL          DLCA     1,STO,0,CTSA 
366=          LDN   0  GREP1(3) 
36KW          DLCA     1,STO,0,CREP 
375G          DSA   7  GENQ1(3)            [IN ENQ MESSAGE  
37K6          GLPERI
384Q          LDX   0  JTIME
38JB          STO   0  GTIM(3)  
3942    WCONT LDX   0  GSIGN               [SET 
39HL          ORS   0  GWAIT(3)            [AMOP MARKER 
3=3=          COOR1                        [GO TO SLEEP 
3=GW          LDX   7  GREP1(3)            [GAS TGE TRANSFER FINISHED   
3?2G          BNG   7  WCONT               [NO - THEN CONTINUE WAITING  
3?G6          UNLOCK   3                   [YES - UNLOCK THE LCB
3?^Q          SLC   7  5                   [IS THE LINE INOPERABLE  
3#FB          BPZ   7  POLE 
3#^2          ANDN  7  #13  
3*DL          BNZ   7  POLE 
3*Y=    ZLOOP CALL  1  REFINDA             [FIND THE INPUT BUFFER BLOCK 
3BCW          LOCKC    2,REFINDA           [& LOCK IT.  
3BXG          CALL  1  REFINDA  
3CC6          LDX   1  3
3CWQ          LDX   3  2
3DBB    ZTR   LDX   2  FX2  
3DW2          LDX   4  FREBUFF(3)          [J. IF AT LEAST 2 BUFFERS AVAILABLE. 
3F*L          SBNC  4  3
3FT=          BCC      YBUF0
3G#W          UNLOCK   3                   [OTHERWISE SET THE "ASLEEP" MARKER & 
3GSG          LDX   0  GSIGN               [WAIT FOR THE CPAT TO MAKE SOME  
3H#6          ORS   0  EWAIT(3)            [MORE ROOM FOR READING IN DATA.  
3HRQ          COOR1 
3J?B          BRN      ZLOOP               [J. BACK TO TRY AGAIN.   
3JR2    #   
3K=L    YBUF0 LDX   6  COMMON(3)           [POINTER TO THE LAST BUFFER FILLED.  
3KQ=          SBX   6  BUFFNUM(3)          [STEP ON 2 BUFFERS (CYCLICALLY). 
3L9W          ADN   6  2
3LPG          BNG   6  YBUF1               [J FOR NORMAL CASE   
3M96          BNZ   6  YBUF2               [J IF BUFFERS ARE 0 AND 1
3MNQ          LDX   5  BUFFNUM(3)          [BUFFERS ARE (BUFFNUM)-1 AND 0   
3N8B          BCT   5  YBUF3
3NN2    YBUF1 ADX   6  BUFFNUM(3)   
3P7L    YBUF2 LDX   5  6
3PM=          SBN   5  1
3Q6W    YBUF3 STO   6  ACOMMUNE2(2)        [POINTER TO 2ND BUFFER   
3QLG          STO   5  ACOMMUNE1(2)        [POINTER TO 1ST BUFFER   
3R66          LDN   7  #42                 [PRESENT READ MODE WITH WARNING  
3RKQ          LDCT  0  #200                [J IF READING SINGLE SHOT
3S5B          ANDX  0  EWAIT(3) 
3SK2          BNZ   0  SETCA
3T4L          SBNC  4  2                   [OR IF <5 BUFFERS ARE FREE   
3TJ=          BCS      SETCA
3W3W          LDXC  0  ALINESTAT(1)        [OR IF MOPPING OFF OR ATTACHING  
3WHG          BCS      SETCA
3X36          LDCT  0  #100 
3XGQ          ANDX  0  FINISH   
3Y2B          BNZ   0  SETCA               [OR IF "FINISH NOW" IS SET,  
3YG2          SMO      APCTP(1) 
3Y^L          LDCH  0  APCTX(1) 
3^F=          SMO      APCTP(1) 
3^YW          ANDX  0  APCTD(1) 
42DG          BNZ   0  SETCA               [OR IF CONSOLE OUTPUT IS FLIPPED,
42Y6          LDX   0  ATSLICE(1)   
43CQ          BZE   0  ONEPT               [J. IF NOT MULTIDROP 
43XB          LDX   0  JTIME
44C2          SBX   0  APCTCLNCT(1) 
44WL          BPZ   0  NODAY
45B=          SMO      FX1  
45TW          ADX   0  ONEDAY   
46*G    NODAY TXL   0  ATSLICE(1)   
46T6          BCC      SETCA               [OR IF WE'VE FINISHED OUR TIME SLICE,
47#Q    ONEPT LDN   7  2                   [OTHERWISE USE ORDINARY READ MODE.   
47SB    #   
48#2    SETCA SLL   5  5                   [WORK OUT START ADDRESSES OF BUFFERS.
48RL          SLL   6  5
49?=          ADX   5  BUFFNUM(3)   
49QW          ADX   6  BUFFNUM(3)   
4==G          ADN   5  COMMON2(3)   
4=Q6          ADN   6  COMMON2(3)   
4=^Y ...      STOZ     AWORK1(2)
4?9Q          FINDLCA  ,ACOMMUNE3(2)       [GET LCA POINTER 
4?PB          LDN   0  #22                 [CONTINUATION READ   
4#92          DLCA     1,DLA,0,MODE2       [MODE
4#NL          DLCA     1,STO,6,CTSA2       [BUFFER ADDRESS  
4*8=          LDN   0  128                 [AND 
4*MW          DLCA     1,DLA,0,COUNT2      [COUNT FOR 2ND. TRANSFER.
4B7G          DLCA     1,DLA,0,COUNT       [COUNT & MODE FOR 1ST. TRANSFER. 
4BM6    RPERI DLCA     1,DLA,7,MODE        [REPEATED PERIS JOIN HERE.   
4C6Q          LDN   4  INREP1(3)           [SET CRWA,QRWA LAST TO PREVENT EXEC  
4CLB          DLCA     1,STO,5,CTSA        [BUFFER ADDRESS  
4D62          DLCA     1,STO,4,CREP        [& RWA FOR CURRENT.  
4DKL          ADN   4  INREP2-INREP1       [FROM IMPLEMENTING PERI BEFORE LCA   
4F5=          DLCA     1,STO,4,CREP2       [HAS BEEN FULLY LOADED,AS IT MIGHT   
4FJW          LDX   7  ACOMMUNE3(2)        [BE TEMPTED TO DO BY A STRAY RED REQU
4G4G    YCNCL SRC   7  9                   [PERI TO CANCEL READ JOINS HERE. 
4GJ6          DCA      ,STO,7,MODE  
4H3Q          GLPERI
4HHB          LDX   4  JTIME
4J32    XWAIT LDXC  7  INREP1(3)           [J IF 1ST READ NOT YET FINISHED  
4JGL          BCS      WAIT1               [CHECK REPLY BEFORE WAIT TO CATER
4K2=          LDX   0  INREP2(3)           [FOR MISSED INPUT ON V SHORT RECORDS 
4KFW          LDX   2  3
4K^G          LDX   1  FX1  
4LF6          ADXC  7  7
4LYQ          BCS      PERINOP  
4MDB          SLC   7  4
4MY2          BPZ   7  PERINOP  
4NCL          SRC   7  1
4NX=          BNG   7  REP  
4PBW          BNG   0  WAIT1               [J IF READ STILL ACTIVE  
4PWG          ADXC  0  0
4QB6          BCS      RPOLL
4QTQ          SLC   0  4
4R*B          BPZ   0  RPOLL
4RT2          SRC   0  1
4S#L          LDX   2  3                   [BUFFER BLOCK ADDRESS
4SS=          BPZ   0  SIM  
4T?W          SRC   7  1                   [J. IF READ ERRORED. 
4TRG          BNG   7  ZENQ 
4W?6          SRC   7  1
4WQQ          BNG   7  RPOLL               [J IF 1ST,NOT LIMITED,2ND N IMPL 
4X=B          SMO      5
4XQ2          LDX   0  0                   [FIRST WORD OF THE BUFFER
4Y9L          SRL   0  12                  [IS IT   
4YP=          SBN   0  #7624               [EOT?
4^8W          BZE   0  XEOT                [YES - THEN BRANCH   
4^NG          SBN   0  #0001               [IS IT ENQ?  
5286          BZE   0  ZENQ                [J IF SO 
52MQ    NOSEC LDEX  7  INREP1(3)
537B          LDN   3  124                 [PREPARE TO  
53M2          SBX   3  7                   [LOOK AT 
546L          BNG   3  SUMBF               [THE LAST
54L=          SRC   3  2                   [FOUR CHARACTERS 
555W          ADX   3  5                   [TRANSFERED  
55KG          CALL  7  TESTBUF             [HAS DC4 - CNCL BEEN TRANSFERED? 
5656          SBX   3  5
56JQ          SLC   3  2
574B    SUMMK LDX   1  FX2  
57J2          LDN   6  1
583L          LDX   5  ACOMMUNE1(1)        [REMEMBER ONLY 1 BUFFER FILLED   
58H=    SCO   ORX   3  GSIGN               [SET BUFFER FILLED BIT   
592W          STO   5  COMMON(2)           [UPDATE POINTER TO LAST BUFFER FILLED
59GG          SBS   6  FREBUFF(2)          [AND NO OF BUFFERS LEFT VACANT   
5=26          SMO      ACOMMUNE1(1) 
5=FQ          STO   3  COMMON2(2)          [SET CHARACTER COUNT FOR THIS BUFFER 
5=^B          LDX   3  2
5?F2          LDXC  0  EWAIT(2)            [IS THE CPA  
5?YL          BCC      XTR                 [TO BE WOKEN UP? 
5#D=          STO   0  EWAIT(2)            [YES-THEN CLEAR "WAITING" MARK,  
5#XW          HUNTACT  CPAT,2              [FIND THE CPA AND
5*CG          FPUT                         [PUT IT ON THE LIST  
5*X6    XTR   LDX   1  BPTPCT(3)           [GET PTR TO A7020/INFORM BLOCK   
5BBQ          LDCT  0  #020                [HAS DC4 
5BWB          SBN   1  FPTPCT   
5CB2          ANDX  0  EWAIT(3)            [OCCURED?
5CTL          BZE   0  ZTR                 [JUMP IF NOT 
5D*=          LDX   4  APCTID(3)           [IF IT HAS   
5DSW          SRL   45 12                  [REMOVE  
5F#G          SRL   5  12                  [THE 
5FS6          SMO      5                   [FLIP
5G?Q          ERS   4  APCTD(1)            [BIT 
5GRB          BRN      ZTR                 [AND ROUND TO RECEIVE EOT
5H?2    #   
5HQL    SIM 
5J==          SRC   0  1                   [IS THE  
5JPW          BNG   0  ZENQ                [TRANSFER ERROR? 
5K9G          SRC   0  1                   [HAS EOM 
5KP6          BNG   0  RPOLL               [BEEN RECEIVED?  
5L8Q          SRC   0  2                   [ISOLATE THE 
5LNB          ANDN  0  #777                [COUNT   
5M82          LDN   3  124                 [POSITION
5MML          SBX   3  0                   [X3 ON THE 4TH CH FROM THE END   
5N7=          BNG   3  SECSUM   
5NLW          SRC   3  2                   [FORM
5P6G          ADX   3  6                   [POINTER TO THIS CHARACTER   
5PL6          CALL  7  TESTBUF             [TEST FOR DC4 OR CNCL
5Q5Q          SBX   3  6                   [GET CHARACTER   
5QKB    SOMMK SLC   3  2                   [COUNT & INSERT BUFFER FILLED MARKER.
5R52          LDX   1  FX2  
5RJL          ORX   3  GSIGN
5S4=          LDX   5  ACOMMUNE2(1)        [REMEMBER BOTH BUFFERS FILLED
5SHW          SMO      5                   [SET THE SECOND  
5T3G          STO   3  COMMON2(2)          [BUFFER USED WORD
5TH6          LDN   6  2                   [2 BUFFERS FILLED.   
5W2Q          LDN   3  128                 [SET INITIAL READ
5WGB          BRN      SCO                 [SET UP FIRST BUFFER WORD
5X22    #   
5XFL    RPOLL LDCT  6  #120                [GIVE UP:INOP-WAITING FOR EOT?   
5X^=          ANDX  6  EWAIT(2) 
5YDW          BZE   6  XEOT1
5YYG    XEOT  LDCT  0  #10                 [IF SET THE  
5^D6          ORS   0  EWAIT(2)            [EOT MARKER  
5^XQ    XEOT1 UNLOCK   2
62CB    POLE  ACROSS   PCTCON,1            [NOW REPOLE  
62X2    #   
63BL    NOTYET  
63W=          SRL   5  12                  [INTERFACE BIT POSN. IN CHARACTER 3. 
64*W          ADX   3  APCTP(3)            [STEP DOWN TO THIS PCT.  
64TG          ERS   5  APCTD(3)            [UNSET THE PRIMARY FLIP BIT &
65*6          ORS   5  APCTX(3)            [SET THE SECONDARY FLIP BIT. 
65SQ          ACROSS   PCTCON,3 
66#B    #   
66S2    PERINOP 
67?L          BPZ   0  RPOLL
67R=    SCANC LDX   2  FX2                 [OTHERWISE TRY TO SCRUB IT   
68=W          LDX   7  ACOMMUNE3(2)        [GET THE LINE NO 
68QG          ORX   7  YEMODE40004(1)      [NON-POWERFUL CANCEL.
69=6          BRN      YCNCL               [J. TO ISSUE PERI.   
69PQ    #   
6=9B    ZCNCL LDCT  0  #100                [SET THE ERROR MARKER & ROUND FOR EOT
6=P2          ORS   0  EWAIT(2) 
6?8L          LDX   3  2                   [SAVE PTR TO BUFFER  
6?N=          BRN      ZENQ 
6#7W    ZENQX LDX   3  2
6#MG          LDX   2  FX2  
6*76          LDX   5  ACOMMUNE1(2) 
6*LQ          LDX   6  ACOMMUNE2(2) 
6B6B          SLL   5  5
6BL2          SLL   6  5
6C5L          ADX   5  BUFFNUM(3)   
6CK=          ADX   6  BUFFNUM(3)   
6D4W          ADN   5  COMMON2(3)   
6DJG          ADN   6  COMMON2(3)   
6F46          BRN      ZENQY
6FHQ    #   
6G3B    REP   BNG   0  SCANC               [J IF 2ND PART STILL ACTIVE  
6G4M ...[ INFINITE LOOP WILL OCCUR IF 7503 BEING USED WITHOUT A 7020
6G5Y ...[ EMULATOR PROGRAM - SO LIMIT NUMBER OF TIMES WE REPEAT PERI
6G79 ...      LDN   0  1
6G8G ...      ADX   0  AWORK1(2)
6G9R ...      STO   0  AWORK1(2)
6G?4 ...      SMO      FX1  
6G#* ...      TXU   0  XCONT
6G*L ...      BCS      ZENQ 
6GBX ...      UNLOCK   3
6GD8 ...      ACROSS   PCTCON,2 
6GFF ...[   
6GH2    ZENQ  LDX   2  FX2                 [REPEAT PERI(PARTS OF QLCA STILLVALID
6H2L    ZENQY LDN   7  #42                 [SEND WARNING TO GIVE PCT A CHANCE   
6HG=          FINDLCA  ,ACOMMUNE3(2)       [TO CORRECT ITSELF   
6H^W          BRN      RPERI
6JFG    #   
6J^6    WAIT1 MHUNTW   1,A7020,ALCB        [FIND THE LCB
6KDQ          BNG   4  WAIT2               [J IF START TIME ALREADY SET 
6KYB          STO   4  GTIM(1)             [STORE TIME AT WHICH PERI WAS INITIAT
6LD2          LDX   4  GSIGN               [SET ASLEEP MARKER   
6LXL    WAIT2 ORS   4  GWAIT(1) 
6MC=          COOR1                        [WAIT
6MWW          BRN      XWAIT               [HAVE ANOTHER LOOK   
6NBG    #   
6NW6    SUMBF SMO      5                   [<4 CHARS READ IN:GET WHAT WE CAN
6P*Q          LDX   0  0
6PTB          NGX   4  3                   [RIGHT JUSTIFY.  
6Q*2    ROUND SRL   0  6
6QSL          BCT   4  ROUND
6R#=          ADN   3  4
6RRW          CALL  7  STEST               [CHECK FOR ETX   
6S?G          BRN      SUMMK               [J TO SET MARKERS FOR USED BUFFER
6SR6    #   
6T=Q    SECSUM  
6TQB          ADN   3  4                   [RESET COUNT.
6W=2          BNZ   3  XAX  
6WPL          LDX   3  2
6X9=          BRN      NOSEC               [J IF NOTHING IN THE BUFFER  
6XNW    XAX 
6Y8G          SMO      5
6YN6          LDX   5  31   
6^7Q          SRC   3  2
6^MB          SMO      6
7272          LDX   6  0
72LL          ADN   3  5
736=          LDN   4  0
73KW          MVCH  3  4
745G          SMO      FX2                 [RESTORE X5,X6   
74K6          LDX   5  ACOMMUNE1
754Q          SMO      FX2  
75JB          LDX   6  ACOMMUNE2
7642          SLL   5  5
76HL          SLL   6  5
773=          ADX   5  BUFFNUM(2)   
77GW          ADX   6  BUFFNUM(2)   
782G          ADN   5  COMMON2(2)          [POINTERS TO THE TWO BUFFERS 
78G6          ADN   6  COMMON2(2)          [WHERE DATA HAS BEEN READ
78^Q          CALL  7  STEST
79FB          SBN   3  6
79^2          BRN      SOMMK               [J. TO MARK BOTH BUFFERS AS FILLED.  
7=DL    #   
7=Y=    #   
7?CW    #END
^^^^ ...24572313000300000000