As always, all similarities >3 explained in the last commit
Highlights:
Built-in tape head align tool - unfortunately, takes too much ROM space to be enabled on builds for machines without extended ROM sapce.
Rewritten string compression and tokenizer for smaller size, slightly better performance, ability to support different string set depending on a build configuration, more BASIC token lists (two-byte tokens), etc. String encoding is almost the same, but the "dictionary compression" part is optional and for now disabled by default - we don't have enough strings yet to make it worthwile. And the "dictionary" part (if enabled) is now only applied to error strings, etc. - not the tokens, there are too many of them, and we quickly reach the limit of 255 entries in the dictionary.
Expression parser in BASIC. Supports brackets, unary operators, two-argument operators, operator priority. Not yet visible from the user point of view - operators are not implemented yet, currently they just trigger NOT IMPLEMENTED ERROR - but the engine is already there.
More BASIC v2 commands: SAVE, VERIFY, started work on PRINT.
Some extended BASIC commands: MERGE (not present in CBM BASIC, but supplied by many BASIC extensions), BLOAD, BSAVE, BVERIFY (but the syntax of these does not follow V3.5 syntax yet) - these I need for testing. Also added SLOW and FAST commands - Mega65 implementation already tested in XEMU, Ultimate 64 not tested yet - they require v1.33+ firmware, but 1.33 could put the machine into endless boot loop, I'm going to wait with the update of my board until 1.34 is proven to be stable. For more information see https://github.com/FeralChild64/open-roms/blob/master/doc/Extended-BASIC.md
New memory models: 46K (47103 BASIC bytes free, uses RAM up to $BFFF) and 50K (51199 BASIC bytes free, uses RAM up to $BFFF). They should be less problematic (and faster) than 60K memory model - no need for special interrupt handling, no need for helper routines in RAM (I'm glad BASIC occupies also part of the $E000-$FFFF ROM, I could just force it's helper routines to reside there), performance should be better (no need for helper routines during memory write). For now 50K model is the default one, I hope we can keep it this way.
Regarding future plans... for BASIC I need to take care of the editor (line insert/delete, there are some bugs there; VARTAB is not set as on C64, it is easy to trigger MEMORY CORRUPT error) and write the string memory manager (not only for variables - even float->ASCII conversion will require temporary string space alocation). For KERNAL - JiffyDOS LOAD is not optimal (fortunately, Michael Steil provided full protocol description, so I now know what I'm missing), and tape loading can probably benefit from the Ultimate 6 no-scanlines mode.
As always, all similarities >3 explained in the last commit
Highlights:
Built-in tape head align tool - unfortunately, takes too much ROM space to be enabled on builds for machines without extended ROM sapce.
Rewritten string compression and tokenizer for smaller size, slightly better performance, ability to support different string set depending on a build configuration, more BASIC token lists (two-byte tokens), etc. String encoding is almost the same, but the "dictionary compression" part is optional and for now disabled by default - we don't have enough strings yet to make it worthwile. And the "dictionary" part (if enabled) is now only applied to error strings, etc. - not the tokens, there are too many of them, and we quickly reach the limit of 255 entries in the dictionary.
Expression parser in BASIC. Supports brackets, unary operators, two-argument operators, operator priority. Not yet visible from the user point of view - operators are not implemented yet, currently they just trigger NOT IMPLEMENTED ERROR - but the engine is already there.
More BASIC v2 commands: SAVE, VERIFY, started work on PRINT.
Some extended BASIC commands: MERGE (not present in CBM BASIC, but supplied by many BASIC extensions), BLOAD, BSAVE, BVERIFY (but the syntax of these does not follow V3.5 syntax yet) - these I need for testing. Also added SLOW and FAST commands - Mega65 implementation already tested in XEMU, Ultimate 64 not tested yet - they require v1.33+ firmware, but 1.33 could put the machine into endless boot loop, I'm going to wait with the update of my board until 1.34 is proven to be stable. For more information see https://github.com/FeralChild64/open-roms/blob/master/doc/Extended-BASIC.md
New memory models: 46K (47103 BASIC bytes free, uses RAM up to $BFFF) and 50K (51199 BASIC bytes free, uses RAM up to $BFFF). They should be less problematic (and faster) than 60K memory model - no need for special interrupt handling, no need for helper routines in RAM (I'm glad BASIC occupies also part of the $E000-$FFFF ROM, I could just force it's helper routines to reside there), performance should be better (no need for helper routines during memory write). For now 50K model is the default one, I hope we can keep it this way.
Regarding future plans... for BASIC I need to take care of the editor (line insert/delete, there are some bugs there; VARTAB is not set as on C64, it is easy to trigger MEMORY CORRUPT error) and write the string memory manager (not only for variables - even float->ASCII conversion will require temporary string space alocation). For KERNAL - JiffyDOS LOAD is not optimal (fortunately, Michael Steil provided full protocol description, so I now know what I'm missing), and tape loading can probably benefit from the Ultimate 6 no-scanlines mode.