Hola a todos. He publicado Solo Forth 0.11.0:
http://programandala.net/en.program.solo_forth.html http://github.com/programandala-net/solo-forth La novedad más importante, que era el objetivo de esta versión, es un espacio virtual contiguo de 64 KiB de memoria, construido con 4 bancos configurables de memoria paginada. Esto permite disponer de mucho más espacio para las cabeceras de las definiciones, que hasta ahora se almacenaban en un solo banco de 16 KiB, así como proporcionar al programador herramientas para manejar toda la memoria paginada de forma sencilla y transparente, de forma análoga a la memoria principal. Esta mejora permite retomar el desarrollo de un juego en Solo Forth, en en que la carga de las fuentes se interrumpía porque el banco de 16 KiB usado para almacenar las cabeceras de las palabras se llenaba, su puntero pasaba de $FFFF a $0000, entrando en la ROM, y lógicamente el intérprete ya no podía encontrar una sola palabra en el diccionario. A continuación muestro más detalles, en inglés, sobre esta versión 0.11.0: === New - Far memory: A virtual 64-KiB continuous space, built from 4 configurable memory banks. It's used by the Forth system to store the dictionary headers, and can be used transparently by the programmer. - Basic support for the far-memory system in the kernel: `far-banks`, `far`, `?next-bank`, `?previous-bank`, `far@`, `far!`, `farc@`, `farc!`, `farplace`, `fartype`, `faruppers`. - Optional library words to manage the far memory: `far2@`, `far2!`, `far@+`, `farc@+`, `far2@+`, `far+!`, `farc+!`, `move>far`, `move<far`, `cmove>far`, `cmove<far`, `fartype-ascii`, `fardump`, `farwdump`, `farallot`. - Add `u>ud`. - Add `word-length-mask`. - Try and document `indexer`. It did not work in previous versions because the old 16-KiB bank used to store the definition headers was not large enough: the index occupied 12 KiB, while the kernel definitions occupied 5 KiB. After implementing the 64-KiB far memory, the indexer works fine. Its usage has been documented in the source and the README. === Fixes - Fix description of the header structure. - Fix requiring `gcd`, `%` and `u%`. - Fix `\`, which used `span` instead of `#tib`. This bug has been invisible for a long time, because `\` is not used in the command line. - Fix block title of the calculator module: it caused `>=` and other calculator operators be found by `need` instead of the integer ones, because the calculator module is before the integer operators in the library disk. This problem affected the "tt" sample game, which also lacked `need randomize`. - Fix conditional compilation of `alias!`. - Fix requiring `<=>'. === Improvements - Update Vim syntax file. - Rewrite `c!bank`, `!bank`, `@bank` and `c@bank` in Z80. - Simplify `home`. No need for specific versions of `home` for the screen modes. Only `at-xy` has to be reconfigured by the screen modes, if needed. - Improve the address register module. The code still used direct jumps to `pushhl` instead of `jppushhl`, which is faster with no size penalty. - Improve documentation of the `assert(` tools. - Document the `~~` debugging tool. - Compact the assemblers, saving one block each. - Make all buffers contiguous. Now the circular string buffer can be configured to use the disk buffer and the terminal input buffer as extra space. - Improve documentation of `dump` and `wdump`. - Improve the default `case` with `alias`. === Other changes - Remove the old unused code of the old search order. - Make Z80 registers and flags uppercase in kernel's comments. - Rename "names pointer" to "headers pointer". The whole header of the definition is stored at the pointed address, not just its name. Therefore the old `np`, `np!` and `np@` have been renamed to `hp`, `hp!` and `hp@`. - Rename `code-field,` to `call,` in `assembler`. The old `code-field,`, needed in the kernel, does exactly the same as `call,` in the `z80-asm,` assembler. So it has been renamed, moved to the `assembler` word list and removed from the assembler. - Move `8*` from the assemblers to the operators. -- Marcos Cruz http://programandala.net
