Releases: llvm-mos/llvm-mos-sdk
Releases · llvm-mos/llvm-mos-sdk
SDK v17.0.0
Breaking changes
__from_asciinow returns an int, and itswritecallback does as well. This allows it to forward an EOF error code from its internalwritefunction and exit early.fpos_tis now 32-bit for compatibility with cc65. If you need files larger than 2GiB, you probably don't want a 6502.
New features
stdiois now feature-complete (parity w/ cc65) forcommodorefamily targets- Text mode now converts at runtime from the execution character set (always ASCII) to the platform character set (PETSCII on non-cx16 systems).
Other changes
- The minimal stdio's FILE pointers are now non-null and all different.
- The simple
ungetcwas moved into the minimal stdio and the minimalgetcharaltered accordingly.
SDK v16.0.0
Breaking changes
__from_asciiand__to_asciinow take a void pointer to a context object and pass it though to the read/write callback. This is a trick fromdl_iterate_phdrto allow passing general lambdas that refer to an ambient context.
New features
- Port
fwritefrom PDCLib; port cc65 file writing backend (write) forcommodore- Known issue: Doesn't yet support ASCII->PETSCII translation in text mode; outputs as if opened in binary mode
Bug fixes
SDK v15.3.0
New library features
- All of the below only support the
c64. Picked this arbitrarily; other backends will come later. fopen- There's not actually much you can do with open files, and if you try to use most
stdiofunctions andfopenin the same project, the link will fail.
- There's not actually much you can do with open files, and if you try to use most
fclose(with automaticfcloseon exit)renametmpfiletmpnam
SDK v15.2.0
New features
Bug fixes
- llvm-mos/llvm-mos@d689274 - Fix ld65 "invalid argument" error on Windows when LLD does multiple passes (ca65 integration)
SDK v15.1.0
New targets
- #329 - Initial Atari Lynx support (
.bll.o) -mos-lynx-bll-clang- @asiekierka
SDK v15.0.0
Breaking changes
- llvm-mos/llvm-mos#456 - 65816 assembler changes - @asiekierka
lda >addrwas previously interpreted aslda mos16hi(addr), but now will be interpreted aslda mos24(addr). This is unlikely to break production code.lda <addr8was previously interpreted aslda mos16lo(addr), but now will be interpreted aslda mos8(addr). As the two relocations are functionally (but not semantically) equivalent, this should not break production code.- Likewise, functional (but not semantic) changes involve the relocations emitted by immediate expressions (
lda #val).
New features
- #316 - Add C++ fixed point math library - @jroweboy
- Supports various fractional and integral bit sizes.
- Supports user-defined literals for common sizes (e.g.,
9.4_12_4is the 16-bit fixed point number with 12 integral bits and 8 fractional bits that is closest in value to 9.4).
Bug fixes
-
llvm-mos/llvm-mos#456 - 65816 assembler changes - @asiekierka
- The immediate and address modifiers (
#<,#>,#^,<,!,>) now adhere to WDC recommendations as documented in the 65816 datasheet. - In particular, this means the behaviour of
lda >addrchanges, whilelda !addrandlda #^addrhave been introduced.
Immediate expressions now emitR_MOS_IMM8andR_MOS_IMM16, while address expressions now emitR_MOS_ADDR8andR_MOS_ADDR16relocations. - Some error messages have been adjusted to more accurately represent the assembler's limitations.
- Bugs/limitations in the SPC700 assembler's handling of
addr + Xandaddr + Yaddressing mode syntaxes have been fixed, and a test has been added. SandRcan now be used as register names in stack-relative addressing modes instead ofSPandRP. This matches WDC 65816 and 65EL02 documentation/recommendations, respectively.
- The immediate and address modifiers (
-
dc85a7d - Fix
is_floating_pointr_vC++<type_traits>typo
SDK v14.2.0
New targets
- #324 - Port to the Watara Supervision (
mos-supervision-clang) - @asiekierka
New features
- llvm-mos/llvm-mos#355 - 65816 assembler improvements - @asiekierka
- Add support for forcing "long" addressing mode with
lda mos24(addr). - Finish support for
$ml,$mh,$xl,$xhmapping symbols. These mark the state ofMandXflags required to disassemble a given opcode, allowing tools likellvm-objdumpto distinguish betweenlda #$eaandlda #$eaea. This information is gathered from the instruction itself -.a8/.a16/.i8/.i16or whatever we end up implementing to set the default instruction encoding can then simply affect which instruction is selected in the parsing process. Tests have been provided to match other architectures with mapping symbols. - Add missing
BIT #$eaeaopcode to 65816.
- Add support for forcing "long" addressing mode with
Optimizations
- llvm-mos/llvm-mos#452 - Correct register allocation cost values for 65CE02 - @asiekierka
- llvm-mos/llvm-mos#453 - Avoid commuting operands when doing so would lead to fewer trivial copies - @asiekierka
SDK v14.1.0
New features
- llvm-mos/llvm-mos#449 - 65CE02 - Add assembler support for relaxing long branches - @asiekierka
- llvm-mos/llvm-mos#448 - SPC700 - Emit MOV imag8, immediate instructions - @asiekierka
Bug fixes
- #321 - Disable ZP LTO on CP/M-65 to work around #320 - @davidgiven
Misc
- #319 - Print help text for simulator MMIO interface - @asiekierka
SDK v14.0.0
Breaking changes
- 8a21f34 - Swtich to ISO mode for Commander X16
- The spirit and letter of the C standard state that the effects of
printing printable characters in the execution character set (ASCII)
should produce the corresponding character on the display. Since the
Commander X16 has full ASCII support, we need to switch to ISO mode if a
character could ever be output to the screen. This is similar to the
shifted PETSCII switch now done for other Commodore family targets.
- The spirit and letter of the C standard state that the effects of
- 7714ed4 - Translate
\btoCURSOR LEFTon Commodore- Backspace is specified to move the cursor to the previous position on
the current line, and that's precisely whatCURSOR LEFTperforms.
- Backspace is specified to move the cursor to the previous position on
- 8f468fc - Rename
__char_convto__from_ascii. - 90c3977 - Split
getcharinto__getcharand__to_ascii. getcharis now a library function, and the target-specific hooks are__getcharto get a target character, and__to_asciito convert a sequence of target characters into an ASCII character.- 90c3977 - Correct target to ASCII mappings for
getcharatari8,commodore, andcx16now have analogous mappings forgetcharandputchar.
- 069e059 -
errnovalues now follow Linux.
New features
- All remaining
<stdio.h>functions have been implemented. They only support the filesstdin,stdoutandstderr, and there's presently no way to redirect them or open other files. This implementation I'm calling the "trivial"<stdio.h>; we'll also have a "full" implementation that gets linked in if a file might possibly be opened or redirected.- The
scanfdoesn't yet support floating point numbers.
- The
Bug fixes
- #314 - Fix
reallocreturning memory regions that overlap with previous allocations
SDK v13.0.0
Breaking changes
- f99cf88 -
printf%pnow prints as if%#x, not%X(i.e.,0xabcd, notABCD).
New features
- #303 - Add
fmin/fmaxfunctions to<math.h>- @mlund - f99cf88 -
printfnow supports%ato print floating point numbers in hexadecimal
New examples
Optimizations
- f99cf88 - Rewrite
printfusing PDCLib- Simulator
printf("Hello %d\n", 6502)- Before
- Size: 6520
- Cycles: 8865
- After
- Size: 4185
- Cycles: 6084
- Before
- Simulator
printf("Hello %f\n", 6502.0)- Before
- Size: 40482
- Cycles: 41425
- After
- Size: 9772
- Cycles: 219893
- Before
- Simulator
Bug fixes
- #306 - Make
__heap_startrelocatable, fixing heap on CP/M-65 - @davidgiven - f99cf88
printffloating point printing is now correctly roundedprintfnow displays the full integral part of%finstead of bailing and using%e