| A computer known as the first laptop, but 
				definitely one of the first portable microcomputers which could 
				be used from rechargeable batteries. Its story begins in early 
				1980s. In 1980, inventor received a
				French
				
				patent on different forms of portable computers. The system 
				has been announced in 1981, having release in 1982 and 1983. The computer has everything a typical computer contains: There is a full QWERTY mechanical keyboard, a non-backlit liquid crystal display (4x20 text or 120x32), small dot-matrix printer, in many versions even a microcassette recorder. Everything was powered from the batteries allowing to work around 50 hours with in-ROM BASIC using 16kB of accessible RAM (if no extensions were used). The computer was not much larger than A4 book, and because it was one of first such machines it is sometimes known as the first notebook computer. | 
				 | 
| The CPU were two Hitachi 6301 chips clocked at 
				0.614MHz. The master processor controlled the keyboard, memory and 
				display, while slave one driven speaker, printer and cassette 
				drive. The CPUs exchanged data with 38400bps serial bus. These 
				strange steps had to be taken (Hitachi 6301 are like Motorola 
				6809, closer to microcontrollers than microprocessors) to 
				conserve energy and make the system run from battery. Additional 
				logic has been made using CMOS chips. | |
| Manufacturer | Epson | |
| Origin | Japan | |
| Year of unit | 1985 | |
| Year of introduction | 1981/2 | |
| End of production | 1986? | |
| CPU | 2x Hitachi 6309 | |
| Speed | 0.614MHz | |
| RAM | 16kB | |
| ROM | 32kB | |
| Colors: | 2 | |
| Sound: | Beeper | |
| OS: | Monitor Basic | |
| Display modes: | Text: 4x20 Graphics: 120x32 Built-in LCD screen only. | |
| Media: | ROM cartridge Internal microcassette recorder External tape recorder | |
| Power supply: Male DC jack at the computer: 
				 
				Read further about details! | ||
| I/O: | Serial Tape IO Barcode scanner in RS232C System bus | |
| Possible upgrades: | Battery replacement, memory by side expansion | |
| Software accessibility: | Possible (dedicated sites) | 
| 
 The addition has a multi-channel digital input, serial output 
				and additional serial pass-through to connect printer.  | 
