Difference between revisions of "SDCC"

From MSX Game Library

(Versions)
(SDCC 4.3.0)
Line 62: Line 62:
 
** Support for undocumented Z80 instructions
 
** Support for undocumented Z80 instructions
 
* Full change-log:
 
* Full change-log:
** C2X bit-precise integer types and bit-fields thereof for (except for pic14, pic16).
 
 
** 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 68:
 
** 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.
  

Revision as of 19:36, 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)

  • New features:
    • New calling convention (use register to pass function parameters)
  • Full change-log:
  • 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: