Path: csiph.com!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mail From: D Finnigan Newsgroups: comp.sys.apple2.programmer Subject: ProDOS and the random seed RNDL Date: Mon, 21 Dec 2015 19:45:02 -0000 (UTC) Organization: Mac GUI Lines: 62 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Injection-Date: Mon, 21 Dec 2015 19:45:02 -0000 (UTC) Injection-Info: mx02.eternal-september.org; posting-host="ac9e0e4d7dd3957fb97803ee6801bab8"; logging-data="20465"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18TDpcoJnlB+2WGgL7MAnsI" User-Agent: Mac GUI Usenet Cancel-Lock: sha1:vUOj2NuI8Si1zl4GlAS5MpzxFgM= Xref: csiph.com comp.sys.apple2.programmer:2015 Since converting the Marina IP source from DOS 3.3 to ProDOS, I've noticed that link-local addresses, which were previously randomly generated, were no longer random. I took the time to track down this issue yesterday. I'm using ProDOS 8 v1.9 on an enhanced (platinum) Apple IIe but I believe all versions of ProDOS have this problem. I had been using RNDL and RNDH ($4E and $4F) as my random seed. I put together this program to test what was happening: A5 4E 20 DA FD A5 4F 20 DA FD 4C D0 03 ]BRUN RND 0D80 *8000G 958E When I saved it as RND and did BRUN from the Applesoft prompt, I always got 0D80. But when I ran the program using the Monitor G command, I got changing results, which is what I expected. It looked like ProDOS was setting RNDL and RNDH to some constant value. Neither the white ProDOS Technical Reference Manual nor Gary B. Little's Apple ProDOS book mentioned this behavior. Nor could I find any mention of it from searching these newsgroups. Poking around in the LC RAM area for ProDOS I found this code at $E189: LDY #1 LDA ($40),y STA $4E INY LDA ($40),Y STA $4F I went back to the ProDOS 8 source in MliSrc.aii and found that it's a part of the get_prefix routine: getprefx clc ; calculate how big a buffer is needed to ldy #c_path ; get index to users pathname buffer lda (par),y sta usrbuf iny lda (par),y sta usrbuf+1 So it is seen that RNDL and RNDH are being used as part of a buffer for ProDOS. My work-around was to insert a call to GETLN ($FD6A) at the beginning of Marina in order to reseed the random number. Hum-ho. -- ]DF$ The Marina IP stack for Apple II-- http://marina.a2hq.com/