Floating Point Routines#



00010          .LI OFF
00020 ------------------------------
00030 *                            *
00040 * FLOTINGPOINT  BERECHNUNGEN *
00050 *                            *
00060 ------------------------------
00070 *
00080 *
00090 *
00100 *
00110 LBUFF    .EQ $580    WIRD VOM ROM FESTGELEGT
00120 *
00130 INBUFF   .EQ $F3     POINTER AUF LBUFF
00140 CIX      .EQ $F2     INDEXREGISTER. NORMAL =0
00150 FR0      .EQ $D4
00160 FR1      .EQ $E0
00170 FPPNTR   .EQ $FC     POINTER AUF FP ZAHL
00180 *
00190 ------------------------------
00200 AFP      .EQ $D800   ASCII=>FLOATING POINT (FP)
00210 FASC     .EQ $D8E6   FP=>ASCII IN LBUFF
00220 IFP      .EQ $D9AA   INTEGER FR0 ($D4)=> FP
00230 FPI      .EQ $D9D2   FP=>INTEGER IN FR0 ($D4)
00240 FSUB     .EQ $DA60   FR0<= FR0-FR1
00250 FADD     .EQ $DA66   FR0<= FR0+FR1
00260 FMUL     .EQ $DADB   FR0<= FR0*FR1
00270 FDIV     .EQ $DB28   FR0<= FR0/FR1
00280 ------------------------------
00290 FLD0R    .EQ $DD89   LADE FR0 MIT ZAHL
00300 * AUF DIE DIE REGISTER <X> UND <Y>
00310 * ZEIGEN. <X>=MSB, <Y>=LSB
00320 FLD0P    .EQ $DD8D   LADE FR0 MIT ZAHL
00330 * AUF DIE DER POINTER FPPNTR
00340 * ZEIGT.
00350 FLD1R    .EQ $DD98   WIE FLD0R DOCH MIT FR1
00360 FLD1P    .EQ $DD9C   WIE FLD0P DICH MIT FR1
00370 FSTOR    .EQ $DDA7   WIE FLD0R NUR IN ANDERER
00380 * RICHTUNG (SPEICHERN)
00390 FSTOP    .EQ $DDAB   WIE FSTOR NUR DURCH
00400 * FPPNTR ADRESSIERT.
00410 FMOVE    .EQ $DDB6   FR0=>FR1
00420 *
00430 ------------------------------
00440 INITFP   LDA #0        FP-ROUTINEN
00450          STA CIX       INITIALISIEREN
00460          LDA #LBUFF
00470          STA INBUFF
00480          LDA /LBUFF
00490          STA INBUFF+1
00500          RTS
00510 ------------------------------
00520 *
00530 ------------------------------
00540 PRINTFR0 JSR INITFP     INITIALISIERUNG
00550          JSR FASC       FP=>ASCII WANDELN
00560          LDY #0
00570 .1       STY WERT       ZEICHEN AUS
00580          LDA (INBUFF),Y PUFFER HOLEN
00590          BMI ENDE       INVERS? JA: LETZTES ZEICHEN
00600          JSR PUTCHAR    AUSGEBEN
00610          LDY WERT       NAECHSTES ZEICHEN
00620          INY
00630          BNE .1         HIER EIN JUMP
00640 ENDE     AND #$7F       INVERSES ZEICHEN ALS
00650          JMP PUTCHAR    NORMALZEICHEN AUSGEBEN
00660 *
00670 WERT     .HX 00         ZWISCHENSPEICHER
00680 *
00690 ------------------------------
00700 *
00710 ------------------------------
00720 PUTCHAR  TAX            VECTOR
00730          LDA $E407      JUMP
00740          PHA            UEBER
00750          LDA $E406      ROM
00760          PHA
00770          TXA
00780          RTS            JMP
00790 *
00800 ------------------------------
00810 CLRFR0   LDY #5       FR0
00820          LDA #0       LOESCHEN
00830 .1       STA FR0,Y
00840          DEY
00850          BPL .1
00860          RTS
00870 ------------------------------
00880 CLRFR1   LDY #5       FR1
00890          LDA #0       LOESCHEN
00900 .1       STA FR1,Y
00910          DEY
00920          BPL .1
00930          RTS
00940 ------------------------------