Yet another computer museum - The Epson HX-20

Top Epson HX-20 top Standard 16 kByte RAM, here with the expansion unit, another 16 kByte. All battery operated.
More info in this announcement from Practical Computing magazine October 1982.
Targeted as a field terminal it found other uses like wordprocessing. The successor was the PX-8 which combined advantages from the QX-10 (CP/M, wide screen) with the HX-20 portability.
Inside Epson HX-20 board Epson boards usually have names. The HX-20 board name is 'MOSU'.
The BASIC 'PRINT FRE(0)' command should return 12891 bytes free for a non-expanded HX-20.
The standard ROMs map from 8000h to FFFFh, the empty socket is for the option ROM (6000h-7FFFh)


If an HX-20 doesn't want to work, try this:

  • Charge the HX-20 for several hours. To charge from empty to full batteries takes 8 hours.
  • Make sure the batteries are actually charged. If after charging several hours the voltage over the battery is still 4 volts or below, your battery is shorted. An easy indication of this is the temperature of the adapter. If it is still hot after 8 hours charging, the battery is dead. Replace it before continuing.
  • An initialised HX-20 displays this on startup:
    CTRL/@ Initialize
    2 BASIC
    If this doesn't happen, or more lines are printed, press CTRL and @. Then you should enter the date and time. The HX-20 should now work.
Expansion unit board Epson HX-20EU Expansion Unit board The Expansion Unit contains 16 kByte RAM, constructed of eight 2kByte static RAM chips. The two ROM sockets are default empty. With the Expansion Unit connected, and no programs loaded the BASIC 'PRINT FRE(0)' should return 29275 bytes free (use Ctrl-@ to initialize). See the memory map for more info on the HX-20 memory map with and without the Expansion Unit.
More information is in the HX-20 Technical Support Manual, see Virtual Library or Using the Epson HX-20 expansion unit
ROM Cartridge ROM Cartridge module The cassette bay could also be used for the ROM cartridge. A 32 kByte max ROM can contain up to 32 files which are listes and read via the FILES "PAC0:" and LOAD "PAC0:filenaam" commands in Basic. Other ROM structures were also possible, but would need additional software.
This ROM is not directly mapped into memory, data is loaded into memory first.
  • HX-20 ROM cartridge; file format
  • Batteries External battery pack Nowadays not much of the original battery packs for the HX-20 will be in good working order. With some trouble and quite a sum of money, you can still buy replacements or make one yourself from NiCD C-cells. For operating the HX-20 only once in a while, this is not very cost effective. Replacing the internal pack with an external set of modern penlight (AA) NiHM cells works just as good, but has its price; making an extra hole or leaving out the connector pane. The battery is an essential part of the power supply; charging keeps the adapter voltage in check. Without it, the voltage on the circuit board becomes much too high and using power hungry peripherials lead to the 'CHARGE BATTERY!' message.
    Disk drive unit Another expansion option of the HX-20 is the TF-20 floppy disk unit. This unit needs a floppy to load its own OS (CP/M) into RAM, and then could serve as disk drive for the HX-20, PX-8 or PX-4. The HX-20 retrieves a disk basic extension from the drive when entering BASIC. See the Epson TF-20 page for more info on the TF-20.
    From the HX-20 Software Reference Manual Chapter 10.4):
    The DISK BASIC is broadly divided into the following 3 modules:
    (1) BASIC interpreter (ROM version: HX-20 side)
    (2) DBASIC interpreter (DBASIC.SYS: HX-20 side)
        This interpreter is an extended portion of BASIC which is loaded
        from a disk to the RAM of the HX-20 upon start of the BASIC and
        handles the data input/output to and from the disk and the
        processing of the commands and statements, together with the BASIC
        interpreter described in (1) above. This module consists mainly
        of a portion connected to the BASIC interpreter (i.e., a BASIC
        driver) and a portion interfacing with the TFDOS (i.e., EPSP
    (3) TFDOS (TF-side)
        The TFDOS which is resident on the RAM of the TF-20 received 
        commands from the HX-20, opens and reads or writes files using the
        BDOS or the BIOS for the HX-20, and returns data and error codes
        to the HX-20.
    Printer ERC-09B printer ribbon cartridge The printer uses a ribbon cartridge found in lots of small Epson printers and show up at Ebay regularly. It can also be used for PX-4 and PX-16 printers.
    Connect to PC
      HX-20        PC            PC
    8-pin DIN  9-pin subDE  25-pin subDB  function
        1 -------- 5 ----------- 7           GND
        2 -------- 2 ----------- 3           HX-20 TxD, PC RxD
        3 -------- 3 ----------- 2           HX-20 RxD, PC TxD
                   7 -+        4 -+
                      |           |          RTS - CTS loop
                   8 -+        5 -+
                   6 -+        6 -+
                      |           |
                   1 -+        8 -+          DSR, CD, DTR loop
                      |           |
                   4 -+       20 -+
    RS232C connector pin numbering

    To connect the HX-20 to a PC, I use an Epson #705 cable, a gender changer, a null modem adapter and a 25p to 9p adapter. In essence it boils down to this diagram. Note that the DIN pin numbering is not regular.

    Text (BASIC) transfer from PC to HX-20:

    • set serial port speed to 1200 Baud: Linux: sudo /bin/stty -F /dev/ttyUSB0 ospeed 1200 ispeed 1200
    • enter into HX-20: LOAD "COM0:(48N1F)" <ENTER>
    • send file: Linux: sudo cat fileName > /dev/ttyUSB0 and wait for it to finish
    • press <BREAK> on HX-20. The program is now loaded.

    Text (BASIC) transfer from HX-20 to PC:

    • start terminal program and set serial port to 4800 Baud
    • start text capture mode
    • enter into HX-20: LIST "COM0:(68N1F)" <ENTER> and wait for it to finish
    • save captured text
    On the command line, cat /dev/ttyX > list.txt might also work. Replace ttyX by your serial port

    Local links:

    Generic links:

    Last update: 2020-03-14