diff options
Diffstat (limited to 'tests/t_fl90/t_fl90.asm')
| -rw-r--r-- | tests/t_fl90/t_fl90.asm | 179 | 
1 files changed, 179 insertions, 0 deletions
diff --git a/tests/t_fl90/t_fl90.asm b/tests/t_fl90/t_fl90.asm new file mode 100644 index 0000000..3e53195 --- /dev/null +++ b/tests/t_fl90/t_fl90.asm @@ -0,0 +1,179 @@ +; FTEST.ASM +;****************************************************************************** +;* Testet Gleitkommabibliothek für TLCS90                                     * +;*                                                                            * +;* Hardware: TDB-TMP90                                                        * +;* Software: AS 1.39p5 oder höher                                             * +;*           Includes MACROS.INC, FLOAT.INC, CPU_TIME.INC                     * +;*                                                                            * +;* Übersetzen mit AS ftest oder beiliegendem Makefile                         * +;*                                                                            * +;****************************************************************************** + +                cpu     90c141 + +                org     8500h           ; Startadresse User-RAM + +;------------------------------------------------------------------------------ + +CR              equ     13 +LF              equ     10 +Format_Tab      equ     0000100000000110b ; fftoa-Format für tab. Ausgabe +Format_Min      equ     0010001100000101b ; fftoa-Format für minimale Länge +;                         ^<+>^^<--+---> +;                         | | ||   | +;                         | | ||   +------ Maximalzahl Nachkommastellen +;                         | | |+---------- Mantissenpluszeichen unterdrücken +;                         | | +----------- Exponentenpluszeichen unterdrücken +;                         | +------------- Minimalstellenzahl Exponent +;                         +--------------- anhängende Nullen in Mantisse löschen +Format          equ     Format_Tab      ; gewähltes fftoa-Format + +;------------------------------------------------------------------------------ +; Vorgaben + +                include stddef90.inc    ; Registeradressen +                include macros.inc      ; für Unterroutinen benötigte Makros +                include mon.inc         ; Einsprungadressen TDBTMP90-Monitor + +                section MainProg + +;------------------------------------------------------------------------------ +; Makros zur Schreiberleichterung + +pushop          macro   adr,{NoExpand}  ; einen Operanden auf den Stack legen +                ld      hl,(adr+2) +                push    hl +                ld      hl,(adr) +                push    hl +                endm + +storeop         macro   {NoExpand}      ; Ergebnis in Array ablegen +                ld      (iy),de +                ld      (iy+2),bc +                add     iy,4 +                endm + +OneOp           macro   Msg,Operation,Op1,Op2,{Expand}  ; Aufruf, Ausgabe und +                call    PSTR                              ; Zeitmessung +                db      Msg,0 +                call    StartTimer +                if      "OP1"<>"" +                 pushop Op1 +                endif +                if      "OP2"<>"" +                 pushop Op2 +                endif +                call    Operation +                storeop +                call    StopTimer +                if      (("OPERATION"<>"FNOP") && ("OPERATION"<>"FFTOI")) +                 call    PSTR +                 db      ", Ergebnis ",0 +                 push    bc +                 push    de +                 ld      hl,Format +                 push    hl +                 ld      hl,CharBuffer +                 push    hl +                 call    fftoa +                 call    TXTAUS +                endif +                call    PSTR +                db      CR,LF,0 +                endm + +;------------------------------------------------------------------------------ +; Hauptroutine + +                proc    Main + +                ld      sp,Stack        ; Stack reservieren +                ld      iy,Erg          ; Zeiger auf Ergebnisfeld +                call    InitTimer       ; Zeitmessung vorinitialisieren + +                OneOp   "Ladeoverhead         : ",fnop,Eins,Eins +                OneOp   "Addition 2+Pi        : ",fadd,Zwei,Pi +                OneOp   "Addition 100000+2    : ",fadd,Thou,Zwei +                OneOp   "Addition 0+1         : ",fadd,Null,Eins +                OneOp   "Subtraktion Pi-2     : ",fsub,Pi,Zwei +                OneOp   "Subtraktion 100000-1 : ",fsub,Thou,Eins +                OneOp   "Multiplikation 2*Pi  : ",fmul,Zwei,Pi +                OneOp   "Division 1/Pi        : ",fdiv,Eins,Pi +                OneOp   "Wurzel aus 2         : ",fsqrt,Zwei, +                OneOp   "Wurzel aus 10000     : ",fsqrt,Thou, +                OneOp   "Wurzel aus -1        : ",fsqrt,MinEins, +                OneOp   "Wandlung 1-->Float   : ",fitof,IntEins, +                OneOp   "Wandlung 1E5-->Float : ",fitof,IntThou, +                OneOp   "Wandlung 1-->Int     : ",fftoi,Eins, +                OneOp   "Wandlung 1E5-->Int   : ",fftoi,Thou, +                ld      a,10 +                OneOp   "Pi*2^10              : ",fmul2,Pi, +                ld      a,-10 +                OneOp   "Pi*2^(-10)           : ",fmul2,Pi, + +                call    PSTR +                db      "Eingabe: ",0 +                ld      hl,InpBuffer +                call    TXTAUS +                ld      hl,InpBuffer +                push    hl +                call    fatof +                storeop +                call    PSTR +                db      ", Ergebnis: ",0 +                push    bc +                push    de +                ld      hl,Format +                push    hl +                ld      hl,CharBuffer +                push    hl +                call    fftoa +                call    TXTAUS +                call    PSTR +                db      13,10,0 + +                jp      MRET + +                endp + +                proc    fnop            ; Dummyroutine fr Overheadmessung + +                link    ix,0 +                unlk    ix + +                retd    8 + +                endp + +CharBuffer:     db      30 dup (?)      ; Puffer fr fftoa +InpBuffer:      db      "-123.456E-7",0 ; Puffer fr fatof + +                align   4 +Eins:           dd      1.0             ; ben”tigte Konstanten +MinEins:        dd      -1.0 +Zwei:           dd      2.0 +Pi:             dd      40490fdbh	; um Vergleichsfehler durch Rundung zu +                                        ; vermeiden +Zehn:           dd      10.0 +Null:           dd      0.0 +Thou:           dd      100000.0 +IntEins:        dd      1 +IntThou:        dd      100000 +Erg:            dd      40 dup (?)      ; Ergebnisfeld + +                align   2               ; Platz fr Stack +                db      300 dup (?) +Stack: +                endsection + +;------------------------------------------------------------------------------ +; ben”tigte Module + +                include cpu_time.inc     ; Zeitmessung +                include float.inc        ; Gleitkommabibliothek + +;------------------------------------------------------------------------------ + +                end     Main +  | 
