SpecBAS 0.800 Released!

edited January 2014 in Sinclair Basic
Hi folks, it's that time again for another release. I was going to add a few more features, but I have other projects on the go at the moment, and it's looking like being a while... So I'm releasing what I have.

Feel free to report bugs and suchlike as they pop up - there's been a lot of rewriting of the core interpreter in this one. It's faster (though as your CPU speed increases the optimisations matter less - 600MHz Pandora version is a lot faster) and as a result, likely less reliable for now. I'll get the bugs fixed... Most have been ironed out by now!

Anyway, get it from here:

https://sites.google.com/site/pauldunn/SpecOS.zip

And install as usual. The changelog consists of the following:
Added:

  Optimised variable accesses local to procedures, quite a nice result there
  Speedups added to any commands that utilise the stack - GO SUB, DO .. LOOP, WHILE, UNTIL etc
  TEXTURE$ converts a string to a graphic-string for use in, i.e., fills
  LET can now assign a value to multiple variables - LET a,b,c=0 or LET a$,b$,c$="Hi" for example
  More optimisation to internal string handling
  You can, if you really want, start a line with any number of statement separators (:)
  Protected banks show up with a small "key" icon to indicate their locked state in LIST BANK
  Converted the whole interpreter to store token handlers inside the tokens themselves - much more efficient
  Improved variable caching to save on look-ups, results in a respectable speed boost
  String operations should now be quite a lot quicker due to a better string copying routine
  CONST name,value - sets a constant. Like a variable, but much faster to process as no look-up is needed
  SCALE sx,sy is now a standalone command
  SCALE can now be used in INPUT the same as in PRINT
  Sprite clones now inherit OVER and such, but still don't cause collisions
  Sprites can now wrap - use WRAP WINDOW or WRAP CLIP (to wrap to the clipping region) after SPRITE NEW
  Converted Sprite movement systems to relative offsets instead of absolutes
  LIST BANK now lists banks in ID order
  Added an Out of Memory error for overrunning the various stacks allocated to BASIC
  Sprites now have their own OVER mode. Set it with SPRITE NEW id,x,y [COLLIDE] [OVER m] or SPRITE OVER id,mode
  INCLUDE now searches the "include:" assign for files if they're not found in the current directory

Fixed:

  Certain embedded PRINT commands were evaluated in the wrong order
  Fixed sprite wrapping for sprites that don't quite ... wrap properly
  REM splitting is bugged - so has been disabled for now pending a proper fix
  Forcing a SCROLL? prompt with a large font caused too much scrolling
  LIST VAR array() now displays empty arrays correctly
  You can no longer kill SpecBAS by resizing the editor windows too small
  Automatically created "system" banks can no longer be destroyed by the user
  Default mouse pointer is now restored if the current graphic being used is deleted or replaced
  Graphic banks, when rotated, were displaced on their own canvas
  Sprite Info handlers (such as SPRITEw et al) would crash with a negative frame value
  Some errors would render their lines non-editable
  SPRITE FLIP and SPRITE MIRROR didn't work correctly for sprites of even width/height, only odd
  Errors that return an "Invalid Keyword" error caused issues with the expression evaluator
  LIST BANK 0 listed ... interesting values for window metrics
  READing into a string array with one dimension now works as it should - these take precedence over regular string slicers
  Streams can now access memory banks like they are supposed to
  Eraseing (or generally mucking about with) a graphic bank that is the current drawing surface resets drawing to the default window
  SPRITEw and SPRITEh, when called with a spriteid that points to an empty sprite, crashed specbas
  LOAD "filename" BANK NEW now returns the correct bank ID number
  BANK ERASE wouldn't function correctly because it assumed all banks were fonts
  Banks can now be unprotected properly
  Many range-limited operations were overruning their allocated memory
  PRINTing at the very bottom of the screen might have caused a Scroll? message after all
  CASE no longer overwrites the case-stack and jumps to END CASE properly after WHEN
  The constant "PI" and the function of the same name were clashing... unsurprisingly!
  Rapid keyboard hammering could cause a crash as the internal keybuffer may get cleared while the interpreter is working on it
  Sprite collision now checks both the window -and- the display for sprite-to-sprite collision
  ON COLLIDE is cleared properly after NEW and RUN
  VAL no longer crashes specbas with invalid characters
  Sprite collision now only checks pixels in the sprite's window, not the overall screen display
  String slicing with one element such as LET a$(1)="H" for a string variable now works again
  Sprites now inherit the correct window info when changed to a new window
  PRINTed newlines were taking up two rows of characters rather than one, which resulted in erroneous "Scroll?" prompts

