Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 263
» Latest member: DavidBox
» Forum threads: 1,075
» Forum posts: 6,436

Full Statistics

Online Users
There are currently 168 online users.
» 0 Member(s) | 165 Guest(s)
Applebot, Bing, Google

Latest Threads
Strange Happenings
Forum: Bug Reports
Last Post: boriel
3 hours ago
» Replies: 1
» Views: 99
.tap file code not execut...
Forum: Help & Support
Last Post: Zoran
04-28-2025, 10:59 AM
» Replies: 4
» Views: 515
Exit from more than one l...
Forum: Wishlist
Last Post: Duefectu
04-23-2025, 10:06 PM
» Replies: 3
» Views: 397
put small ASM programs li...
Forum: How-To & Tutorials
Last Post: Zoran
04-18-2025, 02:02 PM
» Replies: 6
» Views: 1,739
Creating +3 Menus - Loadi...
Forum: Help & Support
Last Post: merlinkv
04-16-2025, 02:08 PM
» Replies: 6
» Views: 672
Randomize not very random...
Forum: Help & Support
Last Post: Zoran
04-08-2025, 10:40 AM
» Replies: 4
» Views: 1,031
Scope rules
Forum: Bug Reports
Last Post: Zoran
04-04-2025, 09:46 AM
» Replies: 2
» Views: 422
Using constants not allow...
Forum: Bug Reports
Last Post: baltasarq
03-19-2025, 10:00 PM
» Replies: 8
» Views: 1,198
404 page not found
Forum: Documentation
Last Post: boriel
03-08-2025, 07:16 PM
» Replies: 5
» Views: 2,964
Spectrum keywords codes
Forum: Bug Reports
Last Post: boriel
03-08-2025, 11:00 AM
» Replies: 1
» Views: 477

 
  Version 1.1.4 released!
Posted by: boriel - 03-30-2009, 06:46 AM - Forum: ZX Basic Compiler - No Replies

Changes from Version 1.1.2 to 1.1.4

  • + The peephole optimizer has been enabled and seems to be working
    reasonabily well (use -O3 for higher optimization).
  • ! When a DIV BY ZERO error occurs with floating point numbers the program
    crashes and resets the computer. This behaviour has been fixed
    and now returns 0 value and sets the error code 6 (Numbert Too big)
    in the ERR_NR system variable.
  • * Refactorization of the assembler and compiler so they now
    shared the OPTIONS in a better way (still to be finished). This
    makes easier to program future compiler options. Now also --debug
    flag is additive, showing more verbosity the more it is used.
  • + Memory optimization: The PRINT routine (which is about 1K) is not
    included if not USED.
  • ! Fixed a bug in negative constant integer typecasting (Thanks to LCD
    at WOS for reporting it! ;-)). It was causing decremental FOR..NEXT
    to fail.
  • ! Scientific notation numbers (e.g. 2e10) were not correctly parsed.
    Fixed. Thanks again to LCD. ;-)
  • + Added TAB compatibility for the PRINT command (both as a command
    and as a CHR$ control character).
  • * PRINT code optimized for size, maintaining speed.

====
TODO:
  • Some little more peephole optimizations.
  • Implementation of SAVE/LOAD/VERIFY with DATA/CODE/SCREENS (And maybe even the BASIC zone)
  • 8 bits AND/OR/NOT/XOR instructions
  • READ/DATA/RESTORE (mostly for compatibility)
  • CLEAR for filling memory zones.
  • USR n and USR n$ function (mostly for compatibilty)

Print this item

  Version 1.1.1 released!
Posted by: boriel - 03-16-2009, 08:10 AM - Forum: ZX Basic Compiler - No Replies

This version fixed some issues and introduces interesting improvements:

Changes from Version 1.1.0 to 1.1.1

  • !Fixed a bug in CONTINUE DO which was not being correctly compiled
  • +PRINT routines were included even when neither PRINT nor
    drawing primitives were used. Optimized.[/*]
  • ! Fixed a lot of syntax error checkings with array operations.
  • ! Fixed array dimension checking
  • + Expanded syntax: Direct array assignation a = b (being a and b
    arrays of thes same type an size)[/*]
  • ! Fixes an error exception on syntax error for array subscripting.
  • * Changed alloc functions to match the FreeBasic names.
  • * Using a wrong sigil in array declaration is now forbidden.
  • * Better sigils (suffixes) types managements at DIM declarations.
  • * Lot of internal source code refactoring
  • + DIM r AT @a(k0, k1, ...) is allowed (k0, k1, ... constants)
  • ! Fixed a bug for local variables and parameters when the offset is
    very large (> 128)
  • + Enabled the --sinclair flag for automatic sinclair libraries inclusion
  • + Added SetAttr routine whichs changes the attribute of
    screen coordinate (I, J) with the given color attr
    value.
  • ! Fixed a buggy modu16 modi16 implementation that was not compiling
    correctly
  • * Output asm code is now slightly optimized (for speed an memory)
  • ! Fixed a bug in intenger parameters (16 and 32 bits)
  • ! Fixed a compiler crash when using arrays of Fixed Point numbers

Print this item

  Negative STEP does not work (*solved*)
Posted by: LCD - 03-15-2009, 07:03 PM - Forum: Bug Reports - Replies (12)

Hi Boriel, I just trying to write some stuff in ZX Basic compiler 1.1.0, but I ran into some problems:

Code:
x=0
if x=1 then
  print "1"
else if x=0 then
  print "0"
end if

I got the message "Unexpected end of file", so if it is a part of FOR NEXT Loop, I got the message "Unexpected Token 'NEXT' <NEXT>". ELSE alone works, but I was sure, ELSE IF should work too, Or maybe I'm wrong?

Another one: the program does not accept Exponents: 2e4 (=2000) or similar.
And finally:
Negative STEP does not work with integers or long, only with floats or byte:
Code:
dim x as integer

for x=7 to 1 step -1
  print x
next x

The compiler is otherwise fantastic! Please continue your great work!

Print this item

  Version 1.1.0 released!
Posted by: boriel - 03-11-2009, 08:35 AM - Forum: ZX Basic Compiler - No Replies

This version fixed some issues and introduces interesting improvements:

Changes from Version 1.0.9 to 1.1.0

  • SCREEN$ coordinated were swapped. Fixed.
  • DIM .. AT was not correctly working with local vars nor params. Fixed.
  • Added BOLD "attribute".
    Code:
    PRINT BOLD 1; "Hello"
  • Added ITALIC "attribute".
    Code:
    PRINT ITALIC 1; "Hello"
  • Added malloc, free and realloc functions to work with the heap
  • Some code rearrangement
  • The IFDEF directive was not working in the preprocessor. Fixed.
================================================================
Changes from Version 1.0.8 to 1.0.9
  • Fixed a bug which could crash the program if no memory
  • Added better error handler for parameter declaration
  • Added UCase function
  • Added Lcase and fixed ucase to be case insensitive
  • Added MultiKeys Function (similar to FREEBASIC) so multiple keys can be checked at once
  • Added GetKeyScanCodes
  • Added HEX and HEX16 functions to return HEXadecimal string representation of numbers
  • Fixed a bug when a$(n TO) was specified
  • Optimization: Remove unnecessary jumps at function returns.
  • STORE16 now generates a more efficient backend (Z80 ASM) code.
  • Added alias for arrays. Now you can declare:
    Code:
    DIM a(10)
      DIM c at @a
  • Better code generation for STORE32 and STOREF backend
  • Optimized constant array assignation as a direct store.
  • Added constant array Read access optimizations

Print this item

  Version 1.0.8 released!
Posted by: boriel - 03-01-2009, 12:34 AM - Forum: ZX Basic Compiler - No Replies

This release includes new fixes and improvements:

  • Fixed a bug in the PRINT command when printing floating point numbers due to a Spectrum ROM Bug. The temporary attributer were not being used.
  • Fixed a bug in the STR$ function that made the program to freeze and also clears the temporary attributes (related to the ROM bug as above).
  • Fixed a bug in the assembler which, sometimes won't assemble if #init directives were used. Also some code clean up.
  • Now you can enter ink/paper codes and graphic characters ala BASIN (read below)
  • Added shift bit instructions (SHL, SHR)
About the spectrum ROM bug. The original STR$ Basic function clean up the temporary attributes. Try this in your ZX Spectrum:
Code:
10 PRINT PAPER 2; STR$(0)
The bug causes that PAPER 2 has no effect (you should see a "0" over a red background). ZX Basic workaround this bug now.

To enter an UDG character like "A" type \A. For example:
Code:
PRINT "\a": REM This will print UDG "A"
The numeric graphics characters can be obtained using the backslash (as above) followed by two punctuation characters. These ones are: [ ] ['] [:] and [.] characters. Each dot represents a square in the graphic character. Try this:
Code:
10 PRINT "\  \::\:'\:.\..\'."

Print this item

  Version 1.0.7 released!
Posted by: boriel - 02-22-2009, 10:58 AM - Forum: ZX Basic Compiler - No Replies

This release includes new fixes and improvements:

  • Fixes a bug in the DRAW command. The draw implementation was buggy. The new DRAW implementation works ok, and is faster and smaller.
  • Support for DRAW with 3 arguments. Now you can DRAW arcs as in Sinclair BASIC. The routine works exactly as the ZX Spectrum ROM, but also allows drawing in the lower 16 scan lines
  • Optimization: If a function is not called, and you use -O1 (or a higher number), it won't be compiled, allowing saving space
  • Optimization: If a global variable is not used, and you use -O2 (or a higher number), it won't be compiled, allowing saving space
  • Optimization: The code generated for temporary atributes is now smaller and faster
New compiler options:
  • Use --array-base=1 to start arrays at subscript 1 (default is 0)
  • Use -On to enable optimizations. Higher n number leads to higher optimizations

Print this item

  About constants
Posted by: LCD - 02-13-2009, 06:10 PM - Forum: ZX Basic Compiler - Replies (9)

Defining constants with CONST Constant as UByte=0 is not the ideal way, because they can be easy mistaken for variables, and can interfer with variables. So my proposal is to change it to similar way, PureBasic does:
#Constant as UByte=0, and all constants are marked with "#" sign in the front. In PureBasic it is a little different, as the constant and variable types are defined this way: #constant.ub=0 (ub=short for unsigned byte, has to be defined only one time).
apart from this I propose to include build-in constants with ROM Labels and System variables:
#KSTATE=23552, #LASTK=23560, #REPDEL=23561, #REPPER=23562, ...
#start=$0, #error_1=$8, #print_a_1=$10, #get_char=$18
#test_char=$1C, #next_char=$20, #fp_calc=$28, #bc_spaces=$30, ...
Also constants for some other usages:
#False=0, #True=1, #Zero=0
#Black=0, #Blue=1, #Red=2, #Magenta=3,...

Is this a good idea???

Print this item

  Online Documentation (Wiki)
Posted by: boriel - 02-13-2009, 03:31 PM - Forum: Documentation - No Replies

There is (already) a Wiki with the online documentation.

Some users are unaware of this documentation. Please, read there before asking for help since the documentation includes a programming reference and lot of examples, code snippets, etc.

Note: To contribute to the wiki you must register (create an account) in this forum, and later login into the wiki with the same user/pass.

Print this item

  Version 1.0.5 released!
Posted by: boriel - 02-13-2009, 08:33 AM - Forum: ZX Basic Compiler - No Replies

New version 1.0.5 released.

This version fixes very important bugs. Please download this version before reporting problems with the compiler.

Print this item

  BUG report (*solved*)
Posted by: juanjo - 02-03-2009, 02:57 AM - Forum: Bug Reports - Replies (1)

Hola, he estado haciendo un programita con tu lenguaje, que me parece de lo mas interesante, y he dado con un par de bugs. Lo he posteado primero en speccy.org porque aun no conocia este foro, miralo alli por favor:

http://www.speccy.org/foro/viewtopic.php...375#p15541

Gracias

Print this item