PocketBook II hardware...

It might be have been hard to believe back in 1991 when the organiser was 'new', but the original PC-XT which launched the PC revolution, well this organiser is basically a highly customised version of that computer miniaturised into something that can be held in the palm of your hand (hence the moniker "palmtop"), powered by just two AA cells.

Except for minor firmware modifications and slightly different styling, this information pertains also to the Psion series 3A organiser - it's actually the same thing!


All of this information has been gleaned from pilfering on-line sources, taking my organiser apart, reading datasheets, specs, educated guesswork... and when all else fails, inspired guesswork! This information is presented in good faith and believed to be correct, however only Psion know for absolute certain the intricacies of their creation. If I have got anything wrong, please email me!


The heart of the organiser

Obstensibly, the heart of the organiser is a V30 processor core (a 16 bit fully-static CMOS version of the 8088) which is clocked at 7.68MHz (akin to an XT in 'fast' mode).
While it might be reasonable to assume that the processor will be supplied with I/O and memory decoding circuitry, within the organiser it is actually all in one IC. A device called an "ASIC" which is custom produced for Psion. By putting pretty much all of the logic and circuitry into the one IC, Psion can exert a fine control over its operation. Don't need the serial link? Power it down. Don't need the speaker? Power it down.

This organiser is dated 1991-1995. In those days technology was not quite as advanced as it is now, so Psion had to take every possible concept that could prolong precious battery life. Indeed, when you instruct the organiser to turn off, it is entirely clock-stopped, simply frozen in its current state. This allows an instant resume exactly where you left off when turning the organiser back on. In fact, you can get in the habit of simply flicking it off when you aren't actually using it, and it doesn't matter if you power cycle it every other minute - just try that with most laptops (that may take almost that long to 'hibernate' and 'resume').
† - that isn't entirely true, a minimal (and slow, very low power) amount of operation occurs so that events such as alarms are not missed and also to keep the 'clock' correct.

Also within the ASIC is memory decoding, sound output, audio sampler, LCD driver, keyboard decode... Most of the mechanism of the organiser is on this one IC.

It isn't easy to correctly disassemble one of these organisers, so take a look at the picture below if you want to know what's inside.

Click to see a larger, non-annotated, version (944×434, 188K)



Originally, the PocketBook II existed in 256Kb and 512Kb versions. Mine, pictured above, is a 256K version. Sadly, you can expect to lose ~90K to the 'Desktop' (basically, OS functions and screen buffering), plus the 'internal disc' (device "M:") shares system memory.
In short, a 256Mb organiser will start to seem cramped very soon. In fact, my RShell utility outgrew the ability to open the file in the editor and translate it. Thankfully I could edit and translate it on the PC (using Metapad and S3Atran respectively) and zap it across with PsiWin for testing.
All is not lost, however. The organiser can accept SSDs. More about these later.

It just so happens that if you are adept with a fine-tipped soldering iron, apparently all that is required to upgrade a 256Kb organiser to 512Kb is to locate compatible memory chips and solder them in.

There are also 1Mb and 2Mb versions of the Psion 3A, but these did not make it to a PocketBook incarnation - I've heard rumours but never seen an actual 1Mb PocketBook.

Note that due to different RAM addressing and support, it is not possible to upgrade a 256Kb/512Kb model to 1Mb/2Mb, though I believe the 1Mb may be upgraded to 2Mb in much the same way as 256Kb to 512Kb.



A 2Mb ROM holds a basic windowing system, all of the built-in applications, and the spell-check dictionary and thesaurus (which is not supplied as standard with the Psion 3a). There isn't much to say about this really. What I can say is the ROM version is 1.30F, so several of the quirks reported on-line are not present in the PocketBook II. Sadly the habit of Write (Word) to search by splitting the text into 256 byte blocks from the (paragraph) start is still present. This means in the unlikely case of a search match straddling the boundary, it won't be located...
It is interesting that the two German Psion users (who have websites describing upgrading the memory) say that the lower spaces for ROMs are empty on their machines as they have no built-in spell check. Did Acorn produce some sort of magic? For all I can see, we lost the "Jotter" application and we gained a graph plotter and a full spell check and thesaurus. It's only the one ROM chip!
I am open to correction, however I believe the 256K/512K versions of the Psion 3a contains a 1Mb ROM (with no spellcheck), while the 1Mb/2Mb version contains a 2Mb ROM with spellcheck and some version of 'Patience' unlike any I've ever seen before...!



On the underside of the organiser, two "wings" open out into which you can insert SSDs - Solid State Discs - measuring just 63mm x 43mm x 6mm.

Acorn released several types of SSD: Psion released a wider range of expansion cards - various types of SRAM and FlashROM up to 2Mb (I believe even larger sizes are available but are quite rare).
I mention this because, as it is essentially the same machine, the Psion SSDs are completely usable in the PocketBook II (and vice versa).
As it turns out, the SSD interface is a six-pin connection. If you're thinking that that sounds like the interface link (below), then you'd be right. It's exactly the same type of interface. In fact, the memory cards contain an ASIC (usually v4) to translate the Psion link into something that can 'talk' to the additional memory.
The picture above right shows how the SSD fits into the organiser. Here it is inserted into slot A, with the organiser upside down. That's the left-hand slot as you look at your organiser in normal use. You can see from the styling that the SSD type and capacity is clearly visible as soon as you open the slot door.