Enjoy!

D.
Post edited by Dunny on

Comments

  • edited December 2013
    Thanks Dunny, nice round release number :)

    The optimisations should help Pi users out too. Edit: Updated my Pi console build and I reckon I'm getting a 50% speedup on things like the plasma demo. Nice one!

    B
    The Spectrum Resuscitation Thread - bringing dead Spectrums back to life
    zx-diagnostics - Fixing ZX Spectrums in the 21st Century (wiki)
    Sinclair FAQ Wiki
  • edited December 2013
    Thanks for this mate. What other projects are you working on?
  • edited December 2013
    SpecBAS v0.800 for Linux / x86 binary up at: www.specbas.co.uk

    It can also be found more directly at: www.reallyquick.co.uk/specbas
    in the rare times (like right now) that the SpecBAS homepage is down.
  • edited December 2013
    Yeah.... this is unexpected ;)
  • edited December 2013
    is there a updated pi version too?
    ZX Everyday in Germany
  • edited December 2013
    I believe ccowley usually does the vanilla Pi builds.

    If he's otherwise engaged though, I can do one tomorrow (my own Pi build is console based and has quite a lot of customisation).

    B
    The Spectrum Resuscitation Thread - bringing dead Spectrums back to life
    zx-diagnostics - Fixing ZX Spectrums in the 21st Century (wiki)
    Sinclair FAQ Wiki
  • edited January 2014
    Sorry for the delay. Didn't spot that there was a new version available until it was subtly pointed out to me in #spin earlier :)

    You can "wget http://freestuff.grok.co.uk/specbas-pi.deb && sudo dpkg -i specbas-pi.deb" from a command prompt on your Pi to install/upgrade to the latest version (this will create a SpecBAS icon in the Start->Programming menu and, if you don't already have a ~/specbas home folder it will create one for you and fill it with the extra fonts and demo programs.

    If you want the old-style manual install: http://freestuff.grok.co.uk/specbas-raspi.zip is the place to go.

    Looking forward to playing about with this new build myself as Dunny reckons it should be a fair bit faster on lower-spec hardware like the Pi :)
  • edited January 2014
    Thanks Chris, that's just lovely :)

    Glad there's been a nice speedup on the Pi - was hoping that would be the case. I really need to get one for my empty 48k case!

    I've hugely sped up line drawing, which affects polygons and curves, and I've also rewritten the ellipse, rectangle and filled polygon routines.

    I've been drawing them one pixel at a time, and testing each pixel for things like INVERSE, clipping rectangles and OVER - I now only do that for each call to a line draw or circle etc which reduces the number of tests per pixel to practically zero.

    Here's a nice little proggy that demonstrates the polygon routines:
    ZXASCII
    AUTO -1
    PROG polygons
    10 DEGREES: PAPER 0: INK 14: CLS 
    20 LET xc=RND*SCRw: LET yc=RND*SCRh: LET np=INT(RND*18)+3: LET r=(RND*150)+25
    30 LET pp=INT(RND*255)+1: LET ik=INT(RND*256): IF ik=pp THEN GO TO 30
    40 DIM p(np,2): FOR a=1 TO np: LET p(a,1)=SIN(a*360/np)*(r)+xc: LET p(a,2)=COS(a*360/np)*(r)+yc: NEXT a
    50 POLYGON INK pp;p() FILL ""
    60 INK ik: FOR a=1 TO np: LET x1=p(a,1): LET y1=p(a,2): FOR b=a TO np: LET x2=p(b,1): LET y2=p(b,2): PLOT x1,y1: DRAW TO x2,y2: NEXT b: NEXT a
    70 WAIT SCREEN: GO TO 20
    

    Save it as text in your specbas home directory as usual. The speedups are only available on the Pi currently, v0.801 will be out for PC Windows/Linux shortly.

    Enjoy, everyone :)

    D.
  • edited January 2014
    Thanks guys for updating and maintaining these other ports!!!... Iv just purchased the monitor cables needed to boot my brand new RaspberryPi... SpecOS will hopefully be the first application Ill run, just as soon as I can get the hardware up and running... Looking forward to it... :)
  • edited January 2014
    will this one still have the "floating point" error and crashes?
  • edited January 2014
    Wookiee wrote: »
    will this one still have the "floating point" error and crashes?

    Hope not. If it does, let me know. I've not seen any floating point errors in well over a year.

    D.
  • edited January 2014
    Dunny wrote: »
    Hope not. If it does, let me know. I've not seen any floating point errors in well over a year.

    D.

    oooo I get them at least once a "project"

    Maybe I'm using an older one than I thought...cheers
  • edited January 2014
    Wookiee wrote: »
    oooo I get them at least once a "project"

    Maybe I'm using an older one than I thought...cheers

    As I said, if you do get one of those then let me know what you were doing, what you think caused it, and if you can - a small listing that demonstrates the crash. If you can do all that, I can fix the error. If you look at the "bug reports" thread on the official forums, you can see that I've fixed hundreds.

    D.
  • edited January 2014
    aye - will have a look at the new one and see if it crops up again, I have a listing from just before it stacked so should be easy to sort
  • edited January 2014
    Finally got my Raspberry Pi up and running!!!!.... Chose Raspian Wheezy from the Noob SD card after finally giving up in my attempts to manually install TinyCore (yes, I really AM that much of an amateur!!!!)...

    ..and followed the enclosed instructions to the letter from Chris C. on installing SpecBAS to finally run my first application and written program from SpecBAS...!!!!

    Yaaaayy... its a wonderful day!!!!...

    :)

    Big Thanks for creating this, and to everyone else in their work in porting it across to other platforms (Raspberry Pi, Pandora, etc...)...

    :smile:
  • edited January 2014
    Dunny wrote: »
    As I said, if you do get one of those then let me know what you were doing, what you think caused it, and if you can - a small listing that demonstrates the crash. If you can do all that, I can fix the error. If you look at the "bug reports" thread on the official forums, you can see that I've fixed hundreds.

    D.

    Not sure if this is the best place but....this listing keeps dying on me despite re typing from a previously saved listing etc

    EDIT - just trying SPECbas now, is there a way to import this code or do I need to type it all in again?

    1 PAUSE 0
    10 REM Pack man
    20 CLS : PAPER 0: BORDER 0: INK 2: RANDOMIZE : CLS 
    30 REM some value checks
    40 INK 1: PRINT AT 0,0;"1"
    50 INK 2: PRINT AT 0,1;"2"
    60 INK 3: PRINT AT 0,2;"3"
    65 INK 4: PRINT AT 0,3;"4"
    70 INK 5: PRINT AT 0,4;"5"
    75 INK 6: PRINT AT 0,5;"6"
    80 INK 7: PRINT AT 0,6;"7"
    85 INK 0: PRINT AT 0,7;"8"
    99 INK 7: PRINT ATTR (0,0): PRINT ATTR (0,1): PRINT ATTR (0,2): PRINT ATTR (0,3): PRINT ATTR (0,4): PRINT ATTR (0,5): PRINT ATTR (0,6): PRINT ATTR (0,7): PAUSE 0: CLS 
    100 REM Variables
    110 LET manh=9: LET manw=1:
    120 LET crateh=10: LET cratew=1
    130 LET score=9
    140 LET level=1
    150 LET lives=100
    160 LET birdh=10: LET birdw=11: LET birddir=0
    170 LET kidh=11: LET kidw=11: LET kiddir=0
    180 LET exit=1
    190 LET cash=100
    1000 REM Graphics, needs man, woman, things to pack or packing crates, gaffer tape
    1005 RESTORE 1010: READ a$: FOR f=0 TO 7: READ n: POKE USR a$+f,n: NEXT f
    1010 DATA "m",24,24,60,90,90,36,36,36
    1020 RESTORE 1030: READ a$: FOR f=0 TO 7: READ n: POKE USR a$+f,n: NEXT f
    1030 DATA "b",119,119,0,221,221,0,119,119
    1040 RESTORE 1050: READ a$: FOR f=0 TO 7: READ n: POKE USR a$+f,n: NEXT f
    1050 DATA "l",24,60,24,102,24,60,60,24
    1060 RESTORE 1070: READ a$: FOR f=0 TO 7: READ n: POKE USR a$+f,n: NEXT f
    1070 DATA "k",0,0,24,24,60,90,36,36
    1080 RESTORE 1090: READ a$: FOR f=0 TO 7: READ n: POKE USR a$+f,n: NEXT f
    1090 DATA "w",0,102,255,255,189,60,60,60
    3000 REM levels
    3001 INK 7: PRINT AT 0,0;"01234567890123456789012345678901"
    3010 INK 2: PRINT AT 1,0;"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b": PRINT AT 2,0;"\b": PRINT AT 2,8;"\b": PRINT AT 2,14;"\b": PRINT AT 2,24;"\b": PRINT AT 3,0;"\b": PRINT AT 3,8;"\b": PRINT AT 3,14;"\b": PRINT AT 3,24;"\b": PRINT AT 4,0;"\b": PRINT AT 4,8;"\b": PRINT AT 4,14;"\b": PRINT AT 4,24;"\b": PRINT AT 5,0;"\b": PRINT AT 5,8;"\b\b": PRINT AT 5,12;"\b\b\b": PRINT AT 5,24;"\b": PRINT AT 6,0;"\b": PRINT AT 6,8;"\b": PRINT AT 6,24;"\b": PRINT AT 7,0;"\b": PRINT AT 7,8;"\b": PRINT AT 7,24;"\b": PRINT AT 8,0;"\b\b\b\b": PRINT AT 8,6;"\b\b\b": PRINT AT 8,14;"\b": PRINT AT 8,24;"\b": PRINT AT 9,0;"\b": PRINT AT 9,14;"\b": PRINT AT 9,24;"\b": PRINT AT 10,0;"\b": PRINT AT 10,14;"\b\b\b\b\b\b\b\b\b\b": PRINT AT 10,24;"\b": PRINT AT 11,0;"\b\b\b\b\b\b\b": PRINT AT 11,9;"\b\b\b": PRINT AT 11,24;"\b": PRINT AT 12,0;"\b": PRINT AT 12,10;"\b": PRINT AT 12,24;"\b": PRINT AT 13,0;"\b": PRINT AT 13,14;"\b": PRINT AT 13,24;"\b": PRINT AT 14,0;"\b": PRINT AT 14,14;"\b": PRINT AT 14,24;"\b": PRINT AT 15,0;"\b": PRINT AT 15,14;"\b": PRINT AT 15,10;"\b": PRINT AT 15,24;"\b": PRINT AT 16,0;"\b": PRINT AT 16,7;"\b\b\b\b\b\b\b\b\b": PRINT AT 16,24;"\b": PRINT AT 17,0;"\b": PRINT AT 17,7;"\b": PRINT AT 17,15;"\b": PRINT AT 17,24;"\b": PRINT AT 18,0;"\b": PRINT AT 18,7;"\b": PRINT AT 18,15;"\b": PRINT AT 18,24;"\b": PRINT AT 19,0;"\b": PRINT AT 19,15;"\b": PRINT AT 19,24;"\b": PRINT AT 20,0;"\b": PRINT AT 20,15;"\b": PRINT AT 20,24;"\b": PRINT AT 21,0;"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
    3100 REM random scatter objects
    3110 FOR n=0 TO 15
    3120 LET x=INT (RND*20)+1
    3130 LET y=INT (RND*24)+1
    3140 IF ATTR (x,y)=2 OR ATTR (x,y)=3 THEN GO TO 3120
    3150 INK 4: PRINT AT x,y;"w"
    3160 NEXT n
    3170 LET birdh=INT (RND*20)+1
    3180 LET birdw=INT (RND*24)+1
    3190 LET kidh=INT (RND*20)+1
    3200 LET kidw=INT (RND*24)+1
    3210 IF ATTR (birdh,birdw)=2 OR ATTR (birdh,birdw)=4 OR ATTR (birdh,birdw)=3 THEN GO TO 3170
    3220 IF ATTR (kidh,kidw)=2 OR ATTR (kidh,kidw)=4 OR ATTR (kidh,kidw)=3 THEN GO TO 3190
    3230 INK 1: PRINT AT birdh,birdw;"L": INK 5: PRINT AT kidh,kidw;"K"
    3240 FOR n=0 TO 5
    3250 LET x=INT (RND*20)+1
    3260 LET y=INT (RND*24)+1
    3270 IF ATTR (x,y)=2 OR ATTR (x,y)=3 OR ATTR (x,y)=4 OR ATTR (x,y)=1 OR ATTR (x,y)=5 THEN GO TO 3250
    3280 INK 7: PRINT AT x,y;"y"
    3290 NEXT n
    3300 FOR n=0 TO 5
    3310 LET x=INT (RND*20)+1
    3320 LET y=INT (RND*24)+1
    3330 IF ATTR (x,y)=2 OR ATTR (x,y)=3 OR ATTR (x,y)=4 OR ATTR (x,y)=1 OR ATTR (x,y)=5 THEN GO TO 3310
    3340 INK 6: PRINT AT x,y;"z"
    3350 NEXT n
    4000 REM *********** THE MAIN LOOP*************
    4100 GO SUB 5000
    4200 GO SUB 6000
    4300 GO SUB 7000
    4400 GO SUB 8000
    4900 LET lives=lives-1
    4910 IF lives<1 THEN GO TO 9100
    4999 GO TO 4000
    5000 REM player inputs
    5010 IF INKEY$="q" AND ATTR (manh-1,manw)<>2 THEN INK 0: PRINT AT manh,manw;" ": LET manh=manh-1
    5020 IF INKEY$="a" AND ATTR (manh+1,manw)<>2 THEN INK 0: PRINT AT manh,manw;" ": LET manh=manh+1
    5030 IF INKEY$="o" AND ATTR (manh,manw-1)<>2 THEN INK 0: PRINT AT manh,manw;" ": LET manw=manw-1
    5040 IF INKEY$="p" AND ATTR (manh,manw+1)<>2 THEN INK 0: PRINT AT manh,manw;" ": LET manw=manw+1
    5050 IF INKEY$="" THEN INK 3: PRINT AT manh,manw;""
    5999 RETURN 
    6000 REM move the baddies
    6010 LET birddir=INT (RND*4)
    6020 LET kiddir=INT (RND*4)
    6030 IF birddir=0 AND ATTR (birdh-1,birdw)<>2 AND ATTR (birdh-1,birdw)<>4 AND ATTR (birdh-1,birdw)<>7 THEN INK 0: PRINT AT birdh,birdw;" ": LET birdh=birdh-1
    6040 IF birddir=2 AND ATTR (birdh+1,birdw)<>2 AND ATTR (birdh+1,birdw)<>4 THEN INK 0: PRINT AT birdh,birdw;" ": LET birdh=birdh+1
    6050 IF birddir=1 AND ATTR (birdh,birdw+1)<>2 AND ATTR (birdh,birdw+1)<>4 THEN INK 0: PRINT AT birdh,birdw;" ": LET birdw=birdw+1
    6060 IF birddir=3 AND ATTR (birdh,birdw-1)<>2 AND ATTR (birdh,birdw-1)<>4 THEN INK 0: PRINT AT birdh,birdw;" ": LET birdw=birdw-1
    6070 IF kiddir=0 AND ATTR (kidh-1,kidw)<>2 AND ATTR (kidh-1,kidw)<>4 THEN INK 0: PRINT AT kidh,kidw;" ": LET kidh=kidh-1
    6080 IF kiddir=2 AND ATTR (kidh+1,kidw)<>2 AND ATTR (kidh+1,kidw)<>4 THEN INK 0: PRINT AT kidh,kidw;" ": LET kidh=kidh+1
    6090 IF kiddir=1 AND ATTR (kidh,kidw+1)<>2 AND ATTR (kidh,kidw+1)<>4 THEN INK 0: PRINT AT kidh,kidw;" ": LET kidw=kidw+1
    6100 IF kiddir=3 AND ATTR (kidh,kidw-1)<>2 AND ATTR (kidh,kidw-1)<>4 THEN INK 0: PRINT AT kidh,kidw;" ": LET kidw=kidw-1
    6999 RETURN 
    7000 REM not sure what we'll do here yet
    7999 RETURN 
    8000 REM ******************collision detection and printing
    8010 IF ATTR (manh,manw)=4 THEN LET score=score+1: FOR m=0 TO 40 STEP 5: BEEP 0.005,m: NEXT m:
    8020 IF manh=birdh AND manw=birdw THEN LET cash=cash-100: BEEP 0.5,8: LET manh=9: LET manw=1
    8030 IF manh=kidh AND manw=kidw THEN LET lives=lives-50: BEEP 0.5,8: LET manh=9: LET manw=1
    8300 IF score>=15 AND cash>=250 AND manh=10 AND manw=1 THEN GO TO 9200
    8350 IF lives<1 THEN GO TO 9000
    8400 INK 1: PRINT AT birdh,birdw;"\l"
    8410 INK 5: PRINT AT kidh,kidw;"\k"
    8500 INK 3: PRINT AT manh,manw;"\m"
    8900 INK 6: PRINT AT crateh,cratew;"C"
    8910 INK 5: PRINT AT 2,26;"SCORE": INK 6: PRINT AT 3,30;score
    8920 INK 4: PRINT AT 5,26;"TIME": INK 2: PRINT AT 6,27;lives
    8930 INK 1: PRINT AT 8,26;"LEVEL": INK 6: PRINT AT 9,30;level
    8940 INK 7: PRINT AT 11,26;"CASH": INK 1: PRINT AT 12,27;cash
    8999 RETURN 
    9000 REM game over stuff
    9010 CLS : INK 7: PRINT AT 10,5;"YOU LOST": PAUSE 0: GO TO 10
    9100 CLS : INK 7: PRINT AT 10,5;"TIME UP": PAUSE 0: GO TO 10
    9200 REM victory
    9210 CLS : INK 7: PRINT AT 10,5;"You won": PAUSE 0: GO TO 10
    
  • edited January 2014
    Wookiee wrote: »
    Not sure if this is the best place but....this listing keeps dying on me despite re typing from a previously saved listing etc
    snip
    

    Yeah, that would be because it's a Speccy BASIC listing and not a SpecBAS listing. You have to bear in mind that for things to be upgraded - in this case, the screen display - some things had to go:

    1. There is no BORDER, so the command doesn't exist.
    2. Because the screen is 8 bits per pixel, and each pixel has its own colour, ATTR doesn't exist.
    3. UDGs are now 64 bytes each, rather than 8 - this is because the font is also 8 bits per pixel. Have a look at some of the demos ("pattern" is one) to see how UDGs are made. The manual tells you how to type them in.

    The rest should be fine, but you'll have to rework or work around those issues. Just simply saving it from BASin and then importing directly into specbas won't work.

    D.
  • edited January 2014
    Dunny wrote: »
    Yeah, that would be because it's a Speccy BASIC listing and not a SpecBAS listing. You have to bear in mind that for things to be upgraded - in this case, the screen display - some things had to go:

    1. There is no BORDER, so the command doesn't exist.
    2. Because the screen is 8 bits per pixel, and each pixel has its own colour, ATTR doesn't exist.
    3. UDGs are now 64 bytes each, rather than 8 - this is because the font is also 8 bits per pixel. Have a look at some of the demos ("pattern" is one) to see how UDGs are made. The manual tells you how to type them in.

    The rest should be fine, but you'll have to rework or work around those issues. Just simply saving it from BASin and then importing directly into specbas won't work.

    D.

    cheers man, but to clarify this listing stacks BASin not Specbas and those commands seem to work fine in BASin :-?
  • edited January 2014
    Wookiee wrote: »
    cheers man, but to clarify this listing stacks BASin not Specbas and those commands seem to work fine in BASin :-?

    Well, BASin is a Spectrum emulator, so it will have all the Sinclair BASIC commands intact. SpecBAS is Sinclair BASIC on a much more powerful platform and takes advantage of newer hardware - and because the original BASIC gave commands and functions that allowed you to control that older hardware (a 1 bit per pixel screen with attributes, which ensured that UDGs would be 1 bit per pixel) those commands made no sense in SpecBAS.

    I've tried to keep as much compatibility as I can, but there are some things that you'd need to work around or remove entirely.

    ATTR in SpecBAS can't make any sense, as each pixel of a character square can be any colour, rather than just two on the Spectrum.

    If you're reporting a bug in BASin, then this is entirely the wrong thread for that :)

    D.
  • edited January 2014
    Dunny wrote: »
    Well, BASin is a Spectrum emulator, so it will have all the Sinclair BASIC commands intact. SpecBAS is Sinclair BASIC on a much more powerful platform and takes advantage of newer hardware - and because the original BASIC gave commands and functions that allowed you to control that older hardware (a 1 bit per pixel screen with attributes, which ensured that UDGs would be 1 bit per pixel) those commands made no sense in SpecBAS.

    I've tried to keep as much compatibility as I can, but there are some things that you'd need to work around or remove entirely.

    ATTR in SpecBAS can't make any sense, as each pixel of a character square can be any colour, rather than just two on the Spectrum.

    If you're reporting a bug in BASin, then this is entirely the wrong thread for that :)

    D.

    Someone find me Grusso cos I've not found the bug report thread for it :lol:
  • edited January 2014
    Wookiee wrote: »
    Someone find me Grusso cos I've not found the bug report thread for it :lol:

    I see you've found the unofficial bug reports thread - it's quite fun to read, given that none of the bugs are ever likely to be fixed ;)

    D.
  • edited January 2014
    Dunny wrote: »
    I see you've found the unofficial bug reports thread - it's quite fun to read, given that none of the bugs are ever likely to be fixed ;)

    D.

    damn...
  • edited January 2014
    Wookiee wrote: »
    cheers man, but to clarify this listing stacks BASin not Specbas and those commands seem to work fine in BASin :-?

    two things with that program and basin

    1. line 3010 (the massive PRINT line) was too big
    2. line 1090 had an invalid UDG "w" when run

    so I split line 3010 and changed the "w" to a "c" and it works in Basin

    get the BAS file here.

    https://sites.google.com/site/steashii/Home/wookie.bas?attredirects=0&d=1
  • edited January 2014
    ASH-II wrote: »
    two things with that program and basin

    1. line 3010 (the massive PRINT line) was too big
    2. line 1090 had an invalid UDG "w" when run

    so I split line 3010 and changed the "w" to a "c" and it works in Basin

    get the BAS file here.

    https://sites.google.com/site/steashii/Home/wookie.bas?attredirects=0&d=1

    cheers man - the w was me trying to fix another error on the fly....didn't work :lol:
Sign In or Register to comment.