!!!Floating Point ROM Library General Information Author: Optimized System Software OSS \\ Assembler: Mac65 \\ {{{ ;FPT8.M65 ; ptr1 = $8C fr0 = $D4 ; float reg 0 fr1 = $E0 ; float reg 1 flptr = $FC ; pointer to a fp num cix =$F2 ;index inbuff = $F3 ; pointer to ascii num intlbf =$DA51 lbuf = $580; afp = $D800 ;ascii -> float ifp = $D9AA ; int in fr0 -> float in fr0 fpi = $D9D2 ; float in fr0 -> int in fr0 fasc = $D8E6 ; fr0 -> (inbuff) fadd = $DA66 ; fr0 + fr1 -> fr0 fsub = $DA60 ; fr0 - fr1 -> fr0 fmul = $DADB ; fr0 * fr1 -> fr0 fdiv = $DB28 ; fr0 / fr1 -> fr0 ; .globl _atofp ;atofp(ascii,float) _atofp: ; jsr popax sta flptr stx flptr+1 jsr popax sta inbuff stx inbuff+1 jsr addeol lda #0 sta cix jsr afp jsr store rts ;------------------------------------ .globl _itofp ; itofp(int,float) _itofp: ; jsr popax sta flptr stx flptr+1 jsr popax sta fr0 stx fr0+1 jsr ifp jsr store rts ;------------------------------------ .globl _fptoi ; int=fptoi(float) _fptoi: ; jsr popax jsr loadfr0 jsr fpi lda fr0 ldx fr0+1 jsr pushax rts ;------------------------------------ .globl _fptoa ; fptoa(ascii,float) _fptoa: jsr popax jsr loadfr0 jsr popax sta ptr1 stx ptr1+1 lda #0 sta cix jsr intlbf jsr fasc ldy #$FF ldx #$FF loop2: inx lda lbuf,x cmp #$30 beq loop2 dex loop: iny inx lda lbuf,x sta (ptr1),y bpl loop and #$7F sta (ptr1),y iny lda #0 sta (ptr1),y rts ;------------------------------------ .globl _fpadd ; fpadd(fp a,fp b,fp c) ; a+b=c _fpadd: jsr getready jsr fadd jsr store rts ;------------------------------------ .globl _fpsub ; fpsub(fp a,fp b,fp c) ; a-b=c _fpsub: jsr getready jsr fsub jsr store rts ;------------------------------------ .globl _fpmul ; fpmul(fp a,fp b,fp c) ; a*b=c _fpmul: jsr getready jsr fmul jsr store rts ;------------------------------------ .globl _fpdiv ; fpdiv(fp a,fp b,fp c) ; a/b=c _fpdiv: jsr getready jsr fdiv jsr store rts ;------------------------------------ getready: jsr popax sta flptr stx flptr+1 jsr popax jsr loadfr1 jsr popax jsr loadfr0 rts ;------------------------------------ store: ; ldx #$05 ldy #$05 l1: lda fr0,x sta (flptr),y dex dey bpl l1 rts ;------------------------------------ loadfr0: sta ptr1 stx ptr1+1 ldx #$05 ldy #$05 l2: lda (ptr1),y sta fr0,x dex dey bpl l2 rts ;------------------------------------ loadfr1: sta ptr1 stx ptr1+1 ldx #$05 ldy #$05 l3: lda (ptr1),y sta fr1,x dex dey bpl l3 rts ;------------------------------------ addeol ldy #$FF l4: iny lda (inbuff),y bpl l4 lda #$9B sta (inbuff),y rts ;------------------------------------ }}}