| Contents: | Power, battery | Starting | Typical problems | Loading programs | Pinouts | Links | 
The power supply is UNREGULATED 6V DC at 600mA with 
		specific voltage drop when under load. According to
		this 
		page, it has 9.3V when no load and 7.2V when 150mA load. 
		Because the charging battery makes a natural load which makes this 
		voltage smaller (around 150mA is a charging current) it is important to 
		use such voltage.
		The computer should not be used without battery, as the 
		transformer unit will not be loaded enough to make the supply voltage 
		lower - then, the computer may not regulate voltages properly. 
		However, it is possible to run it without battery for testing purposes 
		if you use a regulated power unit scaled at ca. 7V. It must be high 
		enough not to generate "POWER ABNORMAL" signal (this shuts the computer 
		down permanently to prevent deep battery discharge, present if battery 
		voltage is too low) and not too high to make regualtors work right.
		
		More about battery
		The battery consists of 4 Sub-C size, 1.2V 110mAh NiCd cells connected 
		in series. Like these cells used in battery-powered drilling machines.
		The common trend in these computers is to replace the old NiCd batteries 
		with modern cells, like 4 AA cells (for example NiMH). This is not a 
		good idea. First, let's be honest, this computer has no intelligent 
		charging circuitry at all, there is just a current limitting resistor 
		acting as a voltage drop if batteries would take a really big current 
		(charging current should be about 150mA). Nothing more. Look at the 
		schematic presented by the end of this section to see how it looks 
		like (it's from Technical Reference Manual). AC+ and AC- are + and - of AC adapter, that's how they mark it in 
		technical manual.
		So in result, the battery is not only charged with inappropriate 
		current, but also for uncontrolled time which dramatically shortens its 
		lifespan.
		I think, but I nevet tried it, that it should be made using a battery 
		set with own charging circuit, like in one of these ready modules 
		available in DIY stores. This way the circuit limits the current and the 
		battery doesn't overcharge.
		The computer will not operate if the battery is shorted, wat sometimes 
		happens. So if the computer during printing shows "CHARGE BATTERY!" and 
		resets, it means that the batteries need replacing.

The computer needs some time plugged to power adapter to 
		charge its battery. It was not designed to operate from power supply, 
		and user must remember to disconnect power supply after 8 hours starting 
		from the empty batteries, or the power unit will overcharge the 
		batteries. 
		For a short time for testing, a voltage around 7-9V may be used, if it 
		won't blow the internal fuse.
		After powering up, the system beeps and displays (if not, try pressing 
		the Reset button) 
CTRL/@ Initialize
		1 MONITOR
		2 BASIC
In German units there is a paragraph sign (§) instead of 
		@. If it doesn't go to BASIC or displays garbage, counts more than 2 
		items or does similar strange things, press CTRL-@ (or CTRL-§ in German 
		units) to set date, time and clear RAM. You may do it after pressing 
		Reset or Menu, trying a few times to make the computer catch it in the 
		right moment (which may be very short).
		If it beeps, but doesn't display anything try to tune contrast with a 
		"VIEW ANGLE" knob.
		
		According to manual (Page 34), DIP switches change character set. The 
		last one selects between Disk and ROM BASIC.
Printer
		The printer is a true precision mechanics device. The single motor 
		operates head, ink ribbon and paper transmission. First, the motor spins 
		driving cylinder with cam, this cam moves the head back and forth making 
		a "machine gun" noise. Simultaneously, the same motor spins the gear for 
		moving the ink ribbon. Every head move back and forth, the pulling rod 
		advances the paper. The result is printed on 57mm-wide paper 
		tape.
		If it doesn't move its head well, it means that you need to open the 
		computer (remember not to tear the expansion ribbon cable from the 
		connector - open the casing in few centimeters, disconnect ribbon and 
		proceed, pay attention to bottom keyboard ribbons too), then remove the 
		silver shiny cover from printer and lubricate the leading cylinder and 
		driving rods. Don't use WD40 for it. WARNING: The head's ribbon cable 
		breaks very easily, so don't bend it too much.
		For the future: The ribbon cartridge is called ERC-09.
		
		Microcassette recorder
		While the printer was a precision mechanics, this is even more complex. 
		The main motor has magnetic tachogenerator to coordinate speed and 
		counter. Additional motor moves the head to tape using the screw thread 
		mechanism. This way, the recorder can operate back and forth by control 
		only with software.
		A typical fault is fatigue of a belt which transfers rotation from motor 
		to the mechanism. This is a piece of precise mechanical part, so don't 
		use excessive force here. In my unit, unfortunately I had to re-work one 
		bolt's head to unscrew it.
		First of all, the belt: 50mm in diameter, 1x1 or 0.8x0.8mm square.
| How to replace the belt: 1. Remove two screws and the rear/bottom cover of tape recorder. 2. Remove bolts holding the circuit board in place. The long bolt at the upper part near motor has a distance tube under the board, don't loose it, don't install distance tubes in places of another tubes! I use labelled boxes to temporarily store these bolts and tubes during repair in removing order. 3. Carefully move the board downwards (seeing the recorder motor upwards, connector to the right) to see the motor's part. Be careful of the wires! Remove two bolts holding the speed detector in place and remove it taking care about 2 distance tubes under (the proper service name for this round piece is "FG yoke assembly"). Now you can remove belt from the motor. 4. Having the speed detector hanging on the cables, you can move the board to the sides enough to remove bolts locking the aluminum piece holding the big, brass wheel and smaller plastic wheel (using flat spring) in place. One bolt, then PCB goes to the other side and the second one. Take a photo or note about wires soldered to the board, which one goes where. You may need it when one breaks. | 
				 | 
5. Remove this aluminium part (service name: Clinched 
		cassette support plate) holding brass wheel (Pressure-fitted 
		cassette wheel), taking care not to loose bolts and wheels.
		6. Remove the old belt from wheels. Replace the belt, Check does it run 
		smoothly. The belt should go from the motor parallel to the connector 
		side, then to the brass wheel, then it should go back to the motor, 
		touching the smaller wheel (Pulley) - the small wheel should be 
		outside of the belt's loop.
		7. Replace the aluminum part, fasten the bolts.
		8. Clean the rotating magnet and the sensor using soft brush.
		9. Replace the speed sensor. Restore distance tubes and bolts. Check the 
		cylindrical magnet by rotating the brass wheel and observing does the 
		motor shaft run inside speed sensor - it should not scratch the detector 
		during spinning and it should spin without problems. If it gets stuck - 
		move the sensor a bit to center it. Repeat until it works (requires more 
		time if bigger force was used to remove bolts, be patient here).
		10. If any wires fell off the board during speed sensor alignment, now 
		its time to resolder them.
		11. Replace PCB and its bolts with distance. Two smaller distances may 
		require to be glued to the PCB (use very small amount of a weak glue - 
		this is temporary) to be installable easier.
		12. Close the casing.
BASIC programs are usually distributed by text. It can 
		be fed to the computer using serial port by rs232 cable. Programs in 
		machine code are very rare and sometimes distributed on the Internet 
		with BASIC loaders.
		HXTape is a tool to make 
		tapes waves under Linux, I haven't tested it and it seems that it 
		requires... PHP. Generally tapes, because they are micro-cassettes, are 
		recorded in a computer as it's harder and harder to get decks (usually 
		portable) for them.
		
		Driving the cartridge-type tape recorder is purely automatic, 
		program-based. There is a built-in "tape recorder mode", press Ctrl-PF1 
		to get to it. The screen will show tape counter position. Then:
		PF1 - Fast forward
		PF2 - Slow forward
		PF3 - Stop
		PF4 - Rewind
		PF5 - Exit this mode.
		Like in a sticker under PF keys. You can also use WIND command to rewind 
		tape.
		
		The saving is made by 
