I have reviewed the documentation in detail and... I like it! It seems like a very capable assembler with some reasonable and consistent syntax. You get bonus points for good documentation too! It seems you have most things covered.Questions:
1. Does #IncBin and #IncSrc handle relative paths?
2. When declaring variables like 'SomeVar = $001800', are you required to always use long addresses?
3. Is there a way to output the pc or embed it into debug message like #Warn/#Error? I have to do this often to get the breakpoint I need to use to debug various specific areas and lines of code. I didn't see a way to do this.
4. Can expressions be used in variable declarations? Something like 'Foo = (5+2) - 1 * 7 ;my secret constant for sprite animation.'? What about a variable within a variable declaration? I'm getting at equivalent functionality for defines in xkas/bass. You can do some interesting things with them being able to define almost anything. Not all of that power is needed, but it is a frame of reference when evaluating abilities of schasm.Suggestions:
I know you probably choose #Byte,#Word,#Long,#Dword for consistency with all directives and ease of parsing, but what do think about also supporting traditional db (define byte), dw (define word), etc. type syntax many assemblers do?Comments:
1. #Var is a nice addition. It is annoying to add variables in the middle of your list, change your mind about a variable length throwing addresses of everything else off, and what not.
2. Interesting approach to #Org with the independence between platform address and file offset. That's great for more difficult mappings as long as it is not a burden for simple mappings. I see it is optional, but I'm not sure I understand how optional with the explanation given. If you have a no header, traditional hirom mapped ROM, and all your code is in the linearly mapped region for example, you wouldn't really have much need to declare file offsets more than once at the beginning. All other instances of #Org in the project probably wouldn't need it (nor would I want to have to declare it all the time). Is that allowed here? When can you omit the file offset on #Org exactly?
3. It's dangerous to make assumptions that some things will never be used. Either I saw, or I read about (damn old age, I can't remember!) a game that used brk to call a decompression subroutine, for example! Few would expect that usage, but yet it was done. Perhaps that was not the smartest thing to do, but I'm sure there are other cases where something was used unconventionally and it was actually very clever. I guess my point never assume something would never be used and use as an excuse not to put it in! You'll need another excuse! Small mistakes observed:
1. In both readme.txt and directives.txt your passage says 'changes how the compiler assembles its code.' Technically it's an assembler rather than a compiler.
2. typo in readme.txt - 'jmp Label ; legal, Label is vidible here'