[on a 14" display, these are roughly 'real size']

The SSD interface is six pins in a line. You can see this clearly if you peer into an empty SSD slot. As said above, it is the same "Psion serial link" as used to connect to the serial/parallel ports.
This link runs at 3.84MHz (nominal) for memory (i.e. SSDs) or a continual 1.536MHz for peripheral expansion. The data is eight bit data transferred in 12 bit frames. This leads to a maximum data transfer rate of 312Kbytes per second for memory or 150Kbytes per second for peripherals. Achieving over 300K/sec to memory is actually faster than you would get from most ST506 harddiscs of the 8086 era, and comparable to the early IDE harddiscs, and is roughly the same speed as I measured to an Apple Miniscribe 20Mb SCSI harddisc - so even with the bottleneck of a serial interface, the SSDs perform well.
The effective data transfer is considerably slower due to the necessity of 'communicating' with the memory ASIC first, rather like using the Internet over dial-up is never as fast as using a BBS at the same link rate - because the Internet works with packets and has a fair amount of overhead; likewise for the Psion link, the 300K/sec is not pure data streaming.
However the main gotcha is the effective processing rate. It takes the word processor (database, diary...) a good few seconds to load up large files because once the data has been pulled off the SSD, it needs to be interpreted. Most software uses variants of the internal 'database' structure. The agenda, for example, is a big database file†. Even word processor documents are a form of database file†. Arrays must be set up. What-is-displayed-where must be worked out. And so on. You'll find the bottleneck is probably not the SSD, but rather the limitations in processing power due to the not-quite-8MHz processor. However, if you are prepared to require a little bit of patience, you will get a lot from your organiser. Show me some other tech from 1991 that is as useful today as it was back then? And remember, of course, in 1991 this organiser was well ahead of the game.
If it is any consolation, I have a text file reader ("MTextReader", written in J2ME) on my Nokia 6230i mobile phone. Don't remember the specs off-hand, but that software was slower at loading a plain text file of one of my source codes (24K) than my organiser. Exact same thing, the PocketBook II did it quicker! So the lesson here? Speed is relative. If you want instant loads, get a laptop. Find you can't fit it in your pocket... ☺
† - these database files use numerical fields so the database application cannot be used to view the contents.

The interface consists of the following:
Pin Name Function
1 MSD Serial data
2 MCLK Serial clock
3 Vcc +5V supply
4 GND Signal ground
5 SSD/INT Interrupt
6 SCK/EXON Wake up system
There is no point saying which way the pins are numbered, as the link uses a proprietary protocol and must, therefore, be connected to a Psion ASIC device (usually ASIC4 or ASIC5). To my knowledge there is no third-party implementation (bit bashed parallel port, or otherwise) of the Psion link protocol.


What's inside an SSD?

The SSD itself is actually really simple. If we open up the Money SSD (don't worry - it is already damaged), we can see that it's a tiny board in there...

If we extract this board and flip it over, you can see that it is basically a programmed ROM and an ASIC along with some interfacing stuff.

Because the ASIC is a powerful and fairly general-purpose device, the user memory SSDs are not really all that different.
You might feel that memory SSDs tend to feel a little bit weightier than would be suggested by the above. That is correct, obviously the larger the SSD the more it contains inside. Pictured below is the innards of a 1Mb FlashROM SSD which fills the SSD container. The board is resting upon the plastic-coated metal flap of the container (you can see the clips at the corners). This one works, so I really don't want to touch the circuitry!

When you write files to a FlashROM SSD, the old file is left intact and is simply removed from view of the organiser. A new copy is appended to the logical 'end' of the data held on the SSD... think of it as a big wodge of fanfold printer paper. You can print a letter to Auntie Mabel on the paper, but if you want to make a correction, you will need to print another copy and forget about the old one. The FlashROM implementation (of the Psion era) works a lot like that. When the FlashROM is 'full', you will need to copy off the visible files and reformat the device in order to reclaim space.
It would be kinda cool if the FlashROM acted like USB memory devices, MP3 players, etc where it is essentially a RAM without any batteries... but it doesn't. So it is really useful to have a little switch (lower centre-left of the photo) to force the device to be read-only so you don't inadvertently waste a load of space on the device by, for example, the simple act of loading a database file into the Data application, then quitting it (usually causes the file to be updated); or even if your own programs, opening a database file using OPEN (open read/write) instead of OPENR (open read-only).


Peripheral interface link

This is a plug-in wire with a lump, often referred to as a "soap on a rope" due to its appearance. The organiser talks to either a parallel interface or a serial interface. It outputs standard parallel for a range of printers. For the serial link, you have a choice of standard serial for modems and other comms, or a proprietory link protocol for connection to a computer (i.e. PsiWin, or PsionFS...).
If you are interested, the Acorn RISC OS Psion link project is available as source code, plus a horrendously detailed document describing practically every aspect of the link protocol.

Acorn released the A-link, while Psion released the 3Link. The difference? Allegedly the serial port wiring (Acorn had to tweak the A-link to work around a botched serial implementation in early Acorn machines - a cockup which plagued them for over a decade). I say "allegedly" in italics like that as the Psion 3Link is connected to Angelique (my laptop) while the Acorn A-Link is connected to Aiko (my tower machine). Both are PCs, both running some version of Windows. Both work fine, actually, with either cable. So perhaps all Acorn really did was stick an 'Acorn' logo on it? ☺

The Acorn A-Link and the Psion 3Link.
You can move your mouse over the picture to peek inside,
or click it to view the hi-res version (1837 × 1037, 340Kb).

I am currently using an A-link (with the PC lead) to communicate with my PC. Internally, apart from a few minor revisions to the circuitry, both are identical. They use an ASIC5 to interface with the 3link ROM (yes, the A-link contains a 3link ROM!), and to talk 'serial' to a MAX241 which converts the voltages into something more expected of RS-232. This then connects to the appropriate serial cable by way of something not unlike a PS/2 keyboard or mouse connector.

I would imagine the parallel link replaces the MAX241 with TTL buffering. You see, the ASIC5 is a very versatile device. It can be a memory interface, it can do serial, it can do flat TTL serial, it can do parallel. It's a shame it is so damn tiny, it makes considering DIY interfacing to be somewhat difficult!

If you pull the serial lead out of the link module (don't worry, it is like a PS/2 keyboard or mouse socket) you can peer inside and see a little switch. Written beside it you will see "AUTO WAKEUP" and a position of OFF and a position for ON. The switch is normally OFF.
How this works... If you leave to Remote link "ON", then when the organiser is switched off you can plug in the 3Link (or A-link) and fire up PsiWin (or PsiFS?) and the organiser will notice this and switch itself on.

However, it is not recommended you leave the remote link on because: it takes 12Kb memory when not connected (more during a connection); it could reduce battery life; it could pose a security risk - a passworded organiser will switch on with the password prompt showing meanwhile full access is granted to the connected computer...
I mention this "AUTO WAKEUP", though, as it might be something to play with. ☺

ASIC5 is capable of clocking a serial link up to 48000 baud. This translates to a fastest useful speed of 38400 baud. Unfortunately it appears as if the operating system cannot cope with serial speeds that high. The built-in comms program only offers up to 19200 baud, as does the remote link option. Forcing a higher speed (you can try this with a snippet of OPL) results in failure. It can't keep up!
If you think the serial transmission is slow, please keep in mind that 19200 refers to the baud rate, the number of changes per second that can equate to 1 bit. If we assume a ten bit frame (1 start bit, 8 data bits, no parity, 1 stop bit) then we can see that we can actually only achieve 1920 bytes per second, a little under 2K/sec. This will drop to less in most remote link conversations due to the link overheads (who's talking to who, what do they want, CRC verification of the data being sent, etc etc).
Please keep in mind that a connected and active serial port is always powered and clocked and active - this is so it can receive. Not an issue running from mains, however when you are powered by batteries you should disable and disconnect the serial link when it isn't required.


Audio output

The organiser provides a three-volume audio output (off, quiet, loud) which may be utilised as a key-click, church bells for an alarm, or the playback of sampled sounds.
Also mentioned in the publicity is the DTMF dialler. Provided that you correctly set the home location to your current location, and you store phone numbers in the database in international format (i.e. +33 (0)299 47 xx xx), then it will correctly dial from France (029947xxxx) and it will correctly dial from the UK (003329947xxxx) without any further modifications. The same is true in reverse. Furthermore, if you are willing to experiment with your telephony equipment, you can fine-tune the DTMF durations to make it as fast as possible so it'll be like bi-bi-bi-bo-bi-bip instead of the regular beep-beep-beep-boop-beep-beep!


Audio input

Front-right corner of the organiser, there's a little slot. Behind this slot is a microphone. Sound is recorded to 13-bit accuracy, 'compressed' to 8-bit using the Alaw algorithm. 32Kb will hold 4 seconds of audio, so on lower-memory organisers this might be a bit of a gimmick. However if you have more memory or an SSD, you could always record yourself saying "meeeep!" and get this to repeat as your wake-up alarm. Yes, seriously! Or, perhaps, you could say "Get your fat lazy ass outta bed you miserable piece of <expletive>" if you think that is more likely to rouse you from your slumber. ☺


The keyboard

The keyboard is a rubber tactile 58 key keypad with actual plastic buttons on top - so it is like a real keyboard and not that icky old ZX81. The buttons are a good shape and feel nice, unlike the hideous Oric keyboard. All in all, it is surprisingly responsive in use, and the "Control" shortcuts for accented characters are easily remembered (mostly!). It is, as always, possible for keypresses to be missed - perhaps moreso with the organiser due to potentially unfriendly operating conditions, like sitting in a car... For this reason, the organiser can give a brief 'click' which can act as feedback to the keypress. Quiet volume will usually suffice, you'll be amazed that you can train yourself to automatically retype if you didn't hear that click.

I must present my one little gripe with the keyboard. While some keys differ due to space and accessibility reasons (you can '*' without shifting, but you need to hold the Acorn-logo key to '#'), one key is '+' (unshifted) and '=' (shifted). If you glance at your PC's keyboard, or the picture to the left, you'll notice that it is the other way around. I'm forever mistyping these two characters in OPL because of this!

If you ever think of taking your organiser apart, don't! But assuming you ignore me and do it anyway, you might find this useful if you have a keyboard disaster... (note, this is for the UK version)

The Series 3a keyboard is the same, except for the fact that the placement of the apostrophe and the circumflex (' and ^) are swapped, as shown on the right.
Additionally, the 'Help' key has a "Dial" caption above it to remind you that it is the dialler shortcut. It does the same thing on the PocketBook II, but there is no reminder.
Oh, and it goes without saying that the Acorn logo key is replaced by a sideways diagram of a boobie poking a wall, or whatever other image that odd little Psion hieroglyph is supposed to represent!
There are also eight 'shortcut' keys just below the display which are (mostly) reprogrammable. If you never use the World application, you could reprogram the key so World runs Verbe and Control-World runs RShell. Examples using my software, but it could as easily be any software...


The display

The display is a non-backlit 480 x 160 high contrast retardation film LCD. No, I don't know what that actually means either. In any case, it provides support for three 'colours' (white, grey, and black).
At its most teeny-tiny-hard-to-read, you'll be able to fit 80 characters across the screen and 17 lines down it. My RShell uses a similar style of output to pack as much information in the smallest possible space. Note, however, that those with sight problems will probably not be able to make sense of this text. Those with good sight may find this text difficult in low-light conditions.

Within the organiser, the 'display' is organised into two planes - a grey plane (which may be omitted if only black and white is required, it saves a little bit of memory...) and a black plane. The black plane takes precedence, so if a black pixel is set, it doesn't matter about the underlying grey pixel as it is not visible. Any pixels that are not set in either plane will be 'white'.

Even with some 70,000 pixels to play with, OPL does not provide many graphics primitives, there is no built-in support for circles, ellipses, bézier curves and the like. These can be implemented in the pixel-by-pixel method well-known to those who grew up with '80s computers (that didn't do it either). On-line examples use plotting primatives, though with care and attention it may be quicker to poke around in the screen bitmap? (may be 'interesting' trying to do that in OPL with the OS's process protection, and the segmented nature of the 16 bit x86 memory addressing!)
What OPL does provide is quick and easy access to the windowing facilities. The prompts, the menus, the status displays. All can be implemented fairly easily within OPL.

Here are the four built in text sizes, from smallest to largest:
These font sizes correspond to 8, 11, 13, and 16 pixels. Comparable font definitions exist in a sans-serif style. There are two mono-spaced fonts, an 8×8 plus a really tiny 6×6 (refer to a picture of my RShell to see this).

People have observed that the display flickers in bright light. I get this too, but since my eyes are sensitive to flickering, I will let you know that my other little PDA flickers too, and if I hold my Creative Zen upside down (modern 16m colour LCD display) you can see flicker. This is an artefact of display technology versus refresh rate. The solution is to simply not use the organiser in direct sunlight (which isn't good for it anyway), or too close to overly bright lights.
I prefer my organiser to err on the side of 'light'. If you step the contrast up until the display is nearly black, one more step up will make it nearly white (it wraps around). Press the contrast up five more times. That's how I like my display (note that variations in ambient temperature greatly affect the contrast), and this preference is reflected on this website in the 'grey' plane being less than 'half black' in the screenshots.

The only other complaint that I would level at the display is that it is quite temperature sensitive, this again being a property of the display technology of its era and not a 'fault' of the organiser. If I am carrying the organiser in my jacket pocket and it is a chilly day, I need to set the contrast quite high in order to be able to read anything. Then, when I'm in a warm place, turning my organiser on shows a near-black screen so I need to step the contrast back again in order to see what I'm doing. Tweaking the contrast quickly becomes second nature, however it can be a little disconcerting, like if you turn the organiser on and nothing happens (as it is cold and the display isn't showing!). Your immediate thoughts are not "oh, okay, it's cold". No, you start with "the batteries are flat" and run the gamut up to an EMP strike by Al Qaeda cooking every electronic thing around. Then you wodge up the contrast, let out a sigh of relief, and think "okay, no pulses today..."!

Acorn vs Psion displays

While both the Acorn PocketBook II and the Psion 3a are based upon the same hardware and, largely, the same operating system, there does appear to be a small difference in the display technology used.
The PocketBook II uses a display with a slight greenish hue. With the organiser off, the screen has a very pale green tinge. This would explain to users of a Psion 3a why some of the examples on this website are tinted green.
The Psion 3a, on the other hand, has a display that is mostly clear. There is a very very slight smokey tint, but this is to be expected given the fact that there is liquid and tiny circuitry stuffed between layers of glass, using a reflective material and polarisers to create a display. It won't be paper-white, that's just not possible!
As to which is easier to see - at the moment I find the Psion 3a to be more difficult to read. I do not know if this is because of mechanical differences in the display, or if it is simply a subjective problem because I am used to the PocketBook II's display. Time will tell.


The Operating System

The organiser's OS is referred to as EPOC in some documents and SIBO in others. If we were to call it EPOC, it'd be best to call it EPOC-16 to avoid confusion with EPOC on the series 5, or certain mobile phones.

Here, I will generally refer to the OS as SIBO (which means SIxteen Bit Operating system - yes, really!).

The OS is fully multitasking. It is possible to start an OPL translate, then switch to something you were writing in Write, or pop over to the Agenda to see if there are any good movies on Film4 that you ought to be watching instead... You can even cut and paste stuff between tasks (the 'Bring' command).

Having used the organiser quite a lot now, I can report that apart from a few minor quirks, it is solid and reliable. I have only had to reset it once - when I killed the unkillable 'Time' application to see what would happen (erm, not wise!). A soft-reset later, my data was intact, the organiser sorted itself out, and it's been in use for hundreds of hours, maybe thousands, off of batteries, off of mains power, travelled with me in my backpack... and not had a problem. If I get a flash of inspiration (ha! me?) then it is right there with me. Basically, my friendly organiser has been within reach ever since I got it - and it is still right here with me making sure my bank account isn't a mess and that I don't see my doctor when I should be seeing my dentist!

When I get sorted out with a job over here , then I may look to getting a more modern PDA. I won't leave the PocketBook II behind though, I only hope the more modern Blackberry-era PDA is half as reliable as SIBO and its built-in software have proven to be. But, then again, I could always look for a second-hand series 5?

[later: I'm not sure about the series 5. Playing with the emulator and reading the 5mx user guide, it looks to be a great organiser with two important quirks. 1: It is possible to add custom software to the organiser, using a rather complicated (to create, not to use) SIS installer system, but it does not seem possible to arbitrarily arrange the order this is shown, so you can't keep "tools" (diary, bank account, household expenses, etc) at one end and "games/leisure" at the other. Is this correct or have I missed something? 2: It seems that series 5 does away with file extensions and instead associates a UID with files to link which files belong to which program. Using OPL on the emulator, I have not found a way to create/open a file specifying its UID - so I am not yet able to write a program that, when a file is chosen, is automatically started. As this is a rather important facet of how the system works, how come the OPL guide makes remarkably little reference to this?]

Between you and me, I'd really like to get my hands on the source of SIBO. I don't really understand x86 assembler, but I'd learn in order to discover more about this operating system. Apart from a few application quirks and bugs, the system appears to be rock solid.


Power (battery)

PROC TestMe:
  LOCAL line%, tick%
  LOCAL fp%, data%(2048)
  tick% = 1
    REM Set screen to black
    gGREY 2
    line% = 0
      line% = line% + 1
      gAT 0, line%
      gFILL 480, 1, 0
    UNTIL (line% = 160)
    REM Clear screen
    gGREY 2
    line% = 0
      line% = line% + 1
      gAT 0, line%
      gFILL 480, 1, 1
    UNTIL (line% = 160)
    tick% = tick% + 1
    IF (tick% = 20)
      REM Write to SSD
      PRINT "Create, ";
      IOOPEN(fp%, "A:\test.dat", $0102)
      PRINT "write, ";
      IOWRITE(fp%, ADDR(data%()), 8192)
      PRINT "close, ";
      PRINT "done."
      tick% = 1
The organiser can run from 2 AA cells, plus a CR1620 lithium cell to back up the memory contents during battery changes.
You are supposed to obtain around 60-80 hours continuous use (2-4 months 'typical' use) from alkaline cells. Using NiMH rechargables, I obtain from 8 to 30 hours of use. The batteries keep the data intact while I carry it around with me, away from the mains connection. I cannot say how long they will last as this depends upon use. What I can say is that if I have four AA rechargeables and I have two in the organiser and two to replace with, it is not a problem... furthermore, if I am out and have forgotten my spare batteries, any old AA cells will get it going for a while (duration depending on the type of battery, you'll even get service time from those naff saline cells!).

Here is an idea of what you can expect from two NiMH cells. The "batteries low" indicator is on, and has been for a couple of days (and about four hours of use, so far). The batteries are "low" but not expired.

My mother uses the organiser quite a bit these days to write long emails to her friend in Australia, as sitting at the desktop PC hurts her back.

In order to determine the actual rough lifetime of batteries on a system under loading, I devised a short program to repeatedly fill and clear the display; as shown on the left (if you cannot see this: it is a Flash SWF, you can also download an XviD MPEG4 version). Every twenty passes, it writes an 8K file to the RAM SSD. The automatic switch-off was disabled, and the organiser was set to run the program continuously. When the organiser shuts itself down is taken as the length of time it will run on a set of batteries while in constant activity.
The OPL source code for this test is shown on the right.

Please note that the batteries used were cheap generic alkaline cells. There were chosen for two reasons: firstly to see how long the organiser will run on inexpensive AA cells; and secondly I plan soon to turn on the organiser (using the other two batteries from the pack, so we're comparing like with like), then leave it in the system screen to see how long it will run when all the power-savings stuff can kick in.
What this means, however, is that if you use good long life batteries then you'll get a whole lot more processing done...


Power (external)

Your best bet to power your organiser may be a 9V mains adaptor (obviously not while 'in the car' or what-have-you!). The organiser can switch between power sources without so much as a hiccup. In fact, the power settings has a useful option to auto-switch off if not running on external power. I have, in the past, forgotten to switch my organiser off at night, and it is still waiting for me, and not hot - not even warm - in the morning. I left it running on mains non-stop for a week, not a problem. In fact, it'd be perfectly possible, if the organiser is in a situation where it 'monitors' something, to be connected to the mains and always-on (and with no auto-switch off, the batteries can ride out power cuts).
A little digression... The only thing the organiser appears to be missing in this respect (i.e. power handling) is the ability to have a 'boot' script (let's call it Autoexec.bat!), so if all power is lost, it can switch itself on and resume when power is restored. The data will be okay, the memory backup battery will see to that, however the organiser will come back to you in 'off' mode (i.e. in standby, out of 'on' mode - it is important to realise 'on' and 'off' are not absolute states like a light switch).
I guess it could be forced by clever use of the Auto-Wake-Up on the serial port to cause the machine to 'come alive'? Or perhaps it may be possible to set some sort of alarm semaphore to trigger every minute? I have not looked into this. I know it is possible, set an alarm and the organiser will switch itself 'on' and 'ring' the alarm at the correct time.

I am using a mobile phone charger to run my organiser. The organiser claims to consume 150mA which is within the capabilities of most mobile chargers. I specify this type of power-pack in particular as the jack to connect to the organiser is a strange mini size, so you're most likely to find the same sort of plug on a mobile charger - try Nokia. The benefit of a mobile charger is that they are usually very small. You can pop it into a jacket pocket, briefcase, or backpack and pull it out for use in a hotel room, ferry cabin, office, etc etc.
If you intend to purchase a power-pack in boot sales or the like, there's no reason why you cannot take your organiser with you (what d'you mean you don't carry it always?) and try seeing if it'll fit before you buy. If the price is right, you could always buy one power-pack for the supply and another for the plug!
Note for the paranoid: If you are buying a power-pack for the plug and the output voltage is different, it may be useful to pop a little piece of solder into your pocket. Then, prior to plugging the thing into your organiser to see if it fits, you can poke the piece of solder into the middle of the plug and short it to the outside of the plug. There is unlikely to be any charge stored in capacitors in stuff you'll find in a boot sale, but just in case there is...

The organiser expects a POSITIVE outer and a NEGATIVE inner. You should always check the output of the supply with a multimeter to ensure the polarity is correct and that the supply is no more than about 11V. Do not make assumptions based upon what is written on the power pack label. It may be broken, fiddled with, incorrectly 'repaired'. It is unlikely, but possible, for a broken switchmode to deliver a few hundred volts. You don't want that inside your organiser!
I had to change the polarity of my power-pack, you may too. This can be achieved by opening the unit, disconnecting the wires, and soldering them back in place the other way around...
...or if you don't fancy mains voltages or if you don't have a soldering iron you can simply cut the lead in the middle, strip the insulation off the wires about a centimetre, twist them back together as appropriate to reverse the polarity, wrap some electrical tape around the joins, then wrap some around both joins to keep the whole thing together and tidy. Verify it all with a multimeter that it is correct.
It isn't too late to change things if you had a mental hiccup. Once you've fried your organiser, it is too late...

Never buy a power supply that doesn't have a rating sticker on it. Newer phone chargers are useless (3V and 5V is too low). Some games unit and computer unit supplies are too low (6V and 7.5V). Model car battery chargers are too low (usually 7.6V nominal). Car battery chargers (!) are too high (13.4V nominal). The very very worst thing you could do is use a power supply destined for a laptop, scanner, or inkjet printer. These vary from 16V at the low end of the scale to 40V at the high end. For example, an HP DeskJet power supply pushes out nearly 40V. It is rated 30V but that's when it is driving a printer. A few dozen milliamps to power your organiser barely constitues a load, so you can expect to be pushing over four times the desired voltage through it, with current to spare. It'll be microseconds before you start seeing smoke...
I said above that a 9V supply will probably float around 11V. This is because most unregulated supplies will drop according to load, they usually 'float' a couple of volts above their rated voltage.
Hit it with a load, like a 12V Christmas tree lamp, or low-power car lamp (like the 'interior light', not a Halogen headlight!) and the voltage should drop.
The exception to the rule is the switch mode power supply or the regulated power supply.
How do you tell them apart?


Obviously, now, the very best supply is Psion's own. I speak from experience when I say a decent correctly-wired 9V supply will suffice. But no more than 9V, okay?


The processor

In the hardware development kit documentation (HDK), Psion describe their machine as follows:
All present Psion computers are based around the proprietary SIBO architecture. A SIBO machine is a battery-powered, 8086-based, computer system. (this was written before the ARM-based series 5 was introduced)

We've already established that the processor core is a V30 device (V30HL in the 3c?), which is properly known as µPD70116.
The V30, designed by NEC, is a 16 bit CMOS processor which is completely code-compatible with the 8088/8068 processors. While it runs at the same speeds as the 8088, it is around 20% faster (depending on the application) due to numerous internal improvements. For example it can multiply natively (in hardware) while the 8088 had to perform multiplication with a microcode program. The address calculation is quicker, the loop counting is better, the shift register implementation is faster...
The V30 can execute 8088/8086 instructions (in NECs documentation the opcodes have V30 specific names but code assembled on, say, MASM or Turbo Assembler, will be executed without problem). The V30 includes the later 80186 instructions, plus a few instructions unique to the V30 for bit processing and other stuff, plus (bizarrely) a complete 8080 emulation mode.
The processor runs at 7.68MHz in the organiser. In common with the older processors, the core frequency and memory interface frequencies are the same. The external address bus is 8 bit, with a 20 bit address bus. The V30 features a dual 16 bit data bus internally, which provides better internal throughput than the 8088. Introduced in 1979, this processor contains 63,000 transistors. Just thought you'd like to know that. ☺

The above information applies to the V30 as a discrete part. It may not apply entirely to the organiser as the organiser contains a custom ASIC of which a part is a V30 core. It is possible that various changes may have been made in order to offer greater throughput - perhaps the ASIC uses a 16 bit data bus internally? The memory protection is implemented in hardware (source: Psion SIBO HDK). I do not have have any technical information on the main ASIC.
The 16 bit x86 processors contain a number of registers, which I shall now describe. The register name shown in bold is the Intel name, and the name shown in brackets is the V30 name. I have chosen to prefer Intel terminology as most people seem to treat it as a type of x86 device; hence the register variables frequently defined in OPL software are AX%, BX%, CX%, DX%, SI%, and DI% instead of AW%, BX%, CW%, DW%, IX%, and IY% which are the V30 names.

AX (AW) - Accumulator
There are four 16 bit general purpose registers, and this is the first. The x86 processors can also treat this register as two 8 bit values, where it will be referred to as AL (A - low) and AH (A - high). AL/AH names are the same in V30 terminology.
As the x86 is highly non-orthogonal, there are specific instructions make use of this register:
  • AX - word multiplication and division; word input and output; data exchange.
  • AL - byte multiplication and division; byte input and output; BCD rotate; data exchange.
  • AH - byte multiplication and division
To see what I mean, consider a brief description of the MUL instruction:
Unsigned multiply of the accumulator by the source. If 'src' is a byte value, then AL is used as the other multiplicand and the result is placed in AX. [etc]

This is obviously different to, say, the ARM processor where the MUL instruction is as follows:
The MUL instruction multiplies the values from Rm and Rs, and places the least significant 32 bits of the result in Rd.
The only restrictions are that Rd cannot be R15 (the Program Counter!), and due to the multiply algorithm Rm and Rd must be different registers. All other combinations of register are possible.
BX (BW) - Base
As above; this instruction is used in translation table data exchange - namely the XLAT instruction; and also in indexed addressing.
CX (CW) - Counter
As above; this instruction is used as a counter - for example the LOOP instruction will decrement CX and loop if it is not zero. It can also be used to count how many shifts to perform with ROL or ROR, etc.
DX (DW) - Data
As above; this instruction is used for word multiplication/division, and also input and output using indirect addressing.
Back to the MUL instruction for details:
Unsigned multiply of the accumulator by the source. If the source operand is a word value it is multiplied by AX and the result is stored in DX:AX. [etc]

The x86 can address 64K, and it splits up the nominal 1Mb addressable memory by using a segmented addressing system where a 16 bit address is added to a 16 bit segment reference to generate a 20 bit physical address.
For example, you may have seen addresses in PC clones (in the DOS era) specified with a syntax such as DC00:0010, which is DC000 + 0010, or the physical address 0xDC010.
How this works is that you have two registers for the address. The most significant is the segment register (i.e. DS) which in our example is DC00. Then you have the displacement register (i.e. SI) which is 0010. The processor will shift the segment register to the left four places (effectively a multiply by sixteen) to form the address DC0000 to which the displacement will be added. In total, the final address is DC010 as shown.
Growing up with the 6502 and then the ARM, I find this method of addressing to be extremely messy. However we must remember that the 6502 (first produced in 1975) and Z80 (first produced 1976) could only address 64K of memory. The 8088 (first produced in 1977), by using this horrid segmentation scheme, was able to address a mindblowing megabyte.
The problem, and the complication that often causes confusion, is that squishing two sixteen bit values into a twenty bit result can cause a number of important overlaps. For example, the BIOS machine ID (in a generic 'PC clone') may be determined by hoiking a word from the address FFFF:000E. The value will probably be 0x00FC or 0x01FC which will mean "I'm an AT clone", as PCs don't really use this information any more.
However, to complicate matters, this location can be addressed as FFF0:00FE or FF00:0FFE or even F000:FFFE.
Basic logic may suggest to use the segment register to specify the segment, and the offset to specify a 64K offset within this segment (i.e. F000:FFFE), however it seems that in reality, the segment register holds most of the address, so you'll see the machine ID quoted as being at FFFF:000E.
Yet another complication arises from the fact that the four segment registers may refer to the same actual 64K location, to four different 64K locations, or to a mixture. This gives rise to the concept of memory models, and in using trickery to address data of more than 64K (thus polluting the C programming language with the keywords far and huge).
As a brief aside, this is the difference between a .COM and a .EXE in DOS software. The .COM can only work within the so-called 'tiny' memory model in which case CS = DS = ES = SS (definitions just below), while .EXEs can work in whatever memory model the programmer sets the compiler to. Asides from embedded code designed to recycle old hardware and programs where function is more important than looks, you'll be hard pushed to find many 16 bit DOS applications these days. I believe Vista cannot run 16 bit DOS software natively, it needs a third-party emulation layer (i.e. DosBox). Software written for Windows (Win95 and later) uses a flat 32 bit address system and segmentation is simply a ghost of the dark ages before anybody really knew who Bill Gates was...
It gets even better - because of the overlaps, it is possible to set the segment registers differently and use specific offsets so that all of the memory locations referenced point to exactly the same place. I guess this might have made sense back in the '70s when the original PC design was considered 'advanced' it if had a full 256Kb of memory. I have also used an XT clone (some sort of Tandy computer) offering 640Kb on-board, plus a "Turbo" button to select between 4MHz and 8MHz (roughly) operation. Accordingly it was always running 'fast'! All of this is hard to swallow if you are used to the sort of stuff available these days, but, you know, there WAS a time when entire software packages fit into a hundred kilobytes. Now you'd be hard pushed to find a support DLL that small!
For what it is worth, and to brag a little, I have written a simple GIF image viewer in ARM code. The entire application? 2048 bytes exactly. Why? Because I could. Perhaps as a karmic balance for my VisualBasic code which offers an acceptable size .EXE along with a less acceptable 3½Mb worth of support junk.
But I don't need to brag too much, do I? After all, the organiser you hold in your hand offers a functional word processor, diary, spreadsheet, spellcheck, and simple database application. And you might have 256Kb on-board, plus one or two not overly large memory devices which may be used for files (not extended memory). Oh, and let us not forget OPL so you can download or create lots of additional software, such as a handy French verb reference, a bank account manager, biorhythms, games, solar compass, etc etc.
Anyway, the majority of this stuff about segment registers is of little consequence to you when coding on the organiser as messing with the segment registers can cause some very unpleasant effects. This is purely provided as a brief explanation as to what these registers are actually for.
CS (PS) - Code Segment (Program Segment)
This specifies the base address of the segment storing the program's instructions.
DS (DS0) - Data Segment (Data Segment 0)
This specifies the base address of the segment storing the data.
ES (DS1) - Extra Segment (Data Segment 1)
This specifies the base address of the segment used by data transfer instructions as the destination.
The MOVS (move string) instruction shows how DS and ES are used:
Copies data from addressed by DS:SI (even if operands are given) to the location ES:DI destination and updates SI and DI based on the size of the operand or instruction used.

SS (SS) - Stack Segment (same)
This specifies the base address of the segment storing the stack. When you PUSH or POP stuff on/off the stack, the actual address is formed with SS:SP.

SP (SP) - Stack Pointer (same)
This register holds the least significant 16 bits of the stack address. When data or status is to be written to, or read from, the stack, this register is merged with the Stack Segment (like SS:SP) to form the physical address.
BP (BP) - Base Pointer (same)
This register is used in various forms of addressing for data access as an index into the specified segment, like BP:DI, etc.

IP (PC) - Instruction Pointer (Program Counter)
This, forming a complete physical address in the style CS:IP, specifies the address of the next instruction to be executed; this pointer being incremented as the instruction is loaded and thus processed.
Treat this register as a "you touch, you die".

SR (PSW) - Status Register (Program Status Word)
This holds various items of status: Carry flag, Parity flag, Auxiliary Carry Flag, Zero Flag, Sign Flag, Break/Trap Flag, Interrupt Enable Flag, Direction Flag, Overflow Flag...
V30 / 8088 Processor Status Word

In OPL, the OS keyword returns the flags after making an OS call. The only flag of specific interest is the Carry flag (bit zero - the 'error' bit) which is set if a system call failed. Note that non-error-generating system calls (i.e. those which return a failure code instead of an error) may also set this bit.
The only other two flags of interest are the Zero flag (in bit six - called EQual) and the Sign flag (in bit 7 - called SL); which are used in one way or another with CharIsControl (function 0x9D), BufferCompare(Folded)/StringCompare(Folded) (functions 0xA3/0xA4/0xAF/0xB0 - in which case bit zero is given as the 'UL' flag, but it is a form of error flag), Long(Unsigned)IntCompare (functions 0xBB/0xBE), and FloatCompare (function 0xC5).

Finally, there are two indexing registers. One is a 'source' pointer, the other is a 'destination' pointer. You'll see this used in SIBO system calls such as ProcCopyToById (function 0x92) and the time read/write/convert functions (0x89...).
SI (IX) - Source Index (Index X)
This is used as a source pointer in data block transfer instructions.
DI (IY) - Destination Index (Index Y)
This is used as a destination pointer in data block transfer instructions.

To put this all together, we shall look at a little program that will, for the sake of demonstration, return various registers not normally available to us in/with OPL.
In order to do this, we shall have to work out the hex patterns for the code. Luckily the mostly-forgotten 'DEBUG' program (under DOS) can help us out. A few moments play shows us:
177C:0100 8CD8  MOV  AX, DS
177C:0102 CB    RETF       
177C:0103 8CC0  MOV  AX, ES
177C:0105 CB    RETF       
177C:0106 8CD0  MOV  AX, SS
177C:0108 CB    RETF       
177C:0109 8CC8  MOV  AX, CS
177C:010B CB    RETF       
177C:010C 89E0  MOV  AX, SP
177C:010E CB    RETF       
177C:010F 89E8  MOV  AX, BP
177C:0111 CB    RETF       

So if we put this together, and remember that you will need to reverse the byte order when setting integers in OPL, we can work up a program that'll look a little something like this:
REM RegPeek
REM By Rick Murray; 2008/01/01
REM For PocketBook II techie information
REM http://www.heyrick.co.uk/software/pb2/

PROC Main:
  REM Allocate memory for code
  GLOBAL ReadDS%, ReadES%, ReadSS%, ReadCS%
  GLOBAL ReadSP%, ReadBP%, Result%, SPS%
  GLOBAL DSCode%(2), ESCode%(2), SSCode%(2)
  GLOBAL CSCode%(2), SPCode%(2), BPCode%(2)
  GLOBAL Rslt$(32), Result&

  REM Poke in code. It is essentially:
  REM   mov   ax, REG
  REM   retf
  REM Where REG is DS, ES, SS, CS, SP & BP.
  DSCode%(1) = $D88C : DSCode%(2) = $CB
  ESCode%(1) = $C08C : ESCode%(2) = $CB
  SSCode%(1) = $D08C : SSCode%(2) = $CB
  CSCode%(1) = $C88C : CSCode%(2) = $CB
  SPCode%(1) = $E089 : SPCode%(2) = $CB
  BPCode%(1) = $E889 : BPCode%(2) = $CB

  REM Set a value to point to the code
  ReadDS% = ADDR(DSCode%(1))
  ReadES% = ADDR(ESCode%(1))
  ReadSS% = ADDR(SSCode%(1))
  ReadCS% = ADDR(CSCode%(1))
  ReadSP% = ADDR(SPCode%(1))
  ReadBP% = ADDR(BPCode%(1))

  REM Generate output, calling our routines
  REM as we go.
  dINIT "The 'other' processor registers"

  Result% = USR(ReadDS%, 0, 0, 0, 0)
  Rslt$=RIGHT$("0000"+HEX$(Result%), 4)
  Result& = Result% : Result&=Result& * 16
  Rslt$=Rslt$+", which is +"+GEN$(Result&, 7)
  dTEXT "DS (Data Segment)", Rslt$

  Result% = USR(ReadES%, 0, 0, 0, 0)
  Rslt$=RIGHT$("0000"+HEX$(Result%), 4)
  dTEXT "ES (Extra Segment)", Rslt$

  Result% = USR(ReadSS%, 0, 0, 0, 0)
  Rslt$=RIGHT$("0000"+HEX$(Result%), 4)
  dTEXT "SS (Stack Segment)", Rslt$

  SPS% = Result%
  Result% = USR(ReadCS%, 0, 0, 0, 0)
  Rslt$=RIGHT$("0000"+HEX$(Result%), 4)
  dTEXT "CS (Code Segment)", Rslt$

  Result% = USR(ReadSP%, 0, 0, 0, 0)
  Rslt$=RIGHT$("0000"+HEX$(Result%), 4)
  dTEXT "SP (Stack Pointer)", Rslt$

  Result% = USR(ReadBP%, 0, 0, 0, 0)
  Rslt$=RIGHT$("0000"+HEX$(Result%), 4)
  dTEXT "BP (Base Pointer)", Rslt$, $200

  Result% = USR(ReadSP%, 0, 0, 0, 0)
  Rslt$=RIGHT$("0000"+HEX$(SPS%), 4)+":"
  Rslt$=Rslt$+RIGHT$("0000"+HEX$(Result%), 4)
  dTEXT "The stack address is", Rslt$

  REM All done!
Download regpeek.zip, OPL source and translated program, 1.45K

When run, the output looks like this:

Of course, the obvious question is "why might this be useful?" Well, for the majority of you it isn't particularly useful. However, for some, it might prove to be interesting to poke around at a slightly lower level than SIBO normally permits - however note that if you go wandering around the various segments without a clue, then it is possible that SIBO will panic your process (or itself). I believe part of the stability of the organiser lies in a decent implementation of memory access privileges (unlike those times when Windows can 'freeze' with random junk on-screen and the same 'ding' sound playing over and over until you go insane and smash the computer to bits using nothing more than a bowl of teriyaki and a set of chopsticks (it's a somewhat Kill Bill vibe, don't try it at home!)). You may find the official Psion SDK to be of some use in explaining this. I can't say, I don't have a copy...
I shall leave you with an incomplete experiment. Without the complete SDK (and maybe additional hardware documentation?), nor you will be able to determine the correct values for all of the constants - some are missing from the HDK headers, and I do not even know if running this through OPL is possible if you could port it...
Anyway, the idea is to probe the expansion connector to see if an ASIC5 is connected (i.e. serial/parallel cable) and if it is, to report its status. You will, in OPL, need to determine if the pack doors are open first, else the program will hang waiting for a response. No worries, there's a system call for that.

IMPORTANT - This is only an idea, NOT working code!

; Initialise
push  bx                     ; stash BX as we'll use it

; Try to claim the channel
mov   al, A9MSlave           ; Value of this is unknown
HwGetChannel                 ; OS call, value not known
jc    ChNotAvail             ; If channel isn't available...
pushf                        ; Remember CPU state
cli                          ; Disable interrupts
mov   al, SelectChannel5     ; Value of this is unknown
HwSelectChannel              ; OS call, value not known
push  ax                     ; Remember previous channel

; Try to communicate with ASIC
HwNullFrame                  ; OS call, value not known
mov   al, 0043h              ; SerialSelect | ASIC5NormalID
out   008ch, al              ; =A9BSerialControlW
in    al, 008ah              ; =A9BSerialDataRW
test  al, al
je    NoASIC                 ; If no ASIC...
mov   ax, bx                 ; If ASIC, stash AX in BX
jmp   SkipASIC

; No ASIC, set to return value -1 for No ASIC error
mov   -1, bx

; Resume here if or if no ASIC
pop   ax                     ; Recall previous channel
HwSelectChannel              ; OS call, value not known
popf                         ; Recall CPU state
mov   al, A9MSlave           ; Value of this is unknown
HWFreeChannel                ; OS call, value not known

; Our exit code
mov   ax, bx                 ; Copy set up BX into AX
pop   bx                     ; Restore original BX
clc                          ; Interrupts back on
retf                         ; Back to caller

; If channel wasn't available, we come down to here
mov   -2, bx                 ; Set error code to be -2
jmp   DropOut                ; Go to exit code


The scrounge...

I was surprised, at my French course today, one of the English women teaching said "ooh, it's a Psion!" in a covetous way, having had very fond memories of using one when she went to Uni.
What happened to hers? They broke (both of them). I presume the lid hinge, as she mentioned she held her second one together with sticky tape!
Well, look, if your organiser should suffer a similar fate and you go and get yourself a replacement... or if you have an old Psion lying in a box unused, or up in the loft/back of a cupboard, please don't chuck it in the bin!
I would appreciate it very much if you can post it to me [email me for my address] - no matter what state it is in. If I receive a couple, I may be able to mix-and-match the bits to make a working one.
And, because Debbie was so fond of her Psion (and doesn't much like the pointy-clicky-with-a-plastic-pen touch-screen thing she has now), I think it'd be really great to put together a working Psion for her. Can you help?
I would also appreciate old SSDs and expansion peripherals - no matter what state they are in. Contact me.


Return to the PocketBook II index

Copyright © 2010 Richard Murray