IMD 1.16: 1/09/2008 10:38:18 84-93077-01 a000 f07701 quad floppy diagnostic - multiple test program test engineering version 11may81  ž ªªž @0‚|†ø)®wÂwЀЀÎtQº®q¦l) ˆ " ž}‚gÿA ¢`œžúž¼žöšèì Mˆ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IOS4 €MÁúE681031220214200810511104007 810511104007FF07701 VOLQUAD FLOPPY DIAG - MULTIPLE TEST PROG. 84-93077-01 A000   ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’Ižúž¼žöšèì Mˆ@†jæjg€ÿígÿèÂg@ †o G€ÿò`úkžŽ¾ôž¾¢_„C# b# ž}€BŸ€ žuÒ[¾æ žþž]e‡ †JÂR¾­æði¾òÀˆÆCÆCp@€„†<€…†;€††:€ƒ †FÂ8P@ G€ÿÁÆ;à‰¾•NÆêP¾éâ×èCHùC €ˆC ˜GÈTºà€qEžç‚â¢'ŸÉž¦ *¦Ã C¦¦ÏŸxÆžì @0DAJ÷LÆ )®ê‘ЀЀΎQBžxªâ" ¦† i¾¦€„œªª+⟠fžE¾ùžB)3žß `jmBˆB¾ I,Ÿv ¾ °¾€B¾ I,ŸmžÊ ž @¬E°E¨F¤F)¤D¾^ÄE‚‚„Fž% †ÊæjHÿÆÄÆÄ@pÆO¾ÄŸv g€ÿ7gÿ4ò]X¾] P¢hâV+ì„s=è„胾cžÆ_†N‚£ ž‡žôŠGŠF¾Öž†›¾ÁžØ¾ø ¦•“@AúLèSÃ)"$ C ž‰žkžøª1žïŠ/žjŠ-ž žhÿöÿÿ ‚p ž…âv¾R†Ÿw ÞpÞpžwâ‚p¾ Þkâižº† ’ŸÂ¢œ€15 !¦^æ\žd ²X‚ žˆò %€À'+ò²NŸs愾Qâ‚)žs ‡EÞDŸ|Ÿ{ @ž$ ož¶ Ož¯ mž­ Jž« Kž© iž¸ gž¶†. žV tž²žì„sFè„n`" FàEžD)ž ¾E`¾CnrgŸy ¾w"¾NÞž{žR¾q1¾HÞ ž}žL¾2`¾0t¾žG¾- ²B¾c ¾(Þ>Þ=Þ<žy¦:ž;¾!ž9¾ü¾/ž5OS:: SYSž¦ž"ªªiüþŒþ‹Âwþ‹þŠÂvc Bc A@6<# þIc B# ÞgIþjHÀc r‡Ÿc ·œ‡›Þš# @0‚X†ß)P ®VÂVЀЀÎSQº®P¦‹pI þN@6 UNIT HAS A DUAL FLOPPY IN IT COPY UNITFLG,A ELSE, ITS SINGLE JEQ A,LASTOUT IF PREVIOUS UNIT ALSO CONTAINED A SINGLE * NO ADJUSTMENT IS NECESSARY  COPY ETRK,A IF IT WAS A DUAL, TRACK COUNTS MUST BE HALVED SHIFT A,RO,1 COPY A,ETRK COPY STRK,A SHIFT A,RO,1 COPY A,STRK COPY TRKS,A SHIFT A,RO,1 COPY A,TRKS COPY ETRKQQ,A SHIFT A,RO,1 COPY A,ETRKQQ COPY STRKQQ,A SHIFT A,RO,1 COPY A,STRKQQ JMP LASTOUT DONE NEWDUAL COPY UNITFLG,A NEW UNIT HAS A DUAL, CHECK LAST UNIT JNE A,LASTOUT LAST UNIT ALSO HAS A DUAL, NO ADJUSTMENT COPY ETRK,A ELSE, IT WAS A SINGLE AND ALL TRACKS MUST BE DOUBLED SHIFT A,LO,1  COPY A,ETRK COPY STRK,A SHIFT A,LO,1 COPY A,STRK COPY TRKS,A SHIFT A,LO,1  COPY A,TRKS COPY ETRKQQ,A SHIFT A,LO,1 COPY A,ETRKQQ COPY STRKQQ,A SHIFT A,LO,1  COPY A,STRKQQ LASTOUT EQU $ COPY DULFLG,A SET FLAG FOR NEXT TIME THRU COPY A,UNITFLG JMP *CHKLAST RETURN * UNITFLG WORD 0 UNITFLG=1==>LAST UNIT HAD A DUAL FLOPPY UNITS: WORD 0 * UNITFLG=0==>LAST UNIT HAD A SINGLE TITL PASS AND TEST SCHEDULERS *RESET PASS COUNT * QU:ER EQU $ XOR A,A COPY A,UN:FL  COPY =-1,A COPY A,PASCTR QUERN1 COPY =0,A COPY A,CYLFLG SET SECOND CYL FLAG COPY A,UNITS: PRESET PASS COUNT JST TOPOFF IMS PASCTR NOP JST MSGA WORD PASSMG COPY PASCTR,A JST ODEC COPY =TBLAD:,A COPY A,ADTBL: COPY *ADTBL:,A COPY A,DEVAD * *PERFORM NEXT PASS, RESET UNIT NUMBERS * REPASS JST RSTADD: JMP CON: RSTADD: ENT COPY DEVAD,A SHIFT A,LO,3 COPY A,TEMP111 COPY =-DALAST+DAFRST,A COPY A,TEMP211 COPY DATBL,A COPY A,TEMP511 DAADZ: COPY *TEMP511,X COPY =-:F9,A AND 0(X),A OR TEMP111,A COPY A,0(X) IMS TEMP511 IMS TEMP211 JMP DAADZ: JMP *RSTADD: TEMP211 WORD 0 TEMP111 WORD 0 TEMP511 WORD 0 UN:FL WORD 0 LPOOL CON: EQU $ COPY =0,A COPY A,RESFLG RESET RESTORE SUB FLAG COPY A,STTFLG CLEAR STATUS SUB FLAG IMS UNITS: BUMP PASS COUNT FOR NEXT PA NOP JT SS,REUNIT SKIP OUTPUT IF SUPPRESSED   JST RUNOVR WORD 4 JST MSGA WORD UNITMG PRINT PASSNO COPY UNITS:,A JST ODEC REUNIT COPY UNINAD,A PRESET UNIT NO POINTER SUB =1,A COPY A,UPTR * *TEST NEXT UNIT, RESET TEST NUMBERS * NUUNIT IMS UPTR BUMP TO NEXT REQUESTED UNIT COPY UPTR,A GET UNIT NO COPY A,UP2 (AVOID **MI WARNING) COPY *UP2,A JGE A,$+2 JMP PASEND END OF TABLE UPON FFFF COPY A,UCUR NO, STORE INTO CURRENT ADD HA0B0,A UNIT. COPY A,PRUNIT SET TO ASCII FOR OUTPUT. JST CHKLAST CHECK LAST UNIT FOR DUAL/SINGLE FLOPPY RETEST COPY TSINAD,A RESET TEST TABLE PTR COPY A,TPTR * *CALL NEXT TEST * NUTEST NOP * * *  COPY INTS,A INTERRUPTS DESIRED? JNE A,NUTST1 NO COPY NUTEST,A GET NOP CODE COPY =0,A  SELP A,:40 THEN ENABLE SBIT 8,S RTC AND DISK INTERRUPTS NUTST1 IMS TPTR BUMP TO NEXT TEST  COPY *TPTR,A GET TEST NO. JLT A,CYLTRY END OF TABLE IF FFFF JEQ A,NUTST1 SKIP TEST COPY A,X JST 0(X) EXECUTE THE TEST JMP TSTEND THEN RETURN TO TESTEND HA0B0 WORD :2030 ASCII MASK UP2 WORD  0 INDIRECT POINTER TPTR WORD 0 ADTBL: WORD 0 LPOOL TITL * GET NEXT SET OF CYL RANGE FOR THIS UNIT * * CYLTRY JST CYLNXT DETERMINE IF ANOTHER CYL RANGE REQD JMP NUUNIT NO CYL RANGE FURTHER REQD NOW... IMS PASCTR  JST MSGA WORD PASSMG COPY PASCTR,A JST ODEC JMP RETEST SECOND CYL RANGE ... GO THRU TESTS AGAIN! * * * *END OF TEST. OUTPUT ERROR TALLIES * TSTEND JST RUNIND FLASH OVERFLOW * TALLY EQU $ DUMP ERR TALLIES COPY SNSREG,A GET SENSE REG SHIFT A,RO,3 JF OV,NUTEST IF WANTED JST ERRTAL CHECK IF INHIBIT ZERO ERRORS PRINTING JST RUNOVR WORD 2 JST MSGA PRINT TITLE WORD TALTTL  COPY =0,A START WITH UNIT 0 COPY A,ERTMP1 TALLY4 COPY UNINAD,X INDEX UNIT TABLE TALLY5 COPY 0(X),A SEE IF UNIT NO IS BG TESTED JLT A,TALLY2 NO, COMPARE NEXT UNIT XOR ERTMP1,A FOUND A UNIT? JEQ A,TALLY1 YES, PRINT THE ERROR COUNTS ADD =1,X NO, COMPARE TO NEXT IN TABL JMP TALLY5 TALLY1 COPY ERTMP1,X JST ERRHS CHECK ZERO ERROR INHIBIT NOP JMP $+2 PRINT ERRORS (NON ZERO OR NOT INHIBITED)  JMP TALLY5 INHIBIT --- ERRORS ARE ZERO JST RUNOVR WORD 1 JST MSGA DO CR/LF  WORD CRLF JST SPACE JST SPACE COPY ERTMP1,A PRINT UNIT NO ADD HB0,A JST OTTY JST SPACE JST SPACE COPY ERTMP1,A ADD TALLY8,A COPY A,QRYZ3 COPY *QRYZ3,A JMP $+3 TALLY8 WORD HARD0 QRYZ3 WORD 0 JST ODEC JST SPACE JST SPACE COPY ERTMP1,A ADD TALLY9,A COPY A,QRYZ3 COPY *QRYZ3,A JMP $+2 TALLY9 WORD SOFT0 JST ODEC JST SPACE COPY ERTMP1,X TALLY2 IMS ERTMP1 BUMP TO NEXT UNIT COPY ERTMP1,A CLS N =4,A ALL DONE? JMP $+2 YES, EXIT JMP TALLY4 PRINT NEXT UNIT TALLIES JST MSGA  FOR THE CURIOUS WORD PASSMG COPY PASCTR,A JST ODEC JMP NUTEST TO NEXT TEST * *END OF PASS * PASEND EQU $ IMS ADTBL: COPY *ADTBL:,A JGE A,$+2 JMP QUERN1 COPY A,DEVAD JMP REPASS TBLAD: WORD :11 WORD :01 WORD :02 WORD :03 WORD :04 WORD :05 WORD :06 WORD :07 WORD :08 WORD :09 WORD :0A WORD :0B WORD :0C WORD :0D WORD :0E  WORD :0F WORD :10 WORD :12 WORD :13 WORD :14 WORD :15 WORD :16 WORD :17 WORD :18 WORD :19 WORD :1A WORD :1B WORD :1C WORD :1D WORD :1E WORD -1 TSINAD WORD PRAMS-1 PTR TO TEST NO TABLE * LPOOL CLOCK ENT COPY A,STA:: SIN 14 COPY =-120,A COPY A,:91 IMS SEC JMP CLDONE COPY =-60,A COPY A,SEC IMS MIN JMP CLDONE COPY =-60,A COPY A,MIN IMS HRS JMP CLDONE JMP FINI CLDONE COPY STA::,A SBIT 8,S JMP *CLOCK STA:: WORD 0 FINI RBIT 8,S RBIT 5,S JST MS:GA WORD TSTCOM: JMP CCW2 TSTCOM: BYTE :0D,:0A,'TEST COMPLETED',:0D,:0A WORD -1 LPOOL TITL * * ERRORS ZERO CHECK * ERRHS ENT COPY FLGQRY,A INHIBIT ZERO ERRORS? JNE A,$+2 JMP *ERRHS NO---EXIT IMS ERRHS YES---CHECK IF NON ZERO  COPY X,A ADD TALLY8,A HARD0 COPY A,QRYZ3 COPY *QRYZ3,A GET # ERRS COPY A,TALSUM SAVE COUNT COPY X,A ADD TALLY9,A SOFT0 COPY A,QRYZ3 COPY *QRYZ3,A GET # ERRS ADD  TALSUM,A TOTAL HARD + SOFT ERRS JEQ A,$+2 JMP *ERRHS NON ZERO---EXIT IMS ERRHS JMP  *ERRHS ZERO ERROR---EXIT * TALSUM WORD 0 SUM OF ERRS LPOOL MS:GA ENT COPY LPFLG,A COPY A,SV: COPY =-1,A COPY A,LPFLG  COPY *MS:GA,A IMS MS:GA COPY A,$+2 JST MSGA WORD 0 COPY SV:,A COPY A,LPFLG JMP *MS:GA SV: WORD 0 LPOOL TITL * ZERO ERROR PRINTING OUT * * INHIBIT ROUTINE * ERRTAL ENT COPY =0,A COPY A,ERR:UN CLEAR # UNITS CHECKED COPY A,ERR:CT CLEAR # UNITS WITH ZERO ERRORS COPY FLGQRY,A CHECK IF INHIBIT REQ'D? JNE A,ERRTL1 JMP *ERRTAL NO---EXIT * ERRTL1 COPY =0,A START WITH UNIT 0 COPY A,ERRTLT TEMP STORAGE ERRTL2 COPY UNINAD,X  GET UNIT TABLE ADR ERRTL3 COPY 0(X),A SEE IF UNIT IS TESTED JLT A,ERRTL4 NO---GET NEXT UNIT XOR ERRTLT,A FOUND UNIT? JEQ A,ERRTL5 YES,---CHK ERR COUNTS ADD =1,X NO,---COMPARE NXT UNIT IN TABLE JMP ERRTL3 * ERRTL5 IMS ERR:UN INCREMENT COUNT OF #UNITS CHECKED COPY ERRTLT,X GET UNIT # JST ERRHS  CHECK IF COUNT IS ZERO... NOP JMP *ERRTAL NO INHIBIT---EXIT IMS ERR:CT INHIBIT PRINTING OF ERR COUNTS ERRTL4 IMS ERRTLT ZERO ERRS---BUMP UNIT NUMBER COPY ERRTLT,A CLSN =4,A ALL DONE? JMP $+2 BEFORE RETURN -- CHECK IF HEADER SHOULD BE PRIN JMP ERRTL2 GET NEXT UNIT COPY ERR:UN,A GET # OF UNITS CHECKED CSK A,ERR:CT COMPARE WITH # UNITS W/ZERO ERRORS COUNTS NOP NOT EQUAL IMPLIES HDR SHOLD BE PRINTED JMP *ERRTAL RETRUN TO PRINT HDR JMP NUTEST --- EXIT (NO ERRORS PRINTED) * ERRTLT W ORD 0 ERR:UN WORD 0 # UNITS CHECKED ERR:CT WORD 0 # UNITS WITH ZERO ERRORS LPOOL TITL * * CYLINDER CHECK ROUTINE * * CYLNXT ENT CYLINDER CHECK * * HAVE A SECOND SET OF CYL BEEN REQUESTED? * COPY FLGCYL,A JNE  A,$+2 SECOND CYL REQUESTED? JMP *CYLNXT NO ... NO FURTHER ACTION -- RTN * COPY CYLFLG,A CLSN  =1,A IS IT SET ?? JMP CYLNX2 YES ... RESTORE FOR NEXT UNIT TESTS * * * NO --- GET NEXT CYLINDER # S * * * * * SAVE OLD CYL #S CYLNX1 COPY =-2,A JST MOVE WORD STRK WORD CYLSTK * * GET NEXT CYL #S *  COPY =-1,A JST MOVE WORD STRKQQ FROM WORD STRK TO COPY =-1,A JST MOVE WORD ETRKQQ (FROM) WORD ETRK (TO) * * SET FLAGS SHOWING CHANGED STATUS * CYLS1 IMS CYLNXT IMS CYLFLG JMP *CYLNXT * * * CYLNX2 COPY =-2,A RESTORE PREVIOUS CYL #S JST MOVE WORD CYLSTK FROM WORD STRK TO * * SET FLAGS FOR NEXT UNIT GO AROUND * COPY =0,A COPY A,CYLFLG JMP *CYLNXT CYLFLG WORD 0 CYLSTK WORD 0 CYLETK WORD 0 SAVE FOR OLD CYL #S DO NOT INVERT ORDER******** LPOOL * LCATBB EQU $ LCATBC EQU $ TITL UTILITY ... VIEW VIEW ENT VIEW THE PARAMETERS SET COPY VIEWIT,A PRINT PARAM? JNE A,VIEW1 IMS VIEW NO---EXIT JMP *VIEW * VIEW1 COPY *VIEW,A GET CODE ADD VIEW2,A CALCULATE ADR PARAM ADD  V:8,A INDIRECT ADRSING COPY A,VIEW4 STORE ADR IMS VIEW INCR ADR FOR RETURN JMP *VIEW4 DO VIEW FOR THAT QUERY CODE VIEW4 WORD 0 ADR FOR VIEW OF QUERY CODE VIEWIT WORD 0 VIEW FLAG V:8 WORD :8000 INDIRECT ADR BIT * * TABLE OF ADR FOR VIEW OF QUERY PARAM * VIEW2 WORD VIEW3-1 (BECAUSE FORM = 1 ) VIEW3 WORD  VIEWA FORM WORD VIEWB TSTS WORD VIEWC UNITS WORD VIEWD CYLS WORD VIEWE OPR WORD VIEWF INTS WORD VIEWG PATN WORD VIEWH DEV AD  WORD VIEWJ SET SENSE REG * * * VWD BYTE '(D)' WORD -1 VWF BYTE '(F)' WORD -1 VWLP BYTE ' (' WORD -1 VWRP BYTE ') ' WORD -1 VIEWN BYTE '(N)' WORD -1 VIEWY BYTE '(Y)' WORD -1 VWCOM BYTE ' ,' VIEWVV WORD 0 WORD -1 * * DIAG OR FORM'T'R? * VIEWA COPY FMFLG,A FRM'T'R?  JEQ A,$+2 NO---CONTINUE JMP VIEWA1 YES JST MSGA ='(D)' WORD VWD JMP *VIEW * VIEWA1 JST MSGA ='(F)' WORD VWF JMP *VIEW * * TESTS * VIEWB COPY =0,A COPY A,VIEWBA COMMA CONTROL JST MSGA WORD VWLP * COPY TSINAD,A GET TEST INPUT TABLE ADR COPY A,VIEWB1 * VIEWB2 IMS VIEWB1 GET TEST ADR COPY *VIEWB1,A GET TEST JLT A,VIEWB4 END OF TABLE ='FFFF'  JEQ A,VIEWB2 SKIP TEST IF = 0 * * DETERMINE TEST LETTER * JST TSTCM GET TEST LETTER FROM TABLE *  JST VIEWUT OUTPUT LETTER * JMP VIEWB2 CONTINUE VIEWB4 JST MSGA =') ' WORD VWRP J MP *VIEW ---EXITS * VIEWB1 WORD 0 TEST ADR * UNITS * VIEWC COPY =0,A COPY A,VIEWBA COMMA CONTROL  JST MSGA ='( ' WORD VWLP * COPY UNINAD,A GET UNIT TABLE ADR SUB =1,A DECRMNT  COPY A,VIEWC1 SAVE UNIT TABLE PTR * VIEWC2 IMS VIEWC1 GET UNIT PTR COPY *VIEWC1,A GET UNIT NUMBER JGE A,$+2 JMP VIEWCA END OF TABLE ='FFFF' OR HA0B0,A ASCII FORMAT W/BLNK * JST VIEWUT OUTPUT LETTER * JMP VIEWC2 CONTINUE * VIEWCA JST MSGA =')' WORD VWRP VEWRTN JMP *VIEW ---EXITS * VIEWC1 WORD 0 UNIT PTR LPOOL * CYLINDER NUMBERS * VIEWD JST MSGA ='( ' WORD VWLP  COPY STRK,A START CYLINDER COPY DULFLG,Q JEQ Q,VIEWD3 JMP IF A DUAL FLOPPY SHIFT A,RO,1 HALVE THE TRACK COUNT FOR SINGLE VIEWD3 JST ODEC OUTPUT IT VIEWD5 COPY STRK,A STARTING TRACK ADD =1,A  CSK A,ETRK MORE THAN ONE TRACK? NOP JMP $+2 YES JMP VIEWD2 NO * COPY =',',A JST OTTY OUTPUT COMMA COPY ETRK,A SUB =1,A GET END TRACK COPY DULFLG,Q JEQ Q,VIEWD6 JMP IF A DUAL FLOPPY SHIFT A,RO,1 HALVE TRACKS VIEWD6 JST ODEC VIEWD2 COPY FLGCYL,A ANOTHER RANGE TO OUTPUT JEQ A,VIEWD1 * YES --- JST SPACE SPACE OVER BY 3 * COPY STRKQQ,A NXT START CYLINDER COPY DULFLG,Q STRIP OFF HEAD, IF DUAL JEQ Q,VIEWD8  JUMP IF A DUAL FLOPPPPPY SHIFT A,RO,1 LAST WAS A SINGLE, HALVE TRACKS VIEWD8 JST ODEC OUTPUT VIEWDA COPY STRKQQ,A ADD =1,A CSK A,ETRKQQ MORE THAN ONE TRACK REQUESTED? NOP JMP $+2 YES JMP VIEWD1 NO * COPY =',',A JST OTTY OUT A COMMA COPY ETRKQQ,A SUB  =1,A COPY DULFLG,Q DUAL DISK? JEQ Q,VIEWDB JMP IF IT IS SHIFT A,RO,1 LAST WAS A DUAL VIEWDB JST ODEC OUTPUT VIEWD1 JST MSGA =') ' WORD VWRP JMP VEWRTN * * OPERATOR INTERVENTION * VIEWE COPY OPRCON,A Y .NE. 0 JNE A,VIEWE1 Y OR N ? * JST MSGA NO---EXIT AFTER PRINT MSG WORD VIEWN JMP VEWRTN * VIEWE1 JST MSGA YES---EXIT AFTER PRINT MSG WORD VIEWY JMP VEWRTN * *  INTERRUPTS * VIEWF COPY INTS,A GET INTERRUPT FLAG JNE A,VIEWF1 INTERRUPTS SET ? JST MSGA WORD VIEWY YES JMP VEWRTN * VIEWF1 JST MSGA WORD VIEWN NO JMP VEWRTN LPOOL * * * WORD PATTERN * * VIEWG JST MSGA ='( ' WORD VWLP JST MSGA =':' WORD VIEW: COPY WCPAT,A GET WORD PATTERN JST OHEX OUTPUT IT JST MSGA =')' WORD VWRP  JMP VEWRTN VIEW: BYTE ' :' WORD -1 * * * DEVICE ADDRESS * * VIEWH JST MSGA ='( ' WORD VWLP JST MSGA =' :' WORD VIEW: COPY DEVAD,A GET DEVICE ADDRESS JST OHEX   JST MSGA =')' WORD VWRP JMP VEWRTN * * * SET SENSE SWITCH ? * * VIEWJ JST MSGA ='('  WORD VWLP COPY =':',A JST OTTY COPY SNSREG,A GET SENSE REGISTER INFORMATION JST OHEX *  COPY FLGQRY,A INHIBIT ZERO ERRORS ERR REPORTS ? JEQ A,VIEWJ1 COPY =0,A YES---SET OUTPUT = 2  OR HA0B0,A COPY A,VIEWBA COMMA CONTROL---GET COMMA JST VIEWUT * VIEWJ1 JST MSGA =')'  WORD VWRP JMP VEWRTN LPOOL * * SEARCH TABLE FOR MATCHING * * TEST ADDRESS THEN CALL * *  TEST LETTER * TSTCM ENT COPY A,TSTCM5 COPY TSTCM1,X ='C1' COPY X,TSTCM2 SAVE FOR LATER INCR--DERIVE LETTER COPY TSTCM3,X =START OF PARAMETER TABLE COPY X,TSTCM4 * TSTCMC CSK A,*TSTCM4 COMPARE ADR'S  NOP JMP TSTCMA NOT FOUND * COPY TSTCM2,A TEST FOUND---GET TEST LETTER JMP *TSTCM * TSTCMA COPY =-1,A CHECK FOR END-OF-TABLE CSK A,*TSTCM4 NOP JMP TSTCMB NO--- * COPY TSTCM6,A END-OF-TABLE JMP *TSTCM EXIT WITH '?'--SIGNIFY--NO MATCH * TSTCMB IMS TSTCM2 GET NXT TST LETTER IMOVicEdDano€¿€””¿€ Œ¿€‘ÿˆ¿€úŠŸ€éà¿€˜øeþ¿€±+žüŸA0Š 0ÿÿŸuŸÛ$Ÿ+%M@ÿÿMM@ÿÿš Ù ¨ ¥ B ; 8 ? • S Ó HËÚz~ަ­·X€W-67ÔdpÖ †­ˆ‡¸ć·‡·¸‡¶ †J¿¬ž„† 6D¾ž¿­¿¥¿¬‚™6Ažƒ ‡§¿§¿ s¿¤¿¤¾Ÿ£¿£ ¿0 0…E¿›¿Žžýž¤ ‡•¿•ƒ•ß6ÖŸxº‘¯°±¼ÅzÀÛ›T  È)¿lé ž| @¿f  ¿§‚W ‡¨¿¢‡§†P6A¿Wƒ¡1¯¿šž”Ÿ™žkžjžižŠ) Dž„ Fža)§‘žf¿‹ž\ž[žY¿@ž­Ÿ…FÀi¨Á^] O‡‚„‡•‚•‡• ¿€ G… ‡¿ ¿ŒŒE…ƒ‰ ¿ˆŸ‡€”R)‹nŽ¿ ®¿ -¿O ‡¤¿L1Y »¡žžtƒ žqƒšŠ£‡š £˜„€ÿ„ß’¿;žŸ:ždž”žhž†ž_ƒ‹5)žg¿0žYžXžVG b¿çŸðŸ#MÀFƒ|‡ë¿à ¿éƒÞ‡è¿ ‡h¿1E »ážƒžqžžõƒ_ žl ŸÙ+ƒÊA.§ÕßU ƒÅ»Ñž‰ ÿL‡Ê ‡¼žW ¿ºžæŸ¹žRžžYž‚ž†žM¿³žKžJžH¿§žF¿­1ÁžÍ ºêžž?ƒ/ þÁž‚ß+žzƒ) ž6 žÔ+ÔQA.¦Üß ‚غ؞‡ ÉQA†Ñž# †Ìž—G Ài¨F Ð   øH¿mž·ŸlžŸ”ž;žƒžžž)¿eŸŽŸŸ‹ƒˆ8)žƒ„+)ž3b(aƒ›\ †•ž™ ›IÄ.§G. Ÿ‘§DŸ ›@Ä.¦‡. ž%¦„ž#Lw¿/žŸ¢¿- $¿¿01º Yž“ Nž’¿'Ÿ•žÈžrž„žpž…žm¿ŸŽŸŒ¿žhžgže ‡‡¿‡¿žj'H_ì¿ 2¿w¿§ :¿Ÿ¿Ÿ1M I´§›¾øž¢žŸžož‡žmžˆžkžjƒ5žg¿ž?Ÿ_¿Žžbžaž_j  L_gRÀ¨)ÿ†sƒv!‡Æí‡Å‚j†m£l”€·¾„€Þgß¼žx¿· ¿7 :¿` ‡ ¿^1T º žžr߃ žn ž“§¤¾°ž˜ž•žgž&žmž†žbƒ5)žl¿Hž\ž[ žY †žkÿÿÿ†5¿¿9ŸŒU…ŸŠÿÄÿÄÿ¸bÀ æ  ÷¿ãTUŸz ƒà Ÿ|Þ{ #ŸyÞx _ŸvÞu ^ŸsÞr ,ŸpÞo :ŸmÞl ŸjÞiŸh ƒÉ ÿ¿ÇŸz †º¦¸ƒÁ à ‡½)¦µ£tÞsƒr†°Þp€€­ÈÞ«’«A+’¨Þ¤žvŸe¦¢‚Ÿ¿¤ƒ56Y¿1 [¢š :¿¡€€¿ ¿ ¿Ÿ :¿›ƒ’¿š¿š¿™ :¿•‚‹¿”¿”¿“ :¿‚†¿Ž¢ƒžWðaø_F) ¿ì †ˆžž‰ÿQ ¾Þ…žw‚á…ŸàŸo ƒÝ݇݃Úq·Ûø¿[ ‡ÕŸq ¾ožƒ ‚~†z…EƒÃ6Á¾Ð‚oˆˆžˆ‚k†‚ö¿BF ‚¾¿?ƒ½Až§)¦®q ÿ>Þ©žz‡Ÿ² ˆ…‚¯¿-ŸU¾ƒ¾‚¾¾€  ÿ¾…ˆžž‰‚B†‚ö¿F ‚™¿Ÿ>¾‚8†‚ö¿F ¿Ÿ5ä Å "  ) ž   3 ¿•ž‚¿”ø†Ž†Œƒ’†Œ¿Ž …ƒˆ¿‹¿ŒÞ…ÞƒžyŸl }F) §Œ‡ŒƒŒ ž„Þy£†ƒ†Ÿ  vƒuÞtÞsŸr ƒ@6\¾Ÿƒ­†ƒ¿`ž‚¿_¿^ Š£¨ !¦ò£¢*ÿ¦ð¿V sø†í¾‹Þêƒé¿P ¿—Þ䞟_Þãžužp ƒ 6¸Ÿ{ ‡þ‡Œ‚Œ‡Œ‚y‡……Ÿ‰ _%@B=A Iƒ¸ ÿBNž|ƒ´D䃱G‡¯ƒ¬†¡ÿ‡©¿ ¥ƒ§¿`¿ ÷ƒ¥¿\¿Fƒ¢ H¾J :¿Tƒž <¾E :¿Oƒš <¾@ ¿J ¿H‚ƒ‡Œ…Ÿ‘ ERROR TIME ÿÿz 3±°¯Å£Ô¿Ð¿Ó¿Ï ˆ ›ÐÃϗχσ̻Ǟ‚ž ÿIÛÅQÁ ¿¿À ›¿Å¿¹ σ¾¿¿¸¿´ Nƒº¿¿³¿¯ J :¿ƒ¿³¿¬¿¨ Öƒ¿¯¿¤ ñƒ­¿«Ÿ ¿ Vü†D£¥ü†B .6Á ‹Ÿ¿ŸÞ;žx ¿›Þ6žrŸj 0ÿÿ ÿÿÿ+H) ˆ ‹ F()_ ‡Ÿ| ƒ ‡ Ÿ{ ñ¿£ ¢¢ „‹„‡Ÿó¿š9Fƒ›‡—¿š‡šHƒ™‡™ƒ™‡—ƒP‡N‚‰ ž† †…ƒ‡ ‡ŒŸ[ð   M SFGn« ‡„¿†ÿ€¿mŸ Ÿwà ‡½ „€ +߸ž{Ÿw ‚†‡‚‚…¿[Ÿ Ÿxªªõä ‚‡‡ƒ‚©¿PŸ Ÿwªª ƒ¢AŸ|Þ{Ÿz C¿ s¾Ÿz ¦‰‚‡Š‡††ƒ…†¿‘Ÿv^ ‡Œƒ2Š… Ü€ƒ†ŸwVW=] †—†˜¾»†•—Ì–JÞ‘‚ŽŠŒŠ‹ņ‡žp‚†¢„Ÿi ?¿‡žg†\_ †v†w¾š†tvÑŽ”ÍŽ’ ÌŽŽJŠŽ†i‚g1¶f†dÞežmŠ…žw‚`¢^Ÿd  …‚އ–ÿ‡•‚•‡•†‚“ùžÑQA¾‘ŸoEø Þ~…‚ƒ†Ÿyàá >âz …HÿDZÂvǰ†q¯Bÿž …Ÿs ß©ƒ¨»¨Ÿ{ ‡£žƒ ‚~†t¿ ß ƒŸ»Ÿž‚ÞmŸl ‡™žƒ ‚~†yƒ•6Á¿“ƒ“ˆ¿’ˆžŸo‚¿Ÿlùú Jä H'¦)  ‚ׇԟ| †Žƒ}†Þ{ƒz†‹Þxƒˆ‡ˆÞ†Þ†Þ‚žyŸp †¦Ž£|.Þz%€€' ÿžƒ¾Ð+žx¢‚‚‚Ÿo †¨û†¨‚ž†¥ †¡‚¡)/ +=‹†› 0žŒ†–¾µÞ–Þ–žq‚‘ žŸe 0¾¬Ÿb‚Š žs 0žp:'èd _u û†‘ –y9.1Þ‹žž†ŠÁЄЄ¾‡žrŸl:ð\ …˜QA¿ŽÂ•RJ‡ŒÂ‰Ç‹HÿNJŠNJŠBùžŸneø§Ÿàá >â ÿ‡ÀŒžž‚¾ Nƒ»‚Œž ‡: ‡®¾½ƒ³‡³‚„‡²‡²ŸiuŸ …¿¬ ü †¿¨ Œ ‡› ‡¤ ‡˜¿˜ ‡— ‡“¿“߃ žžžp‚‡D‚„‡’ †‚Ÿ ! È"G %Ÿ Œƒ›‡ ‡œ‡œ‡k‡› ‡d‡™ ‡˜¿ƒ—ˆ¿ƒ•¿6B‚‘¿‡Ÿe 6AŸ| ),2-0/+*4  ?¦Ž)0(¦†‰Ÿx ‚†Â‡/¢†0 ¢‚Ÿx )§0ƒ\‡-¿.ƒ 6ž¿Wžuƒš—›C †„ž‚ †Ÿk †‡ƒGІ Ü€‚ŸwZ ¿†¿…¿„Ÿz)  Ï_ ßÏ ÿ—xÁžÄü†Æ †ÅƒqO6Z_6Zo6Z6ÿ¾‚h¾Ì/6‚º¾È?6‚·¾Ä6‚´žŠ6悱¾¼ž£‚¯žƒ‚®ž‚­¾µ “«† ƒªˆ¿ƒH_6ÁžŠo6Áž‡O6¾µžƒ6ž€ÞÞ‹žl ‡–‚ˆ þÁ¿ˆ ‡…ƒ/Ÿ27          'Þ £$¿ˆƒˆƒˆ Á¿†ƒŸtä Ô ‡¡ ‡ ‡ ‡ ƒ ˆ¿ŸƒŸ¿6B‚¿mƒœ‡”ƒ–ˆ¿•Ÿk ‡–EŠ…†ˆß“¿“ÄŸw @ TEST ÿÿ+-20*)) " USING A SINGLE FPYÿÿ USING DUAL FPYÿÿ USING WRONG CONTROLLER ÿ DRIVE NOT READY ÿ VERIFIES FORMATTED DISKETTEÿ SET UNIT TO WRITE PROTECT ÿ SELECTED UNIT WRITE PROTECTED ÿ REMOVE WRITE PROTECT ÿ RETURN FLOPPY TO ÿ BUF=ÿÿ CONTROLLER NOT PRESENT ÿ EXP DATA ACT DATA EXP ADDR ACT ADDR ÿ ÿÿ ..........TEST FAILED!! ÿ IOB ÿ DUMP:ÿ EOT ÿÿTÿ ER AD=ÿÿ ER ÿFMATÿÿ FORMATTER OR DIAGNOSTIC?ÿ FORMAT UTILITY PROGRAMÿÿ FORMAT SEQUENCE NUMBER (01)=ÿÿ FUNC=ÿHEAD= ÿÿINITÿÿLEN=ÿÿNOPÿ REMOVE DISKETTE AND INSERT IN NEW UNIT =ÿ WDS XFRD ÿ PASS ÿÿÿ POWER FAILÿÿ SECTOR FLAG FIELD (0)=ÿÿ SNS REG? ÿÿ TSTS=ÿ OPR?ÿÿ TRACKS=ÿ INTS? ÿÿ PATN=ÿ UNITS =ÿ DEV AD= ÿÿRDRGÿÿRD DDÿÿÿREADÿÿRD NDÿRL=ÿÿÿ RSTOR ERÿSECTOR= ÿÿSEEKÿÿ STAT ÿ ERRS: U HARD SOFTÿÿ TECH TEST (TEST 15)ÿÿ  FLOPPY DISK DIAGNOSTIC (93072- A0)ÿÿÿTRACK=ÿÿ  INITIALIZATIONÿÿVERÿ CLSE DR. DONT WR ENAB ÿWR DEÿWR NDÿ ¿­ž‚¿¬ ¿ª¿¢ ¿¨¿ ¿ )§Ÿ¿Ÿ‚£‡£Ã£Lžž…¿ ¿•¿Ÿžž‰ÃLž‚‚›‡•¿–¿‹¿•ž| ‡ˆ ‡“¿ŽŸW{3%}º€ GJ½  ¿´ ‡³ƒ³‡ª¿i »¿¨¦e’d¢c¹ æ7  ¦\’[¢Z§œ¿œž¦ž¥žlŸžžjžižhžg¿P ¥¿Nø¿– ¿•)§‹¿‹ž¸¿D ¥¿B )žs ªF …À ÈÀ\z†_¿1 ¿p¦-’,¢+¹ ù7 ¦&’%¢$.A§Š¿ežŠž‰žmž4žkžjžižh ‡ƒV†{ƒz‡¡‡£‹£‡£ ‡R¿Rƒ 6Áž8! ÿ6¿ ¥)§¿¿¿¿”‚‡“ƒ—’C¿‘àž‚¿ŽÕƒMŸ‚ Ÿ ÷!o ¨) ÏGæ†êƒò‡é¿éƒéq‡î ‡æq‡ë‚h†…æ‡èÛ¿ß»¢~+%¦‹ž‡ßàƒßq‡Û¢…+]¦ƒ£¿Ð^ ƒ žž ßÏžn¢w+]*ÿ¦ƒz¿ÁØ¿¿ƒÅ ‡Â¿»žÏ¿Àß¿ƒ¾†ƒ Ç3¿ºž ‡¸¿¸ƒ¸Ÿ¸ÂžQ‚†‚œ‹¦†™IÆ–º™ž‚ž†ž€q‡ Þ”žCž‡‚ ††‹IƇžt憉)¦„¦„žCÿæ ;  ðM½ … „ab ‚ Š « ªà]À }ƒ———ÁŸ–¿–ƒa—‡ž–¿‘ƒ\—ˆ‡ˆ‚ˆ‡ˆƒWq·ƒ‡‰ž” ˆ ‹Ÿ)Ï o üæ†C‚t‡tƒC q¶í‡t‚î‡;¿; ‡;q¶ã‡ì‚e†…æ†á·¿3 «¢~+I¦ƒG¿, ô‚Î žž¥ÞÑžž‰ÞÏ‚Îq¶È‡Ñ¢r+¹¦pžl¢n+¹*ÿ¦ƒ‚É¿ ­¿ †¼¿žž‰ƒ –²†´ƒ q¶°‡7žB¿·Ÿ·Ã·Qƒ¶‡¶ƒµŠ ‡²Iǯ»±ž‚ž‡ž€q¶›‡¤ß«žQž‡ƒ© ‡§‡£IÇŸžs懠)§œ§žžG»^ > þ ýþÕ « ª Ö × Ø Ú Û Ù UNIT ÿÿ(NNöööüNNõõõþ÷N NNNõõõû@@@@÷FNN†ÿÿþ÷ÿÿÿûå?ååå÷ ÿÿÿÿÿüÿ ÿÿ ”ÿ ¿ÕÒ‚¥aƒÒ ‡ÐƒÐ ‡ÎƒÎ ‡ÌƒÌ ‡ÊƒÊ ‡Èž‘‚“σÀ‡¾ƒ¾‡¼ƒ¼‡ºƒº‡¸ƒ¸‡¶ƒ¶†ŸW†¦ÿ‡¥ ‡­†x¿¬ß ¿Ÿ ÷ƒœ¿‚¦†×ƒÖ‡¤¾ž§ ƒ !†Ž톋ƒœ†‹£Š”€¶†„€Þ…Þ‚žxŸoHGF ‹‹ËR[ ‡­‡­Þ@F¿¦¿f ¥‚9¿dƒ¡ ÿ‡¢ß¡ƒ †˜ƒ—Ažê‡œŠ’‡›¾ƒš†ƒ˜Ä‚| @…Þˆƒ‡Ó< ¼€ž— 0}\ ª ¨ê¿ížUß3¿3 ÷ƒ0¿1žY¿æƒæ)6—¿ä¿g¿' Z ‡ß£b€€ç›ÛB+žz£×¿×žžu¿U¿ s¿Ð¿ÏƒÌ‹Î¿Î¿Ë¿ÊƒÇŠƒ†ƒƒ‚ž‚V¿¿Á¿Àƒ½Šƒ†yƒxžZ¿¼¿¸£µß´ƒ³ žžQ¿ª ÷ƒ³¿±žÞ,ƒ+AŸ®‡®Ÿ® ÿÿnäIW#)_R †‘߈‡žßžž‰ć›ß›ž…ć˜ß˜žž„‚‚…Ÿm‡W¾©ŸŽ TEST COMPLETED ÿÿ‘¯°±} ƒ’ÁŸ|Þ{ Іƒ†‰ ЇˆƒˆŠ„AŸoÞnŸm¤®® ƒŒ†Šÿ‡‰ƒzÞy†¿(‚‚‡‚Ÿsz †ž†žƒiÁŸy †—£™€€Êš“B+žzÞ¢Ž¾GŸkތމ‚ˆ žžn‚…º…ŸaŸ„\a ƒžÁŸ|‚˜ žþ¿˜GŒÿ¿” Gÿ¿HÞlÞˆŸjþ¿‰ŒG †Ÿc ð ‚ŠÂÞ|Ÿ{ƒzЇЅ†‚ÞvŸ€€ž»ÄÕî$6AJ(D) ÿÿ(F) ÿÿ (ÿÿ) ÿÿ(N) ÿÿ(Y) ÿÿ ,ÿÿƒ¯Ažƒ¿¨¨ŸO¿¥«ŸL ‡¢¿ ®ƒ£†ŠÞ‰ƒˆÄ<¿ž¿™žy¿•°Ÿ< ‡‘¿®ƒ ÿ†ŠÞ‰ƒˆAžƒ·‰¿‡žy¿ƒ°Ÿ*†yo]ê^¿x®ƒ¼Ã¼QA ¿ºƒ· »¸žžˆ ,¿¯ƒ² ÿîQA ¿¬ƒ T¿«ƒ«Ã¦QA ¿¤ƒ¦ »¥žžˆ ,¿™ƒŸ ÿØQA ¿–¿M°žIƒ—ÿH²žD¿EµžAƒÿ@µž<¿=²ž9_GH) ¿0®¿.?ƒž¿ž¿*°ž& :ÿÿ¿%®¿#?ƒ•¿“¿°ž¿® :¿^ƒ¿ŠƒŒD ·†±¾£¿°ž FR¤ †—¢’¦’¢’¦’»‘ž‚‚ŒŸuÿ»‹ž‚‚ŠŸoÞ„Þ…‚…žqA? ‡Ä‚ŠEƒÂ¿-ƒ¿¿+Ÿwƒ¼¿(ÞŸs OPEN DOOR ÿ F= ÿ N= ÿ P= ÿ RUNNING... ÿ S= ÿ T= ÿ U= ÿ W= ÿ WRITE ENABLE DISK ÿ¹¸¿» ¿º ‡½¿·1ÿ¶ŸºŸµŸ¹Ÿ¹žxž¦ À¹ ¿³ ñ5  ƒª Ÿª¦‡‚…Š…†…ƒ„†‚žƒ‚…‹œ†|‚z‡zž ‚wŠ„†uÿ‡sžßžQ¿‹žO¿ŠŸŒžFŸ‰FÀi¨(÷зC‘ÄWâïaý¾X «ÛxÿÿC‘ÄWâïaý¾X «Ûxÿÿ¿ZŸã¿S )¿R¿ß :¿Þ¿Þ1J§Ý¿LŸ×ŸKžpŸÙžnž†žk£Õ15)žr¿Ažq¾åžcžbž`¿4 ¿3¿21º Nž’ Yž‘¿-Ÿ½Ÿ,žrŸ¼žpž‚žnžm¿&žu¾Êžižhžf ‡°¿žl ƒ~Š… ÿŠ„†ÞyŸ‹p€z|~€‚„†ˆоõŸj¾¡Ÿh¾õŸf¾þŸd¿’Ÿb¿‘Ÿ`¿Ÿ^¾ÎŸ\¾ÐŸZ:)_gba!+ ñ¿¯ ¢­ „‹„Ÿv ¿¨1Í RžŒ VžŒ EžŒ SžŒ Lž‘ Tž‘ŸpŸo¾÷ž’¾°ž¾éžŽÞhÞgƒf†¾"ž‡¾žž…¿†žƒ‚] ÿž€ÞZŸY¼ð F ‡ˆŸ| ÿ‡…‚‚‡„ŸzR¤ ‡‚¿‚Ÿ{zÀ ‡¡Ÿ| ‡¡Ÿ| ‹ž „€ÿ„¿”‡˜Ÿu ‡•‡•‡•ß”¿‹ƒ“ÊQA‡ˆƒQA‡ŸoœG]\  ‹:;H ‡…Ÿ| ‡‚Ÿ| ‡fŸ| ‚‚‡‚Ÿ|Û$ ¿¾s¿‹¾>¿Š¿Š¾r¾6¾D¾a¾d¾¾ŸqºÅ  ¿¿ ¿½¿H)§»¿»¿»ƒE_ÃBQ] ‡¸ š‡´†­¿µ¿²ƒ´Ž©C‚²¿²Ÿe‚¤ €žŠ €†  ‡¦žpƒ+ÿ§ž„ŸX¿¤ždŸU ‡› M‡—†¿˜¿•ƒ—ŽŒC‚•¿•ŸH‚‡ @žh @†ƒ ‡‰žp}º%{ È ;(A½ ¿q ¿o¿¥¿p) §l¿l§£ ‡¢¿k¿¡š M†—ÿž‚• ‡š†’£“1C šžŒž‚ Mž‰¿¿" ‘‚‡ ÿ†…‡Œ¿‡¿‹žlŸWJ "à 3 ¿> ¿<¿r)§:¦Ê¿9¿9óQDÃkQB €ž @‡2 †½¿¨¿c¿¨¾¬ž‚ž„ž‚¶¸žŠÃYQB €‡"‚® ÿ†«¿–žm¾Ížk‚§P¿ †¢†¢)§¿ÊQDÃBQB €ž @‡ žYŸBøGä ß¼ƒ» žž†¿ÃžÞwÞv ‡²Ÿs ¿® ¿¬¿)§ª¿ª¿ªߣ©¿©ߣ¨¿¦ !‡¦)§ž¿¿£ !‡  ‡˜¿ ¢  !¿œŸŸ¿šžhŸ] ÿ‡—¢—ƒ¿‘Ÿ‚‚¿=ŸuUU }º%{ž Øß½DC ¿o ¿m)§l¿l¿ø¿k¿o‚ù£i¿i †å¾Õ‚æ‡f†â¿íƒ] ùƃ`¢ì¿`ŸŸž—ƒT þLƒQ øLƒâ‡P‚Þ¿àŸ  ‡Gžg ‡Džd ‡AƒE‡Bž_ƒ:о‡8 žž…ƒ=޽Âß1ß0¿Èž\ž“ƒ5޳F¿.¾ž‚°‡/†«žRŽªG¿&¾–‚©‡'†£Þ¡žIŸ*ìJÿQÌðQJü¿«Ô΂–6Á ÿ‡ž8 ÜQÅü¿ÒΞ†Ã›Q9ü¿–ÔΟq@A€J GþüEð  ¿æ‚ì†ß ¿â¿n †Ø †×žŽ ¿Ù‚à†Ò‚z†l ¿Ó¿_ †É †È¢Æ§Í¿Í¿Í£Ò1L£Ë¦Â)§È£Í¦¿)§Ê£Ê¦¼)§ÇÃKQB¿¾€ @‡¼ƒÁ¿Á‚¬‡³¿?)§°¿<¿»‚¦‡¬¿8 ÿ‡·¢¢ƒ¬¿µŸ‚› þƃ°Ÿ6È‚®¿®ž…ƒª6‚ª¿¨¿©ž‰£›1F¢Œ§“¢‹§—¢Š§–Ÿ!ÃQžM}º%{ à FG^J øØß)GF´ ¿g ¿e¿·¿f‚³¾ÿ)§`¿`ñMž†‚®‡^¿­¿­žž‰¿X€‚¦‡V ‡R¿£¿£ž{¿M‚›¾æ)§G¿G ‡GÖMž†‚“‡C¿’¿’žž“¿=€‚‹‡; ‡7¿ˆ¿ˆž{ž‰ÎÄÅÅ @J½¿(‚̆¾ ‡%)§ ¿ ÃqMž‡‚n‡¿m¾«¿lžžŠ¿€‚e‡ ‡¿b¾ ¿ažz¿ ‚°†¡ ‡)§¿ÃTMž‡‚Q‡¥¿P¾Ž¿OžžŠ¿ €‚H‡œ ‡œ¿E¾ƒ¿DžzŸ ÿ‡•ƒ‘¢”¿”ŸŸw ‡…¿Š‚¿ŒŸ Ÿvœ à HßAð ¿¹ ¿·¿)§¨¿¨¿¨ ‡§¿ƒ¯B‚®¿£¿©ƒ«Ážß¿ž‡¿ *¿œ¿œƒœ6B‚ ¿“¿“÷¿’ *¿‘¿‘ƒ‘67 ‡¿¿„ ž”%{"†_È)3}º(IIŸ<¿p ¿o *¿n ‡ë §c ‡é¿a ‡ç¿eƒeÿ6B‚ã¿\ƒ`ý‡^?6C‚Ý¿Užˆ¿T !¿S *¿RƒS=‡Q¿Q ‡Ë¿LƒLÿ6Ä¿E 3¿Džu *¿B¿< †‡Á)§¼§5¿5 ‡º¿9ƒ9/6B‚¹¿0ƒ4-‡2¿2¿))§«§$¿$  ‡$ ‡§¿&ƒ&O6B‚§¿ƒ!M}‡¿¿ “–“•S‚“‡›)§ §¿ ‡‡ ¿ ƒ 6B‚¿ƒ†‡„¿Œžð )$%IIII&I3 ¿¸ƒÉÁŸz ¿³¿³)§²¿²ƒ²¾û¿²‚²‡²Ã²QDñQB‚°‡¬¿¯ ‡®¿®žw¿¤‚¤‡¤Ã¤QÁžƒÃ¢QB‚¡‡)§•¿•¿ ‡œ¿œžt¿› Û¿ƒ™†Ô§—§š¦Ò‚ÑšÏ5ž™}º%G{€ G J ½ Eg!Ÿ- ‡ ¿¼ƒ6Æ¿p÷¿· *¿¶žt)§\¿\¿^ƒ[¾£‚[‡[Ã[QCÃZQB‚Y‡U ‡X¿V ÿ‡¢ƒO¢¡¿¡Ÿ¿Pžp‚Œ‡O¿M @ƒL‹˜‡˜¿H ¦¿€*¿ŽžK ‡ƒ‚:¿ƒŸ ŸxðȆ_Jßo ¨ ¿ƒêAžà ¿¿)§¿ƒâ»âžž„ƒÞ‡Ü‚Ý¿Ø “ۆφÎü¿[Á ‡Ó…ƒÒˆ¿Ñžƒ ‚Ͽł¿„¿Ì ‡Ë¿Ë €‡É¿É…‚‡‡¾ƒ¾ˆ¿½‚ÿ³ž”¾Š¾€ ÿ—»A¿º‚º¿§¾€ ‡¶…‚‡‡¦ƒ¦ˆ¿¥‚«¿›ž¬¾‚¾„ ‚¨¿“¾€ ƒ +#‡œ‚Ÿ¿‰‚‚‡ŒŸ¿‚¿€}€ K”')K{ à ;K)3K$KK ¿æ ¿ä¿ç M‚åC¢ä¿^Ÿs¢× ŽÖ U€€ «¸€€µ¦Í‚Ì ÷†ò‚Ò†Ã)¾Ý¿Ï)ƒÎ†½¾Ø¿Ê‚âʿÊŸŸ‚º †´ †³‚º†Ü‚°†­)¾Ç¿¹)‚©†§¾Â¿´‚¦†…‚£†„‚©¢²¿°‚  ÷†Æ †˜ †—)‚•†’¾­¿Ÿ‚†Ž)¾¨¿š‚Œ†…‚‰†„‚¢™¿–¾˜Ÿƒÿ}ºj 1ÕMŸMžMßMM ‚q‡—‡—Ÿ{ §¿¿‚h‡‘¢\¿‚‡‡‹‡‰‚W‡‹‡‹¿‹Ÿo %{F ; ¿² ¿Hƒ°†w ‡­þ‡¬‚¬†r‡Ç×)§b¿b¿b‚Ÿ‡£‚h†h0¶f0 …‚œ‡œ¿œß–žžŒ‚™†Z¿žfžx¾€¾€‚‘¿‘žq ‡ˆ‚L‡ƒŸMänŸJ0N ¿Õ¿Ì g¿Ó…E ‡Ð¿¿Ã«¿Â ž‚žn§Æ§Æ¿Æ¿Á£Ã§Á¿µ¿´ ž‚žx§¯§¯1AžžÍ¿¨§¿§ Mž‚žxIÛ£QÁ.§¡¦û‚ý ÿl¿—£¿– ž‚žx¦ö¿Ž¯¿¦ó‚í þY †é¿…—¿„ ¿ž¨gickf.‹Émj ø †Ðž”¿k“¿j Mž‚žxIÛfQÁ.¦¾ †Àž„ †½ †½¿W› 0†´…E‚²ˆˆ¾ †±‚¶–¦A‚¢F‚¯¿6Ažc­‚  ÷A©‚ž¢™ !*ÿ¦–1EŠ’†—‚†–ž‚ކ’‚‹†˜‚”‡™¿™¿™Ÿ™ÿi Ÿy&)À» ƒšAž‚Þ{Ÿz¢y€€ÞwІŽÁ¾Ÿr §‡‚†††£‰ƒ‰¿‰—ŸvÿÑÿÑŒÿÿzŸŸ2ßmEEEBE5E3--E2E1¿ ƒ 6B‚¿ƒ†‡„¿Œž’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I# ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I$ ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I% ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I& ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’Iÿÿÿÿÿÿe;810312202142810312202142810511104033eú@€810312202142810312202142810511104032e:' 810312202142810312202142810312202142e810312202142810312202142810312202142810312202142810312202142810312202142eÈ>}‰Ë8103122030347581031220314250810312202325e»3—8103122034445081031220515000810312202354eÌ-ë8103122053285081031220540075810312202426( ) * + , - . / 0 ÿÿÀÿÿÿð. FPYDISKDIAGASMFPYDISKDIAGOBJOS:: SYSS TSTCM4 GET NXT TST LOC COPY TSTCM5,A GET TEST ADR JMP TSTCMC TRY AGAIN * TSTCM1 WORD :41  ='A' WILL INCR = TEST LETTERS TSTCM2 WORD 0 HOLDS CURRENT TST LET TSTCM3 WORD PRAMSX START OF PARAM 1 TABLE TSTCM4 WORD 0 START OF PARAM TABLE---INCR TSTCM5 WORD 0 REG A SAVE TSTCM6 WORD :3F  ='?' * * * OUTPUT WORD WITH/WITHOUT * * LEADING COMMA * VIEWUT ENT COPY A,VIEWVV STORE WORD TO BE OUTPUT COPY VIEWBA,A COMMA CONTROL ? JEQ A,VIEWB3 * * YES---PRINT LEAD ',' COPY VWCOM,A JST OTTY COPY VIEWVV,A JST OTTY JMP *VIEWUT * VIEWB3 COPY VIEWVV,A NO ... JST OTTY IMS VIEWBA JMP *VIEWUT VIEWBA WORD 0 COMMA CONTROL *  * LCATBD EQU $ TITL MESSAGES... LCATBE EQU $ DOORMG WORD :0D0A BYTE 'OPEN DOOR' WORD :0D0A WORD :07FF TFO WORD :2020 BYTE ' F=' WORD :20FF TNO WORD :2020 BYTE ' N=' WORD :20FF TPO WORD :2020 BYTE ' P=' WORD :20FF TRO WORD :0D0A  BYTE 'RUNNING...' WORD :0707 WORD :20FF TSO WORD :2020 BYTE ' S=' WORD :20FF TTO WORD :2020 BYTE ' T=' WORD :20FF TUO WORD :0D0A BYTE ' U=' WORD :20FF TWO WORD :2020 BYTE ' W=' WORD :20FF UNWPT WORD :0D0A BYTE 'WRITE ENABLE DISK' WORD :0D0A  WORD :07FF LCATBF EQU $ LCATBG EQU $ TITL QUERY FOR TESTS LPOOL QUER1C JST MSGA ASK FOR TESTS WORD QUERY1 JST VIEW WORD TSTSQ COPY =0,A RESET COUNT OF INPUTS COPY A,TEMP4 QUER1A JST IDEC GET AN INPUT JNE X,QUER1D ANY DECIMAL INPUT ? JST CHRIN NO CHCCK TERMINATOR  JMP QUER8 JMP QUERND # QUER1D JMP QUER1 BACK ARROW JMP QUER0 UP ARROW JMP QUER1A COMMA JMP QUER1B ':'? NOP SUB =:40,A SEE IF TEST INPUT IS JLE A,QUER1D BETWEEN A- CLSN =:14,A CHECK FOR T (TECH TEST) JST TESTT SUB =:F,A AND O JGT A,QUER1D  ADD =:F,A COPY A,X COPY TEMP4,A SEE IF 16 INPUTS YET! CLSN =17,A JMP QUER1 YES, ERROR COPY X,QRYZ1 COPY QRYX1,A ADD QRYZ1,A COPY A,QRYZ2 COPY *QRYZ2,A COPY A,QRYZ1 SAVE TEST ADR JMP $+4 QRYX1 WORD PRAMSX-1 QRYZ1 WORD 0 QRYZ2 WORD 0 COPY QRYX2,A  ADD TEMP4,A COPY A,QRYZ2 COPY QRYZ1,A GET THE TEST ADR COPY A,*QRYZ2 STORE IN WORKING TABLE  JMP $+2 QRYX2 WORD PRAMS COPY QRYZ2,A GET WORKING TABLE ADR ADD QRYX3,A INCR ADR FOR FLAG PLACEMENT COPY A,QRYZ2 SAVE ADR FOR INDIR COPY =-1,A GET DELIMITER COPY A,*QRYZ2 STORE DELIMITER IN TEMP WORK TABLE JMP $+2 QRYX3 WORD 1 IMS TEMP4 BUMP COUNT JMP QUER1A GET NEXT INPUT QUER1B JST FORMAT JMP QUER1A JST OTHER JMP QUER1 ERROR JMP QUER1C GOOD RETURN  WORD TSTSQ FOR SET JMP QUER1 SET RTN LPOOL * TITL * * TESTS ADRESS TABLE * * ( TEMP WORKING2  TABLE ) * PRAMS EQU $ START OF TEMP PARAM TABLE TESTS WORD TESTA DEFAULT WORD TESTB DEFAULT  WORD TESTC WORD TESTD WORD TESTE DEFAULT WORD TESTF DEFAULT WORD TESTG  WORD TESTH WORD TESTI WORD TESTJ WORD TESTK WORD TESTL WORD TESTM WORD TESTN WORD -1 FLAGGED END * * TESTS * ( RESET PARAM TABLE ) * PRAMSX EQU $ START OF PARAMETER TABLE TESTSX WORD TESTA TEST NUMBER TABLE WORD TESTB WORD TESTC WORD TESTD WORD TESTE WORD  TESTF WORD TESTG WORD TESTH WORD TESTI WORD TESTJ WORD TESTK WORD TESTL  WORD TESTM WORD TESTN WORD -1 FLAGGED END PRAMND EQU $ * TITL * * * ASK FOR USERS DATA PATTERN * * QUER7 EQU $ JST FORMAT JMP QUERC FORMAT SKIP THIS QUERY! * JST MSGA WORD QUERY7 JST VIEW WORD PATNQ JST SPACE COPY =:3A,A JST OTTY JST IHEX GET INPUT JEQ X,QUER7A IF ZERO, SEE WHY... QUER7B COPY X,WCPAT STORE PATTERN QUER7C JST CHRIN CHECK TERMINATOR JMP QUERC C/R JMP QUERND # JMP QUER7 BACK ARROW JMP QUER6 UP ARROW  JMP QUER7 ANYTHING ELSE JMP QUER7E ':' ? NOP IS ILLEGAL JMP QUER7 QUER7A COPY IDCTM3,X LOOK AT ACTUAL INPUT COUNT JEQ X,QUER7C IF ZERO, DEFAULT... COPY =0,X ELSE INPUT IS ZERO!! JMP QUER7B GO STORE IT QUER7E JST FORMAT JMP QUER7C JST OTHER JMP QUER7 ERR JMP QUER7 GD RTN WORD PATNQ SET JMP QUER7 SET RTN H3 WORD 3 HEX CONSTANT * * * * TITL * * * ASK IF OPERATOR INTERVENTION IS DESIRED * * QUERXA EQU $ JST MSGA ASK OPR WORD QUERYX  JST VIEW WORD OPRQ JST IDEC GET RESPOPNSE JNE X,QUERXA ANY NUMBERIC INPUT IS ERROR CLSN ='N',A IS IT N JMP QUERX1 YES CLSN ='Y',A IS IT Y JMP QUERX2 YES QUERX3 JST CHRIN CHECK TERMINATORS JMP QUER6 C/R JMP QUERND # JMP QUERXA BACK ARROW JMP QUER2 UP ARROW JMP QUERXA ANY OTHERS JMP QUERX4 ':' ? JMP QUERXA JMP QUERXA QUERX4 JST FORMAT JMP QUERX3 JST OTHER JMP QUERXA ERR JMP QUERXA GD RTN WORD OPRQ SET JMP QUERXA SET RTN QUERX1 COPY =0,A SET OPR NOT (0) QUERX2 COPY A,OPRCON SET OPR TRUE  JST IDEC JMP QUERX3 CHECK OTHER TERMINATORS LCATBH EQU $ LCATBI EQU $ TITL UTILITY ... SETOLD * SET TO SPECIFIC DEFAULT * SETOLD ENT COPY *SETOLD,A ADD SETOLX,A SUB =1,A ADD SET:8,A INDIRECT ADRSING COPY A,SETOLA IMS SETOLD JMP *SETOLA SETOLX WORD SETOLZ SET:8 WORD :8000 SETOLZ WORD SETOL1 WORD SETOL2 WORD SETOL3 WORD SETOL4 WORD SETOL5 WORD SETOL63  WORD SETOL7 WORD SETOL8 WORD SETOL9 SETOLA WORD 0 * SETOL1 JST SETFRM JMP *SETOLD SETOL2 JST SETTST JMP *SETOLD SETOL3 JST SETUNT JMP *SETOLD SETOL4 JST SETCYL JMP *SETOLD SETOL5 JST SETOPR JMP *SETOLD SETOL6 JST SETINT JMP *SETOLD SETOL7 JST SETPAT JMP *SETOLD SETOL8 JST SETDEV JMP *SETOLD SETOL9 JST SETSNS JMP *SETOLD LPOOL SETTST ENT * COPY =-PRAMND+PRAMSX,A JST MOVE WORD PRAMSX FROM WORD PRAMS TO * COPY =PRAMS,X SKIP TEST: COPY =0,A COPY A,11(X) L COPY A,13(X) O JMP *SETTST LCATBJ EQU $ LCATBK EQU $ TITL UTILITY ... OTHER * * DYNAMIC CONTROL OF: * * TELETYPE :T * LINE PRINTER :L * DEFAULT DISPLAY & TURN OFF DISPLAY :V, :E * RESET ALL PARAM'S  :R * RESET SPECIFIC PARAM TO DEFAULT VALUE :S * CALLING SEQUENCE * * JST OTHER *  JMP XXX ERROR RTN * JMP YYY GOOD RTN * WORD GGG CONTROL SET PARAMETER *  JMP RRR GOOD RTN 'SET' * * OTHER ENT JST IDEC GET INPUT JNE X,OTHER1 ANY DECIMAL INPUT? * CLSN =:52,A ='R'? RESET JMP OTHERR YES CLSN =:56,A ='V'? VIEDW JMP OTHERV CLSN =:45,A ='E'? END VIEW JMP OTHERE CLSN =:53,A ='S'? SET SPECIFIC PARAM DEFAULT JMP OTHERS CLSN =:4C,A ='L'? REQUEST LINE PRINTER JMP OTHERL CLSN =:54,A ='T'? REQUEST TELETYPE ONLY JMP OTHERT JMP *OTHER OTHER LETTERS CAUSE EXIT * * OTHER1 JMP *OTHER NUMBERS CAUSE EXIT OTHERR JST RESET JMP OTHERX OTHERV JST GETVEW JMP OTHERX OTHERE JST SETVW JMP OTHERX OTHERS IMS OTHER IMS OTHER COPY *OTHER,A COPY A,OTHSET JST SETOLD OTHSET WORD 0 JMP OTHERX OTHERL JST GETLP JMP OTHERX OTHERT JST SETLP JMP OTHERX COPY OTHER,A SUB  =1,A JMP OTHERX * * * RETURN FROM NORMAL OPERATION OF SPECIAL PROCEDURES * * OTHERX IMS OTHER JMP *OTHER LPOOL LCATBL EQU $ LCATBM EQU $ TITL UTILITY ... SET'S * RESET DEV ADR TO :11 SETDEV ENT COPY =:11,A COPY A,DEVAD JMP *SETDEV * RESET SENSE REGISTER SETSNS ENT COPY =-1,A  COPY A,FLGQRY COPY SETS:2,A COPY A,SNSREG SAVE SENSE REGISTER JMP *SETSNS SETS:2 WORD :0000 DEFAULT LPOOL * RESET TO LINE PRINTER GETLP ENT COPY =1,A COPY A,LPFLG JST STLPTY JMP *GETLP  LPOOL GETVEW ENT COPY =1,A COPY A,VIEWIT JMP *GETVEW * RESET TO DIAGNOSTIC SETFRM ENT  COPY =0,A COPY A,FMFLG WHEN IT = 0 MEANS DIAGNOSTIC PROCED. JMP *SETFRM * RESET TO UNIT 0 SETUNT ENT COPY =0,A GET ADR OF TABLE OF UNITS ADD UNINAD,A FORM SPECIFIC ADR COPY A,X COPY4  =0,A COPY A,0(X) STORE UNIT '0' COPY =-1,A GET DELIMITER COPY A,1(X) STORE DELIMITER JST SETFLG  RESET THE NEXT UNIT FLAG COPY A,UNITFLG JMP *SETUNT * SET CYL TO DEFAULT SETCYL ENT COPY  =0,A COPY A,TEMP1 ZERO OUT COUNTER COPY A,FLGCYL COPY A,CYLFLG IMS CYLFLG JST SETFLG SET DUAL FLAG COPY IOPT+1,A COPY DULFLG,Q DUAL FLOPPY? JEQ Q,$+2 NO SHIFT A,LO,1 YES, DOUBLE TRACKS COPY A,STRK RESET STARTING TRACK COPY IOPT+2,A JEQ Q,$+2 DUAL FLOPPY SHIFT A,LO,1 YES,DOUBLE TRACKS COPY A,ETRK RESET ENDING TRACK JMP *SETCYL LPOOL * SET OPR TO DEFAULT SETOPR ENT COPY =0,A NO OPR COPY A,OPRCON OPR FLAG JMP *SETOPR * RESET TO HAVE INTERRUPTS SETINT ENT COPY =0,A COPY A,INTS YES.. JMP *SETINT LPOOL * VIEW NOT ACTIVATED SETVW ENT COPY =0,A COPY A,VIEWIT JMP *SETVW * RESET TO WORD PATTERN DEFAULT SETPAT ENT COPY SETPT1,A COPY A,WCPAT JMP *SETPAT * SETPT1 WORD :DB24 LPOOL * * RESET PARAMETERS TO DEFAULT VALUES * * * RESET ENT JST SETLP LINE PRINTER INHIBITED JST SETVW VIEW NOT ACTIVATED JST ACCUM SET ACCUM'S = 0 JST SETUNT RESET TO UNIT 0 JST QUERYS RESET TESTS JST FILL FILL BUFFER W/AAAA'S JST SETPAT RESET WORD PATTERN JST SETFRM  RESET TO DIAGNOSTIC JST SETCYL RESET TO CYLS 20 - 21 JST SETOPR RESET TO NO OPR INTERVENT. JST SETINT RESET TO HAVE INTERRUPTS JST SETDEV RESET DEV ADR TO :11 JST SETSNS RESET TO :0,0  JMP *RESET LPOOL LCATBN EQU $ LCATBO EQU $ TITL TEST A. CONTROLLER COMPUTATION TEST * * *TESTA - THIS TEST VERIFIES THE PROPER COMPUTATION * OF TRANSFERED COUNT BY CONTROLLER * TESTA ENT JST RUNOVR WORD  3 COPY =1,A JST TSTITL JST SETFLG SET DUAL FLAG COPY =RAD,X READ ALL DATA COPY X,FCUR JST FNTITL JST PREP SET-UP DISK COPY STRK,A STARTING AT TRACK ZERO JEQ A,LOOP YES, GOTO LOOP FOR SINGLE DENSITY COPY DULFLG,Q DUAL DISK? JEQ Q,LOOP NO, SO JUMP TO SINGLE LOOP LOOP3 COPY =14,A SET SECTOR=14 COPY A,SCUR AND ISSUE COPY =154,A SET UP MULTI-SECTOR COPY A,WRDC WORD COUNT COPY A,TOEXP STORE EXPECTED TRANSFER COUNT LOOP2 JST SETIOB SET IOB  JST JDMA DO MINIMUM I/O COPY IOB+WRDTRN,A NUMBER OF WORDS TRANSFERED SUB TOEXP,A EQUAL TO EXPECTED WORDS TRANSFERED? JEQ A,LOOP1 YES COPY =ERRA00,A NO ERROR JST ER JMP *TESTA EXIT LOOP1 COPY TOEXP,A EXPECTED WORD COUNT CLSN =128,A LAST PASS? JMP TA5 INCR.TRACK COPY =128,A NO TRY WITH COPY A,TOEXP 128 WORD TRANSFER COPY =26,A FORCE END OF TRACK ERROR COPY A,S5 CUR SO THAT ONLY 128 WORDS TRANSFER JMP LOOP2 NOW TRY IT TA4 COPY DULFLG,A DUAL DENSITY DISK?  JNE A,TA5 JMP IF IT IS JST INCRT LAST TRACK? JMP LOOP NO JMP *TESTA YES TA5 JST INCRT LAST TRACK? JMP LOOP3 NO JMP *TESTA YES LOOP COPY =14,A SET SECTOR=14  COPY A,SCUR COPY =77,A NO OP COPY A,WRDC TO DO BOOKKEPING COPY A,TOEXP SET TO EXPECTED TA2 JST SETIOB JST JDMA DO MINIMUM I/O COPY IOB+WRDTRN,A SUB TOEXP,A EQUAL EXPECTED? JEQ A,TA3 YES COPY =ERRA00,A JST ER JMP *TESTA EXIT TA3 COPY TOEXP,A EXPECTED WORD COUNT CLSN =64,A LAST PASS? JMP TA4 INCR. TRACK COPY =64,A NO, TRY WITH  COPY A,TOEXP 64 WORD TRANSFER COPY =26,A FORCE END OF TRK ERR COPY A,SCUR SO THAT ONLY 64 WRDS TRANS JMP TA2 NOW, TRY IT TOEXP WORD 0 EXPECTED DATA LPOOL TITL TEST B. OCCILATING SEEK TEST. * * TESTB - THIS TEST CHECKS THE PROPER OPERATION * OF THE SEEK CAPABILITIES OF THE FLOPPY. * A DAMPED OCCILLATION ACROSS THE DISK IS * FOLLOWED BY A RUNAWAY OCILLATION ENCOMPASSING * EVERY POSSIBLE LENGTH SEEK IN BOTH DIRECTIONS. * * TESTB ENT JST RUNOVR WORD 3 COPY =2,A GET TEST # JST TSTITL PRINT IT JST SETFLG SET DUAL FLAG JST PREP SET-UP DISK COPY =SEEK,X SEEK COPY X,FCUR JST FNTITL  COPY X,IOB+FUNC COPY =0,A COPY A,IOB+TRACK RESTORE TO TRACK ZERO JST JDMA JST DULAR SET B COUNTER FOR DUAL DENSITY COMPATABILITY WORD 154 DUAL B COUNTER COPY =77,A SET UP B COUNTER  COPY A,TCB COPY =-1,A JMP TESTC3 TESTC2 COPY TCA,A SET-UP A COUNTER TESTC3 ADD =1,A INCREMENT A COPY A,TRCUR COPY A,TCA COPY DULFLG,X DUAL DISK? JEQ X,$+4 NO CLSN  =154,A YES, ARE WE DONE? JMP TESTCE WE ARE DONE JMP $+3 NO, MORE TO DO CLSN =77,A  DONE WITH SINGLE? JMP TESTCE YES JST DMA NO,DO SEEK JST STATCK CHECK STATUS WORD  COPY TCB,A GET B COUNTER SUB =1,A DECREMENT COPY A,TCB COPY A,TRCUR JST DMA DO SEEK JST STATCK CHECK STATUS WORD JMP TESTC2 COMPUTE NEW TRACK TESTCE JMP *TESTB TCB  WORD 0 COUNTER B TCA WORD 0 COUNTER A LPOOL * TITL TEST C. CROSS TRACK INTERFERENCE TEST. * * TESTC THIS TEST CHECKS FOR CROSS TRACK INTER- * FERENCE. ALTERNATE TRACKS ARE WRITTEN WITH * ALL BITS OFF AND WITH ALL DATA BITS ON. * THEN EACH TRACK IS READ AND DATA INTEGRITY * ASSURED * * TESTC ENT JST RUNOVR WORD 4 COPY =3,A GET TEST # JST TSTITL JST SETFLG SET DUAL FLAG COPY =WND,X WRITE NON-DELETED DATA COPY X,FCUR STORE OP-CODE COPY X,DFLG SET WRITE FLAG JST FNTITL JST PREP SET6 -UP DISK COPY STRK,Q TRACK ZERO? JEQ Q,TESTD6 JMP IF IT IS COPY DULFLG,Q DUAL DISK?  JEQ Q,TESTD6 JMP IF NOT COPY =128,A SINGLE TRACK, DUAL DENSITY JMP $+2 TESTD6 COPY =64,A  SINGLE TRACK, SINGEL DENSITY COPY A,WRDC WORD COUNT COPY =0,A COPY A,TESTDC SET THE DATA CONSTANT TO 0 JST FILCON SPREAD IT THROUGH BUFFER TESTD1 JST DMA DO I/O JST RUNIND JST DINC INCREMENT JMP $+3 JMP TESTD2 JMP TESTD4 COPY DFLG,A JNE A,TESTD1 WRITE NEXT SECTOR JMP TESTD3 TESTD2 EQU $ COPY DULFLG,Q DUAL DISK JEQ Q,$+3 JMP IF NOT  COPY =128,A SET DUAL DENSITY COPY A,WRDC WORD COUNT COPY TESTDC,A YES, NEG A,A  MAKES ZERO OR ONE SUB =1,A COPY A,TESTDC JST FILCON JMP TESTD1 DO MAKE I/O TESTD3 JST DEXAM CHECK DATA JMP TESTD1 DO READ TESTD4 COPY DFLG,A DONE? JEQ A,TESTD5 YES JST PREP SET-UP DISK COPY =0,A RESET BUFFER TO ZERO COPY A,TESTDC COPY A,DFLG SET READ FLAG COPY =RAD,X GET READ CODE COPY X,FCUR STORE IT JST FNTITL COPY STRK,Q TRACK ZERO? JEQ Q,$+5 YES COPY DULFLG,Q NO, SEE IF DUAL DISK?? JEQ Q,$+3 JMP IF NOT DUAL  COPY =128,A IT IS, GET DUAL WORD COUNT JMP $+2 COPY =64,A SINGLE SECTOR WORD COUNT COPY A,WRDC JMP TESTD1 DO I/O TESTD5 JMP *TESTC LPOOL TITL * * THIS ROUTINE INCREMENTS THE SECTORS * AND TRACKS. CALLING SEQUENCE IS: * JST DINC * (NORMAL RETURN) * (TRACK INCREMENT RETURN) * (END OF DISK RETURN) * * DINC  ENT IMS SCUR INCR CURRENT SECTOR COPY SCUR,A CLSN =27,A LAST SECTOR? JMP $+2  YES JMP DIOUT NO JST INCRT YES, INC TRACK JMP $+2 IMS DINC END OF DISK BUMP RETURN IMS DINC END OF TRACK BUMP RETURN COPY =1,A SET INIITAL DISK SECTOR ADD COPY A,SCUR RESET SECTOR DIOUT JMP *DINC EXIT TESTDC WORD 0 DATA CONSTANT DFLG WORD 0 WRITE FLAG  TITL TEST D. PARTIAL SECTOR I/O TEST. * * TESTD - THIS TEST CHECKS THE ABILITY OF THE * CONTROLLER TO HANDLE PARTIAL SECTOR I/O. * TESTD ENT JST RUNOVR WORD 3 COPY =4,A LOAD TEST # JST TSTITL PRINT IT  JST SETFLG SET DUAL FLAG COPY =WND,X WRITE NON-DELETED DATA COPY X,FCUR SET-UP CURRENT FUNCTION  JST FNTITL AND PRINT IT (WRITE) JST PREP READY THE DISK TE1 COPY =-:21,A FILL THE BUFFER WITH AN COPY BUFAD,X INCREMENTING PATTERN FROM JST FILCYC ZERO TO :21 COPY =-:21,A COPY BUFR2P,X OPERATE ON BUFR2 JST FILCYC COPY =:21,A COPY A,WRDC SET UP THE PROPER WORD COUNT COPY =WND,X WRITE NON-DELETED DATA COPY X,FCUR JST DMA DO I/O JST CLEAR COPY =:27 1,A SET UP NEW WORD COUNT COPY A,WRDC STORE WORD COUNT COPY =RAD,A SET-UP READ FUNCTION CODE COPY A,FCUR JST DMA DO I/O COPY =ERRD00,X COPY =:21,A # OF CELLS TO COMPARE JST COMP COMPARE WORD BUFR2 EXPECTED DATA WORD BUFFER WITH RETURNED DATA JST INCRT LAST SINGLE TRACK? JMP TE1 NO JMP *TESTD YES, EXIT * * THIS ROUTINE CHECK THE DATA FOR CORRECTNESS. * DEXAM ENT  COPY =:FF,A COPY A,CMPFLG COPY =ERRC00,X COPY WRDC,A NO. OF CELLS TO BE CHECKED JST  COMP WORD TESTDC EXPECTED CONSTANT WORD BUFFER ACTUAL DATA COPY H5555,A DISTINCTIVE PATTERN  JST FILCON TO FILL BUFFER JMP *DEXAM EXIT H5555 WORD :5555 LPOOL TITL TEST E. MULTI-SECTOR I/O TEST. * * TESTE - THIS TEST CHECKS MUTI-SECTOR I/O * CAPABILITIES. 3 PASSES ARE MADE OVER EACH REQUESTED * TRACK USING WORD COUNTS OF: ONE SECTOR + ONE WORD, * TWO SECTORS, AND TWO SECTORS + ONE WORD. * TESTE ENT JST RUNOVR WORD 3 COPY =5,A SET-UP TEST JST TSTITL COPY =WND,X WRITE NON-DELETED DATA COPY X,FCUR JST FNTITL JST SETFLG SET DUAL FLAG JST PREP SET-UP FLOPPY JST CLEAR COPY =-260,A FILL BUFFER WITH INCREMENTING COPY BUFAD,X PATTERN JST FILCYC COPY =1,A COPY A,SECOFF SECTOR OFFSET JST TF09 SET UP PROPER WORD COUNTS COPY ONEONE,A ONE SECTOR + 1 WORD  COPY A,WRDC COPY A,WRDC2 TF1 JST DMA DO I/O COPY FCUR,A CHECK IF A READ SUB =RAD,A READ ALL DATA? JNE A,TF2 NO COPY WRDC,A YES, SET UP FOR DATA COMPARE COPY =ERRE00,X  JST COMP WORD BUFFER EXPECTED DATA WORD BUFR2 RETURNED DATA JMP TF5 RESET SECTOR ADDRESS TF2 COPY FCUR,A IF CURRENT FUNCTION A WRITE? SUB =WND,A WRITE NON-DELETED JEQ A,TF3 JMP IF IT IS A WRITE COPY FCUR,A SUB =RDV,A A VERIFY? JEQ A,TF4 JMP IF SO COPY BCUR,A  NO, MUST BE A READ COPY A,BUFAD RESET WORKING BUFFER ADDRESS COPY =-260,A JST MOVE WORD  BUFR2 WORD BUFR2+1 COPY =WND,A SET THE WRITE COPY A,FCUR JMP TF1 DO MORE I/O TF3  COPY =RDV,A IF A WRITE THEN CHANGE TO COPY A,FCUR VERIFY JMP TF1 DO I/O TF4 COPY =RAD,A IF VERIFY CHANGE TO READ COPY A,FCUR COPY BUFR2P,A SWITCH TO SECONDARY BUFFER COPY A,BUFAD SO DATA CAN BE COMPARED TO BUFFER * USED ON WRITE JMP TF1 DO I/O TF5 COPY SCUR,A ADD OFFSET TO SECTOR ADDRESS ADD SECOFF,A ON MULTI-SECTOR I/O COPY A,SCUR CLSN =:18,A CYLINDER 24? JMP $+2 YES JMP TF55 NO,CONTINUE COPY WRDC,A SUB TWOONE,A 2 SECTOR+1 WORD  JNE A,TF55 JMP IF NOT IMS SCUR FORCE END OF TRACK EXIT IMS SCUR TF55 EQU $ JST DI8 NC DO SECTOR/TRACK INCREMENTING JMP TF2 DO I/O JMP TF9 ENSURE PROPER WORD COUNTS COPY WRDC,A IF ALL SECTORS AND TRACKS SUB ONEONE,A WRITTEN, THEN UPDATE THE JGT A,TF6 WORD COUNT AND RESTART JST PREP RESTORE THE DISK JST TF09 SET PROPER WORD COUNTS COPY TWOSEC,A THE WHOLE PROCESS COPY A,WRDC COPY A,WRDC2 JMP TF2 DO I/O TF6 SUB ONESEC,A JGE A,TF8 JMP IF DONE JST PREP RESTORE THE DISK JST TF09 SET PROPER WORD COUNTS COPY TWOONE,A COPY A,WRDC COPY A,WRDC2 TF7 IMS SECOFF NEED ONE MORE SECTOR FOR LAST PASS JMP TF2 DO I/O TF8 JMP *TESTE * TF9 COPY TRCUR,Q TRACK ZERO TO TRACK 1? SUB =1,Q JNE Q,TF95 NO,SO SKIP OUT COPY DULFLG,Q DUAL DISK? JEQ Q,TF95 NO, SKIP OUT COPY =-4,A YES, SET UP DUAL VALUES JST MOVE  WORD D128 WORD ONESEC COPY WRDC2,A INSURE PROPER WORD COUNT SHIFT A,LO,1 TBIT 1,A  TURN OFF EXTRA BIT IF NECESSARY JF OV,$+2 SUB =1,A COPY A,WRDC TF95 JMP TF2 DO I/O * TF09 ENT ENSURE PROPER WORDS/SECTOR COPY STRK,Q TRACK ZERO? JNE Q,TF01 JMP IF NOT ZERO TF00  COPY =-4,A JST MOVE SET UP PROPER WORD COUNTS WORD D64 WORD ONESEC JMP TF03 TF01 COPY DULFLG,Q DUAL DISK? JEQ Q,TF00 JMP IF ITS SINGLE COPY =-4,A JST MOVE SET UP DUAL WORD COUNTS WORD D128 WORD ONESEC TF03 JMP *TF09 * SECOFF WORD 0 WRDC2 WORD 0 SECONDARY WORD COUNT CELL * (TRACK 0 IS SINGLE, TRACK 1 IS DUAL) * ONESEC WORD 0 ONE SECTOR WORD COUNT ONEONE WORD 0  ONE SECTOR + ONE WORD TWOSEC WORD 0 TWO SECTORS TWOONE WORD 0 TWO SECTORS + ONE WORD * D64 WORD 64 ONE SECTOR SINGLE D65 WORD 65 ONE SECTOR + 1 WORD SINGLE D128 WORD 128 2 SECTORS SINGLE (ONE SECTOR DUAL) D129 WORD  129 2 SECTORS +1 WORD SINGLE(1 SECTOR + 1, DUAL) D256 WORD 256 2 SECTORS DUAL D257 WORD 257 2 SECTORS + 1 WORD DUAL * LPOOL TITL TESTS F+G. DATA TYPE TESTS. * * THIS SECTION CONTAINS BOTH TESTF + TESTG. * THE ENTRY POINTS SET THE PARAMETERS SPECIFIC * TO EACH TEST. A COMMON TEST IS THEN PERFORMED, * TO CHECK THE PROPER OPERATION OF DELETED AND * NON-DELETED DATA TYPES * * TESTF - ENTRY * TESTF ENT JST RUNOVR WORD 3 COPY =ERRF01,A COPY A,TGTEM COPY =6,A JST TSTITL JST SETFLG SET DUAL FLAG COPY =WND,A SET NON-DELETED FUNCTION COPY A,GWFNC COPY =RND,A READ NON-DELETED COPY A,GRDFNC JMP TG1 * * TESTG - ENTRY * TESTG ENT JST RUNOVR WORD 3 COPY =ERRG01,A COPY A,TGTEM COPY TESTG,A FORCE RETURN THROUGH COPY A,TESTF TEST F COPY =7,A JST TSTITL JST SETFLG SET DUAL FLAG  COPY =WDD,A WRITE DELETED DATA COPY A,GWFNC DELETED DATA WRITE COPY =RDD,A READ DELETED DATA 9  COPY A,GRDFNC DELETED DATA READ TG1 COPY GWFNC,X COPY X,FCUR STORE THE FUNCTION CODE JST FNTITL  PRINT CURRENT FUNCTION JST PREP SET-UP DISK COPY DEFLT,X JEQ X,TG1TG1 COPY SCUR,X COPY X,STORE1 COPY =1,X COPY X,SCUR COPY ESEC,X COPY X,STORE2 COPY =2,X COPY X,ESEC COPY RELC,X COPY X,STORE3 COPY =1,X COPY X,RELC TG1TG1 EQU $ COPY STRK,Q STARTING AT TRACK ZERO? JEQ Q,TG2X JMP IF WE ARE TG2 JST DULAR DUAL DENSITY? WORD :80 YES,USE DUAL TRACK OF DATA TG2X COPY =:40,A NO,USE SINGLE TRACK OF DATA COPY A,WRDC SET WORD COUNT COPY WCPAT,A JST FILCON SET-UP BUFFER WITH USER PATTERN COPY GWFNC,A COPY A,FCUR SET-UP WRITE  JST DMA DO I/O COPY =RDV,X DO VERIFY COPY X,FCUR JST DMA JST CLEAR COPY GRDFNC,A SET UP READ COPY A,FCUR JST DMA DO I/O COPY =:FF,A COPY A,CMPFLG SET FLAG COPY TGTEM,X COPY WRDC,A TRACK OF DATA JST COMP COMPARE WORD WCPAT EXPECTED DATA WORD BUFFER RETURNED DATA COPY GWFNC,A WHAT FUNCTION? SUB =WND,A JNE A,TG3  JMP IF WRITE NON-DELETED DATA COPY IOB+STATX,A TBIT DDEN,A IF DELETED OPERATION, THEN JF OV,TG4 NO NON-DELETED DATA SHOULD BE READ COPY =ERRG00,A JST ER ERROR! JMP TG4 TG3 COPY IOB+STATX,A IF NON-DEL OPERATION, THEN TBIT NDEN,A NO, DELETED DATA SHOULD BE READ JF OV,TG4  COPY =ERRF00,A JST ER DELETED DATA WAS READ TG4 JST INCR BUMP SECTOR/TRACK JMP TG5  MORE TO DO COPY DEFLT,X JEQ X,TSTFRT COPY STORE1,X COPY X,SCUR COPY STORE2,X COPY X,ESEC COPY STORE3,X COPY X,RELC TSTFRT JMP *TESTF * TG5 COPY TRCUR,Q TRACK ZERO? JEQ Q,TG2X YES JMP TG2 NO, DO SINGLE DUAL CHECK BEFORE I/O * GWFNC WORD 0 WRITE FUNCTION CODE GRDFNC WORD 0 READ FUNCTION CODE TGTEM WORD 0 STORE1 WORD 0 STORE2 WORD 0 STORE3 WORD 0 LPOOL TITL TEST H. DATA TYPE SELECTION TEST. * * TESTH - THIS TEST CHECKS THE PROPER OPERATION * OF DATA TYPE SELECTION BY THE CONTROLLER. FOUR * PASSES OVER THE SPECIFIED TRACKS ARE MADE * TWO FOR WRITING AND TWO FOR READING. * * PASS 1: WRITE NON-DELETED DATA ON SECTORS 1-13 OF REQUESTED * TRACKS * PASS 2: WRITE DELETED DATA ON SECTORS 14-26 OF REQUESTED * TRACKS * PASS 3: READ NON-DELETED DATA ON SECTORS 1-13 OF REQUESTED * TRACKS * PASS 4: READ DELETED DATA ON SECTORS 14-26 OF REQUESTED * TRACKS * TESTH ENT JST RUNOVR WORD 4  COPY =8,A PRINT TEST TITLE JST TSTITL JST SETFLG SET DUAL FLAG * * PASS 1 * JST PREP  PREPARE DISK COPY TIWRD1,A GET NON-DELETED DATA WORD JST FILLIT FILL THE BUFFER FOR I/O COPY =WND,X SET WRITE NON-DELETED DATA FUNCTION COPY X,FCUR JST FNTITL TELL THEM WHAT'S HAPPENING  COPY TRCUR,Q TRACK ZERO? CSK Q,=0 NOP JMP TSTH1 NO, GO CHECK TYPE OF FLOPPY COP: Y =:340,A YES, SINGLE DENSITY REGARDLESS COPY A,WRDC JST DMA DO I/0 JST INCRT MORE TRACKS? JMP $+2 YES JMP TSTH2 NO, DO NEXT FUNCTION TSTH1 JST DULAR HAVE WE A DUAL DENSITY FLOPPY? WORD :680 COPY =:340,A NO, HALF TRACK SINGLE DENSITY COPY A,WRDC YES, HALF TRACK DUAL DENSITY COPY =1,A RESET STARTING SECTOR COPY A,SCUR JST DMA DO THE I/O JST  INCRT MORE TRACKS TO DO? JMP $-4 YES * * PASS 2 * TSTH2 JST PREP DO NEXT FUNCTION, PREPARE DISK COPY TIWRD2,A SPREAD DELETED DATA WORD JST FILLIT COPY =WDD,X SET WRITE DELETED DATA FUNCTION COPY X,FCUR JST FNTITL DISPLAY WHAT IS HAPPENING COPY =14,A START THIS AT SECTOR 14  COPY A,SCUR COPY TRCUR,Q CSK Q,=0 ARE WE STARTING AT TRACK ZERO? NOP JMP TSTH3  NO, GO FIND WHAT TYPE OF FLOPPY COPY =:340,A YES, TREAT AS A SINGLE FLOPPY COPY A,WRDC JST DMA DO THE I/0 JST INCRT MORE TO DO? JMP $+2 YES JMP TSTH4 NO, GO DO THE READ FUNCTIONS TSTH3 JST DULAR ARE WE TESTING A DUAL FLOPPY? WORD :680 COPY =:340,A NO COPY A,WRDC YES, DOUBLE THE WORD COUNT COPY =14,A RESET STARTING SECTOR COPY A,SCUR JST DMA DO THE I/O JST  INCRT MORE TRACKS? JMP $-4 YES JMP TSTH4 NO GOTO PASS 3 * TIWRD1 WORD :CEC4 NON-DELETED DATA WORD TIWRD2 WORD :C5C5 DELETED DATA WORD LPOOL * * PASS 3 * TSTH4 JST PREP NO, RESET DISK FOR NEXT FUNCTION  COPY =TIWRD1,A SET UP COMPARE ADDRESS COPY A,TSTH9X COPY =1,A RESET STARTING SECTOR COPY A,SCUR COPY =RND,X SET READ NON-DELETED FUNCTION COPY X,FCUR JST FNTITL TELL THE WORLD WHAT'S HAPPENING COPY TRCUR,Q ARE WE STARTING AT TRACK ZERO? CSK Q,=0 NOP JMP TSTH5 NO COPY =:340,A YES, TREAT AS A SNG FLOPPY COPY A,WRDC JST DMA DO THE I/O JST TSTH9 CHECK FOR ERRORS  JST INCRT ARE THERE MORE TRACKS? JMP $+2 YES JMP TSTH6 NO, DO NEXT FUNCTION TSTH5 JST DULAR ARE WE TESTING A DUAL FLOPPY? WORD :680 COPY =:340,A NO COPY A,WRDC YES, USE DOUBLE WORD COUNT TSTH5X COPY =1,A RESET STARTING SECTOR COPY A,SCUR JST DMA DO THE I/O JST TSTH9 CHECK FOR MISCOMPARES JST INCRT MORE { DO? JMP TSTH5X YES, CONTINUE * * PASS 4 * TSTH6 JST PREP  PREP FOR NEXT FUCTION COPY =TIWRD2,A SET UP COMPARE ADDRESS COPY A,TSTH9X COPY =14,A RESET STARTING SECTOR COPY A,SCUR COPY =RDD,X SET READ DELETED DATA FUNCTION COPY X,FCUR JST FNTITL COPY TRCUR,Q ARE WE STARTING AT TRACK ZERO? CSK Q,=0 NOP JMP TSTH7 NO COPY =:340,A YES, TREAT AS A SINGLE FLOPPY COPY A,WRDC JST DMA DO THE I/O JST TSTH9 CHECK FOR MIS; COMPARE JST INCRT MORE TO DO? JMP $+2 YES JMP TSTH8 NO, WE ARE DONE TSTH7 JST DULAR CHECK IF WE ARE TESTING A DUAL FLOPPY WORD :680 COPY =:340,A NO,ITS SINGLE COPY A,WRDC IF DUAL, DOUBLE WORD COUNT TSTH7X COPY =14,A COPY A,SCUR RESET STARTING SECTOR TO 14 JST DMA DO THE I/O  JST TSTH9 CHECK FOR DATA MISCOMPARE JST INCRT MORE TRACKS TO DO? JMP TSTH7X YES TSTH8 JMP *TESTH NO, WE ARE COMPLETELY DONE * * TSTH9 ENT COMPARE DATA READ TO EXPECTED DATA COPY =:FF,A  ALLOW ONE WORD TO BE COMPARED TO MANY COPY A,CMPFLG COPY WRDC,A GET THE CURRENT WORD COUNT COPY =ERRH00,X GET TYPE OF ERROR (IF WE MISCOMPARE) JST COMP COMPARE TSTH9X WORD 0 . AGAINST THE INPUT BUFFER (THIS WORD IS STUFFED WITH DATA) WORD BUFFER JMP *TSTH9 DONE * FILLIT ENT COPY A,*BFPTR8 TO BUFFER JST DULAR DUAL DENSITY? WORD :681 YES,DUAL BUFFER LENGTH COPY =:341,A BUFFER LENGTH SINGLE NEG A,A JST MOVE BFPTR8 WORD BUFFER FROM BFPTR9 WORD BUFFER+1 TO JMP *FILLIT * * LPOOL TITL TEST I. FORCED ERROR TEST. * * TESTI - THIS TEST ATTEMPTS TO FORCE CERTAIN * ERRORS IN THE CONTROLLER AND SEE THAT THE PROPER * BITS GET SET IN THE STATUS WORD. * * TESTI ENT JST RUNOVR WORD 6 COPY =9,A PRINT TITLE JST TSTITL JST SETFLG SET DUAL FLAG COPY =NOOP,X NO-OP FUNCTION CODE COPY X,FCUR JST FNTITL JST PREP SET-UP DISK  COPY =0,A COPY A,IOB+TRACK JST DMA EXECUTE NO-OP COPY IOB+WRDTRN,A # OF WORDS JEQ A,TJ1 IF ZERO, OK COPY =ERRI06,A JST ER TJ1 EQU $ JST RUNOVR WORD 7  COPY OPRCON,A IS OPERATOR ASSISTANCE ASKED? JNE A,$+2 JMP IF ASSISTANCE JMP TJ5 SKIP OPERATOR NEEDED SECTION Z0 JST MSGA WORD DOORMG 'OPEN DISK DOOR' JST IKB WAIT FOR A KEY TO BE HIT  COPY =:2A,A JST OTTY SEND VERIFICATION JST JDMA COPY IOB+STATX,A TBIT NRDY,A IS UNIT READY? JT OV,AGAIN JMP IF NOT READY AS EXPECTED COPY =ERRI00,A JST ER ERROR! AGAIN JST MSGA UNIT ERROR MESSAGE WORD DRIVE DRIVE NOT READY MESSAGE JST IKB COPY =:2A,A JST OTTY JST JDMA DO I/O COPY IOB+STATX,A NEW STATUS WORD TBIT NRDY,A JT  OV,AGAIN RBIT NRDY,A RESET NOT READY COPY A,IOB+STATX JST STATCK CHECK OTHER STATUS BITS  JST PREP COPY =0,A JMP Z1 LPOOL * TJRTN JMP *TESTI EXIT * Z1 JST MSGA WORD WPROT UNIT WRITE PROTECT JST IKB COPY =:2A,A JST OTTY COPY =WND,A WRITE NON-DELETED FUNC COPY A,IOB+FUNC DO WRITE ON WRITE PROTECTED COPY A,X COPY X,FCUR COPY =1,A COPY A,IOB+SECTOR RESET SECTOR =1 JST FNTITL COPY =5,A COPY A,IOB+WORDC JST JDMA COPY IOB+STATX,A<  TBIT WPT,A WRITE PROTECT BIT JT OV,TJ3X JMP IF WRITE PROT BIT ON COPY =ERRI01,A JST ER ERROR! TJ3X COPY IOB+STATX,A RBIT 15,A RESET WRITE PROT BIT COPY A,IOB+STATX  TBIT ATTW,A ATTEMPT TO WRITE ON WPROT UNIT? JT OV,TJ3Y COPY =ERRI02,A JST ER ERROR! JMP TI00 TJ3Y JST MSGA WORD WPROT2 WPROT ERROR MESSAGE JST IKB COPY =:2A,A JST OTTY COPY IOB+STATX,A RESET ATTEMPT BIT RBIT ATTW,A COPY A,IOB+STATX TI00 JST STATCK  CHECK OTHER STATUS BITS COPY =NOOP,A CHECK WRITE PROTECT COPY A,IOB+FUNC JST JDMA  BY DOING A NO-OP COPY IOB+STATX,A AND CHECKING STATUS TBIT WPT,A JF OV,TI01 JMP IF NOT WRITE PROTECTED JST MSGA ELSE, TELL OPERATOR TO ENABLE WORD RMVWPT JST IKB  WAIT FOR A RESPONSE FROM KEYBOARD JMP TI00 AND MAKE SURE WRITE IS ENABLED TI01 COPY ='*',A  JST OTTY TJ5 EQU $ JST PREP COPY =134,A ENSURE MORE THAN ENOUGH SECTOR DATA COPY  A,IOB+WORDC COPY =RAD,X READ ALL DATA COPY X,IOB+FUNC COPY X,FCUR JST FNTITL COPY =26,A COPY A,IOB+SECTOR JST JDMA DO I/O COPY IOB+STATX,A TBIT ENDOFT,A END OF TRACK WORD COUNT JT OV,TJ6 JMP IF END OF TRACK AS EXPECTED COPY =ERRI03,A JST ER END OF TRACK NOT REPORTED TJ6 COPY IOB+STATX,A RBIT ENDOFT,A RESET END OF TRACK BIT COPY A,IOB+STATX  JST STATCK CHECK OTHER STATUS BITS TJ7 EQU $ JST PREP Z5 COPY =RAD,X READ ALL DATA COPY X,IOB+FUNC COPY X,FCUR JST FNTITL COPY =:A0,A USE NON EXISTANT TRACK # COPY A,IOB+TRACK COPY =4,A COPY A,IOB+SECTOR JST JDMA COPY IOB+STATX,A TBIT NOIDCM,A NO ID COMPARE BIT JT OV,TJ17 JMP IF IT SET COPY =ERRI05,A JST ER IT DID NOT SET TJ17 COPY IOB+STATX,A RBIT NOIDCM,A RESET NO ID COMPARE BIT RBIT SYNCER,A RESET SYNC ERROR BIT COPY A,IOB+STATX JST STATCK CHECK OTHER STATUS BITS JST PREP RESET THE DISK TJ11 COPY =:F,A  FROM THE SEEK ERROR EXCH *TJHI,A LOOK FOR NON-EXISTANT EXCH *TJHI,A MEMORY JGT A,TJ13 COPY TJHI,A COPY A,IOB+BUFF COPY =RAD,X READ ALL DATA COPY X,FCUR COPY X,IOB+FUNC  JST FNTITL PRINT CURRENT FUNCTION COPY =1,A COPY A,IOB+SECTOR COPY A,IOB+TRACK JST JDMA DO READ INTO NON-EXISTANT COPY IOB+STATX,A TBIT RATER,A ATTEMPT TO ACESS NON- JT OV,TJ12 JMP IF RATE ERROR REPORTED COPY =ERRI04,A JST ER ERROR! RATE ERROR NOT REPORTED TJ12 COPY IOB+STATX,A RBIT RATER,A RESET RATE ERROR STATUS BIT COPY A,IOB+STATX JST STATCK CHECK OTHER S= TATUS BITS TJ13 JMP TJRTN EXIT TJHI WORD :7FF0 LPOOL TITL TEST J. INTERCHANGABILITY TEST. * * TESTJ - THIS TEST EXAMINES THE INTERCHANGABILITY * BETWEEN FLOPPY DRIVES. THE TEST RUNS * A WRITE ON THE CURRENT UNIT THEN ASKS * THE OPERATOR TO MOUNT THE DISKETTE IN * ANOTHER UNIT. AFTER SPECIFING THE NEW * UNIT A READ IS DONE TO ASSURE PROPER * DATA TRANSFER. * TESTJ ENT JST RUNOVR WORD 7 COPY OPRCON,A IS OPERATOR INTERVENTION ALLOWED? JNE A,$+2 JMP *TESTJ NOPE EXIT COPY =10,A PRINT TEST #  JST TSTITL JST SETFLG SET DUAL FLAG TOC1 COPY =WND,X WRITE NON-DELETED DATA COPY X,FCUR PRINT FUNCTION JST FNTITL COPY WCPAT,A GET USER PATTERN OR DEFAULT JST FILCO FILL BUFFER  JST PREP SET-UP DISK COPY =:680,A SET SINGLE TRACK OF DATA COPY A,WRDC COPY STRK,Q STARTING AT TRACK ZERO? JEQ Q,TKDM1X JMP IF IT IS SO TKDM1 COPY DULFLG,Q DUAL DISKETTE? JEQ Q,TKDM1X JMP IF IT IS NOT COPY =:D00,A IT IS, DOUBLE WORD COUNT COPY A,WRDC TKDM1X JST DMA DO I/O  COPY =1,A COPY A,SCUR RESET SECTOR=1 JST INCRT LAST TRACK? JMP TKDM1 DO MORE I/O PREP1 JST PREP ON END OF DISK,RESTORE COPY =:680,A SINGLE DENSITY WORD COUNT COPY A,WRDC COPY STRK,Q TRACK ZERO? JNE Q,TKDM2 JMP IF NOT TRACK ZERO JMP $+4 YES, IT IS TRACK ZERO TKDM2 COPY DULFLG,Q DUAL DISK? JEQ Q,$+3 NO, GO ON WITH IT COPY =:D00,A YES, DOUBLE THE WORD COUNT  COPY A,WRDC COPY =RDV,X VERIFY FUNCTION COPY X,FCUR JST FNTITL PRINT THE FUNCTION  JST DMA DO I/O COPY =1,A COPY A,SCUR RESET SECTOR JST INCRT LAST TRACK? JMP TKDM2 MORE I/O TO DO GOOF JST MSGA WORD NUNMG ASK OPERATOR FOR NEW UNIT # JST IHEX COPY UCUR,A SAVE CURRENT UNIT COPY A,TKTMP COPY X,UCUR SET NEW UNIT COPY X,IOB+UNIT COPY X,NUNIT COPY NUNIT,A NEW UNIT XOR TKTMP,A OLD UNIT=NEW UNIT? JEQ A,GOOF YES JMP YOU1 LPOOL * TKRTN JMP *TESTJ EXIT * YOU1 COPY =NOOP,A NO OPERATION COPY A,IOB+FUNC JST JDMA DO I/O COPY IOB+STATX,A TBIT NRDY,A IS NEW UNIT READY? JF OV,SET YES JST MSGA WORD DRIVE DRIVE NOT READY JST IKB WAIT COPY ='*',A JST OTTY ACKNOWLEDGE JMP YOU1  ENSURE DRIVE READY SET COPY =RAD,X SET READ FUNCTION CODE COPY X,FCUR JST FNTITL JST PREP COPY WCPAT,A COMPLEMENT PATTERN IN BUFFER NEG A,A JST FILCO COPY =:680,A COPY A,WRDC RESET SINGLE WORD COUNT COPY STRK,Q STARTING AT TRACK ZERO? JEQ Q,$+4 JMP IF WE ARE AT ZERO TOC2 COPY DULFLG,Q DUAL DISK? JEQ Q,$+3 JMP IF NOT A DUAL COPY =:D00,A IF A DUAL, DOUBLE > WORD COUNT COPY A,WRDC COPY =1,A COPY A,SCUR RESET CURRENT SECTOR TK1 JST DMA COPY  =:FF,A COPY A,CMPFLG SET FLAG COPY WRDC,A GET WORD COUNT COPY =ERRJ00,X JST COMP  WORD WCPAT EXPECTED CONSTANT WORD BUFFER RETURNED DATA JST INCRT LAST TRACK? JMP  TOC2 NO TOC8 COPY TKTMP,A RESTORE THE CURRENT UNIT COPY A,UCUR TK2 EQU $ JST MSGA WORD RSTMSG TELL THEM TO RETURN FLOPPY COPY UCUR,A ADD HA0B0,A COPY A,PRUNIT JST MSGA  WORD UNITMG+1 JST IKB WAIT FOR RETURN COPY '*',A JST OTTY ACKNOWLEDGE JMP TKRTN EXIT TKTMP WORD 0 NUNIT WORD 0 NEW UNIT FILCO ENT COPY A,*BFPTRT CONSTANT IN BUFFER COPY  =:D00,A MAX WORD COUNT NEG A,A JST MOVE BFPTRT WORD BUFFER FROM BFPTRU WORD BUFFER+1 TO JMP *FILCO EXIT LPOOL * TITL TEST K. INTERRUPT TEST. * * * TESTK - THIS TEST CONFIRMS THE PROPER OPERATION * OF THE INTERRUPT FACILITIES IN THE * CONTROLLER. * TESTK ENT JST RUNOVR WORD 3 COPY  INTS,A INTERRUPTS ENABLED? JEQ A,$+2 JMP TM7 NO, DON'T PERFORM THIS TEST COPY =11,A  JST TSTITL PRINT TEST JST SETFLG SET DUAL FLAG COPY =RAD,X COPY X,FCUR NOP FUNCTION  JST FNTITL PRINT FUNCTION COPY PWRUP,A LOOK AT PWR UP LOC CSK A,LOC0 COMPARE WITH MODEL  NOP LOW JMP $+2 HI JMP TM1 GOOD, CONTINUE COPY LOC0,A RESTORE LOCATION ZERO COPY A,PWRUP COPY =ERRK00,A JST ER TM1 EQU $ COPY =0,A EXCH PUP1,A  COPY A,TMTMP1 (LOST INTERUPT ADDRESS) * *** DONT ATTEMPT TO DEBUG THIS SECTION OF CODE *** *** THE BREAKPOINT RETURN ADDRESS AT LOC :0 IS *** *** REPLACED FOR THIS TEST AND RESTORED AFTER *** *** IT IS COMPLETED ***  EXCH A,:0 SAVE LOCATION ZERO COPY A,TMTMP2 COPY =-4,A SET UP FOR INTERRUPT FAILURE JST MOVE WORD TM8 WORD 0 * COPY =0,A COPY A,IOB+INTERP FORCE NO CONTROLLER INTERRUPTS SBIT 8,S ALLOW PROCESSOR INTERRUPTS COPY IOBP,A DA22 OUT A,FLPYDA*8+0 DO I/O JST DIDL WE SHOULD GO IDLE JMP TM9 AND WE HAVE, SO JMP * MIR3 ENT INTERRUPT ENTRY POINT COPY =ERRK05,A WE SHOULD NOT HAVE INTERRUPTED JST ER TM9 COPY TMTMP2,A COPY A,:0 REPLACE LOCATION ZERO *** DEBUG BREAKPOINT LOCATION IS RESTORED *** JST PREP SET-UP DISK COPY =3,A SECTOR 3 COPY A,SCUR JST  DULAR IF DUAL DENSITY WORD 256 2 SECTOR LONG I/O = 256 COPY =128,A 2 SECTOR LONG I/O COPY A,WRDC JST SETIOB SET UP THE IOB SBIT 8,S ENABLE INTERRUPTS COPY MIRP,A RETURN (INTRPT) ADDRESS COPY A,IOB+INTERP COPY IOBP,A PICK-UP IOB DA24 OUT A,FLPYDA*8+0 AND DO I/O JST DIDL ?  DONE? COPY =ERRK04,A JST ER JMP MIR ERROR REPORTED, CONTINUE MIRP WORD MIR MIR JST TM2 GOOD RETURN, CONTINUE NOP JST $+1 ERROR RETURN ENT COPY =:FF,A AND  IOB+STATX,A JEQ A,$+2 ERROR RETURN .... NO ERRORS JST STATCK ERROR RETURN TAKEN AND NO COPY =ERRK01,A JST ER JST TM2 TM2 ENT COPY =26,A COPY A,IOB+SECTOR SECTOR 26 SBIT  8,S COPY MIR2P,A COPY A,IOB+INTERP COPY IOBP,A GET IOB DA25 OUT A,FLPYDA*8+0 AND DO IT  JST DIDL COPY =ERRK04,A JST ER JMP MIR2 ERROR REPORTED, CONTINUE MIR2P WORD MIR2 MIR2 JST TM4 NO ERROR RETURN, SHOULD HAVE NOP END OF TRACK ERROR JST TM5 ERROR RETURN, SHOULD BE TAKEN TM4 ENT COPY =ERRK02,A JST ER JST TM5 TM5 ENT COPY IOB+STATX,A IFT ENDOFT<15 ROTATE A,RO,ENDOFT+1 RBIT 1,S ROTATE A,LO,ENDOFT+1 ENDC COPY A,IOB+STATX JNE A,TM6 COPY =ERRK03,A  JST ER PRINT ERROR TM6 EQU $ COPY TMTMP1,A COPY A,PUP1 TM7 EQU $ JMP *TESTK SET, EXIT TMTMP1 WORD 0 TMTMP2 WORD 0 * TM8 JST *$+3 TM8 IF PUT AT LOC :0 TO TEST NOP DISABLE ABILITY OF CONTROLLER JST *$+1 INTERRUPTS WORD MIR3 MIR3 IS ERROR INTERRUPT LOCATION LPOOL TRKLEN EQU 1742 TOTAL WORDS IN BUFFER TITL HIGH MEMORY TEST * THE HIGHEST READ/WRIE LOCATION IS FOUND. * AN INCREMENTING PATTERN IS WRITTEN FOR ONE SECTOR, * (TWO IF DUAL) THEN READ INTO THE OUTPUT BUFFER TO VERIFY * THAT WHAT WAS READ WAS INDEED WRITTEN. * THIS IS PERFORMED UNDER THREE CONDITIONS: * * 1) IOB AT END-OF-MEMORY, DATA BUF IN LOW MEMORY * * 2) IOB IN LOW MEMORY, DATA BUFFER AT END-OF-MEMORY * * 3) IOB AND DATA BUFFER AT END-OF-MEMORY. * * * PRINT TITLE AND OUTPUT TO CONSOLE DATA REG * TESTM ENT JST RUNOVR WORD 7 COPY =13,A TEST M JST TSTITL PRINT TITLE JST SETFLG * COPY ='M',A TEST M SELP A,4 OUTPUT TO CONS DATA REG * * COPY =HIMEMB,A JGE A,TESTP1 IS THER SUFICE MEMORY COPY =ERRM03,X NO ... JST ER JMP *TESTM RETURN ... NOT SUFF. MEM. * * FIND END-OF-MEMORY -- STORE IN EOMPTR * TESTP1 COPY FLBTOP,X MAX MEM+1K-1 TESTP2 COPY X,A SUB FLBDEC,A SUBTRACT MEMINC=1K COPY A,X COPY =:55,A GET PATTERN EXCH 0(X),A WRITE IT EXCH 0(X),A READ IT  SUB =:55,A SAME JNE A,TESTP2 NO--- KEEP TRYING EXCH 0(X),A TRY ONCE W/ZERO EXCH 0(X),A JNE A,TESTP2 NO --- KEEP TRYING * * END OF MEMORY FOUND * COPY X,EOMPTR PTR TO LAST MEM CELL * * * IOB -- IN HIGH MEMORY * * DATA BUF -- IN LOW MEMORY * TESTP3 COPY EOMPTR,A END OF MEMORY SUB =9,A ALLOW 9 WORDS=IOB COPY A,TSTIOB STORE NEW IOB ADR COPY =BUFFER,A GET NEW BUF ADR COPY A,TSTBUF STORE BUF ADR * * SET UP IOB FOR WRITE * COPY =WND,X WRITE NON-DELETED DATA JST TSPIOB SET UP IOB JST DMADO DO I/O & STATUS CH@ K * * * COPY =RND,X READ NON-DELETED DATA COPY BUFR2P,A GET NEXT BUF ADR COPY A,TSTBUF STORE BUF ADR JST TSPIOB SET UP IOB JST DMADO DO I/O & STATUS CHK * * * COPY =256,A LOAD WORD COUNT COPY =ERRM00,X ERROR CODE JST COMP WORD BUFFER EXPECTED DATA WORD BUFR2 RETURNED DATA * * IOB -- IN LOW MEMORY * * DATA BUF -- IN HIGH MEMORY * TESTP4 COPY EOMPTR,A END OF MEMORY SUB =256,A ALLOW 256 WDS = INPUT BF COPY A,TSPIBF SUB =256,A COPY A,TSPOBF OUTPUT BF COPY =IOB,A IOB COPY A,TSTIOB STORE IOB ADR COPY TSPOBF,A GET NEW BUF ADR COPY A,TSTBUF STORE BUF ADR * * SET UP IOB FOR WRITE * COPY =WND,X WRITE NON-DELETED DATA JST TSPIOB SET UP IOB JST DMADO DO I/O & STATUS CHK * * SET UP IOB FOR READ * COPY =RND,X READ NON-DELETED DATA COPY TSPIBF,A  GET NEXT BUFFER ADR COPY A,TSTBUF STORE BUF ADR JST TSPIOB SET UP IOB JST DMADO DO I/O & STATUS CHK * * COPY TSPOBF,A COPY A,TSTPE1 COPY TSPIBF,A COPY A,TSTPR1 * * NOW COMPARE BUFFERS * COPY =256,A LOAD WORD COUNT COPY =ERRM01,X JST COMP TSTPE1 WORD 0 EXPECTED DATA TSTPR1 WORD 0 RETURNED DATA * * IOB -- IN HIGH MEMORY * * DATA BUF -- IN HIGH MEMORY * TESTP5 COPY EOMPTR,A END OF MEMORY SUB =9,A ALLOW 9 WORDS = IOB COPY A,TSTIOB NEW IOB ADR SUB =256,A ALLOW 256 WORDS = INPUT BUF COPY A,TSPIBF SUB =256,A COPY A,TSPOBF OUTPUT BUF * * SET UP IOB FOR  WRITE * COPY =WND,X WRITE NON-DELETED DATA COPY TSPOBF,A GET NEW BUF ADR COPY A,TSTBUF JST TSPIOB SET UP IOB JST DMADO DO I/O & STATUS CHK * * SET UP IOB FOR READ * COPY TSPIBF,A GET NEW BUF ADR COPY A,TSTBUF * COPY =RND,X READ NON-DELETED DATA JST TSPIOB SET UP IOB JST DMADO DO I/O & STATUS CHK * * NOW COMPARE BUFFERS * COPY TSPOBF,A COPY A,TSTPE2 COPY TSPIBF,A COPY A,TSTPR2 * COPY =256,A LOAD WORD COUNT COPY =ERRM02,X ERROR CODE JST COMP TSTPE2 WORD 0 EXPECTED DATA TSTPR2 WORD 0 RETURNED DATA * * JST TSPRES RESTORE STATE * *  EXIT * JMP *TESTM *** TSTBUF WORD BUFAD CURRENT BUF ADR TSPIBF WORD 0  INPUT BUF ADR TSPOBF WORD 0 OUTPUT BUF ADR FLBTOP WORD :8000+MEMINC-1 START SEARCH HERE FLBDEC WORD MEMINC MEMORY INCREMENT MEMINC EQU :400 1K MEMORY INCREMENT EOMPTR WORD 0 END OF MEMORY LPOOL * * * TSPRES - SUBROUTINE TO RESTORE STATE OF: * * - IOB POINTER * * - DMA POINTER * TSPRES ENT COPY =IOB,A GET IOB ADR COPY A,IOBP RESTORE IOB PTR COPY A,DMA0 RESTORE DMA PTR * JMP *TSPRES * * TSPIOB - SUBROUTINE FOR TESTN * * - OP-CODE IN REG X * * - BUF ADR IN TSTBUF * * - IOB ADR IN TSTIOB * * A  SETS UP IOB & BUFFER * * TSPIOB ENT COPY X,FCUR STORE OP-CODE JST FNTITL WRITE FUNCTION TITLE *  JST PREP SET UP FLOPPY DISK COPY =256,A LOAD WORD COUNT COPY A,WRDC CURRENT WORD COUNT *  NEG A,A NEG BUF LENGTH COPY TSTBUF,X GET BUF ADR JST FILCYC FILL BUF -- INCR PATTERN * COPY TSTIOB,A GET NEW IOB COPY A,DMA0 STORE FOR I/O OPER COPY A,IOBP SAVE IOB LOCATION FOR IOB DUMP * * COPY TSTBUF,A GET NEW BUF ADR COPY A,BUFAD COPY A,BCUR * * JST SETIOB SET UP I/O BLOCK JMP *TSPIOB **** TSTIOB WORD IOB TO * LPOOL TITL TEST N. INTERRUPT LEVEL TEST *************************** * * * INTERRUPT LEVELS TEST. * * * * A I/O OPERATION IS PERFORMED WITH AN INTERRUPT * ADDRESS IN IOB WORD 7. TWO I/O OPERATIONS * ARE PERFORMED WITH BITS 12 AND 13 OF THE PSW * SET AS FOLLOWS: * * * PASS BITS 12 BIT 13 ACTION * * 1  ON OFF SUPPRESS INTERRUPTS -- TIME OUT * 2 ON ON SUPPRESS INTERRUPTS -- TIME OUT * * BIT 13 IS NOT USED BY THE CONTROLLER, BIT 12 MUST * BE SET (=1) WHEN UIS (UPDATE INTERRUPT STATUS) IS ISSUED * * SAVINT WORD 0 SAVE 'INTS' STATUS TESTQC WORD 0 CONSTANT FOR STATUS WORD PSWMSK WORD 0 PSW MASK TESTN ENT JST RUNIND COPY =14,A TESTN JST TSTITL PRINT TITLE COPY INTS,A GET INTS STATUS COPY A,SAVINT SAVE INTS COPY =0,A COPY A,INTS SET INTS FLAG COPY =-2,A TWO PASS COUNTER COPY A,TEMP1 COPY =:1000,A COPY A,TESTQC SAVE FOR STATUS WORD TESTQ1 RBIT 8,S CLEAR INTS RBIT 12,S CLEAR TO ZERO BIT 12 RBIT 13,S BIT 13 COPY =NOOP,X NO OPERATION COPY X,FCUR JST FNTITL WRITE FUNCTION TITLE JST PREP RESET FLOPPY * * * PASS 1 : PSW BIT 12 --- ON * BIT 13 --- 0FF * * COPY TSTQS1,A RESTORE TIMED OUT RETURN COPY A,TSTQ1 TO I/O ROUTINE COPY TESTQC,A * TSTQ12 COPY A,PSWMSK COPY S,A GET PROGRAM STATUS OR PSWMSK,A SET BIT COPY A,S UIS UPDATE INTERRUPT STATUS SBIT 8,S ENABLE INTERRUPTS COPY =TSTQI1,A PLACE INTERRUPT ADR COPY A,ICUR IN CUR INTERRUPT ADR JST DMA DO I/O * TSTQN1 IMS TEMP1 JMP TSTQP2 DO PASS 2 JMP TESTQ2 DONE * * * PASS 2 : PSW BIT 12 --- ON (=1) * 13 --- ON * TSTQP2 COPY =:3000,A COPY A,TESTQC JST RUNIND JMP TESTQ1 * * INTERRUPT RETURN PSW BIT 12 WAS ON * * * * TSTQT1 JMP TSTQN1 TIMED OUT .... EXPECTED * * TSTQI1 JST $+1 NORMAL RETURN ....ERROR NOP JST $+1 INTERRUPT RETURN ....ERROR NOP COPY =ERRN00,A JST ER JMP TSTQN1 DO NEXT PASS * TESTQ2 EQU $ COPY =0,A DELETE TEST O SPECIAL RETURN COPY A,TSTQ1 . IN I/O ROUTINE COPY SAVINT,A COPY A,INTS RESTORE FLAG FOR INTS * JMP *TESTN EXIT * * SAVE INSTRUCTIONS * TSTQS1 WORD 0 SAVE FOR TIMED OUT * * LPOOL TITL TEST T. TECHNICIAN TEST. * THIS TEST PERFORMS A SIMPLE FUNCTION REPEATEDLY * UNTIL THE SENSE SWITCH IS CHANGED. * FUNCTIONS ARE: * 0= RESTORE (TO TRACK 0) * 1= SEEK (CYCLE N STEPS IN + OUT) * 2= READ W WORDS * 3= WRITE W WORDS * * INPUTS ARE: * U= UNIT TO BE TESTED * F= FUNCTION DESIRED (0-3) * T= STARTING TRACK ADDRESS * B  S= STARTING SECTOR ADDRESS * W= WORD COUNT * N= NUMBER OF TRACKS TO CYCLE * P= PATTERN TO BE WRITTEN * * * A SPACE SHOULD BE ENTERED TO TERMINATE EACH * INPUT PARAMETER * * SENSE SWITCH ON CAUSES RESTART * * TESTT ENT JST TOPOFF JST MSGA INTRODUCE THE TEST WORD TECHMG ='TECH TEST (TEST15)' TECH JST RESTOR DO A RESTORE FUNCTION SBIT 8,S ENABLE INTERUPTS TO SBIT 4,S ENABLE ESCAPE TO MONITOR COPY =1,A SET SECTOR TO 1 COPY A,SECTT JST RUNOVR WORD 14 JST MSGA ASK FOR UNIT TO BE TESTED WORD TUO ='U=' JST IHEX GET VALUE COPY X,A CSK A,=4 JMP $+3 NOP JMP TESTT+1 COPY X,UNITT SET-UP I/O UNIT COPY X,UCUR JST SETFLG JST RESTOR COPY UCUR,X COPY X,UNITT OTHERWISE STORE IN UNIT CELL TECHFN JST MSGA ASK FOR FUNCTION (0-3) WORD TFO ='F=' JST IHEX GET VALUE COPY X,A CSK A,=4 JMP $+3 NOP JMP TECHFN COPY X,TIOB STORE INTO FUNCTION CELL COPY X,TECFUN SAVE FUNCTION CODE JEQ X,TECH2 IF A RESTORE (0) JUMP THERE JMP TECH1 TECH2 JMP TECRES TECH1 JST MSGA OTHERWISE ASK START TRACK WORD TTO ='T=' JST IHEX GET VALUE COPY X,A CSK A,=77 JMP $+3 NOP JMP TECH1 COPY =1,Q XOR DULFLG,Q DUAL FLAG SET? JNE Q,$+2 NO SHIFT X,LO,1 YES,(X) MULT. X TWO COPY X,TRACKT STORE INTO TRACK CELL COPY X,TNKS STORE STARTING TRACK COPY TIOB,A PICK-UP FUNCTION SUB =1,A SEE IF SEEK JEQ A,SEK SEE IF SEEK TECHSC JST MSGA ELSE, ASK STARTING SECTOR WORD TSO ='S='  JST IHEX GET VALUE COPY X,A CSK A,=26 JMP $+3 NOP JMP TECHSC COPY X,SECTT PLACE GENTLY INTO SECTOR CELL JST MSGA ASK FOR WORD COUNT WORD TWO ='W=' JST IHEX GET VALUE COPY X,WORDT HIDE IT AWAY COPY TIOB,A PICK-UP FUNCTION CODE SUB =2,A IS THIS A READ? JEQ A,RD  YES, GO TO READ SECTION COPY =WND,A NO, STORE WRITE FUNCTION CODE COPY A,TIOB JST MSGA ASK FOR PATTERN ON WRITE WORD TPO ='P=' JST IHEX GET VALUE COPY X,A PLACE IN A JST FILCON FILL BUFFER WITH PATTERN JMP DOIT GO TO IO ROUTINE LPOOL RD COPY =RAD,A IT'S A READ, GET FUNCTION COPY A,TIOB CODE AND STORE IT JMP DOIT GO TO IO ROUTINE SEK JST MSGA AS THIS IS A SEEK FUNCTION WORD TNO ='N=' ASK FOR CYCLE VALUE JST IHEX COPY X,A CSK A,=77 JMP $+3 NOP JMP SEK COPY =1,Q XOR DULFLG,Q DUAL FLAG SET? JNE Q,$+2 NO SHIFT X,LO,1 YES,(X) MULT. X TWO COPY X,TNK STORE IN TRACK KONSTANT COPY =SEEK,A LOAD UP THE SEEK FUNCTION COPY A,TIOB CODE AND SAFLY DEPOSIT IT JMP  DOIT GO TO THE IO ROUTINE TECRES COPY =SEEK,A A NEGATIVE RELATIVE COUNT COPY A,TIOB EXCEEDING 77(AVAIL TRKS) COPY =0,A ZERO INTO COPY A,TRACKT TRACKT CELL DOIT JST MSGA THE IO ROUTINE IS WORKING C  WORD TRO ='RUNNING...' TELL WHAT'S COPY =0,A HAPPENING, AND ZERO A COPY A,S RESET ALL THE STATUS BITS COPY A,CYCFLG SET SEEK CYCLE FLAG SBIT 8,S SBIT 4,S DOIT2 COPY TIOBP,A GET THE IOB POINTER DA40 EQU $ OUT A,FLPYDA*8+0 INITIATE IO DA41 EQU $ SST FLPYDA*8+0 CHECK FOR DONE (IDLE) JF SS,$-1 CHECK FOR IDLE OR SENSE SET COPY =0,A COPY A,RCT FIX POSITION NOW COPY STATT,A SELP A,4 DISPLAY STATUS AND HFF,A ERROR MASK JEQ A,$+2 CHECK FOR ERRORS. NOP  ON ERROR NO-OP IS EXECUTED COPY TECFUN,A JGT A,TECH4 COPY STATT,A SELP A,4 OUPTUT CURRENT STATUS TBIT TK0,A JT OV,TECH3 IF ON TRACK ZERO SKIP JMP TECRES TECH3 EQU $ JF SS,DOIT2 TECH4 EQU $ COPY TIOB,A PICK-UP FUCTION SUB =SEEK,A IS IT A SEEK? JEQ A,$+2  JF SS,DOIT2 NO, GO DO IO AGAIN COPY TRACKT,A YES, MODIFY THE TARGET TRACK COPY CYCFLG,X GET SEEK FLAG NEG X,X COMPLEMENT FLAG SUB =1,X COPY X,CYCFLG STORE IT JEQ X,DOWND IF ZERO CYCLE DOWN ADD TNK,A ELSE ADD 'N' TO START TRACK COPY A,TRACKT AND STORE IT COPY TNK,A GET RELATIVE COUNT COPY A,RCT STORE IN TIOB JF SS,DOIT2 AND EXECUTE DOWND COPY TNKS,A GET STARTING TRACK COPY A,TRACKT PUT IT IN IOB COPY TNK,A GET RELATIVE COUT NEG A,A NEGATE A-REGISTER  COPY A,RCT STORE IN TIOB JF SS,DOIT2 GO DOIT COPY STATT,A GET STATUS SELP A,4  OUPTUT CURRENT STATUS COPY A,IOB+STATX JST ERPIC JST STLPTY JMP TECH ELSE, RESTART TECFUN WORD 0 TECH TEST FUNCTION CODE HFF WORD :FF TNK WORD 0 TRACK CYCLE NUMBER TNKS WORD 0 STARTING TRACK NUMBER CYCFLG WORD 0 SEEK CYCLE FLAG TIOBP WORD TIOB POINTER TO TIOB TIOB EQU $ START OF IO BLOCK FUNCT WORD 12 UNITT WORD 0 TRACKT WORD 0 RCT WORD 0 RELATIVE SEEK COUNT SECTT WORD 1 SECTOR DESIRED WORDT WORD 0 WORD COUNT ADDT WORD BUFFER BUFFER ADDRESS INTT WORD 0 INTERRUPTS DISABLED WTR  WORD 0 WORDS TRANSFERRED STATT WORD 0 STATUS WORD RES :6 OTHER PERTINENT INFORMATION  LPOOL LCATBP EQU $ LCATBS EQU $ TITL UTILITY ... RUNOVR RUNOVR ENT COPY LPFLG,A JEQ A,NOLINE JMP $+3 YES --- WATCH PAGES NOLINE IMS RUNOVR NO --- JMP *RUNOVR COPY RUNOVR,X COPY 0(X),A IMS RUNOVR ADD LINES,A COPY A,LINES JLE A,$+2 JST TOPOFF EQUAL -- TOP OF PAGE JMP *RUNOVR NOT YET * * EJECT PAGE * TOPOFF ENT RSAVE SAVE REGISTERS COPY LINECT,A  COPY A,LINES UNSAVE RESTORE REGISTERS JST MSGA WORD TOPS JMP *TOPOFF LINECT WORD PAGESZ LINES WORD PAGESZ TOPS WORD :8C TOP OF PAGE WORD -1 LPOOL LCATBT EQU $ TITL D BUFFERS. *I/O BUFFERS * * BUFER WORD BUFFER POINTER TO MAIN I/O BUFFER BUFR2P WORD BUFR2 POINTER TO SECONDARY BUFFER * BUFFER RES :200 MAIN I/O BUFFER BUFR2 RES :200 SECONDARY I/O BUFFER * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * *** * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * *** * * * * * * * DBEGIN RES :1440 FORMAT TABLE STARTING ADDRESS PRGEND EQU $-1 LAST USED CELL END FDD RELATIVE SEEK COUNT SECTT WORD 1 SECTORO0SEGMENTBLANK oim MACRO (F100) i€¿€””¿€ Œ¿€‘ÿˆ¿€úŠŸ€éà¿€˜øeþ¿€± žüŸA0Š 0ÿÿ ŸuŸ Û$Ÿ+ M@ÿÿ MM@ÿÿ š Ù ¨ ¥ B ; 8 ? • S Ó HËÚz~ަ­·X€W -67ÔdpÖ †­ˆ‡¸ ć·‡·¸‡¶ †J¿¬ž„†  6D¾ž¿­¿¥¿¬‚™6Ažƒ ‡§¿§ ¿ s¿¤¿¤¾Ÿ£¿£ ¿0  0…E¿›¿Žžýž¤ ‡•¿• ƒ•ß6ÖŸxº‘¯°± ¼ÅzÀÛ›T  È) ¿lé ž| @¿f  ¿§‚W  ‡¨¿¢‡§†P6A¿Wƒ¡1¯ ¿šž”Ÿ™žkžjžižŠ) Dž„ F ža)§‘žf¿‹ž\ž[žY¿@ž­ Ÿ…FÀi¨Á^]  O‡‚„‡•‚•‡• ¿€ G … ‡¿ ¿ŒŒE…ƒ‰ ¿ˆ Ÿ‡€”R)‹nŽ¿ ®¿ -¿O ‡¤¿L1Y »¡žžtƒ žqƒšŠ£‡š £˜„€ÿ„ß’¿; žŸ:ždž”žhž†ž_ƒ‹5)žg ¿0žYžXžVG b ¿çŸðŸ#MÀFƒ|‡ë¿à ¿éƒÞ ‡è¿ ‡h¿1E »ážƒžqž žõƒ_ žl ŸÙ+ƒÊA.§ÕßU ƒÅ»Ñž‰ ÿL‡Ê ‡¼ žW ¿ºžæŸ¹žRžžYž‚ž†žM¿³ žKžJžH¿§žF¿­1ÁžÍ ºêž ž?ƒ/ þÁž‚ß+žzƒ) ž6 žÔ +ÔQA.¦Üß ‚غ؞‡  ÉQA†Ñž# †Ìž—G  Ài¨F Ð   ø H¿mž·ŸlžŸ” ž;žƒžžž)¿eŸŽŸŸ‹ƒˆ8 )žƒ„+)ž3b(aƒ›\ †•ž™ ›IÄ.§G. Ÿ‘§DŸ ›@Ä.¦‡. ž%¦„ž#L w¿/žŸ¢¿- $¿¿0 1º Yž“ Nž’¿'Ÿ•žÈžrž„žpž… žm¿ŸŽŸŒ¿žhžgže ‡‡ ¿‡¿žj'H_ì¿ 2¿w ¿§ :¿Ÿ¿Ÿ1M I´§›¾øž¢ žŸžož‡žmžˆžkžjƒ5žg¿ž? Ÿ_¿Žžbžaž_j  _gRÀ¨)ÿ†s ƒv!‡Æí‡Å‚j†m£l”€·¾„€ Þgß¼žx¿· ¿7 :¿` ‡ ¿^ 1T º žžr߃ žn ž“§¤ ¾°ž˜ž•žgž&žmž†žbƒ5) žl¿Hž\ž[ žY †žkÿÿ ÿ†5¿¿9ŸŒU…ŸŠÿÄÿÄÿ¸ bÀ æ  ÷¿ãTU Ÿz ƒà Ÿ|Þ{ #ŸyÞx _ŸvÞu ^ŸsÞr ,ŸpÞo :ŸmÞl ŸjÞi Ÿh ƒÉ ÿ¿ÇŸz †º¦¸ ƒÁ à ‡½)¦µ£tÞsƒr†°Þp €€­ÈÞ«’«A+’¨Þ¤žvŸe¦¢ ‚Ÿ¿¤ƒ56Y¿1 [¢š :¿¡€€¿  ¿ ¿Ÿ :¿›ƒ’¿š¿š¿™ :¿•‚‹¿” ¿”¿“ :¿‚†¿Ž¢ƒžW ðaø_F) ¿ì †ˆžž‰ÿQ ¾Þ…žw‚á …ŸàŸo ƒÝ݇݃Úq·Û ø¿[ ‡ÕŸq ¾ožƒ ‚~ †z…EƒÃ6Á¾Ð‚oˆˆžˆ‚k †‚ö¿BF ‚¾¿?ƒ½Až§)¦® q ÿ>Þ©žz‡Ÿ² ˆ…‚¯ ¿-ŸU¾ƒ¾‚¾¾€  ÿ¾ …ˆžž‰‚B†‚ö¿F ‚™¿ Ÿ>¾‚8†‚ö¿F ¿Ÿ5 ä Å "  ) ž    3 ¿•ž‚¿”ø†Ž†Œƒ’ †Œ¿Ž …ƒˆ¿‹¿ŒÞ…ÞƒžyŸl  }F) §Œ‡ŒƒŒ ž„Þy£†ƒ†ŸvƒuÞtÞsŸr  ƒ@6\¾Ÿƒ­†ƒ¿`ž‚¿_ ¿^ Š£¨ !¦ò£¢*ÿ¦ð¿V sø †í¾‹Þêƒé¿P ¿—Þ䞟_Þãžu žp ƒ 6¸Ÿ{ ‡þ‡Œ‚Œ‡Œ ‚y‡……Ÿ‰ _%@B= A Iƒ¸ ÿBN ž|ƒ´D䃱G‡¯ƒ¬†¡ÿ‡©¿ ¥ƒ§¿`¿ ÷ƒ¥¿\¿Fƒ¢ H¾J :¿Tƒž <¾E :¿Oƒš <¾@ ¿J ¿H‚ƒ‡Œ…Ÿ‘ ERROR T IME ÿÿz 3±°¯Å £Ô¿Ð¿Ó¿Ï ˆ ›ÐÃÏ —χσ̻Ǟ‚ž ÿIÛÅQÁ ¿ ¿À ›¿Å¿¹ σ¾¿¿¸¿´ Nƒº ¿¿³¿¯ J :¿ƒ¿³¿¬¿¨ Öƒ ¿¯¿¤ ñƒ­¿«Ÿ ¿ Vü†D £¥ü†B .6Á ‹Ÿ¿ŸÞ;žx  ¿›Þ6žrŸj 0ÿÿ ÿÿÿE  +H) ˆ ‹ F ()_ ‡Ÿ| ƒ  ‡ Ÿ{ ñ¿£ ¢¢ „‹„‡Ÿ ó¿š9Fƒ›‡—¿š‡šHƒ™‡™ƒ™ ‡—ƒP‡N‚‰ ž† †…ƒ‡ ‡ŒŸ[ð   M S FGn« ‡„¿†ÿ€¿mŸ  Ÿwà ‡½ „€ +߸ž{Ÿw  ‚†‡‚‚…¿[Ÿ Ÿxªªõä ‚‡ ‡ƒ‚©¿PŸ Ÿwªª ƒ¢AŸ| Þ{Ÿz C¿ s¾Ÿz ¦‰‚‡Š‡ ††ƒ…†¿‘Ÿv^ ‡Œƒ2Š… Ü€ƒ†ŸwVW=]  †—†˜¾»†•—Ì–JÞ‘‚Ž ŠŒŠ‹ņ‡žp‚†¢„Ÿi ?¿‡ žg†\_ †v†w ¾š†tvÑŽ”ÍŽ’ ÌŽŽJŠŽ †i‚g1¶f†dÞežmŠ…žw‚`¢^Ÿd   …‚އ–ÿ‡•‚•‡• †‚“ùžÑQA¾‘ŸoEø Þ~… ‚ƒ†Ÿyàá >âz  …HÿDZÂvǰ†q¯Bÿž … Ÿs ß©ƒ¨»¨Ÿ{ ‡£žƒ ‚~ †t¿ ß ƒŸ»Ÿž‚ÞmŸl ‡™ žƒ ‚~†yƒ•6Á¿“ƒ“ˆ¿’ˆ žŸo‚¿Ÿlùú Jä  H'¦)  ‚ׇÔ Ÿ| †Žƒ}†Þ{ƒz†‹Þxƒˆ‡ˆÞ† Þ†Þ‚žyŸp †¦Ž£| .Þz%€€' ÿžƒ¾Ð+žx¢‚‚‚ Ÿo †¨û†¨‚ž†¥ †¡‚¡ )/ +=‹†› 0žŒ†–¾µÞ– Þ–žq‚‘ žŸe 0¾¬Ÿb‚Š žs 0žp:'èd  _u û†‘ –y9 .1Þ‹žž†ŠÁЄЄ¾‡žrŸl :ð\ …˜QA¿ŽÂ•RJ‡Œ ‰NjHÿNJŠNJŠBùžŸneø§ Ÿàá >â ÿ‡ÀŒ žž‚¾ Nƒ»‚Œž ‡: ‡® ¾½ƒ³‡³‚„‡²‡²ŸiuŸ … ¿¬ ü †¿¨ Œ ‡› ‡¤ ‡˜ ¿˜ ‡— ‡“¿“߃ žžžp ‚‡D‚„‡’ †‚Ÿ !  È"G % Ÿ Œƒ›‡ ‡œ‡œ‡k‡› ‡d‡™ ‡˜¿ƒ—ˆ¿ƒ• ¿6B‚‘¿‡Ÿe 6AŸ| ) ,2-0/+*4  ?¦Ž )0(¦†‰Ÿx ‚†Â‡/¢†0 ¢‚ Ÿx )§0ƒ\‡-¿.ƒ  6ž¿Wžuƒš—›C †„ž‚  †Ÿk †‡ƒGІ Ü€‚Ÿw Z ¿†¿…¿„Ÿz)  Ï_  ßÏ ÿ—xÁžÄü†Æ †ÅƒqO 6Z_6Zo6Z6ÿ¾‚h¾Ì/6 ‚º¾È?6‚·¾Ä6‚´žŠ6æ ‚±¾¼ž£‚¯žƒ‚®ž‚­¾µ “«†  ƒªˆ¿ƒH_6ÁžŠo6Áž‡O6 ¾µžƒ6ž€ÞÞ‹žl ‡–‚ˆ þ Á¿ˆ ‡…ƒ/Ÿ27           'Þ  £$¿ˆƒˆƒˆ Á¿†ƒ Ÿtä Ô ‡¡ ‡ ‡  ‡ ƒ ˆ¿ŸƒŸ¿6B‚¿mƒœ‡”ƒ– ˆ¿•Ÿk ‡–EŠ…†ˆß“¿“ÄŸw @ TEST ÿÿ+-20*) ) " USING A SI NGLE FPYÿÿ USING DUAL F PYÿÿ USING WRONG CONTRO LLER ÿ DRIVE NOT REA DY ÿ VERIFIES FORMATT ED DISKETTEÿ SET UNIT T O WRITE PROTECT ÿ SE LECTED UNIT WRITE PROTE CTED ÿ REMOVE WRITE P ROTECT ÿ RETURN FLOPP Y TO ÿ BUF=ÿÿ CONTROLL ER NOT PRESENT ÿ EXP DA TA ACT DATA EXP ADDR ACT ADDR  ÿ ÿÿ  ..........TEST FAILED!! ÿ IOB ÿ DUMP:ÿ  EOT ÿÿTÿ ER AD=ÿÿ  ER ÿFMATÿÿ FORMATTER OR DIAGNOSTIC?ÿ FORMAT U TILITY PROGRAMÿÿ FORMAT SEQUENCE NUMBER (01)=ÿÿ FUNC=ÿHEAD= ÿÿINITÿÿLE N=ÿÿNOPÿ REMOVE DISKETT E AND INSERT IN NEW UNIT =ÿ WDS XFRD ÿ PASS ÿ ÿÿ POWER FAILÿÿ SECTOR FLAG FIELD (0)=ÿÿ SNS  REG? ÿÿ TSTS=ÿ OPR?ÿÿ TRACKS=ÿ INTS? ÿÿ PA TN=ÿ UNITS =ÿ DEV AD=  ÿÿRDRGÿÿRD DDÿÿÿREADÿÿRD NDÿRL=ÿÿÿ RSTOR ERÿSE CTOR= ÿÿSEEKÿÿ STAT ÿ  ERRS: U HARD SOFTÿÿ TECH TEST (TEST 15)ÿÿ  FLOPPY DISK DIAGNOSTIC (93072- A0)ÿÿÿTRACK= ÿÿ INITIALIZATIONÿÿVERÿ CLSE DR. DONT WR ENAB  ÿWR DEÿWR NDÿ ¿­ž‚¿¬  ¿ª¿¢ ¿¨¿ ¿ )§Ÿ¿Ÿ‚£ ‡£Ã£Lžž…¿ ¿•¿Ÿžž‰ÃL ž‚‚›‡•¿–¿‹¿•ž| ‡ˆ ‡“¿Ž ŸW{3%}º€  GJ½  ¿´ ‡³ƒ³‡ª ¿i »¿¨¦e’d¢c¹ æ7   ¦\’[¢Z§œ¿œž¦ž¥žlŸžžjžižh žg¿P ¥¿Nø¿– ¿•)§‹¿‹ ž¸¿D ¥¿B )žs ªF …À È À\z†_¿1 ¿p¦- ’,¢+¹ ù7 ¦&’%¢$.A§Š¿e žŠž‰žmž4žkžjžižh ‡ƒV †{ƒz‡¡‡£‹£‡£ ‡R¿Rƒ 6Á ž8ÿ6¿ ¥)§¿¿¿¿”‚ ‡“ƒ—’C¿‘àž‚¿ŽÕƒMŸ‚  Ÿ ÷!o ¨) ÏG æ†êF ƒò‡é¿éƒéq‡î ‡æq‡ë ‚h†…æ‡èÛ¿ß»¢~+%¦‹ž‡ ßàƒßq‡Û¢…+]¦ƒ£¿Ð^  ƒ žž ßÏžn¢w+]*ÿ¦ƒz¿Á Ø¿¿ƒÅ ‡Â¿»žÏ¿Àß¿ ƒ¾†ƒ Ç3¿ºž ‡¸¿¸ƒ¸Ÿ¸ žQ‚†‚œ‹¦†™IÆ–º™ž‚ž† ž€q‡ Þ”žCž‡‚ ††‹IƇ žt憉)¦„¦„žC ÿæ ;  ðM½ … „ab ‚ Š « ªà]À } ƒ———ÁŸ–¿–ƒa—‡ ž–¿‘ƒ\—ˆ‡ˆ‚ˆ‡ˆƒWq·ƒ‡‰ž” ˆ ‹Ÿ)Ï o üæ †C‚t‡tƒC q¶í‡t‚î‡;¿;  ‡;q¶ã‡ì‚e†…æ†á·¿3 « ¢~+I¦ƒG¿, ô‚Î žž¥ÞÑ žž‰ÞÏ‚Îq¶È‡Ñ¢r+¹¦pžl¢n +¹*ÿ¦ƒ‚É¿ ­¿ †¼¿ž ž‰ƒ –²†´ƒ q¶°‡7žB¿·Ÿ· ÷Qƒ¶‡¶ƒµŠ ‡²Iǯ»±ž‚ž‡ ž€q¶›‡¤ß«žQž‡ƒ© ‡§‡£I ÇŸžs懠)§œ§žžG»^ > þ ýþÕ « ª Ö × Ø Ú Û Ù UNIT ÿÿ(NNöööüNNõõõþ÷N NNNõõõû@@@@÷NN+NN†ÿÿþ÷ÿÿÿûå?ååå÷ ÿÿÿÿÿüÿ ÿÿ ÿ ¿ÕÒ‚¥aƒÒ ‡ÐƒÐ ‡Î ƒÎ ‡ÌƒÌ ‡ÊƒÊ ‡Èž‘‚“Ï ƒÀ‡¾ƒ¾‡¼ƒ¼‡ºƒº‡¸ ƒ¸‡¶ƒ¶†ŸW†¦ÿ‡¥ ‡­†x¿¬ß ¿Ÿ ÷ƒœ¿‚¦†× ƒÖ‡¤¾ž§ ƒ !†Ž톋ƒœ†‹ £Š”€¶†„€Þ…Þ‚žxŸo HGF ‹ ‹ËR[ ‡­‡­Þ@ F¿¦¿f ¥‚9¿dƒ¡ ÿ‡¢ß¡ƒ  †˜ƒ—Ažê‡œŠ’‡›¾ƒš†ƒ˜ Ä‚| @…Þˆƒ‡Ó< ¼€ž— 0}\ ª ¨ê ¿ížUß3¿3 ÷ƒ0¿1žY¿æ ƒæ)6—¿ä¿g¿' Z ‡ß£b€€ ç›ÛB+žz£×¿×žžu¿U ¿ s¿Ð¿ÏƒÌ‹Î¿Î¿Ë¿ÊƒÇŠƒ†ƒ ƒ‚ž‚V¿¿Á¿Àƒ½Šƒ†yƒxž Z¿¼¿¸£µß´ƒ³ žžQ¿ª ÷ƒ³ ¿±žÞ,ƒ+AŸ®‡®Ÿ®    ÿÿnäIW#) _R †‘߈‡ž ßžž‰ć›ß›ž…ć˜ß˜žž„‚‚ …Ÿm‡W¾©ŸŽ TEST C OMPLETED ÿÿ‘¯°±}  ƒ’ÁŸ|Þ{ Іƒ†‰ Š ‡ˆƒˆŠ„AŸoÞnŸm¤®®  ƒŒ†Šÿ‡‰ƒzÞy†¿(‚‚‡‚Ÿs z †ž†žƒiÁŸy †—£™ €€Êš“B+žzÞ¢Ž¾GŸkÞŒ Þ‰‚ˆ žžn‚…º…ŸaŸ„ \a ƒžÁŸ|‚˜ žþ¿˜ GŒÿ¿” Gÿ¿HÞlÞˆ Ÿjþ¿‰ŒG †Ÿc  ð ‚ŠÂÞ|Ÿ{ƒzЇЅ†‚ÞvŸ€ €ž»ÄÕî$6A J(D) ÿÿ(F) ÿÿ (ÿÿ) ÿÿ(N ) ÿÿ(Y) ÿÿ ,ÿÿƒ¯Ažƒ¿¨ ¨ŸO¿¥«ŸL ‡¢¿ ®ƒ£†ŠÞ‰ ƒˆÄ<¿ž¿™žy¿•°Ÿ< ‡‘ ¿®ƒ ÿ†ŠÞ‰ƒˆAžƒ·‰¿‡žy ¿ƒ°Ÿ*†yo]ê^¿x ®ƒ¼Ã¼QA ¿ºƒ· »¸žžˆ ,¿¯ƒ² ÿîQA ¿¬ƒ T¿«ƒ« æQA ¿¤ƒ¦ »¥žžˆ ,¿™ ƒŸ ÿØQA ¿–¿M°žIƒ—ÿH ²žD¿EµžAƒÿ@µž<¿=² ž9_GH) ¿0 ®¿.?ƒž¿ž¿*°ž& :ÿÿ¿%® ¿#?ƒ•¿“¿°ž¿® :¿^ƒ ¿ŠƒŒD ·†±¾£¿°ž F R¤ †—¢’¦’¢’¦’»‘ž‚ ‚ŒŸuÿ»‹ž‚‚ŠŸoÞ„Þ…‚…žq A? ‡Ä‚ŠEƒÂ¿- ƒ¿¿+Ÿwƒ¼¿(ÞŸs OPEN D OOR ÿ F= ÿ N= ÿ P= ÿ RUNNING... ÿ S= ÿ T= ÿ U= ÿ W= ÿ WRITE ENABLE D ISK ÿ¹¸¿» ¿º ‡½ ¿·1ÿ¶ŸºŸµŸ¹Ÿ¹žxž¦ À¹ ¿³ ñ5  ƒª Ÿª¦‡‚…Š… †…ƒ„†‚žƒ‚…‹œ†|‚z‡z ž ‚wŠ„†uÿ‡sžßžQ¿‹ žO¿ŠŸŒžFŸ‰FÀi ¨(÷зC‘ÄWâ ïaý¾X «ÛxÿÿC‘Ä Wâïaý¾X «Ûxÿÿ ¿ZŸã¿S )¿R¿ß :¿Þ¿Þ1J§Ý ¿LŸ×ŸKžpŸÙžnž†žk£Õ15) žr¿Ažq¾åžcžbž`¿4 ¿3 ¿21º Nž’ Yž‘¿-Ÿ½Ÿ,žrŸ¼ žpž‚žnžm¿&žu¾Êžižhžf  ‡°¿žl ƒ~Š… ÿŠ„†ÞyŸ‹p €z|~€‚„†ˆоõ Ÿj¾¡Ÿh¾õŸf¾þŸd¿’Ÿb¿‘Ÿ`¿ Ÿ^¾ÎŸ\¾ÐŸZ:)_gb a!+  ñ¿¯ ¢­ „‹„Ÿv ¿¨1Í RžŒ VžŒ EžŒ SžŒ Lž‘ Tž‘ ŸpŸo¾÷ž’¾°ž¾éžŽÞhÞgƒf† ¾"ž‡¾žž…¿†žƒ‚] ÿž€ÞZŸY ¼ð F ‡ˆŸ|  ÿ‡…‚‚‡„ŸzR¤  ‡‚¿‚Ÿ{zÀ ‡¡Ÿ| ‡¡ Ÿ| ‹ž „€ÿ„¿”‡˜Ÿu  ‡•‡•‡•ß”¿‹ƒ“ÊQA‡ˆ ƒQA‡ŸoœG]\   ‹:;H ‡…Ÿ|  ‡‚G Ÿ| ‡fŸ| ‚‚‡‚Ÿ| Û$ ¿¾s¿‹¾>¿Š¿Š¾r¾6¾D ¾a¾d¾¾ŸqºÅ  ¿¿  ¿½¿H)§»¿»¿»ƒE_ÃBQ] ‡¸ š‡´†­¿µ¿²ƒ´Ž©C‚²¿²Ÿe‚¤ €žŠ €†  ‡¦žpƒ+ÿ§ž„ŸX ¿¤ždŸU ‡› M‡—†¿˜¿•ƒ—ŽŒ C‚•¿•ŸH‚‡ @žh @†ƒ ‡‰žp }º%{ È ;(A ½ ¿q ¿o¿¥¿p) §l¿l §£ ‡¢¿k¿¡š M†—ÿž‚•  ‡š†’£“1C šžŒž‚ Mž‰¿¿‘‚‡ ÿ†…‡Œ¿‡¿‹žlŸWJ  "à 3 ¿> ¿<¿r) §:¦Ê¿9¿9óQDÃkQB €ž @‡2 †½¿¨¿c¿¨¾¬ž‚ž„ž‚¶¸žŠ ÃYQB €‡"‚® ÿ†«¿–žm¾Ížk ‚§P¿ †¢†¢)§¿ÊQDÃB QB €ž @‡ žYŸBøGä  ß¼ƒ» žž†¿ÃžÞwÞv ‡²Ÿs ¿® ¿¬¿) §ª¿ª¿ªߣ©¿©ߣ¨¿¦ !‡¦) §ž¿¿£ !‡  ‡˜¿ ¢  !¿œŸ Ÿ¿šžhŸ] ÿ‡—¢—ƒ¿‘Ÿ ‚‚¿=ŸuUU }º%{ ž Øß½DC ¿o  ¿m)§l¿l¿ø¿k¿o‚ù£i¿i †å ¾Õ‚æ‡f†â¿íƒ] ùƃ`¢ì¿`Ÿ Ÿž—ƒT þLƒQ øLƒâ‡P‚Þ¿à Ÿ  ‡Gžg ‡Džd ‡AƒE‡B ž_ƒ:о‡8 žž…ƒ=޽Âß1ß0 ¿Èž\ž“ƒ5޳F¿.¾ž‚°‡/†«žR ŽªG¿&¾–‚©‡'†£Þ¡žIŸ*ìJÿ QÌðQJü¿«Ô΂–6Á ÿ ‡ž8 ÜQÅü¿ÒΞ†Ã›Q9 ü¿–ÔΟq@ A€J GþüE ð  ¿æ‚ì†ß ¿â¿n  †Ø †×žŽ ¿Ù‚à†Ò‚z†l  ¿Ó¿_ †É †È¢Æ§Í¿Í¿Í£Ò1L £Ë¦Â)§È£Í¦¿)§Ê£Ê¦¼)§Ç ÃKQB¿¾€ @‡¼ƒÁ¿Á‚¬‡³¿?) §°¿<¿»‚¦‡¬¿8 ÿ‡·¢¢ƒ¬¿µ Ÿ‚› þƃ°Ÿ6È‚®¿®ž…ƒª 6‚ª¿¨¿©ž‰£›1F¢Œ§“¢‹§—¢Š §–Ÿ!ÃQžM} º%{ à FG^J  øØß)GF´ ¿g  ¿e¿·¿f‚³¾ÿ)§`¿`ñM ž†‚®‡^¿­¿­žž‰¿X€‚¦‡V ‡R¿£¿£ž{¿M‚›¾æ)§G¿G  ‡GÖMž†‚“‡C¿’¿’žž“¿= €‚‹‡; ‡7¿ˆ¿ˆž{ž‰ÎÄÅÅ  @J½¿(‚̆¾ ‡%) § ¿ ÃqMž‡‚n‡¿m¾«¿lž žŠ¿€‚e‡ ‡¿b¾ ¿ažz¿  ‚°†¡ ‡)§¿ÃTMž‡‚Q ‡¥¿P¾Ž¿OžžŠ¿ €‚H‡œ ‡œ ¿E¾ƒ¿DžzŸ ÿ‡•ƒ‘¢”¿” ŸŸw ‡…¿Š‚¿ŒŸ Ÿv œ à HßAð ¿¹  ¿·¿)§¨¿¨¿¨ ‡§¿ƒ¯ B‚®¿£¿©ƒ«Ážß¿ž‡¿ * ¿œ¿œƒœ6B‚ ¿“¿“÷¿’ *¿‘ ¿‘ƒ‘67 ‡¿¿„ ž”% {"†_È)3}º( IIŸ<¿p ¿o *¿n  ‡ë §c ‡é¿a ‡ç¿eƒeÿ6B ‚ã¿\ƒ`ý‡^?6C‚Ý¿Užˆ¿T ! ¿S *¿RƒS=‡Q¿Q ‡Ë¿LƒLÿ 6Ä¿E 3¿Džu *¿B¿< †‡Á)§¼ §5¿5 ‡º¿9ƒ9/6B‚¹¿0ƒ4- ‡2¿2¿))§«§$¿$  ‡$ ‡§¿& ƒ&O6B‚§¿ƒ!M}‡¿¿  “–“•S‚“‡›)§ §¿ ‡‡  ¿ ƒ 6B‚¿ƒ†‡„¿Œžð  )$%IIII&I3  ¿¸ƒÉÁŸz ¿³¿³)§²¿²ƒ² ¾û¿²‚²‡²Ã²QDñQB‚°‡¬¿¯  ‡®¿®žw¿¤‚¤‡¤Ã¤QÁžƒÃ¢QB‚¡ ‡)§•¿•¿ ‡œ¿œžt¿› Û¿ ƒ™†Ô§—§š¦Ò‚ÑšÏ5ž™}º %G{€ G J  ½ Eg!Ÿ- ‡  ¿¼ƒ6Æ¿p÷¿· *¿¶žt)§\ ¿\¿^ƒ[¾£‚[‡[Ã[QCÃZQB‚Y ‡U ‡X¿V ÿ‡¢ƒO¢¡¿¡Ÿ¿P žp‚Œ‡O¿M @ƒL‹˜‡˜¿H ¦¿€* ¿ŽžK ‡ƒ‚:¿ƒŸ Ÿx ðȆ_Jßo ¨ ¿ ƒêAžà ¿¿)§¿ƒâ»â žž„ƒÞ‡Ü‚Ý¿Ø “ۆφÎü ¿[Á ‡Ó…ƒÒˆ¿Ñžƒ ‚Ï ¿Å‚¿„¿Ì ‡Ë¿Ë €‡É¿É… ‚‡‡¾ƒ¾ˆ¿½‚ÿ³ž”¾Š¾€  ÿ—»A¿º‚º¿§¾€ ‡¶… ‚‡‡¦ƒ¦ˆ¿¥‚«¿›ž¬¾‚¾„  ‚¨¿“¾€ ƒ +#‡œ‚Ÿ ¿‰‚‚‡ŒŸ¿‚¿€} € K”')K{ à  ;K)3K$KK ¿æ  ¿ä¿ç M‚åC¢ä¿^Ÿs¢× ŽÖ U€€ «¸€€µ¦Í‚Ì ÷ †ò‚Ò†Ã)¾Ý¿Ï)ƒÎ†½¾Ø¿Ê‚à ¢Ê¿ÊŸŸ‚º †´ †³‚º†Ü‚° †­)¾Ç¿¹)‚©†§¾Â¿´‚¦†…‚£ †„‚©¢²¿°‚  ÷†Æ †˜  †—)‚•†’¾­¿Ÿ‚†Ž)¾¨¿š‚Œ †…‚‰†„‚¢™¿–¾˜Ÿ ƒÿ}ºj 1ÕM ŸMžMßMM ‚q‡— ‡—Ÿ{ §¿¿‚h‡‘¢\¿‚‡ ‡‹‡‰‚W‡‹‡‹¿‹Ÿo %{ F ; ¿²  ¿Hƒ°†w ‡­þ‡¬‚¬†r‡Ç× )§b¿b¿b‚Ÿ‡£‚h†h0¶f0  …‚œ‡œ¿œß–žžŒ‚™†Z¿žfžx ¾€¾€‚‘¿‘žq ‡ˆ‚L‡ƒŸM änŸJ0N  ¿Õ¿Ì g¿Ó…E ‡Ð¿¿Ã «¿Â ž‚žn§Æ§Æ¿Æ¿Á£Ã §Á¿µ¿´ ž‚žx§¯§¯1A žžÍ¿¨§¿§ Mž‚žxIÛ£ QÁ.§¡¦û‚H ý ÿl¿—£¿–  ž‚žx¦ö¿Ž¯¿¦ó‚í þY  †é¿…—¿„ ¿ž¨gic kf.‹Émj ø †Ðž”¿k“¿j Mž‚žxI ÛfQÁ.¦¾ †Àž„ †½ †½¿W › 0†´…E‚²ˆˆ¾ †± ‚¶–¦A‚¢F‚¯¿6Ažc ­‚  ÷A©‚ž¢™ !*ÿ¦–1EŠ’ †—‚†–ž‚ކ’‚‹†˜‚” ‡™¿™¿™Ÿ™ÿi Ÿy )À» ƒšAž‚Þ{Ÿz¢y€€ ÞwІŽÁ¾Ÿr §‡‚†††£‰ ƒ‰¿‰—ŸvÿÑÿÑŒÿÿzŸŸŸŸ2ß5ž™}º %G{€ G J  ½ Eg!Ÿ- ‡  ¿¼ƒ6Æ¿p÷¿· *¿¶žt)§\ ¿\¿^ƒ[¾£‚’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’II ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IJ ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IK ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IL ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I