Version 1.9 7297 bytes 1. Fixed a dangerous bug - forward relative jumps of (128-255) were being allowed and actually coded as 0x80 to 0xFF, which worked out to be backward jumps - symtab.s Version 1.8 7295 bytes 1. Stole a few bytes by defining the extensions as words in ax before storing them Version 1.7 1. Added the binary operator !, which takes two byte constants and makes them into a word 2. Fixed bugs with the ! operator (lower byte duplicated) 3. Fixed bugs with non-error reporting of backword jumps of more than 128 bytes. (Misplaced label on too large operand) Version 1.6 1. Added a variable SavedStackPointer that keeps track of the stack for each assemble file. Filled in Assemble in asm.s. Also in direct.s, it is pushed and popped for include files to keep stack consistency. 2. Added some error recovery - only one type - resync at end of line Stack Pointer is restored to where it was. List file may contain junk. Don't know as yet. Still aborts on severe errors. The undefined error messsage in symtab.s had to be treated specially. Output file is still generated. 3. Fixed the include error message. Instead of showing the name of the included file in the error message, It shows the name of the file in which the failed include statement occured. Fixes to direct.s and reorganization to OpenInputFile in asm.s 4. Added a never defined flag so that the assembler can continue with assembly even if a symbol is not defined. Set in symtab.s 6. Added the not operator to the expression evaluation section - expr.s For a new operator the procedure is a. add the operator in IsOperator in the right place b. if the operator is unary, add it in the IsUnaryOperator too. c. add the code to evaluate it in Evaluate expression 7. Allows byte sized values to have 0 or ff as higher byte - to accomodate the unary not, else !0x80 was not allowed as a byte operand. Changes to support.s Version 1.5 1. Modified symtab.s to add a function RecordXref that puts the index of symbol, filename and line no into the list file 2. Modified expr.s so that it calls RecordXref in the middle of processing an expression - only for real variables - not constants or fakes. 3. Modified lister to report number of references to each variable and to list the references symbolwise 4. Removed redundant code in asm primarily Is8bitregister and Is16bitRegister in support.s 5. Removed redundant equates and Messages - size mismatch Version 1.4 1. Instead of printing the symbol table onto the screen it puts the symbol table onto the list file. 2. The list file has the symbol table proper and the string table 3. To make data structures common to the assembler and the lister and to prevent duplication of work, two include files have been created. dos.i with the equates for DOS functions and symtab.i with the structures for the symbol table. 4. The message displaying functions have been separated out to another file called display.s. 5. The functions in display.s (except for PutCarriageReturn and DisplayRegister) now keep track of the number of characters that have been displayed. 6. The symbol table being dumped on the screen is disabled, only the .lst file is created. ListSymbols from symtab.s was deleted. and the call from asm.s 7. A separate program lister was added which prints out the symbol table from the .lst file 8. display.s was putting out a LF and a CR in that order, which was confusing editors - e.g. MKS vi. Version 1.3 1. The filenames are directly put into the string space instead of present filename a. One variable presentfilename is removed - save space b. Changes to asm.s and direct.s (for includes) 2. The print stats function was removed 3. The output filename is accessible throughout the programs execution 4. The output file is deleted if an error in assembly is detected. 5. Can handle infinite (Promises!) path length one error message removed - path too long. message.s 6. Opens List file too. The list file name is on the string table too. added two variables - ListFileHandle and ListFileNameOffset 7. Doesn't print the name of the file that it is assembling any longer. or the names of the output files. 8. Doesn't display assembly successful at the end either. - silent on success. Version 1.2 1. Accepts char constants - in single quotes, wherever constants are allowed. 2. Accepts hex constants - prefixed by 0x, with overflow checking. 3. Accepts negative byte constants - complained earlier.