I am using the random number generator I saw in some of Willsy's code and it works great. However I would love to understand it better. Anyone want to take a stab?
$8379 C@ VALUE SEED : RND SEED 31421 * 6927 @ + $8379 C@ TO SEED ;
Posted Tue Nov 15, 2011 9:57 AM
$8379 C@ VALUE SEED : RND SEED 31421 * 6927 @ + $8379 C@ TO SEED ;
Posted Tue Nov 15, 2011 12:08 PM
Posted Tue Nov 15, 2011 3:26 PM
$8379 C@ VALUE SEED : RND SEED 31421 * 6927 @ + $8379 C@ TO SEED ;
Posted Tue Nov 15, 2011 3:46 PM
idflyfish, on Tue Nov 15, 2011 9:57 AM, said:
$8379 C@ VALUE SEED : RND SEED 31421 * 6927 @ + $8379 C@ TO SEED ;
Posted Tue Nov 15, 2011 3:56 PM
Posted Tue Nov 15, 2011 4:41 PM
<0453> *********************************************************** <0454> * CONSTANTS FOR THE RANDOM NUMBER ROUTINE <0455> A34F 43,01,2B RNDA2 BYTE >43,>01,>2B,>59,>52,>00,>00,>00 * = 1438982 A352 59,52,00 A355 00,00 <0456> A357 42,2A,08 RNDA1 BYTE >42,>2A,>08,>15,>00,>00,>00,>00 * = 0420821 A35A 15,00,00 A35D 00,00 <0457> A35F 43,02,0B RNDC2 BYTE >43,>02,>0B,>20,>30,>00,>00,>00 * = 2113248 A362 20,30,00 A365 00,00 <0458> A367 43,06,36 RNDC1 BYTE >43,>06,>36,>05,>13,>00,>00,>00 * = 6540519 A36A 05,13,00 A36D 00,00 <0459> A36F 43,0A,00 RNDEP BYTE >43,>0A,>00,>00,>00,>00,>00,>00 * = 1E7 A372 00,00,00 A375 00,00 <0460> A377 3C,0A,00 RNDEM BYTE >3C,>0A,>00,>00,>00,>00,>00,>00 * = 1/1E7 A37A 00,00,00 <0461> *********************************************************** <0462> * RANDOMIZE STATEMENT <0463> *********************************************************** <0464> A37F 06,6A,78 NRNDMZ CALL CHKEND Seed provider? <0465> A382 63,C0 BS RNDM1 No <0466> * RANDOMIZE given a seed value <0467> * (99,000,000,000,001 possible starting positions) <0468> * (Place-value is ignored in the input number) <0469> A384 0F,74 XML PARSE Parse the seed <0470> A386 83 BYTE TREMZ * Up to end of statement <0471> A387 06,A3,ED CALL CKSTNM <0472> A38A 8F,4A DCZ @FAC Check FAC for zero <0473> A38C 63,B6 BS GA3B6 <0474> A38E BE,4A,46 ST >46,@FAC 0 < FAC < 1E14 <0475> A391 0F,77 XML VPUSH Let FAC = X2*1E7+X1 <0476> A393 31,00,08 MOVE 8,G@RNDEM,@ARG ARG = 1/1E7 A396 5C,A3,77 <0477> A399 0F,08 XML FMUL FAC = X2+X1/1E7 <0478> A39B 06,00,22 CALL GRINT FAC = X2 <0479> A39E 35,00,05 MOVE 5,@FAC,V@RNDX2 FAC = X2 A3A1 A3,A0,4A 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0018 EQUATES EXEC-359 <0480> A3A4 31,00,08 MOVE 8,G@RNDEP,@ARG ARG = 1E7 A3A7 5C,A3,6F <0481> A3AA 0F,08 XML FMUL FAC = X2*1E7 <0482> A3AC 0F,0C XML SSUB FAC = X1 <0483> A3AE 35,00,05 MOVE 5,@FAC,V@RNDX1 FAC = X1 A3B1 A3,A5,4A <0484> A3B4 0F,75 XML CONT FAC = X1 <0485> A3B6 BD,A3,A0 GA3B6 DST @FAC,V@RNDX2 FAC = 0 A3B9 4A <0486> A3BA BD,A3,A5 DST @FAC,V@RNDX1 FAC = 0 A3BD 4A <0487> A3BE 0F,75 XML CONT <0488> * RANDOMIZE given number seed value (use GPL RAND function) <0489> * (16K possible starting positions) <0490> A3C0 BF,4A,42 RNDM1 DST >4201,@FAC FAC = >4201 A3C3 01 <0491> A3C4 86,4E CLR @FAC4 FAC4= >00 <0492> A3C6 06,A3,D2 CALL RNDMZ <0493> A3C9 03,A5 DATA RNDX1 <0494> A3CB 06,A3,D2 CALL RNDMZ Set up seed <0495> A3CE 03,A0 DATA RNDX2 <0496> A3D0 0F,75 XML CONT Continue on <0497> A3D2 88,52 RNDMZ FETCH @FAC8 Fetch address of seed (high b <0498> A3D4 88,53 FETCH @FAC9 Fetch address of seed (low by <0499> A3D6 02,63 RAND 99 GPL Randomize <0500> A3D8 BC,4C,78 ST @RANDOM,@FAC2 >00<=FAC+2<=FF <0501> A3DB E6,4C,02 SRL 2,@FAC2 >00<=FAC+2<=3F <0502> A3DE 02,63 RAND 99 GPL Randomize <0503> A3E0 BC,4D,78 ST @RANDOM,@FAC3 >00<=FAC+3<=FF <0504> A3E3 E6,4D,02 SRL 2,@FAC3 >00<=FAC+3<=3F <0505> A3E6 35,00,05 MOVE 5,@FAC,V*FAC8 Put in seed A3E9 B0,52,4A <0506> A3EC 00 RTN <0507> A3ED D6,4C,65 CKSTNM CEQ >65,@FAC2 <0508> A3F0 6D,28 BS ERRSNM <0509> A3F2 00 RTN <0510> A3F3 40,01,00 FLT1 BYTE >40,>01,>00,>00,>00,>00,>00,>00 A3F6 00,00,00 A3F9 00,00
Edited by RXB, Tue Nov 15, 2011 5:15 PM.
Posted Tue Nov 15, 2011 4:58 PM
Posted Tue Nov 15, 2011 5:03 PM
Posted Tue Nov 15, 2011 5:26 PM
Edited by RXB, Tue Nov 15, 2011 5:29 PM.
Posted Tue Nov 15, 2011 6:40 PM
moulinaie, on Tue Nov 15, 2011 3:26 PM, said:
$8379 C@ VALUE SEED : RND SEED 31421 * 6927 @ + $8379 C@ TO SEED ;
Posted Wed Nov 16, 2011 2:25 AM
Posted Wed Nov 16, 2011 5:33 AM
idflyfish, on Tue Nov 15, 2011 6:40 PM, said:
Posted Wed Nov 16, 2011 11:10 AM
moulinaie, on Wed Nov 16, 2011 5:33 AM, said:
idflyfish, on Tue Nov 15, 2011 6:40 PM, said:
Posted Wed Nov 16, 2011 11:10 AM
$8379 C@ VALUE SEED : RND SEED 31421 * 6927 + DUP TO SEED ; : RANDOMIZE $8379 C@ TO SEED ;
Posted Wed Nov 16, 2011 11:23 AM
Posted Wed Nov 16, 2011 11:36 AM
Lee Stewart, on Wed Nov 16, 2011 11:10 AM, said:
$8379 C@ VALUE SEED : RND SEED 31421 * 6927 + DUP TO SEED ; : RANDOMIZE $8379 C@ TO SEED ;
Posted Wed Nov 16, 2011 3:39 PM
HEX : RNDW 83C0 DUP @ 6FE5 * 7AB9 + 5 SRC DUP ROT ! ; ( --- n ) : RND RNDW ABS SWAP MOD ; ( n1 --- n2 ) : SEED 83C0 ! ; ( n --- ) : RANDOMIZE 8802 C@ DROP 0 BEGIN 1+ 8802 C@ 80 AND UNTIL SEED ; ( --- )
Posted Wed Nov 16, 2011 5:17 PM
<0464> A37F 06,6A,78 NRNDMZ CALL CHKEND Seed provider? <0465> A382 63,C0 BS RNDM1 NoSo RNDM1 is for those times that a seed number is provided. If no seed it just continues on.
Edited by RXB, Wed Nov 16, 2011 5:19 PM.
Posted Wed Nov 16, 2011 6:02 PM
;[ RND ( limit -- n) ; pushes a pseudo random number between 0 and limit-1 (rnd MOD limit) ; For the full range (0-65535) use a limit of 0 _rnd clr r6 ; upper part of 32 bit dividend mov @seed,r7 ; seed to lower part of dividend srl r7,1 ; shift r0 1 bit to the right jnc nocarr ; jump if no carry xor @mask,r7 ; calculate new random number using mask nocarr mov r7,@seed ; store it as a seed for next time div *stack,r6 ; divide number by divisor (from stack) mov r7,*stack ; push remainder of the DIV b @retb0 ; jump to push and exit routine mask data >b400 ;]
: TEST 1000 0 DO 100 RND . LOOP ;
FALSE SSCROLL ! TEST
Posted Wed Nov 16, 2011 6:09 PM
Posted Thu Nov 17, 2011 9:10 PM
: DEF-CHARS 254 0 DO DATA 4 $007E $7E7E $7E7E $7E00 I DCHAR LOOP ; : DEF-COLORS 31 0 DO I 31 RND 31 RND COLOR LOOP ; : SQUARES 1 GMODE 32 RND SCREEN DEF-CHARS DEF-COLORS BEGIN 24 RND 32 RND 254 RND 1 VCHAR 0 UNTIL ;
: DEF-CHARS 254 0 DO DATA 4 $007E $7E7E $7E7E $7E00 I DCHAR LOOP ; : DEF-COLORS 31 0 DO I 31 RND 31 RND COLOR LOOP ; : SQUARES 1 GMODE 32 RND SCREEN DEF-CHARS DEF-COLORS BEGIN 23 RND 31 RND 254 RND 1 VCHAR 0 UNTIL ;
24 RND 32 RND 254 RND 1 VCHARand the second run is with
23 RND 31 RND 254 RND 1 VCHAR
Edited by idflyfish, Thu Nov 17, 2011 9:20 PM.
Posted Fri Nov 18, 2011 12:32 AM
254 RND 768 RND V!
Posted Fri Nov 18, 2011 1:10 AM
Posted Fri Nov 18, 2011 4:02 AM
FBUF: clipboard \ define a file buffer called clipboard
: TEST
\ define clipboard as a DV80 sequential output file pointing
\ to the classic99 device CLIP...
S" CLIP DV80SO" clipboard FILE
\ open the file referenced by clipboard (CLIP)...
clipboard #OPEN
\ abort if the call to #OPEN failed...
ABORT" cant open windows clipboard"
10000 0 DO
\ generate a random number...
1000 RND
\ convert the number on stack to a string...
N>S
\ write the string out to the device...
clipboard #PUT DROP ( drop fail/success flag)
LOOP
\ close the file referenced by clipboard
clipboard #CLOSE
;
tf-rnd.PNG 152.12K
19 downloadsPosted Fri Nov 18, 2011 4:03 AM
0 members, 0 guests, 0 anonymous users