bangarth@uwovax.uwo.ca (03/07/91)
Researchers here are looking for some facility to measure time with 1 ms. or less accuracy on an AT or 386 machine. We currently with our software (in Turbo Pascal) can't get any better than about 3 ms. accuracy. I have heard that there was an article written in a recent tech magazine describing a way someone has gotten the required accuracy. I know this is vague, but does anyone know where this is written up, or have a more direct answer? Thanks for your help. It could save me a lot of library work.
rdippold@maui.qualcomm.com (Ron Dippold) (03/07/91)
In article <1991Mar6.145414.8747@uwovax.uwo.ca> bangarth@uwovax.uwo.ca writes: >Researchers here are looking for some facility to measure time with 1 ms. >or less accuracy on an AT or 386 machine. We currently with our software >(in Turbo Pascal) can't get any better than about 3 ms. accuracy. I have heard I would suggest that you speed up the clock ticks. Currently they occur 18.2 times a second, but you can speed it up so that they occur 1000 times a second or more, as the timer is programmable. Your interrupt routine will need to scale whatever timer value you use down to the expected value and pass that on to the old timer. For example, if you speed up the timer 128 times, you will need to call the old interrupt vector every 128 actual ticks. You can get some great accuracy this way, just keep in mind that the faster you interrupt the processor, the more machine power it gobbles up.
mir@opera.chorus.fr (Adam Mirowski) (03/08/91)
In article <1991Mar7.025205.9213@qualcomm.com>, rdippold@maui.qualcomm.com (Ron Dippold) writes: %% In article <1991Mar6.145414.8747@uwovax.uwo.ca> bangarth@uwovax.uwo.ca writes: %% >Researchers here are looking for some facility to measure time with 1 ms. %% >or less accuracy on an AT or 386 machine. We currently with our software %% >(in Turbo Pascal) can't get any better than about 3 ms. accuracy. I have heard %% %% I would suggest that you speed up the clock ticks. Currently they occur %% 18.2 times a second, but you can speed it up so that they occur 1000 times %% a second or more, as the timer is programmable. Your interrupt routine will %% need to scale whatever timer value you use down to the expected value and %% pass that on to the old timer. For example, if you speed up the timer 128 %% times, you will need to call the old interrupt vector every 128 actual ticks. %% You can get some great accuracy this way, just keep in mind that the faster %% you interrupt the processor, the more machine power it gobbles up. On every PC you have a 838ns resolution timer, counting on 16 bits. When it reaches 0, the standard clock interrupt is called. When you want a time-stamp, just read both system time and that counter. That will provide you a very precise value. There is some effort to do in order to get the lowest overhead and a coherent value, though. Don't reprogram the timer (so as to get more interrupts), because you don't need them. You would need to reprogram the timer if you wanted to periodically poll some I/O port without sitting in a loop, or to get a more "round" signal for a scheduler, etc. -- Adam Mirowski, mir@chorus.fr (FRANCE), tel. +33 (1) 30-64-82-00 or 74 Chorus systemes, 6, av.Gustave Eiffel, 78182 Saint-Quentin-en-Yvelines CEDEX
davem@hpmwtd.HP.COM (Dave McQuate) (03/09/91)
Here's a re-post of a hardware based timer with resolution of ~ 830 nS !!! It doesn't change the DOS timer interrupt rate, so ordinary time & date are still good. I use it and modifications of it a lot. From cahalan@iris613.gsfc.nasa.gov Mon Oct 30 20:04:09 1989 Relay-Version: version Notes 2.8.2 (with RFA) 87/11/24; site hpmwdjm.HP.COM From: cahalan@iris613.gsfc.nasa.gov (Robert F. Cahalan) Date: Tue, 31 Oct 1989 04:04:09 GMT Date-Received: Tue, 31 Oct 1989 19:31:55 GMT Subject: v05i034: tctimer, Turbo C millisecond timer Message-ID: <1022@cirrusl.UUCP> Organization: Goddard Space Flight Center Climate and Radiation Branch Path: hpmwdjm!hpnmdla!hpl-opus!hplabs!ucbvax!tut.cis.ohio-state.edu!gem.mps.ohio-state.edu!apple!oliveb!tymix!cirrusl!dhesi Newsgroups: comp.binaries.ibm.pc Sender: dhesi@cirrusl.UUCP Followup-to: comp.binaries.ibm.pc.d Approved: dhesi%cirrusl@oliveb.ATC.olivetti.com Lines: 483 Summary: tctimer.zoo, Turbo C millisecond timer X-Submissions-to: ibmpc-binaries%cirrusl@oliveb.ATC.olivetti.com X-Questions-to: ibmpc-binaries-request%cirrusl@oliveb.ATC.olivetti.com X-Repost-requests-to: ibmpc-repost%cirrusl@oliveb.ATC.olivetti.com Checksum: 225051232 (Verify with "brik -cv") Posting-number: Volume 05, Issue 034 Submitted-by: cahalan@iris613.gsfc.nasa.gov (Robert F. Cahalan) Archive-name: tctimer/tctimer.uue I've seen a number of requests lately for a millisecond timer on ibmpc's. Here's just the thing, written in TurboC and placed in the public domain last year. I've used in on a Toshiba 1000 to redo Shaw's "dripping faucet" experiment, and reproduced his beautiful fractal time-time plots at high flow rates, triggering the timer thru the serial port. Enjoy! Robert F. Cahalan # Laboratory for Atmospheres cahalan@iris613.gsfc.nasa.gov # NASA-Goddard Space Flight Center frrfc@scfvm (bitnet) # Greenbelt, MD 20771 [ Includes Turbo C source and an executable. Source contains embedded assembly code, so you will probably need MASM or TASM or a compatible assembler. Checksums obtained with the 4.3BSD "sum" or System V "sum -r" command. checksum size (bytes) file (between BEGIN--cut and END--cut lines) 50275 27450 tctimer.uue checksum size (bytes) file 49474 19901 tctimer.zoo -- R.D. ] tctimer part01/01 BEGIN--cut here--cut here begin 644 tctimer.zoo M6D]/(#$N-3`@07)C:&EV92X:``#<I\3](@```-[___\!!-RGQ/T"`:L$``!? M````.A(K=?&6W`<``$P$```!````````````=&-T:6UE<BYC````````?PV0 M0"DC*```1Z1Q,X9-'3)E0/`@\V:."S0^&BB0.`*AF8$)J:1I4T:.E#)SWABD MD^:-&Q`H0<2(D6-&#!PQ7-BP<4.B1#MOTI`!,2:,'#(#P[!!P<;D&1!L6#"L M(X9-0A5R0-9A0R>%Q#T2$T"52A5$#Q`HB/*`D>('#1DY:.2@B=:&"Q@@5H`M MZN9,"C8@=,PU>C?%#HE];"K`J1-$&39AX,PI0X8D1Z)&0<RAXY,."Z21)[^! M<WEITZ=1YTRM>C6K9Z<@Y/R=J"!!SY]!AVJ&`Z*%9,IR+(,P(<>O8*VA1WL% M&P.&\;<@5*1.`>(%"(T</8(468>DR=6!61/>.3`-2:%I])1QW!'%=JL*L+)& M^:8ZG#>YQ:"`@0<&C1DLZ,.80<.W`I1AS-$&"&JT0=L<:,!'!PA.3,6&$G48 M&(-@#;+Q8(1PQ*##:A*QYYZ"\NE'`PSYU6><?P`*2*"!DB68&X,.0FB@#!3& MB*$,&PKF(1WOQ3=??2.6:!Q9'"J0W4TY[10:'?"-MU%YYY7V'PCM\0CBC_;A MI]\,-J`(0H`#%GB@BPM6>*&$-5HH8X8YKD?EASZ*2*)^)ZZ68I@L(J@@C&K> MF.:9<.!8Y(X]TA$BD'.:2*1@1RI`UU%1A='8DW*8ER1ZZMW)$QMII.3II\TI M1T0:<X3Q&0@#T=&1''7`0<<<R;W0X9<JMO&&'2B1@4=^,L"`QJ<O*!<$&62$ M!BL420Q!Y1AWS)"2"K)."28(MN+Z95+&!?&KI\&"$,0<:X#`9&IE2(JJ'')X M"NVLTU:9ZZY"L5OKK0!BZRNPRC$1!AUC_$I>NG"M*ZV*[H*0)1HLQ#OP@`.E M))12>(#:[4?FIH$NJ`)K6FVN:20<,;X@3!&&'0EYA^I)1"01J[P,GU1O?B-N MFU*W0[3GAJKIMM""#R"(@4?&M`ZX<<])"25QOE,(<3((0C#Q*=#3-ORR?;ZR M3"V]/2-L-,A-)+VT$$@\':VF;KRQ8,\?@QHJ@V4P1NL89;@!5%T\V8SSR@LO M/;4,,<B,TL3E[H2LLANEB[?&6,_1<1AISZR<R"2CNF##4Z@,];S6/FR<$4;X MW6T3`88K%%ZIKMKJJX<'_>;9,/"M-1M6#\TXS/=RJURD.Q5U!PAWP+?3&V:( M^V3JTPX-DL='@V"&'&\,*$023TP!`AG[AO%EI,^.K?K0NK(`D@Y;P&##$&AT M$3O6LRN>_$>:185J&^DNWWS(*J-T^8`%M]YWPK#G/5FG:@-9$=Q@*M24#EVG M@]7]KI:Y70%E?>.10QK*$#F1<.=BQ%.1JB9SK?S`H&\@JUD=;M81$*#!9##X M@;JT-RTUZ"$E#'%#0I*W)E0%KVQG$YO5QL`BM.6'<WY;FPA)F"Z>Z8=S*LR> MU=1@O5R99(8@(\(3;2B9-P1P@0,9P[L"N+8BL&$Q=1OAY&Y&KCBX`&\Q+$.; M$(>KV?G,<9(9C_)&.`;KG"0X71%8=C00$-RGQ/T"`;D+``#H!```"A&.I#]3 MR@L``-$&```!````````````=&-T:6UE<BYD;V,`````?Z&^0"DC*```J0RA MDJ1)$2D@6H"0\J8.G31NRLP!8>:-'!!HTIQ!TT*.Q#=L'*9YXP;$PS80SX!X M8P9$&3MEW-"96/$BE3IRQ+P!,:2!@A9`@PH=2K2HT:-(DQ+UZ5-*FC%HPL@A M`V**BZIAR+RY,V=-'I\X7L2`\0('#I]6RLB9,[)D#!<PFI9A4R;,G#)4Z>RD M@Z8,"#AUQ+!Y"D)KFS`0F2H0$F1*$2(@GC@!004*08,N@DCIJ<#GG8Q00=RQ M*UI.&CIT8H(0DP>$$--A2AH!6:9U;*I+TK0!L>3-FC4D5;.DC%,GE*UJJ[*D M,]HCB-L^/=*UB]?DWKY_`P\>4_C-88@N%#^!*<=.FC)W?"I=S[Z]>Z,^GT3\ M*^>-X#*[QWAO0Y)-:S-AC%'=9ZK1(4<>*5D'@AQUE"1&3%`=)L<:$Y'T'`A0 M#`%"&A/Q%08=+*SVE0)DE`%@'6R`:!)V<^0Q1VKYL?'&&&ML.%&`8^#TH5_] MM:87"#&(A0-?*[44!@AWZ><&&5=1@9U`EQWD4X.GT?>&>27>B*1N<-#UW)(@ M*`F3&^?)!$(;=;E184LG)?A23#.)=AH:9SY57Y(DD>%3%6[0-<=$>31T$1SU MG2%'&+MQ*)I%:R1XQYPK^G52<E"E`<=S=%Q(7FLRW@$"73"Q$:(;;_@$D7YM MP/%A&F*D,=A#$B&)1D-L4"45AV6,:I&LM.:%'1QJU728&P(6"4*@.%EI**(^ M017;&66$UYD"5;#EADI0%B3E3^]UZ^VW0?DDA(D6^56'M2K%UMH;?"4'I6[) MU2=21'.$"-%I:80QF!YE3"H'"BF<>6ZF#X:I+UU,^N1D3"&^*=.-SDU*%6L& MLS'8M0O618:_HO55$K+/.>=15C[N]*)4=+SPXAMP^-3FM5<%X49KA+ZQ[&X> M9CK&P1/=^Y"^:?#K+\`"OU@Q&QFO[-'0*?CT8$V2JH62&ZO"#$)59?A%11%3 M4!&E"QK6=.$<B'9I[EW&MDO90-HB).]#]$JK,-L&(71J2%E&2A%(G2;X-D02 MZ:"83S)B//+&\/YKQQMID)'"#CZ]H((4&NO-\:-$QE#G&'>6H215'LT!DD@D MJ?""8HLW[A(;8<!Q%^)HHE"X2B?+H>+L2.H%1XA::>>7"J&C2,?CD:LPA+XY MLIZ:2?"NWOKK(*``49T6X_KY'`$_R%S6)4U!!\I?4N4]RZ8/KD#J5/F<[[[] M)HX"^L0K(#GE-=]L>>)A9G3ICP=O!>3FG?M<TD;WD-*=;EKH2YI>EN8^^$%. M?I.3R`(EA1V.56I_.SG-1$@EA\,@[62I*=^TDD"FG[&/"OAKP\!6XY<RX,%S M#JG.T\KUI76URR9T.\B"&@*W6$G%+SNS&%ZD13FEE0&%:+J("HU6L"`BC(50 MTUO]#K6;F)!A#E<!@1$0$Y*([<2)IBKA^H+6OB3*R6))$]Z&2G(JBWAD#)D* M7HIN!"8`N0HGDOKBP:(CP7)Q[#"MD6.FIN>L-V!1,4S0S6E619(YJ`<IXO)< M&,[E%]Q!)#706DO(SE:='WF$4!*!$_/0%*)LU<U@;B`5P3B9EU(I8%(N&5.< M9I<<#Y4D##IQ"`AL`(,ZN2&&<Q#<M*X&`AJP0`8Y,&8.;'"#8^:@!M'K`0A( M8(1J6K.:(6*='*!EM`:QY0P1H8H=]%4'OWPR='"2(:=(<H9+-DT!('@!,:\6 M`Q;$(`<SL"<.-(<"CH6.@&U98Y@:\C"5>2Y/[TP(>WPRSX9>+9\UR$$.&.K0 MJ\F3F+R,'IZ6-(<73"V&":VH0H="49%>+:(NR($O@:D8)REJ#K-"$56B,A7_ ML/!"-;M/&T(TJSN\20XALE:Q8A-+4=+R(K;\$D8$Y1-0SJ$.AQ%,:[0B$3>< M(%,1Z>1."B8Q.66N!2CAG"$/"B8<Z6@,MIG9:/(@-P4$@0VB`X$J*?@A*=9' M0'\RUN$2I#98?F\-L9K459``H5RE<8Y%<IDB,;8I7MFNJ`\[(](*UA7TJ%-O M5U)+7[*B5XWQM8*)D];"]F:QK?`5EUZ"Z58Z!%HTG:DN3_7(Q/KETP+=08\6 MZ]!.*)<5)*J%!3X)SH(T@H9,A<$,J4$J=MC5%SFT]6I4,&1&Q'"DL<"@ERB@ M@0MN<(,F($$/(,`!#,P2,&+&0`;0#&L`\^1(>((@"%[;Y0RN&ST<>!>\XL6! M#<IK4A#48`8-%0%%B2"1-=0,!#+0;WWO&UX8)'B_(IT!-.<I8/=.`5AR.!`( MDD"%Z-W`!3%@\(-#U,O1G*:\,Y!!@"F:!"$T`4-3>(&*^5,BI-6@E_V=)WI7 M[-X,@8#`WU03"(Y@A1DH&`4QL,%]^=M0&=R`QQH("-RGQ/T"`2(-``#V"P`` M"A&7I"_NI@$``"P!```!````````````=&-T:6UE<BYH`&,`````?UE^0"DC M*```&RBP\R8-&1!CPL@AD\9-HV+QQ<P8$&Q8@R+RI(X9-&1`JY)294X<- MG10[!*H<6/!@&39AX,PI0X9.FC9E(DZL.(>.0CH8)5($T?,-'(P:.7H$*9*D M290"7Z@8\G!,R3!T/MK$">)ES)D'430$T28-&S9I9HZ92&9."A!BRM"Y4Z:, M&Q!3?,JA`R*,FX-YC:IXL9*@01`-T]A\F$:/W)MEY*`P3`:J`JE2RL"1\^:, MG#!M0-!!HQ6R'(1HTL`1_:;OV3=W0,0@FV8,9[5L031]PZ:.S8F#"[?4/9+. M&Y%;(T]N:1ES\>-:28LVC5HU:\1TYH!P<[S-0Z(^LP97(%!H19%A:II>;K"Y MBLSI14M/?OJ.8C2R:=M^@_LO\3F\^98&<(21IX`&`0'<I\3]`@'7#@``7PT` M`#H2KS[UV&4"``!X`0```0```````````'1E<W1T:6UE+F,``````'_O-D`I M(R@``$>D<3.&31TR94#PF$.'3)HW+M#X:*!`($&#"!62>3,GXL2*`PL>3"B" MSA@Z:=J4D1-1!$4[;]*0`=$FS$`4*2CNH9B`S1LW9T`P#".'SA>4*ED(I?,& MSM&497;PW%A'#)N$*I"6^0*'CARI"GAJY>JU!PJJ5K&FJ,G&YQ@4<]+H*?/& MS-DW5:^F2`$VP<`T*,.PD5M&JQR<?1&R"9,'10P8,/A2Y#FTZ%.5/>24"4/& M,.*I918WEB%900*&32^7R;RY,]3#I1.$#@-G3AG7*N'2(6I4JU+43GV#&-M5 M3FF><.0,I&-7!!<WLVO?'@X51`\0)<P\%Z$T*U2RQL$B5^Z&.0H14#3/F0,B MC)L\(-:4@<]T:5/J*N6(.&ZZ<F^HK''F66QWH)'&52B$L(88!M*!4VS`J18@ M;BM]9MH9A8V!AH6R+28=A;KQIMIO3`4'E5+$><5?`LDMU]QST=DVDU;68:>= M&]R!X)U*X*VH'E.:#0A6'QH$!-RGQ/T"`1!-```4#P``.A);=4"B*5(``/P] M```!````````````=&5S='1I;64N97AE````?W],0"DC*```FVBQ%@`$`!$` M#`(`\._?LP'F%DI<B'!A``#[0,A1<W&AJ@$+T8$$@&\D'`(+YQA8F"4`EP&Z M7`Z@)=.53%0R1<GD)!/1@86O*"ST()3DA(7$)"PDI11`F:;U(BP$5V'ALJH` M9&'U@S4-5BXH%EH[L7`360`>SL8RL3`.6P!-WF(J,;&NW;MX\^K=R[>OW[^` M`PL>3+BPX<.($R?6]=)%(@LQ:<%H%F*1"P$`%GE@`<"1ME%]`#`RL`=`(@]W M3+N(!."8@4`,_Z&S!X"8CSJ9CRW"ENO?'Q.!>N"X42>#B455!`#2UZ,.!$#F MOOU[#0"0ORQU"$R'+<_5.!Y#3.`H4,<:H&:`[F5+Y`!W+LS3Q@T:!F'0.'BG M\XB6MD+=(A]`#!#(/P`(,,<!OQ28"(`#Q$+`-.\<L<,[<PR0#@(!+/+-`-J< MEHAI'C0"0"BEK8"-(\#0HL05E'TQS3GZ."+-(N?L,P,P+CAB0$R_L&-`+C`< ML,(S\ZCBP#\66&,`.HX\@(X@$-`"0#,:/#:(:0X4PI`%VACPCPUS,&1#'&*^ M(68;8JX!`#J\```%.BL\D*,',:&S!0!'6H"-`8NP0PL3BA@A`&6Y.```)+J\ M`$`ZAZ"%"P`U4';:G:-U`0`N!$0:PFE?B&9`&)<6H.EI8WA:QJ4&C.K!&9ZF M<2D`)3"BC&>Z:!``91\,X\&C)11CP9VX[DI`KQ9T&BPN!1!;ZK$&$,LJKL.X M!IM5P]`"Q"Z8439,+AX<JDL/`,Q99SK_X`+2FTH0"``R$(3D0P!JD(&.*2ED M@<X5`21BA3R)&`&/&@*@<TF]Z""1KQ7V]$N/!8T8@0\4_]AA3\3T1"Q/Q/"@ M(PT`@Q##0,3^1,Q/Q/I$C$_$$]M1L1T7VP'/KI2XB8X-&W1,P:YMOKG"!EG8 MNX]I^_8+SSIKZJ'"`L#0D0\ZZ0"=L!'TH/,,"@P[#+'$%%N,,3IP<.PQR"*3 M;#+*6;.,\:[6R$R-!C:C(PD`R0Q319^#^+'2'R#P84#=*,V!P2)6\&D$`5)` ML<DV1O`#R28=$[`)-P;X`\`Z$0`N..&&(ZXXX\000(P7"&QB0C<?+-Z%W'2S M@T#5#P.NP")&(+#"X!L$7C@ZG_S3<>C=&&!``(\[@<_C-C@0P.<,B$[ZXHN4 M<SHL-)@S!-&P`&`.$-1;#\0PL-@@??;7@[^]%5?HHXM!L"C@3O72L[,(/N0` MH0@V\2N"SSW3D%,9/+#\8TX(N`!"9X!Q'`NP(3/&^-\^%G$,G-#A`('8!X'N M$``A+&(87_#",!1C&"C(`!CFX!\(S`$*<X``"\T0P#.N8`!-N&8AN*!!#7*Q M``#\P@P#H(QC.N`"1A1!`(,X!@&`((YXX*(.FMIA#W]X@"]("P`7\<#<V#$( M=@B`$=N(80ERH0``U&H`M%K'H$)`Q'W@P@<E^"*MUI##$#AB&X/PP;3HD(%0 MA,80X.@!!`;`AP>`2P%]4,`12^"`#^C"$FV\40BW,8XW4@$+.R!&'5RPB6R@ MHY+NV(0W\E%)8%02')K,QB:Z(4<`'$X<H8"-)^J`@"=B9AT&>")(CF$$?\!@ M`LVH@1O\T;PN?&`9FA#'2AQ%@Q+L`H<T#%<Q+D"9^0Q1'/48I`N6B:MEH.,4 M`=A'%`PPA5W0($-,4$`BGL`G)C!@G`A8!!,,,,[7,0$!XV1`(,[```#``Q#E M.,!YL#%.`ASC"`*XB#H1@,\#+"(;@!@',`"QCZ0-`!#AP$$<Y]@!5!2`#@5` MAQL"L`X*H$(`&$6'#R8'`U1@X(%O&D0`L$"T$H"+#B"0P@QFA`TA1&,=<]C' M8[[I&AL$((J^^*85T!&-`#1."ULX0!:\@(4/.``=%X'$,R8*@`'T00[H8$=F M@D$"?`0B'U"D0QF^"H"+?N&K*!@`';+0`V`$@`Y4Z`$YWOH$/0*`#DKH`0;N M6@0]$H`.0-#K7W?0`VC<U08]P,9=8]"#;!B`#BS0XV-/H-?'BD"/(.V`7D&* M`6)P00$]@`$`ZA`!=-3#E";(Q@'0P19-+JT?`!A&:`E0APF@XQMN4MYJ'V#* M36(!'>6(K=O6Y(785K(<H_0!"@*PN%`LERY'2`4`@$`'`TCWK0$8AG2+0(<& M2!<(=<CN*+&!R6$<S@<J"(`4-O$-%Z0W%#+($#0"(8[JG#>],Q#&X@9@@/BV M`$#Y'45\#^?>`&AA&%&`0BX0L*9-Z*Z4=RU`)>]11"QDP;S;$`<4%$$`19!! M``P`@@C``0AR_`$1'ZXD";"PN&$PU*&`2(8^FX$-0Z2#/90(`#IV(9L1H*48 MG]7$)&3R`3BM"17_&,8B@E&"DY4`&@'0(W:'@8YC)+F2RF7N)IQK5`<L]P>5 M=,%R$5Q)&IPR$1W^\"*088]HB"`=^/R!"LJ!8@&H6!'%4`$Y+HP+`6AJ-!C( MEP<L$`!&.(`0`="%$`+0YQ)0!A_+\("O"-WH1_]RBE:(HPM^0H<HW`@*N&`P MQ"RPZ9XM`AY6"+6;D%3J+`S"'V]-PP+L00<7?%K5HV[UYPAPG`,@01<KH?!N M`C$,3`3``P<PP3]N@.M_6*-GZ[C!KGO]ZV"+8]C%/G:R_W$'7G-;`+LJ@`"@ ML"L^$.!-%`A!QQB`CAKBXB(IS<=23Z<);(P$=51D!P%FD`Q<^&,(NU###^IF M@=$:`!=^N);``4>!:(@C&A!71R!*]@<ZH&$'T*!#`OS`@U$.;AU-6%PV_,"/ M1S%@<0M(7+_\4<E='LX-#"#X:!5022\X+AL?YYW-/7YS-_!C'2I8A#!2+H&4 M0R#E#D@Y`^A@@1U,HP\2P.0"DD&'`7S2-7\XR.0<MPV8]U(80L$T[`C0`UZP MHP\&P&0Z9@&`'A!A`GX(G6.!(8!TF`(`2*M#VBV9#D[@'1A]$,`]L.&+GXP` M'M$P1^(K20@B""`:1(T\Y.<@86PXX,-U&,`ZU`")R4N8&PY`P^/1,8?0;<,% M<+"S-Y(Q>=.[0`^J9SWI74^(V+>>P(ZP_>P)C`G=EY[`HO"]ZUDA?`+;(O;V M,$(!`('136##!X[WPO.^(`)A\.`(=7"`"0#QAW_`H`X'6,(.LG$'>JP#`=OO MO@O"NP1\5Q$&Y!.<`WH0%CL</"S]<L#*%6$%@HKC&\MA!'6P`(/G!Q"P`L"0 M?^N0`$CS!P7P;I.3``%(!T/T#T9P)'8@`1$#`>`"`'XP`+#C#U#`,%[`#U/` M,'8`#58P=F_R"P0P"<3@!PK`#Q'D&W2``!'D#Q57`>M0`KBP`DE0-_QP5P(` M!$"P"KC@!$:P"NF@#Y>R`DX@A$1HA*L`"T'`A.A0'21W5P,`"RV@"OSG?U\P M@0^P'-S5!H.P#_W`!Q?G!0[P!V.0ABCP!UZP`-OP!P^`"S#@`JN0"Q>A<;`` M`ZHP!'7`#[FP$#;`"@J0-`J@"DM0!_8`"RZ@"D&P#O``.PXP`$[@#SL0#';0 M`"L0#&LV`-@0B$6R!$R'BA,`"'8S6@T0AHO@!`IP"-^`#L[@#X>P#SL@@YD7 MB*JP#F,`"3;0"JH@B0I`#G30`6!(#*J0B(M8!_G`BBM1!Z_8?[$XB[78";BX M#[```B(0.PQ0!*KP@RVP!'U``(9`#/>P#:HP"4`"`SU0*G:0`3UP#@-@!PJ0 M";L@$O<P#P(0#*H@";-`!O;@CP"9CI@P"PI0D`,0#*OP0:K01%[P=>WB?NR` M`>1C#$;0#@"@D>X0`!KY#AWI+R,9#ZUA!/*P$+1$#Q=!8-1@9]O@!_:P.`;@ M"]7Q"R%C@2VC`!&#`/]@!030,TC3!Q8"&Y@P"?;@8N!G#X<P!0,0`'70#9/P M#T[``&S(`ROP0#S0`DCD#QOIE>]`E599!3H9,3QI!SX)E#W#BA]9!Q;`BB)) M!Q#``TE073S@!!@%2^D`#@&0#A\@`!X)`#S@`G0@`SR0`W>P`CP``W)P`BP` M`YAP!']``XA@!/;P"Q?QC+%P#]\0")+#?*G@!.M@"K!0!ND`"2=9,?^P#FV0 M#H8``)Y9'770#BM@#POP#WZP"(MP#^MP"(/P#P5P!Q0P";C01?=@!O8P`,,@ M`=;0+PEC!?B0#FZ@._\@`7=``\1IG&;`#_U2<MJI#_VB#U)0G`!PG/C0+_@P MGMJ9G,/@G!$`G5KPGOH0GU;`#^D@`_^PD@M1-_7$!Q!@ECT),8'3,5[B!/*@ M=I+SF_Y`!]H0FX!0!P*PFXG@!^J0"'8`)__``]Q%`#Q0!G4@!6+)!UU0EOC8 MDS\9E%F`E5K)E1;@E?`0HC]`HF>9EBAZF'?0`8\I!Q>`"9>@"\8I#@/@5?_P M=GY@#3/P#QH9#QSE#`0``P"*E@*Z-\10H/*0?"^*49QI#UX0#XO@!>I@AVB' M2>N`!I`0B^BP9`-P#*RHI'2P`&OZ#W50`F**`;C0$,Z)GN'9G;3D#SKX<O:P MDJ\$`V4Z#&DH`78P`+N@%`VY`LLP`)ST#6Y@#PR$-'10`8$W>&^R`_N`!;?9 M!Q*V2>M@=:O'BAQ9=9\4@P[0I?)@`@'0`3$H`5U*#R:0"!UP`.D@(C)JHFJ9 M!2$J!W=9!].)DD]*HST3HEO``P)X!:1Z5P=020:`#`*P#A+F6,00K4@FK"6* MEB=:K%7)!S#``T%0!RR0J]JZJR&:`;]:`<OZ0,X*#=$ZK0;`#'57!OD)-0N1 M#C7@#QG42^;5#=A@D307D_9P#[&#$G3P`A"8.9%:10%+H8OS)2H@`%^"`A)K M`R90L200,*B0#[NF/*6S">NP`P2+``Q&!P_@IQUK`MOP`XO3@Y_FIPQ[.`Z[ M";@`#W\`!9\&!6^R!AR[<ZGUL?QJD0Y`/K0D#UUD`#$(`77Z!UW*:XN0`"80 M`@%P4U0[#B[P#Z=@!0[`!0X@!J'G`**3#06P#F`[.F.+?H!0`O`@.MO0`C.P M#=$0#M$P#3&H`+/:`<<U2GY`#\P#-25V!(#`#]3UEOQP40P0N&\5K3"@"SK8 M@[K@&^L``C$!`($8BTF7#'\P`.H1!(.0#RAPJ+D0%OP0@P90)!`Y7NFP`<"3 M#9XDL'WK#RWP#S^@"Q#0!/>@#I-`"TT0*/T`#>!@#^2@G(.P,8,WO)EQ@0UH M`(,W`,+`!Z70`TKQ@;B@%+NQ`L)P:I5ZJ=CP)@V0#YQJ#P[H6J&J2<DP!>C` M#_B`!<XG2MVPMXN3?/7`710@!$-0J'>P-WY@*'ZP`IK$,DNP#B1P04CP)M&0 MONNKMWR["?`;K@V@!$M0-_K[J08Z!)7$#^PE,:0[`/MP!1_4#ZK0"!*3"RB! M<MO`2C:@""P`"/7`41MPP@1@!(H`#M+`#B3P``4``X*H`.B`B@B@",RHPX]8 M#EN`3P\`?O1K`L90!`$0`Y8[=7]``.HQ`,K0N9\[`*$+`$C\$Q<T.P:P`LB` MEB9P#`<@6D,@#OC`#P8E#/OJ/,+0+F)G!P0P:WQ``:^&!8?J"U=@&C;@#0*@ M"(0`#@*`"9:P#@UP#][P:B-P!^K@&GS<$(M@#*.0=76ZF@`@?<*`&?BV#J_C M`4(P`-$P#O]P"3X2"IW\#P[0R7FW#DBB`P.`)#S0RA;@`ZT,Q^B0"O"0!:=C M%R[P"`;@!1#00QX`!A#`#SI2&KX`"``@`^1@`JP`!(Q0#(=@#9.P"#:`&X-@ M#`+@A]7A`Z$Q`'(0`3J2&HO@#['P!Q_4'>-@!X`0#W]010(`@<K9D"40,HO` M#RN`#W(`!C3"",#@"-C`"-"`(E&0!/-`"A#I"-UP"/)P"-EP08L`#4.`#AD` M`'=P`'(`!.B@%'>0#SP``C?(`PU`@3R0`'6`#A^T#N1`J0<@!*KPC`$P!'CT M0?DP#A7`"DG``B)@L@0@`CS`!>`'"#P@`A!JT[,V#.G`"+<LQ7,BS*>A)D,P M`-L`U8M`#WVR`NL@!^30/(G@`FC""!9@)N,0`18J&E8`1,5``,X(#."@#W30 M#C?2+Z8A*%=K`KX<S@!PI%YB`_J!#EC@-1&*#0<P"F3R&&'B`9ZQ`,*0>>E` M`O!P([WQ#XGP`XP`4,[4'>)!'O&0"`>0"`"5*U,41YT,`G7P@!>Q#A4P=IK1 MR9^<"(?@(]/1R3="-*<S16,W4[?SD<TCVQ;I.39W'%>@?8MP!.=D`4XP`*/` M!"#H!'QB<YH@!P4W6@[@&L6MD@:`W`NQ#C$P;<3P!0C`"+64""4(.+R4.,3@ M`<@]JU=@MYR=3L0]`*&`W)_##^BM?9S-`/SZV?KF.K"#`-.6`LF6`5<@`-.V M"$\@`,?Q`98S=IIP`<^M+_[0G?H=.P5P$<8;W^AMX)J=X(-CX8G`0K-Z!`00 MB\L=XA:@!.Z-!`/0W,]-C?$]&B9^&BB^#B@@WK###]?8I0BPX`T>./T2XE8P MWJ/;VQUN`!_NXT!>``Q&-/>=.MIA?Q%#`.@0"@+0,P[>G743,G40<R0'IP8P M4[']`XM0XB<^`!SNX9SMXY<SX1RS,66.X0?0X@;PXAZ`XF%NXJ&`XD@^.9GA M/+L=,5Y"RS4PY5E0Y8ESY7"JY2.C=UX.#-$&YT8P`*=!!&1>@BX.Z7,.@H$S M=FI>X25XX;-J4#]>XWFNY'R.WR$^."EG`."WZ.F0DAI.``5P`6L.*R]*7W;* MXX/#;V\;YH\>"I*NX@N1?7[^Y.@P!?_0,^EPB&%>W.\-Z3_>G;J^#<`^6A;" M&A:^"`'>:R+>M/,!`X,0#0"P`]$@!QJ0'3LP#')``<,.QV!C!_R`#NC0#[NS M>=>>[8MP`#L0.'*0`J.]`X,C!R+0[N_.!?W0,Q8^"`<0`"8P"`&>&:&>.*,N M`Q:^W0S@W0\>W@Y0W)J!W#2>.-->=>GP!@WAY+3<`M>1!:0^VWU"/HM@?T:P M`C90&H]<`#\``+%@`--PIO"P`S8`!0/@'+LV&B)R&HMP*:6M!3<_#>;P'ZSQ MR/Q5&CMP#/:WFS!?&E;P):6!#GX0`*:&#[\)IQOPR$F/#J/@\T%O`$/O`44/ M@>N``>M@`2125<<P4P_]UA;`&J/P"'?-Z`"005T@#"A!V_J7&1[0**\^[0"_ M"`[0]!Z@]X?OW`MQ!PVP[E#.`_^0=P<PR;"T#OO&]RJ?;^PM(J%0]-O.W`R^ M$/H"G@ZC^!^B&89O!?H`._B`^*>]^(3O^+`O^]..EH];+@VQ#B=0WD5O\>`] M,G90,G:`#^B`#/Z0=PC0^YJ?3@__<WM^.E/7!X4\#?<0#?-A5."^#BT`"<HY M!P00",(``!"@".G@(-)0#@)0#XJ`#CD_`-"`9R7`6\MP_0R`/]O?_=\^.=1@ M!0P#\A<(U`'Z4P3Y@/V=`QFP#5;`-(A_\Z_^%8/[!P"6012(?PXB`N(913`. MIL$ZR`(#8!DH`FY``>W#`Q!W$.K<+8,IHB*ZE`%P!(.#,LB!!_3[$,`4>!-' MP'OI-E-'/@;<#1AGT^8>`!0!0H$>&?#3;E^@XGVW$D3(XIL%DF^`X`<H@/!R M!!Z9$\@[[N,8$(TU]O<"7Y^@?.B@"Q2`YD&I:.!J@@/\"2IE@&DS"&J>`0*# MORD3I(#8D0&L@`*8-O-$`'P!?S!MQ!A2Z&W8SFX%-_XFY'[;A_L8=@`1SJAI MHPA`'"9X$[(`!)6#05`RZ@!H:0BC3?,)@-@&`#Y?%6ER?P[*10,41:F>7T/0 M?$P@8>4L1N@(WX0:&`"[@]`%.5[3!CV0VIM^A0,,5@-_D`EVPR)0!EA`"PC` M#7!3^,3T2WGXYE$0@:9%&1X%`)`#!,#A1`-HL`-7WA5H>:G*#S"``7<$8!50 MV@&);0'\)@'P!UY#R/@#]F>270BCX@,<P#2B`&-G%Z`!`L`(LL&Y8R6NP1V6 MM@P01QC`-()5@V,74`%Z:`^'@=YQ#?[P(K#!FD<'*(`J!`8Z"PSJ`7_0,>Y@ M;Q."`L!@08!IPVWL%K=!`/*/`1B\WI8'Y\$_Z(-'8)B\N@)0`&I#(51O1X`0 M\IH.1]^$VSBD`V)@UM@!+^`:6-D0R`#[+>5,P0\P5*0!/AAT=K!?((`%D'$6 M`!XL<"A!6FF^&A#A9.)\.X33IL/!1*N8".[7;X)*">`I"@`&PPG]WFZS`KX` M)3`"+^`/:`D_&(CK8`-8.(P($MJ4P(MW@BX*)0X*,&OJ0#B82*6N3P0"=N`( M``#+,P(*(+!@!LIS(]+!$,@0-N>3W8-#0`Y:(O.I`,,*#+8`HT(,$$`ZD%I- MZY,%@E-0&?]!/_@<!H`1&`(^`-D\@1[X![!#G!@"._`/&,$T<`3#H!%X`C]0 M&PT!'6B-<N`?I(-/P!`<`6TD!JZQ(1B"UV@"%,$!0`2&(`]DJ"FX#3U!<,QB MD\\0!$=%$!U/HG7\!R;`)_P#[0@;R2,CB`:ZD3?.%`$X"+0!WI$&?``+C+8> M@,SD0!18!.81/>[&?[`>"95[/#56@&$8`MYX-:#<A]@=[X.![`!CP'1N$^71 M?`L@-JZ`V?@/TM0*,`;K0`S81MR8'GOC;TP$WW$0^`+:R(72P14HC\'Q/';( M_M@>,\,E,@9(PPZH@`#9"`;D/RB0Z"`L($A\H"`99-'Y!P_R]QD4Q&@A,>08 M1(Q;$#!^OM`X#B9C900`"$`N]1DWD;.(G0K8<Q[`6C2M:U0,`@>ND`,/``HP MR4#P")XD!&`I!N!-4`/STPGQS9@DC07`--("(1`H7H?-B472SP#(P&AU`-Z$ M*J`'F:`:YAL1$'_J%HY+0R3@#G`!AB(`Y,`UO$"QZ.@D`Z@CC>X*`T!B!:`% M'`'U4+RR`0``8=Y@'$"`2+`"I$$_B@3]R`8@`@I@!,:!`K!$I3)5KDHCD'?H M02-P`MX@BCD#?N`$7!@+4`#DCP#H@%`E``:'*A`'ZP,`1"3`8=^09-]3DL+` M4'PV&30%+T>@/)+[1AKD0FU%\A0`+`@`4``6A($W004HV>>C?)DQ$5:/<#DN MT4$-,)?X!EUF*Y^4"/G3%"1MDV,30D1Q^29NDVZC708@5.F""O`C6B(DL!;8 M8DJ$@%Q`%A"%!C``UH(RI`,>4`XP#3?TA@0`'%87=;@,7"(MK'E\H`P$08#" M8.H`!QAPAC"XV3?EQNV&00%`@3[@'NJ`/O@3/*9O`V["K?01@/GP,J-!'=`` M]]`"H$Q!&!.SHB&L;[&M"PRX^S5M!L`-,`+][098@:%Y'(IF(:R)#*!PL$(" M\`C1`17@![MC0=*1D8D9!$#V$8OM0O-U/J(A?9+A#?@`Y`87S,.K$0JK!@)X M$^D@6K7)*8(:E<T#,%'V)U!PS3>Q$G+;WDP=?6QP5*:3Z`6(W#\X`'T`AAD! MQNDXA9L)H'A+(#R^N<9I`C!BR0H!K.@?*(#J$CH;0!W`C-QR262"DT>I#DY# M2`=`(``$BG\@)=(!#C@>G/,?/("^B1%1TP#BG0`%,]2!W<DY`T&!2YNOLP'@ M3B)G/#'#\EQXY?"NX("^60OIP`4`G$LB7PFEI.$ZA2,WF!P2`#5.,M_6Q81! MW]1LZ2!&I8/S%T?<X6@1DT;``,A#@G@/B4#?;(2#$QWT`7F3=\)B\3P#$JL? M/(IQ`SS+)D:9DF+DTU3)U(D.QD`^6#?IP`O\@]`Y!5%``14@=:`#)*Q=(032 MY/ULA>B@`(#-SM@#+D(&35A5X]Q\T/R)#O;![BBA=V4-<DZ,6"#.9O$\GI=" M2,Y.*8$,WQ@!V!5S<ZAH`8HXI=CFYV-Y:`EJ7D22>5=4@!@A&D[@D5$J#D#Y M/@=/0HS-\0!TS0]`1`U`#\"$VR`=C`*;B1&)H!-@@]&3#MA/0)@2%^0<R`$+ M\:Y,`#`8#/C!]J1`L6T-.(&KEPC-TM;LFA;`A7;&][$">),2>*(`((K"R*3Q M`S@BY#R97N"*VBWGR!$M)^;4G#S4`E312&J!)FF?1`<$CT!]43B%"XS@L_Q[ M700\0@[:!I1$V`/8!4O``/`#16`,I`$ZN`9@R!B(@&*`2Q6!,+"EO508[%)< M*MLN&0"8(H/1$AC&*T!+5,%"T$BM``JL@QYP!1[;.7,%VR\)?(%AH"H+P!'P M!TZ@%?@!$S`%HH`40'M&P!7<LZKA"J#`B;0#&.AC6`$(`$VA0`#P`Q_,#[B" M`Z`%LL`6&`:RM!'HTT3@"]@`;"RH)Q&,*:*D(0%X0`F@`Q&@FW[3</H'V@$Z MF`6KB6E``@*0"&P!'@"/K,"ATH%R0%`-*K])!,8Q/QD"-?`/#`(B<`1U0*7" M@8:@4H/C[S-PK$"9/;3=``@B%T,!`W/@""B"3[`%^(1LD76'*AW`@!"'#3[9 MU3H%("`$K($0,`5"`"L(`5\@!%"#$.`-0H`W4@$B0`>(`$D0`N"`"%`"(L`) MB``I(`+P@0B(!2/`"8P`.#`",$`).`)W-:_Z@1"`"$)`.J`'#P6VW`&OYPA8 M*D?1!(!`L%*1POH/HI4C2*P4C<3X@IB:E0@`(K`$,34=[`'=80I8ZC>H!04@ M'<0!W<%800!H30=G8((*UDVY4AOK:"$!@X"Q(H!:T)<@1CK8!/PE!CFM`C`( M!H<`T"?]P$`D@$1@"&9J+;`01RJQTA9O0%R#HS\H!NF@!*A6`C`'H$$M(`"I MZQ](@L>$"1*K`+@#&Z`6"(!#4%PO'S#@`](@&H"#AZ9>U2OS"@#E-1W<`W^@ M7.N`*""OP1%I\`%:H%[9*SAPK\(`O@;'=)`-*")CA0"G]1GX@T#`6*'((.BL M_^`=G%:<]&!9ZCM@L"P5F9W65^`/;@$"T&2WX%4N@%L``69!WM0&QL`0Q-2. M9`A$'@"XK--)MQZ'`C!3UH$$"+$I5N0%`!A[$OW`;LT$1^`(6"@$<`]::[O` M*,>A`@39"44`&H$OV*QY9P8L`&E0!UZ`B`R.HZ4%+`*$N@@<P4P=!S4C'_P# MIH,?66H)*%D$0!;``#$B"T"`+T4'I:`?B(-\D`ZZ@;QCK)C#`EP!17`,'B%W M%'E0P'R9`7Q@`0R*)<BOTB!SI8,.T)?2"X\=LD[V-7+$&S`$A@!X@V*MU2#( M)65#:2VMS2FT(J$?P`(=H`I`[3[@!S;`&+3$'$L@*NP_V`>-P!&\QA60#P[! M,U@$A_8?B+L_$*&B03H@!J8!+?%8&;L(>*MO+;1.=K,JLUE5`+19.OB>0W;8 M^M@BRU(-`C4Z#CV@MQ(`<',`_.4"N)S9=G#00V"P`([!:$,VOX`(+(DZN@,< M07"$8UUVP&Z"8(L`I&V(<[>7;U):L95@`*Y`%&`8GF"S3H'Q=!%&0&L5DZTU M%2`S.B!(,,.>BHH7X+HP7%6SI[K(^=E3#`87K(0WP0%L7"T)`(,#V3[9?T!M M_T')F@"X=J9.63^P`-`!$+!GT<#')@)+0!NY8TQ=1`UQ^_2`%D`'',`@<`6T MT:C07`+Q!,)C1LD`-NX>;%F#N@@\P4Q%%@#`X++4'M`2W9(B,`73*7"]`><@ M(DED.3P&%+*TE8[`A0<P2N"2CW2,L0*!)?#`@&YC13M@ET16E91:<H4G`X`E MW0@=&(-]('ZRP1\86*V5"#*`0(0.:,$^X([3"1VT@@4R=%?N"5@!RF`%:(/F MR*%X+@+H:")M!8`?9H8.&L$^2`)+X!`H@W%P``BO(-@'<U;TC@,)L`*R`3.3 MJ."T%60N=%`'4"\\L$-^(`$L@F60=[\`ZJ6SET"GH"7=6G*M[;==!.%VVR*; M=9!LB$'R)0"X``H``!5@!%K!`#`"JH#9I@,RL$`\ZC^`@:\#H<*"$H`.-L`^ M8&;/Z!ZPHFA*E-!!!=@'0_(7/<NO(RV_(,F#<G1GR>6;?9,,=EU[:W8?;VJ: MMP%P.9,@\0MOF6[##>"K6-]>79G;BAUO%C+@G/E_X=M+_'`?M@6<O>)V&CA> M`N9M,S&]86`'?#4/H?[]A)\#_6`[`W?OIDT`2#81(,#=.-!1Y\;<M&-Q-J?2 MP3C-PP)2\'$H<`>N*NHXU/?L$@<)EF]#KL@-*W10B4Q-8-R_BL_$:08Z9P%Z MW:^#?*-%!7R)1_<E)!TZJ`3NH&>X!A-'W5#<0GA;N/%MC89'%^DLQ"2H#9>N M`-/#)1CDY-L*[C4EX"+0EX7`%.L`%KB+R4`=F!H'\.@T@Z2+P#>8`XSAD>`: MS/!=VP9I>!NL84LGZ=8!\91OVXT>QCE+A^+NXC]H!]`&`WP)$_<E4!PZ@`>@ M.`O`.3E'YYYP%;&*@^`%*+Q!\`4PPX`#PHL`P7W@(0PT5!\^0()S^.+58=_& M@@]`'H9-]07O0(,Z4`047R'V`(=X%V-A.@`#4&8QMG`OV`3$X`@U_3X'/D!O M1.[,M;CX>6G7P6VZO^@@#A0\5>P%OO$=OG?'>`\KXSJ@@8[?V$#'ZD#>#=(G M/'92'81:!SG@U3VV77`R>+&^8">#X]7M`#$W@':``4!QHPT=@`!_8([!H#S@ M)4\8%[Q-NOGDAE758`!O`IL*RK:W:RP0KZ&DH,,"H1\=<`#P**-S`-,F"HZ6 M;\#V.J$PR+@P(`+<@JP@&Q(``/"E_B!%Z+EA0#ZV&@LX`,T``EB&HYQ!JH63 M8`<W$AT(A2Q`"Q#`3D8'X&""FAA$8`*"@0'@RL#``.`;P?G*[`\/:,D"`!8, M`%$@#""FD^`%_T`'&("V+)=`05N6$NC`%=!.)Y$*_@%;_LJ7TP```A_0EN_1 MX2+,!J`EX\L$"@Q$03$P`,9`+!N`##"8VW)+EESV!!>H@W]0.'9%,TB3Z&!< MY1UV4R[SSF+6EZ(@,E?FQ)P)*5>H>A2X8!0D@UA"FQ="]1`%O<``B`)>8`!` MP932#J+`%T!F`_`+#``&.!T6"0%H)-@B,`Z`E$!/Z.`1'(!8@`!RWG,V`OH@ M'7`D*]I)LVAEZ@=2H@7\A!ZP$N[`,FRJ5@MK35\'H`(Z@`K8`2K`!KSG^<P" M5``M<`"P8+50`W_`NVKGQ@`%O%E*^#M\0)2H$CY8!V<`0$/,N':@1Q1V7@=8 M8#`_YM'B`N+(,E@)=.`$*`(3$)9YU\J1?4``?NJ#$-U`#4#AJ!HB*&&A`ST0 M,#T`_\$'BN#XT0(!<)79`'_V`!W:"(#G!+"3M9F="!D.@VB``N$LH!U&'U@` M"OHZGPSL#`J*<Y'6!WV``\""-/DE>/.7R,U?0CA_B>+\+=]$,9!83B#VQ0ZJ MM!0=2CKP$B\Z1NN#&7V5`P!_UM$\M/H)@RXR17`!,$@!.`LB<F0X9C??Q!"H M![IM,%,##*T`(O.@!@"@H!H$S`<$`)!R"(C31%E08^C5H@U@X]!@-]/`4C^R M-^$`IIPIU2!31%)'&,W7``SU[Q@[HD!1Z[:%P`28`*:Y`AZ`3R@W%Q`*V,`* MR#LC((`,D./@`0X(.M`!6&P%].KRE$5N0'D:!SO@BWD`+T:K;34:'@;-\0*, M@P>P"+@4,C`!.N`"X(8YNPB<01%IUBO@`'P`OT<$B,`P**?G5%>CB%UP0++H M8XO6.D`8*`ULK:T%P)Q5#TE`(P.`2#!3[D$\<`&CP%:[ZX8`K^5U/ABX^OI- M@(%_$`RW`+U^(%?+`=CJ=;`-^*D_Q3?DHR.3/'JIPX9`'`,&V2&V,;&XLP)\ M;!6T/W$Q8L33)S=4V`#FN`+H(!R`H&.@7D$N`S`".P`?^0%P4)/-XJM>!"3; M9+>\@+D!6#8ZP`&80V5'#`8`LT_!S*[91N!FYVP%L+-[=MND!0N`,F`"BV0` MD&@HY*,<.R\/`$H%`I:VRMYOLX,`7%^0+"&-P?5U`&_"$8QMD+TVN8"%$M/B M)''LJ8N0LQU`'TA5B#%/N;L]Y<C\@#X`?DN;@5S(M_TF.,$`V)8$`&9/@L<- M/V7'X"#1`6``#``_`.2N+R<RM\_`:NO?%`IJX$W.XFO4[_,I`A<0EF,!"&B" MH&-6/8#>B@`D5OR$'0;`WQ$`/[`._AZ#0:;L`!1LLPD-\MZ%A9Y&%N*;L"(" M\%8LQ`IPTU';*RD`KX0`O))@SE^/Q4(4O3HI)39,U.[>@6)!>V\$`+X1HY0( MT8&"`71O="`,B"@#$)`+VWN+[_1=ON?W]Y89#<!]P^\;2;_=1*`@WS(C1NUO M^5V^`3@!]]_W^TW,,PCZ(;CW=/'>ZAN!+^@!]K_+MP(HWQ'\3=@`_5TCX[<# MA^`6'(.O[T"@C]]W!^??";R"RXQ9X`\&^`=7X=[[@B/P#(X.,D$)7P<90!'X M@`YM!AR`X%0$;D`!*(*J%*,-0!A"!_$@'WR=>H+?!,`*@F/1P!T\,D4@-`V` M+<@,VJ!?SX/*]*;]@92@XE/JB@L;:Z`"H`$BN'J*P`R\:4H&+;T@._#!B^`" M3)L=<`&ZRTZ>T>A@$O2LF7@!_($P\*5R>4I!0W]@#&2!2T0_B>`"^.YCFCH4 M`/D`+AF"1QZ#\`0[&(!#GLV9L+3IR^Y$J1"A(N1KD,TR[;=+KNI.\UNK)9T< M>[K+4'Z@J\"5NRL8@'6,H(:A#][$B+KC(#$`*/&A81&)W"*X`;W5``"1+92, MJH8]F.78^4V\RRG.#;39'4\`&N-`6T3U!LP18X0:'%3I8]>!T7<-[GC`F`7X M@`O.:4;.#B3T-*H9/N!"WQ5UUT?G)1AL%#;6;+MS=/P/_`$J)>>^>4&O&5`` M4*7$3D6,G>@.!)WX&=!'0&ST=P;@#X2]V`$.A=/8:>@-8)0/#@?$]O1E,?W= M?6+L(`$P;L7+$Y"BS9;#Q`F#_FH!9G,Q=>/NC'R`@LA\G?V!VG,"!&`<:(&Z M50SL#S\067/@=00#).!>X4&0DG><>[00@'E0"D*6+M`&`X"?89%S!U'U`3N` M!LA`#NR#IXX,<DHI0+WQ8!U\`*<.U:4Z5<\IBW<W4'6O#M5SR@59!:@W'/"# M#Y`DOTX7H04#X"K[`:4K#(@&E8D'M/,G6P#>?,6M%_80+EF9.EMGO9Z;^[HP M^.L;)"_4`&&`!D*`*-`&#R`9^(,?L-@;^V./[+(+``@!8$`@D`!G!P!*X+,O MA!]0",C`)ID!\X``U(+,7AW^0"R8'`8@%D0K`>`@CLL4:01J7&^QG#3^#ZQC M$7,!@"`?F,VTXZ\J"3I8!QZ@Y^Z!Y%'<78!C$0J5A!RL@^3A#42)<S<`T#T; MD(-T<`I,238(!YO`!9R>LI`-DD$EP0?B500\]7:@VS<!;W>-T4`MBP!B``W( M07V'!M"``/`#_![<S>:V#0:U``"0@`/@0#Y5.AA?W4"49`-Y$-S_2@I`!0-` M#UB=\EY)@H'S00:5Q+QC`PSO#2Q\-M`'T``=A'@94`Q,538`):`J!L0P:%#. MYXH,*`<F'AQ`>#W``3)\=&_OR><?4)<%$$K"NV-Q`9-#5"EQ/F?;^P1N9SGM M:[>;@=X>":"AR5P'3`"O[`$D,%["^^FQN#6@QXMW(#\Y5$`E`>^6Q/E$@_;^ MWNE`.*@0-CX;S(,YD#RV?!?1)'"F'@@`>_"E8SR_,N[GIY*P@_&5#=A[>9\B MQP6WVP.]->C3^#VPCDNG`-B#:F4]QPOG:U-[(`%4^>N^5Z([`.LD,FO0!P+. M+;OH\:8?0@^*QX=Y;W!;LT$^X/-<BLAG`W40"SC*`E@!R8#Y5I+UQU$`P#B8 M\.8]&U1,([^=]!8_N/4V/HWW`T\P">0`!*@#)F"\`/OBSG=0@:VW.OX*TDOZ MYNY8.(!WW^ZH"=BOGB\?WK&!!3`(OEZ!Z>@@T*8JR=H:]<%@'80!XU[A*PG) MJ23]`!`X@7YPLK*!SZE@@,`,](-YT'(LV#?X<6D>E%#X;-`/1HDH(?6;/F0\ M@#\@<L[])>GPT6"7S`%)O^5)0&\Q[]^@EJ3Y@I_@_Q1(V3L//]5_/BA@!3Q` M\CD`("6;U/0(103^`0N@`3P``;#Y0>`.!$`@(`#.8!18J&B5R$S`HA=M%;KF M[WQCX#A@&#$H`<#@`(3XI8\.:``&*``F@)\0@`_`5+K`,QAI=R`!T'P!($1: M%H9D!XQ@`(""!C$`;,$`:`>M;``D``+@``B`#```-@```.OG[0D"0([)!&XZ M`(B;!"``]@')-P!\$XRU@B'+`[B!'-"]\$"072U*P$:ZP`%@*@J6&?`!_+R0 MR($E.!QZP.>Z`T!R#S;!,*A-_D#R2_IMH`9\KC%XE?R>>P1Y2/`MJX"89`?N MWI2TO.I@!@(`/T``1F!UN0'OGDFX@3K0),%@K+6<WL*^_(`IP0)=`!&8`09@ M7JI[&F\`>BMY!(H&T"^8__I:!["_J:Z#<V#IQ4'>:E]I)['O!2I0!^2`&'@# M+6`(@(`6``*&P!N``WE`#J2!,X`&8`H*&`,I``3$@!R``W``"!`"`.&-'#9A MW)`!D<0-'38N`!!)8R<-F3(@RLB1(["!@B!BW`AL$X8-"#@8S\@)TP8$'8MM MTK@)0R?-&S<:`=B\B3.GSIT\>_JTJ8!.#!`]0)1@DX:%2AE$C2)56H8@G#EE M#L9L0[%H"3,*`)`L,V<.B#`@UI3)H_(-B#ETWL!1F0:K'`!!AVI]NK3IT:05 MI5*U&C>K4:X[X07)">01$`F#@*GJ1D/&X9^4*^_DY`&*%5P`X#G"!LB'OW_] MZA@@)X9$@#HN<#T;\!F4-0"*3%`#X.##(!^!;/K2$(`.@FPT-BDBH(B,`'O$ M`-%)8`^:"&+J(A&PZ07+!P?H"@!P\<^%A0#/-ME<!J`WKP!<!@@",(S]@$$` MF,DG!`";_$(`PLDW!,`Z\A'Q!D@N.52&1W*`Q(9#$$E$D1AHP0#`$W989`8; M;]P!0!4&8:@AAU"$(4=,(8&@85@@O&'&2'*4,48:<\CD!@!&:`B32V>,](9+ M=%1TD4`Z'"UW]\\\??R#)Y#_O+-DDD_[\81,P5.H$2``W`?*#32!,AHP0 M-NE!!`!`<&`$`%`,<P0`)-"1!""68+`$"+SXP@0`@(!S0Q[#!#&$)[7`L0(J MK13321I`5&/*,_\D\0$>PDP#Q#>,I`-(,D?H,@DJ03#B33Z=[+..'ZI$,<0Q MD3A@BBN@9##.*$9<P$`=@1A2AQW)(-%$.5WT4$P7.RSBB21:;'()"(H((`48 MQ)10ATV`7#FMM/]4>24PUU(V@0`"$%"``0B,2T$%!4SPCP4%1"!`E.XB64`! M[\[[SP/_C-"NO4RB^X^W!3S0+I+\NCM"DP6C^QT$+B@,`0`-6^8E"!)/+'$( M%EM,<<8:3QP`$!Y_#'+(WHY,L@`A>TQ!RBH3P'+++K_\\LD8S$SSN#;?C'/. M((,`<<\^_PQTT$+GE(``EE%Q'5T":$D9&DF/7!D?20\AP`"509*T$-]61DK2 M-FW[$RY>`P"V3\R,779/X*!=&3UL4X:`=S>ES1,'<G]=&0QWDUT9$7O3O1,6 M?U?&QN"4`6+X3Y0D[A,JC/?$R^,\05-``"`(<#D(!(`B`"CT?@XZ3B3YN-88 M!;4X9(9OY.C&CG#TJ!`(9GP$DU@>_8B4&V:145,#`*#@1AULL)$"`##$(,,, M--1@PPTXY!"$$$,0442:*0=0KLH4&$W!``10D$"\XH^O??DI/W#!`PBH?``% M%IBO<@/PJPR!`@_<CX`"*1M`@00+.)"R"%"``2F3G_EZIJ4A/*$)4`A"%&Y2 MB@&T@0#X0$$#$G`$#G!"`:YH@"H:P`0.A#"$0RNA"4^(PA2J<(4L;*$+`;`/ M*2!``(PX@$VT`8`0W*03`,`$`')P$Z-%``!:*B(`6.$#G3`M)TO$20",ID2K M*7%L-PG`WJIH@)T$P(9*1(`6$P``#S"Q*TI<@!89H$7?*=$!-R'`$A]PDS,L M\6$`(,42AV@372Q1`@#@V7IL@H$)W$004`0`!0"@`0`<HY`5`,`'B"A%`%@` M`!@`@`0B>0$`9```(XAD)6V"C4ANTB;6N4DB;7*,+-ID`S<1ARH!P(&;O..5 M';A)(;@8QILL`I>/M(D)O.BEF[B`C3;1H4WF`4>;B.`F+Z#C"&Y"!CJ2X"9; MP",`2G"335C3!#<)AC5/<!-J6!,%-^&%(&U2/)M4H9$V4<%-.,%.`*S@)A>8 MI$U8<!,BV!,`+;B)'/;9$)M,8I\OF-L^*6031&32)C&X23T6"@`9W*0!GP3` M#&XRA%$"@`8WV8-&:W"3;9P2`#:XR0A8:9,;W,0)*`4`#FXBC98"T2;^:*D. M;M*!6-ID!S=!@TX!P`,`U-()M;1)#V["AJ("((DV2812NV23#_323#>YP50G M`P`1\,PF8K))%+8*@"'<A`[8M$F9;`($<MJD"#=!A%IM=)-TO+5--JG@39!P MDPJD$P!)N`DP]JH$A[K3)DN`I27G:9,\V:0%B`5`$U;:6"<`@)5N:.P3;B(" M?-H$"C>9@V8!\,!8MN*S4KC)+#X[A9M4H9\VH<)-(,':#MW$!P@%@!5NDH?: M7N$FPZ@M%FZ"CMIF`9H-M8D6;@*'X@)@"S<)A'*Y<)-U"$`#5NO"3=8P`.H" MP`O4!$![`/"%FX3WNV"XR1B\:[4PQ!&]`!##==E[7INT@;UDN$D<V%N&FT3K MNV:X"8>^>P;<LA<-'65O&F[2!_:J`<'L7<--_,#>!MF$2M^=KTUZ\]T:V80^ MWWW#30[!7CCHDKWWM<DCV#L7+PG@NW.X"0E6;#4ZW(0%,`9`M&QB@QK;X28Z MJ#&';.*-&N/A)N"H<1YX/(#OZN$F/$BRU?8P6R<#@`\W`8*4$\Q5*4/8K%*^ M$@"0(&5`W(0)4NZ-3:0@Y?>TE@#?I8]-R%&`[^+')@PPP'?Y8Q,'V-EJ`+() M+_8,`!"?!]"(N`DW`)T((@-:$3=A!Z`7(<P#?)<1.7D-`!KA5P!8VA$W88:F MK79BFT#CTP"`1#A)'8F;S,;2DK@)-D@]B9O@T-*4,#2I*W$3;Y#:$D0F]25N M0@Y2^]`FYB`U#^&(CVT)P!,`R"(]E/V)9G=&V:"@2Q6;'0IIVT1+!M`$Q#A! MQ`6`VVA&-"(I(%8*B)D"8J>`&"H@E@J(J0)BJX`8*R#6"HBY`F*O@!@L(!8+ MB,D"8K.`&"T@5@N(V0)BMX`89RR3"XCI`F*[@!@O(-8+B/D"8K^`&#`@%@R( M"0-BPX`8,2!6#(@9`V+'@!@R()8,B"D#8NBQC*<MTPR(.0-BSX#8J"T3#8A) M`V+3@-AM+%,-B,W&,M>`V*LMDPV(X=`RH@#`//B@`PEX9SU=`48`T!@?-B8C M`'"41@`:II\A^D>0^`A`(S<@@$R60`"5A,%T`7`#`;`2"`*H)=4>J04!Z+`/ M`E@F(`J9D_6L/!,`L-H2O3[R0BJ>B``@-^7+#0!KZB1I3#,:()CD9;E!,6F? M1]*55)FT5^H)],!D&C#G=A,P5AXH.4$2[0&0-#3BI$EJ'%LR7^^PV^?9)JI7 M:Q-US[1SPMXF7`2^&0$`?,22T2;/="(G<Y+%ZE];^]N^/DZNPWU`@!\G!1B_ M];E/>9X8(0E3D$(4'F@$)0S!_?!70A#H;Z,DS/_]X/T"'>H@!V+P!D-@!S+V M!5\P!@5H!F'@8.M7!/@7?^W'?^M'!!"8!/?'?P?X?P$X@"72?QLH@#>R.C*V M?E>`?P=8!GB0!@;X!2_"%@)1!GI@$1[V!6$@@!Y(!$<@!4]0!5``!.!E(#6" M@"1"!BX1$N`5%6$P%55Q%?GU!2ZQ@FD0$FD@@TTX%RT(%FWQ(E8(7B\2!F3` MA0=8!$U0!5)0!%-0!*YU@$8`!46`!V-0!B+&AD40`VQA(VU($'9X@&8`!Q9Q MA5_`ARY8!BS(!$1`!5)0!4X@5E_P.G<0`Q1R@%@P!%:@AE^0!$_P@#M86E^0 M@BO8?U1!!R1R!CMV@*"8('8@8C6X$BIH@`RB(>=U@'`@/&P`B"]2!E\@!J_H M8(!((J[X!K"(BW*PBU\P!V(@C&H2!$1`!#\(!5-0!4+`C$/`0#](C(.8B[^X MBV9`%660C2LQ/.`E(S!!!T=6C71@!V)0!_UU@'A@!AE2!W-`8%]P!W*P@DXH MC_2X$N#%!MLXC$SP!$YP!%3P!(?QA&VA7E\@/`:ICPH)B.X(C^`U.@JACH`H MBW0`BWQ8!Q8)7AAID6A`(OW'AE5`!9)U@&88!$PPB95H!5`@!4G@!%3P@!MI MBQM)(F8PDQ1)CQ+9?U8`(6^0$"PX!C`P!B4"A4!)E&[@B0<X!%`@DB0Y!A%) M!^IX!H,X!O$XE1WIA'70.E09CQ-!$.1XE:MH@!4IEN"U!F*`!DG9!F]P(67) MB!E9E?TW!?/W!$R0)P<XEV98!$YPB3MYDDE`!$$`DU@P7`>XDH>XDU(0!(]U M@'>`!A:1@N3HF)`Y9/+XF"]R9&4``SAP`U]0!`HA!YFYF9TY!6@@$!:9D?WW MDS!@!3"BA:JI$#30FF/PF@?XDS4PF[5IB0IA`[DI$/TGBL`HBJ1XBFF`$4+( MB6Y@!TS0.OUWBE018"BHG%-`A?8X%:GX!1<B!S,R$_WW!G,`$FKPFP?XG2VA M($AX$1[1?S@PFG(9BB5"!8'1?X^IA&(0!E31?\:X!FQ@!PUR@/0)!VV!G6A0 M!U,)B&S`@@1JH&20B_:HH+?(!@S*!O;H$A-A!D5ICS'A!GGP!1':H/U'!M_I MA^IY@"$Z!T40)')`!6\P!;>%@JR(CA/9B5'I%@GBG*Q8H\C)%OMIHP<($S,Z M!@K1?Q>ZG2R8ARR($=K9?[29!WWXB73@A6W08N39AVY@!O55BG10A&XP!>^Y M$EA*C%KZ!AG9I23RI?T7$1-!@T7X(K29IF5`@U\@!640$@1(![[YAU-@.FZP MHF2`I\"YBBM(![G8?U]`G6?P$FP`!5`*`&70!G<P!QT:%RLX!9SEJ)#ZA$AI M(FQ0J8WZJ)$Z!V%P(7]ZJ9'J!BU!JI\:IC#QCIZ*J6,P$U#Z!@U2JE\@D*E5 MJU^H!N\H8[5ZH7@P!6408+4J!%`0JF:07[7*%B@A8K6JG=Q9(XY:!RL*!S\X M!#`@5M<J5C`Y!51`!4G0!$7@`MMZAMX*KFS5A`!`!Q(E%``P(S+H?P#`A]\9 MK]QJKN$ZK@!`!4/PK>%:6OO:KS')F2Z9!*XUAE70GG,HB47`67,H!:7%AF:( MAJZ%!%5P!$5@!2<)`(5XB(DH5E#P!%?PB`!@DBA)B0`PET'PDD]0)I)XLI>8 MB4]06D6`!06+LFEX?T=P6Q.[ERN)LE2P!$RPEP`@F#1KLT;0!"?ICV)E!$(@ M!8750,JH)M+(61,K!$M;6/R:!6V8?T*;6NOGM1)E!&A8!(7%?H))!<,UL58@ M!%60)EA@!$;`!%4P!7AE@@7+5G<+DX?!!&1;6$P@D(>1DD80!(45MW-;MVK2 MDB^9)DRYKR1;!">9DK;%DBX)DQ!K!'IYAXM+!6DR?]_*EZZUE)R;)A>[KWA% M/4P0!,-U!%`PF*ZU!$*`!#;;!$]@!6E(LZ[EN$.`5WE9EWF2ET4PM%.0!$<0 MF%1P&%:@F(]U!4CP@#0[7`$!W*?$_0(!<TT``$U-```M$S9W0<$J````)@`` M``$```````````!T97-T=&EM92YP<FH```!_3(5`*2,H``#IE)E#ATZ:-F5` MH*`SQB!".2[0I&B@@*'#,G)`*+1X$&/$%`$!W*?$_0(````````````````` M````````````````````````````````````````````$@``,*T("``````` +```````````````` ` end END--cut here--cut here ------------------------------------------------------------
big@vlsi.polymtl.ca (Patrick Drolet) (03/11/91)
In article <1991Mar6.145414.8747@uwovax.uwo.ca> bangarth@uwovax.uwo.ca writes: >Researchers here are looking for some facility to measure time with 1 ms. >or less accuracy on an AT or 386 machine. We currently with our software >(in Turbo Pascal) can't get any better than about 3 ms. accuracy. I have heard >that there was an article written in a recent tech magazine describing a way >someone has gotten the required accuracy. I know this is vague, but does anyone >know where this is written up, or have a more direct answer? Thanks for your >help. It could save me a lot of library work. I'm afraid I only have half of the answer (since I don't have my Pheonix BIOS tehc ref near by). There's an address (in low RAM) that instruct the real-time clock to generate an interrupt every X milliseconds... You could take the actual 55ms to 1 ms, BUT BE CAREFULL!!! Be sure that no resident software are hooked on the timer interrupt, and make sure you're using a FAST computer, sincethe overhead of the interrupt, for this purpose, is about .3 and a 386/20 Also remember to tell your prog to reset the timer period to 55 ms after use... Patrick Drolet big@info.polymtl.ca P.S.: If you wish to be even more accurate, grad the timer interrupt, but don't chain with the old interrupt after use! The only problem is that your real -time might not be good... Bah! As long as it does not affect CMOS ram, all you have to do is to reboot the computer.
Timothy.Litton@comp.vuw.ac.nz (Tim Litton) (03/14/91)
In article <1991Mar7.025205.9213@qualcomm.com>, rdippold@maui.qualcomm.com (Ron Dippold) writes: |> In article <1991Mar6.145414.8747@uwovax.uwo.ca> |> bangarth@uwovax.uwo.ca writes: |> >Researchers here are looking for some facility to measure time with |> 1 ms. |> >or less accuracy on an AT or 386 machine. We currently with our |> software |> >(in Turbo Pascal) can't get any better than about 3 ms. accuracy. I |> have heard |> |> I would suggest that you speed up the clock ticks. Currently they |> occur |> 18.2 times a second, but you can speed it up so that they occur 1000 |> times |> a second or more, as the timer is programmable. Your interrupt |> routine will |> need to scale whatever timer value you use down to the expected value |> and |> pass that on to the old timer. For example, if you speed up the |> timer 128 |> times, you will need to call the old interrupt vector every 128 |> actual ticks. |> You can get some great accuracy this way, just keep in mind that the |> faster |> you interrupt the processor, the more machine power it gobbles up. Don't try this!!! Your system clock is dependent on that timer, so are most of your I/O devices for time outs! Personally, I would put up the +/- 5ms inaccuracy then try this! Tim Litton.
rainer@boulder.Colorado.EDU (Rainer Malzbender) (03/14/91)
In article <1991Mar14.040625.13212@comp.vuw.ac.nz> Timothy.Litton@comp.vuw.ac.nz (Tim Litton) writes: > >In article <1991Mar7.025205.9213@qualcomm.com>, >rdippold@maui.qualcomm.com (Ron Dippold) writes: >|> In article <1991Mar6.145414.8747@uwovax.uwo.ca> >|> bangarth@uwovax.uwo.ca writes: >|> >Researchers here are looking for some facility to measure time with >|> 1 ms. ... > >Don't try this!!! > >Your system clock is dependent on that timer, so are most of your I/O >devices for time outs! Personally, I would put up the +/- 5ms >inaccuracy then try this! Nonsense. You intercept the interrupt vector with your own routine, then call the regular interrupt once every N times. Everything works, except you eat up more CPU time handling all the extra interrupts. Basic does exactly this - it reprograms the timer to interrupt four times faster in order to produce more accurate timing for sound. -- Rainer Malzbender PhD "It's not the bullet that kills you, it's the hole." Dept. of Physics (303)492-6829 -Laurie Anderson U. of Colorado, Boulder rainer@boulder.colorado.edu 128.138.240.246
frank@cavebbs.gen.nz (Frank van der Hulst) (03/15/91)
In article <1991Mar14.040625.13212@comp.vuw.ac.nz> Timothy.Litton@comp.vuw.ac.nz (Tim Litton) writes: > >In article <1991Mar7.025205.9213@qualcomm.com>, >rdippold@maui.qualcomm.com (Ron Dippold) writes: >|> In article <1991Mar6.145414.8747@uwovax.uwo.ca> >|> bangarth@uwovax.uwo.ca writes: >|> >Researchers here are looking for some facility to measure time with >|> 1 ms. >|> >or less accuracy on an AT or 386 machine. We currently with our >|> software >|> >(in Turbo Pascal) can't get any better than about 3 ms. accuracy. I >|> have heard >|> >|> I would suggest that you speed up the clock ticks. Currently they >|> occur >|> 18.2 times a second, but you can speed it up so that they occur 1000 >|> times >|> a second or more, as the timer is programmable. Your interrupt >|> routine will >|> need to scale whatever timer value you use down to the expected value >|> and >|> pass that on to the old timer. For example, if you speed up the >|> timer 128 >|> times, you will need to call the old interrupt vector every 128 >|> actual ticks. >|> You can get some great accuracy this way, just keep in mind that the >|> faster >|> you interrupt the processor, the more machine power it gobbles up. > > >Don't try this!!! > >Your system clock is dependent on that timer, so are most of your I/O >devices for time outs! Personally, I would put up the +/- 5ms >inaccuracy then try this! > I've done this very successfully (although only to get 3ms accuracy on an XT). I simply sped up the interrupt by a factor of 16, then called the original vector (from my new vector) once every 16 interrupts. Before my program exits, it reset the tick interval, and restores the vector. Therefore the RTC keeps getting called at the usual 18.2Hz. I think you may be confused -- we're talking about changing, through software, the frequency of interrupts coming into IRQ0 (interrupt 8 on the CPU). This won't affect the clocking of signals on the bus, which is what "system clock" implies to me. Secondly, the only I/O device time-out controlled by the INT8 service routine is the floppy disk. If that ISR isn't called, all that will happen is that the floppy will continue to spin. That can be turned off by outputting a byte to the appropriate port, if necessary..> Frank. > -- Take a walk on the wild side, and I don't mean the Milford Track.
rdippold@maui.qualcomm.com (Ron Dippold) (03/15/91)
In article <1991Mar14.040625.13212@comp.vuw.ac.nz> Timothy.Litton@comp.vuw.ac.nz (Tim Litton) writes: > >In article <1991Mar7.025205.9213@qualcomm.com>, >rdippold@maui.qualcomm.com (Ron Dippold) writes: >|> I would suggest that you speed up the clock ticks. Currently they >|> occur >|> 18.2 times a second, but you can speed it up so that they occur 1000 >|> times >|> a second or more, as the timer is programmable. Your interrupt >|> routine will >|> need to scale whatever timer value you use down to the expected value >|> and >|> pass that on to the old timer. For example, if you speed up the >|> timer 128 >|> times, you will need to call the old interrupt vector every 128 >|> actual ticks. >|> You can get some great accuracy this way, just keep in mind that the >|> faster >|> you interrupt the processor, the more machine power it gobbles up. > > >Don't try this!!! > >Your system clock is dependent on that timer, so are most of your I/O >devices for time outs! Personally, I would put up the +/- 5ms >inaccuracy then try this! Look, I _said_ that you should step down the ticks that you get so that you continue to call the old timer interrupt at the same rate. I have been using this method for years without problems. The only caveat is that if you exit without restoring the old interrupt, you could be in trouble.
rkl@cbnewsh.att.com (kevin.laux) (03/15/91)
In article <1991Mar14.202729.7884@qualcomm.com>, rdippold@maui.qualcomm.com (Ron Dippold) writes: > In article <1991Mar14.040625.13212@comp.vuw.ac.nz> Timothy.Litton@comp.vuw.ac.nz (Tim Litton) writes: <clock tick debate deleted> I've been following this thread for a bit. At this time I'd like to point out that for AT's and most PS/2's with a Real-time clock there are two services available for timing. They are Int 15h Function 83h and 86h, Event Wait and Delay, respectively. Event Wait will set the high order bit in a byte flag when the interval expires, while Delay will pause until the interval expires. The timing is accurate to 976 microseconds but with Int 70h it's more like 1 millisecond. Event Wait AH: 83h AL: 00h Set Interval 01h Cancel Interval CX: High order microseconds word DX: Low order microseconds word ES:BX Pointer to flag byte that gets high order bit set as soon as possible after end of interval Carry Flag clear if successful Carry Flag set if error (Timer already running / function not supported) AL: 80h PC 86h XT, AT Delay AH: 86h CX: High order microseconds word DX: Low order microseconds word Carry Flag clear if successful Carry Flag set if error (Timer already running / function not supported) -- ________________________________________________________________________________ R. Kevin Laux Email: rkl1@hound.att.com AT&T Bell Labs Voice: (908) 949-1160 Holmdel, NJ 07733 Fax: (908) 949-0959