Contributor: WILLIAM BARATH

Unit Goodies; {Collection of things I wish were in the System Unit}

Interface
Type Fixed= Record F:Word;W:Integer;end;

Var r,r2,r3:Word;

Function Greater(a,b:Integer):Integer;
Function Lesser(a,b:Integer):Integer;
Function Perturb:Word;  {Peturbation algorhythm (C) 1982 BarathSoft}
Function QRandWord:word;
Function QRand(n:Word):word;
Function SQRoot(N:LongInt):Word;
Function SGN(n:Integer):Integer;

Implementation

Function Greater(a,b:Integer):Integer;assembler;
asm
  Mov  ax,a
  Mov  bx,b
  Cmp  ax,bx
  Jnc  @done
  Xchg ax,bx
@Done:
end;
Function Lesser(a,b:Integer):Integer;assembler;
asm
  Mov  ax,a
  Mov  bx,b
  Cmp  ax,bx
  Jc   @done
  Xchg ax,bx
@Done:
end;

Function Perturb:Word;assembler;  {Peturbation algorhythm (C) 1982 
BarathSoft}
{Delta 2904 yields 65534 length pseudorandom sequence}
asm Mov ax,r; Xor ax,$a5a5; add ax,ax; adc ax,2904; Mov r,ax; end;
Function QRandWord:word;assembler;
asm Call Perturb; Add ax,r2;Mov r2,ax;Xor ax,r3;Mov r3,ax;end;
Function QRand(n:Word):word;assembler;
asm Call QRandWord; Mul n; Mov ax,dx; end;
Function SQRoot(N:LongInt):Word;Assembler;
asm
  Mov si,-1
  Mov cx,n+2.word
  Test ch,$80
  JNZ @Error
  Mov bx,n.word
  Mov di,32768
  Xor si,si
@DoSqrt:
  Mov ax,si
  Or  ax,di
  Mul ax
  Cmp dx,cx
  Ja  @NoSet
  Jnz @Set
  Cmp ax,bx
  Ja  @Noset
@Set:
  Or  si,di
@Noset:
  Shr di,1
  Jnz @DoSqrt
@Error:
  Mov ax,si
end;
Function SGN(n:Integer):Integer;assembler;
asm
  Xor ax,ax
  Cmp n,ax
  Js  @neg
  Inc ax
  Jmp @end
@neg:
  Dec ax
@end:
end;
end.