Initial release of the 0.1.2 development version

0.1.2 (20200909)

micro16 implementation:

- introduced PAPER and INK type functionality to set background- and
foreground color for text rendering for both, character and graphics modes
This uses the first 16 colors of the palette (which in the default state 
is the EGA palette). PAPER can be 0-7 and INK 0-15
- added "hardware scroll" type functionality to the 320x240x256 driver
- added register system for thread safe access to a set of "machine registers"
which can be used to set things like display x/y scroll and so on
- multi buffer support for ED
- pgup/pgdwn support for ED
- changed all the thread locks from semaphores to spinlocks
- m16 is now statically linked against a static library build of the latest SDL
- new sysvar TRANSPARENT , color index treated as transparent in blits etc.
- new sysvar BGCOLOR and FGCOLOR: color indexes used in mono modes (rw)
- new sysvar USRMEM: where does user ram start (ro)
- ED now supports DEL
- implemented PMEM module for virtual memory sandbox support (PEEK, POKE)
- changed display.c display mode setup so that it uses a fixed VRAM buffer
instead of malloc
- changed display.c display init functionality: added mapping of VRAM into PMEM
- palette now also in PMEM (end of system page)
- micro-conio now handles HOME and END keys
- and so does ED
- fixed bug where loading a new source via "ed filename" would not make basic
aware that a new file was loaded

m16basic changes:

- Long identifiers (Variable names and LABELS): 48
  Maximum Identifier Length was 9
  This is due to a definition in bas55 that goes from the longest BASIC
  keyword (RANDOMIZE) and limits keyword length (and with it identifiers
  like variable and label names). This -probably- can be changed quite easily
  but I'm unsure of any unexpected side effects (hence didn't do it yet :P)
  MAX_NAME_LEN is defined in lex.c and only used in lex.c::lex_parse_id(void)
  Unless some other part of BAS55 defines another constant for this 
  (and relies on it being 9) thats all that should need a change in the lexer.
  Now, as for M16BASIC: MAX_NAME_LEN is also defined in m16bas.c 
  and used there for dimensioning the size of names in the name encoder
  m16_encode_var(const char* var_name). If the BAS55 definition is changed 
  this needs to change as well and that is really all there should be to it
  (famous last words)
- implemented a LABEL mechanism for jump targets callable by name
There is a whole new section in parse.c dealing with this
For now only GOSUB LABEL is supported but this can be extended
to GOTO and THEN. All LABELs have to start with a '$' character
- comments at the end of a line are now possible by using the # character
everything following it will be ignored (lex.c::chk_basic_chars() and yylex())
- added NOP keyword (same function as REM, auto inserted on empty spacer lines)
- added INK and PAPER keywords for setting text print colors
- added SETREG REG, VALUE for setting machine registers
- added PAUSE N which will wait for N frames, used for refresh sync and general timing
- changed PRINTAT, POINT and LINEDRAW to expect parameters to be properly separated by commas
- added ifun double PEEK(double)
- added POKE address, value 
- added BITBLT address, sx, sy, sw, sh, stride, dx, dy
- added LOAD filename, address

example programs:
- added c64colors.bas
- added mandelbrot.bas
- added blit.bas
- added scroll.bas


Micro16Installer.exe 1 MB
Sep 09, 2020

Get Micro16

Leave a comment

Log in with to leave a comment.