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
★ COLLECTION: CPC AMSTRAD INTERNATIONAL 1988
★ AUTHOR: E.Röscheisen
 

★ AMSTRAD CPC ★ DOWNLOAD ★

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

» Zufallszahlen  in  Assembler    (CPC  Amstrad  International)    LISTING    GERMANDATE: 2021-02-02
DL: 194
TYPE: PDF
SiZE: 189Ko
NOTE: 2 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding Src's » Curtains (Amstrad Computer User)
» Coding Src's » Sternenzeichner (CPC Amstrad International)
» Coding Src's » Scrolling Message
» Coding Src's » Elvis (Amstrad Computer User)
» Coding Src's » Recursive Squares (Amstrad Computer User)
» Coding Src's » 3D Animated Graphics (Computing With the Amstrad)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 777 millisecondes et consultée 714 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.