{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: PCTCRTR8)}}
====== PCTCRTR8 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:BXE|BXE]], [[george:macro:BXU|BXU]], [[george:macro:COOR1|COOR1]], [[george:macro:DCA|DCA]], [[george:macro:DLCA|DLCA]], [[george:macro:FINDLCA|FINDLCA]], [[george:macro:FPUT|FPUT]], [[george:macro:GLPERI|GLPERI]], [[george:macro:HUNTACT|HUNTACT]], [[george:macro:LOCKC|LOCKC]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:UNLOCK|UNLOCK]]
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