bolha.us is one of the many independent Mastodon servers you can use to participate in the fediverse.
We're a Brazilian IT Community. We love IT/DevOps/Cloud, but we also love to talk about life, the universe, and more. | Nós somos uma comunidade de TI Brasileira, gostamos de Dev/DevOps/Cloud e mais!

Server stats:

248
active users

#epoc16

0 posts0 participants0 posts today
The Last Psion | Alex<p>Someone asked me some questions on the <a href="https://oldbytes.space/tags/Psion" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Psion</span></a> Series 3, so I thought I'd post my response here in case anyone else is interested. <a href="https://oldbytes.space/tags/LongRead" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LongRead</span></a> </p><p><strong>Emulator</strong></p><p>You've got two options. The first is the original "emulators" written by Psion, <code>S3AEMUL.EXE</code> and <code>S3CEMUL.EXE</code>. They both run in DOS and emulate the 3a and 3c. But they're less of an emulator than a runtime environment for <a href="https://oldbytes.space/tags/EPOC16" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>EPOC16</span></a> (the OS). There's good and bad to this. You can run <code>S3AEMUL</code> and <code>S3CEMUL</code> straight in <a href="https://oldbytes.space/tags/DOSBox" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DOSBox</span></a> and it will talk to your host OS's filesystem (Windows, Linux, macOS, whatever). You need to map an M: drive in DOSBox for the internal storage, but once that's done you can copy files straight into that folder on your host OS. The downside is that it's not true hardware emulation. You won't get a good judge of the speed of a real device, and some syscalls aren't implements so will fail or crash the <a href="https://oldbytes.space/tags/emulator" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>emulator</span></a>. They're bundled with the SDK (see below).</p><p>The alternative is <a href="https://oldbytes.space/tags/MAME" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>MAME</span></a>. This is the closest to proper hardware emulation you're going to find. You can either dump your own ROMs using a tool called <a href="https://oldbytes.space/tags/EDisAsm" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>EDisAsm</span></a>, or you can find them in the usual MAME ROM repos. The one thing that is notably missing is RS232 emulation from the later models, because we haven't been able to find any documentation on the silicon, but it's working fine with the 3a.</p><p><strong>Toolchain</strong></p><p>At the moment you have only one option - the Psion SIBO C SDK with the <a href="https://oldbytes.space/tags/TopSpeed" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TopSpeed</span></a> C Compiler. You're going to need DOSBox (I personally prefer DOSBox Staging). It's all available on the Internet Archive in one easy download, including all the documentation you will need.</p><p><a href="https://archive.org/details/psion-sibo-c-sdk" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">archive.org/details/psion-sibo</span><span class="invisible">-c-sdk</span></a></p><p>From there, you have a few libraries you can use. There CLIB, which is a pure ANSI C implementation, designed to easily port apps - don't use it, it's slow and you'll be missing a lot of features. Then there's PLIB, which is Psion's C dialect - very nice to use, and you can put together a C app pretty quickly. Finally, there's OLIB, which is Psion's proprietary OO C - it feels very clunky, but once you get over that it can be very powerful.</p><p>EPOC16 apps are restricted to a very pure version of the small memory model, but you can split code up into libraries known as DYLs.</p><p>In the past I've written code using VS Code, which can be made to play nicely with the SDK's header files. I've not got it working with NeoVim and clangd yet, but it should be possible with cmake.</p><p>The SDK comes with a debugger (<code>SDBG.EXE</code>), a DOS GUI app. If you run <code>SDBG.EXE</code> in DOSBox Staging, run the <code>Psion3a</code> MAME emulation, and enable RS232 over TCP on both, you can use <code>SDBG</code> to send apps to MAME. If you enable symbols, you can step through the code. It's rudimentary by modern standards, but it works pretty well.</p><p>I say "at the moment" because I'm slowly rewriting the tools in the SDK. I already have a new working version of <a href="https://oldbytes.space/tags/CTRAN" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CTRAN</span></a>, the preprocessor for Psion OO C, but I'm a long way from a compiler. There have been efforts to coax gcc into compiling for SIBO/EPOC16, but I think they have stalled for now.</p><p>If you want some examples of EPOC16 C and OO C code, take a look at these:<br><a href="https://github.com/thelastpsion/edisasm" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/thelastpsion/edisas</span><span class="invisible">m</span></a><br><a href="https://github.com/thelastpsion/pyramid" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/thelastpsion/pyrami</span><span class="invisible">d</span></a><br><a href="https://github.com/thelastpsion/nfsc" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">github.com/thelastpsion/nfsc</span><span class="invisible"></span></a><br><a href="https://github.com/nickmat/Psion3-Wari" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">github.com/nickmat/Psion3-Wari</span><span class="invisible"></span></a><br><a href="https://github.com/nickmat/Psion3-Vector" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/nickmat/Psion3-Vect</span><span class="invisible">or</span></a></p><p><strong>Device</strong></p><p>The 3mx is the best choice. It's significantly faster than the earlier models (27.6 MHz vs 7.6 MHz), has a switchable backlight, the fastest RS232 and the best version of EPOC16. I "daily drive" one for journalling, adventure games, and a few other small tasks. After that I'd say the 3c (beware - they were covered in soft-touch rubber, so will need cleaning) and the 2MB 3a. The latter is the most common. Most 3c units came with a backlight, except for the early UK ones. The 3a doesn't. Arguably the non-backlit screens have better contrast so you don't need the backlight so much in lower light, but the backlight has obvious benefits.</p><p><a href="https://oldbytes.space/tags/RetroComputing" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RetroComputing</span></a> <a href="https://oldbytes.space/tags/RetroDev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RetroDev</span></a> <a href="https://oldbytes.space/tags/16bit" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>16bit</span></a></p>
The Last Psion | Alex<p><strong>REPOST (JAN 2024):</strong> My first thoughts on <a href="https://oldbytes.space/tags/Psion" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Psion</span></a>'s dialect of Object Oriented C for the Series 3 and related portable computers.</p><p>Includes the JPI/Clarion <a href="https://oldbytes.space/tags/TopSpeed" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TopSpeed</span></a> <a href="https://oldbytes.space/tags/compiler" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>compiler</span></a>, a proprietary preprocessor, the Eiffel programming language, and a handful of calling conventions.</p><p>Also, did somebody say Objective-C?</p><p>This is an old blog post from the beginning of the year. If you've been following my journey in recreating <a href="https://oldbytes.space/tags/CTRAN" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CTRAN</span></a>, this was written a week before I decided to take the plunge.</p><p><a href="https://hackaday.io/project/161291-the-last-psion/log/226441-beginning-olib-an-entirely-uneducated-look-at-psions-proprietary-object-oriented-c" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">hackaday.io/project/161291-the</span><span class="invisible">-last-psion/log/226441-beginning-olib-an-entirely-uneducated-look-at-psions-proprietary-object-oriented-c</span></a></p><p>(Yes, I did say in the article that I <em>definitely wouldn't</em> be writing a compiler. I <em>did</em> say that.)</p><p><a href="https://oldbytes.space/tags/RetroComputing" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RetroComputing</span></a> <a href="https://oldbytes.space/tags/EPOC16" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>EPOC16</span></a> <a href="https://oldbytes.space/tags/CDECL" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CDECL</span></a> <a href="https://oldbytes.space/tags/Clarion" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Clarion</span></a> <a href="https://oldbytes.space/tags/TopSpeed" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TopSpeed</span></a> <a href="https://oldbytes.space/tags/TopSpeedC" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TopSpeedC</span></a> <a href="https://oldbytes.space/tags/RetroProgramming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RetroProgramming</span></a> <a href="https://oldbytes.space/tags/RetroDev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RetroDev</span></a> <a href="https://oldbytes.space/tags/Smalltalk" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Smalltalk</span></a> <a href="https://oldbytes.space/tags/ObjectPascal" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ObjectPascal</span></a> <a href="https://oldbytes.space/tags/preprocessor" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>preprocessor</span></a> <a href="https://oldbytes.space/tags/Eiffel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Eiffel</span></a> <a href="https://oldbytes.space/tags/OOP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OOP</span></a> <a href="https://oldbytes.space/tags/ObjectiveC" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ObjectiveC</span></a> <a href="https://oldbytes.space/tags/compilers" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>compilers</span></a> <a href="https://oldbytes.space/tags/ObjectOriented" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ObjectOriented</span></a></p>
The Last Psion | Alex<p>Here's something I wish would be open sourced.</p><p>The <a href="https://oldbytes.space/tags/TopSpeed" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TopSpeed</span></a> C <a href="https://oldbytes.space/tags/compiler" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>compiler</span></a> is an integral part of the <a href="https://oldbytes.space/tags/Psion" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Psion</span></a> SIBO C SDK.</p><p>Old timers might remember JPI as a group of developers who left <a href="https://oldbytes.space/tags/Borland" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Borland</span></a> in 1987, after Borland decided not to use the team's new compiler technology. They took their code with them, and it became the TopSpeed compiler.</p><p>From what I gather, the TopSpeed compiler IP is now owned by <a href="https://oldbytes.space/tags/SoftVelocity" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SoftVelocity</span></a>, the company who now also owns Clarion. I emailed them about 6 years ago, asking them if they would consider open sourcing the compiler code. I got no response, which I guess is to be expected.</p><p>I even found someone who had a copy of the source code (written in Modula-2), but they understandably wouldn't give it to me without the IP owner's approval.</p><p>This is the situation with so many bits of software (including the SIBO C SDK tools) from this time. We are lucky that copies of the applications still exist, otherwise the job of building C software for <a href="https://oldbytes.space/tags/EPOC16" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>EPOC16</span></a> would be significantly more difficult. But it is likely that the original source code, along with many other codebases, will disappear thanks to copyright laws that don't support digital preservation.</p><p><a href="https://oldbytes.space/tags/retrocomputing" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>retrocomputing</span></a> <a href="https://oldbytes.space/tags/vintagecomputing" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vintagecomputing</span></a> <a href="https://oldbytes.space/tags/digipres" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>digipres</span></a></p>
The Last Psion | Alex<p>Did you write code for <a href="https://bitbang.social/tags/Psion" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Psion</span></a> machines in the <a href="https://bitbang.social/tags/80s" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>80s</span></a> and <a href="https://bitbang.social/tags/90s" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>90s</span></a>?</p><p>We're calling for you to open source your code!</p><p>I'm working with a group of enthusiasts, building a library of information about the SIBO/EPOC16 platform. Your old code could give valuable insight, as well as encourage people to write new code.</p><p>We're especially interested in old C and <a href="https://bitbang.social/tags/x86" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>x86</span></a> <a href="https://bitbang.social/tags/assembly" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>assembly</span></a>.</p><p>Upload it to your public repository of choice, and set it free!</p><p><a href="https://bitbang.social/tags/retrocomputing" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>retrocomputing</span></a> <a href="https://bitbang.social/tags/retrodev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>retrodev</span></a> <a href="https://bitbang.social/tags/16bit" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>16bit</span></a> <a href="https://bitbang.social/tags/pda" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>pda</span></a> <a href="https://bitbang.social/tags/laptop" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>laptop</span></a> <a href="https://bitbang.social/tags/epoc16" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>epoc16</span></a> <a href="https://bitbang.social/tags/sibo" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sibo</span></a> <a href="https://bitbang.social/tags/oldcode" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>oldcode</span></a></p>