Skip to content

Releases: jamesleaver/pIRCIS

v1.4.5

Choose a tag to compare

@github-actions github-actions released this 16 Sep 05:44

pIRCIS 1.4.5

A review of the whole program, and what it found put right. No program
that ran before runs differently: arithmetic still wraps, as IRCIS means it
to, and the builds now say so to the compiler (-fwrapv) so that it is a
promise rather than a habit.

The interpreter

A negative exponent used to hang the interpreter, and the readout evaluated
it a step early, so a five-character program could stop the board or the
app. It now gives what integer arithmetic gives: 1, plus or minus 1, or 0.
Modulo by zero ends the runner with a reason, as division by zero already
did, and INT_MIN divided or reduced by -1 comes out the same on every
machine instead of trapping on some.

A split whose outlets both loop back doubles the runners every pass, and
a push in a loop grows a stack without end; either took the board down
within a second. The interpreter now asks the device whether it is nearly
out of memory before it starts another runner or grows a stack. Refused, the
runner is not started, or dies on its next step, and the readout says
"Out of memory for a new runner" or "Out of memory for the stack". There
is no other limit on runners: a program may have as many as the device can
hold. The list of deaths kept for the readout is bounded too.

The board's web page

A browser's form post was parsed by the web server into fields the pages
never read, so "Load onto device" always answered that the program was not
usable; and the server read the whole of any request body into memory
before the page saw it, so a large enough post took the board down. The
body is now taken as it arrives, the first 16 KB kept and the connection
dropped past that, and the form's own encoding is read as it should be.
Quotes in names are escaped on the pages.

Loading and editing

A load that would replace a program with unsaved edits -- a listed program,
a paste, a file, NEW PROGRAM -- now asks first. UNDO is cleared by NEW
PROGRAM, by inserting or deleting a row or column, and by locking, so it
can no longer put another program's characters into the grid; the cursor
is kept inside the grid after a line is deleted. Pasted text has to be
printable characters, as an opened file already had to be. A program file
too big to be one is refused before it is read, on the board and in the
app. SETS repaints when an entry is chosen.

Smaller things

The view follows the live runner with the lowest number, not a dead one.
A step back never shows the program at step nought on the way. The
console's step takes at most as many steps as a run to the end. Closing
the emulator's window at the moment of a resize no longer hangs it. Esc
leaves the second RESIZE page, the focus ring on RESIZE lists its own
buttons, and Esc on the unlock splash lets go of the pages that were to
follow. A saved-as name is made into a file name the way SAVE makes one,
and the loaded marker in PROG matches the whole path. Settings on a
computer are written whole or not at all. On a Mac, Cmd-V pastes once.
A factory reset closes the packed program as locking does. Message
dialogs on a short screen keep their buttons on it, DIAGNOSTICS puts its
third button on its own row when the dialog is narrow, and the RUN header
keeps the step count off the title at 320 pixels.

pIRCIS 1.4.4

The iPad app runs on a Mac with Apple silicon, and this release makes it
usable there: a click lands where the pointer is, the pointer stays visible
over the window, and the Mac's keyboard types into the grid and drives the
pages as a keyboard does on the board's emulator. The system had been
swallowing clicks as game-controller input, the pointer was hidden as it is
on glass, and typed characters were never collected because the field that
collects them was asked for before the window was there.

PROG > New program has a PASTE FROM THE CLIPBOARD button wherever there is
a clipboard: the app, the emulator, a Pi. A program copied in any other app
lands in the grid and RUN shows it, the same as Ctrl/Cmd-V from a keyboard.

The program-name page repaints only what changed when a key is pressed, on
every screen. The board is otherwise unchanged.

pIRCIS 1.4.3

The same program on the phone: pIRCIS is on the App Store for iPhone and
iPad. The board is unchanged in what it draws, and a step back no longer
repaints it.

The app

The app is pIRCIS on the App Store
for iPhone and iPad. Nothing is rewritten for the phone: it is the one
program, and every change to pIRCIS lands on the board and the app together.
The board's 480 x 320 panel is still what everything is drawn for; the
phone lays the pages out to fit, in either orientation, with gestures, a
keyboard of its own and sharing through the phone's sheets. The app's
privacy policy and support page are ios/PRIVACY.md and ios/SUPPORT.md.

