Título: Generador Random de números de 8bits Publicado por: aorante en 03 de Agosto de 2018, 12:33:17 pm Hola compis! ;)
Estoy programando mis electrochorradas (una librería para hacer ventanas en texto: idea de @Fubukimaru) y me he dado cuenta de que la función que uso para generar números aleatorios es un petardo. He buscado y no me ha convencido mucho lo que he visto y por estos foros no he encontrado nada. Probando cambios en la rutina, basándome en el uso del registro R para generar diferentes cálculos (no muy razonados y aplicando estrictamente en el método de prueba y error ;) ), he dado con lo siguiente que aparentemente funciona fine (digo "aparentemente" por que la comprobación ha sido de forma visual). Lo comparto por si alguien puede ayudar a mejorarla o puede aportar alguna idea para testearla y comprobar si es eficaz. Pongo la función en C (de SDCC), pero como veréis esta en ensamblador. He puesto unos comentarios con guiones para separar el código principal de la parte necesaria para el assembler-inline de SDCC. Le paso un parámetro para aplicarlo como máscara y obtener rangos de 0 a 1,3,7,15,31,127 y 255. Necesita de una valor en RAM (en C definir una variable global), para almacenar el Seed. Código: char SEED; char Random(char mask) { mask; __asm push IX ld IX,#0 add IX,SP ld C,4(IX) ;recoge el parametro value para usarlo como mascara ; ----------------------------------------------------------- ld A,(_SEED) ld B,A ld A,R sub A,B ld A,R ld L,A ld H,#0 ld A,(HL) add A,B ld B,A ld A,R rlca add A,B ld (_SEED),A and C ;aplica la mascara ; ----------------------------------------------------------- ld L,A ;return L pop IX __endasm; } Referencias: http://www.cpcwiki.eu/index.php/Programming:Random_Number_Generator Título: Re:Generador Random de números de 8bits Publicado por: Tragamanzanas en 13 de Agosto de 2018, 07:51:59 pm No te puedo ayudar ya que mi nivel no es muy elevado y hace tiempo que no práctico ensamblador :(
Pero creo recordar que yo también necesite programar números aleatorios y encontré varias formas, pero no me acuerdo donde. Lo buscaré haber si hay suerte. Título: Re:Generador Random de números de 8bits Publicado por: aorante en 15 de Agosto de 2018, 11:16:37 am La rutina anterior no funciona.
En la aplicación que utilizo para testear, funcionaba bien pero le añadí unas lineas que mostraban un texto y ahora entra en un patrón de repetición. Este efecto me pasaba con versiones anteriores y pensaba que lo había solucionado, pero veo que es muy frágil. Lo he probado en los emuladores bluemsx y meisei, y pasa lo mismo aunque el patrón es diferente. Habrá que seguir investigando... ;) Gracias @Tragamanzanas Título: Re:Generador Random de números de 8bits Publicado por: aorante en 21 de Agosto de 2018, 05:27:06 pm Acabo de publicar en GitHub las aplicaciones que he realizado para probar la rutina/función para generar números aleatorios.
Están a vuestra disposición! ;) https://github.com/mvac7/SDCC_test_Z80PRNG En breve intento publicar aquí una memoria de la experiencia por si alguien puede ayudar a corregir cosas que se me hayan pasado por alto o mejorar lo hecho. |