Difference between revisions of "SDCC"

From MSX Game Library

(Versions)
(SDCC 4.2.0)
 
(7 intermediate revisions by the same user not shown)
Line 52: Line 52:
  
 
=== <tt>SDCC 4.2.0</tt> ===
 
=== <tt>SDCC 4.2.0</tt> ===
(currently recommended version for MSXgl)
+
Currently recommended version for MSXgl.
* New features:
+
 
 +
* ⭐ '''Main features:'''
 
** New calling convention (use register to pass function parameters)
 
** New calling convention (use register to pass function parameters)
* Full change-log:
+
 
* Known issues: None
+
* 🧾 '''Full change-log:'''
 +
** C23 <tt>memset_explicit</tt>
 +
** Support for <tt>--oldralloc</tt> has been removed from the z80 backends.
 +
** Full support for <tt>__z88dk_callee</tt> for the z80 backends.
 +
** Support for a new <tt>__sdcccall(1)</tt> calling convention in the z80 AS NEW DEFAULT.
 +
** Removed support for <tt>--profile</tt> for z80 backends.
 +
** The z80n port Z80N Core minimum version has been raised from 1.0 to 2.0.
 +
** Improved rematerialization support in the z80 backends.
 +
 
 +
* ⚠️ '''Known issues:'''
 +
** None
  
 
=== <tt>SDCC 4.3.0</tt> ===
 
=== <tt>SDCC 4.3.0</tt> ===
* Main features:
+
* ⭐ '''Main features:'''
 
** Support for undocumented Z80 instructions
 
** Support for undocumented Z80 instructions
* Full change-log:
+
 
** C2X bit-precise integer types and bit-fields thereof for (except for pic14, pic16).
+
* 🧾 '''Full change-log:'''
 
** Added all new general mnemonics from ASxxxx 5.40 except for .bank and enabled for all ports
 
** Added all new general mnemonics from ASxxxx 5.40 except for .bank and enabled for all ports
 
** sm83: sdasgb now can output cycles in listing and sz80 has accurate cycles for this processor except for branching
 
** sm83: sdasgb now can output cycles in listing and sz80 has accurate cycles for this processor except for branching
Line 69: Line 80:
 
** Many fixes for the type system and _Generic.
 
** Many fixes for the type system and _Generic.
 
** Adopted more of GCC, QuickC and tinycc tests.
 
** Adopted more of GCC, QuickC and tinycc tests.
** C2X nullptr, char8_t, memalignment, unreachable, typeof, typeof_unqual, auto.
+
** C2X bit-precise integer types and bit-fields thereof for. C2X nullptr, char8_t, memalignment, unreachable, typeof, typeof_unqual, auto. C2X keywords bool, true, false, alignas, alignof, static_assert. C2X bit and byte utilities.
** C2X keywords bool, true, false, alignas, alignof, static_assert.
 
 
** C90-C17 function declarators without prototypes.
 
** C90-C17 function declarators without prototypes.
 
** C99 variably modified types.
 
** C99 variably modified types.
** C2X bit and byte utilities.
+
** <tt>call_once</tt>.
** call_once.
+
** <tt>_sdcc_external_startup</tt> renamed to <tt>__sdcc_external_startup</tt> and supported for all ports.
** _sdcc_external_startup renamed to __sdcc_external_startup and supported for all ports.
 
 
** makeshift support for long double as another alias for float.
 
** makeshift support for long double as another alias for float.
  
* Known issues:
+
* ⚠️ '''Known issues:'''
 
** Most of the projects can increase significantly in final size.
 
** Most of the projects can increase significantly in final size.
** Bug with undocumented Z80 instructions generation that can make compile to file.
+
** Bug with undocumented Z80 instructions generation that can generate compilation errors.
  
 
=== <tt>SDCC 4.4.0</tt> ===
 
=== <tt>SDCC 4.4.0</tt> ===
* Main features:
+
* ⭐ '''Main features:'''
 
** Native support for ASCII R800, the MSX turbo R's CPU.
 
** Native support for ASCII R800, the MSX turbo R's CPU.
  
* Full change-log:
+
* 🧾 '''Full change-log:'''
 
** Optimizations for rotations.
 
** Optimizations for rotations.
 
** Generalized constant propagation.
 
** Generalized constant propagation.
Line 95: Line 104:
 
** Improved optimizations for code speed for stm8, pdk, z80 (and related).
 
** Improved optimizations for code speed for stm8, pdk, z80 (and related).
  
