The NMI software

Select the SamRam (F9-3), and press F5. A menu with eight icons pops up. You can select each icon by moving the arrow to it (using the cursor keys or the Kempston joystick), and pressing `0' or fire. The icons can also be selected by pressing the appropriate letter key.

The eight icons are two arrows with N and E within them, a magnifying glass with the letters `mc' in it (activated by pressing D), two screens (identified by 1 and 2), a printer (P), a cassette (S) and a box saying `overig'. The `D' activates the monitor or disassembler; read section 3.3 for information on this program.

Pressing N or E returns you to the Spectrum. If you pressed N, the normal Spectrum rom will be selected when the NMI software returns; if you press E, the Rom with the Basic extensions will be selected. Some games may crash if they see a different rom than the standard Spectrum one.

Pressing 1 selects the tiny screen editor. You can move a `+' shaped cursor about the screen using the cursor keys. The following commands are available:
H: Get the current ATTR color from the screen at the cursor's current position, and store it in memory. This color will be used by the next command:
Z: Put the color on the screen
G: Get a character from the screen
P: Put the character on the screen
R: Remove all screen data that is invisible by the ATTR color
L: Take a look at the bitmap below the ATTR color codes
T: Return to the main menu. You can also return by pressing EDIT, or ESC in the emulator.
B: Change border color
V: Clear the whole screen
If you press 0, you can edit the current 8x8 character block at pixel level. Again you control the cursor with the cursor keys. Now 0 toggles a pixel. In this mode there are two commands: C clears the whole block, and I inverts it. Pressing EDIT (ESC) returns you to the big screen again.

The SamRam has two screen buffers. Buffer 1 is used to hold the screen which was visible when you pressed NMI, to be able to restore it when returning. This is the screen you edit with `1'. The second screen buffer can be used to hold a screen for some time; it is not touched by the NMI software directly, and will not even be destroyed by a Reset. If you press `2', a menu appears with four Dutch entries:
1: Scherm 1 opslaan (Store screen 1 into buffer 2)
2: Scherm 2 veranderen (Edit screen 2)
3: Schermen verwisselen (Swap screens)
4: Scherm 2 weghalen (Remove screen 2)
These four functions are rather obvious, I believe.

Pressing `P' pops up the printer menu. The screendump program is written specifically for my printer, a Star SG-10. It will probably work on some other printers, but not on most. The output is sent to the RS232 channel, so you have to redirect it to an LPT output.

Skipping the most interesting, `S', for a moment, let's first discuss the final menu, `O' for `Overig', Dutch for miscellaneous. There are five menu options, of which three are not useful. The first gives a directory of the cartridge currently in Microdrive 1. The last, `E', returns you to Basic if this is anywhere possible: it resets some crucial system variables and generates a Break into Program. You can use this for instance to break in a BEEP, or crack a not-so-very-well-protected program. The three other options select normal or speed-save, and store the current setting in CMOS Ram. Speed-save won't work properly on the emulator, because the speed-save routine toggles the upper 32K ram bank regularly, and this takes too much time on the emulator. The setting is not important if you use the internal save routine (which will be used by default, unless you select Real Mode).

Finally, the `S' option. This option allows you to save a snapshot to tape or microdrive. I used it a lot on my real Spectrum, and it works just as well on the emulator. It is very useful is you want to load a .Z80 program back into a real Spectrum again. There are three `switches' you can toggle. The active choice is indicated by a bright green box, inactive boxes are non-bright. You have to use EGA or VGA to be able to see it...The first switch lets you select whether the SamRam rom should be active if the program loads or not. This is only meaningful is you load it back in a SamRam again. Usually I want the SamRam rom to be active because I like the character set better. The second switch indicates whether the SamRam should save a `loading screen', which it takes from screen buffer 2. If screen buffer 2 contains a screen, this switch will by default be on. Finally, the last switch lets you select the output media, tape or cartridge.

If the program is loaded back into the SamRam, the only bytes that have been corrupted are four bytes down on the stack; this will virtually never be any problem. If the program is loaded back to a normal Spectrum, these four bytes will also be corrupted, and the bottom two pixel lines of the screen will be filled with data. (This is considerably less than any other snapshotter I've seen: for instance the Multiface I uses more than 35% of the screen!)

The Microdrive BASIC loader needs code in the SamRam rom to start the program (the RANDOMIZE USR 43 calls it). It won't be very difficult to write a standard BASIC loader that doesn't need this code, but I don't think many people desperately need it...