The iOS app carries no hidden program. The board and the emulator do.

A step back repaints what changed

Stepping back rebuilds the machine and replays to the step before. That
used to show for a moment as a program at step nought, and with the trail
on it repainted the whole screen to take the tint off the cells walked past
the new step. Now the screen keeps what it shows until the step before is
ready, then the runners move, only the cells whose tint changed are put
back, and the readout repaints a character at a time, as a step forward is
drawn. A reset does the same.

The start-cell marker used to vanish once a runner had walked off it and
came back only on the next whole-screen paint; it now stays.

Three things found building the app

Switching GRID TAP round to NOTHING put the start back at the top-left
corner, so a program whose tag starts it somewhere else set off from the
wrong cell once the setting had been tried and turned off, on every
platform. NOTHING now lets go of a start put down by tapping and keeps the
one the program asks for.

With the app's larger controls, the last row of a PROG folder ran under
the buttons that scroll it. When the list scrolls, it now shows only the
rows that end above them. The board is unchanged.

A turn of the phone showed a stretched picture for a frame or two: the
panel answered a window changing size by scaling each axis on its own and
drew that before the fit could be put right. The size change is now taken
before it is queued and the picture given its uniform fit at once.

Small things

  • A space on a runner's stack shows as ' ' in the readout rather than as
    nothing.
  • README and the learning guide are revised: the readout section, a section
    on WiFi of its own, the editor's keyboards, and a note that the guide is
    under the same licence as the rest.
  • A second golden screen set for the board, tests/board_scene.txt, covers
    the readout, GRID TAP in each mode, the trail, the dialogs and the
    keyboards, and a step back and a reset with the trail on.

Full Changelog: v1.4.4...v1.4.5

v1.4.4

Choose a tag to compare

@github-actions github-actions released this 14 Sep 02:17

pIRCIS 1.4.4

The iPad app runs on a Mac with Apple silicon, and this release makes it
usable there: a click lands where the pointer is, the pointer stays visible
over the window, and the Mac's keyboard types into the grid and drives the
pages as a keyboard does on the board's emulator. The system had been
swallowing clicks as game-controller input, the pointer was hidden as it is
on glass, and typed characters were never collected because the field that
collects them was asked for before the window was there.

PROG > New program has a PASTE FROM THE CLIPBOARD button wherever there is
a clipboard: the app, the emulator, a Pi. A program copied in any other app
lands in the grid and RUN shows it, the same as Ctrl/Cmd-V from a keyboard.

The program-name page repaints only what changed when a key is pressed, on
every screen. The board is otherwise unchanged.

pIRCIS 1.4.3

The same program on the phone: pIRCIS is on the App Store for iPhone and
iPad. The board is unchanged in what it draws, and a step back no longer
repaints it.

The app

The app is pIRCIS on the App Store
for iPhone and iPad. Nothing is rewritten for the phone: it is the one
program, and every change to pIRCIS lands on the board and the app together.
The board's 480 x 320 panel is still what everything is drawn for; the
phone lays the pages out to fit, in either orientation, with gestures, a
keyboard of its own and sharing through the phone's sheets. The app's
privacy policy and support page are ios/PRIVACY.md and ios/SUPPORT.md.

The iOS app carries no hidden program. The board and the emulator do.

A step back repaints what changed

Stepping back rebuilds the machine and replays to the step before. That
used to show for a moment as a program at step nought, and with the trail
on it repainted the whole screen to take the tint off the cells walked past
the new step. Now the screen keeps what it shows until the step before is
ready, then the runners move, only the cells whose tint changed are put
back, and the readout repaints a character at a time, as a step forward is
drawn. A reset does the same.

The start-cell marker used to vanish once a runner had walked off it and
came back only on the next whole-screen paint; it now stays.

Three things found building the app

Switching GRID TAP round to NOTHING put the start back at the top-left
corner, so a program whose tag starts it somewhere else set off from the
wrong cell once the setting had been tried and turned off, on every
platform. NOTHING now lets go of a start put down by tapping and keeps the
one the program asks for.

With the app's larger controls, the last row of a PROG folder ran under
the buttons that scroll it. When the list scrolls, it now shows only the
rows that end above them. The board is unchanged.

