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» отсутствует

Сразу на устройстве программировать и не особо понятно как, поэтому для ознакомления с языком и его библиотеками можно взять симулятор, не эмулятор, 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 всё так же играет.