ARM BBC BASIC

From BeebWiki
Jump to: navigation, search


BASIC V

The ARM version of BBC BASIC developed on from 6502 BASIC 4 and added a lot of extra functionality.

Additions

  • WHILE-ENDWHILE
  • IF-THEN-ELSE-ENDIF
  • CASE-OF-WHEN-OTHERWISE-ENDCASE
  • RETURN parameters in procedures
  • local arrays
  • procedure libraries (LIBRARY, INSTALL and OVERLAY)
  • LOCAL DATA and LOCAL ERROR handlers
  • relative RESTORE
  • array operations
  • +=, -=, >>, << and >>> operators
  • STEP TRACE
  • Commands for the new sound system, mouse, graphics


ARM BASIC 1.00, 1986

Supplied with the ARM Development System and the ARM Evaluation System (ARM Second Processors).


ARM BASIC 1.02, 1987

Supplied with Arthur 1.20 and RISC OS prior to 3.00.


ARM BASIC 1.03

ARM BASIC 1.04, 1988

Supplied with RISC OS 3.0x

Additions

  • Added OVERLAY command
  • Added LOCAL DATA, RESTORE DATA
  • Arrays can be initialised with A$()=<factor>,<expression>,<expression> ..
  • Added =SUMLEN
  • MOD can return modulus of an array parameter
  • ERROR EXT passes an error to the caller's error handler
  • =QUIT will return TRUE if BASIC has been called with -quit on command line
  • A list of free string space is kept, with each list having one size in words. When strings are allocated, the appropriate string-size list is scanned for a free space before extending the heap.
  • Error messages revised
  • Setting bit 3 in OPT wil check assembly does not flow past a limit in L%
  • More routines are exported to CALL
  • Many simple expressions have been sped up. SYS with no TO sped up.
  • division by power of 2 did not check under/overflow
  • LOCAL A() fixed
  • A()=const fixed
  • LOCAL A():DIM A(1,1) messed stack due to bug in DIM
  • LINE INPUT had sense of LINE flag wrong
  • HIMEM=HIMEM wouldn't work
  • CREATE was uncallable due to LVBLNK loosing R4
  • STRACC postion changed from Arthur 2.00
  • $A="" check for <&8000
  • 50IF<false>THEN50 unescapeable
  • INPUT#,a$ at end of file gives end of file message
  • ATN of a large power of 2 went wrong
  • WHILE <no sd> failed in TRACE state due to moving LINE in SLOWMUNG
  • EXP .00001 corrected

Bugs

  • INSTALL allowable in a program, wiping out a substantial portion of the interpreter's stack
  • ADR with errors suppressed (bit 1 clear) gives an error if the label is out of range
  • ADVAL only returns 8 bits to program, OS returns 32 bits.
  • ADVAL calls OS_Byte instead of XOS_Byte, so generates an error if a device is missing instead of returning a null/default value.


ARM BASIC 1.05, 1992

Supplied with RISC OS 3.1x

Additions

  • Uses BASICTrans for message translation
  • @% can be set to print "," instead of "."
  • @% is reported by LVAR in ANSI printf format, and is also settable using this format, eg @%="G10.9". Partial setting of @% is supported.
  • Error messages from libraries are tagged with the name of the library which caused the error message, found from the REM on the first line of a library
  • Array statements have been sped up
  • TRACE TO <filename>, TRACE CLOSE implemented. =TRACE returns trace file handle for, eg BPUT#TRACE,"debug text"
  • TEXTLOAD and TEXTSAVE commands added
  • CRUNCH command added

Bugfixes

  • INSTALL no longer allowed within programs
  • ADR with bit 1 clear in OPT no longer gives an error when the label is out of range
  • Fatal errors are *only* 0
  • Both 5 byte real (&80, value) and 8 byte real (&88, value) values are accepted by INPUT#
  • END= may be used almost anywhere. Can be used anywhere except with INSTALLed libraries, nested within EVAL or LOCAL ERROR, nested within assignments to local arrays, nested local arrays. END= resets HIMEM and clears local arrays if faulty.
  • Fixed TAN1E-5 bug (misread the flow chart in Cody and Waite!)
  • -1^-10 blew up
  • " unlistable token " not terminated by >&7F
  • F1XSUB, F1SUB could return -0 which various xxSTAs can't cope with
  • Difference between IF THENELSE and IF THEN ELSE fixed
  • Cache not being flushed on errors could cause problems with EVAL
  • Bug in printing 0 in E mode removed
  • INT-(3*2^30) didn't give error
  • Assembler OPT not reset on -chain or -quit
  • A()=B() messed up
  • Change to ADVAL to return all 32 bits
  • TRACE TO "printer:" didn't work because of the type setting


ARM BASIC 1.14, 1994

Supplied with RISC OS 3.60.


ARM BASIC 1.22, 2001

Supplied with RISC OS 4.


ARM BASIC VI

BASIC VI is supplied with the latest RISC OS alongside BASIC V. BASIC VI can handle real numbers with greater accuracy as the improved floating-point handling performs to IEEE standard 754, using an 8-byte representation for real numbers - where BASIC V uses a 5-byte representation. [1]

Reference