Hints for CP/M users on the Spectrum +3 --------------------------------------- (This file is in rather a random order - please forgive the weirdness.) There's a lot of PD out there for CP/M (especially on oak.oakland.edu :) ), but there are a few initial stumbling blocks to getting at it. First, you need an internet connection, and some other 'big' host computer with a serial port. I'll let you sort these two out. You'll also need a serial lead. These are not fun to make. If you want to try, have a look at page 318 of the +3 manual. If you don't, there is at least one company that still supply +3 serial leads at the time of writing. They are (or rather, he is) B. G. Services, phone 081 397 0763 and ask about a Spectrum 128k serial lead. Or you can email briang@bgserv.demon.co.uk and ask for a price list. (BTW, no connection with BGS other than as a satisfied customer.) Price as of May 94 was 6.50 pounds. NB: this serial lead won't do on its' own. It's intended for connecting to a modem or printer, so you'll need an *additional* null modem lead, such as you might use for connecting two PCs. A normal 25-25 should do the job. To help test the serial lead, PIP will probably come in useful. You can do 'pip con:=aux:' to receive show input from the serial port, and 'pip aux:=con:' to output whatever you type to the port. You'll need ^Z's to end the PIP command though. So now you have your working serial lead, you have the unenviable task of getting the first program across which 'bootstraps' you into the wonderful world of CP/M PD. :) This is a nontrivial task. The method I used was a little obscure and involved writing a program which could send data in speccy tape format (we're talking LOAD "" here) and using a disk editor to do a couple of LDIRs, compensating for the +3DOS header. How you'd do it I'm not sure. If you can get hold of a program which converts a .COM file into .HEX format, then you can use PIP to copy that first program with something like 'pip wibble.hex=aux:' and then doing 'hexcom wibble'. This should create the wibble.com file, and you should be ok from then on. The first program ----------------- This 1st program will obviously be something capable of file transfer, to make it easier to transfer other stuff. I recommend QTERM, mainly because it's the only comms program I've managed to get working. :) Actually it looks like the best one available - it does kermit, xmodem and ymodem, and functions as a pretty useful terminal. If you ever wanted to play Nethack remotely, now's your chance. You should be able to find a copy of QTERM called qtplus3.com (and a .HEX file of it called qtplus3.hex) in the same place you found this. The good stuff -------------- Ok, now the boring bit is out of the way, we can get onto what programs there are. Well first of all, you'll probably be wanting an editor. (Maybe you won't, but who's writing this file anyway?) Text editors ------------ There are two editors that look really good, for CP/M: ZDE, which I'm using to write this file - weighs in at about 17k; and Z80EMACS (or is it zmacs?) which weighs in at about 40-oddk, I think. I'm not sure, as I haven't tried it. ZDE is a Wordstar-like editor. It has a really good configuration program which is certainly more flexible that most - e.g. you can set the number of columns as well as the number of lines, which is a great boon on the +3 where you only get a 51-column screen. ZDE handles a 51-column screen surprisingly well. You could use the emulated 80-column mode allowed by CP/M, but this doesn't seem to work too well with ZDE. It moves the cursor all over the place which confuses the poor speccy no end as it tries to follow the cursor. You could turn cursor following off, I suppose, but I think it's preferable to use ZDE's handling. At any rate, it beats using Tasword Two by a mile. :) Zmacs is a port of MicroEMACS to CP/M. This sounds really good - multiple files for one thing - but it uses a large-ish number of overlays in addition to a .COM file. Apparently it runs ok though, so you might want to check this out. This appears to only be on sipb.mit.edu, in /pub/z80/emacs I think. That site is also known as rtfm.mit.edu, and it's *very* busy as it holds all the Usenet FAQ postings. These are mirrored in many other places, but the Z80 files aren't. Mumble. Z80 disassemblers ----------------- If you're not much of a hacker, you're probably better off skipping to the next section. :) Although CP/M comes with SID, which is really good for patching programs and the like, it uses the awful old 8080 opcodes for its' disassembly output. There are a few different Z80 disassemblers avaiable for free which run on CP/M, but the best I've encountered is called Wade. It has a command syntax similar to SID (though not the same), and I used it to help fix up an old ls.com program which was suboptimal in a couple of ways for the +3 (more on that later). Keyboard problems ----------------- While I'm terribly happy that I can now touch-type on my +3 and it can keep up with me, there are a few problems I've run into, especially in writing this file. One is that the old speccy problem of the 'sticky keys' still remains - this is to do with the way many of the keys on the keyboard are in fact producing some shift + another key as far as the speccy is concerned. A big gotcha in this department is the sequence '. ' (dot then space). Several times while typing random documents I've run into this one. In fact, I just did. The only way to deal with this is to try and allow for it a bit; just give an extra bit of time between characters like ; " . and , or if your memory of which real speccy keys these match to is good enough, use them instead - in my case, at least, it seems to slow me down enough to mostly alleviate the problem. Using that ramdisk ------------------ You may think that the ramdisk you get under CP/M is rather lame. You're right, of course - 12k as compared to 58k under +3 basic is pretty bad, but it is possible to get useful utilities which fit (albeit rather snugly) into this precious, and fast!, 12k. One which I've really come to appreciate is called ls.com. This is an old version of the 'SD' program as supplied in tools.lbr, patched to produce nicer output on a 51-column display, and with the free space display fixed for CP/M Plus, as used on the +3. This fits in 3k. Another useful utility is 'mft', which copies files from one disk to another on a single-drive machine. Now, although the +3 allows a logical A: and B: on a single drive much like +3 basic (and MS-DOS for that matter), PIP wasn't designed with this in mind. In fact, IMAO, PIP wasn't designed with much at all in mind, but that's another matter. ;) A third utility which can often come in handy is a text file viewer called 'peep'. This comes from the 1kutils3.lbr on oak.oakland.edu, and the big plus with using this instead of 'type' is simply that you can go backwards in the file. In all, I have five programs on my ramdisk: LS .COM 3k MFT .COM 3k NT .COM 1k PEEP .COM 1k PIPE .COM 1k Drive C, user 0 contains 9K in 5 files 2K free (The dir. listing above was produced with 'ls'.) 'pipe' is a mini-version of pip. It seems to use a very small buffer size, though, which makes it very slow. It's no good for copying across disks, but you would be using mft for that. 'nt' is a very small program to take notes to a file. You can think of it as equivalent to 'cat >file', or (for you DOS people) 'copy con: file'. Unfortunately pipe doesn't work with devices, otherwise you could do the literal equivalent of 'copy con: file', which would be 'pipe con: file' (pipe works in the source, dest order). The normal CP/M pip does work, however. Try 'pip file=con:' for that. Pipe and nt are both in the 1kutils3.lbr archive. Patching with SID ----------------- Although the Locomotive CP/M manual explains a bit of how to configure commercial software, these obviously don't need you to dig out your favourite debugging tool to patch them with the right terminal escape sequences. :) Worse though, they don't cover how to use sid at all. (sid is similar to ddt, which you might see mention of.) Using sid to patch programs is actually fairly straightforward. There are only three commands you really need to know - 's', which changes one or more bytes' hex values; 'd', which displays (dumps) a chunk of memory to the screen as hex and ascii; and 'w', which writes your lovingly patched file to disk. Say you had to patch a program which was expecting a zero-terminated string which clears the screen at the address 110h. Your sid session might go something like this: A>sid thingy.com CP/M 3 SID - Version 3.0 NEXT MSZE PC END 4300 4300 0100 D0FF #s110 0110 06 1b 0111 10 48 0112 80 1b 0113 02 4a 0114 30 0 0115 B0 . #wthingy.com 0084h record(s) written. #^C A> The 's110' starts entering hex bytes at 110h. The hex bytes are 1b 48 1b 4a, which are ESC H ESC J, which is the easiest way to clear the screen on a VT52, the terminal the speccy (approximately) emulates. The '.' indicates that no more bytes are to be changed. You can just press enter to skip a byte without changing it. The 'w' command at the end saves the newly patched program to disk. It need not have the same name as the file you loaded up when starting sid. but usually you'll only want one (working) copy of the program to avoid confusion. One command not used above was the 'd' command. You use this like 'daddr' where addr is the address you want the command to start hex dumping at. When you're finished with sid, you can just press control-c to exit (which is of course extend mode + c on the +3). Well, that's all I can think of for now, so I hope this helps someone, somewhen, maybe. Cheers, - Russell Marks. (rm1ajy3@gre.ac.uk from Oct. 94, probably)