SAVE "PROGRAM"
and it saves instantly. If the floppy disk is conencted, 
		it is saved on floppy, then microcassette, and if it's not found, 
		external cassette output. The name mustnot contain characters: . / , ( ) 
		- the dot may happen once like extension separator.
		
		Loading:
		Just LOAD loads the first BASIC program from microcassette, or ROM 
		cartridge if present. It is also possible to look for program:
LOAD "PROGNAME"
To load from other device, you can make the "device; 
		program name" notation, while devices are CAS0 (microcassette), CAS1 
		(external tape), PAC0 (ROM cartridge), A, B, C, D (disk drives).
		
		To print something on the printer, use LPRINT command.
		
		Loading from PC's serial port
		Loading from RS232 port is useful when transmitting programs from the 
		PC.
		Here is the way to do it the most simple way, but it's a bit slow. There 
		are other methods, like using additional flow control wires (a 
		full cable) or with internal loops in PC side of serial port. Making 
		the cable. 3 wires: GND, Tx and Rx. You can use 5-pin DIN plug, only 3 
		pins are used. Warning: Pinout belo shows connectors at the computers, 
		so you need a male DIN8 (or even DIN5) plug and female 9-pin plug for 
		serial port. The pins should correspond to these, i.e. pin marked as 1 
		on the male DIN plug should not fit to pin 3 in this picture. If 
		in doubt (because Epson manuals show pin numbers both in plugs and in 
		connectors in different places) - check in which pin the GND is.
 
