PandaBAS is a Pandora port of the SpecBAS BASIC interpreter. Based on Sinclair BASIC, but allowing the user to take advantage of more modern hardware – 8bit graphics, sound samples/mod/mp3 etc, with a much more advanced graphics and windowing system.

Release notes:

Added:

* SPRITE PUT id – places a permanent copy of the specified sprite on the screen or window it belongs to Expression calculator – any expression entered as a direct command (SIN 45 or 1+4 or CHR$ 33 for example) is evaluated and the result pasted into the direct command window. Beware, a single integer will still delete program lines!
* LOAD “filename” BANK NEW numvar – loads a file into a bank and assigns a BankID to the numvar
* More optimizations to expressions: LET a=(b/2)/8 for example now devolves into the much quicker LET a=b*0.0625. Also works for strings of multiplies, divides, adds and subtracts.
* SAVE now saves by default as ASCII text, and does not use the binary format anymore. The binary format can still be loaded, however
* More dithers to GRAPHIC REMAP – dtFLOYD, dtJARVIS, dtSTUCKI, dtBURKES, dtSIERRA3, dtSIERRA2, dtSIERRA, dtATKINSON, dtSTEVENSON – all quite slow though
* Sprite frame numbering starts at 1 and counts up, rather than frame zero
* You can now jump to the declaration of a LABEL by typing the label (@mylabel, for example) and pressing TAB in the editor
* Better error positioning in the direct command window. Errors are produced by a “dummy run”, so may not match where you expect them to!
* SPFRAME(id) returns the current frame number of the specified sprite’s animation or -1 if stopped
* SPCOLL(id) returns the collided state of the specified sprite
* Sprite collision detection – with sprites and scenery, event driven with ON COLLIDE …
* SPRITE MIRROR/FLIP id – Does what it says on the tin. Permanently.
* SPRITE FRAME id,n [PAUSE m] – sets a sprite’s current anim frame, and optionally delays the next frame
* SPRITE ANIM STOP id – halts the sprite’s animation
* SPRITE ANIM PLAY id,start [TO end] [OPTION opt] allows better control of animation with loops, pingpong etc
* SPRITE POINT id,x,y – sets the sprite “hotspot” which is basically an offset used when drawing the sprite
* Better error positions for syntax errors in the editor
* MENUBOX can now take a string array rather than a list of options. LET a=MENUBOX(“Title”,a$())

Fixed:

* Strange bug that prevented strings from being sliced by one index
* An obscure bug that caused some commands to be replaced by others – Delphi was at fault here
* RGB and HSV were incorrectly optimized by the compiler
* Scrolling via the text output routines (CAT, PRINT, LIST et al) no longer corrupts text
* OUT now attempts to create the destination if it exists
* Eliminated flicker in the editor when mouse wheel scrolling
* Loading of string and numeric dynamic arrays now work correctly
* LIST BANK doesn’t get confused with Bank ID numbers now
* Sprites can now be loaded correctly when saved with SAVE “filename” BANK id
* Sprites attached to an invisible window were showing incorrectly
* Automatically remove invalid characters and empty statements from the ends of lines
* Range checking in SPRITE CLONE operations
* Matrix addition, subtraction got their parameters wrong. D’oh!
* Labels declared alone on the last line of the program with no following statement were incorrectly stored
* Colour fonts weren’t very transparent, really
* Fixed an offset bug in the DEBUG command, ironically enough
* A bug in the sprite frame address handling
* PALETTE COPY could overwrite screen information by trying to write to palette entries > 255
* A nasty bug in the dynamic array hashing function
* A bug in BIN followed by anything but a sequence of 1s and 0s

http://repo.openpandora.org/?page=detail&app=pandabas.zxdunny.2994