Psion. Что это такое?

В начале века смартфонов не было, был рынок разных КПК — клавиатурных и бесклавиатурных. Клавиатурные делал Psion, и, на всякий случай, партнёры Microsoft в линейке Handheld PC. Бесклавиатурные — Palm и, на всякий случай, партнёры Microsoft в линейке PocketPC. В гонке на выбывание какие-то компании постепенно уходили с рынка. Сначала всякие Philips Velo проиграли Джорданам 720. Дальше — больше.

По такому поводу в 2001 году я приобрёл Diamond Mako, он же Psion Revo+. Модель не взлетела на рынке Штатов и складские остатки сплавляли по вкусной цене. Так как мне очень понравилась эта машинка и, из любопытства, в 2005 году, когда PocketPC уже всех победил, я купил предшественника Revo — Psion Series 3. По меркам середины 2000-x это был очень хороший будильник, но не более. С тех пор машинка лежала в тумбочке без батареек, и вылезала на свет только при реорганизации пространства в тумбочке.

В 2015 году я зачем-то вытащил один из двух дисков, которые шли в комплекте с устройством. Обратил внимание на эту надпись:

Немножко контекста про 1993 год, когда вышел этот Solid State Disk

“All I Want for Christmas Is You” Мэрайи Кэри в том году суммарно проиграли 0 раз. Этой песни ещё не было. Она вышла в 1994. В 1993 году не было той самой песни про третье сентября, календарь был ни к чему. И это песня тоже вышла в 1994. Была, конечно, песня The Temptations с первыми строками “It was the 3rd of September. That day I'll always remember”, но без костров рябин это всё же не то. И только The Prodigy у себя на родине в Соединённом Королевстве в те времена по полной могли добавить порцию бодрости создателям Psion.

Первый Doom вышел только в декабре 1993. Так что про платформу X нельзя было сказать, что на неё портировали Doom.

И вот тогда, в эти смутные доисторические времена, уже существовали SSD! Согласно Wiki, формат был предложен SanDisk в 1991 году. Вероятно, то, что предложил Psion — это одна из первых коммерческих реализаций.

Диск на руках атрибутируем как творение того самого доисторического 1993. Год берётся из копирайта:

Второй диск, который доступен только для чтения, несёт на себе копирайт 1995 года:

Можно сравнить защёлку защиты от записи на SSD-RW и SSD-R дисках:

Лирическое отступление про Зышщт

Если хочется узнать больше про устройства, то легендарный в узких кругах сайт MyPsion.ru (он же MyЗышщт ) до сих пор доступен. Вот статья про железо Series 3.

Третья серия была без тач-скрина, но с очень удобным и продуманным клавиатурным управлением и выделенным рядом псевдо-тач кнопок для запуска популярных программ.

Операционная система SIBO (SIxteen Bit Organiser) работала на 16-битном процессоре. На котором, с 1Мб памяти на все про все, уже в 1991 году (выход первых моделей) был отличный GUI, редактор, таблицы, маленькие базы, пасьянс, календарь и свой интерпретатор OPL (Psion Open Programming Language).

Руководство по OPL и доступным API можно читать тут.

Странная идея: а не замерить ли IOPS?

Так как я регулярно тестирую через FIO разные вариации подачи дисков и скорость, решил, а не замахнуться ли нам на Вильяма, нашего, Шекспира? посчитать ли IOPS для какой-нибудь операции с SSD-диском?

Чтобы посчитать скорость, нужно сделать много итераций одного и того же действия и зафиксировать начало и конец операции, чтобы рассчитать время выполнения.

20 лет машинка лежит просто так. Давайте прогреем её диск!

Сборка стенда

Нельзя просто взять две батарейки AA и включить Psion 3c.

Три декады назад деревья были больше носики батареек с «+» были больше. Нынешние батарейки просто не будут контактировать «+» c «-». Поэтому на помощь пришла металлизированная фольга от жвачки для создания нужного контакта

Особенности Psion Series 3

В ПЗУ есть IDE. Давайте прорвёмся к нему через совет дня:

IDE называется OPL. Напишем и запустим простейшую программу из двух вложенных циклов и печати времени начала и времени окончания их исполнения:

Обратите внимание, IDE показывает что левый SSD диск «A» отсутствует
Обратите внимание, IDE показывает что левый SSD диск «A» отсутствует

Сразу на устройстве программировать и не особо понятно как, поэтому для ознакомления с языком и его библиотеками можно взять симулятор, не эмулятор, Epoc 5 на My-Зышщт, и развернуть его, например, на виртулке.

После раздумий над тем, что же можно измер��ть, решил протестировать последовательное чтение 512 блоками.

Почему? Потому что максимальный массив это 8192 двухбайтных слова. Если эмулировать 8k блок, как для PostgreSQL, то у нас их будет два в пределах массива. Или 32, если блоки данных — 512б. Некоторые модели NVME работают с таким блоком, поэтому тестирование будет достаточно актуальным.

Более лирическое отступление

