Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. ; FTEST.ASM
  2. ;******************************************************************************
  3. ;* Testet Gleitkommabibliothek fuer TLCS900                                   *
  4. ;*                                                                            *
  5. ;* Hardware: Micro-ICE TLCS900                                                *
  6. ;* Software: AS 1.39p1 oder hoeher                                            *
  7. ;*           Includes MACROS.INC, FLOAT.INC, CONOUT.INC, CPU_TIME.INC         *
  8. ;*                                                                            *
  9. ;* Uebersetzen mit AS ftest oder beiliegendem Makefile                        *
  10. ;*                                                                            *
  11. ;******************************************************************************
  12.  
  13.                 cpu     96c141
  14.  
  15.                 org     1000h           ; Startadresse User-RAM
  16.  
  17. ;------------------------------------------------------------------------------
  18.  
  19. CR              equ     13
  20. LF              equ     10
  21. Format_Tab      equ     0000100000000110b ; fftoa-Format fuer tab. Ausgabe
  22. Format_Min      equ     0010001100000101b ; fftoa-Format fuer minimale Laenge
  23. ;                         |<->||<------>
  24. ;                         | | ||   |
  25. ;                         | | ||   +------ Maximalzahl Nachkommastellen
  26. ;                         | | |+---------- Mantissenpluszeichen unterdruecken
  27. ;                         | | +----------- Exponentenpluszeichen unterdruecken
  28. ;                         | +------------- Minimalstellenzahl Exponent
  29. ;                         +--------------- anhaengende Nullen Mantisse loeschen
  30. Format          equ     Format_Tab      ; gewaehltes fftoa-Format
  31.  
  32.                 supmode on              ; Vorgaben
  33.                 maxmode on
  34.                 macexp  off
  35.                 page    0               ; keine FFs
  36.                 include macros.inc
  37.  
  38. ;------------------------------------------------------------------------------
  39. ; Hauptroutine, Test
  40.  
  41. ; kleine Schreiberleichterung:
  42.  
  43. bench           macro   op,arg1,arg2,arg3,msg
  44.                 call    PSTR            ; Kennmeldung ausgeben
  45.                 db      msg,StrTerm
  46.                 call    CPU_TIME        ; Uhr starten
  47.                 ld      xwa,arg1        ; Operanden holen
  48.                 if      "ARG2"<>""      ; 2. Operanden evtl. weglassen
  49.                  ld     xhl,arg2
  50.                 endif
  51.                 if      "ARG3"<>""      ; dito 3. Operanden
  52.                  ld     bc,arg3
  53.                 endif
  54.                 call    op              ; Probanden laufen lassen
  55.                 ld      (xiz),xwa       ; Ergebnis weglegen...
  56.                 call    CPU_STOP        ; Uhr anhalten, Zeit ausgeben
  57.                 if ("OP"<>"FNOP")&&("OP"<>"FFTOI")
  58.                  call    PSTR            ; etwas Platz
  59.                  db      ", Ergebnis: ",StrTerm
  60.                  ld      xwa,(xiz+)      ; Wert ausgeben
  61.                  lda     xhl,(Buffer)
  62.                  ld      bc,Format
  63.                  call    fftoa
  64.                  call    TXTAUS
  65.                 endif
  66.                 call    PSTR
  67.                 db      CR,LF,StrTerm
  68.                 endm
  69.  
  70.                 proc    Main
  71.  
  72.                 max                     ; ohne das macht das keinen Spass !
  73.                 lda     xsp,(Stack)     ; etwas brauchen wir schon...
  74.                 lda     xiz,(Ergs)      ; Zeiger auf Ergebnisfeld
  75.                 call    CPU_TI_INI      ; Timer initialisieren
  76.  
  77.                 ; Overhead messen
  78.                 bench   fnop,(FConst1),(FConst1),,"Overhead            : "
  79.  
  80.                 ; Addition zweier fast gleicher Zahlen
  81.                 bench   fadd,(FConst1),(FConst2),,"Laufzeit 1+2        : "
  82.  
  83.                 ; Addition zweier unterschiedl. grosser Zahlen
  84.                 bench   fadd,(FConst1),(FConst100000),,"Laufzeit 1+100000   : "
  85.  
  86.                 ; Subtraktion zweier fast gleicher Zahlen
  87.                 bench   fsub,(FConst1),(FConst2),,"Laufzeit 1-2        : "
  88.  
  89.                 ; Subtraktion zweier unterschiedl. grosser Zahlen
  90.                 bench   fsub,(FConst1),(FConst100000),,"Laufzeit 1-100000   : "
  91.  
  92.                 ; Multiplikation
  93.                 bench   fmul,(FConst2),(FConstPi),,"Laufzeit 2*Pi       : "
  94.  
  95.                 ; Division
  96.                 bench   fdiv,(FConst2),(FConstPi),,"Laufzeit 2/Pi       : "
  97.  
  98.                 ; Multiplikation mit 2er-Potenz
  99.                 bench   fmul2,(FConstPi),,10,"Laufzeit Pi*2^(10)  : "
  100.  
  101.                 ; Division durch 2er-Potenz
  102.                 bench   fmul2,(FConstPi),,-10,"Laufzeit Pi*2^(-10) : "
  103.  
  104.                 ; kleine Zahl nach Float wandeln
  105.                 bench   fitof,1,,,"Laufzeit 1-->Float  : "
  106.  
  107.                 ; groсe Zahl nach Float wandeln
  108.                 bench   fitof,100000,,,"Laufzeit 1E5-->Float: "
  109.  
  110.                 ; kleine Zahl nach Int wandeln
  111.                 bench   fftoi,(FConst1),,,"Laufzeit 1-->Int    : "
  112.  
  113.                 ; groсe Zahl nach Int wandeln
  114.                 bench   fftoi,(FConst100000),,,"Laufzeit 1E5-->Int  : "
  115.  
  116.                 ; Wurzel
  117.                 bench   fsqrt,(FConst2),,,"Laufzeit SQRT(2)    : "
  118.  
  119.                 call    PSTR
  120.                 db      "Eingabe: ",StrTerm
  121.                 lda     xhl,(InpBuffer)
  122.                 call    TXTAUS
  123.                 call    fatof
  124.                 call    PSTR
  125.                 db      ", Ergebnis: ",StrTerm
  126.                 lda     xhl,(Buffer)
  127.                 ld      bc,Format
  128.                 call    fftoa
  129.                 call    TXTAUS
  130.                 call    PSTR
  131.                 db      13,10,StrTerm
  132.  
  133.                 swi     7               ; zum Monitor zurueck
  134.  
  135.                 endp
  136.  
  137. fnop:           ld      xwa,0           ; Dummy
  138.                 ret
  139.  
  140.                 include "float.inc"
  141.                 include "conout.inc"
  142.                 include "cpu_time.inc"
  143.  
  144. ;------------------------------------------------------------------------------
  145. ; Gleitkommakonstanten
  146.  
  147.                 align   4               ; fuer schnelleren Zugriff
  148.  
  149. FConst1         dd      1.0
  150. FConst2         dd      2.0
  151. FConst100000    dd      100000.0
  152. FConstM1        dd      -1.0
  153. FConstM2        dd      -2.0
  154. FConstPi        dd      40490fdbh       ; um Vergleichsfehler durch Rundung zu
  155.                                         ; vermeiden
  156. Ergs            dd      30 dup (?)      ; Platz fuer Ergebnisse
  157.  
  158. Buffer:         db      20 dup (?)
  159. InpBuffer:      db      "12.3456E-12",0
  160.  
  161. ;------------------------------------------------------------------------------
  162. ; Stack
  163.  
  164.                 db      200 dup (?)
  165. Stack:
  166.  
  167.