{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: PMBUFFS84)}} ====== PMBUFFS84 ====== (George Source) **Macros used:** [[george:macro:EMPTY|EMPTY]], [[george:macro:GSCAN|GSCAN]], [[george:macro:GSCANDEF|GSCANDEF]], [[george:macro:GSCANEQU|GSCANEQU]], [[george:macro:OR|OR]], [[george:macro:PMCORES|PMCORES]], [[george:macro:PMESSAGE|PMESSAGE]], [[george:macro:PMOVE|PMOVE]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:TRACE|TRACE]] 22FL #OPT K0PMBUFFS=0 22^= #LIS K0PMBUFFS>K0POST>K0ALLGEO 23DW # 23YG ...#SEG PMBUFFS84 [KAREL KOSKUBA - DIAG 24D6 # 24XQ # THIS SEGMENT PRINTS OUT BOTH THE TRACE AND GSCAN BUFFERS 25CB # 25X2 8HPMBUFFS 26BL # 26W= # ENTRY POINT TABLE 27*W # 27TG SEGENTRY K1PMBUFFS,XK1PMBUFFS 28*6 #SKI BUFTRACE 28SQ #SKI K6TRACE<6-6 29#B ( 29S2 XK1PMBUFFS 2=?L BRN (JPMSEG) 2=R= ) 2?=W #SKI BUFTRACE 2?QG ( 2#=6 #SKI K6TRACE>5-5 2#PQ ( 2*9B SWITCH +0 2*P2 WCOUNT +0 [COUNT OF WORDS IN RECORD 2B8L TCOUNT +0 [COUNT OF TRACES PRINTED 2BN= XLINK +0 [LINK WORD FOR CORE PRINT ROUTINE 2C7W STOP +0 [CONTAINS ADDRESS AFTER LAST TRACE 2D76 MINI 16H MINI POSTMORTEM 2DLQ PRESET 8HGSCAN 2F6B TNAME 12HTRACE BUFFER 2FL2 TLINE 40H %B ACT.NO. %A 2G5L 20H CONTENTS OF %A 2GK= PMESS1 37HCORE PRINT OF TRACE BUFFER IMPOSSIBLE 2H4W PMESS2 37HERROR IN TRACE BUFFER OR ITS POINTERS 2HJG PMESS3 35HJTRAIND CORRUPTED, ASSUME JTRAIND=0 2J46 TEMPTY 25HTHE TRACE BUFFER IS EMPTY 2JHQ SLINE 40H %B ACT.NO. CONTE 2K3B 12HNTS OF %A 2KH2 SNAME 12HGSCAN BUFFER 2L2L PMESS4 37HCORE PRINT OF GSCAN BUFFER IMPOSSIBLE 2LG= PMESS5 37HERROR IN GSCAN BUFFER OR ITS POINTERS 2L^W PMESS6 25HTHE GSCAN BUFFER IS EMPTY 2MFG PMOD +0 [USED TO CHECK FOR COMPLETE LINE 2M^6 POINTER +0 [POINTER TO NEXT RECORD IN SCTABLE 2NDQ PFORMAT LDX 6 JOCT 2NYB LDX 6 JCHA 2PD2 LDX 6 JDECS 2PXL LDX 6 JDECP 2QC= SCTABLE 2QWW GSCANDEF DOCUMENT,1,0,0,1 2RBG GSCANEQU SWAPOUTF,SWAPINI 2RW6 GSCANDEF CLOAD,1,2 2S*Q GSCANDEF NEWJOB,0,1 2STB GSCANDEF MONF OUT,1,0,0,1 2T*2 GSCANDEF COREJAM,1,3 2TSL SCEND +SCEND 2W#= # 2WRW # THIS ROUTINE GIVES A CORE PRINT 2X?G # ENTRY X0=NUMBER OF WORDS 2XR6 # X1=START ADDRESS 2Y=Q # X7=LINK 2YQB # EXIT ALL ACCS UNDEFINED 2^=2 # 2^PL PRINTC 329= SMO FXPM1 32NW STO 7 XLINK 338G CALL 7 (JPRINT1) 33N6 SMO FXPM1 347Q LDX 7 XLINK 34MB BZE 0 (7) 3572 TB7 LDN 4 1 35LL ADS 4 JPMOD [UPDATE LP MODIFIER 366= LDX 5 1 [LOAD ADDRESS OF WORD TO CONVERT 36KW CALL 7 (JDECN) [IT FROM BINARY TO DECIMAL 375G SMO FXPM1 37K6 STO 0 WCOUNT 384Q ADS 4 JPMOD [UPDATE LP MODIFIER 38JB LDX 5 0(1) [CONVERT WORD TO CHARACTER, DECIMAL, 3942 ADS 4 1 39HL CALL 7 (JCON4) [OCTAL AND INSTRUCTION FORMATS 3=3= CALL 7 (JPRINT1) [PRINT A LINE 3=GW SMO FXPM1 3?2G LDX 0 WCOUNT [TEST IF CORE PRINT 3?G6 BCT 0 TB7 [HAS BEEN FINISHED 3?^Q SMO FXPM1 3#FB LDX 7 XLINK 3#^2 EXIT 7 0 3*DL #SKI K6TRACE<12-12 3*Y= TRACE 3BCW #SKI K6TRACE>11-11 3BXG ( 3CC6 # 3CWQ # TRACE BUFFER EMPTY OUTPUT A MESSAGE AND BRANCH TO (JPMSEG) 3DBB # 3DW2 TBEMPTY 3F*L PMESSAGE TEMPTY,7,FXPM1 3FT= BRN (JPMSEG) 3G#W # 3GSG # CHECK IF IT IS POSSIBLE TO GIVE A CORE PRINT 3H#6 # AND IF IT ISN'T OUTPUT A MESSAGE AND BRANCH TO (JPMSEG) 3HRQ # 3J?B TB1 LDX 1 JTRATOP [IF JTRATOP IS GREATER 3JR2 LDX 4 CORES [THAN CORES 3K=L TXL 4 1 [BRANCH TO (JPMSEG) 3KQ= BCC TB8 3L9W PMESSAGE PMESS1,10,FXPM1 3LPG BRN (JPMSEG) [AND DISPLAY A MESSAGE 3M96 TB8 3MNQ PMESSAGE PMESS2,10,FXPM1 3N8B ... SBX 1 JTRALEN [GIVE A CORE PRINT 3NN2 ... LDX 0 JTRALEN [USING JTRATOP AND TRALEN 3Q6W CALL 7 PRINTC 3QLG BRN (JPMSEG) 3R66 # 3RKQ # CHECK IF EITHER JTRABUFF OR JTRATOP HAVE BEEN CORRUPTED 3S5B # AND GIVE A CORE PRINT USING THE APPROPRIATE POINTER. 3SK2 # 3T4L PCORE1 3TJ= LDX 5 JTRAPNTR 3W3W TXL 5 4 3WHG BCS TB1 3X36 PCORE2 3XGQ PMESSAGE PMESS2,10,FXPM1 3Y2B ... LDX 0 JTRALEN [LOAD ACCUMULATORS IN 3Y^L LDX 1 JTRABUFF [ORDER TO GIVE CORE PRINT 3^F= CALL 7 PRINTC 3^YW BRN (JPMSEG) 42DG # 42Y6 # CHECK THE POINTERS TO SEE IF THE TRACE BUFFER IS EMPTY 43CQ # 43XB TB9 TXU 4 JTRAPNTR [IF JTRABUFF IS UNEQUAL TO 44C2 BCS PCORE2 [JTRAPNTR GIVE A CORE PRINT 44WL LDX 4 JTRATOP [OTHERWISE 45B= SMO FXPM1 45TW STO 4 STOP [TEST IF BUFFER 46*G LDX 4 JTRAIND [IS EMPTY AND OUTPUT A 46T6 BNZ 4 TBEMPTY [MESSAGE IF IT IS 47#Q LDN 6 2 47SB BRN TB2 48#2 # 48RL # TRACE BUFFER ROUTINE ENTERED HERE AND TITLE LINES PRINTED OUT 49?= # 49QW TRACE 4==G PMESSAGE TNAME,3,FXPM1 4=Q6 PMESSAGE TLINE,15,FXPM1 4?9Q # 4?PB # CHECK TO SEE IF ANY OF THE POINTERS HAVE BEEN CORRUPTED 4#92 # AND IF THEY HAVE GIVE A CORE PRINT WHERE THIS IS POSSIBLE 4#NL # 4*8= LDX 4 JTRABUFF 4*MW PMCORES 4,TB1 4B7G TXL 4 JTRATOP [IF JTRABUFF>JTRATOP BRANCH 4BM6 BCC PCORE1 [TO GIVE A CORE PRINT 4C6Q LDX 5 JTRATOP 4CLB LDX 6 CORES 4D62 TXL 6 5 [IF JTRATOP>CORES BRANCH 4DKL BCS PCORE2 [TO GIVE A CORE PRINT 4F5= TXL 5 JTRAPNTR [IF JTRATOP>JTRAPNTR BRANCH 4FJW BCS PCORE2 [TO GIVE A CORE PRINT 4G4G ... LDX 6 JTRALEN 4H3Q SBX 5 4 [USE TRALEN TO CHECK IF 4HHB TXU 6 5 [JTRABUFF AND JTRATOP ARE CORRUPTED 4J32 BCS PCORE2 4JGL TXL 4 JTRAPNTR [IF JTRABUFF>JTRAPNTR OR EQUAL 4K2= BCC TB9 [BRANCH TO SEE IF BUFFER IS EMPTY 4KFW LDX 5 JTRAPNTR 4K^G SMO FXPM1 4LF6 STO 5 STOP 4LYQ # 4MDB # CHECK THE VALUE OF JTRAIND. IF IT IS GREATER 4MY2 # THAN ONE ASSUME THAT BUFFER IS FULL. 4NCL # 4NX= LDX 6 JTRAIND 4PBW LDN 7 1 4PWG TXL 7 6 [TEST IF JTRAIND>1 4QB6 BCC TB2 [BRANCH IF IT ISN'T 4QTQ PMESSAGE PMESS3,9,FXPM1 4R*B STOZ 6 4RT2 TB2 SMO FXPM1 4S#L STO 6 SWITCH 4SS= BNZ 6 TB3 4T?W # 4TRG # LOAD ACCUMULATORS READY FOR PRINTING OUT OF TRACE BUFFER 4W?6 # X0=LENGTH OF EACH TRACE RECORD 4WQQ # X1=ADDRESS OF FIRST RECORD 4X=B # 4XQ2 CALL 7 (JPRINT1) [THROW A LINE 4Y9L LDX 1 JTRAPNTR 4YP= TB6 LDN 0 JTRAENT 4^8W # 4^NG # CHECK IF TRACE WAS INSERTED BY GSCAN 5286 # 52MQ CALL 7 (JUP) 537B +1 53M2 LDX 5 2(1) 546L BPZ 5 TB4 [IF RECORD INSERTED BY GSCAN 54L= SMO FXPM1 555W LDN 4 PRESET [SET UP CHARACTERS 'GSCAN' AT 55KG LDX 5 JPMOD [THE FRONT OF LP BUFFER 5656 MOVE 4 2 56JQ TB4 LDN 7 2 574B ADS 7 JPMOD 57J2 # 583L # SET UP TRACE RECORD IN CURRENT LP BUFFER 58H= # 592W LDX 4 1 59GG LDX 5 JPMOD [LOAD TRACE NAME 5=26 MOVE 4 2 [INTO LP BUFFER 5=FQ SBN 0 2 5=^B LDN 4 3 5?F2 ADS 4 JPMOD 5?YL ADN 1 2 5#D= LDX 5 2(1) [LOAD THE CURRENT ACTIVITY NUMBER 5#XW CALL 7 (JDECN) [AT TIME OF TRACE INTO LP BUFFER 5*CG LDN 4 1 5*X6 ADS 4 JPMOD 5BBQ LDXC 5 0(1) [LOAD THE ADDRESS OF THE 5BWB CALL 7 (JDECN) [WORD TRACED INTO LP BUFFER 5CB2 ADS 4 JPMOD 5CTL BUX 1 £ 5D*= SMO FXPM1 5DSW STO 0 WCOUNT 5F#G LDX 5 0(1) [LOAD THE CONTENTS OF WORD TRACED 5FS6 CALL 7 (JCON4) [INTO LP BUFFER IN DIFFERENT FORMAT 5G?Q CALL 7 (JPRINT1) [PRINT A LINE 5GRB # 5H?2 # CHECK THE COUNT OF TRACES PRINTED AND LENGTH OF THE RECORDS 5HQL # 5J== SMO FXPM1 5JPW LDX 4 TCOUNT 5K9G ADN 4 1 5KP6 SMO FXPM1 5L8Q STO 4 TCOUNT 5LNB LDN 6 JTRAENT 5M82 MPY 4 6 [TEST IF THE NUMBER 5MML ... LDX 4 JTRALEN [OF TRACES PRINTED IS 5NLW TXL 4 5 [GREATER THAN THE MAXIMUM 5P6G BCS PCORE2 [IF IT IS GIVE A CORE PRINT 5PL6 ADN 1 2 5Q5Q SMO FXPM1 5QKB LDX 0 WCOUNT [TEST IF NUMBER OF WORDS IN RECORD 5R52 SBN 0 3 [IS WRONG AND IF IT IS 5RJL BNZ 0 PCORE2 [BRANCH TO GIVE A CORE PRINT 5S4= # 5SHW # CHECK IF ALL THE TRACES HAVE BEEN PRINTED. ACCORDING 5T3G # TO WHICH POINTER HOLDS THE END ADDRESS. 5TH6 # 5W2Q SMO FXPM1 5WGB LDX 4 SWITCH 5X22 BNZ 4 TB5 5XFL TXU 1 JTRATOP [TEST IF END OF BUFFER HAS BEEN 5X^= BCS TB6 [REACHED BRANCH IF IT HASN'T 5YDW LDN 4 1 [OTHERWISE SET SWITCH 5YYG SMO FXPM1 5^D6 STO 4 SWITCH [WORD TO ONE 5^XQ TB3 LDX 1 JTRABUFF [AND START PRINTING TRACES 62CB BRN TB6 [FROM START OF BUFFER 62X2 TB5 SMO FXPM1 63BL TXU 1 STOP [TEST IF ALL THE TRACES 63W= BCS TB6 [HAVE BEEN PRINTED 64*W ) 64TG BRN (JPMSEG) 65*6 # 65SQ # THIS ROUTINE CHECKS TO SEE IF THE LP BUFFER IS FULL 66#B # IF IT IS THE LINE IS PRINTED AND THE OUTPUT CONTINUED 66S2 # ON THE NEXT LINE. 67?L # ENTRY X7=LINK 67R= # EXIT X3,X5,X6,X7 UNDEFINED 68=W # 68QG NEWLINE 69=6 SMO FXPM1 69PQ STO 7 XLINK 6=9B LDX 5 JPMOD 6=P2 SLC 5 2 6?8L SMO FXPM1 6?N= SBX 5 PMOD 6#7W LDN 6 79 [TEST IF THE LP BUFFER 6#MG TXL 5 6 [IS FULL BRANCH 6*76 BCS SC13 [IF IT ISN'T 6*LQ CALL 7 (JPRINT1) [PRINT A LINE 6B6B LDN 6 8 6BL2 ADX 6 JPMOD [UPDATE 6C5L STO 6 JPMOD [LP MODIFIER 6CK= SLC 6 2 6D4W SMO FXPM1 6DJG STO 6 PMOD 6F46 SC13 SMO FXPM1 6FHQ LDX 7 XLINK 6G3B EXIT 7 0 6GH2 # 6H2L # OUTPUT AN ERROR MESSAGE AND GIVE A CORE PRINT OF THE 6HG= # GSCAN BUFFER THEN BRANCH TO PRINT OUT THE TRACE BUFFER 6H^W # 6JFG PRNTCORE 6J^6 PMESSAGE PMESS5,10,FXPM1 6KDQ LDX 1 GSCANBUFF [LOAD ACCUMULATORS 6KYB ... LDX 0 GSCANLEN [IN ORDER TO 6LD2 CALL 7 PRINTC [CALL CORE PRINT ROUTINE 6LXL BRN TRACE 6MC= # 6MWW # CORE PRINT OF GSCAN BUFFER IMPOSSIBLE AS GSCANBUFF>CORES 6NBG # BRANCH TO PRINT OUT TRACE BUFFER 6NW6 # 6P*Q NOPRINT 6PTB PMESSAGE PMESS4,10,FXPM1 6Q*2 BRN TRACE 6QSL # 6R#= # GSCAN BUFFER ROUTINE ENTERED HERE AND TITLE LINES PRINTED OUT 6RRW # 6S?G XK1PMBUFFS 6SR6 # 6T=Q # PRINT MINI POSTMORTEM HEADING 6TQB # 6W=2 SMO FXPM1 6WPL LDN 4 MINI [SET UP HEADING 6X9= LDX 5 JPMOD 6XNW MVCH 4 16 6Y8G CALL 7 (JPRINT) [THROW A PAGE & PRINT HEADING 6YN6 PMESSAGE SNAME,3,FXPM1 6^7Q PMESSAGE SLINE,13,FXPM1 6^MB # 7272 ...# READ DOWN PMINPRIN FROM BACKING STORE 72LL # 736= SMO FXPM1 73KW LDN 5 XDINPRIN 745G ... PMOVE PMINPRIN,5 74K6 # 754Q # CHECK TO SEE IF ANY OF THE POINTERS HAVE BEEN CORRUPTED 75JB # AND IF THEY HAVE GIVE A CORE PRINT WHERE POSSIBLE 7642 # 76HL LDX 4 GSCANBUFF 773= LDX 5 GSCANPNTR 77GW LDX 1 GSCANVAL 782G PMCORES 4,NOPRINT 78G6 PMCORES 5,PRNTCORE 78^Q TXL 4 5 [IF GSCANBUFF