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