FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/services/ffs/rand.c @ 531:de635895e0be
gsm-fw/L1/include/*.h: s/ANLG_FAM/ANALOG/ in LoCosto-based version
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Fri, 01 Aug 2014 16:46:33 +0000 |
parents | 2beb88a3d528 |
children |
rev | line source |
---|---|
219
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 /* |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 * This version of rand() has been lifted from Ancient UNIX, and modified |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 * to match the version used in TI's TCS211 GSM firmware, as revealed by |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 * disassembly of rand.obj in the rts16le_flash.lib binary library used |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 * by that semi-src package. TI's version (most likely from their compiler |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 * tools group, rather than the GSM fw group, but who knows) uses the |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 * same trivial implementation of rand() as the original Ancient UNIX libc, |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 * but with one change: TI's return value is right-shifted by 16 bits |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 * compared to what the Ancient UNIX rand() would have returned. |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 * The caller thus gets back only 15 pseudo-random bits rather than 31, |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 * but then the lower bits of the original rand() return value are |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 * known to be pretty bad. |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 * |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 * rand() is used by some FFS code in reclaim.c. If we don't provide our |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 * own version of rand() and let the linker pull the version from newlib, |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 * the link fails because the latter uses malloc. This ancient implementation |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 * of rand() is quite poor, but my plan is to look into possibly adopting |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 * some better PRNG after we get the basic TI GSM firmware reintegrated. |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 */ |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 static long randx = 1; |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 srand(x) |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 unsigned x; |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 { |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 randx = x; |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 } |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 rand() |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 { |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 return ((randx = randx * 1103515245 + 12345) & 0x7fffffff) >> 16; |
2beb88a3d528
gsm-fw links with FFS included
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 } |