A turn of the phone showed a stretched picture for a frame or two: the
panel answered a window changing size by scaling each axis on its own and
drew that before the fit could be put right. The size change is now taken
before it is queued and the picture given its uniform fit at once.

Small things

  • A space on a runner's stack shows as ' ' in the readout rather than as
    nothing.
  • README and the learning guide are revised: the readout section, a section
    on WiFi of its own, the editor's keyboards, and a note that the guide is
    under the same licence as the rest.
  • A second golden screen set for the board, tests/board_scene.txt, covers
    the readout, GRID TAP in each mode, the trail, the dialogs and the
    keyboards, and a step back and a reset with the trail on.

Full Changelog: v1.4.3...v1.4.4

v1.4.3

Choose a tag to compare

@github-actions github-actions released this 14 Sep 02:15

pIRCIS 1.4.3

The same program on the phone: pIRCIS is on the App Store for iPhone and
iPad. The board is unchanged in what it draws, and a step back no longer
repaints it.

The app

The app is pIRCIS on the App Store
for iPhone and iPad. Nothing is rewritten for the phone: it is the one
program, and every change to pIRCIS lands on the board and the app together.
The board's 480 x 320 panel is still what everything is drawn for; the
phone lays the pages out to fit, in either orientation, with gestures, a
keyboard of its own and sharing through the phone's sheets. The app's
privacy policy and support page are ios/PRIVACY.md and ios/SUPPORT.md.

The iOS app carries no hidden program. The board and the emulator do.

A step back repaints what changed

Stepping back rebuilds the machine and replays to the step before. That
used to show for a moment as a program at step nought, and with the trail
on it repainted the whole screen to take the tint off the cells walked past
the new step. Now the screen keeps what it shows until the step before is
ready, then the runners move, only the cells whose tint changed are put
back, and the readout repaints a character at a time, as a step forward is
drawn. A reset does the same.

The start-cell marker used to vanish once a runner had walked off it and
came back only on the next whole-screen paint; it now stays.

Three things found building the app

Switching GRID TAP round to NOTHING put the start back at the top-left
corner, so a program whose tag starts it somewhere else set off from the
wrong cell once the setting had been tried and turned off, on every
platform. NOTHING now lets go of a start put down by tapping and keeps the
one the program asks for.

With the app's larger controls, the last row of a PROG folder ran under
the buttons that scroll it. When the list scrolls, it now shows only the
rows that end above them. The board is unchanged.

A turn of the phone showed a stretched picture for a frame or two: the
panel answered a window changing size by scaling each axis on its own and
drew that before the fit could be put right. The size change is now taken
before it is queued and the picture given its uniform fit at once.

Small things

  • A space on a runner's stack shows as ' ' in the readout rather than as
    nothing.
  • README and the learning guide are revised: the readout section, a section
    on WiFi of its own, the editor's keyboards, and a note that the guide is
    under the same licence as the rest.
  • A second golden screen set for the board, tests/board_scene.txt, covers
    the readout, GRID TAP in each mode, the trail, the dialogs and the
    keyboards, and a step back and a reset with the trail on.

Full Changelog: v1.4.2...v1.4.3

v1.4.2

Choose a tag to compare

@github-actions github-actions released this 07 Sep 09:43

pIRCIS 1.4.2

The readout under the grid now says what each runner is about to do, and
shows its stack; a tap on a cell can open the editor on it; a program's
display tag no longer changes your settings; and a handful of fixes.

The runner readout, one step ahead

With SYS > UNDER GRID set to RUNNERS, each runner gets a line: its row
and column and which way it faces, the character it is standing on, what
that character will do when the runner steps, and the top of its stack,
newest value last. turn south, split, int mode on, then int 2 and
int 20 as a number is read and push 20 on the blank that ends it,
pop mode, &N, save N=20, print 3, check false, pause 5. It is
the interpreter's own debug log, one step ahead of it. Before the first
step the runner's line sits under the "press play" prompt, so a program
can be read one cell at a time before it runs; turn on STEP BUTTONS and
step through it, reading the line as you go. README and the learning
guide show how to use it on a program you are writing.

