Contributor: SWAG SUPPORT TEAM { Borland changed the Random() algorithm between TP6 and TP/BP7. The Unit below provides the TP6 Random Function in its Integer flavour. (The Randomize Procedure wasn't changed.) { * Turbo Pascal Runtime Library Version 6.0 * ; * Random Number Generator * ; * * ; * Copyright (C) 1988,92 Borland International * } Unit TP6Rand; Interface Function Random(Max: Integer): Integer; Implementation Const { Scaling Constant} ConstM31 = LongInt(-31); { Multiplication factor} Factor: Word = $8405; Function NextRand: LongInt; Assembler; { Compute next random number New := 8088405H * Old + 1 Out DX:AX = Next random number } Asm MOV AX,RandSeed.Word[0] MOV BX,RandSeed.Word[2] MOV CX,AX MUL Factor.Word[0] { New = Old.w0 * 8405H } SHL CX,1 { New.w2 += Old.w0 * 808H } SHL CX,1 SHL CX,1 ADD CH,CL ADD DX,CX ADD DX,BX { New.w2 += Old.w2 * 8405H } SHL BX,1 SHL BX,1 ADD DX,BX ADD DH,BL MOV CL,5 SHL BX,CL ADD DH,BL ADD AX,1 { New += 1 } ADC DX,0 MOV RandSeed.Word[0],AX MOV RandSeed.Word[2],DX end; Function Random(Max: Integer): Integer; Assembler; Asm CALL NextRand xor AX,AX MOV BX,Max.Word[0] or BX,BX JE @@1 XCHG AX,DX div BX XCHG AX,DX @@1: end; end.