Welcome, Guest |
You have to register before you can post on our site.
|
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)
|
|
|
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
|
|
|
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!
|
|
|
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
|
|
|
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 "\ \::\:'\:.\..\'."
|
|
|
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
|
|
|
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???
|
|
|
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.
|
|
|
|