Since the startTmr and checkTmr( commands only work with seconds, this cannot be possible with those commands.
However, as stated on the For( documentation and the rand documentation under their respective Advanced Uses sections, you can use the For( or rand commands to create a <1 second delay and, in turn, calculate milliseconds.
The number required for the delay per millisecond is not known, therefore, thorough experimentation may be required.
Although I have not tested this, It may be possible to have a while loop incrementing a variable each time it checks the timer. Dependent on how many times the variable is incremented, you may be able to get a fraction of a second, although I doubt it is possible to get true milliseconds.
Considered.
I have a general idea on how to go through with that, I shall implement it tomorrow.
Using the following code, I got the amount of milliseconds one pass of While, For(, and Repeat takes.
:ClrHome
:ClockOn
:0→T:startTmr→F
:Repeat checkTmr(Ans:End //ERR:DOMAIN will throw if this is not used beforehand
:While not(checkTmr(F+1
:T+1→T
:End
:Disp T
:0→T:startTmr→F
:Repeat checkTmr(Ans:End
:For(I,0,E4) //Little E
:T+1→T
:If checkTmr(F+1)=10
:E4→I
:End
:Disp T/10
:0→T:startTmr→F
:Repeat checkTmr(Ans:End
:Repeat checkTmr(F+1
:T+1→T
:End
:Disp T
Executing the program results in the following output:
65
54.4
68
This results in the following milliseconds:
~15.3846ms for While
~18.3824ms for For(
~14.7059ms for Repeat
The results will vary depending on battery life, the amount of commands in each loop, et cetera.