IMD 1.16: 2/09/2008 10:36:45 84-93814-02-c000 (f81402) pat 495 source product diskette    @0|)wwЀЀtQql)  " }gA ` MIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOS4 MF081111111322400811116111736 8111161117360F81402 VOLPAT495 DIAGNOSTIC 84-93814-02-C0000   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII M@jjggg@ o G`k_C# b# }B u[ ]e JRiCCp@<;: F8P@ G;NPCHC C GTqE'ɞ * Cϟx @0DAJL )‘ЀЀΎQBx"  i+ fEB)3 `jmBBI,v  BI,m  @EEFF)D^EF% jH@pOğv g7g4]X] PhV+s=胾c_N GF֞ؾ “@ALS)"$ C k1/j-h p vRw ppwp ki 15 !^\d X %'+Ns愾Q)s ED|{ @$ o O m J K i g. V tsFn`"FED) E`Cnrgy w"N{Rq1H }L2`0tG- Bc (>= LAST P REGISTER * FAR==> FAULT ADDRESS REGISTER * P38:R COPY =2,A TURN ON TRANSLATION ENABLE OUT A,5 COPY =:E000,X POINT TO PAGE :38 COPY 0(X),A TEST READ SST 2 BAD PARITY? JMP $+2 ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P38:R1 NO, CHECK READ THROUGH MAP IN 3,A GET LP IN 7,Y GET FAR,CLEAR FLAGS ERROR: FAULT,ON,ALLOWED,READ,-,A=LP,Y=FAR JMP P38:F * * DATA1 WORD :5555 DATA2 JMP *$+1 DATA3 WORD :0000 PAAAA WORD :AAAA LP:POS WORD 0 LAST P TEST WORD LPFCH WORD 0 STORE P OF FETCH WORD 0 STORE P BEFORE FETCH FOR RETURN * * P38:R1 CSK A,DATA1 NOP ERROR: READ,THROUGH,MAP,DID,NOT,WORK P38:F OUT A,4 RESET MAP, TBIT OFF COPY =$+5,A SET UP FETCH TEST COPY A,2(X) COPY =2,A RE-ENABLE TRANSLATION OUT A,5 JMP 1(X) TEST FETCH NOP SST 2 BAD PARITY? JMP $+2 NO  ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P38:W NO, FETCH OK IN 3,A GET LP IN 7,Y GET FAR,CLEAR FLAGS ERROR: FAULT,ON,ALLOWED,FETCH,-,A=LP,Y=FAR P38:W COPY =$+3,A COPY A,LP:POS COPY PAAAA,A TEST WRITE COPY A,3(X) SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P38:W1 NO, SHOULD HAVE JMP P38:W2 YES, OK P38:W1 EQU $ ERROR: SHOULD,TRAP,-,WRITE,NOT,ALLOWED JMP P39:R P38:W2 IN 3,A GET LP COPY =P38:W+3,Q GET CORRECT VALUE FOR LP CSK A,Q COMPARE THEM NOP ERROR: LASTP,IN,AREG,SHOULD,=,QREG IN 7,A GET FAR, CLEAR ERROR FLAGS COPY X,Q ADD =3,Q GET CORRECT VALUE FOR FAR CSK A,Q COMPARE THEM NOP ERROR: FAULT,ADDRESS,IN,AREG,SHOULD,=,QREG ***** PATCH FOR LOOPING ***** JMP P38:R ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=5 NOP ERROR: PCOUNT,SHOULD,=5 TITL * TEST MODES ON PAGE :39 * READ/WRITE ALLOWED * P39:R COPY =:E400,X POINT TO PAGE :39 COPY 0(X),A TEST READ SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P39:R1 NO, CHECK READ THROUGH MAP IN 3,A GET LP IN 7,Y GET FAR,CLEAR FLAGS ERROR: FAULT,ON,ALLOWED,READ,-,A=LP,Y=FAR JMP P39:F P39:R1 CSK A,DATA1 NOP ERROR: READ,THROUGH,MAP,DID,NOT,WORK P39:F OUT A,4 RESET MAP, TURN OFF TRANSLATION COPY =$+7,A SET UP FETCH TEST COPY A,2(X) COPY =$+7,A COPY A,LPFCH+1 STORE P FOR RETURN FROM FETCH  COPY =:E401,A COPY A,LPFCH STORE P OF FETCH COPY =2,A RE-ENABLE TRANSLATION OUT A,5 P39:F1 JMP 1(X) TEST FETCH NOP SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P39:F2 NO, SHOULD HAVE TRAPPED JMP P39:F3 YES, CHECK REGISTERS P39:F2 EQU $ ERROR: SHOULD,TRAP,-,FETCH,NOT,ALLOWED JMP P39:W P39:F3 IN 3,A GET LP COPY X,Q GET CORRE CT VALUE FOR LP ADD =1,Q CSK Q,A COMPARE THEM NOP ERROR: LASTP,IN,AREG,SHOULD,=,QREG IN 7,A GET FAR, CLEAR FLAGS CSK A,Q NOP ERROR: FAR,IN,AREG,SHOULD,=,QREG P39:W COPY PAAAA,A TEST WRITE COPY A,3(X) SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P39:W1 NO, WRITE OK IN 3,A YES, GET LP IN 7,Y GET FAR,CLEAR FLAGS ERROR: FAULT,ON,ALLOWED,WRITE,-,A=LP,Y=FAR GLPOL: ***** PATCH FOR LOOPING ***** P39:W1 EQU $ JMP P39:R ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=6 NOP ERROR: PCOUNT,SHOULD,=6 TITL * * TEST MODES ON PAGE :3A * THIS PAGE IS NOT MAPPED * P3A:R COPY =:E800,X POINT TO PAGE :3A COPY =$+2,A COPY A,LP:POS COPY 0(X),A TEST READ SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P3A:R1 NO, SHOULD HAVE TRAPPED JMP P3A:R2 YES, CHECK REGISTERS P3A:R1 EQU $ ERROR: SHOULD,TRAP,-,READ,NOT,ALLOWED JMP P3A:F P3A:R2 IN 3,A GET LP COPY =P3A:R+3,Q GET CORRECT VALUE FOR LP CSK A,Q COMPARE THEM NOP ERROR: LASTP,IN,AREG,SHOULD,=,QREG IN 7,A GET FAR, CLEAR FLAGS CSK A,X COMPARE ADDRESSES NOP ERROR: FAR,IN,AREG,SHOULD,=,XREG P3A:F OUT A,4 RESET MAP, TURN OFF TRANSLATION COPY =$+7,A SET UP FETCH TEST COPY A,2(X) COPY =$+7,A COPY A,LPFCH+1 STOR P FOR RETURN FROM FETCH COPY =:E801,A COPY A,LPFCH STORE P OF FETCH COPY =2,A RE-ENABLE TRANSLATION OUT A,5 P3A:F1 JMP 1(X) TEST FETCH NOP SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P3A:F2 NO, SHOULD HAVE TRAPPED JMP P3A:F3 YES, CHECK REGISTERS P3A:F2 EQU $ ERROR: SHOULD,TRAP,-,FETCH,NOT,ALLOWED JMP P3A:W P3A:F3 IN 3,A GET LP COPY X,Q GET CORRECT VALUE FOR LP ADD =1,Q CSK A,Q COMPARE THEM NOP ERROR: LASTP,IN,AREG,SHOULD,=,QREG IN 7,A GET FAR, CLEAR FLAGS CSK A,Q NOP ERROR: FAR,IN,AREG,SHOULD,=,QREG P3A:W COPY =$+3,A COPY A,LP:POS COPY PAAAA,A TEST WRITE COPY A,3(X) SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P3A:W1 NO, SHOULD HAVE JMP P3A:W2 YES, OK P3A:W1 EQU $ ERROR: SHOULD,TRAP,-,WRITE,NOT,ALLOWED JMP P3B:R P3A:W2 IN 3,A GET LP COPY =P3A:W+3,Q GET CORRECT VALUE FOR LP CSK A,Q COMPARE THEM NOP ERROR: LASTP,IN,AREG,SHOULD,=,QREG IN 7,A GET FAR, CLEAR ERROR FLAGS COPY X,Q ADD =3,Q GET CORRECT VALUE FOR FAR CSK A,Q COMPARE THEM NOP ERROR: FAULT,ADDRESS,IN,AREG,SHOULD,=,QREG ***** PATCH FOR LOOPING ***** JMP P3A:R ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=7 NOP ERROR: PCOUNT,SHOULD,=7 JMP P3B:R LPOOL TITL * TEST MODES ON PAGE :3B * READ,WRITE, & FETCH ALLOWED * P3B:R COPY =:EC00,X POINT TO PAGE :3B COPY 0(X),A TEST READ SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P3B:R1 NO, CHECK READ THROUGH MAP IN 3,A GET LP IN 7,Y GET FAR, CLEAR ERROR FLAGS ERROR: FAULT,ON,ALLOWED,READ,-,A=LP,Y=FAR JMP P3B:F P3B:R1 CSK A,DATA1 NOP ERROR: READ,THROUGH,MAP,DID,NOT,WORK P3B:F OUT A,4 RESET MMU,TURN OF TRANSLATION COPY =$+5,A SET UP FETCH TEST COPY A,2(X) COPY =2,A RE-ENABLE TRANSLATION OUT A,5 JMP 1(X) TEST FETCH NOP SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P3B:W NO, FETCH OK IN 3,A GET LP IN 7,Y GET FAR, CLEAR ERROR FLAGS ERROR: FAULT,ON,AL LOWED,FETCH,-,A=LP,Q=NLP,Y=FAR P3B:W COPY PAAAA,A TEST WRITE COPY A,3(X) SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P3B:END NO, WRITE OK IN 3,A YES, GET LP IN 7,Y GET FAR, CLEAR ERROR FLAGS ERROR: FAULT,ON,ALLOWED,WRITE,-,A=LP,Q=NLP,Y=FAR ***** PATCH FOR LOOPING ***** P3B:END EQU $ JMP P3B:R ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=8 NOP ERROR: PCOUNT,SHOULD,=8 LPOOL * * * * THIS TEST EXECUTES AND TIMES A SHORT LOOP WITHIN A 1K PAGE BOUNDARY * AND THEN DOES IT AGAIN ACROSS A 1K PAGE BOUNDARY. THE TIMES ARE * CONVERTED TO A RATIO AND COMPARED TO FIXED LIMITS. * TRANSLATION MUST BE ENABLED TO SEE A PERFORMANCE INPROVEMENT * . THE TEST IS REPEATED ACROSS ALL NON-PROGRAM PAGES FOR ALL * USER NUMBERS. * * LAL1 EQU $ COPY MAPTYPE,A CHECK FOR MAP WITHOUT CACHE JEQ A,$+2 JMP LAL:END IF NOT JUMP OUT JST INITB4 INITIALIZE TABLE COPY =0,A COPY A,USERNO INITIALIZE USER NUMBER LAL6 COPY H03FA,X INITIALIZE PAGE COUNT TO 1 BOUNDARY MINUS 4 ADD PAPROG,X MOVE TO FIRST PAGE BOUNDARY AFTER PROGRAM  COPY X,MEMLOC LAL2 COPY USERNO,A COPY MEMLOC,X OUT A,6 SET CURRENT USER NUMBER COPY INST11,A SET UP LOOP WITHIN 1K PAGE BOUNDARY COPY A,0(X) NOP - :XXXA COPY INST22,A COPY A,1(X) JMP2(X) - :XXXB  COPY INST33,A COPY A,2(X) ADD =1,A - :XXXC COPY INST44,A COPY A,3(X) JMP0(X) - :XXXD COPY =:93,Q COPY Q,RTCV COPY =LAL25,Q COPY Q,:93 RBIT CLKEN,S DISABLE RTC INTERRUPT COPY =-2,A SET COUNT TO TWO TICKS COPY A,:91 COPY =0,A COPY A,HITCNT INITIALIZE HIT COUNTER SBIT CLKEN,S ENABLE RTC INTERRUPT SBIT INTENA,S GLOBAL INTERRUPT ENABLE JMP $ LAL25 ENT RTC HAS BEEN INITIALIZED TO A STARTING POINT COPY =LAL3,Q SETUP RTC VECTOR LOCATION COPY Q,:93 COPY =-2,A SET UP COUNT TO TWO TICKS  COPY A,:91 SBIT CLKEN,S ENABLE RTC INTERRUPT BIT SBIT INTENA,S ENABLE GLOBAL INTERRUPTS JMP 0(X)  GO TO LOOP LPOOL LAL3 ENT COPY A,HITCNT SAVE HIT COUNT COPY MEMLOC,X COPY INST11,A SET UP LOOP ACROSS BOUNDARY ADD =4,X COPY A,0(X) NOP - :XXXE COPY INST22,A COPY A,1(X)  JMP 2(X) - :XXXF COPY INST33,A COPY A,2(X) ADD =1,A - :XXX0 COPY INST44,A COPY A,3(X) JMP 0(X) - :XXX1 COPY =LAL35,Q SET UP RTC INTERRUPT VECTOR COPY Q,:93 RBIT CLKEN,S  COPY =-2,A SET UP TWO TICKS COPY A,:91 COPY =0,A COPY A,MISCNT INITIALIZE MISS COUNT AND A REGISTER SBIT CLKEN,S SBIT INTENA,S JMP $ LAL35 ENT RTC HAS BEEN INITIALIZED TO STARTING POINT  COPY =LAL4,Q SET UP RTC VECTOR LOCATION COPY Q,:93 COPY =-2,A SET COUNT TO TWO TICKS COPY A,:91  SBIT INTENA,S ENABLE GLOBAL INTERRUPTS JMP 0(X) GO TO LOOP LAL4 ENT COPY A,MISCNT COPY =0,A GET READY TO MULTIPLY COPY =100,Q MUL MISCNT,AQ COMPUTE RATIO OF HITS TO MISS DIV  HITCNT,AQ CSK Q,HILIM22 COMPARE TO HIGH LIMIT JMP $+2 HLT ERROR - OVER LIMIT BOUND  NOP CSK Q,LOLIM22 COMPARE TO LOW LIMIT BOUND HLT ERROR - UNDER LIMT BOUND NOP LAL5 COPY =:400,A ADD MEMLOC,A COPY A,MEMLOC CSM A,HFFFA SKIP LAST PAGE BOUNDARY OF MEMORY  JMP LAL2 DO NEXT PAGE NOP SBIT 10,S AFTER 1ST MAP GO TO USER MODE IMS USERNO BUMP USER NUMBER COPY USERNO,A CHECK IF ALL USERS DONE CLSN A,=:10 JMP $+5 SHIFT A,L,4 ADD =7,A SELP A,4 JMP LAL6 NO? GO DO NEXT MAP NUMBER RBIT 10,S RETURN TO SYSTEM MODE  OUT A,4 RESET MMU SBIT 8,S ENABLE INTERRUPTS JMP LAL:END GO TO EXIT LPOOL * * * *  THIS SUBROUTINE INITIALIZES THE TRANSLATION TABLE SO THAT ALL * 15 USER MAPS POINT TO THE FIRST 64K OF PHYSICAL MEMORY. * IT DETERMINES THE PAGE AFTER THE END OF THE PROGRAM (PAPROG) * THIS ROUTINE LEAVES THE TRANSLATION ENABLED AND IN SYSTEM MODE. * * * INITB4 ENT COPY =1,A OUT A,4 INITIALIZE MMU OUT A,5 ENABLE TABLE ACCESS ONLY COPY HFC00,X GET TABLE START ADDRESS COPY =-:10,A COPY A,MAPCNT SET MAP NUMBER COUNTER INIT43 COPY =:3000,A GET MAP SKELETON DATA INIT41 COPY A,0(X) STORE DATA IN MAP ADD =1,A ADD =1,X  BUMP TABLE ADDRESS TBIT 6,A CHECK IF UP TO END OF SELECTED MAP JT OV,$+2 JMP INIT41  IMS MAPCNT JMP INIT43 DO NEXT MAP NOP COPY =PATEND,A GET END OF PROGRAM ADDRESS AND HFC00,A MASK OFF ALL BUT PAGE # BITS ADD H0400,A ADD ONE PAGE COPY A,PAPROG SAVE FOR LOOK-AHEAD LATCH TEST COPY =2,A OUT A,5 TURN TRANSLATION ON, TABLE ACCESS OFF JMP *INITB4 LPOOL LAL:END EQU $ IMS PCOUNT COPY PCOUNT,A CSK A,=9 CHECK TO SEE IF TEST HAS BEEN COMPLETED NOP HLT COPY RTCV,Q COPY Q,:93 COPY =UMT1,A RESTORE MEMORY EXECPTION TRAP COPY A,UNMEM3  JMP G00 LPOOL * * * H03FA WORD :03FA TOTPGS WORD 0 H02FA WORD :02FA H0400 WORD :0400 USERNO WORD 0 INST11  NOP INST22 JMP 2(X) INST33 ADD =1,A INST44 JMP 0(X) HITCNT WORD 0 MEMLOC WORD 0 CLKEN EQU 5 INTENA EQU 8 MISCNT WORD 0 HILIM22 WORD :60 LOLIM22 WORD :55 MAPCNT WORD 0 PAPROG WORD 0 HFC00 WORD :FC00 HFFFA WORD :FFFA RTCV  WORD 0 TITL TEST MMU DMA MAPPING CAPABILITY ******************************************************************* * * *  --- MULTIPLE MAP DMA TRANSFER TEST --- * THIS DMA TEST IS DESIGNED TO TEST THE ABILITY OF THE * MMU TO HANDLE DMA TRANSFERS TO SEPERATE MAPS. * THE TEST STARTS WITH DMA MAP #1 AND DOES A ONE WORD * DMA TRANSFER. THE TRANSFER IS THEN VERIFIED BY CHECKING * FIVE MAPS (0,1,2,4,8), ASSURING IT WAS WRITTEN INTO ONLY * ITS RESPECTIVE MAP SPACE. SIMILARLY MAPS 2,4, AND 8 ARE * TESTED. THIS ALLOWS TESTING OF ALL FOUR MAP CONTROL LINES. * * ****************************************************************  **** * * * * G00 EQU $ SBIT 6,S SET EXTENDED ADRESSING BUF0 EQU :7FFF SET BUFFER ADDRESS USRNMB WORD 1 SET INITIAL USER NUMBER DMANMB WORD 1 SET INITIAL DMA NUMBER RBIT 10,S SET SYSTEM MODE COPY =:D007,X DISPLAY TEST NUMBER SELP X,4 AND DMA MAP UNDER TEST COPY =0,A IN :50,A CHECK FOR I/O MODULE RESPONSE CLSN =:AF,A JNE A,$+3 IF PRESENT CONTINUE JMP *$+1 IF NOT GO TO NEXT TEST WORD CACHE OUT A,:04 RESET MMU COPY =1,A OUT A,5 ENABLE TRANSLATION TABLE ACESS SET1UP EQU $ SET UP SYSTEM MAP COPY =:FC00,X STARTING TRANSLATION TABLE ADDRES COPY =:FC40,Y UPPER MAP LIMIT COPY =:3000,A CODE FOR READ/WRITE/FETCH SET2UP EQU $ COPY A,0(X) FILL TABLE ADD =1,A ADD =1,X CSK X,Y JMP SET2UP CONTINUE UNTIL DONE NOP SET3UP EQU $ SET UP MAP #1 COPY =:FC40,X COPY =:FC7F,Y COPY =:3000,A SET4UP EQU $ COPY A,0(X) ADD =1,A ADD =1,X CSK X,Y JMP SET4UP CONTINUE UNTIL DONE NOP SET5UP EQU $ SET UP MAP #2 COPY =:FC80,X COPY =:FCBF,Y COPY =:3000,A SET6UP EQU $ COPY A,0(X) ADD =1,A ADD =1,X CSK X,Y JMP SET6UP CONTINUE UNTIL DONE NOP SET7UP EQU $ SET UP MAP #4 COPY =:FD00,X COPY =:FD3F,Y COPY =:3000,A SET8UP EQU $ COPY A,0(X) ADD =1,X ADD =1,A CSK X,Y JMP SET8UP CONTINUE UNTIL DONE NOP SET9UP EQU $ SET UP MAP #8 COPY =:FE00,X COPY =:FE3F,Y COPY =:3000,A SETAUP EQU $ COPY A,0(X) ADD =1,X ADD =1,A CSK X,Y JMP SETAUP CONTINUE UNTIL DONE NOP OVERWRITE MAP FOR SPECIFIC TRANSLATION COPY =:303B,A SET TRANSLATION ADDRESS = EFFF COPY A,:FC5F PUT IN 32K PAGE POINTER OF MAP 1 COPY =:303C,A SET TRANSLATION ADDRESS = F000 COPY A,:FC9F PUT IN 32K PAGE POINTER OF MAP 2 COPY =:303D,A SET TRANSLATION ADDRESS = F400 COPY A,:FD1F PUT IN 32K PAGE POINTER OF MAP 4 COPY =:303E,A SET TRANSLATION ADDRESS = F800 COPY A,:FE1F PUT IN 32K PAGE POINTER OF MAP 8 OUT A,4 DISABLE TABLE ACESS BIT AND RESET MMU COPY =2,A ENABLE TRANSLATION TABLE OUT A,5 RBIT 10,S SET SYSTEM MODE JMP G05 JUMP OVER LPOOL LPOOL G05 COPY =0,A LOAD ALL BUFFER LOCATIONS WITH ZERO COPY A,:7FFF MAP0 BUFFER LOCATION COPY A,:EFFF MAP1 BUFFER LOCATION COPY A,:F3FF MAP2 BUFFER LOCATION COPY A,:F7FF MAP4 BUFFER LOCATION COPY A,:FBFF MAP8 BUFFER LOCATION COPY USRNMB,Q SET UP DISPLAY FOR CURRENT SHIFT Q,L,8 MAP NUMBER OR =:D007,Q SELP Q,4 OUTPUT TO DATA REGISTER * * COPY =:62,X SET X REGISTER FOR INTERRUPT LOCATION LOADING SELP A,DA0B;FC6 INITIALIZE IO MODULE SBIT 8,S ENABLE INTERRUPTS COPY =G10,A SET DMA INTERRUPT LOCATION COPY A,1(X) COPY INTO LOCATION :63 COPY PTAA55,A STORE DMA WORD TO BE TRANSFERRED OUT A,DA15;FC0 PUT INTO DMA REGISTER COPY =1,A SET DMA WRITE MODE OUT A,DA0C;FC2 COPY =BUF0,Y ADDRESS OF DMA BUFFER OUT Y,DA0C;FC1 COPY USRNMB,X OUT X,:06 SET USER NUMBER COPY DMANMB,Q OUT Q,:07 SET DMA NUMBER * * COPY =0,A SELP A,DA0C;FC2 START DMA NOP NOP HLT DMA EOB INTERRUPT NOT RECIEVED JMP G20 ERROR EXIT G10 EQU $ ENT IN DA0C;FC2,A GET DMA STATUS WORD AND =7,A MASK OFF UNWANTED BITS JEQ A,$+2 HLT --ERROR--DMA FAILED--AREG = DMA ERROR STATUS AS FOLLOWS * BIT0 = NO SACK 10 USEC AFTER STOP * BIT1 = NO MACK 10 USEC AFTER STOP * BIT2 = NO DMA PRIORITY IN * * SBIT 10,S SET USER MODE TO RETRIEVE DATA COPY BUF0,A COPY CONTENTS OF BUFFER INTO A REGISTER COPY =0,Q RBIT 10,S SET SYSTEM MODE CSK A,PTAA55 COMPARE   CONTENTS WITH EXPECTED VALUE NOP HLT ERROR DMA WORD DOES NOT EQUAL EXPECTED WORD * EXPECTED = AA55 *  ACTUAL = A REGISTER * DMA MAP # = X REGISTER * BUFFER LOCATIONS *  MAP0 = :7FFF * MAP1 = :EFFF * MAP2 = :F3FF * MAP4 = :F7FF *  MAP8 = :FBFF CSK A,:00 COMPARE VALUE TO MAP0 NOP IF IT DOESN'T COPMARE GO TO NEXT JMP $+2 MAP COPY =:8000,Q IF IT DOES PUT 8000 IN QREG CSK A,:EFFF COPMARE TO MAP1. IF NO MATCH NOP GO TO NEXT MAP. IF MATCH OCCURS ADD JMP $+2 MAP NUMBER TO THE Q REGISTER ADD =1,Q CSK A,:F3FF COMPARE TO MAP2. NOP JMP $+2 ADD =2,Q IF MATCH ADD MAP NUMBER CSK A,:F7FF COMPARE TO MAP4 NOP JMP $+2 ADD =4,Q IF MATCH ADD MAP NUMBER CSK A,:FBFF COMPARE TO MAP8 NOP JMP $+2 ADD =8,Q IF MATCH ADD MAP NUMBER COPY DMANMB,X CSK Q,DMANMB COMPARE MAP NUMBER WHERE DATA NOP SHOULD BE TO MAP NUMBER WHERE DATA WAS FOUND HLT ERROR - DATA FOUND IN MAPS OTHER THAN * THE MAP DESIGNATED BY THE MAP NUMBER * MAP EXPECTED--X REGISTER * MAPS WHERE DATA FOUND--Q REGISTER * BUFFER LOCATIONS * MAP0 = :7FFF * MAP1 = :EFFF * MAP2 = :F3FF * MAP4 = :F7FF * MAP8 = :F8FF COPY USRNMB,Q COPY =0,A MUL =2,AQ COPY Q,USRNMB SET UP TO CHECK MAPS 1,2,4,8 COPY Q,DMANMB SUB =8,Q JLE Q,G30 CONTINUE UNTIL DONE G20 JMP G00 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP RBIT 6,S RESET EXTENDED ADRESS BIT RBIT 10,S SET SYSTEM MODE COPY =1,A COPY A,USRNMB RETURN USER NUMBER TO INITIAL VALUE COPY A,DMANMB SAME FOR DMA NUMBER JMP CACHE JUMP TO NEXT TEST G30 JMP G05 TO ELIMINATE RANGE ERRORS SAVE LPOOL * * TITL CACHE TESTS --- CBIT TEST (CACHE HITS ENABLE) * * THIS CODE TESTS THE INTEGRITY OF THE CACHE LOGIC * ON THE MEMORY MANAGEMENT UNIT. * THIS TEST MUST RESIDE IN THE LOWER 16K OF PHYSICAL * MEMORY IN ORDER TO OPERATE PROPERLY. MAPPING IS DISABLED. * CACHE EQU $ JST CHKMAP CHECK 4 OR 16 MAP COPY MAPTYPE,A JNE A,$+2 DO CACHE TEST IF 16 MAP JMP PART6ST DON'T DO CACHE TEST IF 4 MAP COPY DEMAND,A AND =:100,A JGT A,$+2 JMP PART6ST OUT A,4 RESET MMU COPY =8,A SELP A,4 COPY =MEMTRAP,A COPY A,UNMEM1+2 COPY =0,A COPY A,IDPCNT SET UP LOOP COUNTER PART5D COPY =0,A COPY A,PCOUNT * THIS TEST CHECKS TO SEE THAT THE CBIT * (CACHE ENABLE) FUNCTIONS PROPERLY. * 1) NO HIT SHOULD OCCUR WHEN C=0 AND R=0. * 2) WITH C=1, HIT SHOULD OCCUR ONLY AFTER * SECOND READ OF LOCATION. * 3) NO HIT SHOULD OCCUR ON FIRST READ TO *  LOCATION+:400 (1024). * 4) HIT SHOULD OCCUR ON SECOND READ TO * LOCATION+:400. * 5) HIT SHOULD NOT OCCUR ON NEXT READ TO * LOCATION. * 6) IN STEPS 2) THRU 5) , THE CACHE IS * CHECKED FOR PARITY ERRORS. CBIT EQU $ JST CACHECLR OUT A,4 RESET MMU COPY $,A READ THIS LOCATION TWICE(AS INST & DATA) IN 5,A CHECK FOR A HIT (R=0,C=0) TBIT 5,A TEST HIT BIT JF OV,CBIT1 ERROR: HITS,ARE,INDICATED,WHEN,CACHE,IS,OFF * HALTS HERE IF MMU CACHE SWITCH IS FORCED ON. * BE SURE MMU CACHE SWITCH IS IN CENTER POSITION. IN 7,Q RESET HBIT CBIT1 COPY =8,A ENABLE CACHE OUT  A,5 COPY CBDATA,A TEST CACHE BIT WHEN ON IN 5,A HIT? TBIT 5,A JF OV,$+2 ERROR: HIT,INDICATED,ON,FIRST,READ,TO,A,LOCATION TBIT 6,A TEST CACHE PARITY JF OV,CBIT2 BAD PARITY? ERROR: BAD,PARITY,ON,CACHE CBIT2 IN 7,Q RESET FLAGS COPY CBDATA,A TEST SECOND READ OF CBDATA IN 5,A HIT? TBIT 5,A JT OV,$+2 ERROR: HIT,SHOULD,BE,INDICATED,ON,SECOND,READ * HALTS HERE IF MMU CACHE SWITCH IS FORCED OFF. * BE SURE MMU CACHE SWITCH IS IN CENTER POSITION. TBIT 6,A TEST CACHE PARITY JF OV,CBIT3 ERROR: BAD,PARITY,IN,CACHE CBIT3 IN 7,Q RESET FLAGS COPY CBDATA+:400,A TEST CACHE HIT FOR CBDATA+:400 IN 5,A HIT? TBIT 5,A JF OV,$+2 ERROR: HIT,INDICATED,ON,FIRST,READ,TO,A,LOCATION TBIT 6,A BAD PARITY? JF OV,CBIT4 ERROR: BAD,PARITY,ON,CACHE CBIT4 IN 7,Q RESET FLAGS COPY CBDATA,A READ CBDATA AGAIN IN 5,A HIT? TBIT 5,A JF OV,$+2 ERROR: CACHE,DOES,NOT,UPDATE,CORRECTLY,ON,READS TBIT 6,A CACHE PARITY ERROR? JF OV,CBIT5 ERROR: BAD,PARITY,ON,CACHE CBIT5 OUT A,4 RESET MMU OUT A,4 2ND RESET TO INSURE NEXT MEMORY REFERENCE DOES NOT CACHE ***** PATCH FOR LOOPING ***** JMP CBIT ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=1 NOP ERROR: PCOUNT,SHOULD,=1 TITL CACHE TESTS -- RBIT TEST (RESTRICTED CACHE HITS ENABLE) * RBIT TEST (RESTRICTED CACHE HITS ENABLE) * * THIS TEST CHECKS TO SEE THAT THE RBIT PREFORMS AS SPECIFIED. * THE FOLLOWING IS DONE: * 1) RBIT IN CONTROL REGISTER IS CHECKED * 2) 1K WORDS BELOW 16K (PHYSICAL) IS READ TWICE. * 3) HBIT CHECKED AFTER SECOND READ OF EACH WORD. * 4) 1K WORDS ABOVE 16K IS READ TWICE. * 5) HBIT CHECKED AFTER SECOND READ FOR PROPER SETTING. * RBIT0 EQU $ COPY =:18,A OUT A,5 ENABLE RESTRICTED CACHE HITS COPY =0,A CLEAR AREG IN 5,A GET CONTROL REGISTER TBIT 4,A RBIT SET? JT OV,$+2 ERROR: RESTRICTED,CACHE,HITS,ENABLE,BIT,DID,NOT,SET JST CACHECLR COPY =:3FF,Y COUNTER FOR 1K READS COPY 0(Y),A READ MEMORY BELOW 16K JNED Y,$-1 COPY =:3FF,Y SET UP FOR SECOND READ RBIT COPY 0(Y),A READ BELOW 16K AGAIN IN 5,A GET CONTROL & STATUS REGISTER TBIT 5,A HIT? JF OV,RBIT1 ERROR: CACHE,DOES,NOT,RESTRICT,BELOW,16K IN 7,Q READ FAULT REG. TO CLEAR FLAGS RBIT1 JNED Y,RBIT COPY =:3FF,Y SET COUNTER FOR 1K READS COPY =:5000,X ANY LOCATION ABOVE 16K RBIT2 COPY 0(X),A READ MEMORY ABOVE 16K IN 5,A INPUT CONTROL REGISTER TBIT 5,A HIT? JF OV,RBIT3 ERROR: HIT,OCCURRED,ON,FIRST,READ,AT,LOC,IN,XREG IN 7,Q READ FAULT REG. TO CLEAR FLAGS RBIT3 ADD =1,X INCREMENT POINTER JNED Y,RBIT2 COPY =:3FF,Y SET COUNTER FOR 1K READS COPY =:5000,X POINT TO FIRST LOC OF BLOCK RBIT4 COPY 0(X),A READ MEMORY ABOVE 16K (SECOND TIME) IN 5,A GET CONTROL REGISTER TBIT 5,A HIT? JT OV,RBIT5 ERROR: HIT,BIT,SHOULD,SET,ON,SECOND,READ * HALTS HERE IF MMU CACHE SWITCH IS FORCED OFF. * BE SURE MMU CACHE SWITCH IS IN CENTER POSITION. IN 7,Q READ FAULT REG. TO CLEAR FLAGS RBIT5 ADD =1,X INCREMENT POINTER JNED Y,RBIT4 OUT A,4 ***** PATCH FOR LOOPING ***** JMP RBIT0 ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=2 NOP ERROR: PCOUNT,SHOULD,=2 JMP UPDATE CBDATA WORD 0 LPOOL * * SUBROUTINE TO CLEAR THE CACHE OF DATA THAT MAY AFFECT * THE OPERATION OF THE TESTS WITHIN THE CACHE DIAGNOSTIC. * CACHECLR ENT COPY =:18,A ENABLE RESTRICTED CACHE HITS OUT A,5 COPY =:6000,X MUST READ 1K WORDS OTHER  THAN TEST AREAS COPY =:6400,Y TO CLEAR CACHE. CCLR1 COPY 0(X),A READ FROM 1K AREA ADD =1,X CSK X,Y JMP CCLR1 NOP IN 7,A CLEAR ALL FAULT FLAGS JMP *CACHECLR TITL CACHE TESTS --- UPDATE & HIT RULES TESTING * * THIS SECTION TESTS TO SEE THAT THE CACHE DOES NOT UPDATE * AND WILL NOT HAVE A HIT IF THE DATA HAS BEEN * PREVIOUSLY STORED AS AN ENTRY IN THE CACHE. * THE FOLLOWING CONDITIONS ARE CHECKED HERE: * 1) BYTE READ AND BYTE WRITE * 2) TRANSLATION TABLE ACCESS * 3) ACCESS FAULT * 4) ECC READ * 5) ECC WRITE * UPDATE EQU $ * * TEST BYTE READ FOR UPDATE AND HITS * JST CACHECLR COPY =:18,A ENABLE THE CACHE OUT A,5 COPY BYDATA,X GET WORD ADDRESS SHIFT X,LO,1 CHANGE TO BYTE ADDRESS SBIT BM,S SET BYTE MODE COPYB 0(X),Q READ A BYTE RBIT BM,S RESET BYTE MODE IN 5,Q TEST FOR HIT TBIT 5,Q JF OV,$+2 ERROR: HIT,INDICATED,DURING,1ST,BYTE,READ TBIT 6,Q JF OV,$+2 CACHE PARITY ERROR? ERROR: CACHE,PARITY,ERROR,DURING,FIRST,BYTE,READ OUT A,4 RESET MMU, CLEAR FLAGS OUT A,5 RE-ENABLE CACHE SBIT BM,S SET BYTE MODE COPYB 0(X),Q READ 2ND TIME RBIT BM,S RESET BYTE MODE IN 5,Q TEST FOR HIT TBIT 5,Q JF OV,$+2 ERROR: HIT,INDICATED,DURING,SECOND,BYTE,READ TBIT 6,Q CACHE PARITY ERROR? JF OV,$+2 ERROR: CACHE,PARITY,ERROR,DURING,SECOND,BYTE,READ OUT A,4 RESET MMU * * TEST BYTE WIRTE FOR MARKED AS INVALID ENTRY AND NO HIT * JST CACHECLR CLEAR THE CACHE COPY =:18,A ENABLE THE CAHCE OUT A,5 COPY BYDATA,X GET WORD ADDRESS COPY 0(X),Q READ A WORD TO UPDATE CACHE IN 7,Q READ FAULT ADDRESS TO CLEAR FLAGS SHIFT X,LO,1 CHANGE TO BYTE ADDRESS SBIT 2,S SET BYTE MODE COPYB Q,0(X) WRITE A BYTE, SHOULD MARKED INVALID RBIT 2,S RESET BYTE MODE IN 5,Q READ STATUS TBIT 5,Q TEST HIT BIT JF OV,$+3 HLT BYTE WRITE SHOULD HAVE NO HIT JMP ABTBYTE ABORT BYTE WRITE TEST TBIT 6,Q TEST CACHE PARITY JF OV,$+3  HLT PARITY ERROR JMP ABTBYTE ABORT BYTE WRITE TEST IN 7,Q READ FAULT ADDR. TO CLEAR FLAGS SBIT 2,S SET BYTE MODE COPYB 0(X),Q READ A BYTE FROM OLD PLACE RBIT 2,S RESET BYTE MODE IN 5,Q READ STATUS TBIT 5,Q TEST HIT BIT JF OV,$+3 HLT BYTE WRITE SHOULD HAVE NO HIT JMP ABTBYTE ABORT BYTE WRITE TEST TBIT 6,Q TEST PARITY ERROR JF OV,$+2 HLT PARITY ERROR ABTBYTE OUT A,4 RESET MMU ***** PATCH FOR LOOPING ***** JMP UPDATE ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=3 NOP ERROR: PCOUNT,SHOULD,=3 JMP UPDATE1 GO DO ACCESS FAULT TEST BYDATA WORD :6401 LPOOL TITL * * TEST ACCESS FAULT FOR UPDATE AND HITS * UPDATE1 EQU $ JST CACHECLR COPY =:FC00,X POINT TO TRANSLATION TABLE (SYSTEM) COPY =:FC40,Y POINT TO USER#1 TABLE SPACE COPY =:3000,A CODE FOR READ/WRITE/FETCH COPY =:19,Q TABLE ACCESS OUT Q,5 ENABLE UPDATE1A COPY A,0(X) ADD =1,A ADD =1,X CSK X,Y JMP UPDATE1A NOP COPY =:FC3A,X POINT TO PAGE NOT TO BE MAPPED COPY =:3A,A CODE FOR NOT MAPPED COPY A,0(X) PUT INTO TABLE COPY =:E800,X GET ADDRESS POINTER TO NOT-MAPPED PAGE COPY DATA2,A GET JMP INDIRECT COPY A,1(X) STORE IN PAGE COPY =$+8,A SET UP FOR FAULT ON READ/FETCH COPY A,2(X) COPY =$+7,A COPY A,LPFCH+1 STORE P FOR RETURN FROM FETCH COPY =:E801,A COPY A,LPFCH STORE P OF FETCH COPY =:1A,A ENABLE TRANSLATION & CACHE OUT A,5 JMP 1(X) FIRST READ/FETCH NOP NEEDED FOR TRAP HANDLING IN 5,A GET ST  ATUS SST 4 ACCESS ERROR? ERROR: SHOULD,TRAP,-,PAGE,IS,NOT,MAPPED TBIT 5,A YES, WAS THERE A CACHE HIT? JF OV,$+2 ERROR: HIT,INDICATED,DURING,FIRST,ACCESS,FAULT IN 7,Q CLEAR FAULT FLAGS COPY =:18,A OUT A,5 TURN OFF TRANSLATION, KEEP CACHE ON COPY =$+8,A COPY A,2(X) COPY =:1A,A OUT A,5 RE-ENABLE TRANSLATION & CACHE COPY =$+5,A COPY A,LPFCH+1 STORE P FOR RETURN FROM FETCH COPY =:E801,A COPY A,LPFCH STORE P OF FETCH JMP 1(X) SECOND TRY NOP IN 5,A GET STATUS SST 4 ACCESS ERROR? ERROR: SHOULD,TRAP,-,PAGE,IS,NOT,MAPPED TBIT 5,A YES, ANY HITS? JF OV,$+3 ERROR: HIT,INDICATED,DURING,SECOND,ACCESS,FAULT IN 7,Q CLEAR FAULT FLAGS OUT A,4 RESET MMU GLPOL: ***** PATCH FOR LOOPING ***** JMP UPDATE1 ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=4 NOP ERROR: PCOUNT,SHOULD,=4 TITL * * TEST TRANSLATION TABLE ACCESS (READ) * FOR UPDATE AND HITS * UPDATE2 EQU $ JST CACHECLR COPY =:FC00,X GET POINTER TO START OF TABLE COPY =:19,A ENABLE CACHE & TABLE ACCESS OUT A,5 COPY 0(X),Q READ FROM TABLE IN 5,Q TBIT 5,Q HIT? JF OV,$+3 ERROR: HIT,INDICATED,DURING,1ST,TABLE,ACCESS (READ) IN 7,A CLEAR FAULT FLAGS TBIT 6,Q CACHE PARITY ERROR? JF OV,$+3 ERROR: CACHE,PARITY,ERROR,DURING,1ST,TABLE,ACCESS,(READ) IN 7,A CLEAR FAULT FLAGS COPY 0(X),Q TRY 2ND READ IN 5,Q GET STATUS TBIT 5,Q HIT? JF OV,$+3 ERROR: HIT,INDICATED,DURING,2ND,TABLE,ACCESS,(READ) IN 7,A CLEAR FAULT FLAGS TBIT 6,Q CACHE PARITY ERROR? JF OV,$+3 ERROR: CACHE,PARITY,ERROR,DURING,2ND,TABLE,ACCESS,(READ) IN 7,A CLEAR FAULT FLAGS OUT A,4 RESET MMU ***** PATCH FOR LOOPING ***** JMP UPDATE2 ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=5 NOP ERROR: PCOUNT,SHOULD,=5 TITL * * TEST TRANSLATION TABLE ACCESS (WRITE) * FOR UPDATE AND HITS * UPDATE3 EQU $ JST CACHECLR COPY =:19,A OUT A,5 ENABLE CACHE & TABLE ACCESS COPY =:FFFF,X POINT TO LAST LOCATION IN TABLE COPY =0,Q CLEAR QREG COPY Q,0(X) TRY FIRST WRITE IN 5,Q GET STATUS TBIT 5,Q HIT? JF OV,$+3 ERROR: HIT,INDICATED,DURING,1ST,TABLE,ACCESS,(WRITE) IN 7,A CLEAR FLAGS TBIT 6,Q CACHE PARITY ERROR? JF OV,$+3 ERROR: CACHE,PARITY,ERROR,DURING,1ST,TABLE,ACCESS,(WRITE) IN 7,A CLEAR FLAGS COPY =0,Q CLEAR QREG COPY Q,0(X) TRY SECOND WRITE IN 5,Q GET STATUS TBIT 5,Q HIT? JF OV,$+3 ERROR: HIT,INDICATED,DURING,2ND,TABLE,ACCESS,(WRITE) IN 7,A CLEAR FLAGS TBIT 6,Q JF OV,$+2 CACHE PARITY ERROR? ERROR: CACHE,PARITY,ERROR,DURING,2ND,TABLE,ACCESS,(WRITE) OUT A,4 RESET MMU ***** PATCH FOR LOOPING ***** JMP UPDATE3 ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=6 NOP ERROR: PCOUNT,SHOULD,=6 TITL * TEST ECC READ FOR UPDATE AND HITS * UPDATE4 EQU $ JST CACHECLR COPY =:18,A ENABLE CACHE OUT A,5 COPY =UPDATA,X GET ADDRESS INTO XREG LODECC * TEST ECC READ IN 5,Q GET STATUS TBIT 5,Q HIT? JF OV,$+3 ERROR: HIT,INDICATED,DURING,FIRST,ECC,READ IN 7,A CLEAR FAULT FLAGS TBIT 6,Q CACHE PARITY ERROR? JF OV,$+3 ERROR: CACHE,PARITY,ERROR,DURING,FIRST,ECC,READ IN 7,A CLEAR FAULT FLAGS LODECC * 2ND ECC READ IN 5,Q GET STATUS TBIT 5,Q HIT? JF OV,$+3 ERROR: HIT,INDICATED,DURING,2ND,ECC,READ IN 7,A CLEAR FAULT FLAGS TBIT 6,Q CACHE PARITY ERROR? JF OV,$+3 ERROR: CACHE,PARITY,ERROR,DURING,2ND,ECC,READ IN 7,A CLEAR FAULT FLAGS COPY UPDATA,A READ THE TEST LOCATION IN 5,Q GET STATUS TBIT 5,Q  HIT? JF OV,$+3 ERROR: CACHE,UPDATED,DURING,ECC,READ IN 7,A CLEAR FAULT FLAGS TBIT 6,Q CACHE PARITY ERROR? JF OV,$+2 ERROR: CACHE,PARITY,ERROR,DURING,READ OUT A,4 RESET MMU ***** PATCH FOR LOOPING ***** JMP UPDATE4 ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=7 NOP ERROR: PCOUNT,SHOULD,=7 GLPOL: TITL * * TEST ECC WRITE FOR UPDATE * UPDATE5 EQU $ JST CACHECLR COPY =:18,Q OUT Q,5 ENABLE CACHE COPY =UPDATA,X GET ADDRESS COPY =:0E,A ECC FOR :E652 STRECC * STORE ECC IN 5,Q GET STATUS  TBIT 5,Q HIT? JF OV,$+3 ERROR: CACHE,UPDATED,DURING,ECC,WRITE IN 7,Y CLEAR FAULT FLAGS TBIT 6,Q CACHE PARITY ERROR JF OV,$+3 ERROR: CACHE,PARITY,ERROR IN 7,Y CLEAR FAULT FLAGS STRECC * 2ND TRY IN 5,Q GET STATUS TBIT 5,Q HIT? JF OV,$+3 ERROR: CACHE UPDATED DURING 2ND ECC WRITE IN 7,Y CLEAR FAULT FLAGS TBIT 6,Q JF OV,$+2 ERROR: CACHE PARITY ERROR OUT A,4 RESET MMU COPY UPDATA+1,A RESTORE UPDATA COPY A,UPDATA ***** PATCH FOR LOOPING ***** JMP UPDATE5 ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=8 NOP ERROR: PCOUNT,SHOULD,=8 JMP UPDATE6 UPDATA RES 2,:F652 UPDATE6 IMS IDPCNT COPY IDPCNT,A CSK A,=32 JMP PART5D NOP * * * THE MEMORY EXCEPTION TRAP IS RESTORED HERE * TO ITS ORIGINAL CONFIGURATION. * PART5E COPY =UMT1,A COPY A,UNMEM1+2 * * JMP PART6ST LPOOL RES $;:1F-$&:1F+1,0 PART6ST SET $ SAVE END +2 ERROR: CACHE PARITY ERROR OUT A,4 RESET MMU COPY UPDATA+1,A RESTORE UPDATA COPY A,UPDATA ***** PATCH FOR LOOPING ***** JMP UPDATE5 ORG $-1 NOP IMS PCOUNT COPY PCOUNT, TITL PAT495P6 USER SPACE/PRIV. OPERATION TRAP TEST 84-93814-16 TITL COPY TO/FROM USER SPACE (STRU/LODU) NAM PRIV  MACHINE =:20 ORG PART6ST PRIV EQU $ COPY DEMAND,A FETCH TEST SELECTION AND =:200,A TEST BIT 9 JNE A,$+2 IF SET, EXECUTE TEST JMP PART7ST OUT A,4 RESET MMU COPY =9,A TEST RUN INDICATOR SELP A,4 OUTPUT TO CONSOLE COPY =0,A COPY A,IDPCNT SET UP LOOP COUNTER PART6A COPY =0,A COPY A,PCOUNT SET UP TEST COUNTER USERSP COPY =1,A ENABLE TABLE ACCESS OUT A,5 COPY =:FC00,X INITIALIZE TRANS. TABLE INDEX (SYSTEM MAP) COPY =:FC40,Y INITIALIZE TRANS. TABLE INDEX (USER MAP 1) COPY =:3000,A INITIALIZE DATA (READ,WRITE) USERSP0 COPY A,0(X) WRITE TO TRANSLATE TABLE COPY A,0(Y) ADD =1,A INCREMENT DATA ADD =1,X INCREMENT SYSTEM MAP INDEX ADD =1,Y INCREMENT USER MAP 1 INDEX COPY X,Q INDEX TO Q CSK Q,=:FC20 END OF FIRST AND THIRD 32 WORDS? NOP JMP USERSP0 NO,CONTINUE COPY =:3040,A RE-INITIALIZE DATA (READ WRITE FETCH) USERSP1 COPY A,0(X) WRITE DATA TO TRANSLAT TABLE ADD =1,A INCREMENT DATA ADD =1,X INCREMENT INDEX COPY X,Q INDEX TO Q CSK Q,=:FC40 END OF SECOND 32 WORDS? NOP JMP USERSP1 NO, CONTINUE USERSP2 COPY A,0(Y) WRITE DATA ADD =1,A INCREMENT DATA ADD =1,Y INCREMENT INDEX COPY Y,Q INDEX TO Q CSK Q,=:FC80 END OF FOURTH 32 WORDS? NOP JMP USERSP2 NO, CONTINUE IN 7,A CLEAR PARITY ERROR COPY =2,A OUT A,5 ENABLE TRANSLATION, DISABLE TABLE ACCESS USERSP3 EQU $ COPYU STRU,:3333,:7FFF,0 COPYU LODU,:CCCC,:7FFF,0 COPYU LODU,0,$+10,0 TITL * COPY FROM USER #1 SPACE COPY =:7FFF,X COPY =1,Q COPY =:CCCC,A OUT Q,6 SET USER NUMBER LODU CSK A,0(X) NOP HLT LODU DID NOT WORK, A SOULD = :3333 * GLPOL: * * PATCH FOR LOOPING * JMP USERSP ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK  A,=1 NOP ERROR: PCOUNT,SHOULD,=1 TITL PRIVILEGED OPERATION TRAP TEST * * PRIOR TO THIS TEST, ALL PRIVILEGED INSTRUCTIONS AND INSTRUCTIONS * THAT MODIFY PRIVILEGED BITS IN S HAVE BEEN TESTED. THUS CONFIDENCE * HAS BEEN OBTAINED IN THE INSTRUCTIONS ABILITY TO EXECUTE PROPERLY. * THE FOLLOWING TEST MAKES SURE THAT THE PRIVILEGED OPERATION TRAP * IS INVOKED WHENEVER ANY OF THESE INSTRUCTIONS ARE EXECUTED WITH * THE UP-BIT (USER PROTECT) SET IN THE STATUS REGISTER. * * SCNTX .......SAVE CONTEXT * LCNTX..........LOAD CONTEXT * STRU...........STORE TO USER SPACE * LODU...........LOAD FROM USER SPACE *  STRECC.........STORE ERROR CORRECTION CODE * LODECC.........LOAD ERROR CORRECTION CODE * UIS............UPDATE INTERRUPT STATUS * HLT............HALT INSTRUCTION * ANY I/O INSTRUCTION * ANY CONSOLE INSTRUCTION * REG-TO-REG INSTRUCTIONS THAT MODIFY SREG * BIT CHANGE INSTRUCTIONS THAT MODIFY SREG * TITL PRIVTST COPY =PRIVTRP,A GET ADDRESS OF TEMP PRIV TRAP COPY A,PPIT+3 STORE INTO TRAP VECTOR COPY =USERTRP,A GET ADDRESS OF TEMP USER TRAP COPY A,UTRAP4 STORE INTO TRAP VECTOR * * THE FOLLOWING MAKES SURE THE TRAPS ARE SET * UP PROPERLY BEFORE THE PRIVILEGED OPERATION * TRAP IS TESTED. * COPY =:F,A COPY A,PRIVTRP1 RESTORE TBIT INSTRUCTION COPY ADD1,A COPY A,PRIVTRP2 SETUP ADD INSTRUCTION COPY PRIV7,A COPY A,PRIVTRP3 SETUP COPY INSTRUCTION JMP PRIV1 TITL * * TEMPORARY PRIVILIGED OPERATION TRAP * PRIVTRP EQU $ WORD STATUS WORD STACKP RBIT UP,S TURN OFF USER PROTECT COPY =CONTXT,X POINT TO CONTEXT BLOCK COPY 8(X),A GET SIN-STATE REGISTER PRIVTRP1 TBIT 0,A TEST F0 JT OV,$+2 ERROR: SIN,STATE,REG,BIT,0,SHOULD,BE,SET * THE BIT IN QUESTION IS THAT SPECIFIED BY THE * 2ND NIBBLE OF PRIVTRP1 (TBIT ?,A) * PRIVTRP3 COPY =:950,A COPY A,2(X) RETURN WITH USER PROTECT ON * * COPY PPIT,A GET P PRIVTRPX COPY =PRIV3,A CONTENTS OF THIS LOATION MUST BE PUT INTO PRIV5 ORG $-1 PRIOR TO ASSEMBLY OR PATCHED ONTO PRIV5 AFTER ASSY. PRIVTRP2 ADD =1,A POINT PAST THE UTRAP INSTRUCTION COPY A,0(X) PUT IT INTO CONTEXT BLOCK * * LCNTX * * TEMPORARY USER TRAP ROUTINE * USERTRP EQU $ WORD STATUS WORD STACKP RBIT UP,S TURN OFF USER PROTECT COPY UTRAP1,A GET P * * AT THIS HALT--THE AREG CONTAINS THE ADDRESS OF THE INSTRUCTION * THAT SHOULD HAVE CAUSED A PRIVILEGED OPERATION TRAP, BUT DID * NOT DO SO... * ERROR: AREG,=,ADDRESS USERTRP1 ADD =0,A CHANGE TO P+1 COPY A,CONTXT LCNTX GLPOL: TITL * * SET UP TO TEST STRU/LODU INSTRUCTIONS * PRIV1 COPY =1,A OUT A,5 TURN ON TABLE ACCESS COPY =:FC40,X POINT TO ENTRIES FOR USER#1 COPY =:FC80,Y FIRST ENTRY FOR USER#2 COPY =:3000,A READ/WRITE/FETCH CODE PRIV1A COPY A,0(X) ADD =1,A ADD =1,X CSK X,Y JMP PRIV1A NOP COPY =:FC40,X COPY =1,A SET USER NUMBER OUT A,6 COPY =2,A TURN ON TRANSLATION OUT A,5 * SBIT UP,S TURN ON USER PROTECT FOR THESE TESTS * GLPOL: TITL * ***** TEST STRU INSTRUCTION ***** * COPY =PRIVTEMP,X GET ADDRESS OF TEMP CELL STRU UTRAP A,0 * ***** TEST LODU INSTRUCTION ***** * LODU UTRAP A,0 * ***** CHANGE USERTRAP1 TO ADD =1,A FOR SCNTX TEST ONLY * IMS USERTRP1 * ***** TEST SCNTX INSTRUCTION ***** * SCNTX USERTRP * ***** RESTORE USERTRP1 TO ADD =0,A * COPY =:0 B00,A COPY A,USERTRP1 * ***** TEST LCNTX INSTRUCTION ***** * COPY =PRIV2,A SET UP CONTEXT BLOCK FOR RETURN COPY A,CONTXT LCNTX PRIV2 UTRAP A,0 TITL * ***** TEST STRECC INSTRUCTION ***** * COPY =PRIVTEMP,X GET ADDRESS OF TEMP CELL COPY =0,A COPY A,0(X) WRITE INTO THAT LOCATION STRECC UTRAP A,0 * ***** TEST LODECC INSTRUCTION ***** * LODECC UTRAP A,0 * ***** TEST UIS INSTRUCTION ***** * UIS UTRAP A,0 * ***** TEST HALT INSTRUCTION ***** * HLT UTRAP A,0 * ***** TEST AN I/O INSTRUCTION ***** * OUT A,:F9 UTRAP A,0 * ***** TEST A CONSOLE INSTRUCTION ***** * IN 4,A UTRAP A,0 TITL SPACE 1 ***** MODIFY TRAP TO HANDLE F1 TYPE FAULTS COPY =:1F,A COPY A,PRIVTRP1 ***** TEST BIT CHANGE INSTRUCTUONS THAT MODIFY SREG ***** CBIT CI,S UTRAP A,0 SPACE 1 CBIT RI,S UTRAP A,0 SPACE 1 CBIT INT,S UTRAP A,0 SPACE 1 CBIT UP,S UTRAP A,0 SPACE 1 CBIT UM,S UTRAP A,0 SPACE 1  CBIT 9,S UTRAP A,0 SPACE 1 CBIT 12,S UTRAP A,0 SPACE 1 CBIT 13,S UTRAP A,0 SPACE 1 CBIT 14,S UTRAP A,0 SPACE 1 CBIT 15,S UTRAP A,0 SPACE 1 TITL SPACE 1 ***** MODIFY TRAP TO HANDLE F2 TYPE FAULTS ***** COPY =:2F,A COPY A,PRIVTRP1 COPY PRIV5,A COPY A,PRIVTRP2 COPY PRIV6,A COPY A,PRIVTRP3 * * TEST THE PROCESSORS ABILITY TO TRAP WHEN ANY INTERRUPT * IS LEFT PENDING FOR MORE THAN 64 MICRO-SECONDS. * COPY =0,A COPY A,PRIVCTR SET UP A COUNTER SIN 3 DISSALLOW INTERRUPTS IMS PRIVCTR SKIP IF NO TRAP & COUNT EXPIRES JMP $-2 ERROR: NO,TRAP,DURING,LONG,INTERRUPTS,PENDING PRIV3 EQU $ COPY =:F,A COPY A,PRIVTRP1 RESTORE TBIT INSTR. COPY ADD1,A COPY A,PRIVTRP2 RESTORE ADD INSTR. COPY =PPIT1,A COPY A,PPIT+3 RESTORE PRIVILEGED OP. TRAP COPY =SUTRAP,A COPY A,UTRAP4 RESTORE USER TRAP VECTOR COPY =:150,A RESTORE STATUS REGISTER COPY A,S OUT A,4 RESET MMU * GLPOL: * * PATCH FOR LOOPING * JMP PRIVTST ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=2 NOP ERROR: PCOUNT,SHOULD,=2 * * TITL SYSTEM STACK EXCEPTION TRAP TEST * * TO TEST THE SYSTEM STACK EXCEPTION TRAP, THE * FOLLOWING IS DONE: * 1) THE STACK IS SET UP FOR 14 ENTRIES * 2) LCNTX IS USED TO GET INTO SYSTEM MODE * 3) PUSH INSTRUCTION IS USED TO TEST TRAPPING. *  FIRST PUSH SHOULD NOT TRAP * SECOND PUSH SHOULD TRAP * JMP SYSTEM SYSTACK RES 14,0 SYSTEM EQU $ COPY =SYSTRAP,A GET ADDRESS OF TEMP. ROUTINE COPY A,:B7 STORE INTO TRAP VECTOR COPY =SYSTACK,A COPY A,L LOAD STACK LIMIT COPY =SYSTEM-7,A  COPY A,K LOAD STACK POINTER COPY A,Y COPY =SYSTEM1,A COPY A,0(Y) PUT P INTO CONTEXT BLOCK COPY STATSV,A COPY A,1(Y) PUT S INTO CONTEXT BLOCK COPY =0,X SET CONTEXT POINTER TO 0 FOR SYSTEM MODE LCNTX SYSCNT WORD 0 LPOOL SYSTEM1 EQU $ COPY =0,A COPY A,SYSCNT PUSH :0150 TRY 1ST PUSH, SHOULD NOT TRAP IMS SYSCNT PUSH :0150 TRY 2ND PUSH, SHOULD TRAP * * HERE IF NO TRAP ON 2ND PUSH * ERROR: SYSTEM,STACK,EXCEPTION,TRAP,FAILED,TO,TRAP JMP SYSTEM2 * * TEMPORARY SYSTEM STACK EXCEPTION TRAP ROUTINE * SYSTRAP EQU $ COPY =0,Q COPY SYSCNT,A CSN A,Q ERROR: SYSTEM,STACK,EXCEPTION,TRAPPED,ON,FIRST,PUSH * SYSTEM2 EQU $ COPY =SSET1,A COPY A,:B7 RESTORE SYSTEM TRAP VECTOR COPY =CONTXT,X RESTORE CONTEXT POINTER COPY =SYSTEM3,A COPY A,0(X) COPY STATSV,A COPY A,2(X) LCNTX LPOOL * * PATCH FOR LOOPING * SYSTEM3 EQU $ JMP SYSTEM ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A C SK A,=3 NOP ERROR: PCOUNT,SHOULD,=3 * * IMS IDPCNT COPY IDPCNT,A CSK A,=32 JMP PART6A NOP JMP PART7ST PRIVTEMP WORD 0 * WARNING -- CHANGES IN PROGRAM SOURCE WILL CHANGE THE * VALUE OF PRIV5, MAKE SURE BINARY OF PRIVTRP2 * IS THE SAME AS BINARY OF PRIV5..... PRIV5 WORD :8293 COPY =PRIV3,A INSTR. FOR LOCATION PRIVTRP2 PRIV7 WORD :8294 COPY =:950,A INSTR. FOR LOCATION :8294 PRIV6 COPY =0,A ADD1 ADD =1,A PRIVCTR WORD 0 LPOOL RES $;:1F-$&:1F+1,0 PART7ST SET $ SAVE END OR: PCOUNT,SHOULD,=3 * * IMS IDPCNT COPY IDPCNT,A CSK A,=32 JMP PART6A NOP JMP PART7ST PRIVTEMP WORD 0 * WARNING -- CHANGES IN PROGRAM SOURCE WILL CHANGE THE * VALUE OF PRIV5, MAKE SURE BINARY OF PRIVTRP2  TITL PAT495P8 -- LOOP ROUTINE & MOVE ROUTINE & AUTOLOAD TEST 84-93814-18 TITL LOOP ROUTINE NAM PARTX NAM MOVE NAM ALT NAM ALTRTN NAM ALTBUF ABS LENGTH WORD PATEND WORD MOVE MACHINE =:20 ORG PART8ST ****** * * LOOP ROUTINE AND 32 BIT PASS COUNTER * ****** PARTX EQU $ IMS COUNT1 JMP $+2  IMS COUNT2 NOP JMP *$+1 LOOP TO BEGINNING OF PAT495 WORD A02000 * RES $;:1F-$&:1F+1,0 TITL PAT495 MEMORY MOVE ROUTINE * ENTER WITH: * Q REGISTER = "FROM" WORD ADDRESS *  X REGISTER = "TO" WORD ADDRESS * A REGISTER = POSITIVE WORD LENGTH * MOVE EQU $ COPY Q,FROM SAVE FROM ADDRESS COPY X,TO SAVE TO ADDRESS COPY A,LEN SAVE COUNT MOVE2 MOVE * MOVE BLOCK OF CODE COPY FROM,X YES, RESET 'FROM' POINTER COPY TO,Y RESET 'TO' POINTER COPY LEN,Q RESET COUNT MOVE3 COPY 0(X),A GET A WORD SUB 0(Y),A SUBTRACT MOVED VALUE JNE A,MOVE5 ERROR IF NO MATCH MOVE4 ADD =1,X  BUMP FROM POINTER ADD =1,Y BUMP TO POINTER ADD =1,Q BUMP COUNT JNE Q,MOVE3 CONTINUE IF NOT DONE COPY GOOD,A SUCCESSFUL MOVE SELP A,4 OUTPUT TO CONSOLE DATA REGISTER HLT  SUCCESSFUL MOVE JMP $-1 MOVE5 COPY BAD,A UNSECCESSFUL MOVE SELP A,4 OUTPUT TO CONSOLE DATA REGISTER HLT ERROR HALT - INCORRECT DATA MOVED JMP MOVE4 CONTINUE TITL GOOD WORD :C000 BAD WORD :BAD FROM RES 1,0 FROM POINTER TO RES 1,0 TO POINTER LEN RES 1,0 WORD LENGTH (2'S COMPLEMENT) RES $;:3F-$&:3F+1,0 TITL AUTOLOAD TEST ******************************************************* * * ---------- AUTOLOAD TEST ---------- * * THIS TEST VERIFIES THAT THE AUTOLOAD PROGRAM * IS LOADED INTO MEMORY CORRECTLY. SINCE THIS TEST * REQUIRES OPERATOR INTERVENTION, IT CANNOT BE * RUN IN DEMAND OR DEFAULT MODE. IT MUST BE RUN * BY LOADING THE P REGISTER WITH THE ADDRESS OF * 'ALT' (OBTAINED FROM THE OS:LNK MEMORY MAP. * LOCATIONS 0-:100 WILL BE SAVED IN A BUFFER, * AND THE PROCESSOR WILL HALT AND DISPLAY A * :FFFF. THE OPERATOR SHOULD LEAVE THAT VALUE IN * THE CONSOLE DATA REGISTER, MAKE SURE THAT THE * SENSE SWITCH IS OFF, AND PRESS AUTOLOAD. THE *   AUTOLOAD PROGRAM WILL THEN LOAD ITSELF INTO LOW * MEMORY AND HALT. THE OPERATOR SHOULD THEN SET * P TO THE ADDRESS OF 'ALTRTN' AND PRESS RUN. * THE TEST WILL THEN EXCHANGE THE CONTENTS OF LOW * MEMORY AND THE BUFFER, RESULTING IN THE AUTOLOAD * PROGRAM IN THE BUFFER AND LOW MEMORY RESTORED * TO ITS ORIGINAL CONTENTS. THE CHECKSUM OF THE * AUTOLOAD PROGRAM INSTRUCTIONS WILL BE CALCULATED * AND COMPARED TO A KNOWN CHECKSUM (:FFFF). THE * TEST WILL HALT WITH A VALUE IN THE CONSOLE DATA * REGISTER. IF IT IS A :C000, THE TEST WAS SUCCESSFUL, * AND IF IT IS A :0BAD, THE TEST WAS UNSUCCESSFUL. * AT THIS POINT PRESSING RUN WILL CAUSE PAT TO * RESUME THE PREVIOUS TEST SEQUENCE WHICH WAS RUNNING. ******************************************************* TITL * * COPY LOCATIONS 0-:100 TO BUFFER AREA * ALT EQU $ S01000 EQU $ COPY =0,X INITIALIZE READ INDEX COPY =ALTBUF,Y INITIALIZE WRITE INDEX S01001 COPY 0(X),A READ MEMORY COPY A,0(Y) STORE IN BUFFER CSK X,=:FF END OF COPYING? JMP $+3 NO, CONTINUE  NOP JMP S01005 YES, EXIT ADD =1,X INCREMENT READ INDEX ADD =1,Y INCREMENT WRITE INDEX JMP S01001 LOOP TO CONTINUE * * HALT AND WAIT FOR OPERATOR TO PRESS AUTOLOAD * S01005 COPY =0,A  OUT A,0 RESET SENSE SWITCH COPY =:FFFF,A LOAD A WITH SIGNAL TO LOAD AUTOLOAD BUT NOT RUN SELP A,4  OUTPUT SIGNAL TO OPERATOR HLT TITL * * WHEN THE AUTOLOAD PROGRAM IS LOADED IN LOW MEMORY * THE OPERATOR SHOULD RESTART THE AUTOLOAD AT THIS * POINT. THIS ROUTINE WILL RESTORE THE ORIGINAL * CONTENTS OF LOCATIONS 0-:100 FROM THE BUFFER AND * MOVE THE AUTOLOAD PROGRAM TO THE BUFFER * ALTRTN EQU $ COPY =0,X COPY =ALTBUF,Y S01011 COPY 0(X),A READ AUTOLOAD PROGRAM COPY 0(Y),Q READ BUFFER COPY A,0(Y) WRITE AUTOLOAD PROG. INTO BUFFER COPY Q,0(X) RESTORE ORIGINAL CONTENTS OF 0-:7F CSK X,=:FF END OF COPY ? JMP $+3  NO, CONTINUE NOP JMP S01015 YES, EXIT ADD =1,X INCREMENT LOW MEMORY INDEX ADD =1,Y INCREMENT BUFFER INDEX JMP S01011 LOOP TO CONTINUE TITL * THIS ROUTINE WILL COMPUTE THE CHECKSUM OF THE * AUTOLOAD PROGRAM, WHICH IS IN THE BUFFER AREA * S01015 COPY =ALTBUF,X INITIALIZE BUFFER INDEX COPY =0,A CLEAR CHECSUM HOLDER COPY =BUFEND,Q ADDRESS OF END OF BUFFER S01016 ADD 0(X),A CSK X,Q END OF BUFFER ? JMP $+3 NOP JMP S01020 END OF BUFFER, EXIT ADD =1,X JMP S01016 LOOP TO CONTINUE S01020 COPY =:C000,Q DISPLAY FOR CORRECT RESULT CSK A,=:FFFF COMPARE COMPUTED AND KNOWN CHECKSUMS NOP COPY =:0BAD,Q DISPLAY FOR ERROR RESULT SELP Q,4 OUTPUT TO CONSOLE DATA REGISTER HLT JMP S01000 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP JMP *$+1 WORD A02000 BEGINNING OF PAT LPOOL RES $;:1F-$&:1F+1,0 ALTBUF RES :100,0 BUFFER FOR AUTOLOAD PROGRAM BUFEND EQ U $-1 PART9ST SET $ SAVE END LAY FOR CORRECT RESULT CSK A,=:FFFF COMPARE COMPUTED AND KNOWN CHECKSUMS NOP COPY =:0BAD,Q DISPLAY FOR ERROR RESULT SELP Q,4 OUTPUT TO CONSOLE DATA REGISTER HLT JMJDEFAULT PATEND PFERRS JPDNCT PUPCT COUNT2 JCOUNT1 O0SEGMENTBLANK oim MACRO (F200) @i *ie‡d " UUUUff fHgggP   @  zy <P  <P \EP \EP \E d ` ހPH މ~T\EH\5K\5 \5d+ ]\5O\5O\5S\5W [P;ޡ S ޚ2=M\Eޒ ς P\E3ggggJA02000 A01000 PAT495 O0SEGMENTBLANK oim MACRO (F200) @ivg  _`\IUUIQQQ,-ROg    * s Bg"" /0 .^2 +      IM       MT +I @  I `@` Ip@p I P@P I/0@0/  I @  W +A   A  IQA Q S R  RA SA )2 2A ^ +     j +/0 /@0  66B  @0/ 6B6  I@0/ b +I/0I/%0' 0/ o + /I0_  /0s +      6A k +/0 N1  .q  6A n` 6A b4 +f@/0c` *  I M0 qI +A D!   $a` d cgg +  "/0   /0   o +/0  /0  o +/0 v y /0n Aq  /0) Zh f +/0   w /0p Am  h/0 Ub ` + /0yxx /0 p☥A m /0 `b ` ++  / 0 % ' %!' l! +  /0%' p2 +U/0 % 't %' lJ + ޕ/0 %Ǐ' o\ +e ./0 y%'s qv +fUff{/0 e w%B't_ r +P)/0 Se%'bM q + ./ 0 w%'q o +i⭀/0 e%A'_ o +W)/0 Rf ’%'%K )%'D f +f /0%BC't  ./0%'g r + 0 )/0@ q + 0  i@/0 p& ++  ,/ ).%' U M mU lB +i U%@   %A %B '  c` +/0   ¤ʫ6A  /0 6A  /0iH ƕ%'` U +uTZ/J /0܄  IP H%!'M m +/0  ƺ} zys + I      f+ ƣ      f +  rzx `  f mk `  e +W]A[   KSK QAO   e8 +<)B@   )80.63 M fS +% 'ĸ  `    %' MU @ M Z|+ z%p'v   mm%h'g  a+f .xx%ЁB'   M j h  .`I%ѐ' UZ  MU ⓂQP %A'HJ  E+ )<%'   3 n,j))f %'$ Mf ^  + 0 )   0  i@  /0X3 ++ , 9<  A w@!6A    b  P`R 6A ` pPPr6A  P  p C0p3/0p  Lo +@M  E   `'` k +veUTww  P`V  pPv p p @  @ J   k  p { P  [ IP@[ O +p@p @p ` @` n ++ 0 /0)i p P`)i#  c K  6A r`Rmq  6A ` +N 6A NSM  6A .  6A  .K  6A @ +n ` 6A  n`  6A 6A  B 6A `: +@ @ fR IUN  6 NM 6  )s.  6A .  a 6A n`  6A n`  6A P +*O   6A O   6A U)/   @  6 /  @  6A O + o  @`  6A oL @`  6A O B  6 O#  6A P +UVfb/   @  6A / @   6A 33UFfj o @` 6A o  @`M 6 L  +O  6A  Oh   6A  xx/  @ u  6A / @  6A MT +‹O  6A  ̙/r  @  6A o  @` 6A U + /0I/0K  /00/ / 0I/0K /0 6A 6 /0V +I)C C  6A @" vI@ @M ) > N- i`6A b ++ ; [  ºK K 6A p +*  j`  6A l l k +8f-" Yf  3   k  +[DUwfUA  A  HT T M m * +)5A 5A   iu u ` k @ +/0VVB  0/  VBV  B  B  d ] ++ A     B o u +) "  b n  +i    R l  +)i 2  )  r  l  +{    Άsr B  m  +)g "   ^^ b  l  +iR   i H R  m  +)i> 2   i3 r  l  ++ I '  '  '  )i Gh GY _ 1 +g @`  '   6A )³ + i 6A \ V +)iG<   )n t f q + uj任"" DDiچsrg^ t  )ih? t j  +'   º}zy   p  +OKJGM t GM t  B  =< 6A   gM gM   g  6A R  ++ O v33  )݄0Pp    { ‹  @ lp     u { e C  + ]i) Gt@     )'  g c < +      VA     VA    6A V Ig M  VA Ig  VA  g  6A VA G  + '  - IgG   e  + IG   M  ' @   `‚G   g @`  ² G M F  +)0IG   M  p d  +@N/I*7 ig  iքCz) '  ΄C q@G  _ , +ĄC @A c G    @  Ap )g  ig R [ + G IG n n + # , ; 9 R [ e n {¢G }    o  +)h ig }   @`   _? iC  ' @   i CG   A  +  ͱ*,N C  IG  M  o  +C '  -  ) G M   hg 5 m  I # + "ńG    o 8 +  IGQA    @GA  QA   IG A   U d ) + ] 7@ H T c)Ԅ P p  {   Ä    w { Ϻ ) e)Pp 0 g g gIVIEA g    np#  i{  + @ @ABCDE pP/0C # ; 0À@ A/  B C D   E p  F) + @ABCDEp /0GC q   HABUN( A;  0t@q /@A B  C D  E ^ pY  > ) + ]JpI)iP` 0 Ec  /; 0  - `0 P* p% Y +?)0    x  O)0 [f   x OS ++ b . ..\5JIOT RTC UIT O0SEGMENTBLANK oim MACRO (F200) @ig 6i C ۀ/0 ؞6l)# #   +@ ǞtlĆ   @  a@¸֖   Am O HC@? +)( fF||\\U\e\ \\&&& &&-&    g CŸC )/0 UIޟTJ { OrW W    A WO G wuU `~]|     PNҞWKKO) OIG32ƿ ¿g66A ƶ /U ~|     q    ވR--} g F P @  ^/0) K ^)i #  Pc  ,+jt ALU jj B  "A b!@   a@` d I^A ^  p ^P Q P Q q 1 „!i@A ^ R~      0A w    ^0 ! A   !A 0; @ ހ ^/0l !A)1 Pp   //0/ p       N. ),  ^ !AnPmp     S 1 !/0H     @6 @/ p d a [   YS ^L   1 0 ] ^) 0 !eA g     eB KU ߀ \5ZE  ^/0y !"A) # 5    !6A A "  )•# A +# K N+-qI :?xU ^ ; !p "A) # 5    !6A A "NJ K )# K +-wK6 %e9 @ ^n t") # i+-yA) !   # UK  ^+-j!6A  A " Kz a ^5   ")# -+-y A)!    VDqpw# K  +- ^a! 6A A "NJK < ^ !"A   !6 A "A c ^ !"A   !6 A "A c Ee: ^/ 01 !       f ^/0! '  /     g8 5 ^/0΄!) ̄Pp       ^^ ^/0!P p t      ^  W[y} ^/0 !pPp C      a ] ^/0!QP p/G Fc    e  ^0 !     n ^0̄!     n ^0! /0   A m ^0!        i& ^0!     n8  #5 ^/0 )b  biba b   bA  c\ ^ bba b  bA @ dx  zSo ^ڄ  bra I C cUb    bA a@ k@`xvZ ^!  b Ja I C ;Ub6      b A / @ k@ @`xJ f ^0o )2 P  ) ?P   )O  U ކ~ޅ| \5JFLPT O0SEGMENTBLANK oim MACRO (F200) @i@g M)3/\E      &v&"L | . +g¥   M   ` V 6 XA VA &A \33@O >Hxx     l `i V  6 /A -A &A \G IQQ    E `B VA  6 A A &A \H I**  M   ` VA  6 A A &A \SH  {H %    ` VA  6 bA `A &A \.33O/4 R*Ixx  M  l `i V  6 9A 7A &A \WXY -ISS    G `D V  6 A A &A \|@} H++  M   ` V  6 A A &A \A H L    ` VA  6A bA `A &A \S33P ++  u ¢ss    g ` d 6A VA 3A 1A &A \G M ¢KK  M  ? `< 6  V A A &A \#H$' & I$$  M   ` 6A  VA A A &A \JHKO ,H     ` 6  V bA `A &A \rS33Osy zHxx  M  l `i 6A  VA 8A 6A &A \    ++  E I( \  M   ` j   g  6A VA A A &A MUU I(u\    M d  `_ j g   6 V RA PA &A M I(@\%   M /  `* j  g   6A VA A A &A MOSPR ~²( W\Z      ` j g  6 V A A &A M W|UUW Cww(wV\   i g d  `a j gW  6A VA SA QA &A MV BB(BW|\  4 2 /  `, j% g"  6 V A A &A M ³(ƦN\      ` j g  6A VA A A &A M( SƦNUUN)2 www(wƦN\:   i g d  `a jZ g  6 V SA QA &A MdNeg ++  ===(= ƦN\t / -  * `' j   g 6A VA  A A &A M ²( CDpw ³@*\    `  m j 6  V A A &A P 33UBˆ@* °rr=q\   b `_  m j 6A  VA QA OA &A P S DF=q x¯::Aa\   * `'  m j 6  V A A &A P ; .; Aa  ! A I@\ )  M  `  m j  VA  6A A A &A P P33@ Q W Hww@\ _   g `d  m j  6  V VA TA &A P @   °CC\    3 `0  m j 6A  VA "A A &A P  SW   x³ ^\     `  m j 6  V A A &A P  33H~]^   ++  8¯mm D\!    ] `Z m j  6A VA LA JA &A P!2@]><ŽwD!3!: ¯66$\!B   & `#  m j 6  V A A &A P!iF^/ŬE$!j!q ´@*\!y  M  `  m j 6A  VA A A &A P! S33UB@*!! u¯ss=q\!   c ``  m j 6  V RA PA &A P! AZ=q!! >¯<<Aa\!   , `)  m j 6A  VA A A &A P"; .:qaAa"" ³8Ւ\""    `  m j 6  V A A &A P"I 33CbKø8Ւ"J"U IrrA\"]  M b `_  m j  VA  6A QA OA &A P"SA"" }H??@\"   / `,  m j  V  6A &   Z M"@""" ++  .. 0 i JNIDP O0SEGMENTBLANK oim MACRO (F200) @i"g @  . + P™Bp?  ? ? "."F##! zIAwpI K   J #7#8 IKp ?  ?  ?  "#N#P HApH K   J "#f#h ~ph)_$@    ` $#|#~ G K )  5PpH)i_@@ ?  _? + ?@+ ) $  @  `  $"## _  _  $ k   $_6 $ @ $"#### _$@ $## _$@z $#$ _$@ $$$ ?$1 $$$ _  $ $`_$ $# VA 6 ?$ $p$1$4VA 6A $8 ++  0œ) ⛂p P$ @   ` $ PUUff#$z$\$e $py P  $$o$p$0k $$v$w OdP"1y$0 P p  P   3 $$"$$ G& M G&A  B G&: M  G&3 1 P\E $0 P p P   $"$K"$$ _ MP _r   _ 3  \E $UU$ ++  pWP &] p ? ?  `? &m &] p ? ? ` ? &m &]p  ? ? `?  &m $>#$% % %5%;p1%= ++  & $   @ $"%O%S & $ @ $%_%c H & $x @t $%o%p I& $  @  $%|%} I _@@?   I&  M 6  H_@@?   I&6 3  6 H_@@?   H&   6 I _@@?   H&  6A  H_@@?   I&   M 6 I _@@ ?  I&  M 6 I  _@@?   I&6 3 6  I _@@?   I&   6A H_@@?   H&   M 6 H_@@ ?  I&  M 6 & ++  &&& ` @k&M- k  Ak '@&M@  '+ )k «`@ &=A AK @+  K •`@&=A  AK @+ K &&%C&&& {` @k&M- k  Ak '@&M@  '+ )k µY`@ &=A AK @+  K F` @k&M - k Ak ' @&M@ '+ )k &'F'H #` @k&M- k  Ak '@&M@  '+ )k `@ &=A AK @+  K •`@&=A  AK @+ K &&'' 2|`@&=A AK  @+ K ¨h`@ &=A AK @+  K •T`@&=A  AK @+ K &&'' >` @k&M- k  Ak '@&M@  '+ )k ` @ k&M- k Ak  '@&M@ '+  )k ` @k &M- k Ak  '@&M@ '+ )k &(6(8 ~` @k&M- k  Ak '@&M@  '+ )k ]` @ k&M- k Ak  '@&M@ '+  )k <` @k &M- k Ak  '@&M@ '+ ) k ¨`@&=A A K @+ K • `@& @ `A  `@ A &&(( ˢ|`@& @ ` A `@ A ` & k  @ )@AA    ` @ &1  &@  G` & k  @ )@AA  &&)) ·|`@& @ ` A `@ A ` & k  @ )@AA   V` @ &1  &@  &)J)L ~` & k @ )@ AA  1` @  &1 &@  ! ` & k @ )@AA  ) ++  UUff& ≂@ABC)UUff)) ) y^$  $)) qq@pAoBnC)) )0fC$@ $)) \\@[AZBYC)) ) Q#ބ$  $-U)) GG@FAEBDC)) )&$  $*t*u 6I@HA2B1C*~* )#+C$@  $** "5@4ABC** ) #$  $** @A BC** )?c$`  $** )+ $     $) )))fvx@ABuCUUff** )$jC$@ $fi** )3_”C$[k Xh  Ue R $vT FV@UATBCC+ +  );#$  $++ )0”C$,< )  &6 ## $U U'@&A%BC+:+; ), #$  $i+D+F ) $     $)UT)))+d ++  /   o`  O@   O@  /   O@  O@   /  o`  /  C+ ++  ) )˄@ʄA&,A @ K @A&,A  @K @A&,A    @K @A& ,A  @K ܄@ A&,A @K  ,@,A,G,I,E,L,F,M @&,A @K  @&,A  @ K @&,A @ K @&,A @ K ކ?k) ,Q ++  I &}$   @   $++,h,m iz G@ +kx‘ &}$  @  $,W-V,, }| G@ +kx‘ P &}$  @  $,, |; G@ +kx‘ &}$  @  $ ,, }} G@ +kx,++   AIp&K  Io&K ,, -I[&K  IX&K ,,!!-- IG&K IB &K ,,DD-$-) I3&K I,&K ,ʽ,-9-= h‘ !& 3I  &  RR-O-R RI  & ‰  & -d-h S‘ P&N Š  & ``B=B ‘ &  0I  -&+  tt-- Hǎ &  LJ &  ,,-- ǎ &  I &  ,ߪ-- ǎ &  ŠLj  &  ,,!!- - ǎ &  ŠLj  &  ,DD,U4---++    pq q  ^@h Š^h@ -,--.. {~`Y u~N`q  > O >ɢD  -./.1 ~`9 ~4`  Ž^@/ ˆ^)@ --.K.N )>  )>C  nI^@i  fI^D@a -.n.p Z  B  mi~`   i~F` -... ++  .. -"JCACHE MMU O0SEGMENTBLANK oim MACRO (F200) @i.g A/0. `@P iP`$. p2. H  piā+km@z@P* t piƚK • Ā+@  +km@ m@P*g@$ Pi *{K vĀ*s@   nkm@m@p*g@$4/.   . + )"+    cp)" 8+ *1")"+ *1"/c ++  eA  +1A| + 1A|K +1Ay kw v ‹ K +1Ay.UU//J/ ++  sK  +i kvd K +i kv ` pT K +i kuR/ ++  /4/ P   3\E x '‚ + k{ +  + + k{ IJ k@ + k{`KvS0 ++  A@6A  ht 80 ?030C n a  UUx    a ӆig   K @ KK B0 ++    a >  =:    @ K@  K  ! a 0`0l0000B0 ++  ЂІ   K  +     @  KK K    ˜K @ KK 61 ++  0S000 0V0U00T  a     a W  a X1K ++  0P18A  IǚŸǙW U •ǎU 122 222222 2/011t1 + 턂섃³jWh  U ©_^  IdG2G2՞   ˆ2 ޾ 0 11   +o6Azިw h0H++   ˜ K  `U e$ P Ÿ2 ⺂J  + k{ⲂA + k{ ⫂8 + k{ /+  k{❂&+  k{  @ ??0;_0<0=0> ччччNpdD)b^ ʄ bba" B b  bA  I ª KKK K × G2ǓǑJRǟ2 g -2222g A  . +_6  A _6 o6 A _6A o6 A_ 6 o6 A_6 o6 P3  ++   O6A  ⯀@u⬀@_6 A u⤢_6 A+u _6B A+u W38 ++  />/04 /7?P  ̀+ k|ts  .%'A@_6 @o6  %'A@_6 @o6  W A.%Ā'A@_ 6 @o6 A%'A @_6 @o6 C3 ++  d`d, ⶂIB + k{ :   _6 A    _6 A@0:0Q330V0U3333:3 ++  k A @_6 @o6 A@_6 @o6 f4 ++   (IĀ A@_6 @o6 IĀA @_6 @o6 e4# ++  &A @_6 @o6 &A@_6  @o6 A@_6 @o6 ]4K ++  3L4v4Q4T }IB{ &A@_6 a@o 6 a&A@_6 a@o6 d4o++  R .. K2JPRIV O0SEGMENTBLANK oim MACRO (F200) @i4g Ԗ  . +  ÂÄ@ +k@  w +@ y@ k @`y IBN \ B IBN\% B  I BN\% B  IB\% @0 6 0@33444+4 ++    P)36A 5 \EP 3\E 5555 P55&52 =>< + k{4  5C5D \\%Y\55ÆU„3 \E &&    2FV   /  / } ߆ S O 05 5QP555++   Pp`@/A) \E55555 wC P tC P In@  [k)3/\E5՞U5 ++  ..  4JECCL ECCS O0SEGMENTBLANK oim MACRO (F200) @i6g      B?n )3 /\E     A   x)ڐ ֢ւib @Ξ{P I  E @)3/ \E K  ǩíX@Ǫ  àX@ǝ1A@ Dx)$ 7368\9F:26A  6V8]9G:3@6     eY  d6  ffF   @K+@1 k@q ߺ3t ߂p P  @@{ pR+@1 k@qqR6 ǂ p P ( h@p@pS@`  ij1 *n   p P (h@@{ pS @` ij1 *lǞ@7) ـ67Q  łń +@ y6 jP ̈́ +@ y  b 'i '}x ⧄$% c +  w '%$b   IIۍQA4np@eDt 0 @8\A8 $χ ҇˂Ї˂χςχςχ KP@&&+-+ [vu @+` p   +-+ [qpŸJ P@*-* [xw @+` p  *-* [qp?7 8^8g8O9H:4;B;8h;9Q;9R q P I C HH HĀ+{ܞu o [cbIC  HHH p@@{`  +޷ t޷޳mްgޭ [[Z§QIƤ0,8>ŸQI Ɯ'&8D$8D  -}|+ w  IIڈQAnp@eDt  p olIml C rhfnjHeggHb HabĀ+ ?\{\XuU oR [cbKILKC QG ELIHDFFHAH@A Xp@&{` @  + 1s1-k*e' [YX!QI. *8QI %$8"8 I @I6IH HĀāĂă+ vܞp [baI@ I6IHH Hp@@{`   +޹u޸޴mޱgޮ [ YX¨QIƥ-)9' QIƝ$#9-!9-  -}|+ޛޚޖޕv  IIڈQAnp@eDt t spIqp@I6I jhplHgiiHdfĀ āĂă+?_[vXpU [ baNION@I6IHF MJHEGGHBHABX p@&{` @  +3 t2.k+e( [WV"QI+ '9QI"!99 UI%@AC Bkmk`[ut'  %IUp@@@{ `' % Ip@A@{ `' %k mk`[cb'K9 :4ԃ A ‡‡† )P`@+k [zy)⦀p@@{+ k [vu f) p  B»:78^9H 78g8h9Q9R6 :aþA8  IITQARnp@eDt  TiP`@+k [zyJ ip@@{+k [vu g f       R6  z UIp@ ڸ @ùĀøā÷ĂöăHǮ ³ǭ Hǧ­Ǧ` kI  ǦHǜ¤ǛI  ǟ IdG>G>G:Ꞃ  G: @p@6VNF >>>>::>:>@K 5/WOhx@wAIp@ d @nĀmāH^¼]  HW¶VI DZHN ¯MI Ǫ IdG>G >G:Ꞃ G: @p@ 6BNL IdG>G>G:잂 G: ;7;8 ;; >;>:7<UU UUUUUUUUUUUU UUUUUUUUUUUU UUUUUUUUUUUUUU UUUUUUUUUUUU UUUUUUUUUUUU       UUUUUU UUUUUUUUUU UUUUUUUUUUUUUUUU     Pi& &k4qBwP)p @ @{ +p t1Bu( h@*j@`y@  q(p h@@{ * p j@`u@ m;>989p &{@`( `(@+k (r($j!d1qBU @QI&#=0QI =6=6 7p;II) t@I6IH H@ABC+k Ğvp޾q1B_) Pµ@I6IʯʭʴƱH Ƭ®ƮHƩHƨép@@@{  +kޟxޟޛqޘkޕq 1BZ+QIƊ,)=†QIƃ$#=!= ;ItIs)q o@ I6IigkHfhhH ce@ABC+k^ZvW pTq1B_@iLłJ  6 DBIF ACC >=>p&{ @`( `(@+k-r-)j &d#1qBS@QI# >QI> >   > 7p6?I;U  A>DA>^ ?'} IB JğAIBIUp@ں @ ĀāĂăHǰ±ǯ  Hǩ«Ǩ` kI  ƳHǞ¡ǝI ƫ  IdG>G>G> G>  @p@6\ND?@ >>>@K 5/WIht@ AIp@` @jĀiāHZ Y HSRI  aHJII Y  IdG>G>G> G>  @p@6BNL IdG>G >G> G> ?  ? :>>>>e6>b  @ +k@  w +@ y@ k@`y ^   @+ x + @+ x c0 0@@g BA`; )3 /\E    Ԇׂӆւ҆ ц ʆK꾁  i +)@ )0 @c Āp@@{@ ) @pµ·Ā & @{pIHĀ &@{qBiH+ @?=@@@ @1 @R?~@6'A@A   W I pA @  )R @pLHN 6Ā &{wIN 6LĀ &{w pA@  )/ @ pV  HĀ&@{ q }y  žjrIĀ&@{p @pA@ID W A  )P`@+k [zy)⦀p@@{+ k [vu f) p   1A? ???迀 AdþA8 I IWQAUnp@eDt WO iP`@k+ [zyLi p@@{+k [vuf  e       Q?n z    P 6BzP Pi) ?'?@@??I@6\5JALTBUF ALTRTN ALT JMOVE PARTX O0SEGMENTBLANK oim MACRO (F200) @iHAA`g,-"g Ɨ&}“@+k KQ ~ t %g )⮀@-+kw  g )➀@@Ā-+k u ‘ K+yЉD RA"BB  gJDBG4:CNTDBG4:LP DEBUG4 O0SEGMENTBLANK oMG:Z G:Y G:X MG:W G:V G:U MG:T  G:S G:R MG:Q G:P G:O MG:N G:M G:L MG:K G:J G:I MG:H G:G G:F MG:E G:D G:C MG:B G:A G:9 MG:8 G:7 G:6 MG:5 G:4 G:3 MG:2 G:1 G:0 im MACRO (F200) @m*** DEBUGS.OBJ - REV D0m ***iCg  ~͞ ,O Q0z3o vaK3 9NrstO2 PLKM T ( : E - :ӂ"  )  A  pP0 @0 B ` h  }cD «⫂ pP0/o  D E B U G 4 D 0 ӟi 7} u#u"u!u uuuuuuuuuuuuuuuuuuu u u u u uuuuuuuuu    ӂzӾ P AC Q@ X= Y:ԽѾ K3 L0 S- D* C'ԟK =ӟ{  } ӟ|"  *ٽ҆ Y Q A Gҽ؆ R  Ƥ D V Wƚ ›LBLCLFLLLSLJ LILGLRLZߝ  Ǟ< /}҆{ u łt P Lłj T P BŁ P  ӂ\ W H T Ğ|QEI , , `솂՟ _ ٞ3 9} ` J B YK QJf䞁  cޡ @ޟޝ `@E ;߽RA@EN@A ޏǎ Qފ ,^:F & o*| x ` D `랞oY* Qd Ѐ_Ѐ āZ@AĄ܃T B ` ǁ D임*L_U3 ` Ģ1*/) 'r "Bƽу۽ֽ C凑ā / X Ń ѽ۞i ] с䆫@ڃ۽ցBǢ ,ž[ + - * X /KJƎ^ [{ xނZ  ,ş| ֽL  P ޽с ۽޺{  ўq kɆȂ Gާ}ަyޠ }y E   .  E   .ޣ fN  ,Žֆs@FC  kqLL (w{u  ^|JQBZy L S TўNM   Isľˆ_]] | IƎ> ,ŽƇ , ƂpIưk , ,Htr H m -ņ - ('\\ÂF - tтڃԞx ’ @"Fz@ Ό F ō l># .bƝޙޖJ Q!’ފދ JQĽ %ӂԞu  U B * ӂGo h f e "cIaM K Y &V&RR `QK L$kK N =ӂDD G ӂA   :Ӟ ӟL  ǟ{ y9 u    :w  ® 0C C  96C C "0 `j  •墒C "C tC  I60@—Tg z @0 6= ". 1 `@p  Iyyyx R G , ; + - * / X_1]\I W` RRR -@A@K J@ JH +O -M * / X?Ҿ  `Y B `R-҆, , +& N I +KL v `p `PAQXYKLSD C Z A 9 0n C F =   t ,Ɲ ,ƙ˽•䆒 ޏJQ ` Tѝ Žp@  ʽтۂTB۝ @L@|LOLmLo׾  `LpJRbC ߞݞ  [ } ޟ}  @ƹwr·Q† BLLreޣ ޤsg3 P@™b@  `@ ` @P ` lނ}? .ry   qvty j 6  fdv s`z  fZYya[ľ⟄ Cӝ IOH0zr( E ` <;C TK @ԝĽ MӃ/ԝ  6I6;6D 6666"" d "96=9 6"q "I 6=I6"qp  0|| y0 `{ 6} `  L o , ,Ūߦ ` AņЁ V IP ΃͆˃ʅ Q J @ } } IPNÂAK! K  ՂF IƱ  ² ¨N ‚ç ަ| } Kz   # hƿcQH UbQÎaA¶snQBz x } @ydK @_Fs?  V;8HgKeI 3Q IIZ@ZI A= ; 7 6 31w  BK . IJQs  %ӂ" ԟx L o , ,Ūߦ ` AņЁ V IP ΃͆˃ʅ Q J @ } } IPNÂAKK  ՂF IƱ  ² ¨N ‚ç ަ| } Kz   # hƿcQH UbQÎaA¶snQBz x } @ydK @_Fs?  V;8HgKeI 3Q q "I 6=I6"qp  0|| y0 `{ 6} `  L o , ,Ūߦ ` AņЁ V IP ΃͆˃ʅ Q J @ } } IPNÂAKK  ՂF IƱ  ² ¨N ‚ç ަ| } Kz   # hƿcQH UbQÎaA¶snQBz x } @ydK @_Fs?  V;8HgKeI 3Q IIZ@ZI A= ; 7 6 31w  BK . IJQs  %ӂ" ԟx L o , ,Ūߦ ` AņЁ V IP ΃͆˃ʅ Q J @ } } IPNÂAKK  ՂF IƱ  ² ¨N ‚ç ަ| } Kz   # hƿcQH UbQÎaA¶snQBz x } @ydK @_Fs?  V;8HgKeI 3Q IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII" IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII# IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII$ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII% IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII& IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIe;811111113224811111113224811109182440e@811111113224811111113224811109182439e:' 811111113224811111113224811111113224e811111113224811111113224811111113224811111113224811111113224811111113224eIZN8111111157067581111111572200811111120145e^#8011240238057580112402381250811111113513dep $8011240239110080112402391650811111113558d eG8009290220117580092902201525801124020327d(  e|\a8106301207342581110918165825811109182423 e> 8109290835045081092908350650811111114310) * + , - . / 0 . PAT495P5 ASMPAT495P6 ASMPAT495P8 ASM PAT495 JCL PAT495 OBJ PAT495 HLP THE PAT495 PROGRAM HAS BEEN DIVIDED INTO SEVERAL PARTS. AN EXPLANATION OF EACH FILE AND PROGRAM THAT RESIDES ON THESE DISKS NOW FOLLOWS: SOURCE FLOPPY DISK #F81401 PAT495 .NUC THIS IS THE SOURCE FOR THE NUCLEUS SECTION OF PAT1 495. IT CONTAINS ALL TRAP & INTERRUPT VECTORS ALONG WITH COMMON DATA AREAS. THE LABEL PATEND MUST BE SET TO POINT TO THE 1ST 1K BOUNDARY AFTER THE END OF PART 9. PAT495P1 .ASM THIS FILE WAS BORROWED FROM PAT490 AND MODIFIED TO RUN ON THE NM4/95 COMPUTER. IT CONTAINS THE LSI4 BASIC INSTRUCTION DIAGNOSTIC (BIDP) (TEST 1). PAT495P2 .ASM THIS FILE CONTAINS THE FOLLOWING PARTS OF PAT495. EACH PART WAS BORROWED FROM PAT490 AND MODIFIED. TEST 2 - (UIT) UNIMPLEMENTED INSTRUCTION TEST THIS TEST WAS MODIFIED TO INCORPORATE THE NEW INSTRUCTIONS AVAILABLE ON THE 4/95. TEST 3 - (RTC) REAL TIME CLOCK TEST THIS TEST WAS MODIFIED SLIGHTLY TO PREVENT THE FOUR WORD CACHE ON THE ECC MEMORIES FROM HAVING ANY EFFECT ON THE TIMING OF THE RTC.  TEST 4 - (IOT) INPUT/OUTPUT TEST THE POWER FAIL TEST SECTION HAS BEEN MODIFIED  TO ALLOW THE 2 SECOND REFRESH OF MEMORIES ON POWER UP. PAT495P3 .ASM TEST 5 - (FLPT) FLOATING POINT INSTRUCTION TEST THIS TEST WAS TAKEN FROM PAT490. IT HAS BEEN REDUCED FROM NINE SOURCE FILES TO ONE SOURCE FILE. THIS HAS GREATLY REDUCED THE AMOUNT OF PAPER NEEDED TO LIST THIS SECTION. PAT495P4 .ASM TEST 6 - (NIDP) THIS FILE CONTAINS SOURCE TO TEST MOST OF THE INSTRUCTIONS WHICH HAVE BEEN ADDED TO THE 4/95. SOURCE FLOPPY DISK #F81402 PAT495P5 .ASM THIS FILE CONTAINS TESTS 7 & 8. TEST 7 CONSISTS OF A MEMORY TEST (MEM) AND THE MEMORY MANAGEMENT UNIT TEST (MMU). MEM WAS BORROWED FROM PAT490. THESE TESTS ARE ALWAYS RUN TOGETHER SINCE THE MMU TEST MUST BE RUN IN KNOWN GOOD MEMORY. THUS MEM WAS ADDED TO THIS TEST TO ISSURE THE QUALITY OF THE FIRST 64K OF SYSTEM MEMORY BEFORE THE MMU TEST IS RUN. TEST 8 (CACHE) - THIS FILE CONTAINS THE SOURCE FOR TESTING THE CACHE LOGICS WHICH RESIDES ON THE MEMORY MANAGEMENT UNIT. PAT495P6 .ASM TEST 9 (PRIV) - THIS FILE CONTAINS SOURCE TO TEST THE FOLLOWING: 1) COPY TO/FROM USER SPACE - THESE INSTRUCTIONS ARE HERE AND NOT IN PART 4 SINCE THEY REQUIRE A KNOWN GOOD MMU. 2) PRIVILEGED OPERATION TRAP TEST 3) SYSTEM STACK EXCEPTION TRAP TEST PAT495P7 .ASM THIS FILE CONTAINS SOURCE FOR THE LONG RUNNING MEMORY DIAGNOSTIC WITH ECC CHECKING (TEST A) (ECCL), AND SHORT RUNNING MEMORY DIAGNOSTIC WITH ECC CHECKING (TEST B) (ECCS). PAT495P8 .ASM THIS FILE CONTAINS SOURCE FOR THE MOVE UTILITY AND THE AUTOLOAD TEST (ALT) (TEST C). THESE WERE BORROWED FROM PAT490. PAT495 .HLP THIS FILE CONTAINS INFORMATION FOR THE PROGRAMMER DOING THE NEXT UPDATE O2 N PAT495. PAT495 .OBJ PAT495 OBJECT CODE. SOURCE FLOPPY DISK #F81403 PAT495P9 .ASM THIS FILE CONTAINS SOURCE FOR A MODIFIED VERSION OF DEBUG4 (REV. D0) SO THAT IT WILL FIT INTO PAT495. PAT495 .MAC THIS FILE CONTAINS ALL MACRO DEFINATIONS USED IN EVERY SECTION OF PAT495. PAT495 .DOC THIS FILE CONTAINS SOURCE FOR THE USERS GUIDE. FLOPPY DISK #F81404 THIS FLOPPY CONTAINS THE BINARY FOR PAT495. THIS FLOPPY WILL AUTOLOAD THE PROGRAM INTO THE COMPUTER WITHOUT AN OPERATING SYSTEM. IN ORDER TO DO THIS THE FILE PAT495.BIN HAS BEEN RENAMED OS::.SYS SINCE THE OS4 BOOTSTRAP WILL AUTOLOAD ONLY THAT FILE. REV. A0 18 MAY 79 LJV REV. A1 10 SEPTEMBER 79 DAM AC THIS FILE CONTAINS ALL MACRO DEFINATIONS USED IN EVERY SECTION OF PAT495. PAT495 .DOC THIS FILE CONTAINS SOURCE FOR THE USERS GUIDE. FLOPPY DISK #F81404 THIS FLOPPY CONTAINS THE BINARY FOR PAT495. THIS FLOPPY WILL AUTOLOAD THE PROGRAM INTO THE COMPUTMACRO PAT495.DOC(NOO,L=)+PAT495.NUC(D=PAT495(S),S,NOI,O)+ PAT495P1(S,NOI)+PAT495P2(S,NOI)+PAT495P3(S,NOI)+ PAT495P4(S,NOI)+PAT495P5(S,NOI)+PAT495P6(S,NOI)+ PAT495P7(S,NOI)+PAT495P8(S,NOI)+PAT495P9(NOLISTI,NOI) MACRO PAT495.DOC(NOO,L=PATDOC.LST) PAUSE TYPE C TO LINK AS LO=PATLINK.LST LINK PAT495(NH) PAUSE TYPE C TO PRINT USERS GUIDE PRI PATDOC PAUSE TYPE C TO PRINT LISTING WITH USERS GUIDE NOTE: PAT495.MAC & PAT495P9.ASM(DEBUG4) ARE NOT ISSUED AS PART OF THE PAT495 DIAGNOSTIC LISTING... PRI PAT495 PAUSE TYPE C TO PRINT LINK-MAP PRI PATLINK A LO LP PAUSE TYPE C FOR CONCORDANCE CNC PAT495.NUC+PAT495P1+PAT495P2+PAT495P3+PAT495P4+ PAT495P5+PAT495P6+PAT495P7+PAT495P8+PAT495P9 JO ,NOI) MACRO PAT495.DOC(NOO,L=PATDOC.LST) PAUSE TYPE C TO LINK AS LO=PATLINK.LST LINK PAT495(NH) PAUSE TYPE C TO PRINT USERS GUIDE PRI PATDOC PAUSE TYPE C TO PRINT LISTING WITH USERS GUIDE NOTE: PAT495.MAC & PAT495P9.ASM(DEBUG4) ARE NOT ISSUED AS PART OF THE PAT495 DIAGNOSTIC LI TITL PAT495P5 -- MEMORY MANAGEMENT DIAGNOSTIC 84-93814-15 TITL CHECKERBOARD PATTERN MEMORY TEST ********************************************************* * * THIS MMU DIAGNOSTIC IS MODIFIED TO RUN EITHER WITH * A MAP WITH OR WITHOUT CACHE. * ******************************************************** NAM MMU NAM CACHE MACHINE =:20 ORG PART5ST MMU EQU $ COPY  DEMAND,A DEMAND MODE SELECTION; =0 FOR DEFAULT MODE AND =:80,A TEST BIT #7 JGT A,$+2 IF BIT #7 SET, RUN MMU TEST JMP CACHE BIT #7 NOT SET - ABORT TEST ******************************************************* * *  ---------- MEMORY TEST ---------- * * THIS MEMORY TEST IS A VERY SIMPLE MEMORY CHECK TO * INSURE ADEQUATE QUALITY OF THE MEMORY IN WHICH THE * MEMORY MANAGEMENT DIAGNOSTIC IS TO BE RUN. ONLY THE * AREA OF MEMORY FROM PATEND TO :FFFF IS TESTED. FIRST, * A CHECKERBOARD PATTERN IS WRITTEN IN MEMORY - I.E. * THE 1ST BLOCK HAS :AAAA, :5555, :AAAA, ... * THE 2ND BLOCK HAS :5555, :AAAA, :5555, ... * ETC. THE PATTERN IS SCANNED STARTING AT THE LOW * END OF TESTABLE MEMORY. AT EACH LOCATION, THE DATA * IS READ AND VERIFIED, AND THE COMPLIMENT WRITTEN. * THE COMPLIMENT PATTERN IS THE3 N SCANNED FROM LOW * MEMORY. AT EACH LOCATION, THE DATA IS READ AND * VERIFIED, AND THE ORIGINAL PATTERN WRITTEN. *  FINALLY THE SCANNING PROCEDURES ARE REPEATED * IN REVERSE STARTING AT THE HIGH END OF TESTABLE * MEMORY. * THE ROW SIZE ASSUMED IN THE CHECKERBOARD PATTERN * IS 64 BITS. THIS CORRESPONDS TO THE RAM INTERNAL * ARRAY ROW SIZE. *  ALL ONBOARD ROM MUST BE INSTALLED ABOVE ONBOARD * RAM. ANY WRITABLE MEMORY INSTALLED ABOVE ROM * WILL BE IGNORED BY THE MEMORY TEST. * ******************************************************* MMUMEM EQU $ COPY =MEMTRP1,A TRAP SERVICE ROUTINE ADDRESS COPY A,:8B STORE IN 4TH WORD OF TRAP COPY STATSV,A COPY A,S COPY =:0E0D,A HALT INSTRUCTION COPY A,1 STORE IN WORD 1 COPYE =:FFFF,A COPY A,Y SAVE IN Y COPY 0(Y),Q ATTEMPT MEMORY ACCESS JMP MEMTRP2 GO DISPLAY 64K MEM SIZE MEMTRP1 WORD STATUS TRAP SERVICE ROUTINE WORD STACKP ERROR: 1ST,64K,DOES,NOT,RESPOND,--,YREG,=,FAULT,ADDRESS MEMTRP2 EQU $ COPY =0,Y COPY Y,L COPY =:1007,X SELP X,4 DISPLAY TEST NUMBER & MEM SIZE TESTED COPYE =PATEND,A BEGINNING OF TESTABLE MEMORY COPY A,K JMP MMUMEM20 LPOOL TITL CHECKER BOARD PATTERN TEST * * 1. FILL MEMORY WITH INITIAL DATA PATTERN * FILLS =PATEND - :FFFF MMUMEM20 COPY  PTAAAA,A DATA WORD 1 COPY PT5555,Q DATA WORD 2 COPY K,X INITIALIZE MEMORY POINTER MMUMEM21 COPY =0,Y CLEAR BLOCK INDEX MMUMEM22 COPY A,0(X) FILL MEMORY WITH DATA COPY Q,1(X) FILL MEMORY WITH DATA ADD =2,X INCREMENT MEMORY INDEX ADD =2,Y INCREMENT BLOCK INDEX CSK Y,=64 END OF CURRENT BLOCK ? JMP MMUMEM22 NO, CONTINUE NOP YES EXCH A,Q YES, REVERSE DATA WORDS CSN X,L END OF TESTABLE MEMORY ? JMP $+2 JMP MMUMEM21 CONTINUE TITL * 2. FORWARD MEMORY SEARCH FROM (K) TO (L) * CHECK FOR 1ST DATA PATTERN WHILE FILLING MEMORY WITH * 2ND PATTERN ON 1ST PASS; VICE VERSA ON 2ND PASS. * COPY PTAAAA,A DATA WORD 1 COPY PT5555,Q DATA WORD 2 MMUMEM30 COPY  K,X INITIALIZE MEMORY INDEX MMUMEM31 COPY =0,Y MMUMEM32 COPY Q,P5TEMP COPY 0(X),Q CSK A,Q CHECK MEMORY CONTENTS NOP ERROR: MEMORY,FAILURE,--,X=ADDRESS;,A=WRITTEN,Q=DATA,READ COPY P5TEMP,Q COPY Q,0(X) WRITE COMPLIMENT DATA IN MEMORY ADD =1,X INCREMENT MEMORY INDEX COPY A,P5TEMP COPY 0(X),A CSK Q,A CHECK MEMORY CONTENTS NOP ERROR: MEMORY,FAILURE,--,X=ADDRESS;,Q=WRITTEN,A=READ COPY P5TEMP,A COPY A,0(X)  WRITE COMPLIMENT DATA IN MEMORY ADD =1,X INCREMENT MEMORY INDEX ADD =2,Y INCREMENT BLOCK INDEX  CSK Y,=64 END OF CURRENT BLOCK ? JMP MMUMEM32 NO, CONTINUE NOP YES EXCH A,Q REVERSE DATA WORDS CSN X,L END OF TESTABLE MEMORY ? JMP $+2 JMP MMUMEM31  CONTINUE EXCH A,Q REVERSE DATA WORDS JGT A,MMUMEM30 COMPLETED 2ND PASS ? JMP MMUMEM40 P5TEMP WORD 04  TITL * 3. BACKWARD MEMORY SEARCH FROM (L) TO (K) * CHECK FOR 1ST DATA PATTERN WHILE FILLING MEMORY WITH *  2ND PATTERN ON 1ST PASS; VICE VERSA ON 2ND PASS. MMUMEM40 COPY L,X INITIALIZE MEMORY INDEX MMUMEM41 COPY =0,Y CLEAR BLOCK COUNTER MMUMEM42 SUB =1,X DECREMENT MEMORY POINTER COPY Q,P5TEMP COPY 0(X),Q CSK A,Q CHECK MEMORY CONTENTS NOP ERROR: MEMORY,FAILURE,--,X=ADDRESS;,A=WRITTEN,Q=READ COPY P5TEMP,Q COPY Q,0(X) WRITE COMPLIMENT DATA IN MEMORY SUB =1,X DECREMENT MEMORY INDEX COPY A,P5TEMP COPY 0(X),A CSK Q,A NOP ERROR: MEMORY,FAILURE,--,X=ADDRESS;,Q=WRITTEN,A=READ COPY P5TEMP,A COPY A,0(X) WRITE COMPLIMENT DATA IN MEMORY ADD =2,Y INCREMENT BLOCK INDEX CSK Y,=64 END OF CURRENT BLOCK ? JMP MMUMEM42 NO, CONTINUE NOP YES EXCH A,Q REVERSE DATA WORDS CSN X,K END OF TESTABLE MEMORY ? JMP $+2 YES, END JMP MMUMEM41 NO, CONTINUE EXCH A,Q REVERSE DATA WORDS JGT A,MMUMEM40 COMPLETED 2ND PASS ? * * PATCH FOR LOOPING * JMP MMUMEM20 ORG $-1 NOP JMP MMUTST * MAPTYPE WORD :4 MAPLIM WORD 0 MAP4LIM WORD :FD00 MAP15LIM WORD 0 WALKPAT WORD :FFFF * LPOOL MMUTST EQU $ COPY =7,A SELP A,4 OUTPUT TO CONSOLE COPY =0,A COPY A,IDPCNT SET UP LOOP COUNTER PART5B COPY =0,A COPY A,PCOUNT SET UP TEST COUNTER JST CHKMAP JMP DMATST * * CHECK IF MMU DOES OR DOES NOT HAVE CACHE * CHKMAP ENT COPY =:11,X OUT X,5 WRITE RESTRICT CACHE AND ACCESS CONTROL BITS IN 5,A GET IT BACK AND =:11,A MASK DON'T CARE BITS CSK A,X COMPARE INPUT WITH EXPECTED USER# JMP CHK4MAP CHECK IF MAP WITHOUT CACHE HLT CONTROL REGISTER FAULTY COPY =:F,A JMP SAVMAP GOTO SAVE MAX. USER NO. CHK4MAP CSK A,=:01 NOP HLT CONTROL REGISTER FAULTY COPY =0,A MAPTYPE - CAHCHE TYPE =:F, NO CACHE TYPE =:0 SAVMAP COPY A,MAPTYPE SAVE MAP TYPE WITH OR WITHOUT CACHE. JMP *CHKMAP TITL MMU REGISTER TEST * * EACH BIT OF THE DMA & USER NUMBER REGISTERS IS * TESTED IN THIS SECTION TO INSURE THAT ALL BITS * FUNCTION PROPERLY. * DMATST COPY =:F,X DMA1 OUT X,7 LOAD DMA# INTO MMU IN 6,A INPUT DMA# FROM MMU AND =:FF,A SHIFT A,R,4 SHIFT TO LOWER NIBBLE CSK A,X NOP ERROR: DMA#,SHOULD,BE,SAME,AS,XREG SUB =1,X CHANGE DMA TEST NUMBER JNE X,DMA1 JUMP IF NOT FINISHED OUT X,7 LOAD DEFAULT DMA# INTO MMU COPY =:F,X USER OUT X,6 LOAD USER# INTO MMU IN 6,A INPUT USER# AND =:FF,A MASK OUT DMA# AND UPPER BITS CSK A,X NOP ERROR: USER#,SHOULD,BE,SAME,AS,XREG SUB =1,X CHANGE USER TEST NUMBER JNE X,USER JUMP IF NOT FINISHED OUT X,6 LOAD DEFAULT USER# INTO MMU * PATCH FOR LOOPING JMP MMU ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=1 NOP ERROR: PCOUNT,SHOULD,=1 TITL TABLE ACCESS BIT TEST * * THE FUNCTIONALITY OF THE TABLE ACCESS BIT (ABIT) IS * TESTED HERE. THE FOLLOWING IS DONE: * 1) CONTROL REGISTER IS CLEARED AND VERIFIED. * 2) MEMORY FROM :FC00 TO :FFFF(OR :FCFF) IS FILLED WITH :AAAA * 3) TABLE ACCESS IS TURNED ON. * 4) TRANSLATION TABLE IS FILLED WITH :5555 (ALL LOCATIONS) * 5) TABLE ACCESS IS TURNED OFF. * 6) MEMORY IS THEN VERI5 FIED FOR :AAAA * 7) TABLE ACCESS IS AGAIN TURNED ON. * 8) TRANSLATION TABLE IS VERIFIED FOR :5555 * ACCESS EQU $ SBIT XA,S TURN ON EXTENDED ADDRESSING OUT A,4 RESET MMU, I.E. CLEAR CONTROL REGISTER IN 5,A CHECK TO SEE THAT ALL ARE OFF  AND =:FB,A MASK OFF UNDEFINED BITS JEQ A,$+2 ERROR: CONTROL,REG,HAS,BITS,STUCK,ON COPY =:AAAA,A PUT MEMORY PATTERN INTO AREG COPY =:FC00,X PUT FIRST LOC OF 63K RANGE INTO XREG ACCES00 COPY A,0(X) STORE PATTERN INTO MEMORY ADD =1,X INCREMENT MEMORY POINTER JEQ X,$+2 JMP ACCES00 COPY =1,A OUT A,5 TURN ON TABLE ACCESS ENABLE COPY =:5555,A GET TABLE PATTERN COPY =:FC00,X GET START LOCATION ACCESS0 COPY A,0(X) STORE PATTERN INTO TRANSLATION TABLE ADD =1,X FILL TRANSLATION TABLE WITH PATTERN JEQ X,$+2 JMP ACCESS0 OUT A,4 RESET MMU, TURN OFF TABLE ACCESS COPY =:AAAA,Q GET MEMORY PATTERN FOR COMPARISON COPY =:FC00,X GET START LOCATION ACCESS1 COPY 0(X),A GET CONTENTS OF MEMORY LOCATION CSK A,Q JMP ACCESS3 ACCESS2 ERROR: LOC,ADDRESSED,BY,XREG,MODIFIED,BY,WRITE,TO,TABLE ADD =1,X GO CHECK NEXT MEMORY LOCATION JEQ X,$+2 JMP ACCESS1 JMP ACCESS4 GO TEST TABLE ENTRIES ACCESS3 COPY =:5555,Y CSK A,Y NOP JMP ACCESS2 ERROR: TABLE,ACCESS,DID,NOT,WORD,AT,LOC,IN,XREG JMP ACCESS2+1 ACCESS4 COPY =1,A  OUT A,5 TURN ON TABLE ACCESS COPY =:FC00,X GET START LOCATION COPY =:5555,Q GET TEST PATTERN ACCESS5 COPY 0(X),A GET TRANSLATION TABLE ENTRY CSK A,Q NOP ERROR: WRITE,TO,TABLE,AT,LOC,IN,XREG,DID,NOT,WORK ADD =1,X JEQ X,$+2 JMP ACCESS5 GLPOL: * PATCH FOR LOOPING JMP ACCESS ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=2 NOP ERROR: PCOUNT,SHOULD,=2 TITL MEMORY TEST OF TRANSLATION TABLE * * THIS SECTION OF THE TRANSLATION TABLE TEST CHECKS * THE INTEGRITY OF EACH BIT OF THE TABLE RAM BY * ACCESSING EACH TABLE ENTRY AND TESTING IT AS * THOUGH IT IS A MEMORY LOCATION... * * WALKING 1'S, WALKING 0'S, AND ADDRESS PATTERNS ARE * WRITTEN INTO EACH TABLE ENTRY AND THEN VERIFIED. * WALKING COPY =1,A OUT A,5 MAKE SURE TABLE ACCESS IS ENABLED WALK1 COPY =:FC00,X GET START LOCATION WALK1A COPY A,0(X) STORE THE PATTERN COPY 0(X),Q READ THE TABLE ENTRY CSK A,Q NOP ERROR: AREG=WRITTEN,QREG=READ,XREG=LOCATION ADD =1,X GO TEST OTHER ENTRIES COPY =0,Y CSK X,Y NOP JMP WALK1A SHIFT A,L,1 CHANGE TEST PATTERN JNE A,WALK1 CONTINUE UNTIL ALL WALKING 1'S TESTED COPY =:FFFE,A GET WALKING 0'S PATTERN SBIT OV,S SET OVERFLOW WALK0 COPY =:FC00,X GET START LOCATION WALK0A COPY A,0(X) STORE THE PATTERN COPY 0(X),Q READ THE TABLE ENTRY CSK A,Q NOP ERROR: AREG=WRITTEN,QREG=READ,XREG=TABLE,LOCATION ADD =1,X TEST MORE ENTRIES COPY =0,Y CSK X,Y NOP JMP WALK0A ROTATE A,LO,1 CHANGE TEST PATTERN COPY WALKPAT,Y GET COMPARE PATTERN FOR EXIT CSN A,Y SEE IF DONE JMP $+2 YES, GET OUT JMP WALK0 NO, CONTINUE WITH NEW PATTERN COPY =:FC00,X PUT ADDRESS INTO XREG ADDRP COPY X,A PUT PATTERN INTO AREG COPY A,0(X) STORE THE PATTERN INTO TABLE COPY 0(X),Q READ THE TABLE ENTRY CSK A,Q NOP ERROR: AREG=WRITTEN,QREG=READ,XREG=TABLE,LOCATION ADD =1,X TEST MORE ENTRIES & CHANGE PATTERN COPY =0,Y CSK X,Y NOP JMP ADDRP ***** PATCH FOR LOOPING JMP WALKING ORG $-1  NOP IMS PCOUNT COPY PCOUNT,A CSK A,=3 NOP ERROR: PCOUNT,SHOULD,=3 TITL * * * THE MEMORY EXCEPTION TRAP IS MODIFIED 6 HERE SO THAT THE * TRAP ROUTINE WILL WORK AS NEEDED IN THE FOLLOWING TESTS. * COPY =MEMTRAP,A GET ADDRESS OF TEMPORARY ROUTINE COPY A,UNMEM1+2 STORE INTO TRAP VECTOR JMP SETUP LPOOL * * MMU TEMPORARY MEMORY EXCEPTION TRAP ROUTINE * MEMTRAP EQU $ WORD STATUS WORD STACKP SST 3 TEST FOR UNINSTALLED MEMORY JMP $+3 ERROR: UNINSTALLED,MEMORY,ERROR JMP START IN 3,A GET LAST P CSK A,LP:POS TEST LAST P REGISTER NOP JMP MEMTR2 NO MATCH, MAYBE FETCH TEST MEMTR1 ADD =1,A CHANGE TO P+1 COPY A,CONTXT PUT INTO CONTEXT BLOCK LCNTX * * MEMTR2 CSK A,LPFCH TESTS P OF FETCH NOP HLT LAST P DOES NOT MATCH LP:POS OR LPFCH COPY LPFCH+1,A USE THE P BEFORE FETCH TO RETURN JMP MEMTR1 * * TITL TRANSLATION TABLE SETUP * * THIS SECTION OF CODE SETS UP THE TRANSLATION TABLE SO THAT * THE FOUR TYPES OF ACCESS MODES MAY BE TESTED IN SYSTEM SPACE. * ALL OF THE USER TABLE ENTRIES WILL POINT TO THE FIRST 64K * OF MEMORY, BUT WILL ALLOW NO ACCESS THROUGH ANY OF THEM. * * ALL SYSTEM SPACE TABLE ENTRIES WILL ALLOW * READ/WRITE/FETCH WITH EXECEPTION TO THE * FOLLOWING PAGES WHICH ARE SET UP FOR THIS TEST: * * TABLE PHYSICAL TYPE * LOCATION PAGE OF * ADDRESSED ACCESS * * :FC38 :38 READ/FETCH (:1000) * :FC39 :39 READ/WRITE (:2000) * :FC3A :3A  NOT MAPPED (:0000) * :FC3B :3B READ/WRITE/FETCH (:3000) * SETUP EQU $ COPY =1,A TURN ON TABLE ACCESS OUT A,5 COPY =:FC00,X GET START ADDRESS OF SYSTEM SPACE COPY =:FC38,Y LOCATION FOR READ/FETCH CODE COPY =:3000,A CODE FOR READ/WRITE/FETCH SETUP1 COPY A,0(X) FILL SYSTEM TABLE WITH CODE ADD =1,A CHANGE PAGE NUMBER ADD =1,X CHANGE TABLE ENTRY LOCATION CSK X,Y ALL THOSE LOCATIONS LOADED? JMP SETUP1 NO, CONTINUE NOP AND =:1FFF,A CHANGE CODE TO READ/FETCH, KEEP PAGE NO. COPY A,0(X) STORE IT ADD =1,A CHANGE PAGE ADD =1,X CHANGE TABLE ENTRY AND =:FFF,A CHANGE CODE TO READ/WRITE OR =:2000,A WHILE KEEPING PAGE NUMBER COPY A,0(X) STORE IT AND =:FFF,A CHANGE CODE TO NOT MAPPED COPY =:FC3F,Y GET START ADDRESS FOR USER MAP #1 ADD =1,A CHANGE PAGE ADD =1,X CHANGE TABLE ENTRY COPY A,0(X) STORE NOT MAPPED CODE OR =:3000,A CHANGE CODE TO READ/WRITE/FETCH SETUP2 ADD =1,A CHANGE PAGE ADD =1,X CHANGE TABLE ENTRY COPY A,0(X) STORETHE CODE CSK X,Y FINISHED WITH SYSTEM SPACE? JMP SETUP2 NO, CONTINUE NOP COPY =0,Q END OF TABLE POINTER SUB =1,Q SETUP3 COPY =0,A CHANGE CODE TO NOT MAPPED, PAGE 0 ADD =:40,Y UPDATE Y TO POINT TO NEXT MAP SETUP4 ADD =1,A CHANGE PAGE ADD =:1,X CHANGE TABLE ENTRY LOCATION COPY A,0(X) STORE PAGE # INTO ENTRY CSK X,Y FINISHED WITH THIS MAP? JMP SETUP4 NO, CONTINUE NOP CSK Y,Q FINISHED WITH TABLE? JMP SETUP3 NO, CONTINUE NOP OUT A,4 YES, TURN OFF TABLE ACCESS ***** PATCH FOR LOOPING***** JMP SETUP ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=4 NOP ERROR: PCOUNT,SHOULD,=4 TITL TEST TRANSLATION AND ACCESS MODES * * TO TEST THE TRANSLATION ENABLE, THE FOLLOWING IS DONE: * 1) TRANSLATION ENABLE IS TURNED ON (TBIT) * 2) CONTROL REGISTER IS READ FOR VERIFICATION. *  3) TRANSLATION ENABLE IS TURNED OFF. * 4) PAGES :38, :39, :3A, & :3B ARE SET UP FOR ACCESS TESTS. * 5) AC7 CESS TESTS RUN ON EACH PAGE. * 6) ERROR CONDITIONS CHECKED FOR CORRECT OPERATION. * TRANTEST EQU $ COPY =2,A TURN ON TRANSLATION ENABLE OUT A,5 IN 5,Q READ CONTROL REGISTER TBIT 1,Q TEST THE TRANSLATION ENABLE BIT JT OV,$+2 ERROR: TBIT,IN,MMU,WILL,NOT,SET OUT A,4 RESET THE MMU * * * SET UP PAGES :38, :39, :3A, & :3B FOR TESTS * * COPY =:E000,X POINT TO PAGE :38 COPY =-4,Y SET UP LOOP COUNTER MODESET COPY DATA1,A COPY A,0(X) STORE DATA FOR READ TEST COPY DATA2,A COPY A,1(X) STORE DATA FOR FETCH TEST COPY DATA3,A COPY A,3(X) STORE DATA FOR WRITE TEST ADD =:400,X POINT TO NEXT PAGE IJNE Y,MODESET GLPOL: TITL * TEST MODES ON PAGE :38 * READ/FETCH ALLOWED * * NOTE: LP ==> LAST P REGISTER * FAR==> FAULT ADDRESS REGISTER * P38:R COPY =2,A TURN ON TRANSLATION ENABLE OUT A,5 COPY =:E000,X POINT TO PAGE :38 COPY 0(X),A TEST READ SST 2 BAD PARITY? JMP $+2 ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P38:R1 NO, CHECK READ THROUGH MAP IN 3,A GET LP IN 7,Y GET FAR,CLEAR FLAGS ERROR: FAULT,ON,ALLOWED,READ,-,A=LP,Y=FAR JMP P38:F * * DATA1 WORD :5555 DATA2 JMP *$+1 DATA3 WORD :0000 PAAAA WORD :AAAA LP:POS WORD 0 LAST P TEST WORD LPFCH WORD 0 STORE P OF FETCH WORD 0 STORE P BEFORE FETCH FOR RETURN * * P38:R1 CSK A,DATA1 NOP ERROR: READ,THROUGH,MAP,DID,NOT,WORK P38:F OUT A,4 RESET MAP, TBIT OFF COPY =$+5,A SET UP FETCH TEST COPY A,2(X) COPY =2,A RE-ENABLE TRANSLATION OUT A,5 JMP 1(X) TEST FETCH NOP SST 2 BAD PARITY? JMP $+2 NO  ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P38:W NO, FETCH OK IN 3,A GET LP IN 7,Y GET FAR,CLEAR FLAGS ERROR: FAULT,ON,ALLOWED,FETCH,-,A=LP,Y=FAR P38:W COPY =$+3,A COPY A,LP:POS COPY PAAAA,A TEST WRITE COPY A,3(X) SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P38:W1 NO, SHOULD HAVE JMP P38:W2 YES, OK P38:W1 EQU $ ERROR: SHOULD,TRAP,-,WRITE,NOT,ALLOWED JMP P39:R P38:W2 IN 3,A GET LP COPY =P38:W+3,Q GET CORRECT VALUE FOR LP CSK A,Q COMPARE THEM NOP ERROR: LASTP,IN,AREG,SHOULD,=,QREG IN 7,A GET FAR, CLEAR ERROR FLAGS COPY X,Q ADD =3,Q GET CORRECT VALUE FOR FAR CSK A,Q COMPARE THEM NOP ERROR: FAULT,ADDRESS,IN,AREG,SHOULD,=,QREG ***** PATCH FOR LOOPING ***** JMP P38:R ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=5 NOP ERROR: PCOUNT,SHOULD,=5 TITL * TEST MODES ON PAGE :39 * READ/WRITE ALLOWED * P39:R COPY =:E400,X POINT TO PAGE :39 COPY 0(X),A TEST READ SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P39:R1 NO, CHECK READ THROUGH MAP IN 3,A GET LP IN 7,Y GET FAR,CLEAR FLAGS ERROR: FAULT,ON,ALLOWED,READ,-,A=LP,Y=FAR JMP P39:F P39:R1 CSK A,DATA1 NOP ERROR: READ,THROUGH,MAP,DID,NOT,WORK P39:F OUT A,4 RESET MAP, TURN OFF TRANSLATION COPY =$+7,A SET UP FETCH TEST COPY A,2(X) COPY =$+7,A COPY A,LPFCH+1 STORE P FOR RETURN FROM FETCH  COPY =:E401,A COPY A,LPFCH STORE P OF FETCH COPY =2,A RE-ENABLE TRANSLATION OUT A,5 P39:F1 JMP 1(X) TEST FETCH NOP SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P39:F2 NO, SHOULD HAVE TRAPPED JMP P39:F3 YES, CHECK REGISTERS P39:F2 EQU $ ERROR: SHOULD,TRAP,-,FETCH,NOT,ALLOWED JMP P39:W P39:F3 IN 3,A GET LP COPY X,Q GET CORRE8 CT VALUE FOR LP ADD =1,Q CSK Q,A COMPARE THEM NOP ERROR: LASTP,IN,AREG,SHOULD,=,QREG IN 7,A GET FAR, CLEAR FLAGS CSK A,Q NOP ERROR: FAR,IN,AREG,SHOULD,=,QREG P39:W COPY PAAAA,A TEST WRITE COPY A,3(X) SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P39:W1 NO, WRITE OK IN 3,A YES, GET LP IN 7,Y GET FAR,CLEAR FLAGS ERROR: FAULT,ON,ALLOWED,WRITE,-,A=LP,Y=FAR GLPOL: ***** PATCH FOR LOOPING ***** P39:W1 EQU $ JMP P39:R ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=6 NOP ERROR: PCOUNT,SHOULD,=6 TITL * * TEST MODES ON PAGE :3A * THIS PAGE IS NOT MAPPED * P3A:R COPY =:E800,X POINT TO PAGE :3A COPY =$+2,A COPY A,LP:POS COPY 0(X),A TEST READ SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P3A:R1 NO, SHOULD HAVE TRAPPED JMP P3A:R2 YES, CHECK REGISTERS P3A:R1 EQU $ ERROR: SHOULD,TRAP,-,READ,NOT,ALLOWED JMP P3A:F P3A:R2 IN 3,A GET LP COPY =P3A:R+3,Q GET CORRECT VALUE FOR LP CSK A,Q COMPARE THEM NOP ERROR: LASTP,IN,AREG,SHOULD,=,QREG IN 7,A GET FAR, CLEAR FLAGS CSK A,X COMPARE ADDRESSES NOP ERROR: FAR,IN,AREG,SHOULD,=,XREG P3A:F OUT A,4 RESET MAP, TURN OFF TRANSLATION COPY =$+7,A SET UP FETCH TEST COPY A,2(X) COPY =$+7,A COPY A,LPFCH+1 STOR P FOR RETURN FROM FETCH COPY =:E801,A COPY A,LPFCH STORE P OF FETCH COPY =2,A RE-ENABLE TRANSLATION OUT A,5 P3A:F1 JMP 1(X) TEST FETCH NOP SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P3A:F2 NO, SHOULD HAVE TRAPPED JMP P3A:F3 YES, CHECK REGISTERS P3A:F2 EQU $ ERROR: SHOULD,TRAP,-,FETCH,NOT,ALLOWED JMP P3A:W P3A:F3 IN 3,A GET LP COPY X,Q GET CORRECT VALUE FOR LP ADD =1,Q CSK A,Q COMPARE THEM NOP ERROR: LASTP,IN,AREG,SHOULD,=,QREG IN 7,A GET FAR, CLEAR FLAGS CSK A,Q NOP ERROR: FAR,IN,AREG,SHOULD,=,QREG P3A:W COPY =$+3,A COPY A,LP:POS COPY PAAAA,A TEST WRITE COPY A,3(X) SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P3A:W1 NO, SHOULD HAVE JMP P3A:W2 YES, OK P3A:W1 EQU $ ERROR: SHOULD,TRAP,-,WRITE,NOT,ALLOWED JMP P3B:R P3A:W2 IN 3,A GET LP COPY =P3A:W+3,Q GET CORRECT VALUE FOR LP CSK A,Q COMPARE THEM NOP ERROR: LASTP,IN,AREG,SHOULD,=,QREG IN 7,A GET FAR, CLEAR ERROR FLAGS COPY X,Q ADD =3,Q GET CORRECT VALUE FOR FAR CSK A,Q COMPARE THEM NOP ERROR: FAULT,ADDRESS,IN,AREG,SHOULD,=,QREG ***** PATCH FOR LOOPING ***** JMP P3A:R ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=7 NOP ERROR: PCOUNT,SHOULD,=7 JMP P3B:R LPOOL TITL * TEST MODES ON PAGE :3B * READ,WRITE, & FETCH ALLOWED * P3B:R COPY =:EC00,X POINT TO PAGE :3B COPY 0(X),A TEST READ SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P3B:R1 NO, CHECK READ THROUGH MAP IN 3,A GET LP IN 7,Y GET FAR, CLEAR ERROR FLAGS ERROR: FAULT,ON,ALLOWED,READ,-,A=LP,Y=FAR JMP P3B:F P3B:R1 CSK A,DATA1 NOP ERROR: READ,THROUGH,MAP,DID,NOT,WORK P3B:F OUT A,4 RESET MMU,TURN OF TRANSLATION COPY =$+5,A SET UP FETCH TEST COPY A,2(X) COPY =2,A RE-ENABLE TRANSLATION OUT A,5 JMP 1(X) TEST FETCH NOP SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P3B:W NO, FETCH OK IN 3,A GET LP IN 7,Y GET FAR, CLEAR ERROR FLAGS ERROR: FAULT,ON,AL9 LOWED,FETCH,-,A=LP,Q=NLP,Y=FAR P3B:W COPY PAAAA,A TEST WRITE COPY A,3(X) SST 2 BAD PARITY? JMP $+2 NO ERROR: TRANSLATION,TABLE,PARITY,ERROR SST 4 ACCESS ERROR? JMP P3B:END NO, WRITE OK IN 3,A YES, GET LP IN 7,Y GET FAR, CLEAR ERROR FLAGS ERROR: FAULT,ON,ALLOWED,WRITE,-,A=LP,Q=NLP,Y=FAR ***** PATCH FOR LOOPING ***** P3B:END EQU $ JMP P3B:R ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=8 NOP ERROR: PCOUNT,SHOULD,=8 LPOOL * * * * THIS TEST EXECUTES AND TIMES A SHORT LOOP WITHIN A 1K PAGE BOUNDARY * AND THEN DOES IT AGAIN ACROSS A 1K PAGE BOUNDARY. THE TIMES ARE * CONVERTED TO A RATIO AND COMPARED TO FIXED LIMITS. * TRANSLATION MUST BE ENABLED TO SEE A PERFORMANCE INPROVEMENT * . THE TEST IS REPEATED ACROSS ALL NON-PROGRAM PAGES FOR ALL * USER NUMBERS. * * LAL1 EQU $ COPY MAPTYPE,A CHECK FOR MAP WITHOUT CACHE JEQ A,$+2 JMP LAL:END IF NOT JUMP OUT JST INITB4 INITIALIZE TABLE COPY =0,A COPY A,USERNO INITIALIZE USER NUMBER LAL6 COPY H03FA,X INITIALIZE PAGE COUNT TO 1 BOUNDARY MINUS 4 ADD PAPROG,X MOVE TO FIRST PAGE BOUNDARY AFTER PROGRAM  COPY X,MEMLOC LAL2 COPY USERNO,A COPY MEMLOC,X OUT A,6 SET CURRENT USER NUMBER COPY INST11,A SET UP LOOP WITHIN 1K PAGE BOUNDARY COPY A,0(X) NOP - :XXXA COPY INST22,A COPY A,1(X) JMP2(X) - :XXXB  COPY INST33,A COPY A,2(X) ADD =1,A - :XXXC COPY INST44,A COPY A,3(X) JMP0(X) - :XXXD COPY =:93,Q COPY Q,RTCV COPY =LAL25,Q COPY Q,:93 RBIT CLKEN,S DISABLE RTC INTERRUPT COPY =-2,A SET COUNT TO TWO TICKS COPY A,:91 COPY =0,A COPY A,HITCNT INITIALIZE HIT COUNTER SBIT CLKEN,S ENABLE RTC INTERRUPT SBIT INTENA,S GLOBAL INTERRUPT ENABLE JMP $ LAL25 ENT RTC HAS BEEN INITIALIZED TO A STARTING POINT COPY =LAL3,Q SETUP RTC VECTOR LOCATION COPY Q,:93 COPY =-2,A SET UP COUNT TO TWO TICKS  COPY A,:91 SBIT CLKEN,S ENABLE RTC INTERRUPT BIT SBIT INTENA,S ENABLE GLOBAL INTERRUPTS JMP 0(X)  GO TO LOOP LPOOL LAL3 ENT COPY A,HITCNT SAVE HIT COUNT COPY MEMLOC,X COPY INST11,A SET UP LOOP ACROSS BOUNDARY ADD =4,X COPY A,0(X) NOP - :XXXE COPY INST22,A COPY A,1(X)  JMP 2(X) - :XXXF COPY INST33,A COPY A,2(X) ADD =1,A - :XXX0 COPY INST44,A COPY A,3(X) JMP 0(X) - :XXX1 COPY =LAL35,Q SET UP RTC INTERRUPT VECTOR COPY Q,:93 RBIT CLKEN,S  COPY =-2,A SET UP TWO TICKS COPY A,:91 COPY =0,A COPY A,MISCNT INITIALIZE MISS COUNT AND A REGISTER SBIT CLKEN,S SBIT INTENA,S JMP $ LAL35 ENT RTC HAS BEEN INITIALIZED TO STARTING POINT  COPY =LAL4,Q SET UP RTC VECTOR LOCATION COPY Q,:93 COPY =-2,A SET COUNT TO TWO TICKS COPY A,:91  SBIT INTENA,S ENABLE GLOBAL INTERRUPTS JMP 0(X) GO TO LOOP LAL4 ENT COPY A,MISCNT COPY =0,A GET READY TO MULTIPLY COPY =100,Q MUL MISCNT,AQ COMPUTE RATIO OF HITS TO MISS DIV : HITCNT,AQ CSK Q,HILIM22 COMPARE TO HIGH LIMIT JMP $+2 HLT ERROR - OVER LIMIT BOUND  NOP CSK Q,LOLIM22 COMPARE TO LOW LIMIT BOUND HLT ERROR - UNDER LIMT BOUND NOP LAL5 COPY =:400,A ADD MEMLOC,A COPY A,MEMLOC CSM A,HFFFA SKIP LAST PAGE BOUNDARY OF MEMORY  JMP LAL2 DO NEXT PAGE NOP SBIT 10,S AFTER 1ST MAP GO TO USER MODE IMS USERNO BUMP USER NUMBER COPY USERNO,A CHECK IF ALL USERS DONE CLSN A,=:10 JMP $+5 SHIFT A,L,4 ADD =7,A SELP A,4 JMP LAL6 NO? GO DO NEXT MAP NUMBER RBIT 10,S RETURN TO SYSTEM MODE  OUT A,4 RESET MMU SBIT 8,S ENABLE INTERRUPTS JMP LAL:END GO TO EXIT LPOOL * * * *  THIS SUBROUTINE INITIALIZES THE TRANSLATION TABLE SO THAT ALL * 15 USER MAPS POINT TO THE FIRST 64K OF PHYSICAL MEMORY. * IT DETERMINES THE PAGE AFTER THE END OF THE PROGRAM (PAPROG) * THIS ROUTINE LEAVES THE TRANSLATION ENABLED AND IN SYSTEM MODE. * * * INITB4 ENT COPY =1,A OUT A,4 INITIALIZE MMU OUT A,5 ENABLE TABLE ACCESS ONLY COPY HFC00,X GET TABLE START ADDRESS COPY =-:10,A COPY A,MAPCNT SET MAP NUMBER COUNTER INIT43 COPY =:3000,A GET MAP SKELETON DATA INIT41 COPY A,0(X) STORE DATA IN MAP ADD =1,A ADD =1,X  BUMP TABLE ADDRESS TBIT 6,A CHECK IF UP TO END OF SELECTED MAP JT OV,$+2 JMP INIT41  IMS MAPCNT JMP INIT43 DO NEXT MAP NOP COPY =PATEND,A GET END OF PROGRAM ADDRESS AND HFC00,A MASK OFF ALL BUT PAGE # BITS ADD H0400,A ADD ONE PAGE COPY A,PAPROG SAVE FOR LOOK-AHEAD LATCH TEST COPY =2,A OUT A,5 TURN TRANSLATION ON, TABLE ACCESS OFF JMP *INITB4 LPOOL LAL:END EQU $ IMS PCOUNT COPY PCOUNT,A CSK A,=9 CHECK TO SEE IF TEST HAS BEEN COMPLETED NOP HLT COPY RTCV,Q COPY Q,:93 COPY =UMT1,A RESTORE MEMORY EXECPTION TRAP COPY A,UNMEM3  JMP G00 LPOOL * * * H03FA WORD :03FA TOTPGS WORD 0 H02FA WORD :02FA H0400 WORD :0400 USERNO WORD 0 INST11  NOP INST22 JMP 2(X) INST33 ADD =1,A INST44 JMP 0(X) HITCNT WORD 0 MEMLOC WORD 0 CLKEN EQU 5 INTENA EQU 8 MISCNT WORD 0 HILIM22 WORD :60 LOLIM22 WORD :55 MAPCNT WORD 0 PAPROG WORD 0 HFC00 WORD :FC00 HFFFA WORD :FFFA RTCV  WORD 0 TITL TEST MMU DMA MAPPING CAPABILITY ******************************************************************* * * *  --- MULTIPLE MAP DMA TRANSFER TEST --- * THIS DMA TEST IS DESIGNED TO TEST THE ABILITY OF THE * MMU TO HANDLE DMA TRANSFERS TO SEPERATE MAPS. * THE TEST STARTS WITH DMA MAP #1 AND DOES A ONE WORD * DMA TRANSFER. THE TRANSFER IS THEN VERIFIED BY CHECKING * FIVE MAPS (0,1,2,4,8), ASSURING IT WAS WRITTEN INTO ONLY * ITS RESPECTIVE MAP SPACE. SIMILARLY MAPS 2,4, AND 8 ARE * TESTED. THIS ALLOWS TESTING OF ALL FOUR MAP CONTROL LINES. * * ****************************************************************; **** * * * * G00 EQU $ SBIT 6,S SET EXTENDED ADRESSING BUF0 EQU :7FFF SET BUFFER ADDRESS USRNMB WORD 1 SET INITIAL USER NUMBER DMANMB WORD 1 SET INITIAL DMA NUMBER RBIT 10,S SET SYSTEM MODE COPY =:D007,X DISPLAY TEST NUMBER SELP X,4 AND DMA MAP UNDER TEST COPY =0,A IN :50,A CHECK FOR I/O MODULE RESPONSE CLSN =:AF,A JNE A,$+3 IF PRESENT CONTINUE JMP *$+1 IF NOT GO TO NEXT TEST WORD CACHE OUT A,:04 RESET MMU COPY =1,A OUT A,5 ENABLE TRANSLATION TABLE ACESS SET1UP EQU $ SET UP SYSTEM MAP COPY =:FC00,X STARTING TRANSLATION TABLE ADDRES COPY =:FC40,Y UPPER MAP LIMIT COPY =:3000,A CODE FOR READ/WRITE/FETCH SET2UP EQU $ COPY A,0(X) FILL TABLE ADD =1,A ADD =1,X CSK X,Y JMP SET2UP CONTINUE UNTIL DONE NOP SET3UP EQU $ SET UP MAP #1 COPY =:FC40,X COPY =:FC7F,Y COPY =:3000,A SET4UP EQU $ COPY A,0(X) ADD =1,A ADD =1,X CSK X,Y JMP SET4UP CONTINUE UNTIL DONE NOP SET5UP EQU $ SET UP MAP #2 COPY =:FC80,X COPY =:FCBF,Y COPY =:3000,A SET6UP EQU $ COPY A,0(X) ADD =1,A ADD =1,X CSK X,Y JMP SET6UP CONTINUE UNTIL DONE NOP SET7UP EQU $ SET UP MAP #4 COPY =:FD00,X COPY =:FD3F,Y COPY =:3000,A SET8UP EQU $ COPY A,0(X) ADD =1,X ADD =1,A CSK X,Y JMP SET8UP CONTINUE UNTIL DONE NOP SET9UP EQU $ SET UP MAP #8 COPY =:FE00,X COPY =:FE3F,Y COPY =:3000,A SETAUP EQU $ COPY A,0(X) ADD =1,X ADD =1,A CSK X,Y JMP SETAUP CONTINUE UNTIL DONE NOP OVERWRITE MAP FOR SPECIFIC TRANSLATION COPY =:303B,A SET TRANSLATION ADDRESS = EFFF COPY A,:FC5F PUT IN 32K PAGE POINTER OF MAP 1 COPY =:303C,A SET TRANSLATION ADDRESS = F000 COPY A,:FC9F PUT IN 32K PAGE POINTER OF MAP 2 COPY =:303D,A SET TRANSLATION ADDRESS = F400 COPY A,:FD1F PUT IN 32K PAGE POINTER OF MAP 4 COPY =:303E,A SET TRANSLATION ADDRESS = F800 COPY A,:FE1F PUT IN 32K PAGE POINTER OF MAP 8 OUT A,4 DISABLE TABLE ACESS BIT AND RESET MMU COPY =2,A ENABLE TRANSLATION TABLE OUT A,5 RBIT 10,S SET SYSTEM MODE JMP G05 JUMP OVER LPOOL LPOOL G05 COPY =0,A LOAD ALL BUFFER LOCATIONS WITH ZERO COPY A,:7FFF MAP0 BUFFER LOCATION COPY A,:EFFF MAP1 BUFFER LOCATION COPY A,:F3FF MAP2 BUFFER LOCATION COPY A,:F7FF MAP4 BUFFER LOCATION COPY A,:FBFF MAP8 BUFFER LOCATION COPY USRNMB,Q SET UP DISPLAY FOR CURRENT SHIFT Q,L,8 MAP NUMBER OR =:D007,Q SELP Q,4 OUTPUT TO DATA REGISTER * * COPY =:62,X SET X REGISTER FOR INTERRUPT LOCATION LOADING SELP A,DA0B;FC6 INITIALIZE IO MODULE SBIT 8,S ENABLE INTERRUPTS COPY =G10,A SET DMA INTERRUPT LOCATION COPY A,1(X) COPY INTO LOCATION :63 COPY PTAA55,A STORE DMA WORD TO BE TRANSFERRED OUT A,DA15;FC0 PUT INTO DMA REGISTER COPY =1,A SET DMA WRITE MODE OUT A,DA0C;FC2 COPY =BUF0,Y ADDRESS OF DMA BUFFER OUT Y,DA0C;FC1 COPY USRNMB,X OUT X,:06 SET USER NUMBER COPY DMANMB,Q OUT Q,:07 SET DMA NUMBER * * COPY =0,A SELP A,DA0C;FC2 START DMA NOP NOP HLT DMA EOB INTERRUPT NOT RECIEVED JMP G20 ERROR EXIT G10 EQU $ ENT IN DA0C;FC2,A GET DMA STATUS WORD AND =7,A MASK OFF UNWANTED BITS JEQ A,$+2 HLT --ERROR--DMA FAILED--AREG = DMA ERROR STATUS AS FOLLOWS * BIT0 = NO SACK 10 USEC AFTER STOP * BIT1 = NO MACK 10 USEC AFTER STOP * BIT2 = NO DMA PRIORITY IN * * SBIT 10,S SET USER MODE TO RETRIEVE DATA COPY BUF0,A COPY CONTENTS OF BUFFER INTO A REGISTER COPY =0,Q RBIT 10,S SET SYSTEM MODE CSK A,PTAA55 COMPARE<  CONTENTS WITH EXPECTED VALUE NOP HLT ERROR DMA WORD DOES NOT EQUAL EXPECTED WORD * EXPECTED = AA55 *  ACTUAL = A REGISTER * DMA MAP # = X REGISTER * BUFFER LOCATIONS *  MAP0 = :7FFF * MAP1 = :EFFF * MAP2 = :F3FF * MAP4 = :F7FF *  MAP8 = :FBFF CSK A,:00 COMPARE VALUE TO MAP0 NOP IF IT DOESN'T COPMARE GO TO NEXT JMP $+2 MAP COPY =:8000,Q IF IT DOES PUT 8000 IN QREG CSK A,:EFFF COPMARE TO MAP1. IF NO MATCH NOP GO TO NEXT MAP. IF MATCH OCCURS ADD JMP $+2 MAP NUMBER TO THE Q REGISTER ADD =1,Q CSK A,:F3FF COMPARE TO MAP2. NOP JMP $+2 ADD =2,Q IF MATCH ADD MAP NUMBER CSK A,:F7FF COMPARE TO MAP4 NOP JMP $+2 ADD =4,Q IF MATCH ADD MAP NUMBER CSK A,:FBFF COMPARE TO MAP8 NOP JMP $+2 ADD =8,Q IF MATCH ADD MAP NUMBER COPY DMANMB,X CSK Q,DMANMB COMPARE MAP NUMBER WHERE DATA NOP SHOULD BE TO MAP NUMBER WHERE DATA WAS FOUND HLT ERROR - DATA FOUND IN MAPS OTHER THAN * THE MAP DESIGNATED BY THE MAP NUMBER * MAP EXPECTED--X REGISTER * MAPS WHERE DATA FOUND--Q REGISTER * BUFFER LOCATIONS * MAP0 = :7FFF * MAP1 = :EFFF * MAP2 = :F3FF * MAP4 = :F7FF * MAP8 = :F8FF COPY USRNMB,Q COPY =0,A MUL =2,AQ COPY Q,USRNMB SET UP TO CHECK MAPS 1,2,4,8 COPY Q,DMANMB SUB =8,Q JLE Q,G30 CONTINUE UNTIL DONE G20 JMP G00 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP RBIT 6,S RESET EXTENDED ADRESS BIT RBIT 10,S SET SYSTEM MODE COPY =1,A COPY A,USRNMB RETURN USER NUMBER TO INITIAL VALUE COPY A,DMANMB SAME FOR DMA NUMBER JMP CACHE JUMP TO NEXT TEST G30 JMP G05 TO ELIMINATE RANGE ERRORS SAVE LPOOL * * TITL CACHE TESTS --- CBIT TEST (CACHE HITS ENABLE) * * THIS CODE TESTS THE INTEGRITY OF THE CACHE LOGIC * ON THE MEMORY MANAGEMENT UNIT. * THIS TEST MUST RESIDE IN THE LOWER 16K OF PHYSICAL * MEMORY IN ORDER TO OPERATE PROPERLY. MAPPING IS DISABLED. * CACHE EQU $ JST CHKMAP CHECK 4 OR 16 MAP COPY MAPTYPE,A JNE A,$+2 DO CACHE TEST IF 16 MAP JMP PART6ST DON'T DO CACHE TEST IF 4 MAP COPY DEMAND,A AND =:100,A JGT A,$+2 JMP PART6ST OUT A,4 RESET MMU COPY =8,A SELP A,4 COPY =MEMTRAP,A COPY A,UNMEM1+2 COPY =0,A COPY A,IDPCNT SET UP LOOP COUNTER PART5D COPY =0,A COPY A,PCOUNT * THIS TEST CHECKS TO SEE THAT THE CBIT * (CACHE ENABLE) FUNCTIONS PROPERLY. * 1) NO HIT SHOULD OCCUR WHEN C=0 AND R=0. * 2) WITH C=1, HIT SHOULD OCCUR ONLY AFTER * SECOND READ OF LOCATION. * 3) NO HIT SHOULD OCCUR ON FIRST READ TO *  LOCATION+:400 (1024). * 4) HIT SHOULD OCCUR ON SECOND READ TO * LOCATION+:400. * 5) HIT SHOULD NOT OCCUR ON NEXT READ TO * LOCATION. * 6) IN STEPS 2) THRU 5) , THE CACHE IS * CHECKED FOR PARITY ERRORS. CBIT EQU $ JST CACHECLR OUT A,4 RESET MMU COPY $,A READ THIS LOCATION TWICE(AS INST & DATA) IN 5,A CHECK FOR A HIT (R=0,C=0) TBIT 5,A TEST HIT BIT JF OV,CBIT1 ERROR: HITS,ARE,INDICATED,WHEN,CACHE,IS,OFF * HALTS HERE IF MMU CACHE SWITCH IS FORCED ON. * BE SURE MMU CACHE SWITCH IS IN CENTER POSITION. IN 7,Q RESET HBIT CBIT1 COPY =8,A ENABLE CACHE OUT = A,5 COPY CBDATA,A TEST CACHE BIT WHEN ON IN 5,A HIT? TBIT 5,A JF OV,$+2 ERROR: HIT,INDICATED,ON,FIRST,READ,TO,A,LOCATION TBIT 6,A TEST CACHE PARITY JF OV,CBIT2 BAD PARITY? ERROR: BAD,PARITY,ON,CACHE CBIT2 IN 7,Q RESET FLAGS COPY CBDATA,A TEST SECOND READ OF CBDATA IN 5,A HIT? TBIT 5,A JT OV,$+2 ERROR: HIT,SHOULD,BE,INDICATED,ON,SECOND,READ * HALTS HERE IF MMU CACHE SWITCH IS FORCED OFF. * BE SURE MMU CACHE SWITCH IS IN CENTER POSITION. TBIT 6,A TEST CACHE PARITY JF OV,CBIT3 ERROR: BAD,PARITY,IN,CACHE CBIT3 IN 7,Q RESET FLAGS COPY CBDATA+:400,A TEST CACHE HIT FOR CBDATA+:400 IN 5,A HIT? TBIT 5,A JF OV,$+2 ERROR: HIT,INDICATED,ON,FIRST,READ,TO,A,LOCATION TBIT 6,A BAD PARITY? JF OV,CBIT4 ERROR: BAD,PARITY,ON,CACHE CBIT4 IN 7,Q RESET FLAGS COPY CBDATA,A READ CBDATA AGAIN IN 5,A HIT? TBIT 5,A JF OV,$+2 ERROR: CACHE,DOES,NOT,UPDATE,CORRECTLY,ON,READS TBIT 6,A CACHE PARITY ERROR? JF OV,CBIT5 ERROR: BAD,PARITY,ON,CACHE CBIT5 OUT A,4 RESET MMU OUT A,4 2ND RESET TO INSURE NEXT MEMORY REFERENCE DOES NOT CACHE ***** PATCH FOR LOOPING ***** JMP CBIT ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=1 NOP ERROR: PCOUNT,SHOULD,=1 TITL CACHE TESTS -- RBIT TEST (RESTRICTED CACHE HITS ENABLE) * RBIT TEST (RESTRICTED CACHE HITS ENABLE) * * THIS TEST CHECKS TO SEE THAT THE RBIT PREFORMS AS SPECIFIED. * THE FOLLOWING IS DONE: * 1) RBIT IN CONTROL REGISTER IS CHECKED * 2) 1K WORDS BELOW 16K (PHYSICAL) IS READ TWICE. * 3) HBIT CHECKED AFTER SECOND READ OF EACH WORD. * 4) 1K WORDS ABOVE 16K IS READ TWICE. * 5) HBIT CHECKED AFTER SECOND READ FOR PROPER SETTING. * RBIT0 EQU $ COPY =:18,A OUT A,5 ENABLE RESTRICTED CACHE HITS COPY =0,A CLEAR AREG IN 5,A GET CONTROL REGISTER TBIT 4,A RBIT SET? JT OV,$+2 ERROR: RESTRICTED,CACHE,HITS,ENABLE,BIT,DID,NOT,SET JST CACHECLR COPY =:3FF,Y COUNTER FOR 1K READS COPY 0(Y),A READ MEMORY BELOW 16K JNED Y,$-1 COPY =:3FF,Y SET UP FOR SECOND READ RBIT COPY 0(Y),A READ BELOW 16K AGAIN IN 5,A GET CONTROL & STATUS REGISTER TBIT 5,A HIT? JF OV,RBIT1 ERROR: CACHE,DOES,NOT,RESTRICT,BELOW,16K IN 7,Q READ FAULT REG. TO CLEAR FLAGS RBIT1 JNED Y,RBIT COPY =:3FF,Y SET COUNTER FOR 1K READS COPY =:5000,X ANY LOCATION ABOVE 16K RBIT2 COPY 0(X),A READ MEMORY ABOVE 16K IN 5,A INPUT CONTROL REGISTER TBIT 5,A HIT? JF OV,RBIT3 ERROR: HIT,OCCURRED,ON,FIRST,READ,AT,LOC,IN,XREG IN 7,Q READ FAULT REG. TO CLEAR FLAGS RBIT3 ADD =1,X INCREMENT POINTER JNED Y,RBIT2 COPY =:3FF,Y SET COUNTER FOR 1K READS COPY =:5000,X POINT TO FIRST LOC OF BLOCK RBIT4 COPY 0(X),A READ MEMORY ABOVE 16K (SECOND TIME) IN 5,A GET CONTROL REGISTER TBIT 5,A HIT? JT OV,RBIT5 ERROR: HIT,BIT,SHOULD,SET,ON,SECOND,READ * HALTS HERE IF MMU CACHE SWITCH IS FORCED OFF. * BE SURE MMU CACHE SWITCH IS IN CENTER POSITION. IN 7,Q READ FAULT REG. TO CLEAR FLAGS RBIT5 ADD =1,X INCREMENT POINTER JNED Y,RBIT4 OUT A,4 ***** PATCH FOR LOOPING ***** JMP RBIT0 ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=2 NOP ERROR: PCOUNT,SHOULD,=2 JMP UPDATE CBDATA WORD 0 LPOOL * * SUBROUTINE TO CLEAR THE CACHE OF DATA THAT MAY AFFECT * THE OPERATION OF THE TESTS WITHIN THE CACHE DIAGNOSTIC. * CACHECLR ENT COPY =:18,A ENABLE RESTRICTED CACHE HITS OUT A,5 COPY =:6000,X MUST READ 1K WORDS OTHER > THAN TEST AREAS COPY =:6400,Y TO CLEAR CACHE. CCLR1 COPY 0(X),A READ FROM 1K AREA ADD =1,X CSK X,Y JMP CCLR1 NOP IN 7,A CLEAR ALL FAULT FLAGS JMP *CACHECLR TITL CACHE TESTS --- UPDATE & HIT RULES TESTING * * THIS SECTION TESTS TO SEE THAT THE CACHE DOES NOT UPDATE * AND WILL NOT HAVE A HIT IF THE DATA HAS BEEN * PREVIOUSLY STORED AS AN ENTRY IN THE CACHE. * THE FOLLOWING CONDITIONS ARE CHECKED HERE: * 1) BYTE READ AND BYTE WRITE * 2) TRANSLATION TABLE ACCESS * 3) ACCESS FAULT * 4) ECC READ * 5) ECC WRITE * UPDATE EQU $ * * TEST BYTE READ FOR UPDATE AND HITS * JST CACHECLR COPY =:18,A ENABLE THE CACHE OUT A,5 COPY BYDATA,X GET WORD ADDRESS SHIFT X,LO,1 CHANGE TO BYTE ADDRESS SBIT BM,S SET BYTE MODE COPYB 0(X),Q READ A BYTE RBIT BM,S RESET BYTE MODE IN 5,Q TEST FOR HIT TBIT 5,Q JF OV,$+2 ERROR: HIT,INDICATED,DURING,1ST,BYTE,READ TBIT 6,Q JF OV,$+2 CACHE PARITY ERROR? ERROR: CACHE,PARITY,ERROR,DURING,FIRST,BYTE,READ OUT A,4 RESET MMU, CLEAR FLAGS OUT A,5 RE-ENABLE CACHE SBIT BM,S SET BYTE MODE COPYB 0(X),Q READ 2ND TIME RBIT BM,S RESET BYTE MODE IN 5,Q TEST FOR HIT TBIT 5,Q JF OV,$+2 ERROR: HIT,INDICATED,DURING,SECOND,BYTE,READ TBIT 6,Q CACHE PARITY ERROR? JF OV,$+2 ERROR: CACHE,PARITY,ERROR,DURING,SECOND,BYTE,READ OUT A,4 RESET MMU * * TEST BYTE WIRTE FOR MARKED AS INVALID ENTRY AND NO HIT * JST CACHECLR CLEAR THE CACHE COPY =:18,A ENABLE THE CAHCE OUT A,5 COPY BYDATA,X GET WORD ADDRESS COPY 0(X),Q READ A WORD TO UPDATE CACHE IN 7,Q READ FAULT ADDRESS TO CLEAR FLAGS SHIFT X,LO,1 CHANGE TO BYTE ADDRESS SBIT 2,S SET BYTE MODE COPYB Q,0(X) WRITE A BYTE, SHOULD MARKED INVALID RBIT 2,S RESET BYTE MODE IN 5,Q READ STATUS TBIT 5,Q TEST HIT BIT JF OV,$+3 HLT BYTE WRITE SHOULD HAVE NO HIT JMP ABTBYTE ABORT BYTE WRITE TEST TBIT 6,Q TEST CACHE PARITY JF OV,$+3  HLT PARITY ERROR JMP ABTBYTE ABORT BYTE WRITE TEST IN 7,Q READ FAULT ADDR. TO CLEAR FLAGS SBIT 2,S SET BYTE MODE COPYB 0(X),Q READ A BYTE FROM OLD PLACE RBIT 2,S RESET BYTE MODE IN 5,Q READ STATUS TBIT 5,Q TEST HIT BIT JF OV,$+3 HLT BYTE WRITE SHOULD HAVE NO HIT JMP ABTBYTE ABORT BYTE WRITE TEST TBIT 6,Q TEST PARITY ERROR JF OV,$+2 HLT PARITY ERROR ABTBYTE OUT A,4 RESET MMU ***** PATCH FOR LOOPING ***** JMP UPDATE ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=3 NOP ERROR: PCOUNT,SHOULD,=3 JMP UPDATE1 GO DO ACCESS FAULT TEST BYDATA WORD :6401 LPOOL TITL * * TEST ACCESS FAULT FOR UPDATE AND HITS * UPDATE1 EQU $ JST CACHECLR COPY =:FC00,X POINT TO TRANSLATION TABLE (SYSTEM) COPY =:FC40,Y POINT TO USER#1 TABLE SPACE COPY =:3000,A CODE FOR READ/WRITE/FETCH COPY =:19,Q TABLE ACCESS OUT Q,5 ENABLE UPDATE1A COPY A,0(X) ADD =1,A ADD =1,X CSK X,Y JMP UPDATE1A NOP COPY =:FC3A,X POINT TO PAGE NOT TO BE MAPPED COPY =:3A,A CODE FOR NOT MAPPED COPY A,0(X) PUT INTO TABLE COPY =:E800,X GET ADDRESS POINTER TO NOT-MAPPED PAGE COPY DATA2,A GET JMP INDIRECT COPY A,1(X) STORE IN PAGE COPY =$+8,A SET UP FOR FAULT ON READ/FETCH COPY A,2(X) COPY =$+7,A COPY A,LPFCH+1 STORE P FOR RETURN FROM FETCH COPY =:E801,A COPY A,LPFCH STORE P OF FETCH COPY =:1A,A ENABLE TRANSLATION & CACHE OUT A,5 JMP 1(X) FIRST READ/FETCH NOP NEEDED FOR TRAP HANDLING IN 5,A GET ST? ATUS SST 4 ACCESS ERROR? ERROR: SHOULD,TRAP,-,PAGE,IS,NOT,MAPPED TBIT 5,A YES, WAS THERE A CACHE HIT? JF OV,$+2 ERROR: HIT,INDICATED,DURING,FIRST,ACCESS,FAULT IN 7,Q CLEAR FAULT FLAGS COPY =:18,A OUT A,5 TURN OFF TRANSLATION, KEEP CACHE ON COPY =$+8,A COPY A,2(X) COPY =:1A,A OUT A,5 RE-ENABLE TRANSLATION & CACHE COPY =$+5,A COPY A,LPFCH+1 STORE P FOR RETURN FROM FETCH COPY =:E801,A COPY A,LPFCH STORE P OF FETCH JMP 1(X) SECOND TRY NOP IN 5,A GET STATUS SST 4 ACCESS ERROR? ERROR: SHOULD,TRAP,-,PAGE,IS,NOT,MAPPED TBIT 5,A YES, ANY HITS? JF OV,$+3 ERROR: HIT,INDICATED,DURING,SECOND,ACCESS,FAULT IN 7,Q CLEAR FAULT FLAGS OUT A,4 RESET MMU GLPOL: ***** PATCH FOR LOOPING ***** JMP UPDATE1 ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=4 NOP ERROR: PCOUNT,SHOULD,=4 TITL * * TEST TRANSLATION TABLE ACCESS (READ) * FOR UPDATE AND HITS * UPDATE2 EQU $ JST CACHECLR COPY =:FC00,X GET POINTER TO START OF TABLE COPY =:19,A ENABLE CACHE & TABLE ACCESS OUT A,5 COPY 0(X),Q READ FROM TABLE IN 5,Q TBIT 5,Q HIT? JF OV,$+3 ERROR: HIT,INDICATED,DURING,1ST,TABLE,ACCESS (READ) IN 7,A CLEAR FAULT FLAGS TBIT 6,Q CACHE PARITY ERROR? JF OV,$+3 ERROR: CACHE,PARITY,ERROR,DURING,1ST,TABLE,ACCESS,(READ) IN 7,A CLEAR FAULT FLAGS COPY 0(X),Q TRY 2ND READ IN 5,Q GET STATUS TBIT 5,Q HIT? JF OV,$+3 ERROR: HIT,INDICATED,DURING,2ND,TABLE,ACCESS,(READ) IN 7,A CLEAR FAULT FLAGS TBIT 6,Q CACHE PARITY ERROR? JF OV,$+3 ERROR: CACHE,PARITY,ERROR,DURING,2ND,TABLE,ACCESS,(READ) IN 7,A CLEAR FAULT FLAGS OUT A,4 RESET MMU ***** PATCH FOR LOOPING ***** JMP UPDATE2 ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=5 NOP ERROR: PCOUNT,SHOULD,=5 TITL * * TEST TRANSLATION TABLE ACCESS (WRITE) * FOR UPDATE AND HITS * UPDATE3 EQU $ JST CACHECLR COPY =:19,A OUT A,5 ENABLE CACHE & TABLE ACCESS COPY =:FFFF,X POINT TO LAST LOCATION IN TABLE COPY =0,Q CLEAR QREG COPY Q,0(X) TRY FIRST WRITE IN 5,Q GET STATUS TBIT 5,Q HIT? JF OV,$+3 ERROR: HIT,INDICATED,DURING,1ST,TABLE,ACCESS,(WRITE) IN 7,A CLEAR FLAGS TBIT 6,Q CACHE PARITY ERROR? JF OV,$+3 ERROR: CACHE,PARITY,ERROR,DURING,1ST,TABLE,ACCESS,(WRITE) IN 7,A CLEAR FLAGS COPY =0,Q CLEAR QREG COPY Q,0(X) TRY SECOND WRITE IN 5,Q GET STATUS TBIT 5,Q HIT? JF OV,$+3 ERROR: HIT,INDICATED,DURING,2ND,TABLE,ACCESS,(WRITE) IN 7,A CLEAR FLAGS TBIT 6,Q JF OV,$+2 CACHE PARITY ERROR? ERROR: CACHE,PARITY,ERROR,DURING,2ND,TABLE,ACCESS,(WRITE) OUT A,4 RESET MMU ***** PATCH FOR LOOPING ***** JMP UPDATE3 ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=6 NOP ERROR: PCOUNT,SHOULD,=6 TITL * TEST ECC READ FOR UPDATE AND HITS * UPDATE4 EQU $ JST CACHECLR COPY =:18,A ENABLE CACHE OUT A,5 COPY =UPDATA,X GET ADDRESS INTO XREG LODECC * TEST ECC READ IN 5,Q GET STATUS TBIT 5,Q HIT? JF OV,$+3 ERROR: HIT,INDICATED,DURING,FIRST,ECC,READ IN 7,A CLEAR FAULT FLAGS TBIT 6,Q CACHE PARITY ERROR? JF OV,$+3 ERROR: CACHE,PARITY,ERROR,DURING,FIRST,ECC,READ IN 7,A CLEAR FAULT FLAGS LODECC * 2ND ECC READ IN 5,Q GET STATUS TBIT 5,Q HIT? JF OV,$+3 ERROR: HIT,INDICATED,DURING,2ND,ECC,READ IN 7,A CLEAR FAULT FLAGS TBIT 6,Q CACHE PARITY ERROR? JF OV,$+3 ERROR: CACHE,PARITY,ERROR,DURING,2ND,ECC,READ IN 7,A CLEAR FAULT FLAGS COPY UPDATA,A READ THE TEST LOCATION IN 5,Q GET STATUS TBIT 5,Q@  HIT? JF OV,$+3 ERROR: CACHE,UPDATED,DURING,ECC,READ IN 7,A CLEAR FAULT FLAGS TBIT 6,Q CACHE PARITY ERROR? JF OV,$+2 ERROR: CACHE,PARITY,ERROR,DURING,READ OUT A,4 RESET MMU ***** PATCH FOR LOOPING ***** JMP UPDATE4 ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=7 NOP ERROR: PCOUNT,SHOULD,=7 GLPOL: TITL * * TEST ECC WRITE FOR UPDATE * UPDATE5 EQU $ JST CACHECLR COPY =:18,Q OUT Q,5 ENABLE CACHE COPY =UPDATA,X GET ADDRESS COPY =:0E,A ECC FOR :E652 STRECC * STORE ECC IN 5,Q GET STATUS  TBIT 5,Q HIT? JF OV,$+3 ERROR: CACHE,UPDATED,DURING,ECC,WRITE IN 7,Y CLEAR FAULT FLAGS TBIT 6,Q CACHE PARITY ERROR JF OV,$+3 ERROR: CACHE,PARITY,ERROR IN 7,Y CLEAR FAULT FLAGS STRECC * 2ND TRY IN 5,Q GET STATUS TBIT 5,Q HIT? JF OV,$+3 ERROR: CACHE UPDATED DURING 2ND ECC WRITE IN 7,Y CLEAR FAULT FLAGS TBIT 6,Q JF OV,$+2 ERROR: CACHE PARITY ERROR OUT A,4 RESET MMU COPY UPDATA+1,A RESTORE UPDATA COPY A,UPDATA ***** PATCH FOR LOOPING ***** JMP UPDATE5 ORG $-1 NOP IMS PCOUNT COPY PCOUNT,A CSK A,=8 NOP ERROR: PCOUNT,SHOULD,=8 JMP UPDATE6 UPDATA RES 2,:F652 UPDATE6 IMS IDPCNT COPY IDPCNT,A CSK A,=32 JMP PART5D NOP * * * THE MEMORY EXCEPTION TRAP IS RESTORED HERE * TO ITS ORIGINAL CONFIGURATION. * PART5E COPY =UMT1,A COPY A,UNMEM1+2 * * JMP PART6ST LPOOL RES $;:1F-$&:1F+1,0 PART6ST SET $ SAVE END +2 ERROR: CACHE PARITY ERROR OUT A,4 RESET MMU COPY UPDATA+1,A RESTORE UPDATA COPY A,UPDATA ***** PATCH FOR LOOPING ***** JMP UPDATE5 ORG $-1 NOP IMS PCOUNT COPY PCOUNT,IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIB IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIID IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIE IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIF IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIH IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIK IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIL IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII