Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.sys.apple2.programmer > #2016

Re: ProDOS and the random seed RNDL

From awanderin <awanderin@gmail.com>
Newsgroups comp.sys.apple2.programmer
Subject Re: ProDOS and the random seed RNDL
Date 2015-12-22 23:38 -0700
Organization A noiseless patient Spider
Message-ID <m31tad8yam.fsf@gmail.com> (permalink)
References <dog_cow-1450727254@macgui.com>

Show all headers | View raw


D Finnigan <dog_cow@macgui.com> writes:

> 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.

Nice detective work!

I don't know the internals of Marina, but if you have control of when
ProDOS is called, perhaps Get_Prefix in particular, you could just save
RNDL/H on the stack before issuing the MLI call.  Having to call an
interactive routine seems an ugly workaround unless you actually want
some user input.

--
Jerry    awanderin at gmail dot com

Back to comp.sys.apple2.programmer | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

ProDOS and the random seed RNDL D Finnigan <dog_cow@macgui.com> - 2015-12-21 19:45 +0000
  Re: ProDOS and the random seed RNDL awanderin <awanderin@gmail.com> - 2015-12-22 23:38 -0700
    Re: ProDOS and the random seed RNDL D Finnigan <dog_cow@macgui.com> - 2015-12-23 19:39 +0000
  Re: ProDOS and the random seed RNDL gids.rs@sasktel.net - 2015-12-23 09:23 -0800
    Re: ProDOS and the random seed RNDL D Finnigan <dog_cow@macgui.com> - 2015-12-23 19:51 +0000
      Re: ProDOS and the random seed RNDL gids.rs@sasktel.net - 2015-12-23 17:25 -0800
        Re: ProDOS and the random seed RNDL D Finnigan <dog_cow@macgui.com> - 2016-01-04 19:02 +0000

csiph-web