- NEW FOR VERSION 1.1 - Cybergate, my ISP, discontinued their service in my area. Thus, I have another new EMail address: jharris@poboxes.com New distribution method and installation procedure. Please read INSTALL.DOC for details. Configuration utility CONFIG.COM now provided. MAE now has full text substitution macros. This adds a tremendous amount of power and flexibility to the macro processor. The syntax is completely different, so please see the macro section of ASM.DOC. The ':' character can no longer be used in label names, due to conflicts with the new macro processing. The ';' character can't be used either, but was mistakenly listed as a valid label character in the docs. This hasn't been usable as a label character for many years. Conditional assembly has been changed to be more standard, and more complete. IFE, IFN, IFP and IFM have been removed and replaced with .IF, .ELSE, and .ENDIF. Complementing the .IF statement are four new expression operators, <, >, =, and # (not equal). <, >, and = join the list of symbols that are no longer allowed as part of a label name. I am sorry for any inconvenience or confusion these changes may be causing, but I suppose their use was non-standard to begin with. Lastly, .IF statements can now be nested up to seven levels deep. Please see the conditional assembly section of ASM.DOC for full details. Editor key macros can now be saved to and loaded from disk files. New config bit for editor to start with Caps lock on or off. Improved screen handling to do minimal text redraws when cutting and pasting. Improves screen redraw speed, most noticably on XEP80 and software 64/80 column modes. - NEW FOR VERSION 1.0 - I have a new EMail address: jharris@cybergate.com 40 column limit on source code lines has been removed, although text is still limited to 79 columns. Lines will scroll horizontally to display the extra columns. There are two software screen drivers provided, that allow 64 column and 80 column editing on a high-speed Gr.8 screen. If your machine has Antic-compatible bank select RAM, using the drivers will not decrease the size of your source text buffer! The drivers were written by Itay Chamiel. Thanks Itay! Installation of these software drivers, as well as support for 64K machines, is described in the file INSTALL.DOC. Disassembly supports 16-bit operands. See the D command in DEBUG.DOC for details. 24-bit address support in debugger, including hex and decimal values for the "=" math function. Because of 24-bit address support, I had to move the locations of address variables. This affects the User function parameters, and I apologize for any inconveniences. The parameters that used to be at $F0, $F2, and $F4 are now at, $F0, $F7, and $F3. I know the order is unusual, but there are internal reasons. Debugger memory display command changed somewhat due to screen width limitations with 24-bit addresses. New ASCII-only mode supported. See DEBUG.DOC for details. While tracing, a new option L has been added to RTL from 24-bit subroutine calls. (65816 version of MAE only). New assembler pseudo-ops .CByte for making ASCII strings with the most significant bit set on the last character. Also .FLoat for defining constants in the OS floating point format. New editor command Ctrl-; can be used to comment or uncomment a block of text by adding or removing ";" characters at the start of each line. Mark the start of the block with Ctrl-Z, and then press Ctrl-; at the end of the block. You can also mark one line at a time by using Ctrl-; without a Ctrl-Z block mark. Editor command Ctrl-D, which used to just duplicate a single line, can now be used to duplicate an entire block if there is a Ctrl-Z block mark set. This makes it consistant with the operation of Ctrl-;. Shifted 1200XL function keys should now work for moving to the beginning or end of lines, or the beginning or end of the file. Cursor column position is retained while scrolling in the editor. MAE was not fully ZP clean, but should be now. The debugger will use High-speed SpartaDOS SIO routines, if present. Unfortunately, sector reading and writing will no longer work on the old 400/800 operating system as a result, unless you are using SpartaDOS. In the editor, Ctrl-N did not work properly when pressed on a blank line. Conditional assembly could get messed up when source code contained a label on a line by itself. .BI pseudo-op was broken in version .99. New version of Hyper E: included, which fixes an incompatibility with TextPro, and adds support for the SDX CON: device. - NEW FOR VERSION .99 - 65816 opcodes and tracing are now supported in the debugger. There is still no support for 24-bit address entry, so technically, the debugger can be considered 65802-compatible. There are new pseudo-ops in the assembler. ".02" can be used when you need to assemble 6502-only code. When this opcode is active, all 65816 specific instructions will be flagged with a "NOT 6502" error. ".816" selects the 65816 assembly mode. The initial assembly mode is set to whichever processor version of the MAE assembler you are using. The initial version sign-on message shows the processor version of MAE, which will also be the default assembly mode. There has been a significant increase in assembly speed. MAE will be about twice as fast, depending on the size of your source files. Small files will show less of an improvement, whereas larger files will show an even bigger difference. Assembly time is closer to a linear relationship to source file size, whereas it used to be somewhat exponential. There have been big changes in memory configuration, resulting in twice as much symbol table space, a little more source space, and all of main memory from $4000-$7FFF free to the user. The region from $400-$5FF is no longer used by MAE. The debuger has been moved to bank select memory now, reducing the main memory usage to $B700-$BBFC. In its place however, MAE uses up to three banks of extended memory for optimal configuration. Due to these and other changes, the format of the memory configuration bytes at the start of the file has changed. Consult MAE.DOC for full details. MAE actually still runs in 64K machines, and will continue to do so, but the amount of RAM available for source text has dropped from 17K down to only 14K for 64K'ers. Two new operators have been added to the assembler and debugger expression evaluators. You can now use "^" for exclusive or, and "\" for modulo. Because of this, these characters can no longer be used in label names. There are two new editor functions. You can move an individual line of text up or down with respect to surrounding lines. Press Shift-Ctrl-[ to move a line up, and Shift-Ctrl-] to move it down. In a similar function, you can move a label by itself up or down to adjacent lines. Press Shift-Ctrl-( to move the label up, or Shift-Ctrl-) to move the label down. Lines that start with comments or other labels will automatically be skipped. Full SpartaDOS directory listings are now supported. The "*" at the start of a marked text block would not get erased on lines that did not begin with a label. Also, the location of the block start was not getting updated when surrounding text was edited. There was a bug which prevented macros from being recognized when they were defined after a .IN included files. JVC and JVS macros were missing from the example MACROS file. There was a bug that could sometimes clear your entire source text if you used the Esc-V menu option to get the value of a label which was undefined. This bug only occurred after an assembly aborted with one of a few fatal error types. I didn't realize that MyDOS could use ':' characters as subdirectory path separators. This confused MAE's ':' search routine to determine if full filespecs (or just file names) were being entered. The effect was that MAE would not load files properly from subdirectories unless you used '>' for path separators. It works better now, unless you have subdirectory names that are one or two characters long. If you had a directory named "T", and tried to load "T:FILE", it would think you were referring to a T: device. Thus, it is recommended that you either always use the '>' character as a path separator, or enter complete filespecs. Either "T>FILE" or "D2:T:FILE" will work fine. Fixed two problems with using "." to get the value of defined labels from the debugger. Because control was passed to the assembler's expression evaluator, the default number base became decimal instead of hex. Thus, if you entered ".LABEL+10" in the debugger, you would get the value at LABEL+$A, and not LABEL+$10. Processing is now returned to the debugger once the label has been decoded, making the rest of the line behave consistantly in regards to hex numbers. Also, expressions like ".>LABEL" were returning the wrong value. The debugger command V has been changed, and is easier to add user extensions into. Please consult DEBUG.DOC for details. The editor could corrupt bookmarks and ^J marks if they were within a text block that got deleted, and close to the top of the file. MAE was not restoring the BRK IRQ vector when it exited, and it now does this by default. Because it is sometimes desirable to leave the BRK vector installed, such as for trapping BRKs in programs called from DOS, you can follow the X command in the debugger with any other character to exit with BRK trapping still active. Note that you must be careful to not overwrite any part of the MAE program, including bank select RAM, if you want MAE to successfully trap BRK instructions that occur after you leave the assembler. The debugger should no longer lock up if it encounters a BRK when output is redirected to an SIO device. Also, the inconsistancy with supplying filespecs in the O command has been removed. All filespecs are now treated the same way, for supplying Dn: in front of any input that does not in itself contain a ":" character. To send output to the printer, you should now enter "O P:". - NEW SINCE VERSION .95 - Conditional breakpoints were not working in the .95 version. The 65816 version of MAE has a new register display that shows 16-bit registers for A, X, and Y. Processor status bits are now displayed as normal characters for bits that are off, and inverse characters for bits that are on. When changing bits, either normal/inverse, or 0's & 1's may be typed, and are freely mixable. The Emulation Mode shadow bit is also displayed, and can be changed. Make sure you have native mode interrupt handlers available before changing this bit. Also note that this bit, just like the rest of the status register display, only affects the state of programs run or traced from the debugger. Clearing the E bit will not instantly put the machine into native mode, but native mode will be set as soon as any user programs are run or traced. In the memory configuration bytes, entering 0 for the text buffer start or end would use the value from LOMEM or MEMTOP respectively. Now, this ability also applies to the symbol table addresses. 1200XL function keys were not working, and should be fixed now. It was pointed out to me that memory expansions above 128K use the high bit of $D301, which is a problem for the way I programmed the .BA pseudo-op. Thus, .BA now stores the entire byte at $D301, and a new pseudo-op, .CA, has been added for bank select cartridge support. I also realized that support for bank select carts is worthless when the assembler resides in the cartridge address space. My personal version is located at my LOMEM, and so I didn't realize the problem here. If anyone wants a custom version of the assembler located at a different address, please let me know and I will be happy to provide it for you. The .WO and .LO pseudo-ops support multiple addresses now. There are misc. small cleanups, such as .EN is no longer required at the end of the source text, "()" characters are no longer necessary for enclosing parameters of a macro definition, and other cosmetic changes. Disregard the earlier note about default drive detection being different in the .95 version. MAE still detects Sparta's default drive correctly, even if MAE is started from a different drive. - New since version .93 - When assembling code to disk, the .MC pseudo-op can now be used to make the object code load at a different address than where it is assembled, much like the way the function already worked in RAM. When recording key macros in the editor, you must now use Ctrl-3 to end recording, instead of Esc. This allows Esc menu commands to be entered into macros, primarily to support a chain of assemble commands when your program contains several modules. The next version of the assembler should allow loading and saving macros to disk, which will further enhance the macro usefulness. Hunt routine in the monitor now automatically skips over the area from $D000-$D7FF. So you can search the OS using $C000-$FFFF and not generate any hardware accesses. Hunt and Memory display routines would not always stop when the address reached $FFFF. This has been fixed. I removed the automatic OS routine detection from the trace function. Now, you must use the S key to trace through OS functions in one step, just like any other subroutine. You can also use the R key if you are already within the OS code. The reason for doing this, is that it makes things more consistant, and also allows you to trace code in the $C000-$FFFF area if you need to. Pseudo-ops are now available in the debugger's single line assembler. The debugger now includes a built-in function for switching between display lists for the debugging text screen, and your program's screen. It uses the letter "V", for change View. Both V and the "U" user function can be called from both the trace mode, as well as any paused memory or disassembly listing. The "%" key did not work as a wildcard in the debugger, since it was interpretted as the start of a binary number. I have changed the default wildcard to "?" in both the debugger and editor. This propagated through a few of the debugger command key assignments, along with a few other changes as well. Overall, I feel the key assignments have been improved, and they won't be changed from now on. Here is a sumnmary of the changes: ? - Change Wildcard = - Evaluate expression V - Change display view \ - Disk Directory The editor uses the same wildcard configuration byte as the debugger. You can use the debugger's "?" command, or a Cntl-? in the editor to change the wildcard character. Both modules will use the new assignment. 1200XL function keys are now supported for moving the cursor. You may enter Ctrl-key graphic symbols or international characters into the editor by pressing Ctrl-A, and then the key you wish to enter. Now uses an improved method for detecting the default drive when first loaded. This should be compatible with all SpartaDOS versions, and cause no problems for non-Sparta DOSes. It also allows you to specify a different default drive from the command line, such as, "MAE D2:". The MAE.COM file now comes with a RUNAD address installed. The SpartaDOS bug that prevented using the RUN command to return to a program which used RUNAD has been fixed in 3.2g and later, so I have decided to include RUNAD in the file now. Fixed a stack corruption problem when disk I/O errors occurred during assembly with a .IN include file. Improved documentation. - New since version .92 - When dinosaurs ruled the Earth. History has been removed to save space. They didn't even have computers back then, did they?