Psion Organizer II XP Review with Insides and Tetris



    Pocket PC Psion Organizer II XP was released by the eponymous British company Psion in 1986. He became a successful representative of the Psion Organizer line, in which the first-born was Organizer I, which rolled off the assembly line in 1984. The last representative of the series was Organizer II LZ, which went on sale in 1989.

    Psion Organizer is often titled the first PDA in the world (what we called the PDA) and although this statement is debatable in my opinion, the Organizers really had unique features for handheld computers of those years.

    Brief characteristics


    Year of manufacture : 1986
    CPU : 8-bit CMOS Hitachi HD6303X operating at a frequency of 0.92 MHz
    ROM : 32 or 64KB (for the multilingual version)
    RAM : 16 or 32KB
    Screen : LCD, 2 lines of 16 characters.
    Power : 9-volt battery type "crown" or from the adapter (not included)
    Keyboard : 36-button, layout "ABC"
    Size : 142 x 78 x 29mm (with the protective cover closed)
    Weight : 250g
    Price : 139 pounds per starting sales

    A little background



    The copy you see in the photos was bought on ebay for a modest (for a working device in 1986) amount to $ 30. Such a low cost is apparently associated with the former popularity of the device (more than a million devices of this line were sold), as well as its survivability. Surprisingly, the lot was marked as “BRAND NEW”, I can’t judge how much this corresponds to reality, but the device really arrived in close to perfect condition.

    Overview



    Packaging is significantly shabby with time. Inside, under the protection of the foam, Psion itself is located, an instruction manual, a description of the warranty and an empty warranty card. Unfortunately, the manual and warranty card stuck together and in the process of separation, the cover of the manual was damaged, the box was apparently stored in a place with excess humidity.


    The body of the device is made of very durable plastic, this is noted in almost every description. I happened to test its strength in practice - I accidentally dropped it from a table on a laminate, height ~ 75cm, I could not find any traces of a fall. The Psion case has another feature - a sliding down cover that protects the keyboard and plug-in memory modules. The lid is removable, so Psion looks without it:


    Such attention to strength is explained by the fact that the device was largely aimed at application in business. Based on it, for example, mobile POS-terminals were widely distributed; Sony used Psion's in its European service centers; they were used in geodetic works, and in other fields of activity.


    Psion’s dimensions roughly correspond to the current 5 ”phones. For example, in comparison with the Nexus 5X:


    The phone, however, is somewhat thinner.

    The screen is a sign-synthesizing LCD indicator, has 2 lines of 16 characters. 5x8 character resolution. Unfortunately, there is no direct access to individual pixels, which significantly limits graphics capabilities (if of course you can even talk about graphics capabilities with 80x16 pixels), while pseudographics are completely absent in the symbol table. But the developers left a loophole - 8 redefinable characters, so that 320 pixels at a time at our disposal.
    If you have a deja vu effect, it’s not surprising. Display controller built on Hitachi HD44780, and the matrix itself and the controller, as well as their analogues are actively used in DIY (and not only) to this day, the very "green screen", the connection schemes of which to the Arduino can be found everywhere, its direct descendant.

    Keyboard - 36-button membrane, "ABC" layout. Each alphanumeric button is responsible for entering two characters, switching between them is classic - with SHIFT held down, or SHIFT + NUM. In addition to the Alphanumeric keys, the keyboard has cursor buttons; standard SHIFT, DEL, SPACE, EXE (analogue of Enter); ON button, which, after 30 years, switches the device on properly, in the on state it performs Esc functions; the MODE button brings up something like a context menu.


    The absence of the power button may seem somewhat unexpected, you can turn off the device only from the main menu or, as advised in the instructions, do not turn it off completely, the device will go into standby mode itself and after switching on, the user will start working from the place where he finished. You can also note the absence of such common punctuation marks as exclamation and interrogative, a little strange for a device with a notebook function.

    The vertically stretched “calculator” form factor, in my opinion, outperforms the horizontal, which was much more common among handheld computers of the 80s, you can print at least on the go.

    On the back of the case are two slots for memory modules. Unfortunately, they were not included in the standard sales kit, instead of them I just have two stubs.



    There were several types of memory modules :

    Datapack - on an EPROM chip, the user could write data to it for long-term storage, but deleted files were simply marked as deleted, it was possible to clear the memory only with ultraviolet radiation, for which a special device was purchased (it was probably easier to buy a new module ) Until the end of the 90s, the Psion user community published the addresses of people across Europe to whom they could send a memory module for erasure, paying only for postage. The amount of memory is from 8 to 128KB. These modules were the most popular.

    With EPROM, the so-called Programpack was also distributed inside.- Modules with ready-made software, although some of them used indelible PROMs. Programpacks have been released by both Psion and numerous independent developers. The programs were very diverse - games, dictionaries and translators, a file manager, spreadsheets and much more, even assembler.


    Left to right: 64K Datapack, 32K Rampak, 256K Flashpak. The photos were taken from www.jaapsch.net

    Rampack - they used volatile SRAM, they could be recorded and erased, but the storage time was limited to several years, there was a non-removable battery inside and the cost of the modules was significantly higher than that of datapack. Rampack sizes were up to 512KB

    Flashpack - as the name implies, NOR-type flash memory chips are inside, though these modules appeared much later than Organizer II started selling, in 1986 this type of chip was not yet on sale. Because of this, they were not fully supported.

    The device is powered by a single 9-volt 6F22 battery or easier from Krona. Even in parallel with the purchase of the Organizer, I ordered a pair of batteries of this size charged via USB - I did not want to go bankrupt. I have never used these batteries, the usual alkaline crown was enough for all my research. Judging by the feedback from users, with active work, the battery had to be changed every couple of months.


    Above, under the protection of a movable curtain, there is a connector for connecting external devices.


    Unfortunately, I do not have a single external device, so I only note that a large number of peripherals were released for the Organizer both by Psion itself and by third-party manufacturers. Among them were, for example, printers, barcode scanners, modem, pager, magnetic card reader, RS232 converters, power bank and many other devices. An interesting feature was that when the device was connected, Psion automatically launched the code contained in its memory (if it was), thus connecting, for example, a barcode scanner, the user automatically added the programs necessary for working with him and additional functions for OPL.


    From left to right: modem, pager, barcode scanner, thermal printer. Photos taken from www.jaapsch.net

    Hickporn


    Of course, Psion was opened.


    Judging by the stamps on the boards, my copy was assembled at the end of 87. The piezodynamic is highly oxidized, but, fortunately, this is the only part with traces of corrosion.


    All components are located on two boards connected by a loop, on top there is a power board that also contains connectors for connecting peripherals, from below there is a main board on which there are 6 microcircuits - a microprocessor, display controllers, 32KB RAM and 32KB ROM and one semi-custom multifunctional chip.


    On top of 2 chips are the Hitachi DG44100H and HD44780A00 . The HD44780 is the main display controller chip, but since it can only control 2 lines of 8 characters each, there is an auxiliary DG44100H in the circuit . As I already wrote, controllers based on HD44780 are still widespread.

    Just below the Hitachi HD6303XF . This is an 8-bit CMOS microprocessor (or rather MPU) from the HD6301-HD6303 family that were backward compatible with the famous Motorola 6800 . The processor operates at a frequency of 0.9216 MHz.

    Even lower, on the left is the RAM chip - HM62256LFP-12T , promised 32KB of SRAM.

    To the right of it is a semi-custom chip that performs several functions at once: it controls the on and off of the processor, polls the keyboard, provides the functionality of a real-time clock and some others.

    And at the very bottom of the chip, from Atmel, recently founded at that time, the AT27C256 is a 32KB EPROM once-programmable memory (OTP) chip.

    Here's a little more microprocessor with a boshechekoy:


    Collage of the reverse side of both boards:


    Tetris


    Still buying the Organizer, there was an idea to write something for him. And initially I wanted to completely immerse in antiquity and write directly on it, so I did not even consider buying a Com-adapter, which I quickly regretted - it is very difficult to program on the screen in 2 lines, something similar to claustrophobia arises. As a result, I had to open Notepad ++, but the question arose of code transfer - it was possible to type on a calculating ABC keyboard after some getting used to, but it was difficult, so it was decided to transfer debugging to a computer.

    For Psion Organizer II, there was an official commercially available SDK that included a code editor, translator, debugger, simulator, and a utility for creating an image of memory modules.


    On the left is the editor, on the right is the debugging process.

    Everything is fine in it, but due to the fact that the simulator is in the kit and not a full-fledged emulator, we cannot work with low-level functions like peek, poke and run machine code, which is why we test programs that working with overridden symbols (User Defined Graphics or UDG, those same 320 pixels) becomes problematic.

    Fortunately for Psion’s keyboard and for my fingers, in 1998, independent developer Paul Robson wrote a full-fledged emulator of the entire Psion Organizer II line, the images for which were officially provided by Psion Inc.


    I used this emulator in conjunction with a translator from the official SDK for development.

    He spoke about development tools, now briefly about the OPL language itself.
    OPL (Organizer Programming Language) is a BASIC-like interpreted programming language. The translator built into the Organizer creates a bytecode that is already being executed by the interpreter, due to this a relatively high speed of programs is achieved. A distinctive feature of OPL is the ability to execute machine instructions “out of the box,” thanks to which the device is at the complete disposal of the developer.

    So, after some thought about writing under Psion, the choice fell on Tetris (yes, very original). Firstly, for 30 years it was never written for a two-line Psion (maybe it is, but I found only an implementation for the four-line LZ model). Secondly, you can use the graphics capabilities of the device and most importantly they are enough (almost). There were some doubts about the speed of the interpreted language for Tetris on such a low-performance device, but the first tests showed that there would be enough speed and this was completely confirmed - Tetris was completely written in OPL and only at the end, more for fun. a couple of the most loaded rendering sections were rewritten in machine codes.

    The main point was to draw a “glass” with figures so that there was no noticeable indentation between the characters, for this I divided each character into six 2x2 pixel squares, in this form it turns out to evenly fill the entire playing field with beautiful squares (like a brick game), according to to this type:


    But here we are faced with an unpleasant moment - a limitation of 8 UDG, this would be enough only for a playing field of 6x8 squares, obviously not enough. Therefore, he added to the game “feature” - “fog of war”. We draw the entire playing field and the falling piece from top to bottom while there are free UDGs and fill in the rest with the █ symbol, like this:


    Now we can make the height of the glass almost canonical - 19 rows (the 20th row is busy drawing the bottom of the glass to separate the playing field from the information text), the width comes out only 6 bricks instead of the put 10, but there's nothing to be done. The remaining free space on the left is filled with the number of points scored, level and a clue about the next figure. Unfortunately, we no longer have UDG and had to display the next figure in letters (I did not know before, but it turns out that there are quite well-established lettering “OISZLJT” for Tetris figures), as a result, the game takes on the following form:


    Well, as a cherry, I drew a screensaver, inspired by the picture from the GameBoy version of Tetris:


    Mm ... in my defense, I only note that I had very few pixels!

    I will not dwell on the code in detail; there is nothing particularly interesting there. I note only a few specific points that I encountered:

    - OPL is far from a record holder for code compactness, all these% $ in variable names like BASIC, the lack of a for loop, the inability to initialize variables (especially arrays) when describing them lead to a lot of redundancy in writing . And in my head I always kept that moment that every 50 characters is an extra minute to enter the code in Psion, so I had to hard-save letters, as a result, it fit into 3.5KB ("just something" an hour and a half for manual input);

    - Although OPL has support for procedures and functions, it is implemented specifically — each procedure is described in a separate file and is accessible from any other program (which are procedures). This is probably convenient for use in the user's small computational routines, but it is rather inconvenient when writing a game, parts of which will obviously not be reused, and the overhead of calling functions is significant. In addition, several files are less convenient to synchronize manually. This forced me to abandon the functions and restrict myself to GOTO (the first program in which I used this operator, such an experience);

    - You can fill an array only by sequentially assigning values ​​to each element. This led to terrible things like “f% (2) = 24: f% (3) = 24: f% (6) = 24” ... and then up to 112 index (for storing figures). In arrays, you also need to store machine code and of course the splash screen. You can’t enter it on Psion’s keyboard with your hands, the psyche is not iron, you had to store such things as strings and convert them when the program starts.

    Source code under the spoiler
    TETRIS:
    local brd%(11),bra%,cur%(11),cra%,f$(112),f%
    local nf%,row%,x%,y%,a%,px%,py%,pa%
    local i%,j%,k%,b%
    local un%,um%,s$(32),s%,mc$(255),mc%
    local tmr%,scr,scr$(47),lvl%,lns%
    local kbdl%,bzmt%,mute%,kbmt%
    REM Машинный код в виде hex-строки, за ней идет конвертация в "нормальную" последовательность байт
    mc$="040404CE00030436378401C4014848481B16581BC6027D01802BFBB701815A2EF52D044F0926EF333226DB39"
    mc%=ADDR(mc$)+1
    do
      i%=PEEKB(mc%)-48 :j%=PEEKB(mc%+1)-48
      mc$=mc$+CHR$((i%-i%/16*7)*16+j%-j%/16*7)
      mc%=mc%+2
    until i%*10+j%=39
    REM Меняем системные переменные - отключаем штатный звук клавиш и уменьшаем время задержки при удержании клавиши, перед завершением программы их нужно восстановить обратно
    kbdl%=PEEKB($77)
    POKEB $77,3
    bzmt%=PEEKB($A4)
    kbmt%=PEEKB($20C0) 
    POKEB $20C0,0
    ONERR EXIT::
    REM Храним заставку в виде строки, символы подобраны с учетом возможности напечатать на клавиатуре Psion'а
    f$="04000001>>44zg>m0002000 000000270004>oo>376539llg>mkvo0o8L$FF
        b%=b%-1
      endif
      i%=i%-1
    until i%=0
    REM Подсчитываем очки
    if b%>0
      scr=scr+40-60*(b%>1)-200*(b%>2)-900*(b%>3)
      lns%=lns%+b%
      if lns%<151
        lvl%=lns%/10
      endif
      i%=800
      do
        BEEP 17,i% :BEEP 15,i%-200
        i%=i%+100
      until i%>1100
    endif
    REM Рисуем фон
    s$=REPT$(" ",9)+GEN$(1000000+scr,7)+REPT$(" ",10)+CHR$(91)
    POKEB s%+10,32
    s$=s$+MID$("OISZLJT",nf%+1,1)+CHR$(93)+GEN$(100+lvl%,3)
    POKEB s%+30,%L
    AT 1,1 :PRINT s$
    un%=0 :i%=1
    POKEB $180,64
    do
      j%=0
      do
        if brd%(i%) AND $E0E*(j%*7+1)
          POKEB s%+i%+16*j%,255
          if un%1
      i%=i%+1
    until i%>10
    while KEY :endwh
    MAIN::
    POKEB cra%+py%,0
    REM Проверяем, нет ли коллизий после изменения состояния фигуры, если нет то добавляем фигуру в стакан, если есть то действуем исходя из ситуации
    i%=y%+4
    do
      i%=i%-1
      b%=(PEEKB(f%+a%-y%+i%) AND $F)*x%
      if PEEKB(bra%+i%) AND b%
        if y%=0 AND x%=4
          goto GOVR::
        elseif b% AND $80
          x%=x%/2
        elseif b% AND 1
          x%=x%*2
        else
          row%=y%>py% 
          x%=px% :y%=py% :a%=pa%
        endif
        goto MAIN::
      endif
      POKEB cra%+i%, b%
    until i%=y%
    px%=x% :py%=y% :pa%=a%
    if row%
      i%=2000
      do
        BEEP 2,i%
        i%=i%+200
      until i%>4400
      goto NEWF:: 
    endif
    REM Рисуем фигуру
    un%=um%
    i%=y%/2+1
    AT 1,1 :PRINT s$
    do
      b%=cur%(i%) OR brd%(i%)
      if cur%(i%) AND $E0E
        POKEB $180,64+un%*8
        USR(mc%+3,b%)
        AT i%,1 :POKEB $181,un%
        un%=un%+1
      endif
      if cur%(i%) AND $7070
        POKEB $180,64+un%*8
        USR(mc%,b%)
        AT i%,2 :POKEB $181,un%
        un%=un%+1
      endif
      i%=i%+1
    until cur%(i%)=0
    REM Цикл опроса клавиатуры и анимации падения фигуры
    do
      k%=KEY AND 95
      if k%=0
        PAUSE -1
      endif
      if PEEKW($20CB)-tmr%>17-lvl%
        tmr%=PEEKW($20CB) 
        y%=y%+1
        goto MAIN::
      elseif k%
        while KEY :endwh
        if k%=6
          scr=scr+1
          y%=y%+1
        elseif k%=3
          BEEP 15,500
          x%=x%-x%/2
        elseif k%=4
          BEEP 15,500
          x%=x%+x%
        elseif k%=%A
          BEEP 15,750
          a%=a%+4 AND 15
        elseif k%=%P
          AT 1,1 :PRINT "PAUSE" :GET
        elseif k%=%M
          mute%=-(mute%-1)
          POKEB $A4,mute%
        elseif k%=%Q
          BREAK
        endif
        goto MAIN::
      endif
    until 0
    GOVR::
    scr$="Scores:"+GEN$(scr,6)+" Level:"+GEN$(lvl%,2)+" Lines:"+GEN$(lns%,6)
    if k%<>%Q
      scr$="GAME OVER"+CHR$(33)+" "+scr$
    endif
    do
      b%=DISP(1,scr$+CHR$(9)+" QUIT GAME"+CHR$(63)+" Y/N ") and 95
      if b%=%N AND k%=%Q
        goto MAIN:: 
      elseif b%=%N
        TETRIS:
      endif
    until b%=%Y
    EXIT::
    POKEB $77,kbdl%
    POKEB $A4,bzmt%
    POKEB $20C0,kbmt%
    


    And finally, a video of what happened:


    Selection of links:

    A very large collection of documents, photos and programs for all Psion Organizer models
    Mirror of the original site of the Psion Organizer user community, which was closed in 2002
    Forum of users and developers
    Development kit - collected in one archive tools that were used during development .

    Also popular now: