von Frank Leiprecht WICHTIG: DIESER ARTIKEL IST KEIN (!) VERFRÜHTER APRILSCHERZ ! ALLE BEFEHLE WURDEN VON UNS AUSGETESTET UND FUNKTIONIEREN EINWANDFREI ! Zur vollständigen Ausnutzung der Fähigkeiten der ATARI 8-Bitter sind Programmierer auf die Programmier- sprache ASSEMBLER angewiesen. Wenn man solche Programme wie die HOBBYTRONIC- DEMO '91 anschaut, die auf dem 800XL die HIGH-END Produkte sind, möchte man die noch kleine Kluft zur 16-BIT- Technik geschlossen sehen. Ich hoffe, mit folgenden Informationen diese Kluft noch enger zu machen. Neben den bis jetzt bekannten 65xx-Be- fehlen existieren in Wirklichkeit noch 8 weitere Befehle, die mit ver- schiedenen Adressierungsarten von der CPU verarbeitet werden. Im Einzelnen handelt es sich dabei um folgende Befehle: AAX - AND AKKUMULATOR AND X-REGISTER DCP - DECREMENT AND COMPARE WITH ACCUMULAOTR ISC - INCREMENT AND SUBTRACT WITH CARRY LAX - LOAD ACCUMULATOR AND X-REGISTER RLA - ROTATE LEFT AND AKKUMULATOR RRA - ROTATE RIGHT AND ADD WITH CARRY SLO - SHIFT LEFT OR AKKUMULATOR SRE - SHIFT RIGHT EXCLUSIVE OR AKKUMULATOR Klingt doch schon mal ganz gut, oder ? Nun jedoch zu den Funktionen der einzelnen Befehle: AAX - AND AKKUMULATOR AND X-REGISTER Das Ergebnis einer logischen AND-Verknüpfung zwischen dem Akku und dem X-Register wird in der angegebenen Speicherstelle gespeichert. Adr.: ZP ($87) ZP,Y ($97) ABS ($8F) (IND,X) ($83) Flags: Zero wenn Ergenis gleich Null. Negativ wenn Bit 7 des Ergeb- nisses gesetzt. DCP - DECREMENT AND COMPARE WITH AKKUMULATOR Vermindert den Wert der angegebenen Speicherstelle um 1 und vergleicht das Ergebnis mit dem Akku. Adr.: ZP ($C7) ZP,X ($D7) ABS ($CF) ABS,X ($DF) ABS,Y ($DB) (IND,X) ($C3) (IND),Y ($D3) Flags: Zero, wenn Ergebnis gleich Akku. Negativ wenn Ergebnis kleiner Akku. Carry wenn Ergebnis größer Akku. ISC - INCREMENT AND SUBTRACT WITH CARRY Erhöht den Wert der angegebenen Speicherstelle um eins und zieht das Ergebnis vom Akku ab. Adr.: ZP ($E7) ZP,X ($F7) ABS ($EF) ABS,X ($FF) ABS,Y ($FB) (INDmX) ($E3) (IND),Y ($F3) Flags: Zero wenn Inhalt Akku gleich 0. Negativ wenn Bit 7 des Akku gesetzt ist. Overflow wenn Ergebnis größer +127 oder -127, Carry wird gelöscht. LAX - LOAD AKKUMULATOR AND X-REGISTER Lädt den Wert der angegebenen Speicherstelle in Akku und X-Register Adr.: ZP ($A7) ZP,Y ($B7) ABS ($AF) ABS,Y ($BF) (IND,X) ($A3) (IND),Y ($B3) Flags: Zero wenn Inhalt Akku gleich 0 Negativ wenn Bit 7 des Akku gesetzt ist. RLA - ROTATE LEFT AND AKKUMULATOR Rotiert den Wert der angegebenen Speicherstelle ein Bit nach links (Bit 7 in Carry, altes Carry wird Bit 0) und vollzieht mit dem ergebnis und dem Akku eine AND-Verknüpfung. Ergebnis dieser Verknüpfung steht im Akku. Adr.: ZP ($27) ZP,X ($37) ABS ($2F) ABS,X ($3F) ABS,Y ($3B) (IND,X) ($23) (IND),Y ($33) Flags: Zero wenn Ergebnis gleich Akku. Negativ wenn Ergebnis kleiner Akku. Carry wenn Ergebnis größer Akku. RRA - ROTATE RIGHT AND ADD WITH CARRY Rotiert den Wert der angegebenen Speicherstelle ein Bit nach rechts und addiert das Ergebnis zum Akku. Adr.: ZP ($67) ZP,X ($77) ABS ($6F) ABS,X ($7F) ABS,Y ($7B) (IND,X) ($63) (IND),Y ($73) Flags: Zero wenn Ergebnis gleich Null. Negativ wenn Bit 7 des Akku gesetzt ist. Overflow wenn Ergebnis größer 255, Carry wird gesetzt, ge- löscht. SLO - SHIFT LEFT OR AKKUMULATOR Schiebt den Wert der angegebenen Speicherstelle ein Bit nach links (Bit 7 ins Carry, Carry wird NICHT Bit 0) und verknüpft Ergebnis und AKKU logisch ODER. Ergebnis steht im Akku. Adr.: ZP ($07) ZP,X ($17) ABS ($0F) ABS,X ($1F) ABS,Y ($1B) (IND,X) ($13) (IND),Y ($03) Flags: Zero wenn Akku gleich Null. Negativ wenn Bit 7 gesetzt ist. Carry s.o. SRE - SHIFT RIGHT EXCLUSIVE-OR AKKUMULATOR Schiebt den Wert der angegebenen Speicherstelle ein Bit nach rechts und verknüpft das Ergebnis EXCLUSIV-OR mit dem Akku. Ergebnis steht im Akku. Adr.: ZP ($47) ZP,X ($57) ABS ($4F) ABS,X ($5F) ABS,Y ($5B) (IND,X) ($43) (IND),Y ($53) Flags: Zero wenn Akku gleich Null Negativ wenn Bit 7 gesetzt ist. Carry s.o. O.K., damit wären die 8 Befehle erklärt. Für folgende Codes müßte man noch ihre Funktion feststellen (wenn es eine gibt): 1A-3A-5A-7A-FA-04-14-34-44-54-64-74-D4- F4-82-C2-E2-0C-1C-3C-5C-7C-DC-FC Echte Computerkiller sind hingegen die Codes: 02-12-22-32-42-52-62-72-92-B2-D2-F2 Trifft der Computer auf solche Codes, hilft nur noch RESET. Mit diesen Werkzeugen kann man sicher das eine oder andere Programm kürzer und damit schneller machen. Wer will, kann noch für die neuen Befehle die benötigten Taktzyklen ausrechnen. Vielleicht ergeben sich mit diesen Befehlen auch neue Möglichkeiten im Bereich der Grafikprogrammierung. Zum Schluß noch das Quellenverzeichnis: RUN 02/85 S72ff Grüße an A-Cat, HaPe, Lord Helmchen, Slayer of U.N.O. und Jan