Antoni Burguera Burguera soltó algo así como:
Lo más extendido es obtener una semilla del registro R con tan sólo
hacer LD A,R. Lo malo es que esto no funciona en Z380 y puede que no
funcione
en un hipotético nuevo micro compatible para MSX.
¿Se puede usar el valor de R directamente como número aleatorio?
Si, directamente. Es lo que hacemos todos :)
O sea, para MSX-2... lo que ocurre es que yo apenas se programar en
ensamblador, y para empezar he decidido hacer un juego que se ajuste a
las bases del concurso de 4 KB, o sea, para MSX-1.
Es muy complicado acceder a la función RND del BASIC? Cómo calcula los
números la función RND?
Hmmm. Tengo el algoritmo en BASIC. Si eres capaz de pasarlo a ASM, aquí
lo tienes:
RND function :
--------------
As we have learned from BASIC manuals, we have RND function, that gives
us a RaNDom number. Anyway any computers can't give any real random numbers.
They are allways calculated from someting.
In MSX and SVI computers they are calculated by using followwing algorithm :
NEW = FRC(21132486540519 * OLD + 0.14389820420821)
Because it is quite a hard to understand it like this, I wrote a example
proggram in BASIC to simulate RND function :
10 ' Here we have to split these numbers, elseway BASIC is
20 ' going to lose some important desimals :
30 '
40 M1= 21132480000000#: A1= .1438982#
50 M2= 6540519#: A2=4.20821E-09
60 '
70 R=RND(-TIME) ' Here we give a new seed for RND function. Seed is allways
80 ' reseted, when we start runnig a BASIC proggram.
90 '
100 CLS
110 PRINT "If you are going to use positive numbers for RND(X) funtion,"
120 PRINT "then here is next 10 values, that you are going to get :"
130 PRINT STRING$(65,"-")
140 '
150 FOR I = 0 TO 9
160 '
170 L1 = 1E-07*INT(R*10000000!)
180 L2 = R-L1
190 HE = 10000000!*(M2*L2+A2)
200 H1 = (M1*L2)-INT(M1*L2)
210 H2 = (M2*L1)-INT(M2*L1)
220 H3 = H1 + H2 + A1 + 1E-07 * INT(HE)
230 H4 = H3 - INT(H3)
240 H5 = 1E-07*(HE - INT(HE))
250 R = H4 + H5
260 PRINT I;"|";R
270 '
280 NEXT I
Un saludo,
Jose Angel Morente (jam(_en_)ag0ny(_punto_)com)
(warau(_en_)BonBon(_punto_)net)
*MSX DREAMS* (msxdreams(_en_)hotmail(_punto_)com)
¡Suscríbete a HispaMSX!
http://www.egroups.com/group/hispamsx
hispamsx-subscribe(_en_)egroups(_punto_)com
msxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsx