aboutsummaryrefslogtreecommitdiffstats
path: root/tests/t_fl90/t_fl90.asm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/t_fl90/t_fl90.asm')
-rw-r--r--tests/t_fl90/t_fl90.asm179
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
+