Mercurial > hg > Members > kono > os9 > sbc09
diff basic/README.txt @ 57:2088fd998865
sbc09 directry clean up
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 23 Jul 2018 16:07:12 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/basic/README.txt Mon Jul 23 16:07:12 2018 +0900 @@ -0,0 +1,165 @@ +BASIC AND FLOATING POINT ROUTINES FOR THE 6809 +============================================== + +sbc09 stands for Lennart Benschop 6809 Single Board Computer. +It contains a assembler and simulator for the Motorola M6809 processor. + +copyleft (c) 1994-2014 by the sbc09 team, see AUTHORS for more details. +license: GNU General Public License version 2, see LICENSE for more details. + + + +FLOATING POINT ROUTINES FOR THE 6809 +------------------------------------ + +They are intended to be used with the sbc09 system. These routines +should be fairly portable to any 6809-based system. + +As it is an unfinished program (intended to become a full-featured +BASIC interpreter one day), I never released it before and I almost +forgot about it. Fortunately it was still on a backup CD-R that I +made in 2001. + + +FILES +- - - + +makeflot.c Conversion tool to convert floatnum.src to floatnum.inc + +floatnum.inc Floating point constants to be included in main program. +floatnum.src Same constants, but not converted to binary. + +fbasic.asm RPN calculator with floating point (just to test the FP routines. + This was intended to be part of a larger Basic interpreter, + but this was never finished). + +basic.asm Tiny Basic +basic.txt Tiny Basic instructions + +It was originally planned to turn this into a full-fledged BASIC +interpreter (maybe somewhat like BBC Basic), but this never +happened. It is now a rudimentary RPN calculator, just to test the +floating point routines. Each number or command needs to be on a separate +line. + + + + +MAKE THE PROGRAMS +- - - - - - - - - + +Simple: + +make + + +Or in single steps: + +compile the helper tool ... + +./makeflot <floatnum.src >floatnum.inc + + +assemble the FP calculator ... + +./a09 fbasic.asm + + +assemble Tiny Basic (integer only) ... + +./a09 basic.asm + + + + +RUN THE PROGRAMS +- - - - - - - - + + +Start the board simulator + +../v09 + +You should see the prompt "Welcome to BUGGY version 1.0" + +Type the command + +xl400 + +Press the escape character Control-] +(e.g. on Linux for a german style keyboard Control+AltGr+9) + +Then you see the v09> prompt. + +Type the command + +ufbasic + +Now the file "fbasic" will be uploaded to the board. + +Type the command + +g400 + +Now you can type floating point numbers and commands (RPN style), each +on a different line, like this + +2 +3 +* + 6.00000000E+00 + +1 +0 +/ + +The last calculation breaks back to the monitor. + +The following commands are available (see the source): ++ - * / (the normal arithmetic operators). += compare top two numbers on stack (and leave them), show < = or > +i round to integer (round to -Inf, like BASIC INT() function). +q square root +s sin +c cos +t tan +a atan +l ln +e exp +d duplicate number on stack +x exchange top numbers on stack. +r remove top of stack. + + + +IMPLEMENTATION NOTES +- - - - - - - - - - + +This is a 40-bit float, like many microcomputers of the 80s had, +including the Commodore 64, the ZX-Spectrum, the BBC and others. It +has an 8-bit exponent and a 32-bit mantissa (with hidden leading bit). +The basic operations (including square root) should be as accurate as +can be expected. + +It does not do IEEE-754 features, such as Infinity, NaN, +/-zero and +subnormal numbers, but appears to work quite reasonably. + +Trig functions deviate a few places in the 9th decimal. In particular +sin(pi/2) shows as 9.99999998E-01 instead of 1.00000000E+00. I +consider this acceptable and consistent with what could be expected. + +The Log function deviates a few places in the 8th decimal. LN(5) appears to +be about worst-case. I find this a bit disappointing. + +2 +l +5 +l ++ +e + +should show exactly 10, but it shows 9.99999970E+00 instead. This is +not caused by the exp function, but by the log of 5 (as I checked with +Python). + +