16 August 2010, 20:24 | #81 | |
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
|
Quote:
Generated data isn't a good way for me to see the quality of a generator. |
|
16 August 2010, 20:36 | #82 | |||||||||||||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
|
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Because i told it to you. But it just works better. Anyway, it's not really slower ; on a machine with fast multiply it will even be faster than many of them. Quote:
Quote:
Quote:
Quote:
Then i get 64 random numbers, and extract their lower bit (bit #0) to make a 64-bit final bit-mask. You can get the source here : meynaf.free.fr/tmp/tstrnd.lzx If i misused some code, please fix it. Guess what ? Nearly all methods here that i could check just miserably fail this test and show real obvious patterns, thus are unusable for my map generator program. However, both my methods pass this test, apart that the first one fails if the timer reads are suppressed (this is why i insisted on this being an important part of it). So long for your "better" methods. |
|||||||||||||
16 August 2010, 20:53 | #83 | |
Registered User
Join Date: Sep 2007
Location: Las Cruces, USA
Age: 71
Posts: 351
|
Quote:
I did upload a 10 meg sequence and I assure you it's real. When you download the executable type at a dos prompt: makefile filename "" rndsize=10000000 Filename is the path and file name where you want the data to go. Be sure to put the "", and you can change the size to something other then 10000000. Last edited by Ed Cruse; 16 August 2010 at 21:00. |
|
17 August 2010, 00:12 | #84 | |||||
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,762
|
To Ed Cruse:
I've tested the data you uploaded with the Diehard test suite, and it only seems to fail the Binary Rank test, and it seems to pass the other 14 tests, so that's not bad at all However, I'm no expert, so my interpretation of the test results might be off. Still, it seems to be a good algorithm. Source please Low quality, biased PRNGs can do this (crypto algorithms don't count), but I can't give you an example Perhaps, although XORS can be good if used properly (not always easy). No, you're dead wrong, see below Quote:
Quote:
What? Why wouldn't I know Captive uses random dungeons? Probably everyone who's played Captive knows that Quote:
Quote:
Like I said, many of the best algorithms don't use them, which makes it seem that multiplies aren't a good choice anymore. It's just based on what I've seen. Quote:
The only reason why your timer less algorithm passes this test is because the counter you use to re-seed the PRNG (d1 in the euh block) gets multiplied by constants and has constants added to it. This is not random at all. PRNGs need the previous state to generate a new number, and this isn't happening. In the case of your algorithm it also means that the dungeon is going to be the same each time you call the routine, because your algorithm only has a 32 bit seed, and this is simply incremented by one for each call. Again, this isn't random at all. Also, my algorithms don't have a 32 bit seed. The three liner has a 64 bit seed, and the 4 liner has a 96 bit seed. This extra information isn't saved, and it's necessary to do so. Basically the mistake you're making is that none of the internal states of the PRNGs are saved, which means they all fail this test, including yours (multiplying and adding constants to a counter that is incremented by one for each call isn't random). Further more, I've seen some LCGs in there. The problem with LCGs is that their lower bits are essentially useless (known fact), and you have to use the highest bits that are used, or they will fail when used normally. Re-seeding PRNGs before each call is known to be a bad practice, and you're doing it with a simple counter! What I want to know is why you don't just call your PRNG twice per coordinate in the normal way (seed once and save the internal state) and simply use the two 32 bit numbers as the 64 bit mask? The bottom line is that your test doesn't prove anything about the quality of PRNGs, because it doesn't use any of the PRNGs in the right way: 1) Re-seeding for every call. 2) Not storing the complete internal state information. Try again, because your test has failed, not the PRNGs. Last edited by Thorham; 17 August 2010 at 00:34. |
|||||
17 August 2010, 03:25 | #85 |
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,762
|
Meynaf, here's my current multiply-less timer based PRNG (seems to pass the Diehard test suite), which can also be used to seed a normal PRNG (which is actually it's primary use):
Code:
seed movem.l d0-d3/d6-d7/a0,-(sp) lea.l state,a0 movem.l (a0),d0-d3 move.l $dff006,d6 move.b $bfe601,d7 lsl.l #8,d7 move.b $bfe701,d7 lsl.l #8,d7 move.b $bfe801,d7 lsl.l #8,d7 move.b $bfd800,d7 add.l d6,d0 rol.l #7,d0 add.l d1,d0 add.l d7,d1 rol.l #7,d1 add.l d2,d1 add.l d6,d2 rol.l #7,d2 add.l d3,d2 add.l d7,d3 rol.l #7,d3 add.l d0,d3 move.l d3,seed movem.l d0-d3,(a0) movem.l (sp)+,d0-d3/d6-d7/a0 rts section data,data_f state dcb.l 4 seed dc.l 0 |
17 August 2010, 16:34 | #86 |
Registered User
Join Date: Sep 2007
Location: Las Cruces, USA
Age: 71
Posts: 351
|
[quote=Thorham;693055]To Ed Cruse:
I've tested the data you uploaded with the Diehard test suite, and it only seems to fail the Binary Rank test, and it seems to pass the other 14 tests, so that's not bad at all However, I'm no expert, so my interpretation of the test results might be off. Still, it seems to be a good algorithm. Source please I'll send the C code for the actual functions involved, it's fairly complicated and probably will have to be modified to run in a normal C environment. I use my own environment and function libraries. This is how the PRNG works. I simply use the CRC32 that's used for the internet as a 32 bit to 32 bit hash. At first I simply fed the hash with a consecutive stream of numbers and the output looked random but when I protted it, it had definite patterns. So then I fed the output to the input knowing that it would probably repeat before it did the entire 2^32 sequence. This is how it is now. As it turns out it doesn't repeat, I wrote a program that accounts for every single 32 bit number and it hits all the numbers but one. This is the number where the input equals the output with the hash, you wouldn't want to use that number as a seed. If I change anything in the hash like the poly constant then it repeats, so who ever come up with the CRC32 for the internet really new what they were doing. I've tried various other standard CRC hashes and they all repeat no matter what I do, so I'd say I was very lucky to find this one. There's three functions involved, an open, close, and the hash itself. The open builds a table of 32 bit numbers and sets things up, close deallocates everything. The table makes doing CRC32 much faster. I'll upload the functions to the zone shortly. Also my C code tends to look like assembly because I used to write everything in assembly, so most C programmers don't like my C code. I use C as a high level assembly language. If you have questions I'll do my best to answer them. Do you happen to know what a binary rank test is? I'll have to find the test program I was using and see if it has that test. Also, because I was lazy I used a program that I had already written. It takes the 32 bit output and does modulo 256 on it and outputs 0-255. This is more or less how the PRNG would normally be used, ranges other then 0-(2^32). I upload this program to the zone, it's a dos command. Type "makefile ?" and you'll see the template. Or "makefile filename "" rndsize=10000000" to geneate a sequence. |
19 August 2010, 09:27 | #87 | ||||||||||||||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
|
Quote:
Quote:
Quote:
Ha ! I have made a 256-gray 256x256 image test and i cannot see a pattern or whatsoever, even after several consecutive images without reseeding. This doesn't mean there is none, of course. But anyway, even if a pattern is there, it doesn't change the fact that this method is NOT designed to be used like that (and i already told you this, but you never seem to understand, do you ?). Quote:
Quote:
Ha again. See below. Quote:
It's not faulty. But, of course, as you see the results and not like them, you say it is. Quote:
Quote:
Quote:
Now imagine you're doing a small program that basically emulates a physical die. Only the very first number is useful here. Your saved state accounts for nothing. Quote:
And this doesn't include mine. What you do in your code isn't random either (adds, moves and eors aren't random, yeah). Multiplying and adding constants just make the things more irregular, which is what we need. Quote:
Quote:
But when generating land outside, typically you'll be calling that code once per cell (often to choose from 2 cell types, hence the use of the lower bit). Same cell must have SAME result regardless of the whole number of cells. Neighbour cells (with consecutive coords) mustn't show a pattern. This test shows these patterns quite perfectly. Here my method isn't only the "best" one. It's in fact the only one that's just merely usable. Quote:
Yes, to see if the FIRST number is really random. It obviously isn't. Because if would be utterly useless to do so ! My test hasn't failed. But YOU failed. And you hate this, so you bash the test which showed it. How typical. To say things in short : a good PRNG is basically a good hashing algorithm. And a good hash doesn't show similar bit patterns for consecutive values. Quote:
|
||||||||||||||
19 August 2010, 12:06 | #88 | |||||||||||||||
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,762
|
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
It's a known fact that reseeding a PRNG before every call is a bad practice, it's not my idea. Quote:
Again, this is a hard fact, and not my idea. It's a complete necessity. Quote:
Quote:
I deem them unnecessary, although George Marsaglia (mathematician, random expert) has written a very good PRNG that uses multiplies. It's called 'multiply with carry'. The bottom line is that PRNGs don't work properly (including yours as I've shown), if you reseed before every call. This is known to be a very bad practice. A PRNG isn't bad just because it doesn't work when it's misused in this way. Even the very high quality Mersenne Twister (of which only a part has been posted in this thread previously) will fail your test miserably, because it needs a good initial seed, and it it needs all of it's state information saved. Here is the whole algorithm in pseudo code: Code:
// Create a length 624 array to store the state of the generator int[0..623] MT int index = 0 // Initialize the generator from a seed function initializeGenerator(int seed) { MT[0] := seed for i from 1 to 623 { // loop over each other element MT[i] := last 32 bits of(1812433253 * (MT[i-1] xor (right shift by 30 bits(MT[i-1]))) + i) // 0x6c078965 } } // Extract a tempered pseudorandom number based on the index-th value, // calling generateNumbers() every 624 numbers function extractNumber() { if index == 0 { generateNumbers() } int y := MT[index] y := y xor (right shift by 11 bits(y)) y := y xor (left shift by 7 bits(y) and (2636928640)) // 0x9d2c5680 y := y xor (left shift by 15 bits(y) and (4022730752)) // 0xefc60000 y := y xor (right shift by 18 bits(y)) index := (index + 1) mod 624 return y } // Generate an array of 624 untempered numbers function generateNumbers() { for i from 0 to 623 { int y := 32nd bit of(MT[i]) + last 31 bits of(MT[(i+1) mod 624]) MT[i] := MT[(i + 397) mod 624] xor (right shift by 1 bit(y)) if (y mod 2) == 1 { // y is odd MT[i] := MT[i] xor (2567483615) // 0x9908b0df } } } Basically, you're going against known facts. Your test shows nothing, and I have no problem with you telling me that my PRNGs are poor based on your test, because I know better than that. What I do care about is that a smart guy like you doesn't want to accept those facts as the truth Last edited by Thorham; 19 August 2010 at 19:26. |
|||||||||||||||
19 August 2010, 16:31 | #89 |
Registered User
Join Date: Sep 2007
Location: Las Cruces, USA
Age: 71
Posts: 351
|
I have an idea about measuring the quaility of the output of a PRNG. Since white noise is supposed to be perfectly random, how about taking PRNG data and determining how good of white noise it is. I know when I listen to the output of my PRNG it sounds like really good quality white noise, of course that's might not mean much.
I'm thinking do a fourier transform and generate a frequency verses amplitude spectrum. Then do a k=4 standard deviate on the amplitude data, that would tell you the variation of the amplitude of 99% of the amplitude data. I believe perfect white noise has all frequencies with all the same amplitude and phase. To me the obvious problem would be the amount of data that can be analyzed. 10 megs even with a fast fourier transform could take a very long time. I'm not sure at this point. So what do you think? |
19 August 2010, 16:35 | #90 |
Registered User
Join Date: Sep 2007
Location: Las Cruces, USA
Age: 71
Posts: 351
|
To Meynaf:
[quote=meynaf;693708]Good, thanks. I'll check it. With source, of course, it's perhaps easier In case you haven't noticed I did upload the C and assem sources, in one of the previous messages to Thorham I explained how the PRNG works. |
19 August 2010, 19:24 | #91 | ||
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,762
|
Quote:
Quote:
About about your generator: What algorithm did you use for the CRC? You talk about the CRC from the internet, but which one is that? You don't have to post the source, but a pointer about the algorithm would be useful |
||
20 August 2010, 15:47 | #92 | |
Registered User
Join Date: Sep 2007
Location: Las Cruces, USA
Age: 71
Posts: 351
|
Quote:
The source codes are in the zone, C and assem. I found a print out of CRCs in general that came from Wikipedia. The title is "Cyclic redundancy check". It appears I'm using the same CRC32 that's used by Ethernet, FDDI, PKZip, WinZip, and PNG. It appears to be "CRC32 IEEE 802.3". I haven't found the information for doing CRCs in general. The method I'm using uses a lookup table which makes it much faster. In the source codes "CRC32open.c" creates the table and deallocates it. Rndgen.asm does the actual CRC32 calculations. I did all this years ago so I may have difficulty finding the info. Study the sources which is what I originally did with the sources I found on the internet. |
|
22 August 2010, 01:39 | #93 |
The Spanish Songstress
Join Date: Jul 2009
Location: Finland
Posts: 114
|
Meynaf, you have not only shown that you don't even know what a pseudorandom number generator means, but also that you don't understand statistics or probability.
Your claims and tests are utter crap, and you seriously need to do some basic reading on number theory & probability before venturing any further as currently you're only digging yourself deeper with every claim. This is becoming "rather silly". |
22 August 2010, 13:36 | #94 | |
Registered User
Join Date: Jan 2008
Location: Warsaw/Poland
Age: 55
Posts: 1,975
|
Quote:
|
|
22 August 2010, 21:08 | #95 |
The Spanish Songstress
Join Date: Jul 2009
Location: Finland
Posts: 114
|
|
23 August 2010, 15:06 | #96 | ||||||||||||||||||||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
|
Quote:
Quote:
But ADD still doesn't move bits around very much, nor does it mix them enough. Quote:
You looked alike anyway. Quote:
Quote:
Quote:
Quote:
And please do an asm test yourself, instead of adding more of your quibbles here. Would be much more useful. Quote:
Quote:
Quote:
Quote:
Quote:
If this is hard fact, show pointers. Not in this case. You would save something you don't reuse. Quote:
Perhaps it's bad, but at least it did its job quite nicely where the others wouldn't have done it good at all. Quote:
Now please change your "unnecessary". Tell it : you see muls as "evil" Quote:
Quote:
Quote:
I think there is a little bit of misunderstanding in here, so it's time to clear it. Once and for all, my timerless method isn't designed to be a generic PRNG, it's made for my particular case of a dungeon generator. You told that other methods were better, but for what it gets used they are not. My test shows why. Now i'm not saying it would be a good generic method, there is another one for that. I'm also not saying my test is an absolute one, even though you (on purpose ?) nicely ignored that my timer-reading method also passes the test quite nicely. Quote:
Quote:
What you're saying here is just bashing. Perhaps you feel like trolling, who knows. When this kind of personal attack comes, we see who's right and who's wrong. And you've just added another layer on top of it. Congratulations. Quote:
Someone said these tools were better than mine. So i had to prove they couldn't be used in its place. Easy or not ? |
||||||||||||||||||||
23 August 2010, 17:23 | #97 | ||||||||||||||||||||||
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,762
|
Quote:
Quote:
Quote:
Quote:
Eh, no. Here's the code is used with your test program: Code:
method equ 0 start lea out,a0 move.l #128*1024,d7 moveq #1,d1 ; on fait de 1 Ã 64 .loop bsr.s euh move.l d6,(a0)+ bsr.s euh move.l d6,(a0)+ .next subq.l #1,d7 bne .loop rts However, I discovered that I put moveq #1,d1 inside the table gen loop for the image I've shown you So I've corrected it now. It's still highly patterned, and certainly not random. Image here: rndout_corrected.zip Quote:
Quote:
Quote:
Quote:
Quote:
. Plotting pixels in a 256x256 grid where each pixel gets a random gray value. . Plotting white pixels in a 256x256 grid where the coordinates for each pixel are random. . Marsaglia's Diehard test suite of 15 tests. I don't need any more tests for testing general purpose routines. Quote:
Quote:
Quote:
Quote:
Code:
;------------------------------------------------------------------------------ rnd.gen ;Generates PRND numbers with a maximum period of 2^96. ; ;Has to bee seeded. ; ; ;out d0=32 bit PRND number. ;------------------------------------------------------------------------------ movem.l d1-d2/a0,-(sp) lea rnd.gen.seed,a0 move.l (a0)+,d0 move.l (a0)+,d1 move.l (a0),d2 rol.l #7,d0 add.l d0,d1 rol.l #7,d1 add.l d1,d2 rol.l #7,d2 add.l d2,d0 move.l d2,(a0) move.l d1,-(a0) move.l d0,-(a0) movem.l (sp)+,d1-d2/a0 rts ;------------------------------------------------------------------------------ Code:
;------------------------------------------------------------------------------ rnd.seed ;Generates custom length seeds based on hardware state. ; ;Should not be used to re-seed the PRNGs, because it seeds from ; ;scratch (all states are overwritten and seeder state is ; ;cleared). Use rnd.reseed for that. ; ;Seed state is saved (for the re-seeder). ; ; ;in d0=seed size in long words. ; ; a0=pointer to seed. ;------------------------------------------------------------------------------ movem.l d0-d3/d5-d7/a0-a1,-(sp) move.l d0,d7 moveq #0,d0 moveq #0,d1 moveq #0,d2 moveq #0,d3 .loop move.l $dff006,d5 move.b $bfe601,d6 lsl.l #8,d6 move.b $bfe701,d6 lsl.l #8,d6 move.b $bfe801,d6 lsl.l #8,d6 move.b $bfd800,d6 add.l d5,d0 rol.l #7,d0 add.l d0,d1 add.l d6,d1 rol.l #7,d1 add.l d1,d2 add.l d5,d2 rol.l #7,d2 add.l d2,d3 add.l d6,d3 rol.l #7,d3 add.l d3,d0 move.l d0,(a0)+ .next subq.l #1,d7 bne .loop lea rnd.seed.state,a1 movem.l d0-d3,(a1) movem.l (sp)+,d0-d3/d5-d7/a0-a1 rts ;------------------------------------------------------------------------------ The seeder saves it's own seed state, because there's also a re-seeding algorithm (rnd.reseed). It uses the same method as this one, except that it uses the state generated by rnd.seed and it also uses the PRNGs existing state instead of overwriting it. It's used by periodically calling it to randomize the PRNG state further based on part of the hardware state (instead of just overwriting everything). The reseeder can be called before every PRND call, but it's better to do it far less frequently. This works because none of the sates are overwritten by it. I've read this quite a few times online, but it also seems that not using the PRNGs seed state to it's fullest means that you're not using the generator properly. Your test clearly shows this for your own generator. Quote:
How can you expect that something will work properly when it's used in the wrong way? I've already said that PRNGs rely on saving their seed state, or they'll fail. Simple as that, and your test clearly shows it. Yes, in this case, too, because the generators can't work properly without them. Quote:
Quote:
Quote:
Quote:
Everyone who knows what they're talking about. At least it's very good and quite fast. Quote:
Quote:
Quote:
Quote:
Except that you don't even know the basic facts about seed states and reseeding before every call. Last edited by Thorham; 23 August 2010 at 17:50. |
||||||||||||||||||||||
24 August 2010, 05:42 | #98 | ||
The Spanish Songstress
Join Date: Jul 2009
Location: Finland
Posts: 114
|
Meynaf, sorry if my post felt like a personal attack, but it was only meant to address your "test methodology" and the qualities of your claims. For that it was an accurate assessment. (Edit: I re-read my post and I indeed wrote it as a personal attack. Sorry.)
You slant other prng based simply on your flawed testing, which your generator happens to pass. That's clear bias from you. The other generators obviously failed because they were not designed for your kind of test at all and you used them incorrectly. Simple as that. Doesn't tell anything about the actual qualities of the other generators or yours. Quote:
The least you could do is read the documentation for the other algorithms how to use them properly before claiming anything on them. (for example, they usually specifically say you're not to reseed them for each call) Quote:
Implemented properly they could be used instead of your algorithm. That said, I haven't analyzed your algorithm so I can't comment if it has any obvious flaws or not. Obviously, it works better for your specific needs as is, but you still can't claim it is generally better than anything else, especially based on that one premise. With certain strict qualifiers, your algo "beats" the other generators, but is not necessarily any better. Your generator breaks if it is called in a tight loop. You addressed this and said it is not designed to be used like that. Fine. Show the same courtesy towards other generators before you claim yours is better or others are flawed. Note that prngs' have the property (not a flaw) that if you give them the same seed, you will always get the same sequence of numbers. If you want to use them as "true random" simulators, you need be careful how you implement them. Prng purpose is only to give a sequence that is sufficiently indistinguishable from true random sequence. If you call them repeatably with the same seed (while losing the state) you obviously lose this and turn them into constant number generators - i.e. useless. If you claim that is a flawed concept, that's your problem (if you actually find reputable sources saying otherwise, please provide them). You do realize pseudo random numbers predate computers? (first "official" tables were published in the twenties or early thirties, iirc) So your opinion on how they should/shouldn't work is pretty much irrelevant. Last edited by Maccara; 24 August 2010 at 06:05. |
||
24 August 2010, 07:31 | #99 |
The Spanish Songstress
Join Date: Jul 2009
Location: Finland
Posts: 114
|
@Thorham
I think you need to take one distinction in account with prng vs "true" random generators. Periodicity. You have tried to address this, but I think you might need to find a little bit more info on this (if you're willing to do some more digging). For prng, it is extremely important to know the period it will repeat (as you have noted), but for "true" rng (which meynaf's implementation is supposed to be) this concept doesn't apply exactly the same way - it shouldn't repeat at all. Sorry, I don't have good sources on hand for this distinction, as I have dealt mostly with prngs' only (execution speed in a loop has been critical, and "true" generators are not usually suitable for that). My personal understanding is that even for "true" generators, the underlying algorithm long period is preferrable, but don't quote me on that - try to find a source to back up that claim and asses what the significance is. It is still worthwhile to examine the algorithm without the "true" random source (cia timers in this case) to determine if the underlying algorithm has an extremely short period (what is extremely short? needs sources) or if it has significant bias which might exhibit as a problem with the random distribution even with the "true" source included. However, it is not enough to just note this but needs to be analyzed in context with the random source too. (for example after determining there is a significant bias, run without timers and collect data and then run with timers and see if there's a significant correlation - does not prove anything definitely but will be a clear indication if there's something warranting a more detailed inspection) Even if you can prove those flaws it does not automatically mean it will result in bad sequences when the "true" source is included. This is where the "entropy extraction" comes in and analysis of it. Also, when you test a rng algo, try to make sure you don't accidentally cause bias. Simple truncation can be "dangerous". My personal view is that it is overkill to use "true" random numbers unless you really need them (because they're usually hard to get right and slow and do not give significant benefits apart from special needs like cryptography). I guess that's the POV you're driving at also? Last edited by Maccara; 24 August 2010 at 08:12. |
25 August 2010, 20:13 | #100 | |||||||||||||||
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,762
|
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
The reseeder might not be that useful, but a seeder really needs to try and be a TRNG (or better, a 'semi TRNG). I hope I made some sense here |
|||||||||||||||
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
Thread Tools | |
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Random question | 251Mario | project.EAB | 1 | 16 May 2013 02:19 |
HELP! A600 number 2 down! :( | Snowy | support.Other | 5 | 04 December 2011 22:12 |
Help needed!!Random octal numbers generator(asm) | sheryn88 | Coders. General | 6 | 01 August 2010 07:19 |
Random crashes | ami_stuff | support.WinUAE | 8 | 06 February 2009 16:51 |
D/Generation | IanMac | support.Games | 2 | 04 November 2002 16:47 |
|
|