Psion Homepage Logo.

LCD Info display.

Revised 19970224

by Zac Schroff.

Some portions of this document are probably copyright Hitachi America and others. The rest is copyright 1997 Zac Schroff, all rights reserved. You may use the data presented here as you see fit. No warranties are made concerning the data or the accuracy thereof or the fitness thereof for any particular purpose or the usability thereof for any particular purpose. Please distribute this document without modifications. If you want to add your own observations or comments, please include them in another file. If you have additional information, confirmation or corrections, please send them to zschroff[-at-]docsware[-dot-]com.

The Psion display is memory mapped to two addresses. Reading or writing to these addresses will access certain ports, as shown below.

Memory Read Write
0180 Busy & address counter Commands
0181 Data at addr counter Data at addr counter

Note that the address counter is incremented or decremented at each read from the port at 0181.

The busy & address counter register is split into two parts. The Msb (bit 7) of the byte is the busy
flag (this flag MUST be zero when accessing the display). The other seven bits (0..6) are the
address counter within its particular space (there are two spaces: display memory and character
generator). Note that reads seem to be able to occur at any time, where writes and commands can
sometimes take up to several milliseconds before the display is ready for the next command or
write. It is not documented what overrunning the screen will do.

Commands go to control port, optional data can follow. Some commands cause the data port to do certain things, others make the data port write to the character generator or the display. Note that the cursor is always displayed at the current offset for text accesses to the data port (moving the cursor moves where these accesses will occur).

Note that when the machine is in a `powered down' state, the display hardware gets no power. Therefore, the entire display state is quite indeterminate on power up. The machine keeps track of most of the display state in scratchpad memory.
See the book review: Machine Language Programming on the Psion Organiser by Bill Aitken for information about the system's internal memory structures.

Command bitmap Command description (footnote 1)
00000000 NOP? (this command is not documented and seems to do nothing whatsoever on my CM or LZ64)
00000001 Clear display memory
Move text cursor to home position
Move display to home position (cancel offsets)
Prepare for text writes to data port
0000001x Move text cursor to home position
Move display to home position (cancel offsets)
Prepare for text writes to data port
x values do not seem to matter? (footnote 6)
000001AD Set address index auto-increment if A set
Set address index auto-decrement if A clear
Set display offset auto-increment if D set (footnote 7)
00001EUF Set display enable to E
Set underline cursor enable to U (footnote 2)
Set flashing block cursor enable to F (footnote 2)
0001SDxx If S clear and D clear, move the text cursor left
If S clear and D set, move the text cursor right
If S set and D clear, move the display offset left
If S set and D set, move the display offset right
x values do not seem to matter? (footnote 6)
001BLHxx Set byte data port enable to B (footnote 3)
Set two-line enable to L (footnote 4)
Set 11 raster character mode to H (footnote 0,5)
x values do not seem to matter? (footnote 6)
01AAAAAA Set data index to character generator offset AAAAAA
1AAAAAAA Set data index to display offset AAAAAAA

The character generator memory is documented by Psion, except for a few minor items that might prove useful with all the other data that are provided in this file. It seems that in 8-raster mode, there is enough character generator memory for eight characters. However, in 11-raster mode, there is only enough character generator memory for four characters. I have taken the 11-raster mappings straight from Hitachi's documentation, since I have not experimented with them.

Offset range 8-raster character 11-raster character
000000..000111 00,08
001000..001111 01,09
010000..010111 02,0A
011000..011111 03,0B
100000..100111 04,0C
101000..101111 05,0D
110000..110111 06,0E
111000..111111 07,0F
000000..001111 00,01,08,09
010000..011111 02,03,0A,0B
100000..101111 04,05,0C,0D
110000..111111 06,07,0E,0F

Pixels are mapped 5*8 as eight rows of xxxDDDDD where xxx does not matter, and DDDDD are the displayed pixels (1 is dark (on). In 5*11 mode, the pixels are mapped as 11 rows of xxxDDDDD where xxx does not matter, and DDDDD are displayed pixels as above, followed by five bytes that do not matter (they are ignored).

The CM and XP use the following display memory layout (cursor positions in hex arranged in the order they appear on the display):

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F

Off screen: 20..7F (seem to be arranged as additional 16-byte lines, as above).

*MY* LZ64 uses the following layout (no, it does not seem to make sense, and everybody at Psion I have mentioned this to swears I am totally out of my mind, but I have carefully verified it many many times):

00 01 02 03 08 09 0A 0B 0C 0D 0E 0F 18 19 1A 1B 1C 1D 1E 1F
40 41 42 43 48 49 4A 4B 4C 4D 4E 4F 58 59 5A 5B 5C 5D 5E 5F
04 05 06 07 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 27
44 45 46 47 50 51 52 53 54 55 56 57 60 61 62 63 64 65 66 67


Off screen: 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 (these positions are only my
best guess at the actual
cursor positions of the data)
68 69 6A 6B 6C 6D 6E 6F 70 71 72 73
34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
74 75 76 77 78 79 7A 7B 7C 7D 7E 7F

The Psion start-up sequence appears to use initially:

00000110 Cursor position auto increment, no display offset increment
00001100 Display enabled, no underline cursor, no flashing box cursor
00111000 Data port byte mode, two-line enabled, 8-raster characters

Footnote 0 : The Psion Organiser II seems to make no allowances for this
                   feature -- hardware, firmware, or software.

Footnote 1 : The cursor is not moved unless the command indicates it is
                   moved. Some commands shift the cursor (move by one), others
                   move it directly. ALL WRITES/READS to the data port will
                   shift the cursor automatically according to the address index
                   auto-increment/decrement flag.

Footnote 2 : It is possible to have any combination of cursor modes : both
                   off (Psion uses this when no input is desired), underline on
                   (Psion uses this for numeric input), flashing box on (Psion does
                   not use this), flashing box and underline on (Psion uses this for
                   text input).

Footnote 3 : In byte mode, the data port is accessed all at once. In nibble
                   mode (byte mode clear), the data port is accessed high-nibble then
                   low-nibble. Note that BOTH nibbles are in the upper nibble of the
                   port when in nibble mode the way the Psion has the device wired.

Footnote 4 : 2-line on CM and XP. 4-line on LZ. The LZ uses an odd sort of
                   interlaced screen. I have not yet found a quite satisfactory
                   method of addressing it. I am working on it.

Footnote 5 : This can not coexist with 2-line enable on the Organiser II. It
                   appears that the 2-line enable takes priority.

Footnote 6 : Hitachi indicates all `don't care' bits should be left zero
                   for what they call `future compatibility'...

Footnote 7 : Hitachi's documentation is /very/ vague here, but a little
                  experimentation indicates that the auto-update of the LCD offset
                  is in the `right' direction for the cursor movement. If the
                  cursor is set to auto-increment, so is the display. If the
                  cursor is set to auto-decrement, so is the display. This makes
                  it easy to set up a scrolling banner on a standard Hitachi part,
                  but works out to be well nigh useless on the Psion parts.

Copyright: Hitachi America, others & copyright Zac Schroff 1997.

If you would like to contact me to ask a question, generally chat or comment about this subject, or any other aspect of programming the Psion Organiser II I would be very pleased to speak with you:

Zac Schroff

These pages should be viewed using Netscape 4.03 or Microsoft Internet Explorer 3.02 at 800x600 pixels.
Left arrow Comms link Info ~ Homepage ~ Pack Information Right arrow