| Connectors at the computers! | ||
|  |  | Epson->PC | 
| Epson RS232C | PC COM port | |
| 1 | 5 | GND | 
| 2 | 2 | Tx->Rx | 
| 3 | 3 | Rx->Tx | 
		In the PC, configure the terminal program (e.g. Minicom or WIndows' 
		HyperTerminal) to the proper serial port, baud rate, parity and stop 
		bits. Do not use any handshaking. Now the most important parts: Loading. 
		The command for loading is:
LOAD "COM0:(BLPSC)"
Filling the BLPSC:
		B is a number meaning speed:
		0 - 110bps, 1 - 150bps, 2 - 300bps, 3 - 600bps, 4 - 1200bps, 5 - 
		2400bps, 6 - 4800bps. A very safe, but slow option is 300bps.
		L is number of bits, 7 or 8.
		P is parity: N (none), E (Even) or O (Odd)
		S is stop bits, 1 or 2.
		C determines state of CtS/RtS, DSR and CD lines. For example is 
		"B" ignoring CtS and CD, using DSR, RtS (high level), F ignores 
		everything, only notifies the system by high level on RtS.
		So:
LOAD "COM0:(28N1F)"
will load 300bps, 8-bits, no parity, 1 stop bit, 
		ignoring data lines.
		After confirming the command, order PC terminal program to send text 
		file with BASIC code. After the file is sent, press the BREAK on the 
		computer and LIST newly loaded program. You can use it or save to 
		cassette. 
		
		The exact tables of characters in BLPSC is shown in
		
		this archived page.
| RS-232C port: 
 
 | Serial port: 
 
 | Barcode reader port: 
					 1 - GND | 
WARNING: According to the schematic, POUT is output while PIN is input. According to the Technical Reference manual (Section 2.2.2), it's opposite. In cable connecting two HX-20s they're crossed.
		
		http://web.archive.org/web/20070926235927/http://www.epson.com/cgi-bin/Store/support/supDetail.jsp?BV_UseBVCookie=yes&oid=14492&infoType=Doc 
		- Epson's support, guides and manuals.
		
		http://web.archive.org/web/20160313142222/http://classway.com/hx20/index.html - HX-20 Enthusiast's page.
		
		http://oldcomputers.net/hx-20.html - In collection, description.
		
		https://fjkraan.home.xs4all.nl/comp/hx20/ - In collection, some 
		handy tips for running HX-20, how to dump ROMs etc.
		
		http://electrickery.xs4all.nl/comp/hx20/doc/index.html - PDF 
		documentation of Epson HX-20.
		
		http://www.ganjatron.net/retrocomputing/epson-hx20/index.html - 
		Description and advertisements.
		
		http://web.archive.org/web/20090805173203/http://www.geocities.com/abcmcfarren/hx20/hx20.htm 
		- programs in BASIC as well as interface cable schematic, plus 
		information how to load/save to RS232 port using terminal. Additionally 
		memory map, character table and system ROM partitioning, opcode list.
		
		http://web.archive.org/web/20140228044441/http://www.wickensonline.co.uk/hx-20/index.html 
		- Programs and information
		http://hx20.jatman.uk/ - More 
		information on a HX-20 in a specific application.
		
		http://www.atarimagazines.com/creative/v9n3/101_Epson_HX20_computer.php 
		- Review from Creative Computing, March 1983.
		
		http://bahamas.gestalter.at/hx20/ - Some photos of RAM-upgraded 
		units, Software for download.
		
		http://www.zock.com/8-Bit/D_HX20.HTML - German description with 
		emulator screenshots.
		
		http://frigolit.net/projects/hxemu - HX-20 emulator project. At 
		least works (builds) on Linux.
		
		http://takeda-toshiya.my.coocan.jp/ - eHC-20 emulator. To download 
		visit eHC-20 page and "Common source code archive", then get binaries or 
		sources
		
		http://web.archive.org/web/20150524014207/http://www.schwaben.de/home/glassix/HX20schnitt.htm - Pinouts.
		
		http://web.archive.org/web/20150323081245/http://efb-1.de/c_hx20.htm 
		- Photos e.g. of display output on monitor.