![]() |

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.
Thanks!
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
zschroff[-at-]docsware[-dot-]com
| These pages should be viewed using Netscape 4.03 or Microsoft Internet Explorer 3.02 at 800x600 pixels. | ||||
| Comms link Info | ~ Homepage ~ | Pack Information | ||