-------------------------------------------------------------------------------
0.2.3
micro16 virtual computer:
- fixed crash bug in micro-conio.c that was due to the MS Visual C
runtime's isspace() blowing up on umlaut characters
m16basic:
- the precompiler now takes care of auto upper casing everything. So you can
type in your source as you like. Note though that M16BASIC remains
case insensitive: Variable_a still is the same as VARIABLE_A
- renamed PLAYSID to SIDPLAY
- SIDPLAY N, 0 now stops sid playback
- added variable reference operator '&'. Using '&varname' a reference to
a variable can be passed around.
- LOAD now expects a variable reference
as its third parameter and will write the number of bytes loaded
or a negative error code to the referenced variable
- fixed a bug in the if-then-else-endif code generator that would
cause the vm to become corrupted
-------------------------------------------------------------------------------
0.2.2
micro16 virtual computer:
- disabled the command line direct edit functionality
because it has proven to be way too complex to try to mix&match
directly edited code (with enforced line numbers) with ED
and particularly the m16basic pre compiler
- enabled auto running a basic program passed in from the command line
by adding -x after the file name (i.e parallax.bas -x)
- fixed several bugs related to the whole NEW/SAVE/LOAD complex sometimes
not setting flags correclty causing failed source reloads and ED
not recognizing NEW
m16basic:
- completed IF THEN ELSE ENDIF implementation supporting actual code
blocks inside the branches instead of just the ecma55 minimal
implementation (a "jump if true" following the THEN token)
- fixed a bug related to the stack size calculation of some VM opcodes
-------------------------------------------------------------------------------
0.2.1
windows installer:
- changed default installation directory to c:\Micro16 because
the previous default (c:\Program Files\Micro16) caused the current
directory, when in the Micro16 console, to be write protected unless
the program was run "as administrator"
micro16 virtual computer:
- console echo now gets disabled in graphics modes: display.c::SetDisplayMode()
example programs:
- new parallax.bas example demonstrating parallax scrolling via BitBlt
-------------------------------------------------------------------------------
0.2.0
micro16 virtual computer:
m16basic:
- %import implemented
- implemented %autonumber in the preprocessor
- implemented a pre compiler stage
- enabled loading, saving and editing (ED) of free form source text files
- added $LABEL: statements for setting jump targets for =>
- GOTO LABEL and IF THEN LABEL type statements implemented
-------------------------------------------------------------------------------
0.1.2
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
https://glusoft.com/tutorials/sdl2/static-build-visual-studio
- 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
- added SPRITESHEET sheet_num, image_data, cel_width, cel_height, cel_count stride
void S_SetSprite(int sprite_num, int sheet_num, int cel_num, int xpos, int ypos);
void S_SetSpriteanimation(int anim_num, int sprite_num, int first_cel, int num_cels, int fps);
example programs:
- added c64colors.bas
- added mandelbrot.bas
- added blit.bas
- added scroll.bas
-------------------------------------------------------------------------------
0.1.1
m16 implementation:
all of the base functionality:
- SDL wrapper
- IMachine machine thread driver (background display and user input updates)
- bas-editor replacing the bas55 console mode line editor
- micro-conio implementing conio style keyboard input handling and character output
plus basic stdio replacements needed to make bas55 work nicely with m16
- display.c and the basic display drivers for implementing our retro computer style
video modes emulation
bas55 changes:
- added ifun double INKEY
- added DIR and ED commands
- added extra entry for inbuilt EDIT command so that it can be called as E
- added CLS color
- added VMODE mode
- added POINT x y color
- added DRAWLINE x0 y0 x1 y1 color
- added PRINTAT row col
VM (runtime) changes of existing functionality
- changed sprint_unscaled(rnum, d, after, exponent) and static int sprint_num(char *rnum, double d)
to not add leading and trailing blanks to all numbers they print
# end changelog