Alle Rechenoperationen werden mit reelen Zahlen durchgefuehrt, die in zwei Pseudo-Registern stehen. Es sind dies die Floating-Point-Akkumulatoren FAC1 und FAC2. Die verwendeten ROM-Routinen und Speicherplaetze sind : Name 2001 3001 8001 Beschreibung ------------------------------------------------------------------ ABS $DB2A $DB64 $CD8E FAC1=ABS(FAC1) ADD $D73F $D776 $C9A0 FAC1=FAC2+FAC1 ATN $E048 $E08C $D32C FAC1=ATN(FAC1) COS $DF9E $DFD8 $D282 FAC1=COS(FAC1) DIV $D9E4 $DA1E $CC48 FAC1=FAC2/FAC1 EXP $DEA0 $DEDA $D184 FAC1=EXP(FAC1) FAC12 $DAE1 $DB1B $CD45 FAC1 in FAC2 FAC12R $DADE $DB18 $CD42 FAC1 in FAC2 mit Rundung FAC1MEM $DAA9 $DAE3 $CD0D FAC1 in Memory ohne Rundung FAC1MEMR $DAA6 $DAE0 $CD0A FAC1 in Memory mit Rundung FAC21 $DACE $DB08 $CD32 FAC2 in FAC1 FRE $D26E $D263 $C4B2 FAC1=FRE(x) ohne garb. coll. FREGC $D264 $D259 $CA48 FAC1=FRE(x) mit garb. coll. INT $DB9E $DBD8 $CE02 FAC1=INT(FAC1) LOG $D8BF $D8F6 $CB20 FAC1=LOG(FAC1) MEMADD $D73C $D773 $C99D wie MEMFAC2 und ADD MEMDIV $D9E1 $DA1B $CC45 wie MEMFAC2 und DIV MEMFAC1 $DA74 $DAAE $CCD8 Memory in FAC1 MEMFAC2 $D95E $D998 $CBC2 Memory in FAC2 MEMPWR $DE2E $DE65 $D10F wie MEMFAC1 und POWER MEMSUB $D725 $D733 $C986 wie MEMFAC2 und SUB MEMULT $D8FD $D934 $CB5E wie MEMFAC2 und MULT MINUS $DE67 $DEA1 $D14B FAC1=FAC1 MULT $D900 $D937 $CB61 FAC1=FAC2*FAC1 NORMFAC1 $D7AC $D7E3 $C0AD normalisiert FAC1 POWER $DE2E $DE68 $D112 FAC1=FAC2^FAC1 RFAC1 $DAED $DB27 $CD51 Rundung von FAC1 RND $DF45 $DF7F $D229 FAC1=RND(FAC1) SGN $DB0B $DB45 $CD6F FAC1=SGN(FAC1) SGNFAC1 $DAFD $DB37 $CD61 Vorzeichen aus FAC1 in A-Reg. SIN $DFA5 $DFDF $D289 FAC1=SIN(FAC1) SQR $DE24 $DE5E $D108 FAC1=SQR(FAC1) SUB $D728 $D736 $C989 FAC1=FAC2-FAC1 TAN $DFEE $E028 $D2D2 FAC1=TAN(FAC1) FAC1 $B0-B5 $5E-63 $5E-63 Floating Akkumulator #1 FAC2 $B8-BD $66-6B $66-6B Floating Akkumulator #2
Einige haeufig gebrauchte reelle Zahlen (von BASIC bei Funktionsberechnungen verwendet) sind im Festwertspeicher vorhanden. Sie sind alle im Speicherformat abgelegt (s. Kap. 1.6) und koennen mit Hilfe der Routinen MEMFAC1 oder MEMFAC2 in den Floating Akku #1 oder #2 geladen werden. 2001 3001 8001 Beschreibung ------------------------------------------------------------------ $CDBC $CDA3 $BEA0 pi = 3.14159265 $D891 $D8C8 $CAF2 1 $D897 $D8CE $CAF8 log(e) = 0.434294482 (Basis 10) $D8AB $D8E2 $CB0C 1/SQR(2) = 0.707106781 $D8B0 $D8E7 $CB11 SQR(2) = 1.41421356 $D8B5 $D8EC $CB16 -0.5 $D8BA $D8F1 $CB1B ln(2) = 0.693147181 (Basis e) $D9CB $DA05 $CC2F 10 $DDE3 $DE1D $D0C7 0.5 $E01A $E054 $D2FE pi/2 = 1.57079633 $E01F $E059 $D303 2*pi = 6.28318531 $E024 $E05E $D308 0.25
Eine im Speicher stehende reelle Zahl wird in den FAC uebertragen. Die Adresse der reellen Zahl wird im A-Register (low Byte) und Y-Register (high Byte) uebergeben : Speicher in FAC1 : JSR MEMFAC1 Speicher in FAC2 : JSR MEMFAC2
Eine im FAC1 stehende reelle Zahl wird in den Speicher uebertragen. Die Zieladresse duer die reelle Zahl wird im X-Register (low-Byte) und Y-Register (high Byte) uebergeben: mit Rundung : JSR FAC1MEMR ohne Rundung : JSR FAC1MEM
Kopieren des Inhaltes von Floating Akku #2 in Floating Akku #1 mit: JSR FAC21
Kopieren des Inhaltes von Floating Akku #1 in Floating Akku #2 mit: mit Rundung : JSR FAC12R ohne Rundung: JSR FAC12
Runden des Inhaltes von Floating Akku #1 wird erreicht mit: JSR RFAC1
Der Floating-Akkumulator #1. wird mit der folgenden Routine normalisiert: JSR NORMFAC1
Das Vorzeichen des FAC1 wird als Ergebnis im A-Register uebergeben: JSR SGNFAC1
Dies sind: Addition, Subtraktion, Multiplikation, Division und Exponentiation. Vor Aufruf der Routinen muessen die beteiligten Werte in FAC1 und FAC2 geladen werden. Dabei muss FAC2 unmittelbar vor dem Funktionsaufruf folgendermassen gesetzt werden: LDA #low ;LOW BYTE DER ADRESSE LDY #high ;HIGH BYTE DER ADRESSE JSR MEMFAC2 ;ZAHL AUS SPEICHER IN FfYC2 UEBERTRAGEN JSR ...GEWUENSCHTE FUNKT ION AUSFUEHREN Die Uebertragung einer reellen Zahl aus dem Speicher in den FAC2 (bei POWER in den FACi) und die Ausfuehrung der gewuenschten Operation koennen mit den folgenden Routinen mit einem JSR-Aufruf erledigt werden: LDA #low ;LOW BYTE DER ADRESSE LDY #high ;HIGH BYTE DER ADRESSE JSR ...;ZAHL IN SPEICHER UEBERTRAGEN UND OPERATION AUSFUEHREN Es folgen Startadressen der moeglichen Funktionen: FAC1 = MEM + FAC1 : JSR MEMADD ;ADDITION FAC1 = MEM - FAC1 : JSR MEMSUB ;SUBTRAKTION FAC1 = MEM * FAC1 : JSR MEMULT ;MULTIPLIKATION FAC1 = MEM / FAC1 : JSR MEMDIV ;DIVISION FAC1 = FAC2 ^ MEM : JSR MEMPWR ;EXPONENTIATION Ist dies aus irgendwelchen Gruenden nicht moeglich oder sinnvoll, so sind unmittelbar vor dem Funktionsaufruf folgende Befehle auszufuehren: LDA FACi+5 ;VORZEICHENVERGLEICH EOR FAC2+5 ;VON FAC1 UND FAC2 STA FAC2+6 LDA FAC1 ;EXPONENT FAC1 JSR ... ;GEWUENSCHTE FUNKTION AUSFUEHREN Es folgen die Startadressen der moeglichen Funktionen: FAC1 = FAC2 + FAC1 : JSR ADD ;ADDITION FAC1 = FAC2 - FAC1 : JSR SUB ;SUBTRAKTION FAC1 = FAC2 * FAC1 : JSR MULT ;MULTIPLIKATION FAC1 = FAC2 / FAC1 : JSR DIV ;DIVISION FAC1 = FAC2 ^ FAC1 : JSR POWER ;EXPONENTIATION
Dies sind : ABS, ATN, COS, EXP, FRE, INT, LOG, POS, RND, SIN, SGN, SQR, TAN und MINUS. Das Argument wird in FAC1 bereitgestellt, das Ergebnis steht nach der Rueckkehr ebenfalls in FAC1. ABS : JSR ABS ; Absolutwert ATN : JSR ATN ; ARCUS-Tangens COS : JSR COS ; Cosinus EXP : JSR EXP ; Exponentialfunktion FRE : JSR FRE ; Freier Speicherplatz FREGC : JSR FREGC ; Mit Garbage Collection INT : JSR INT ; Ganzzahligen Teil abtrennen LOG : JSR LOG ; Natuerlicher Log. (Basis E) MINUS : JSR MINUS ; Vorzeichenwechsel POS : JSR POS ; Cursorposition RND : JSR RND ; Zufallszahl SIN : JSR SIN ; Sinus SGN : JSR SGN ; Vorzeichen SQR : JSR SQR ; Quadratwurzel TAN : JSR TAN ; Tangens
Letzte Änderung: 2019-01-04 10:06:12