CODINGLISTINGS ★ FAST-CLEAR ★

Fast - Clear (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 ★ 

Bei FastClear handelt es sich um eine ungemein schnelle Routine, die Bildschirmausschnitte mit einem bestimmten Byte füllt. Solch eine Routine benötigt man zum Beispiel, um den Hintergrund eines Pulldown-Windows zu löschen. Das Assemblerlisting umfaßt drei Routinen, die alle die gleichen Einsprungbedingungen haben und auch gleichartig funktionieren. Sie unterscheiden sich hauptsächlich durch die Länge und durch die Ausführungszeit. Die erste Routine (TC) ist sichtbar 'langsam' (ähnlich dem CLG-Befehl im BASIC), die zweite (FCII) ist schon erheblich schneller, da sie nach dem neuen Prinzip funktioniert. Die dritte und schnellste Routine (FC) arbeitet nach dem Prinzip der zweiten, nur wird hier hauptsächlich mit selbstveränderlichem Code gearbeitet. Sie füllt den Bildschirm innerhalb von zirka 0.022 Sekunden. Wieso ist die Routine so schnell?

Betrachtet man einmal die Z80-Befehle, die ein Byte in den

Speicher schreiben, so ergeben sich folgende Möglichkeiten:

  • LDIR 21 Taktzyklen für ein Byte
  • LDI16 Taktzyklen für ein Byte
  • LD (HL),A 7 + 6 = 13 Taktzyklen für ein Byte INC HL

Das sind die 'normalen' Befehle, wobei natürlich die Befehle LDI und LD (HL),A... noch eine Schleife 'drumherum' benötigen. Deshalb ist die Anzahl der Taktzyklen nicht ganz repräsentativ. Ein Befehl wurde in der Auflistung vergessen. Und genau dieser Befehl sorgt für die enorme Geschwindigkeit: -PUSH DE 11 Taktzyklen für 2(!)Bytes Der PUSH-Befehl ist also mehr als doppelt so schnell wie die herkömmlichen Befehle. Um den PUSH-Befehl anwenden zu können, wurde folgendermaßen vorgegangen:

  • Stapelzeiger Zwischenspeichern
  • Interrupt sperren
  • Stapelzeiger hinter das Ende des gewünschten Adreßbereiches legen, da durch ein PUSH die Daten an- (SP-1) und (SP-2) abgelegt werden.
  • Schleife mit PUSH-Befehl(en) ausführen
  • alten Stapelzeiger zurückholen
  • Interrupt wieder zulassen

Die Routine 'FC' ist hauptsächlich deshalb so schnell, weil die PUSH-Befehle nicht innerhalb einer Schleife ausgeführt werden, sondern 40 Befehle direkt hintereinander liegen. Die korrekte Anzahl wird dann über ein JR angesprungen, wobei der JR-Befehl entsprechend der Anzahl im Speicher geändert wird. Bei solch einer Manipulation muß darauf geachtet werden, daß die Anzahl der auszuführenden PUSHs im umgekehrten Verhältnis zum Sprungbefehl steht, das heißt, bei 40 PUSHs, die ausgeführt werden sollen, heißt der Befehl JR 0, bei 0 PUSHs heißt er JR 40. Daraus ergibt sich die Rechnung '40 minus Anzahl der P.'. Dieser Wert wird dann in den Sprungbefehl eingetragen. Tippen Sie den Datalader ab, und starten Sie das Programm. Es erzeugt die Binärdatei 'FASTCLR.BIN". Mit

MEMORY &A4FF:LOAD "Fastclr.bin",&A500

bringen Sie das Programm in den Speicher. Der Aufruf der Routine erfolgt über

CALL &A500,x1,y1,x2,y2,byte

Der Wertebereich für die x-Variablen liegt zwischen 0 und 79, der für die y-Variablen zwischen 0 und 24. Der Koordinatenursprung ist in der oberen linken Ecke zu finden. Die Variable byte kann Werte zwischen 0 und 255 annehmen, die dann entsprechende Bytemuster in die Bildschirmausschnitte bringt.

JF, CPCAI

★ PUBLISHER: CPC AMSTRAD INTERNATIONAL
★ YEAR: 1990
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC AMSTRAD INTERNATIONAL 1990
★ AUTOR: Andreas Stroiczek

 

★ AMSTRAD CPC ★ DOWNLOAD ★

File:
» Fast-ClearDATE: 2012-12-28
DL: 288
TYPE: ZIP
SiZE: 5Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Coding Src's » Config - Systemidentifikator (CPC Amstrad International)
» Coding Src's » Graphic - Amstrad Character Modes (Popular Computing Weekly)
» Coding Src's » Curve
» Coding Src's » Borde sicodélico
» Coding Src's » 3D Donut (CPC Computing)
» Coding Src's » Country Garden (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/c
Page créée en 432 millisecondes et consultée 1456 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.