Download text file
Hi,

  Here's one for you that seems to pop up now and agian. It is
just one of the hundreds of little goodies you can find in my
library "Nutz 'n Boltz".

  MicroDelay works on 1/1000ths of a second (997 to be exact).
To delay the program by 1/3 of a second CALL MilliDelay( 333)
To delay the program by 1 full second   CALL MilliDelay(1000)

There are 2 versions of the same routine below. One uses PowerBASIC's
REG/CALL INTERRUPT the other uses ASM code. You'll note that the PB
version costs 112 bytes more code than the ASM version. That is an
additional 25% to do the _SAME_ job.

NOTE: This puppy may not work on XT's but should be OK for AT's and
      above.

Have fun,

Don

'-------------------------------------------------------------
'----------  start code  -------------------------------------
'-------------------------------------------------------------

$if 1

SUB MilliDelay( BYVAL Millis% ) LOCAL PUBLIC    ' CODE 448 BYTES
  LOCAL Msec&

  Msec& = ( Millis% * 1000 )
  REG 1, &h8600
  REG 3, ( Msec&  \  65536 )
  REG 4, ( Msec& AND 65535 )
  CALL INTERRUPT &h15

END SUB

$else

SUB MilliDelay( BYVAL Millis% ) LOCAL PUBLIC      ' CODE 336 BYTES

  !     mov     ax,1000           ;
  !     mul     Millis%           ; DX:AX = Micros
  !     mov     cx,dx             ;
  !     mov     dx,ax             ; CX:DX = Micros
  !     mov     ax,&h8600         ; Wait Interval
  !     int     &h15              ; BIOS system services

END SUB

$endif