57
|
1 BASIC AND FLOATING POINT ROUTINES FOR THE 6809
|
|
2 ==============================================
|
|
3
|
|
4 sbc09 stands for Lennart Benschop 6809 Single Board Computer.
|
|
5 It contains a assembler and simulator for the Motorola M6809 processor.
|
|
6
|
|
7 copyleft (c) 1994-2014 by the sbc09 team, see AUTHORS for more details.
|
|
8 license: GNU General Public License version 2, see LICENSE for more details.
|
|
9
|
|
10
|
|
11
|
|
12 FLOATING POINT ROUTINES FOR THE 6809
|
|
13 ------------------------------------
|
|
14
|
|
15 They are intended to be used with the sbc09 system. These routines
|
|
16 should be fairly portable to any 6809-based system.
|
|
17
|
|
18 As it is an unfinished program (intended to become a full-featured
|
|
19 BASIC interpreter one day), I never released it before and I almost
|
|
20 forgot about it. Fortunately it was still on a backup CD-R that I
|
|
21 made in 2001.
|
|
22
|
|
23
|
|
24 FILES
|
|
25 - - -
|
|
26
|
|
27 makeflot.c Conversion tool to convert floatnum.src to floatnum.inc
|
|
28
|
|
29 floatnum.inc Floating point constants to be included in main program.
|
|
30 floatnum.src Same constants, but not converted to binary.
|
|
31
|
|
32 fbasic.asm RPN calculator with floating point (just to test the FP routines.
|
|
33 This was intended to be part of a larger Basic interpreter,
|
|
34 but this was never finished).
|
|
35
|
|
36 basic.asm Tiny Basic
|
|
37 basic.txt Tiny Basic instructions
|
|
38
|
|
39 It was originally planned to turn this into a full-fledged BASIC
|
|
40 interpreter (maybe somewhat like BBC Basic), but this never
|
|
41 happened. It is now a rudimentary RPN calculator, just to test the
|
|
42 floating point routines. Each number or command needs to be on a separate
|
|
43 line.
|
|
44
|
|
45
|
|
46
|
|
47
|
|
48 MAKE THE PROGRAMS
|
|
49 - - - - - - - - -
|
|
50
|
|
51 Simple:
|
|
52
|
|
53 make
|
|
54
|
|
55
|
|
56 Or in single steps:
|
|
57
|
|
58 compile the helper tool ...
|
|
59
|
|
60 ./makeflot <floatnum.src >floatnum.inc
|
|
61
|
|
62
|
|
63 assemble the FP calculator ...
|
|
64
|
|
65 ./a09 fbasic.asm
|
|
66
|
|
67
|
|
68 assemble Tiny Basic (integer only) ...
|
|
69
|
|
70 ./a09 basic.asm
|
|
71
|
|
72
|
|
73
|
|
74
|
|
75 RUN THE PROGRAMS
|
|
76 - - - - - - - -
|
|
77
|
|
78
|
|
79 Start the board simulator
|
|
80
|
|
81 ../v09
|
|
82
|
|
83 You should see the prompt "Welcome to BUGGY version 1.0"
|
|
84
|
|
85 Type the command
|
|
86
|
|
87 xl400
|
|
88
|
|
89 Press the escape character Control-]
|
|
90 (e.g. on Linux for a german style keyboard Control+AltGr+9)
|
|
91
|
|
92 Then you see the v09> prompt.
|
|
93
|
|
94 Type the command
|
|
95
|
|
96 ufbasic
|
|
97
|
|
98 Now the file "fbasic" will be uploaded to the board.
|
|
99
|
|
100 Type the command
|
|
101
|
|
102 g400
|
|
103
|
|
104 Now you can type floating point numbers and commands (RPN style), each
|
|
105 on a different line, like this
|
|
106
|
|
107 2
|
|
108 3
|
|
109 *
|
|
110 6.00000000E+00
|
|
111
|
|
112 1
|
|
113 0
|
|
114 /
|
|
115
|
|
116 The last calculation breaks back to the monitor.
|
|
117
|
|
118 The following commands are available (see the source):
|
|
119 + - * / (the normal arithmetic operators).
|
|
120 = compare top two numbers on stack (and leave them), show < = or >
|
|
121 i round to integer (round to -Inf, like BASIC INT() function).
|
|
122 q square root
|
|
123 s sin
|
|
124 c cos
|
|
125 t tan
|
|
126 a atan
|
|
127 l ln
|
|
128 e exp
|
|
129 d duplicate number on stack
|
|
130 x exchange top numbers on stack.
|
|
131 r remove top of stack.
|
|
132
|
|
133
|
|
134
|
|
135 IMPLEMENTATION NOTES
|
|
136 - - - - - - - - - -
|
|
137
|
|
138 This is a 40-bit float, like many microcomputers of the 80s had,
|
|
139 including the Commodore 64, the ZX-Spectrum, the BBC and others. It
|
|
140 has an 8-bit exponent and a 32-bit mantissa (with hidden leading bit).
|
|
141 The basic operations (including square root) should be as accurate as
|
|
142 can be expected.
|
|
143
|
|
144 It does not do IEEE-754 features, such as Infinity, NaN, +/-zero and
|
|
145 subnormal numbers, but appears to work quite reasonably.
|
|
146
|
|
147 Trig functions deviate a few places in the 9th decimal. In particular
|
|
148 sin(pi/2) shows as 9.99999998E-01 instead of 1.00000000E+00. I
|
|
149 consider this acceptable and consistent with what could be expected.
|
|
150
|
|
151 The Log function deviates a few places in the 8th decimal. LN(5) appears to
|
|
152 be about worst-case. I find this a bit disappointing.
|
|
153
|
|
154 2
|
|
155 l
|
|
156 5
|
|
157 l
|
|
158 +
|
|
159 e
|
|
160
|
|
161 should show exactly 10, but it shows 9.99999970E+00 instead. This is
|
|
162 not caused by the exp function, but by the log of 5 (as I checked with
|
|
163 Python).
|
|
164
|
|
165
|