The band repaints a character at a time rather than a line at a time, so
a step no longer blinks the whole readout. The pair of arrows that scroll
a list longer than the band sit stacked at its left edge, where they used
to share the program's scroll row with the first line. While a run is
going the runners still alive are listed first, and each runner's name is
in the colour it is drawn in on the grid.

GRID TAP: EDIT

A fourth setting for the tile, after the inspector: a tap on a cell of a
running program opens the editor with the grid exactly as it was on RUN,
same view and same scroll, and the cursor on the cell that was tapped.
There is no zoom first in this mode. GRID TAP is your setting and stays
across program loads, as STEP BUTTONS and the theme do.

A program's tag is laid over your settings, not written into them

TRAIL and UNDER GRID are set by hand on SYS. A program whose tag asks for
the trail, or for a readout, gets it while that program is loaded, and the
setting comes back when another one is loaded; a program that asked for
the trail no longer leaves it on for every program after it. The SYS
tiles show what is in force and, tapped, take over. The speed, the follow
setting and the start cell are still set by every load.

Fixes

  • Reverting a program loaded from a file emptied the grid. Discard changes
    on PROG, REVERT in the inspector and the console's revert all go back
    to the last version saved.
  • Every route that loads a program settles it the same way, so the start
    cell of the program that ran last no longer carries over.
  • Play and pause while running, and a step back, repaint what changed
    rather than the whole screen.
  • Single dashes in the dialogs.
  • In the desktop emulator, the mouse wheel scrolls the grid on RUN and in
    the editor; wheel dy dx x y on the console turns one for a script.

Programs

Binary, Circuit, Comb, Spiral and Staircase are revised; Comb, Spiral and
Staircase now keep their trail, so the figure each one draws stays on the
screen. Spiral's GIF in the README is remade.

Full Changelog: v1.4.1...v1.4.2

v1.4.1

Choose a tag to compare

@github-actions github-actions released this 04 Sep 23:19

pIRCIS 1.4.1

A small fix to the scroll bars on the RUN and EDIT pages.

The edge bars sit on cell boundaries

The bars at the edges of a program that does not fit the screen were
sixteen pixels thick over fifteen-pixel rows, so a bar's top edge sat one
pixel into the row above it. The strip cleared beneath it and the area that
answered to a tap were both a row too high: the bar blanked the line of
text above it, and a tap on it could land on the cell beneath instead.

A bar is now a whole number of cells thick, so it sits exactly on a row or
column boundary, and the cells it covers are worked out from the rectangle
it actually occupies. Nothing else changes; the golden screens for the six
scrolling views were regenerated to match.

Full Changelog: v1.4.0...v1.4.1

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 03 Sep 03:22

pIRCIS 1.4.0

The emulator builds and runs on Windows, and the board can be flashed from
Windows too.

Flash it without building it

Each release carries a ready-to-flash archive for both panel controllers,
with flash.sh for macOS and Linux, flash.bat for Windows, the offsets
written down, and a SHA256SUMS covering every image. All you need is
esptool:

shasum -a 256 -c SHA256SUMS
unzip pircis-1.4.0-st7796.zip && cd pircis-1.4.0-st7796
./flash.sh /dev/cu.usbserial-XXXX

On Windows, flash.bat COM5, with the COM number from Device Manager. Run
either one with no argument and it lists the ports it can see. The archives
are built by GitHub Actions from the tag rather than on a laptop, which is
what makes publishing the hashes worth anything.

The ili9488 archive still has not been run on hardware — development is on
an ST7796, the only board I have. If you have the other one I would be glad
to hear whether it works.

Windows

The emulator is the same program on all three systems now. On Windows it is
built with MSYS2, which supplies the compiler and SDL2, and the README walks
through it: one line to install MSYS2, one block to paste into its shell.
The build finds SDL2 by asking the machine rather than being told where it
is, so the one command works on macOS, Linux and Windows alike.

Getting there took three fixes that were as much about the build as about
Windows:

  • A header used a fixed-width integer type without saying where it came
    from. clang lets that pass; GCC does not.
  • LovyanGFX's manifest opts out of being archived, which put its hundred
    object files on the link line one at a time. On Windows that line is
    longer than the shell allows, and the temp file PlatformIO then goes
    through is deleted with a cmd.exe built-in that reads a forward-slash
    path as a switch. The emulator now archives the library: one file, a
    short line, no temp file.
  • pkg-config on MSYS2 adds -mwindows, which would have made a program with
    no console. The emulator reads its commands from the console, so it keeps
    one.

