And what is it about the current version of the assembler you think isn't working?
I imagine by "Not Working" he means "Unfinished" -and he's not incorrect about that.
There's a list of things I've mentioned I'm still working on. It's
functional, but in terms of working - eg, completeness, I'm still getting the functions to work as intended.
Today, the Macros are finally nesting correctly. 32 levels of nesting reserved in memory. It takes 6 bytes of reserved memory for each level of nest, and it's working pretty well. Macros can call macros, can call macros. I even wrote an iterative macro to call itself until it reached maximum depth using conditional assembly, then I called it again to test level trapping, and finally backed it out all the way to the original call and terminated the macro. The amount of nesting allowed can be changed, but presently, that's the limit.
Macros can call Includes, and Includes can call Macros, though the intent is to include system macros rather than bind them to RSTs like the PC does.
Macros and Includes both allow up to 10 arguments to be passed into it via the calling line and Binary includes are allowed also.
I still need to write the routines to put screen output to a file instead of the console too.
Then I need to add the ability to enter switches and values via the command line from CP/M and it's complete... A little cleanup maybe, but the point then is something I agree with. I need to get it working correctly as I want, then begin playing with the optimisiations.
Though the first priority I'm going to have is documenting it all. I'm already forgetting stuff I added in already. And what commands I used. And going back through the source to look isn't optimal. I can implement other data structures later to improve speed if it's an issue, but having it complete, them making a compatible cross-assembler is the primary objective. The second priority on completing it is writing the cross-assembler to replace the current cross-assembler.
The current technical limits/capabilities of my assembler are;
* 32 levels of Macro nesting
* Memory-limited levels of Include nesting
* Unlimited Binary Includes
* 9 arguments transferred to called Includes or Macros ( per call. )
* Global and Local variable capabilities, and system labels can be turned on and off and reused concurrently.
* Ability to all labels in a structured manner.
* Ability to use same label name for Group labels and Data lables.
* Full z80 opcode set ( including undocumented codes )
* Temporary Labels that can be removed mid-assembly.
* One or Two pass iterations with macros and includes.
* Intel Hex Output capable
* Binary Output capable
* Offset PC and direct souce code access to relevant system functions (eg, pass, PC, Macro depth, etc ).
* Simple console messaging output.
* System labels accessible if required ( some )
* Presently less than 11K (<8K Objective, <12K Threshold) - I think I'll make it.
* Does not require linking ( also does not create link files ) as is intentionally designed to create binaries direct from source.
* JIT assembly ( not implemented yet ).
* PRN Output ( not implemented yet ).
* Output console to a file instead of screen ( not implemented yet ).
* Matched Cross-Assembler (source compatible - partially implemented ).
* Can assemble itself from source.