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=EndeKlaus Bauer/cd, CPCAI ★ AMSTRAD CPC ★ DOWNLOAD ★ |
|
CPCrulez[Content Management System] v8.7-desktop/c Page créée en 124 millisecondes et consultée 864 foisL'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. |
|
|