Flashing from Windows uses the same PlatformIO, from the MSYS2 shell or from
PowerShell with Python installed; the README has both.

Also

  • LEARN IRCIS on the SYS page shows where the learning guide lives, with
    a QR code a phone can scan to open it. It takes the place of POWER OFF,
    which only ever put the board to sleep until its reset button was pressed.
  • Motto is the program the device wakes up with, and it has been
    rewritten: every runner pushes numbers and prints them as base64, so the
    words only exist once the timing of the runners assembles them.
  • Loading a program puts the view settings back to their defaults (speed,
    trail, follow, what a grid tap does) unless the program's own tag sets
    them. What you changed for one program no longer follows you to the next.
  • On the EDIT CHARACTER page, DEL then OK writes a space, and the IRCIS
    letters r R p v V are shown in red as they are on the keyboards.
  • A view tag's start position is now written row first: ~3,1N starts
    at row 3, column 1, heading north. That is the order the editor's corner
    and the run page's "entry" line already used, and the one habit now
    serves everywhere. Four Ways and Motto, the two bundled programs that
    use one, are updated.
  • A view tag written or changed in the editor takes effect when the edit
    lands, rather than only when the program is loaded again.
  • The inspector works from the keyboard: the arrows move the cell, and
    e, r, s and c press its buttons.
  • In the emulator, resizing the window no longer puts clicks off from
    where the pointer is.
  • With a real keyboard in use, the editor draws into the three rows the
    on-screen keyboard would have taken.
  • Deleting the last program in a folder removes the folder, on every
    platform, through the standard filesystem library rather than a POSIX call.

Full Changelog: v1.3.0...v1.4.0

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 02 Sep 12:28

pIRCIS 1.3.0

The screen stopped flickering, the two program pages became one program,
and a learning guide arrived.

Flash it without building it

Each release carries a ready-to-flash archive for both panel controllers,
with flash.sh, the offsets written down, and a SHA256SUMS covering every
image. All you need is esptool:

shasum -a 256 -c SHA256SUMS
unzip pircis-1.3.0-st7796.zip && cd pircis-1.3.0-st7796
./flash.sh /dev/cu.usbserial-XXXX

Run ./flash.sh with no argument and it lists the ports it can see. The
archives are built by GitHub Actions from the tag rather than on a laptop,
which is what makes publishing the hashes worth anything.

The ili9488 archive still has not been run on hardware — development is on
an ST7796, the only board I have. If you have the other one I would be glad
to hear whether it works.

A guide to IRCIS

LEARN.md teaches the language from the first runner to a worked
reading of a whole program, in twenty short sections. Every example in it is
run against the interpreter before a release, so what it says a program
prints is what it prints. It names the bundled programs the way the device
does and says which folder each is in.

RUN and EDIT show the same program

They used to be two layouts of the same thing, a few pixels and a row apart,
with their own zoom. Now there is one: switch between them and nothing moves,
including the ZOOM button. ZOOM is the same size on both, small arrows on the
grid's edges scroll a program larger than the window, and FOLLOW RUNNER works
in both views. Opening EDIT pauses the run, and nothing in a running program
can be edited until it is paused.

Faster, and without the flicker

The program is drawn a row at a time from memory rather than a cell at a
time to the panel, and each frame is one transaction on the bus, so a page
arrives instead of crawling in. What changes is what gets repainted: a new
character on OUT redraws one line, a toggle on SYS redraws one tile, a
keystroke in a dialog redraws the value, a page turn redraws the page inside
its frame. The rule between the program and its output no longer blinks on
every character printed, and the output no longer jumps up a line when a run
finishes.

The programs

Sixty-one now, in five folders named for what you are there to do:
Counting, Deciding, Decoding, Talking and Watching. Showing-off has gone, its
contents sorted into the others, and nine programs that were the same idea
as another have gone too.

  • Two Dimensions, Greeting and Advice read their strings along a
    snake, a square wave and a spiral, to show that a runner reads a program
    along whatever path it is given.
  • Bounce bounces, Comb has teeth, Four Ways splits four ways, and
    Serpent is no longer Snake again. Each checked against the interpreter's
    visit map.
  • Decoding is new: Insult Machine, Base 64, Morse Decoder and Binary.

