Forum

Z PMD 85 Infoserver

:: späť na zoznam tém ::
Správa
Autor  Autor ::  Vldo
Poslaná  Poslaná ::  18.02.2009 09:54:43
Predmet  Predmet ::  Nahodne cislo
Jen takova drobnost: nevite nahodou, jak v assembleru pro PMD vygenerovat nahodne cislo?
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  18.02.2009 20:53:52
Predmet  Predmet ::  Re: Nahodne cislo
Algoritmov na generovanie náhodných čísel existuje celá rada.
Zhodou okolností práve teraz na Speccy konferencii beží debata na tému náhodných čísel.
Ja som tam síce tiež poslal dva algoritmy, ktoré som našiel kedysi dávno v nejakých hrách na Speccy, ale tie sú oproti algoritmu, ktorý tam poslal Busy, relatívne ťažšie "preportovateľné" zo Z80 na i8080.
Z Busyho algoritmu by som ale vypichol iba prvú časť, ktorá by mohla stačiť.
Jedná sa o vzorec X(n+1) = (5*X(n)+7) mod 256

A tu je kód v assembleri:

rnd:  MVI A,55H
      MOV L,A
      ADD A
      ADD A
      ADD L
      ADI 7
      STA rnd+1
      RET

Jedinou vecou, ktorú treba vyriešiť, je inicializácia generátora. To je tá hodnota 55H, ktorá je tam teraz. Táto hodnota by sa mala po spustení programu nejako "náhodne" nastaviť, aby sa potom negenerovala stále tá istá postupnosť čísel. Otázne je, odkiaľ vziať túto inicializačnú hodnotu... Jedná z možností by mohla byť prečítať túto hodnotu z čítača, ktorý generuje hodiny pre USART.
 
Správa
Autor  Autor ::  Vldo
Poslaná  Poslaná ::  19.02.2009 06:28:42
Predmet  Predmet ::  Re: Nahodne cislo
A mohl bys mi prosim poradit, jak hodnotu z citace, co generuje ty hodiny, ziskat? Ktery je to port a jak k nemu pristupovat? Dekuji

PS: Mohl bys mi prosim poslat odkaz na tu konferenci, kde bezi debata o tech nahodnych cislech? Rad bych se na ni mrknul
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  19.02.2009 13:50:16
Predmet  Predmet ::  Re: Nahodne cislo
Čítač PIT8253 je v PMD 85 na adresách 5C (čítač 0), 5D (čítač 1), 5E (čítač 2) a 5F (riadiace slovo).
Hodiny USARTu sú generované čítačom 1. Čítač 1 je krmený hodinami Fi2TTL 2,048MHz.
Získanie aktuálnej hodnoty čítača je jednoduché. Budeme predpokladať, že je čítač nainicializovaný monitorom po resete (týka sa monitorov 2, 2A, 3). Monitor inicializuje čítač 1 v móde 3 (astabilný multivibrátor), hodnotou 20H (64kHz), zadávajú/čítajú sa oba byty 16 bitovej hodnoty.
Táto nízka inicializačná hodnota je trošku nepríjemná (čítač číta dolu a po dosiahnutí 0 sa nastaví na pôvodnú hodnotu 20H), takže nám dáva iba 33 "náhodných" hodnôt pre inicializáciu RND, ale nemusí to byť až také kritické.
Za uvedených predpokladov stačí "on the fly" prečítať stav čítača a hodnotu uložiť ako inicializačnú pre náš RND generátor.

      IN   5DH     ; nižší byte hodnoty čítača
      STA  rnd+1   ; inicializuj generátor RND
      IN   5DH     ; vyšší byte hodnoty čítača

Prečítať je nutné obe hodnoty, pretože čítač 1 je takto nastavený!

Konferencia ZX Spectrum je na adrese Speccy konference (dúfam, že ju bude možné čítať, aj keď nie si členom...).
:: späť na zoznam tém ::