The 5100 is the unicorn of IBM systems. It was 2001 space odyssey special.

On Sat, Sep 20, 2025 at 5:41 AM Robert Marinelli via cctalk <
[email protected]> wrote:

> I've been digging through CHM and bitsavers and haven't found an IMF for
> 5100 or 5110 yet.  It seems a lot of CE material was just not saved.
>
> However, I've been tracing execution of ExecROS and the APL ROS - thanks
> to your excellent emulator and the extracted ROS files this works well.
>   Have learned a few things about the jump tables, I'd imagine that the
> type 23 files would likely install themselves in high memory and modify
> an IOCB jump entry to point to the new/patch code.  Kind of like how you
> take over the printer IOCB.
>
> One little issue I found with your emulator is behavior of interrupts
> while in HOLD.
>
> Per the APL and BASIC manuals, pressing HOLD while a program is running
> should pause the output (mostly so you can read the screen before output
> scrolls up), and then pressing HOLD again is supposed to continue
> execution.
>
> In emu5110 that didn't work, pressing HOLD always stopped but a 2nd
> press wanders off in to never land (hang or bogus error or junk on screen).
>
> While tracing & learning I noticed that if code was being executed from
> one of the language ROS, HOLD would fail.  But HOLD/resume worked fine
> on an idle machine - idle is a short loop that just blinks the _ cursor
> at location 0x0200+902 in APL.
>
> So looking through the pseudo-schematics/block diagrams in SY31-0552-3
> IBM 5110 System Logic there is quite a bit of gate logic on the multiple
> ROS cards, plenty of wires between them.  Maybe, hardware interrupts are
> held off in hardware when we are doing reads from the language ROS
> cards.  The interrupt bits are properly shown in a register, but nothing
> detailing gating of interrupt -> CPU.
>
> To test the idea I made this change in emu.c:
>
> 175c175,176
>
> < check_int();          /* check for pending interrupts */
>
> ---
>
> >if(curr_ros==ExecROS) /* if in ExecROS we can HOLD/resume */
>
> >  check_int();        /* check for pending interrupts */
>
>
> and now HOLD works as expected.
>
> Norbert's JavaScript port had the same issue with HOLD, he ported the
> above and confirmed that the HOLD now works properly.
>
> As a side note, the MAME emulation (which may have been done
> independently) has the same problem, likely could use the same fix.
>   Anyone know how to contact the MAME author?
>
> There was a lot of interest in the CHM release of APL\360 source along
> with auto-operator and I've tried contact a few of those folks, we just
> need one CE or user who kept a box of floppies.
>
> -Robert

Reply via email to