Subversion Repositories pentevo

Rev

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

  1. ; FTEST.ASM
  2. ;******************************************************************************
  3. ;* Testet Gleitkommabibliothek fuer TLCS90                                    *
  4. ;*                                                                            *
  5. ;* Hardware: TDB-TMP90                                                        *
  6. ;* Software: AS 1.39p5 oder hoeher                                            *
  7. ;*           Includes MACROS.INC, FLOAT.INC, CPU_TIME.INC                     *
  8. ;*                                                                            *
  9. ;* Uebersetzen mit AS ftest oder beiliegendem Makefile                        *
  10. ;*                                                                            *
  11. ;******************************************************************************
  12.  
  13.                 cpu     90c141
  14.  
  15.                 org     8500h           ; 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 Lфnge
  23. ;                         ^<+>^^<--+--->
  24. ;                         | | ||   |
  25. ;                         | | ||   +------ Maximalzahl Nachkommastellen
  26. ;                         | | |+---------- Mantissenpluszeichen unterdruecken
  27. ;                         | | +----------- Exponentenpluszeichen unterdruecken
  28. ;                         | +------------- Minimalstellenzahl Exponent
  29. ;                         +--------------- anhaengende Nullen in Mantisse loeschen
  30. Format          equ     Format_Tab      ; gewaehltes fftoa-Format
  31.  
  32. ;------------------------------------------------------------------------------
  33. ; Vorgaben
  34.  
  35.                 include stddef90.inc    ; Registeradressen
  36.                 include macros.inc      ; fuer Unterroutinen benoetigte Makros
  37.                 include mon.inc         ; Einsprungadressen TDBTMP90-Monitor
  38.  
  39.                 section MainProg
  40.  
  41. ;------------------------------------------------------------------------------
  42. ; Makros zur Schreiberleichterung
  43.  
  44. pushop          macro   adr,{NoExpand}  ; einen Operanden auf den Stack legen
  45.                 ld      hl,(adr+2)
  46.                 push    hl
  47.                 ld      hl,(adr)
  48.                 push    hl
  49.                 endm
  50.  
  51. storeop         macro   {NoExpand}      ; Ergebnis in Array ablegen
  52.                 ld      (iy),de
  53.                 ld      (iy+2),bc
  54.                 add     iy,4
  55.                 endm
  56.  
  57. OneOp           macro   Msg,Operation,Op1,Op2,{Expand}  ; Aufruf, Ausgabe und
  58.                 call    PSTR                              ; Zeitmessung
  59.                 db      Msg,0
  60.                 call    StartTimer
  61.                 if      "OP1"<>""
  62.                  pushop Op1
  63.                 endif
  64.                 if      "OP2"<>""
  65.                  pushop Op2
  66.                 endif
  67.                 call    Operation
  68.                 storeop
  69.                 call    StopTimer
  70.                 if      (("OPERATION"<>"FNOP") && ("OPERATION"<>"FFTOI"))
  71.                  call    PSTR
  72.                  db      ", Ergebnis ",0
  73.                  push    bc
  74.                  push    de
  75.                  ld      hl,Format
  76.                  push    hl
  77.                  ld      hl,CharBuffer
  78.                  push    hl
  79.                  call    fftoa
  80.                  call    TXTAUS
  81.                 endif
  82.                 call    PSTR
  83.                 db      CR,LF,0
  84.                 endm
  85.  
  86. ;------------------------------------------------------------------------------
  87. ; Hauptroutine
  88.  
  89.                 proc    Main
  90.  
  91.                 ld      sp,Stack        ; Stack reservieren
  92.                 ld      iy,Erg          ; Zeiger auf Ergebnisfeld
  93.                 call    InitTimer       ; Zeitmessung vorinitialisieren
  94.  
  95.                 OneOp   "Ladeoverhead         : ",fnop,Eins,Eins
  96.                 OneOp   "Addition 2+Pi        : ",fadd,Zwei,Pi
  97.                 OneOp   "Addition 100000+2    : ",fadd,Thou,Zwei
  98.                 OneOp   "Addition 0+1         : ",fadd,Null,Eins
  99.                 OneOp   "Subtraktion Pi-2     : ",fsub,Pi,Zwei
  100.                 OneOp   "Subtraktion 100000-1 : ",fsub,Thou,Eins
  101.                 OneOp   "Multiplikation 2*Pi  : ",fmul,Zwei,Pi
  102.                 OneOp   "Division 1/Pi        : ",fdiv,Eins,Pi
  103.                 OneOp   "Wurzel aus 2         : ",fsqrt,Zwei,
  104.                 OneOp   "Wurzel aus 10000     : ",fsqrt,Thou,
  105.                 OneOp   "Wurzel aus -1        : ",fsqrt,MinEins,
  106.                 OneOp   "Wandlung 1-->Float   : ",fitof,IntEins,
  107.                 OneOp   "Wandlung 1E5-->Float : ",fitof,IntThou,
  108.                 OneOp   "Wandlung 1-->Int     : ",fftoi,Eins,
  109.                 OneOp   "Wandlung 1E5-->Int   : ",fftoi,Thou,
  110.                 ld      a,10
  111.                 OneOp   "Pi*2^10              : ",fmul2,Pi,
  112.                 ld      a,-10
  113.                 OneOp   "Pi*2^(-10)           : ",fmul2,Pi,
  114.  
  115.                 call    PSTR
  116.                 db      "Eingabe: ",0
  117.                 ld      hl,InpBuffer
  118.                 call    TXTAUS
  119.                 ld      hl,InpBuffer
  120.                 push    hl
  121.                 call    fatof
  122.                 storeop
  123.                 call    PSTR
  124.                 db      ", Ergebnis: ",0
  125.                 push    bc
  126.                 push    de
  127.                 ld      hl,Format
  128.                 push    hl
  129.                 ld      hl,CharBuffer
  130.                 push    hl
  131.                 call    fftoa
  132.                 call    TXTAUS
  133.                 call    PSTR
  134.                 db      13,10,0
  135.  
  136.                 jp      MRET
  137.  
  138.                 endp
  139.  
  140.                 proc    fnop            ; Dummyroutine fuer Overheadmessung
  141.  
  142.                 link    ix,0
  143.                 unlk    ix
  144.  
  145.                 retd    8
  146.  
  147.                 endp
  148.  
  149. CharBuffer:     db      30 dup (?)      ; Puffer fuer fftoa
  150. InpBuffer:      db      "-123.456E-7",0 ; Puffer fuer fatof
  151.  
  152.                 align   4
  153. Eins:           dd      1.0             ; benoetigte Konstanten
  154. MinEins:        dd      -1.0
  155. Zwei:           dd      2.0
  156. Pi:             dd      40490fdbh       ; um Vergleichsfehler durch Rundung zu
  157.                                         ; vermeiden
  158. Zehn:           dd      10.0
  159. Null:           dd      0.0
  160. Thou:           dd      100000.0
  161. IntEins:        dd      1
  162. IntThou:        dd      100000
  163. Erg:            dd      40 dup (?)      ; Ergebnisfeld
  164.  
  165.                 align   2               ; Platz fuer Stack
  166.                 db      300 dup (?)
  167. Stack:
  168.                 endsection
  169.  
  170. ;------------------------------------------------------------------------------
  171. ; benoetigte Module
  172.  
  173.                 include cpu_time.inc     ; Zeitmessung
  174.                 include float.inc        ; Gleitkommabibliothek
  175.  
  176. ;------------------------------------------------------------------------------
  177.  
  178.                 end     Main
  179.  
  180.