CODINGLISTINGS ★ Dem Zufall auf der Spur ★

Zufallszahlen in Assembler (CPC Amstrad International)Coding Listings
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Zufallszahlen in Assembler für alle CPCs

Was im Zusammenhang mit Computern als Zufaliszahl bezeichnet wird, müßte korrekterweise in Anführungszeichen stehen oder mit dem Präfix “Pseudo-“ versehen werden, weil diese Zahlen aus streng mathematischer Sicht keine richtigen zufälligen Werte sind. Wie sollten sie auch? Der Computer ist ja ein Rechner und kein Würfel...

Zufallswerte braucht man bei vielerlei Gelegenheiten. Zum Beispiel bei Vokabeltrainem, wo zufällig ein Wort aus der Liste herausgesucht werden soll. Oder bei der zufälligen Bestimmung des Anfangsortes eines Spieles (z.B.: Sorcery). Im Folgenden werden wir drei in Z80 Assembler geschriebene Programme vorstellen, die sich mit dieser Thematik befassen.

1. Die “Holzhacker-Methode“

Mit brachialer Gewalt und ohne viel Überlegung (Rechnung) kommt unser erstes Beispiel aus. Der Schneider unterhält während der Programmabläufe einen Zähler, der jede 1/300 Sekunde um eins erhöht wird. Dieser Zähler, den man mit der BASIC-Funktion TIME abfragen kann, wäre in gewisser Weise schon ein zufälliger Wert. Damit die Sache aber nicht zu durchsichtig wird, nehmen wir von diesem vier Bytes großen Zähler nur die beiden niederwertigsten Bytes, die bei der Abfrage via KL TIME PLEASE (# BDOD) in den Registern H und L sind. Da sich das höherwertige Byte im Register H nicht so schnell verändert, nehmen wir jetzt noch den Pseudo-Zufallswert aus dem Refresh- Register (eine Art interner Zähler des Z80-Prozessors) und verknüpfen (d.h.: “XORie-ren“) diesen mit dem Highbyte: Was dabei herauskommt, sehen Sie im Assembler-Listing 1 (nennen wir dieses Verfahren am besten “Alfred E. Neumann-Algorithmus“).

Sie sehen: Das Ganze ist im Grunde genommen gar keine Zufallszahl. Eine Obergrenze kann nicht angegeben werden. Falls der Computer mit ausgeschalteten Interrupts (im DI-Modus) arbeitet, können Sie das Ganze sowieso vergessen, weil dann die interne Uhr nicht mehr weitergezählt wird und nun immer denselben Wert zurückgibt.

Probieren wir es also mit einem zweiten Versuch:

2. Schon besser:, aber dafür ziemlich lang

Diese Methode basiert auf einem Anfangswert, von dem die folgenden “Zufallszahlen“ abhängig sind. Diese werden durch mehrere Operationen verändert (in unserem Fall durch Multiplikationen und Divisionen). Ein Vorteil dieser Routine ist, daß man eine Obergrenze der zu erzeugenden Zufallszahlen setzen kann.

3. Fast perfekt:, aber kein Zufall

Da die letzte Routine doch noch relativ lang war, versuchen wir jetzt noch, die Multiplikationen und Divisionen durch einfachere Bit-Rotationen zu ersetzen. Was dabei herauskommt, sehen Sie in unserem Listing 3. Zwar kann man hier keine Obergrenze mehr angeben, aber diese könnte ja durch eine MODulo-Funktion künstlich gesetzt werden. Das vorliegende Programm basiert auf Analysen der Fließkomma-Arithmetik im unteren ROM des CPC 464. Dort werden Fließkomma-RNDs auf ähnliche Weise erzeugt. Der Startwert kann dort ja bekanntlich mit RANDOMIZE gesetzt werden.

Der Zufall, der keiner war...

Wie Sie sehen, gibt es keine wirklichen Zufallszahlen auf dem Computer. Zwar kann der Mensch auf den Mond fliegen, neue Philosophien entwickeln und Atomkerne spalten, aber Zufallszahlen erzeugen kann er nicht, denn der Zufall läßt sich nun einmal nicht berechnen. Damit müssen wirleben.

E. Röscheisen/JB, CPCAI

★ PUBLISHER: CPC Amstrad International
★ YEAR: 1988
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LICENCE: LISTING
★ AUTHOR: E.Röscheisen

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» Zufallszahlen  in  Assembler    (CPC  Amstrad  International)    GERMANDATE: 2020-07-09
DL: 17 fois
TYPE: ZIP
SIZE: 4Ko
NOTE: 40 Cyls
.HFE: NON

» Zufallszahlen  in  Assembler    (CPC  Amstrad  International)    LISTING    GERMANDATE: 2020-07-09
DL: 16 fois
TYPE: PDF
SIZE: 208Ko
NOTE: 2 pages/PDFlib v1.6

Je participe au site:
» Newfile(s) upload/Envoye de fichier(s)
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding Src's » Blitter
» Coding Src's » Xor Kaleidoscope (Computing with the Amstrad)
» Coding Src's » Auld lang Syne (Amstrad Computer User)
» Coding Src's » Shaky
» Coding Src's » Virages et loopings
» Coding Src's » Balls in the Air

QUE DIT LA LOI FRANÇAISE:

L'alinéa 8 de l'article L122-5 du Code de la propriété intellectuelle explique que « Lorsque l'œuvre a été divulguée, l'auteur ne peut interdire la reproduction d'une œuvre et sa représentation effectuées à des fins de conservation ou destinées à préserver les conditions de sa consultation à des fins de recherche ou détudes privées par des particuliers, dans les locaux de l'établissement et sur des terminaux dédiés par des bibliothèques accessibles au public, par des musées ou par des services d'archives, sous réserve que ceux-ci ne recherchent aucun avantage économique ou commercial ». Pas de problème donc pour nous!

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 185 millisecondes et consultée 88 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.