Sega Master System / Mark III / Game Gear|
SG-1000 / SC-3000 / SF-7000 / OMV
Home - Forums - Games - Scans - Maps - Cheats - Credits
Music - Videos - Development - Hacks - Translations - Homebrew
SDCC 3.8.0 RC1Posted: Mon Sep 17, 2018 6:01 pm
Dear SDCC users among the Sega 8-bit programmers,
today the first Release Candidate (RC1) for SDCC 3.8.0 has been created.
As always it has been put online in our SourceForge File section.
If you have the time, please verify it and report back with the positive
or negative results.
In previous release 3.7.0, no binaries were released. 3.8.0 has binaries
gain, though the list of binary platforms changed. For 3.8.0, binaries
are released for GNU/Linux on amd64, Windows on amd64, macOS on amd64,
Windows on x86.
However: Unlike previous binary releases, the windwos installer have not
been checked by the Release Manager (my only machine with a Windows
installed needs a new poer supply, which hasn't arrived yet).
There have been various of improvements, both features and bug fixes
since SDCC 3.7.0. The full ChangeLog is at
The following is a list of particularly noticeable new features.
* Additional general utility function: bsearch()
* Support for rematerialization in the stm8 backend reduces register pressure and stack usage
* Merged upstream GNU binutils 2.30
* All Python code is now fully compatible with both Python 2.7 and Python 3.6, so Python 3 can be used instead of Python 2.
* Regression testing for diagnostics.
* Improved handling of local bool variables in the mcs51 backend substantially reduces code size.
* Large memory model for stm8 for 24-bit codespace allows using more than 32KB of Flash for code.
* New optimizations for calls to some standard library function (printf(), puts(), strcpy()).
* The type of true and false from stdbool.h change from int to bool.
* New C2X mode (--std-c2x, --std-sdcc2x, #pragma std_c2x) adds support for one-argument static_assert variant.
* Intermingling of declarations and statements (ISO C99).
* Support headers for AX8052 devices.
* Adopted GCC 8.2 regression tests (execute part of the GCC C torture tests).
Philipp Klaus Krause
SDCC 3.8.0 Release Manager
P.S.: Apart from the improvements in standard compliance, there is no "big" new feature relevant to Sega 8-bit programming. But there some smaller improvments in code generation for the Z80 and many bugfixes.
P.P.S.: This version is a bit more strict about use of the "restrict" keyword than the previous one; I have already made the necessary fix in libcvu for it to work with this SDCC, and will release a new libcvu version soon.
P.P.P.S.: Edited to fix links.
||Posted: Thu Sep 27, 2018 10:44 pm|
C99 mixed declarations and statements. At last! :)
No more ANSI-fication of code for use on the Master System.
||Posted: Fri Sep 28, 2018 1:41 am|
|Nice, good work man ;)|
||Posted: Sat Sep 29, 2018 1:47 pm|
|Yep, that restriction on where variables could be declared imposed quite a few difficultes on porting existing C code. Good to see it now works! ;)|
||Posted: Mon Oct 01, 2018 8:47 am|
Thank you guys for your tireless work on this great compiler!
Any news about absolute placement of variables in RAM and alignments topics? I would make some nice use of such features...
||Posted: Tue Oct 02, 2018 3:44 pm|
The final 3.8.0 was released last week.
There is the __at keyword for placing variables at a specific location (though in some corner cases its use gets complicated). Specifying alignment from C is not yet supported (except for the bare minimum required by ISO C11), but one could try to use inline assembler in a __naked function (or just use an assembler source file for allocating the space and make all the declarations in C code extern).
P.S.: Standard compliance will improve further for 3.9.0 (to be released sometime in 2019). We already merged support for struct / union assignment after the 3.8.0 release.
||Posted: Wed Oct 03, 2018 7:42 am|
My bad, I didn't express myself correctly. What I meant to say is that absolute placement of variables in RAM should also ensure that no other variable would be placed at the same RAM address, which is something that it's still missing IIRC.
Have you got an example for this? Thanks!