HispaMSX

Re: [hispamsx] Números aleatorios

2000-10-18 21:01:38
Antoni Burguera i Burguera soltó algo así como: 

Creo haber leido algo sobre esto, no se si aquí on en la lista
internacional, pero borré los mensajes.

Alguien puede refrescarme la memoria sobre una forma fácil de obtener
números aleatorios en el MSX? Creo que alguien comentó que consultando
algunos bits del timer se obtienen secuencias de números de apariencia
aleatoria... ¿cómo puedo consultar el timer desde un programa ensamblador?

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.

Así que otra cosa que se puede hacer es tirar del reloj interno que nos
da la hora y tomar los segundos como referencia.

Este reloj se puede leer con la función #01F5 de la SUB-ROM.

En C espeficiamos el bloque 0 -registro 0 del clock IC, y en A obtendremos
un número en BCD del 0 al 9 que podemos usar como semilla. En el registro
1 obtenemos un valor del 0 al 5 (decena de los segundos). Así, usando
uno de estos dos registros, o los dos, nos componemos una semilla que
podemos usar para inventarnos una serie de números aleatorios, o 
directamente para usarla como número aleatorio:


SUBROM:         equ     #15F

        LD      C,0
        LD      IX,#01F5
        CALL    SUBROM

        LD      A,B

        LD      C,1
        LD      IX,#01F5
        CALL    SUBROM
        
        RLCA
        RLCA
        RLCA
        RLCA
        OR      B


Aquí tendríamos en A un número BCD de 0 a 59
si queremos un número más alto podemos seguir cogiendo
los minutos del reloj e incluso las horas (repitiendo lo de antes
pero con C=2, C=3, C=4, etc.) y cogiendo ya pares de registros
de 16bits.



(NOTA PARA HNESTOR: En la sección del TH 5a pone que la rutina de
la sub-rom para leer el clock es #15F cuando debería poner #1F5.



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


<Anterior en la conversación] Conversación actual [Siguiente en la conversación>