In the beginning I assembled my machine language programs by hand for the Apple ][ computer. As you can imagine this a very time consuming and error prone way of programming. If you add or delete one byte of code somewhere in between your program you'll have to recalculate all destination addresses and pointers. It is also very likely to have coding or calculation errors.
After buying some disk drives for my computer I went looking for a suitable assembler.
All assemblers available for the Apple had a bulky user guide and were quite difficult to use.
For some the source files were stored in text format and reading text files with the Apple was something you really didn't want to do.
The Apple read 1 character at a time from disk.
And by the time it decided to read the next character, the disk had already rotated to the next sector.
So you had to wait a whole revolution of the disk before it could read the next character, and so on.
I got hold of the SC-Assembler, made by Bob Sander Cederlof. It had a very easy to use structure and disk access was not as fast as with the Applesoft Basic, but it was acceptable. I had no trouble learning this assembler and it had everything I wanted on board. I created a few programs with this assembler until I started wanting more. I wanted to have cross assemblers for a few other processors. Some crosses were available for the SC-Assembler, but with many limitations. The 6502 version of the SC-Assembler had been developed further over the years. Other crosses however were stuck at version 1.0. I created some programs with a 6800 and a 6809 cross version of the SC-Assembler, despite of its limitations.
One day I was building something with a 8048 processor. I did not have a cross-assembler for it and therefore I assembled the whole program by hand again. It is not such a big problem because the 8048 had only 2k of memory. Even though I wasted a whole week to find a silly bug I introduced by translating a mnemonic to the wrong hex code. And that's when I finally decided to write my own cross assembler.
Programming the assembler myself had the advantage that I could make all the crosses that I needed. I wouldn't have to go look for a new cross, I could simply write it myself. An other advantage is that I could add a few new features.
First I started by disassembling the whole 6502 version of the SC-Assembler, to learn how it is done.
I must say that I learned quite a lot by looking at the code.
Once I knew how the assembler worked I could start writing my own version, the SB-Assembler.
Apple had developed a 16k RAM card which was used for several different purposes.
The SB-Assembler was programmed completely in this 16k RAM card to leave as much conventional memory free as possible.
The 16k of RAM were squeezed into a 12k address space.
The top 2k of this 12k range could not be used because the monitor ROM had to be copied into it to maintain DOS functionality.
Nowadays we would call this monitor ROM the BIOS, for it handled character input, display output and a few other house keeping tasks.
The bottom 4k was bank switched to get the total of 16k available.
I programmed all the directives into one of these 4k banks.
The rest of the assembler core was programmed in the remaining 6kB.
This would leave the extra 4k bank free for the cross overlays.
Every time a program is assembled the selected cross overlay was loaded into this 4k bank.
This structure proved to be working very well.
It took me half a year to complete the SBASM and a few cross overlays and I was very satisfied with the end result. I have developed many programs with it for different processors like the 6502, 6800, 6809, Z8, Z80, and 8048.
Like everyone else I had to buy a PC to keep up with time.
And 2 computers on my desk was a bit too much, so the Apple had to leave.
This presented me with a little problem, I could not miss my beloved SB-Assembler anymore.
I went to the local book store and bought 2 heavy books, one explaining 8086 machine language, the other explaining the BIOS of the PC.
And after reading these two books cover to cover I was ready to program my first assembly program on a PC, the SBASM.
I do agree, looking back at parts of the code that were made first I start to laugh.
Gradually the code became more effective.
In three months time I finished the first version of the assembler.
It took a few more moths extra to complete all the crosses.
The PC version was 99.9% upward compatible with the Apple version.
The only differences were the filename structure, which is totally different in the PC, and the inability to write the object file to internal RAM.
To compensate for these minor differences I added a few extra features to the already rich feature list.
I use the SB-Assembler for all my stand alone projects without ever facing any difficulties. I do admit there were a few little bugs left in the assembler, but none of them affected the functionality, stability or usability of the program.
Finally I decided to make the SB-Assembler available to the public. My home page was on line for almost a year then and it was time to fill it with my projects. We moved to a new house early 2001 and my hobby corner was not ready yet. Unable to do any hardware projects without a decent hobby corner I was forced to work on software projects only for a while. The SB-Assembler was the perfect project to waste all of my spare time on.
The most important job that had to be done in order to make the SB-Assembler available to the public was writing this user manual.
I wanted it to be as complete as possible and that took quite some time.
At the same time I revised the complete code of the SB-Assembler to get rid of the minor bugs that were known to me. And before I made the SB-Assembler public I wanted to expand its number handling system from 16 bits to 32 bits too.
All these efforts resulted in the first SB-Assembler made public in the first half of 2002. As time goes on new Crosses may become available and some bug fixes may be released. Please refer to the news page to find out what's happening.
The latest version of the SB-Assembler can be downloaded here.
As we grow older we also become wiser, generally speaking.
Finally I have seen the light, Linux has the future.
At least it has for me because I have switched over from Micro$oft to Linux completely.
Unfortunately Version 2 won't work on Linux, unless I use a dosbox emulator. But once you learn how to work with the Linux command line interface you won't be able to work with the pathatic DOS command line interface anymore. DOS doesn't even come close to the power of the Linux command line interface.
Hence the idea of building yet another, brand new, multi platform, version of the SB-Assembler was born. After a few false starts work on the new project was started on 30 July 2009. The project has stalled a couple of times before it was finally released caused by the limited amount of spare time I had (and the low priority the SB-Assembler project mistakenly got, I'm sorry about that).
Well, Version 3 is here, and I'm proud of it. It is multi platform, it runs on Linux, MACs and the other operating system. It even runs on a Raspberry Pi! It has more powerfull features than Version 2, while maintaining backward compatibility with Version 2. Programs created for Version 2 can all be assembled by Version 3, producing the same end results.
However Version 3 was still in its Beta phase.
In 2016 I've made it my New Year's resolution to finish Version 3 for once and for all.
Well, it probably will never be finished, there's always something I would like to add.
But I wanted it to finally leave the Beta phase.
And here it is, the first official SB-Assembler Version 3.01.00 is ready. At the same time I have upgraded it to Python3, as that's expected to be the future anyway.