Subversion Repositories Kolibri OS

Rev

Rev 2811 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2811 leency 1
/*******************************************************************************
2
 
3
    MenuetOS MineSweeper
4
    Copyright (C) 2003  Ivan Poddubny
5
 
6
    This program is free software; you can redistribute it and/or modify
7
    it under the terms of the GNU General Public License as published by
8
    the Free Software Foundation; either version 2 of the License, or
9
    (at your option) any later version.
10
 
11
    This program is distributed in the hope that it will be useful,
12
    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
    GNU General Public License for more details.
15
 
16
    You should have received a copy of the GNU General Public License
17
    along with this program; if not, write to the Free Software
18
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
 
20
*******************************************************************************/
21
 
22
dword generator;  // random number generator - для генерации случайных чисел
23
 
3003 leency 24
inline fastcall int random( ECX)
2811 leency 25
// get pseudo-random number - получить псевдослучайное число
26
{
3003 leency 27
  $push ebx
28
 
2811 leency 29
  $rdtsc        // eax & edx
30
  $xor eax,edx
31
  $not eax
32
 
33
  EBX = generator;
34
  $ror ebx,3
35
  $xor ebx,0xdeadbeef
36
  EBX += EAX;
37
  generator = EBX;
38
 
39
  EAX += EBX;
3003 leency 40
  EAX = EAX % ECX;
41
 
42
  $pop ebx
2811 leency 43
}
44
 
3003 leency 45
inline fastcall randomize()
2811 leency 46
// initialize random number generator - инициализировать генератор случайных чисел
47
{
48
  asm
49
  {
50
    mov eax,3
51
    int 0x40
52
    ror eax,16
53
  }
54
  generator = EAX;
55
}