Просмотр исходного кода

+ add random code from Francesco's GBA code

git-svn-id: trunk@23292 -
florian 12 лет назад
Родитель
Сommit
68d04a4d21
1 измененных файлов с 35 добавлено и 18 удалено
  1. 35 18
      rtl/embedded/system.pp

+ 35 - 18
rtl/embedded/system.pp

@@ -145,18 +145,7 @@ end;
 {$endif}
 
 
-{$ifdef FPC_HAS_FEATURE_RANDOM}
-
-Procedure Randomize;
-Begin
-  RandSeed := 63458;
-End;
-
-{$endif FPC_HAS_FEATURE_RANDOM}
-
-
 {$ifdef FPC_HAS_FEATURE_COMMANDARGS}
-
 Function ParamCount: Longint;
 Begin
   Paramcount:=argc-1
@@ -165,16 +154,44 @@ End;
 
 function paramstr(l: longint) : string;
  begin
-   if l=0 then
-     begin
-       paramstr := '';
-     end
-   else
-     paramstr:=strpas(argv[l]);
+   paramstr := '';
  end;
-
 {$endif FPC_HAS_FEATURE_COMMANDARGS}
 
+const
+  QRAN_SHIFT  = 15;
+  QRAN_MASK   = ((1 shl QRAN_SHIFT) - 1);
+  QRAN_MAX    = QRAN_MASK;
+  QRAN_A      = 1664525;
+  QRAN_C      = 1013904223;
+
+{$ifdef FPC_HAS_FEATURE_RANDOM}
+procedure randomize();
+begin
+  RandSeed := 63458;
+end;
+
+procedure randomize(value: integer);
+begin
+  RandSeed := value;
+end;
+
+function random(): integer;
+begin
+  RandSeed := QRAN_A * RandSeed + QRAN_C;
+  random := (RandSeed shr 16) and QRAN_MAX;
+end;
+
+function random(value: integer): integer;
+var
+  a: integer;
+begin
+  RandSeed := QRAN_A * RandSeed + QRAN_C;
+  a := (RandSeed shr 16) and QRAN_MAX;
+  random := (a * value) shr 15;
+end;
+{$endif FPC_HAS_FEATURE_RANDOM}
+
 
 {*****************************************************************************
                          SystemUnit Initialization