This file will serve to document the MXO-PX8 overlay for MEX version 1.12. This file is not intended to document MEX itself, but rather some of the peculiarities inherent in using this overlay. I'll try not to miss anything. Installation MXO-PX8 should only be installed in version 1.12 (or higher) of MEX since it relies on some variables that were added for that version, specifically the MODE byte for determining when we're in terminal mode (so we don't try to use XON/XOFF flow control then) and it specifically disables the queued I/O mode since this interferes with the PX-8's own interrupt driven I/O routines. No special procedures are needed when installing the overlay, and you may install any dialing overlay (which will only be used if you are using an external modem) that is ORG'd at 0B00H. If you are using an external modem dialing overlay (see the section on Dialing Overlays for details), you must have it after the main overlay in your MLOAD command or it will not be recognized. A typical MLOAD command might look like this: MLOAD MEX.COM=MEX112.COM,MXO-PX8.HEX,MXO-SM14.HEX The SET commands SET ? will tell you what what the available SET commands are. Currently these are SET, SET DELAY, SET OFFHOOK, and SET COMM. SET by itself will return some information about the current status of the RS-232 ports. The information returned is carrier status, whether the modem is on or off hook, and what the DELAY value is (see below.) A couple of caveats about this information: if you exit MEX then re-enter the on/off hook status will be incorrect if the modem is off-hook when you enter. If you have something plugged into the external RS-232 port that is providing DTR then you will always appear to have carrier no matter whether or not there is really carrier present to the modem. SET DELAY changes the delay value that is used when a comma is encountered in a dialing string. (See the section on dialing for more information.) The default value is two seconds, but any value from 0 to 9 may be used. SET OFFHOOK causes the modem to go off-hook. This probably isn't a really useful thing in most cases, except that if you've disconnected when using the external port, you'll need to say this to make the port pay attention to you. SET COMM is the most useful of the SET commands. When you type SET COMM you'll get a menu that looks pretty much like the menu that you get from CONFIG. The only difference is that on the last line you can select either the EXTERNAL or INTERNAL modem. In this case EXTERNAL refers to a device plugged into the RS-232 plug on the back of the PX-8, which INTERNAL refers to an MFU or other direct connect modem connected directly to the system bus. (In other words, it's got to be attached to the bottom of your PX-8.) The system will not let you select the internal modem if you haven't got one. When you first start up the system, the values selected are the ones that you have set up to be your default communications parameters using CONFIG. The only exception to this is whether to use the internal or external modem (since CONFIG doesn't handle that.) If an internal modem is present, it will be the default, otherwise external will be assumed. When you exit MEX, your overlay parameters will be retained as long as you do not do a warm boot (ie. type control-c or do a jump to 0000H.) A warm boot will cause the modem to power off, hanging up the phone line in the process (if it was connected.) More about this later. Dialing Overlays If you don't have an MFU (which I use to mean an actual multi-function unit or a system-bus connected modem) then you'll need to include an overlay such as MXO-SM14 when you MLOAD to create your MEX. If you do have an MFU, you may include such a dialing overlay as well for maximum flexibility, as you'll then be able to dial using both the internal and external modem. It won't cost you anything else in terms of space since if you don't install the dialing overlay that space is still in the program, though unused. If you choose to use an external dialing overlay, you may also choose how you want the modem to disconnect from the line. If you set the DISC equate to FALSE, then the modem will disconnect by dropping DTR. If you set it to TRUE, then the character sequence to disconnect the modem from the line will be used instead. (If the preceeding few sentences don't mean anything to you just forget about it, MEX will do the right thing for you.I won't discuss the use of the external modem dialing overlay any more, as it is documented elsewhere. The rest of this section will deal exclusively with the internal modem dialing routines. As "delivered", the MXO-PX8 overlay supports dialing via the built in modem in a DTMF (tone) mode only. (Future revisions of this overlay may support pulse dialing.) The modem itself is capable of generating all sixteen DTMF tones, which includes the familiar digits (0-9), #, and *, as well as the rarely-seen (or heard) A,B,C, and D tones. (If you don't know what the A-D tones are used for, don't worry about it, you're not the only one. I've included them since they are supported by the hardware.) The comma (,) is also specially supported: A comma in the dialing string causes the dialing routine to wait approximately DELAY seconds. DELAY is set with the SET DELAY command as previously mentioned, and the default is 2 seconds. You may include several commas in a row if you need to. All other characters are ignored. The current version of the overlay will not allow you to send tones on a line that is already active, it will hang up first then attempt to dial the tones. Automatic XON/XOFF flow control The PX-8 is a wonderful piece of electronics, but one of it's drawbacks is a rather slow LCD display screen. Because the screen is slow, it's easy to overrun the internal buffer with characters coming in while the display is trying valiantly to keep up. (By the way, this is generally only a problem at speeds at or above about 1200 baud, but can occur at lower speeds if you get a lot of linefeeds in rapid succession. This is because the screen scrolls even slower than it writes.) Because of this, I've chosen to implement automatic flow control while in terminal mode. When the internal buffer (which is about 360 bytes) gets about 3/4 full, an X-OFF (ASCII character 11H) is sent out through the modem port. When the buffer becomes nearly empty, an X-ON (ASCII 13H) is sent. Many computers (both mainframes and micros) alike will honor this signal and will stop sending when told to. If not, then you'll somehow have to insure that data is sent in small enough chunks so that the buffer does not get overrun. You can tell if this has happened since you'll the data being displayed will not look like anything you were expecting. (In other words, you're going to get junk on the screen.) The overlay will only do this kind of flow control while in terminal mode, since it would interfere with file transfers using either file transfer protocol, and because it just plain isn't needed then. File Transfer Speed A word or two about file transfer speed. MEX is a big, flexible program. The PX-8 is a small, powerful, but not-too-fast computer. The combination of those two things does have it's price. The price is that it is not really possible to get the maximum theoretical speed at any given baud rate. The higher the baud rate, the lower the percentage of maximum you'll get. What this means is that you should not expect to get the transfer time that MEX tells you when you start a file transfer. At higher baud rates, you'll probably need to multiply that figure by 3-4 times to get the actual transfer time. The good news is that even though you aren't getting the theoretical maximum rate, you can still hook up to your favorite computer at it's maximum speed without worrying about loosing characters during file transfer. More Speed-related Stuff It has been reported that if you are using a floppy disk drive with your PX-8 that you may have problems with the other end timing out while you write (or read) to disk. This is most likely due to the fact that normally MEX writes 128 sectors at a time to disk, which is a fairly slow process with the battery powered external modem. If you have problems, you can try telling MEX to buffer smaller amounts between disk writes. The simplest way to do is by using the POKE command then using the CLONE command to produce a new working copy of MEX. The procedure is very simple. When in MEX, simply type: POKE $D23,n Replace n with the size of the buffer that you want to use. I recommend 4, which will cause MEX to save 32 sectors (ie. 4K bytes) in memory before writing to disk. Then simply use the CLONE command to save a new copy of MEX. Since it's impossible to tell when a user of MEX might want to return to terminal mode, I've chosen to implement the overlay in a manner such that the RS-232 port is always left powered on, even when exiting to CP/M. (This is so that you can leave MEX then return and pick up right where you left off.) Because of this, there is a constant drain on the batteries. If you intend to use your PX-8 for any length of time after using MEX without turning it off, then be sure to do a warm boot (by typing a control-C) sometime after exiting MEX. This will cause the RS-232 port and the modem to power off, and will result in extended battery life. Miscellaneous I've found it helpful to do a STAT PAGE 8 then CLONE so that the STAT display doesn't roll off my screen before I've had a chance to read it. You'll probably want to change the default sequence from since there is no LF key on the PX-8 keyboard. (If you don't want to, remember that you can always type control-J to send a linefeed.) Some of the timing values used for file transfer speed will be less accurate than usual since MEX didn't define values for some of the baud rates. See the code for specifics. You'll probably want to use CONFIG to set your default baud rate to 300 if you're going to be using an MFU. That makes it possible to use the mode without having to use the SET COMM menu. Notes About the Source Code I've tried to make the source code as readable as possible so that others can build upon what I've started. I ask that if you enhance this overlay, you let me know so that I can keep my own versions up to date. In addition, I'll be glad to answer any questions that I can about how the overlay works. Thanks Special thanks for the help they've given me in developing this overlay must go to Justin Bell, Chuck Freeman, and Mike Morra of Epson for their help in getting me the information I needed to access the PX-8 system information, to Ron Fowler for tolerating my questions about MEX, to John Kinney and Charlie Strom for helping me to beta-test the overlay, and to my wife Sharon for putting up with me while I tried to get the overlay put together. David B. Kozinn March 5,1985 Compuserve: [76703,565] (Preferable method) CP-MIG (PCS-47), EpsOnline (PCS-19), or Easyplex MCI Mail: dkozinn