* Known issues:
+
* ⚠️ '''Known issues:'''
 
** On Windows, win32 version just doesn't works and win64 is... absent. You can use [https://sourceforge.net/projects/sdcc/files/sdcc-win64/4.4.0/ win64 version of <tt>SDCC 4.4.0 RC3</tt>] (same content than the official release).
 
** On Windows, win32 version just doesn't works and win64 is... absent. You can use [https://sourceforge.net/projects/sdcc/files/sdcc-win64/4.4.0/ win64 version of <tt>SDCC 4.4.0 RC3</tt>] (same content than the official release).
 
** Some projects can increase significantly in final size.
 
** Some projects can increase significantly in final size.

Latest revision as of 19:52, 30 March 2024

SDCC is the toolchain used in MSXGL to compile, assemble and link the sources files.

Supported version:

  • Embedded: SDCC 4.2.0
  • Last tested: SDCC 4.4.0 RC3 (Windows) and SDCC 4.4.0 (Linux)

Assembler

The assembler, sdasz80, is based on ASxxxx cross assembles.

sdasz80 syntax is almost standard except for:

  • Define instructions numeral values: must be prefixed with # character.
  • Define directive: must be prefix with . character.
  • Access to IX and IY register using offset: offset have to be write before the register name into parentheses.
Standard sdasz80
; Numeral
ld      a, 100
and     01111100b
ld      hl, 1234h

; Directive
db      100
dw      1234h

; IX/IY offset
ld      e, iy[0]
ld      d, iy[1]
; Numeral
ld      a, #100
and     #0b01111100
ld      hl, #0x1234

; Directive
.db     100
.dw     0x1234

; IX/IY offset
ld      e, 0(iy)
ld      d, 1(iy)

Versions

SDCC 4.2.0

Currently recommended version for MSXgl.

  • Main features:
    • New calling convention (use register to pass function parameters)
  • 🧾 Full change-log:
    • C23 memset_explicit
    • Support for --oldralloc has been removed from the z80 backends.
    • Full support for __z88dk_callee for the z80 backends.
    • Support for a new __sdcccall(1) calling convention in the z80 AS NEW DEFAULT.
    • Removed support for --profile for z80 backends.
    • The z80n port Z80N Core minimum version has been raised from 1.0 to 2.0.
    • Improved rematerialization support in the z80 backends.
  • ⚠️ Known issues:
    • None

SDCC 4.3.0

  • Main features:
    • Support for undocumented Z80 instructions
  • 🧾 Full change-log:
    • Added all new general mnemonics from ASxxxx 5.40 except for .bank and enabled for all ports
    • sm83: sdasgb now can output cycles in listing and sz80 has accurate cycles for this processor except for branching
    • struct / union parameters and return.
    • div standard library function family.
    • Many fixes for the type system and _Generic.
    • Adopted more of GCC, QuickC and tinycc tests.
    • C2X bit-precise integer types and bit-fields thereof for. C2X nullptr, char8_t, memalignment, unreachable, typeof, typeof_unqual, auto. C2X keywords bool, true, false, alignas, alignof, static_assert. C2X bit and byte utilities.
    • C90-C17 function declarators without prototypes.
    • C99 variably modified types.
    • call_once.
    • _sdcc_external_startup renamed to __sdcc_external_startup and supported for all ports.
    • makeshift support for long double as another alias for float.
  • ⚠️ Known issues:
    • Most of the projects can increase significantly in final size.
    • Bug with undocumented Z80 instructions generation that can generate compilation errors.

SDCC 4.4.0

  • Main features:
    • Native support for ASCII R800, the MSX turbo R's CPU.
  • 🧾 Full change-log:
    • Optimizations for rotations.
    • Generalized constant propagation.
    • New command line option --syntax-only to only parse the input.
    • Added C99 header inttypes.h
    • Added library functions imaxabs, imaxdiv, llabs, strtoimax, strtoll, strtoull, strtoumax, wcsncmp, wcstoimax, wcstol, wcstoll, wcstoul, wcstoull, wcstoumax
    • New r800 port to better support the ASCII Corp R800 and Zilog Z280.
    • Improved optimizations for code speed for stm8, pdk, z80 (and related).
  • ⚠️ Known issues:
    • On Windows, win32 version just doesn't works and win64 is... absent. You can use win64 version of SDCC 4.4.0 RC3 (same content than the official release).
    • Some projects can increase significantly in final size.
    • Some projects are broken when compiled with SDCC 4.4.0 (Clock sample and Phenix Corrupta project).

Links

For more information: