Post Reply 
voyager-lcd: Linux & Windows utility for Voyager display conversion to hexadecimal
03-28-2023, 04:19 AM
Post: #1
voyager-lcd: Linux & Windows utility for Voyager display conversion to hexadecimal
Recently I've been hacking the microcode of Voyager series calculators, and dealing with the mapping of LCD display segments to the hardware registers by hand is quite a pain. I wrote a program to allow clicking to toggle the segments of an approximation fo the Voyager LCD display, and showing the corresponding hexadecimal values of the registers. This might be useful for:

1. other people hacking Voyager microcode
2. people doing synthetic programming on the 15C, which can make display segment control available from user programs

   

The program is provided as source code for Linux, and an .msi installer package for Windows 10 and 11.

https://github.com/brouhaha/voyager-lcd/releases

Any and all feedback is welcome.

Notes:

* After starting the program, you'll have to embiggen the window to get the display to show up. Initially all segments are off, represented by light grey outlines on a white background, so at the initial small size, they're not really viaible at all.
* The program source code contains the segment mappings for the "normal" Voyager models (11C, 12C, 15C, and 16C), and also the mapping for the 10C, but presently there's no way to select the 10C mapping.
* It's my intention to eventually allow editing the hexadecimal register values, and seeing the effect on the segments, but that isn't yet implemented.
Find all posts by this user
Quote this message in a reply
03-28-2023, 05:49 AM (This post was last modified: 03-28-2023 05:50 AM by dmh.)
Post: #2
RE: voyager-lcd: Linux & Windows utility for Voyager display conversion to hexadec...
Excellent!!!

I had half done this in Excel but will use this from now on :-)

Thank you!!!

(03-28-2023 04:19 AM)brouhaha Wrote:  Recently I've been hacking the microcode of Voyager series calculators, and dealing with the mapping of LCD display segments to the hardware registers by hand is quite a pain. I wrote a program to allow clicking to toggle the segments of an approximation fo the Voyager LCD display, and showing the corresponding hexadecimal values of the registers. This might be useful for:

1. other people hacking Voyager microcode
2. people doing synthetic programming on the 15C, which can make display segment control available from user programs



The program is provided as source code for Linux, and an .msi installer package for Windows 10 and 11.

https://github.com/brouhaha/voyager-lcd/releases

Any and all feedback is welcome.

Notes:

* After starting the program, you'll have to embiggen the window to get the display to show up. Initially all segments are off, represented by light grey outlines on a white background, so at the initial small size, they're not really viaible at all.
* The program source code contains the segment mappings for the "normal" Voyager models (11C, 12C, 15C, and 16C), and also the mapping for the 10C, but presently there's no way to select the 10C mapping.
* It's my intention to eventually allow editing the hexadecimal register values, and seeing the effect on the segments, but that isn't yet implemented.

Calculator Clique on YouTube
Visit this user's website Find all posts by this user
Quote this message in a reply
03-28-2023, 05:58 AM
Post: #3
RE: voyager-lcd: Linux & Windows utility for Voyager display conversion to hexadec...
I have a couple of suggestions:

- Have a clear option (File, Clear or similar) so you don't have to clear every segment one by one or quit (lazy, I know)

- Displaying the instructions as well as the hex to make programming the display via synthetic programming easier (lazy again but saves looking the hex up in the instruction table)

Thanks again :-)

Calculator Clique on YouTube
Visit this user's website Find all posts by this user
Quote this message in a reply
03-28-2023, 02:18 PM
Post: #4
RE: voyager-lcd: Linux & Windows utility for Voyager display conversion to hexadec...
Very nice!

Should you be interested...

I have attached SVG files for Voyager LCD segments & annunciators. Some scaling will be required.

Complete display (useful for viewing spacing):
[Image: voyager-display.png]

Segments (including minus sign):
[Image: voyager-segment.png]

Annunciators:
[Image: voy-ann.png]


Attached File(s)
.zip  VoyagerSVG.zip (Size: 9.57 KB / Downloads: 6)
Find all posts by this user
Quote this message in a reply
04-02-2023, 10:45 PM
Post: #5
RE: voyager-lcd: Linux & Windows utility for Voyager display conversion to hexadec...
(03-28-2023 02:18 PM)Mark H. Shin Wrote:  I have attached SVG files for Voyager LCD segments & annunciators. Some scaling will be required.

Thanks Mark! I may use that in the future, though I haven't yet. I have experimented with SVG support in the Qt toolkit, which I use for voyager-lcd and some of my other recent programs. It unfortunately does not allow manipulation of the SVG after it is loaded, for instance to change the fill color of an LCD segment. Most other platforms that support SVG allow that, by interacting with the DOM. C'est la vie.

Aside from the digit/decimal/comma and leading negative sign shapes not matching the actual Voyager display, my biggest complaint with the display in voyager-lcd is that I can't get the "G" and "RAD" anunciators to be adjoining. I've tried several different methods of telling the QGraphicsLinearLayout to do that, including making the "G" cell right-justified and the "RAD" cell left-justified, but it doesn't work. Short of switching everything to SVG, I probably will have to stop using a QGraphicsLinearLayout for the annunciators.
Find all posts by this user
Quote this message in a reply
04-02-2023, 10:48 PM
Post: #6
RE: voyager-lcd: Linux & Windows utility for Voyager display conversion to hexadec...
(03-28-2023 05:58 AM)dmh Wrote:  - Displaying the instructions as well as the hex to make programming the display via synthetic programming easier (lazy again but saves looking the hex up in the instruction table)

This is now available in version 1.2 of voyager-lcd. There is a view menu with a "User code" command to show the 15C user code for registers 9 and 10. This can be used e.g. in Allyn Tennant's demo program.

   
Find all posts by this user
Quote this message in a reply
04-03-2023, 12:14 AM
Post: #7
RE: voyager-lcd: Linux & Windows utility for Voyager display conversion to hexadec...
Version 1.3 adds a "Segment" menu with commands to clear or set all segments.

https://github.com/brouhaha/voyager-lcd/releases
Find all posts by this user
Quote this message in a reply
04-03-2023, 10:51 AM
Post: #8
RE: voyager-lcd: Linux & Windows utility for Voyager display conversion to hexadec...
Excellent!

Works perfectly with my first test :-)

Love your work - I'll abandon my spreadsheet version now :-)

(04-03-2023 12:14 AM)brouhaha Wrote:  Version 1.3 adds a "Segment" menu with commands to clear or set all segments.

https://github.com/brouhaha/voyager-lcd/releases

Calculator Clique on YouTube
Visit this user's website Find all posts by this user
Quote this message in a reply
04-03-2023, 03:21 PM
Post: #9
RE: voyager-lcd: Linux & Windows utility for Voyager display conversion to hexadec...
(04-03-2023 10:51 AM)dmh Wrote:  Works perfectly with my first test :-)

Glad to hear it!

I threw together some of this stuff very hastily, and haven't exhaustively tested it, so I wouldn't be surprised if there were some errors lurking in it. Don't use it for any health-, safety-, or life-criticial applications!

I'm struggling to get the Windows installer to be able to do an upgrade, rather than telling the user to unistall the old version first. (issue #13). I found web pages explaining how to do that with WIX. On Linux, msitools wixl provides a subset of the capabilities of WIX. I put in the changes, and then the installer will do an upgrade, except that it doesn't get all of the DLLs installed. The same msi package that doesn't loses the DLLs on an upgrade works just fine, including the DLLs, when it is installed from scrratch (not an upgrade).
Find all posts by this user
Quote this message in a reply
04-18-2023, 12:49 PM
Post: #10
RE: voyager-lcd: Linux & Windows utility for Voyager display conversion to hexadec...
Thought I'd put the utility to use...

As a test I changed the flashing HEllo 15C synthetic program so that it would display HELLo 15C.

   

The flashing display I get is the following (HELlo 15C):

   

The strange thing is I get the same results whether I input GSB 0 (lower case l) or GSB 2 (upper case L) as the 2nd program code for reg 9.
Find all posts by this user
Quote this message in a reply
04-18-2023, 05:09 PM
Post: #11
RE: voyager-lcd: Linux & Windows utility for Voyager display conversion to hexadec...
(04-18-2023 12:49 PM)Mark H. Shin Wrote:  The strange thing is I get the same results whether I input GSB 0 (lower case l) or GSB 2 (upper case L) as the 2nd program code for reg 9.

That is indeed strange. If the segment mapping for bit 9 (0x200) of register 9 was wrong in voyager-lcd, I'd expect setting that bit on the real calcualtor to turn on another segment somewhere. On the other hand, having that bit set in the program shouldn't cause the RCL or STO instructions in the program, which transfer the dummy program steps to the display registers, to do any "normalization" that would only turn off that single bit.
Find all posts by this user
Quote this message in a reply
04-24-2023, 08:21 AM
Post: #12
RE: voyager-lcd: Linux & Windows utility for Voyager display conversion to hexadec...
(03-28-2023 02:18 PM)Mark H. Shin Wrote:  I have attached SVG files for Voyager LCD segments & annunciators. Some scaling will be required.

I started looking at those, and I think they should work pretty well in my programs. With an environment that allows manipulating the DOM, it would be easier, but Qt doesnt have that. However QSVGRenderer does allow selecting a single element by the id attribute and rendering only that, so I'll just have to load up a separate QtRenderer for each segment, and then render that segment or not. Or else I could parse the paths myself and turn them each into a QGraphicsPathItem. That would probably be more efficient, but I'd have to write the path parser. Fortunately the Qt painter class used to construct a QGraphicsPathItem has suitable primitives for all SVG path items, including cubic and quadratic Bezier curves, though to a first glance it appears that your SVG paths don't use fancy stuff like that.

It's interesting that the battery annunciator is not a single closed path. If I add class="cls-2" to the battery annunciator paths, and change the cls-2 style to fill with black, the other annunciators fill, but the battery annunciator does not. This seems mysterious, but I don't know much about SVG. I currently don't use the battery annunciator in my Voyager pograms, but I might use it in the future for simulating the ARM-based hardware, which has the battery annunciator under software control (unlike the pre-ARM Voyager hardware).
Find all posts by this user
Quote this message in a reply
04-24-2023, 09:21 AM (This post was last modified: 04-29-2023 03:24 AM by Mark H. Shin.)
Post: #13
RE: voyager-lcd: Linux & Windows utility for Voyager display conversion to hexadec...
(04-24-2023 08:21 AM)brouhaha Wrote:  It's interesting that the battery annunciator is not a single closed path.

I have attached a zip archive containing 2 files...

voyager-annunciator.m contains code that was generated by a program called PaintCode. PaintCode takes an SVG and outputs generated code for Objective-C. There is a Windows version of PaintCode available on GitHub, although I have not been able to compile it, because of its required dependencies.

annunciator.m contains code snippets for the annunciators I originally planned to utilize in my simulations.

The code should be intuitive since it gives the Bezier primitives that are used to draw individual paths.

For annunciators that are comprised of multiple paths, there is a method called "appendBezierPath" (see annunciators.m) that appends additional paths to another path so it can act as a single path, although comprised of multiple paths.


Attached File(s)
.zip  voyager-annunciator.zip (Size: 14.23 KB / Downloads: 3)
Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: