CODINGLISTINGS ★ Tauschen ★

Tauschen (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 ★ 

Wer schon mal mit Sortierprogrammen gearbeitet hat, kennt das lästige Problem mit der Garbage Collection bei den CPCs. Die CPCs legen die Stringvariablen in den freien Bereich zwischen Programmende und HIMEM von oben nach unten ab. Beim Vertauschen von Strings wie h il f$=name$(i): name$(i)=name$( i): name$(i)=hil f$ ' werden drei neue Variablen angelegt. Hat man viele Variablen zu sortieren und/oder ist das Programm sehr groß, ist der freie Speicher bald nicht mehr frei, und der CPC beginnt mit der Garbage Collection. Das heißt, er sucht die nicht mehr benötigten Srings, löscht diese und schiebt die anderen nach 'oben'. Das kostet besonders beim CPC 464 viel Zeit.

Es gibt aber eine andere Möglichkeit. Die CPCs arbeiten mit Pointern, also Zeigern, die auf die Stelle im Speicher 'zeigen', wo die jeweilige Variable abgelegt ist. Zum Vertauschen von zwei Strings müssen also nur diese Pointer vertauscht werden, die Variablen selbst bleiben an ihrem Platz. Wo findet man diese Pointer?

Mit 'PRINT@name$(i)' (@ steht für den Klammeraffen) bekommt man die Adresse der ersten Variablen. Hier steht die Länge des Strings, die auch vertauscht werden muß. In a +1 und a+2 steht dann die eigentliche Adresse (in der Form Low-Byte, High-Byte), an der dann die Variable zu finden ist.

Es sind also drei Pointer zu vertauschen. In BASIC würde das auch zu langsam gehen, also benötigt man ein kleines Maschinenprogramm. Es kann überall abgelegt werden, da es nicht mit festen Adressen arbeitet.

Aufruf:

CALL adresse,@name$(i),@name$(j). @ = Klammeraffe!.

Hier noch der Maschinencode:

100 ORG ???? -.Startadresse beliebig
110 FE 02 CP 2 ;2 Variable übergeben?
120 C0 RET NZ ;nein, Ende
130 DD 66 03 LD H,(IX+3) ;Adresse
140 DD6E02 LD L,(IX+2) ;1.Variable
150 06 03 LD B,3 ;3 in Schleifenzähler
160
170 4E tausch LD C,(HL) ;Wcrt l.Adr in C
180 1A LD A,(DE) ;Wert 2. Adr in A
190 77 LD (HL),A ;Wert 2. Adr. in l.Adr
200 79 LD A,C ;Wert 1.Adr in A
210 12 LD (DE),A ;und in 2. Adresse
220 23 INC HL ;Adr um
230 13 INC DE ; eins erhöhen
240 10 F7 DNJZ tausch ;Schleifenzähler=0?
250 C9 RET ;ja=Ende

Klaus Bauer/cd, CPCAI

★ PUBLISHER: CPC Amstrad International
★ YEAR: 1989
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC AMSTRAD INTERNATIONAL 1989
★ AUTHOR: Klaus Bauer
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Tauschen    (CPC  Amstrad  International)    GERMANDATE: 2020-07-04
DL: 159
TYPE: ZIP
SiZE: 4Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Coding Src's » Spinning Diamond
» Coding Src's » Ziehharmonika Effekt
» Coding Src's » Patterns
» Coding Src's » Dessinez vos sons
» Coding Src's » 3D Cube
» Coding Src's » Musithèque (Amstrad Magazine 13)
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/c
Page créée en 493 millisecondes et consultée 825 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.