Everything else

  • The WIFI tile says when a browser last asked for a page.
  • CONFIRM reads WORKING while a slow action runs, so deleting a program no
    longer looks like a hang.
  • The calibration prompt gives way to "Loading" once the corners are tapped.
  • The SETS page holds still while a run is going.

Fixed

  • The first cell of every run was never shown: the runner appeared at its
    second step.
  • A program that asks to start somewhere other than the top-left corner
    sometimes started there anyway.
  • The scroll arrows' touch targets reached off the edge of the panel, where
    no finger is, so a tap on one often landed on the character underneath.
  • The inspector's buttons could not be pressed at all on a program shorter
    than six rows.
  • Programs that moved folder left their old copies behind on the device.
  • The trailing space and newline the interpreter printed at the end of a run
    no longer go into the output.

Full Changelog: v1.2.0...v1.3.0

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 01 Sep 09:47

pIRCIS 1.2.0

Sixty-eight programs instead of twenty-two, folders to find them in, and a
long list of small fixes to things that were quietly annoying.

Flash it without building it

Each release carries a ready-to-flash archive for both panel controllers,
with flash.sh, the offsets written down, and a SHA256SUMS covering every
image. All you need is esptool:

shasum -a 256 -c SHA256SUMS
unzip pircis-1.2.0-st7796.zip && cd pircis-1.2.0-st7796
./flash.sh /dev/cu.usbserial-XXXX

Run ./flash.sh with no argument and it lists the ports it can see. The
archives are built by GitHub Actions from the tag rather than on a laptop,
which is what makes publishing the hashes worth anything.

The ili9488 archive still has not been run on hardware — development is on
an ST7796, the only board I have. If you have the other one I would be glad
to hear whether it works.

Programs are in folders now

PROG opens on Counting, Talking, Deciding, Watching and Showing-off, each
saying how many are inside. Sixty-eight in one alphabetical list was twelve
screens of scrolling. They are real directories on both the device and the
card, so the folders you see on the board are the folders you see on a
computer. Your own saved programs are left where they are.

Forty-six new programs

Worth a look:

  • Morse Decoder — type dits and dahs, get a word back. It walks a binary
    tree for each letter.
  • Pi — ten correct digits out of Machin's formula, in a language with
    32-bit integers and no arrays.
  • Motto — draws IRCIS on the screen by walking the shape of the letters,
    then prints what it stands for.
  • Insult Machine, Dog Name and Warning give nothing away until you
    run them: there is not a readable word in any of their grids.

Racetrack is rebuilt to fill the screen, and the race is now actually
fair — the lanes are identical and the handicaps cancel out.

Everything else

  • The last ten runs are kept. Step back through them with < and > on OUT.
  • A view tag, ~t, keeps the runners' path on screen instead of letting it
    fade. That is what makes Motto legible, and it suits the watchers too.
  • Step buttons have a switch of their own in SYS, and stay on when you load
    another program.
  • CHECK TOUCH measures your calibration and then offers to redo it. It
    used to only measure one you had already thrown away.
  • PROG will write the current speed and view into the program as a tag.
  • DIAGNOSTICS stays live while you look at it, and now says why a runner
    died if it died of anything other than reaching ! or leaving the grid.

Fixed

  • You could not scroll to the last line of a tall program in ZOOM. The
    readout was drawn over the rows that were missing.
  • RUN TO END gives up after five million steps, and said nothing about
    it — indistinguishable from a program that finished.
  • An empty PROG page said nothing at all, not even that RESTORE BUILT-INS
    exists.
  • Typing in the editor rebuilt the whole program on every keystroke.
  • The RUN page now says when the cell your program starts on is blank, which
    is the commonest reason a first program does nothing.

Full Changelog: v1.1.0...v1.2.0

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 31 Aug 08:01

Full Changelog: v1.0.0...v1.1.0

First release of pIRCIS - v1.0.0

Choose a tag to compare

@jamesleaver jamesleaver released this 31 Aug 03:44
pIRCIS: an IRCIS interpreter for a 4.0 inch ESP32 touch display