The QX10 Archive

The design of the Epson QX10 micro-computer (shown) predates the now ubiquitous PC hurriedly launched by IBM in August 1981. The QX10 was one of many offerings based on the Zilog Z80 microprocessor with the CP/M "operating system".

The QX10 was described as an all business computer system. It had 192K bytes of volatile RAM memory, 2K CMOS battery-backed memory, 640x400 dot monochrome display and two double-sided double-density 5.25" floppy disk drives providing 320K bytes storage capacity per diskette (there was no industry standard diskette format). A "MultiFonts BASIC" interpreter was provided on diskette, and "PeachText" from Peachtree Software provided state-of-the-art word processing.

The QX10 software presented here "front-ended" some wholesalers' mini-computer systems (including BCL Molecular18, Singer System 10, UNIX offerings from Convergent Technology and others) to receive bulk orders electronically via telephone in the pre-internet era. QX10-based systems running this software were in use commercially in the United Kingdom from 1983 to 2001, although I transferred all software development to PCs running MS-DOS in 1989 (due to hardware availability considerations and escalating hard disc capacities).

The QX10 proved to be an excellent choice for the job of picking up customer orders from the telephone system and passing them on to the in-house minicomputer. One was also used from 1985 at the head office of George Staples Ltd. to communicate with early EPOS tills in their chemist shops around Stoke-on-Trent, see the operating manual. These machines just kept on going for year after year of continuous use. I bought a QX10 (with an Epson RX80 dot-matrix printer) for £2,035.50 in August 1984. I didn't succumb to the need to own a PC until March 1987.

The QX10 Source Code

Because the Electronic Order Entry application needed to communicate simultaneously with the in-house minicomputer and with remote customer equipment via the external telephone system, it provided its own multi-tasking environment. Therefore the code did not use any CP/M services and interfaced directly with the QX10 hardware. We kept the software on the left-hand floppy drive A (maintained by standard CP/M utilities) and the order data on the right-hand floppy drive B (using direct sector read/write).

CP/M provided an 8080 assembler (ASM.COM) and a debugging utility (DDT.COM) as standard. As the QX10 used the more advanced Z80 microprocessor, Z80 specific instructions were simply hand-coded into the source code in hexadecimal as required.

QX10 Memory Map

User Bank 0 (Main)

Base End  
0000h 0FBDh Operating System
1000h 1865h Overlay U: System Utilities
1C00h   Overlay O: Interface Options
  1E95h M18 (Molecular 18)
  1D0Dh SING (Singer System 10)
  1F6Eh CT (Convergent Technology) (uses 84 bytes User Line workspace at 1A00h)
2000h 2795h Task I: Initial Task & Telecomms Controller
2800h 30ABh FLOP : SDA Floppy Disc Transfer (Sales Data Analysis records for Intercontinental Medical Statistics)
3200h 3620h Task R: Reporter
3800h 3BCAh EOE : Electronic Order Entry mainframe interface
4000h 448Eh Task V: VDU Display
4600h 4DE0h Overlay K: Telecomms Utilities
5000h   Mainframe interface overlays
5600h 5800h Customer Message save area (512 bytes)
5800h   Option Overlays:
  59A7h L : List Spooled Transactions
  5A4Eh P : Passwords Print
5C00h 5EACh Overlay T: A2 and A3 Protocol Handler
6000h 635Fh Overlay A: 01 and 02 Protocol Handler
6800h 6E0Fh Overlay H: V1 Protocol Handler
7000h 7520h Overlay G: R1 Protocol Handler
7800h 7C00h Telecomms Input Buffer (1K)
7C00h 7E00h Text Area for current job (512 bytes)
7E00h C000h Data Buffers (256*66 bytes)
B800h BE72h Task E: Mainframe Emulator (overlays top of Data Buffers)

Memory Bank Independent Area

Base End  
E000h   Overlay X: Operating System Utilities

Utilities

SET.ASM loads text into the Programmable Function Keys.

LAY.ASM converts the .HEX assembler output file to an executable .OVL file. Whilst the CP/M LOAD command (LOAD.COM) similarly converted the .HEX assembler output file into an executable .COM file, LOAD.COM would only work when the code origin was 0100h which was not the case with overlays.

TIME.ASM sets the QX10 clock.

ALARM.ASM sets the QX10 alarm.

The QX10 Archive