| ★ APPLICATIONS ★ PROGRAMMATION ★ MAXAM V1.5 ROM ★ |
MAXAM v1.5 (Amstrad Computer User)![]() | Son of Maxam (Computing with the Amstrad)![]() |
IAN SHARPE investigates the latest version of Arnor's popular assembler BACK in the CPC's early days, Arnor produced Maxam, a machine code development system that became the standard by which others are judged. It comprised a text editor, assembler, disassembler, monitor, and utilities. Since then other packages have appeared, many with features that Maxam lacks. Last year Arnor released Maxam II, a CP/M Plus version which included just about everything missing from the original version. Unfortunately it isn't very very convenient for non-CP/M programs. Now Arnor has done what everyone hoped they'd do - produced an upgraded Maxam for use under Amsdos. As the title Maxam II is already spoken for, they've called it Maxam 1.5, and it is rom only. The new rom is a commercial version of something Arnor have been using in house for the last couple of years, and the preproduction review copy was in the final stages of testing, though I couldn't find any bugs. So what's changed? The original Maxam had an excellent built-in text editor which was the prototype for Protext, Arnor's acclaimed word processor. The only way Arnor could enhance Maxam was by removing the text editor to create room in the rom. Now, in order to write your assembly language source code you need Protext on rom, disc, or tape. As a long-time Maxam I user the first thing I noticed was that instead of pressing Escape and selecting A from a menu, to assemble a file, you type asm from Protext's command mode. In fact, of the two menus in Maxam I only the first remains, the second having been replaced by additional RSX commands. In Maxam I you could see the listing on-screen, optionally dumping it to the printer. With Maxam 1.5 you can also send the listing to a file, but owing to restrictions in Amsdos you can't write your machine code to tape/ disc at the same time - it's one or the other. One advantage of sending the listing to a file is that there is a new test command which doesn't produce code, it just lists errors. If you have Promerge Plus you can use the two-file editing facility to flip between source code and a file of errors. You can still assemble source code held in REM statements, which is handy when you're developing short routines in conjunction with Basic. The ability to have source code and a Basic program in memory at the same time has always been a plus point. There are many additional features which make life easier. For instance, when including character strings in your machine code a new STR directive will put them in for you and set the top bit of the last character. This is the format in which RSX names are stored, and is the easiest way of testing that the end of a string has been reached when printing it, unless you are using graphics characters. You just access each character in turn, and test to see if the top bit is set before resetting it, printing it, and exiting from the string printing routine if the end has been reached. When things don't go to plan (they rarely do) it's time to go debugging. This was perhaps the weakest aspect of Maxam I. All you had were breakpoints where you could pause the program and see the state of the registers. These had the drawback of being an extra instruction in your code, so each breakpoint lengthened it by one byte. The breakpoint feature has been extended and is now a lot more useful. The old brk instruction is still there, and it still inserts an extra byte. However the display it produces when the program pauses is a lot more informative as Figure I shows. The hex/Ascii dump to the right of the register values is the contents of the memory around the address pointed #to by each register. Below it is a disassembly of the code around the instruction being executed. Although it doesn't show on the dump, if any of the flags are set they are named on the top row. In addition to brk you can now have eight breakpoints which do not affect the length of the code. You can also set one temporary breakpoint which, if it is inserted in a loop, will only execute first time round. As well as the choice of three types of breakpoint there are a number of associated commands to give total control of the new breakpoint functions.
Maxam 1.5's debugging facilities still fall short of a single-stepper where you can execute your code an instruction at a time seeing how it affects flags, registers and memory locations. I took a peek into the rom with the intention of seeing how much room is left before taking Arnor to task for not including the feature. There isn't much free space, but I found Arnor had anticipated me by leaving a message to the effect that it is considering this as a future enhancement if Maxam 1.5 is well received. Maxam II has the ability to set conditional breakpoints where the program only pauses if a certain condition has been met, and Arnor might like to think about that too. Having said that, Maxam 1.5 is still a big improvement over its predecessor. Another welcome feature is a set of RSXs to initialise the registers before calling a machine code routine. These can be used from Basic or Protext, and you can then use |J to jump to the code with the registers loaded with the required values. The memory editor is still there. It has always been a good one, but you CPC6128 by a specific option. By the still can't get at the banked ram in the way, there are two short cuts here. One is to do |AA,n followed by |J,&BD5B where n is the number Extended disassembly A frequent complaint about Maxam I was that the disassembler wouldn't output to a file. You would want to do this so you could alter a program for which you didn't have the source code. This could be got round with a short utility, but in Maxam 1.5 it is built in. If you select this option the hex and Ascii fields are removed, leaving you with a file that can be reassembled without further processing. The one quibble I have here is that with some other packages labels are inserted where the program refers to an address within itself. Maxam 1.5 doesn't do this, but it isn't a major criticism and you could write a utility to do it. As well as disassembly, a hex/ Ascii dump of memory can be sent to screen, printer, or file. The pre-production review copy came with a photocopy of the documentation which supplements the Maxam I manual rather than replacing it. Production versions will be supplied with the original manual and the supplement. To sum up then, if you can afford Maxam 1.5 and Protext - and I don't pretend they're cheap - they make a superb combination unmatched for sheer convenience and ease of use, and they're what we use here in the office. There are still a few features that I would like to see, such as single stepping and the addition of labels to disassembly, but for my money the Protext/Maxam 1.5 combination ranks as the best for non-CP/M work. CWTA |
| ![]() |