То, что для Psion нужно будет писать на OPL, я знал. В 2002 решил, для примера изучения непонятного, дать @eugeon, который пришел падаваном, портировать unrar на psion revo. GCC 2.96 и все как мы любим. Такое задание вроде бы звучало чуть человечнее изучения кросс-компиляции на Sun Algol-60 подобного языка для vxworks на Motorola 68030. Выдумать задание было просто, но чтобы показать падавану, что джедаям без разницы, на какой платформе и для какой платформы что-то делать, пришлось самому показать, что это достаточно просто. Особенно если поделить на бэк из разархиватора и фронт для набора опций. А фронт сделать не так и сложно, если нарисовать на OPL интерфейс в стиле платформы.

Но вот впоследствии желания возвращаться к OPL почему-то никогда не возникало. Но руки-то помнили! Поэтому программку накидал быстро. OPL очень похоже на древние бейсики, поэтому рассмотрим саму программу.

Сама программа: разберём комментариями

Что нужно знать про синтаксис OPL:

  • Длина имени переменной — до 8 символов, включая индикатор типа.

  • Переменные без типа — float.

  • Переменные типа integer объявляются как X%, это 2 байта, 16 бит.

  • Z& — длинные целые.

  • Строки Y$(1..255) — Паскале‑подобные строки.

  • Массивы считаются с нуля, максимальный размер 8196.

  • Есть циклы while и until, for — отсутствует.

  • GET — ожидает нажатия любой кнопки.

Теперь можно  сверху вниз наискосок пробежаться по такому коду:

PROC test: REM ТАКОВ ПУТЬ
      REM Объявляем все переменные с суффиксом для типа, почти basic!      
      local buffer%(8192), i%, handle%, mode%, name$(32), ret%, offset&, j%

      name$="c:\Documents\123.tst" REM Чтобы потом поменять на A:\1.tst на устройстве

      mode% = $0002 or $0020 or $0200 rem bin file, create if not exists   

      i%=1 REM Поехали
print "this is opl program, ", datim$

      do REM Заполним массив
            buffer%(i%)=i%
            i%=i%+1
      until i%<8197

      ret% = IOOPEN (handle%, name$, mode%) REM Открыть для записи бинарный файл
      ret% = IOWRITE (handle%, addr (buffer%(1)), 8196*2) REM и скинуть буфер
      j% =0
      while j%<1000     
            i%=0
            while i%<32
                  offset& = i%*512
                 rem print offset& REM дебажим как можем :)
                 i%=i%+1 REM нет цикла for – счетчик наша забота
                  ret% = IOSEEK (handle%, 1 , offset& ) REM Магия позиционирования
                 ret% = IOREAD (handle%, addr (buffer%(1)), 512) REM Магия чтения
            endwh rem i  
            j% = j% + 1 REM j нет цикла for – счетчик наша забота
      endwh rem j

      ret% = IOCLOSE (handle%)
      print "ok, " , datim$ REM Время окончания
      get REM Пауза прочесть что получилось
ENDP

На устройстве это выглядит как-то так. Правая панель индицирует наличие обоих дисков рядом с зарядом батарейки. Включен второй из четырёх доступных размеров шрифта.

Результаты прогона пустых циклов, для оценки базовой скорости быстродействия устройства: 

Шесть секунд на пустые циклы. 1996 год выставлен по умолчанию.

Результат прогона с чтением файла на диске A:

32 секунды на 16 тысяч операций, или 500 IOPS при последовательном синхронном чтении блока по 512б из файла 16К в режиме fsync=1. Звучит как параметры для fio!

Сравнение с NVME

На ноутбуке, на котором читалась документация, установлен только NVME-диск. Установим fio и запустим тест, аналогичный Psion:

fio --direct=1 --runtime=32s --time_based  -name=PsION --filename ./123.psion --fsync=1 --bs=512 --iodepth=1 --size=16k  --readwrite=read
Starting 1 thread
Jobs: 1 (f=1): [R(1)][100.0%][r=17.0MiB/s][r=34.8k IOPS][eta 00m:00s]
PsION: (groupid=0, jobs=1): err= 0: pid=9460: Sat Apr 12 19:08:37 2025
  read: IOPS=34.1k, BW=16.7MiB/s (17.5MB/s)(533MiB/32001msec)

Можно поиграться с глубиной, отключить fsync:

fio --direct=1 --runtime=32s --time_based  -name=PsION --filename ./123.psion --thread=128 --bs=512 --iodepth=128 --size=16k  --readwrite=read
Jobs: 1 (f=1): [R(1)][100.0%][r=75.0MiB/s][r=154k IOPS][eta 00m:00s]
PsION: (groupid=0, jobs=1): err= 0: pid=11920: Sat Apr 12 13:00:08 2025  read: IOPS=155k, BW=75.9MiB/s (79.6MB/s)(2428MiB/32001msec)

Выводы

Лучше всего параметры скорости таких SSD были оценены в фильме ‘Serenity’, который вышел в 2005, в год моей покупки б/у Psion Series 3c.

Фраза из фильма звучит так:

“Eta kooram nah smech!” (https://fireflychinese.kevinsullivansite.net/phrase/e.html, https://youtu.be/xwVqW6J4FRc?t=103 )

Что в фильме — сигнал к прекращению всех безобразий, в том числе с ретро-техникой.

EPOC стал Symbian, и в этой ипостаси проиграл уже iOS и Android. В 2012 году Моторола купила активы Psion.

Зато у нас есть сейчас и Мэрая-декабрьская, и Михаил-сентябрьский. Ну и Prodigy всё так же играет.