[sdk-linux] Fixed some documentation formatting flaws.
[vcc1] C compiler now handles the 'unsigned' type qualifier, so it is now possible to use 'unsigned char', 'unsigned int' etc. types.
IMPORTANT NOTICE: if you're using 'unsigned' in the 'bytecode' (vs. 'native') compilation mode, you have to upload the
newest bytecode.dl (found in the 'lib' folder) to your Cybiko computer, otherwise your program will not start. The thing
is that currently there is no syspack with 'bytecode.dl' supporting 'unsigned' opcodes. If however you compile your
program with '-n' switch, you don't have to bother yourself with that.
[tools] Several new or improved utilities: Media Converter, 2music, etc. The latter introduces new, advanced algorithm for handling multi-track MIDI scores; it is to be shipped with SDK Pro only.
[vcc1] Many important internal improvements and bug fixes in the compiler. In particular, many annoying problems
with explicit type casts had been fixed (in the course of the 'unsigned' type qualifier implementation). Please note however
that the new compiler is somewhat less forgiving in that it tries to strictly follow ANSI C specification – as a result, some pieces of invalid source code that used to "work" will most probably fail.
[media] 519 new bitmaps in the collection of the royalty-free media files. With this addition, total number of bitmaps reaches 4174. It is to be shipped with SDK Pro only.
[installer] Cybiko SDK Pro can now be downloaded both as a single installation package, or in 1-megabyte chunks.
[vcc] -V option doesn't check the maximum version limit anymore
2.0.7 04/27/2001 18:12
[vas] no more extra checks in 'skip'
[vcc1] implemented '-W' and '-w' options
[vcc1] 'return' without expression is now illegal in a non-void function
[vcc1] subsequent type casts (e.g. '(int)(int)123') handled improperly
[vlink] diagnostics quality has been improved significantly
[vcc1] local structures' and arrays' initializers did not work
[vcc] occasional crash in the middle of compilation has been fixed
[vcc1] introduced new 'unsigned shift' operators '>>>' and '>>>=')
[vcc1] 'enum' did not work correctly under some circumstances
[vcc1] better handling of scope rules
[vcc] bytecode.dl requirement has been removed from the
automatically generated root.infs
[vcc, vlink] implemented -g and -G options
[vcc1, vas] implemented -g option
[sdk] bitmaps, MIDI scores and other resources are now part of the SDK distribution
[docs] miscellaneous improvements in the documentation
[2mus] fixed command line parsing
[inc] Mutex_dtor(), Flag_dtor() and Flagex_dtor() have been fixed
[vcc1] implemented shifts by variable number of bits
[vcc1] fixed multiplication / division / modulo with long operands
[vcc1] size of a structure is even if it contains even a single field that
needs alignment (for better compatibility with Cygnus compilers)
[vcc1] function pointers could be 'typedef'-ed (i.e. it is now possible
to introduce a type 'pointer to function returning...')
[vas, vlink] line number info is included in object files (though not used yet)
[vcc1] introduced extended format for the '__dl' function type modifier
[vcc1] '__inline' is now a synonym of 'inline' (and the latter is deprecated)
[vcc1] 'inline' function type modifier has been fixed
[vcc] fixed bug with empty default object file extension in compile-only mode
[vcpp] the -E option is now described in online help
[tutorials] added dynamic linkage tutorials, dl_app and dl_lib
1.1.15 03/01/2001 18:35
[vcpp] fixed bug that caused lockup under Windows 9x and some minor
issues under Windows NT/2000 when including headers from an include
search list specified with -I option
[vcc] -R option added to manage automatic root.inf generation
[vlink] added support for dynamic libraries
[vas] added .dl <label> <ordinal> directive that allows to export functions from dynamic libraries
[vcc1] functions pointer acceptable
1.1.10 02/14/2001 19:15
[vcc1] fixed bug that prevented prototypes of functions returning structures or references to work properly
[vcc] fixed -S option
[vcc1] structures are considered lvalues so that an element of an array of structures can be used at the left side of assignment
[vcc1] even small structures are returned by reference
1.1.9 02/05/2001 17:38
[vas\vcc1] new option -Vsp54 to build big application for syspack 54
[bytecode.dl\vas] new opcode "leagb.u"
[vcpp] preprocessor exits when stumbles upon unrecognized option (used to just issue a warning)
[vcpp] if given either of -M options, preprocessor turns itself
into dependencies generator -- it outputs dependency records for the specified
C/C++ source file rather then its preprocessed contents; even in this mode, it
recognizes and processes other switches, e.g. -D, -I, etc.
1.1.8 01/25/2001 15:26
[vcc1] type check for arguments and return values is improved
[vcc1] large structures assignment is implemented
1.1.7 01/19/2001 19:16
[vcc1] redundant code removal for expressions is implemented
[vcc] -A option allows to specify a library search path; if not specified, defaults to $(CYBIKO_SDK)/lib
[vlink] -A option allows to specify a library search path, so that object files not found in current directory are searched there;
only one path can be specified
[vlink] running vlink without parameters displays help
[vcc1] large structures can be passed and returned by value
[vcc1] error messages are now in Microsoft format (Windows version only)
[vcc1] implemented keyword 'inline'; inlining is restricted and does not
apply under some circumstances (that is, some inline functions would be treated
as regular)
[vcc] bug is fixed that prevented temporary files from being removed if compilation wasn't successful
[API] added simple serial port interface
[vcc1] final comma available in enum declaration
[vcc1, vas, vcc] new option '-V<ver> 'for bytecode.dl compatibility<![endif]>
[vas] new opcodes jumple(gt).c <- setgt(lt) jumpz.c
[vas] new opcode muladd.c <- mul.c add
[vcc] temporary files are stored in system temp directory, not in `/tmp' as it used to be
[vcc] smarter SDK home directory detection algorithm
[vcpp] added support for backslashes in both source and include filenames
1.0.19 10/23/2000 17:00
[vas] new opcodes: add.c(s) -> inci?.b
[vas] new optimize algorithm (pipe)
[vlink] new tool for separate compilation
[vcc1] adjusted to support separate compilation. Introduces new assembler directives. Incompatible with previous versions as a result
[vas] adjusted to support separate compilation. Produces object files instead of binaries
[vas] statistic moved to dump procedure
[vcc1] bug with enum type fixed
[vas] new opcode: mul.c
[vas] new opcode: patch
[vas] new opcode: popadd <- pop add
[vcc1\vas] new opcodes: inci?1 && deci?1
[vcc1] fixed bug with / 2(4)
[vas] new version used flex and bizon
[vcc1] fixed bug with char omitted size array initialization
[vcc1] fixed bug with array with size != 1, 2, 4
[vas\bytecode.dl] .disp is unsigned now
[vas] profiler for frequency pair opcodes (-p<num> option)
[vmake] fixed bug with not existing “rm –f tmp\*”
[vas\vasx] increase module size up to 128K; increase max label up to 32K
1.0.18 10/11/2000 17:00
[vmake] –p<0|1|2> option added
1.0.17 08/23/2000 00:30
[bytecode.dl] available to set and reset m_quit flag from the program
[vcc1] available to scan hex and octal constants as unsigned long
[vcc1] optimization: !a && !b -> !(a || b)
[vcc1] recognize expressions that would use single register (such as addition or
subtraction of a constant) and generate 'move' rather than 'push/pop' to
preserve result of previous expression (?)
[vcc1] compiler check arguments' and return value's types
[vcc1] omit unnecessary '.ln' directives at not typed nodes
[vcc1/vas/bytecode.dl] new command "patch.u" (for patching)
[vas] new directive ".ldisp "
[vas/vcc1/bytecode.dl] BSS segment supported
[vas/vcc1/bytecode.dl] module size up to 64Kb
[vcc1] new field in bytecode-file header (I_FIRST_EXPORT). Changing I_FIRST->I_FIRST_ACTOR in bytecode.h
[vcc] new option -L link in library module (a.k.a. 'static linkage')
[vcc] use ($CYBIKO_SDK)\inc (if exist) to find include files
[vcc] default output extension is the ".bin" instead the ".b"
[vcc1] possible to obtain pointer to n-th element of structure array ( struct Bitmap bmps[10] ;) using & operator.
[vcc1] operator continue works correct in for(;; i++) loop. i++ does call
[vcc1] implement initialized arrays with omitted last size
[vcc1] exportation variables from outside supported
[vas] switch "-v" (verbose) is implemented.
[vcc1] introduced new keyword 'actor' as a replacement for 'export', in that it has exactly the same syntax and meaning
[vcc1] keyword 'export' re-implemented; from now on, it has the same syntax as
'import' (that is, accepts numerical argument) though the same impact on the
functions as it used to have (i.e. not callable from within bytecode, emit
"far" returns, etc.); exported functions get into the special 'table
of exported functions' within bytecode module and are callable from within
'bootstrap' module compiled with Cygnus C++
[vmake] vmake now supports paths etc. with inner spaces provided that respective
string is enclosed in either double or single quotes, as in:
"c:/Program Files/Cybiko SDK/bin/vcc1"
"c:\Program Files\Cybiko "SDK\bin\vcc1
1.0.16 08/19/2000 22:50
[vcc1] static objects are now output in the order that allows for more compact in-memory layout (i.e. bigger modules could be generated)
[vas] added extra diagnostics: longest forward and backward patches
[vcc] first public release of compiler's driver
[vcc1] the main() proc (application entry point), as well as any other exported function, could now be given up to 3 arguments, of any type (passed as 'long's)
[vcc1] fixing fetching address of array element on the right side of 'arrow'
operator
[vcc1] 'static' qualifier works with variables declared within blocks; it is
also possible to specify initializers for such variables
[vcc1] max number of elements per array's dimension enlarged up to 64000
[vcc1] keyword 'extern' now works not only with functions but also with
variables; i.e. forward declaration of variables is also possible
[vcc1] if compilator's compilation's return code is not 0 (i.e. if compile-time
errors were detected), output (usually .bin) file will be removed
[vcc1] unions are now fully implemented
[vcc1] now if we try to assign a number to a variable and the number is not
within the range for respective type, we'll get a warning
[vcc1] duplicate case labels in 'switchfast' statements now get rejected
1.0.15 07/30/2000 00:04
[vcc1] unions implemented.
[vcc1] 'static' qualifier has effect within functions' bodies.
[vas/bytecode.dl] implemented 40 new opcodes, which are combinations of 'old'
opcodes with subsequent 'push' or 'move'; assembler touch to replace these
sequences (in fact, pairs) with single opcode
[vcc1] new opcodes used to emit some types of relocation records
[vas] implemented 'dead code' elimination (excludes all opcodes after 'ret',
'jump.c' etc up to the next .label); this covers some rare cases not yet handled
by the compiler, e.g. 'break' at the very end of 'switch'
[vcc1] fixed optimizer's handling of [ ]; that used to be treated as [ ]
[vcc1] fixed '<' '>' '<=' and '>=' operators applied to pointers
1.0.14 07/09/2000 06:16
[vcc1] while generating code for the 'struct_pointer->struct_field' construct,
compiler emits single opcode
add.c
rather than
move
load.c
add
[bytecode.dl/vas] implemented six new opcodes:
loadgc.s loadgs.s loadgl.s storegc.s storegs.s storegl.s
[vcc1] compiler tought to use the above mentioned opcodes in place of
'leag/loadi' and 'leag/storei' pairs; also, 'leag/move/load.c/storei' sequences
now look like 'load.c/storeg' etc.
[vcc1] 'cbd/cwd' opcodes are no longer generated after imported/system functions
whose result isn't actually used
[vcc1] addition/subtraction opcodes are no longer generated after
post-decrements and post-decrements, respectively, if results of the latter are
actually unused, as in for() loops
[vcc1] compiler outputs relocation records as:
leag.s
storegl.s
rather than (much longer)
leag.s
move
leag.s
storeil
[vas] implemented counter for the most frequent opcode pairs
1.0.13 07/06/2000 11:48
[bytecode.dl] ATTENTION! bytecode.dl 1.0.13 is INCOMPATIBLE with old bytecode modules; from
now on, backward compatibility will be maintained for every release, but right
now you have to download new bytecode.dl AND re-compile your applications with
vcc1/vas 1.0.13
[vas] implemented 'cbd' (stands for 'Convert Byte to Double word') opcode
[vcc1] the above mentioned 'cbd' opcode now gets emitted right after system
functions that return bytes (in fact, 'bool', since for 'char' functions gcc
actually returns 'int')
[bytecode.dl] added version number; bytecode loader now ensures that its own
version is not less than that of the module being loaded
[bytecode.dl] added room for the table of functions exported by bytecode
modules; though functions that are not methods (of exported structures) could
not be exported yet
1.0.12 06/25/2000 21:05
[vcc1] ++foo.bar, ++baz->bar etc did not work since results of '.' and '->' were
not recognized as lvalues
1.0.11 06/13/2000 07:04
[bytecode.dl] common library cache size extended (up to 80 entries) to fit cylandia's grown
demands
1.0.10 06/05/2000 00:04
[vcc1] option -d (dump code tree) caused GPF on some files
1.0.9 06/04/2000 00:11
[vas/vcc1] implemented new 'cwd' opcode (see cybiko_pcode.htm for details); with this
opcode, fixed problems with results of CyOS functions that return 'char' or
'int', such as rand()
1.0.8 06/03/2000 03:44
[vcc1] compiler does not emit '.even' directives for static data bigger than 1 byte
that actually do not need alignment; this makes code shorter a bit; quite
important for programs (such as Cylandia) that use 'video sequence compiler'
vseq.tsh, which generates a lot of 3-byte so called 'sequence loops' that reside
in 'static' memory
[vcc1] compiler did not reject prototypes of gcc-compiled vararg functions with
no named arguments (ANSI C requires at least one)
[vcc1] gcc-compiled (i.e. 'import' or '__cyos') vararg functions with more than
one named argument used to be called incorrectly: all arguments used to be
pushed on stack, while all named arguments but the very last one (up to 3)
should have been passed in registers; for that reason, sprintf() and some other
CyOS functions did not work
[t2mf] PD t2mf utility by Piet van Oostrum has been ported to Win32 and included
into the distributive of SDK so that the output of our mus2txt utility could be
converted back to .mid (MIDI Type 0) format
1.0.7 06/01/2000 03:29
[bytecode.dl/main.e] bytecode bootstrap module is re-built based on the cWinApp class, so it is now
possible to use more of the CyWin API; as a drawback, .bss segment of the module
became larger: 308 bytes vs. 256 (see [old] table below), and entire module now
takes 404 bytes (vs. 352)
[vcc1] structure fields that need to be aligned are now aligned correctly;
alignment rules match those of the GNU C compiler except for some dword-sized
fields that GNU C (unnecessary) aligns on a 4-byte boundary when 2-byte would
do; for example, if we define 'c' as 'struct { char a; long b; } c;' then
'sizeof c' would be 6 for vcc1 and 8 for GNU C; if some application requires
strict binary structure compatibility with GNU C, then it should define 'c' like
this: 'struct { char a, STUB; long b; } c;'
[vcc1] compiler now supports initialized static 'char' arrays with omitted size,
i.e. such constructs as 'char foo[] = "Foo";'
[vcc1] initialized static data buffers were not freed (i.e. there were small
memory leaks within compiler itself)
[vcc1] compiler now supports relocation records; most important is that now it
is possible to initialize static pointer with static object's address, like
this:
static char* arr[ 3 ] = { "foo1", "bar",
"baz" };
or even like this:
struct foo { void* x1; int x2[ 5 ][ 3 ]; } myfoo;
static void* ptr = & myfoo.x2[ 3 ][ 1 ];
1.0.6 05/30/2000 01:30
[vcc1/vas] there was no way to escape most special characters (e.g. quotes or newline)
within character strings; compiler parsed all strings correctly, but failed to
escape certain characters while passing them to assembler; as a remedy, compiler
now passes strings byte by byte, it doesn't use assembler's '.string' directive
anymore (for this purpose)
[vcc1] logical operators || and && produced 'zero/non-zero' rather than
strictly correct 'zero/one' when used
- on the right side of assignments (=, +=, -=, etc.),
- within expressions used as functions' arguments,
- within expressions used as functions' return values
[vcc1/vas] implemented 'setz' and 'setnz' opcodes and used them
- to fix the problem with operators || and && (see above),
- to optimize code sequence generated for the ! (logical not) operator
[vcc1] implementation of access to dynamic libs had numerous flaws:
- static variables holding pointers were not always aligned properly,
- DynamicLibrary dtor was always given wrong 'this' pointer,
- init/cleanup of a library was triggered with just function prototype, not
actual usage (i.e. rtl was attempting to load at startup, and free at exit, all
libraries that vcc1 compiler saw in system headers)
[bytecode.dl/main.e] greatly reduced per-application overhead; the size of
main.e (interpreter's bootstrap code that gets included into any application's
.app archive) reduced from 1207 to 213 bytes; its memory map now looks like
this:
code 52 bytes
idata 44 bytes
bss 256 bytes (this includes app's internal name, own timer,
etc.)
----- ---------
total 352 bytes
[sdk] minor changes in SDK directory structure; sample makefiles updated to
reflect these changes
1.0.5 05/29/2000 01:36
[vcc1] initialization expressions at the start of each block used to be computed in the
reverse order; that was particularly evil if these expressions engaged function
calls or referred to each other's values
[vcc1] compiler (erroneously) did not allow 'long' constants sometimes
[vcc1] compiler did not recognize a structure if it (structure) were the very
last symbolic name defined in the module
[vcc1] namespaces' clashes resolved (did complete overhaul of pass1)
1.0.4 05/27/2000 13:41
[vas/vcc1] implemented new 'add.[c|s|l]' opcodes which are capable of adding arbitrary
constants to R0; compiler tought to emit these opcodes
[vcc1] post-increment and post-decrement operators re-implemented with new
'add.?' opcodes, so that they handle pointers to any structures now
[vas/vcc1] implemented 'cmpe.[c|s|l]' opcodes which compare arbitrary constants
with R0 and set the latter to 1 if R0 equals to the constants, or to 0
otherwise; compiler tought to emit these opcodes
[vas/vcc1] implemented "standard" 'switch' statement (that is: with
optional 'default' label; doesn't break if switch expression is "out of
range"; number of case labels not limited)
[vcc1] implemented 'switchfast' statement which acts exactly as old-style
'switch'; that is, no 'default' label, no negative cases, no comparisons:
compiler generates jump table; the latter must not be "sparse":
compiler ensures that at least 50% of jump addresses are used; if one of these
conditions not met, compiler switches to "regular" 'switch'
[vcc1] processes (or, if more exactly, their queues) launched by modules made
with vcc now get modules' names (sans extensions) at startup
[vas] implemented 'calld12.w' and 'calld3.w' opcodes; with these opcodes, in
turn, implemented links to dynamic libraries; to call a function located within
dynamic library (or even application) it is now necessary to just supply a
prototype, like this: '__cyos "CyWin" 294 int imin(int,int);'
1.0.3 05/22/2000 12:33
[vcc1] both pre- and post-decrements of pointers produced incorrect results if the
objects the pointers were pointing to were bigger than 128 bytes
[vas/vcc1] it is now possible to use arbitrary constants: compiler tought to
emit and assembler tought to recognize 'load.l' opcode; bytecode.dl also
modified to support new opcode
[vcc1] expressions '<expr> % 2' and '<expr> %= 2' are now handled even more effectively ('load1' is used instead of 'load.c1')
1.0.2 05/16/2000 20:07
[cybiko_pcode.htm] numerous changes and *corrections*
[vcc1] main() is now always considered vararg, regardless of actual definition;
compiler also no longer requires at least 2 arguments to main(); any number of
arguments will do
[vas] implemented 'jump.s', 'jumpz.s', and 'jumpnz.s' opcodes that use 16-bit
signed offsets; made available 'load0' and 'load1' opcodes that were implemented
earlier but were never included into the scheduler's table (there were no room);
all opcodes are now emitted as indices, not offsets within scheduler's table
(i.e. not pre-scaled)
[vcc1] compiler tought to make use of new opcodes 'load0' and 'load1'; however,
compiler still writes 'jump*.c' opcodes with effective range -128..127, and it
is up to assembler to replace them with 'jump*.s' opcodes whenever necessary
[vcc1] typedefs did not work properly; most annoying, compiler did not recognize
simple integer typedefs (as in 'typedef long clock_t') as integers thus
effectively disabling almost any use in expressions
[vcc1] compiler did not handle complex return types (such as pointers to
structures) correctly
1.0.1 05/04/2000 12:09
[cybiko_pcode.htm] miscellaneous changes reflecting recent changes made to the compiler and opcode
set; many hyperlinks added for convenience
[vcc1] added recognition of the program entry point (function main)
[vcc1] fixed bug in pass1.c (function expr): correct lvalues was not recognized
in expressions involving structure members ('dot' and 'arrow' C constructs)
[vcc1] data and functions are now emitted to .asm file in correct order, i.e. as
they were encountered in the source file; most important implication is that
exported methods are now listed in the table of exported objects in the correct
order, too
[vas] fixed emitting 'short' offsets to labels: assembler used to ignore extra
displacements in 'label expressions' (compiled offsets to structure fields,
array elements denoted with constant indices, etc.)
[vcc1] now it is possible to derive structure from some existing one defining no
new fields, as in 'struct foo: public boo {};' (this is a notation device
necessary for distinguishing exported methods)
[vcc1] compiler used to ban assignments to array elements which were pointers
(it was failing to recognize them as lvalues)
[vcc1] when searching for structure fields while processing . and ->
operators, compiler did not search base structures
[vcc1] in the 'dot' operator, size of structure element was never computed, so
compiler used 4-byte indirect loads and saves by default; better diagnostics
implemented to catch size mismatches similar to this one
[vcc1] if structure definition was not [properly] terminated with a semicolon,
and that illegal definition was immediately followed by [correct] function
definition, compiler would blow up instead of just reporting syntax error
[vcc1] while building code tree, compiler (sometimes) did not recognize fields
of base structures within methods of derived ones
[vcc1] within structure's method, if field name to the right of the 'dot'
operator was also a field of that structure then it could be treated as a
'this'-based variable and not as just a displacement
[vcc1] compiler now issues warning rather than error if it detects comparison
that needs type cast (e.g. integer with non-integer; pointer with something
other than 0 or pointer to the same type; etc.)
[vcc1] if static (v.s. local or 'this'-based) array were accessed with constant
indices, compiler treated that array's elements as 4-byte
[vcc1] constant cast expressions, such as ('typename') 'number', did not produce
any code
[vcc1] compiler did not handle negative constants correctly; for functions, this
meant ineffective code, but for static data this meant inability to use negative
initializers at all
[vseq] sequence compiler now supports 'idle' loops, that is loops which just
count cycles but draw nothing; such loops can be specified using negative number
(or just '-' which means '-1') as 'repetition counter'
[vseq] size of stored loop records reduced from 4 to 3 bytes each
[vcc1] both post- and pre-increments and decrements were actually compiled into
pre-increments and pre-decrements, respectively; in other words, post-increments
and post-decrements did not work