sjasmplus v1.14.1 is out

by sd_snatcher on 30-08-2019, 17:22
Topic: Development
Languages:

A new version of this powerful multi-platform Z80 cross-assembler was released, and includes many improvements and bugfixes. This is the Changelog since last v1.13.x release:

  • INCLUDE bugfix, now searching paths according to original documentation (may break some projects)
  • UNDEFINE had undocumented feature of removing also labels, cancelled (was broken beyond repair)
  • R800 MULUB was producing wrong opcode all those years... fixed
  • MODULE names can't contain dot any more! MODULE and ENDMODULE resets non-local label to "_"
  • --syntax option: "m" (switch off low-mem access warning) and "M" added, "A" removed
  • macro expansion can be inhibited by using "@" in front of instruction
  • expression evaluator was not stricly 32 bit (64b binaries could have produced different results than 32b binaries)
  • reading memory addresses 0..255 directly emits warning, use "; ok" comment to suppress it.
  • several tests added to improve the code coverage: coveralls.io/github/z00m128/sjasmplus
  • as tests were added, minor bugs were found and squashed (errors wording, etc)
  • refactored SHELLEXEC to use clib "system(..)" on all platforms (also MS VS), minor fixes
  • lua example "inc_text" (result of specific request from sjasmplus user)
  • listing fixed when Lua was used to emit bytes and also parsed lines of assembly source
  • MinGW windows exe prefers "/" file system delimiter ("" should still work on windows (only))
  • lot of small bugfixes and Cirrus CI infrastructure adjustments (windows MinGW build does run full tests)
  • MS VS builds stabilized and fixed, should now work mostly on par with MinGW builds (99.5%)
  • Using lgtm.com code analysis (did help to find new bugs and memory leaks)
  • UnitTest++ framework added for regular C++ unit tests, first few tests added

Relevate link: Download

Comments (7)

By Giangiacomo Zaffini 2

Champion (284)

Giangiacomo Zaffini 2's picture

31-08-2019, 20:40

Good news. I'm curious about Cirrus CI and UnitTest++ framework for C++ unit test, to say a thing.

By Ped7g

Expert (67)

Ped7g's picture

01-09-2019, 06:39

Hi,

about CirrusCI: you can probably start by checking .cirrus.yml file in the root of the project (and check last commit on github to see results of the build, like: https://cirrus-ci.com/build/5879935035506688 -> where you can click on any task and check build logs and try to correlate that to the config file). Rest of it is in the shell-script/batch files and in the main Makefile.

about UnitTest++: I just recently updated the INSTALL.md file with some quick description of my local workflow, and how to make this operational on your local install (if you have linux like me, you should be able to replicate the same setup, not sure about other platforms)... I'm using it on different projects for more than a decade (in it's older versions) and it's very lean/minimalistic, fast, simple and powerful unit-testing framework. Integrating it into sjasmplus went also quite smoothly, except my dislike for CMake, so I just throw all sources at gcc with general Makefile and it builds and works.

It would be actually very nice if also somebody else would have some understanding how I did set up these things and how they work, so if you are personally curious, go ahead and explore...

If you have some questions or you run into some problem, just open the issue on github, I will try to answer and help you with anything.

BTW about SJASMPLUS itself vs MSX:
Unfortunately I don't know anything about MSX (except that it is Z80 based), I'm more a "Speccy" guy, but AFAIK the sjasmplus should be well usable for these machines. If you are aware of some major issue which is hampering the usage for MSX projects, open the issue on github, so I can try to fix it. The v1.14.1 is one of the last v1.x versions, because a) I'm not aware of any big issue or bug any more b) I'm thinking about changing some of the default syntax and behaviour and rewrite even more of the original source code - if I do some of that, it will be released probably as v2.x to make it clear that the old sources may need (hopefully small) changes to work with it. ... So for these reasons it is important for me the v1.14.x versions to be rock solid and without any major issue... which v1.14.1 should be. :) :RNFF:

By DarkSchneider

Paladin (985)

DarkSchneider's picture

03-09-2019, 12:16

Would be nice a modern assembler that would output REL files for L80 linker compatibility.

By Ped7g

Expert (67)

Ped7g's picture

03-09-2019, 21:04

DarkSchneider wrote:

Would be nice a modern assembler that would output REL files for L80 linker compatibility.

If you will open the issue on the github with well defined technical specs of REL files for L80, I may take a look (or somebody else, eventually). The more the object code is "raw" Z80 machine code and meta data are as "extra" around it, the better chance of adding it easily, but if the object code is already modified compared to Z80 MC, then it would basically require many instructions to emit two different opcodes, technically turning such task into writing another assembler inside the assembler... So no promises given, except that I read through every issue on github.

BTW I don't feel about this variant of sjasmplus as particularly modern in terms of its source code, so far I spend about ~6 months making it rather *stable* and operating in accordance with documentation, than focusing on pretty code.

But I tried to use modern principles of QA, because as a user of the assembler, I have enough to fight with my own broken code, don't need any extra spice from assembler bugs producing wrong opcodes... Big smile ... so while I'm still kinda disgusted by some parts of the source, the bugs are now mostly gone... and some parts are slowly being replaced step by step, although the new code is often just a bit better, probably no good example of C++14 yet. Smile .. maybe later, over time...

By DarkSchneider

Paladin (985)

DarkSchneider's picture

05-09-2019, 13:29

Cr@p github requiring me to reset password for security and yahoo mail is down. Well before I forget here is what I have found about REL files specification, page 9 of the PDF.
http://www.retroarchive.org/cpm/lang/LINK-80.PDF

Then let's see if I remember to open the issue on github later.

By Ped7g

Expert (67)

Ped7g's picture

06-09-2019, 20:16

Added the issue myself: https://github.com/z00m128/sjasmplus/issues/80
(heh, has #80 ... what a coincidence).

But I would need lot of help with it, for a start some verified examples (source (small C or asm) + binary) what the correct result should be, with meticulously selected/created examples to exercise most of the specification (that's probably a week/two worth of dev-time of somebody who has that tool working and knows how to use it under regular conditions).

And then, if I will start implementing it, similarly skilled volunteer will be needed to validate real usability of it (as I don't expect myself to get familiar with this tool and have environment where I can run it, so that's I would go by first mimicking the binary outputs).

Also if I understand it correctly, the symbol name length is limited to only three bits? That's 0-7 chars only? (or maybe +1 trick used to get 1-8?) That's kinda ... ridiculous, considering the symbol names I'm using in my sjasmplus sources... will have to think about it, how to deal with it (of course some real life experience with the tool and real projects using the original one would give me some insight, how it was bearable with such limit).

By Grauw

Ascended (10707)

Grauw's picture

06-09-2019, 21:27

I think that is the limit. Back in the day assemblers often had limits on the length of symbol names to conserve memory. I remember being restricted to 6 characters in WBASS. But it’s indeed restrictive. The user will have to take care to only export short symbols.

The Gen80 manual also has a description of the REL file format (p. 108 (G-51)), and it also describes the 8-character length limit even though Gen80 itself can use longer labels (up to 20 iirc).