Until now Bubble Bus has been known for games but now it's entering the world of utilities. It's a small company with what looks like a big product. Ultra Mon is a full-blown monitor with several handy features thrown in. Fine but what is a monitor? There are two types: the VDU sort of monitor you peer into and the software sort that peers for you. Ultra Mon is the one that does the looking or monitoring. It is a tool for examining or altering any part of memory. Among other things, you can run a machine-code program slowly, noting the contents of the Z80 registers and memory as it goes along. In short, Ultra Mon is a debugger and development tool for programmers and enthusiasts.
From the default screen, pressing Escape lets you type in one of several-score commands, some of them followed by parameters. From here it is even possible to enter external commands (meaning those provided by extension ROMs). If you wanted to erase a file from disk, use |ERA, "fiename" or if you want to enter Maxam, w does the trick - very neat. You can even return to Ultra Mon if the external command takes over control (as Maxam does) more of that later, though.
The first command I always type in when trying out a new utility is HELP. You'll be pleased to know that a screenful of command words appear. The manual suggests that virtually any separator (for example, a comma or space) can be used when supplying parameters to the various commands. In general this is true, but if you find thai Overflow shows its ugly head too often, use a space Ultra Mon lets you view normal rain, expansion ram (the 6128's extra bank of memory or the extra memory provided by the DK'tronics add-on), on board roms (Basic and the operating system), expansion roms (such as the disk rom): as well as disk sectors. If you don't want to peek at any of these you had better check that you actually need a monitor! Extra memory (in blocks of 16k) can be switched into locations between &4000 and &7FFF.
The way you inspect memory using Ultra Mon may strike you as odd: first select the area of memory you want to view, then press Control-R to read it. Editing memory is achieved using a similar method: select the area to alter, read it, alter it and then write it with Control-W. Ultra Mon does not read and write memory directly, but it uses a buffer. Cumbersome? Not at all, the keys used are obvious and having buffer will prevent (or at least minimize) mistakes.
Numerals are displayed in hexadecimal (base 16). However , entry can be either hex, decimal, octal (fairly usseless nowadays although our |typesetter is programmed in octal), binary or Ascii. Debugging and testing a machine-code program is often lengthy, tedious and not always (probably never) 100% successful. When Basic encounters an error it displays, in its comparatively friendly style, an error message that's generally of enough use to correct the mistake. Ultra Mon greatly eases debugging: it lets you run a machine-code program slowly, single-step through each instruction, display, examine or even alter the Z80 registers or program after each instruction. The code you wish to check should be in the range &4000 to &8FFF: Ultra Mon itself lives between &40 and &3FFF, stowing further bits from &9000 onwards, next to the system variables.
Another method of controlling a machine-code program during run-time is with breakpoints. A breakpoint is a special one-byte instruction that returns control to Ultra Mon, displaying the registers. The dissasembled mnemonic for this byte is BRK. Up to 16 separate breakpoints are allowed.
Ultra Mon maintains a set of pseudo-registers. These can be changed using some of the commands, and then passed to a subroutine or program by issuing a JP or CALL. When the subroutine (or program) returns control to Ultra Mon, the Z80 registers are passed back to the pseudo-registers and displayed. Or. many occasions the routine you test or jump to will lock up the machine. With other monitors, this usually entails switching off the Amstrad and starting again. Not so with Ultra Mon: pressing the function keys f1 to f3 simultaneously will restart Ultra Mon. Obviously this won't work in every case, but if Ultra Mon hasn't become corrupted by the routine you jumped to, there is every chance this method will work - a very useful feature.
If disk organisation, copying and inspection are your favourite pastimes then you're in for a treat: Ultra Mon is capable of these too. You can view or alter individual sectors not just standard sectors either. Disks can be formatted to CPM, Data or IBM specification; you can also create your own formats (ideal for adding protection to your important programs). Individual tracks can be formatted, which allows you a fair scope when devising the ultimate protection. Files and disks car. be copied from within Ultra Mon. Other utilites include an extended-catalogue function and a directory editor.
Ultra Mon's uses do not end there: you can load and save Spectrum files, dissasemble object code into scource code, perform, simple mathematical calculations, create non-standard cassette files, input or output any value to any port, map a disk, display information on extension roms, search for a string, work out checksums on memory locations...
A lot of thought has gone into Ultra Mon. and a lot of program has been squeezed into 16k. It has taken two years to arrive, but finally a high-standard, relatively simple-to-use, big-on-features monitor is available for the Amstrad CPC range. If you enjoy losing yourself in hex or are a serious programmer Ultra Mon will fill th bill.