Hello all, I'd like to present to you a project I've been working on for about a week now, and I believe it is finally ready for first usage testing.
It's called BSFOTA: Backspace Sixty Five O Two Assembler.
I built this assembler out of frustration trying to use other ones that are available, since most do not work on modern operating systems or have quirks that make them odd to use. The ultimate goals of this program are:
-Portability
-Compatibility
-No nonsense
-Ease of use
The assembler, as it presently stands, is fairly lenient on most syntax when it comes to math and numbers, although there are still "quirks" to the design that I will be working out as I go, to fulfill the "No nonsense" goal of the design. The program comes with a man page accessed by -man that has information on most of the quirks, but I'll list a few here (one of which I know isn't in that file explicitly)
First, the one not included in the file. I did not support octal notation yet, but it's very easy to add, and is the next thing I'm working on
INA must be used for incrementing A, other syntaxes are not allowed. This is to allow A to be used as a var name, in macros for instance.
Not many directives are supported yet, although the necessary ones are, they are: .ORG .x8 .x16 .m8 .m16
There is no "follow along" support yet for managing data widths for immediate and indexed data. This was planned from the beginning, and a system is in place to keep track of P, but it is not being used presently, since it can get rather messy in certain scenarios. It will be added as an optional feature later, I wanted something that was offered the user full control over what gets laid out and when.
Advanced Macro support is not implemented yet. By this I mean "IF, UNTIL, REPEAT, etc". However, conditional compilation by using IFMA keyword is implemented and available for use.
There are a few other quirks but you can read the man page for all of them. On to some of the design.
The program is written in Java, targeting Java SE 8, which is currently the standard LTS release, Java 11 is the next LTS, and it should be compatible with 11 as well.
The jar binaries I will be releasing are executable, no need to point java to the class it needs to start at. Simply open a command window, and type "java -jar <name-of-jar>" in the same folder as where the jar is located. If java is not in your PATH on windows you may need to get it. The program should run fine on either x86 or x86_64 java. It should probably run fine on OpenJDK as well, and any ARM revisions of java out there.
The program was built to mimic many Linux programs as far as switch design. -i is for input file, -o is for output file, and other switches are as short as possible while being unique to what they do. Running the program without any arguments will show the help page, or -h can be used to get to the help page. -man can be used to get to the manual page (which needs expanding).
The project is released under GPL v2, it is FOSS and I plan to keep it that way. I forsee this assembler as being the assembler for the future, where others may die off or become incompatible, this one should remain compatible for many years to come, and if it becomes incompatible, the source is available and can be modified to make it compatible.
This is the first assembler I've built for a real processor. I've built assemblers for some custom scripting languages that worked off opcodes and operands before, but this is definitely still new to me. Because of this, I urge caution on using it, you should verify the code it outputs against a known working assembler, and please let me know if it is making errors.
You can find the git repo
here I've added wiki and issue tracking to the repo so the community can help improve this project.
Please feel free to give any suggestions for changes or features or anything really. This is a passion project for me, and I really do want it to be as useful as possible.
I'll use this thread as the main discussion area for this, and I will attempt to post any updates here as well.