Post Reply 
What is a modern-day HP-16C?
08-22-2018, 07:44 PM (This post was last modified: 08-22-2018 07:49 PM by edryer.)
Post: #21
RE: What is a modern-day HP-16C?
(08-22-2018 04:50 PM)Dave Britten Wrote:  The TI-86 is really solid for this kind of thing, though calling it modern-day at 21-years old is a stretch. But it can handle 16 digits in hex, bin, and oct modes, and can do And, Or, Xor, Not, and shifts and rotates. Plus it's programmable, of course.

oh, sorry, didn't mean to imply it was modern! It is half my age Smile

The TI-86 is utterly superb as a general math platform, huge number of functions, I believe oddly enough a few more than the TI-89's, and the LCD is superior to the 89's miniature non-changeable font. Use it a lot for doing Linear algebra as a kind of hobby and as an adjunct to Machine learning. Picked it up Mint with the nice translucent blue limited edition cover for approx US $15 including postage! It's only weakness is non-RPN, and I may buy an HP-50G simply because I can calculate in around half the time using RPN, far, far easier, and good to check intermediate results of course.

The HP-16C I have found to be just a fantastic piece of machinery for low level quick checks, address manipulations, integer arithmetic in the bases. Although it is weak in FP don't use that often anyhow.

It is my favourite HP, most people who see it think of it as an strange size calculator (or mistake it for an HP12C if they think they are clever). The few (two) people who have gasped, have oddly enough, been pretty well respected Computer Scientists at my local University.

HP-28S (1988 US model), DM41X (2020)
Find all posts by this user
Quote this message in a reply
08-22-2018, 08:11 PM
Post: #22
RE: What is a modern-day HP-16C?
(08-22-2018 07:44 PM)edryer Wrote:  The TI-86 is utterly superb as a general math platform, huge number of functions, I believe oddly enough a few more than the TI-89's, and the LCD is superior to the 89's miniature non-changeable font.

I wholeheartedly agree. I think the only three advantages the 89 has are the larger memory, CAS, and more sophisticated programming capabilities (indirection, etc.). Nearly every single other aspect of the machine is inferior to the 86, overall ease of use chief among them. The 85 and 86 are the closest TI has ever gotten to a true "engineer's calculator" in their graphing family. I wish they'd bring back the 86, or make an 87.

If you want RPN:

https://www.ticalc.org/archives/files/fi...24677.html

Note that I haven't tried this myself, but it looks awfully promising.

(08-22-2018 07:44 PM)edryer Wrote:  It is my favourite HP, most people who see it think of it as an strange size calculator (or mistake it for an HP12C if they think they are clever). The few (two) people who have gasped, have oddly enough, been pretty well respected Computer Scientists at my local University.

There's nothing odd about that, those are exactly the kind of people I'd expect to be in awe of a 16C. Wink
Visit this user's website Find all posts by this user
Quote this message in a reply
08-23-2018, 08:15 AM
Post: #23
RE: What is a modern-day HP-16C?
(08-22-2018 08:11 PM)Dave Britten Wrote:  […] advantages the 89 has [...] more sophisticated programming capabilities (indirection, etc.)

Not to mention the ability you have to write blindingly fast code for it using TIGCC...
Find all posts by this user
Quote this message in a reply
08-23-2018, 11:09 AM
Post: #24
RE: What is a modern-day HP-16C?
You're going to have a tough time achieving 'blindingly fast' on a 12 MHz 68000. Smile

I'm not sure if there are any decent C compilers for the 86. I've been told C produces sub-optimal Z80 code, plus the compiler would have to be modified to leave the IY register alone for the most part, due to the way the 86 OS uses it to address the system flags table. It has great support for assembly programs, though, and you can write/install programs that add their own tokens and functions that are usable system-wide.
Visit this user's website Find all posts by this user
Quote this message in a reply
08-23-2018, 11:24 AM
Post: #25
RE: What is a modern-day HP-16C?
(08-23-2018 11:09 AM)Dave Britten Wrote:  You're going to have a tough time achieving 'blindingly fast' on a 12 MHz 68000. Smile

It's all relative, of course, but a benchmark written in C running on the Voyage 200 finishes in about 2 seconds what an equivalent HP-Prime program does in 10.3 seconds or a DM42 running off USB power does in 32.47 seconds. The only machine that I clocked running faster was a TI-84 Plus CE running the same thing compiled with CEdev.

By comparison, the same TI-84+CE ran an equivalent program written in TI-Basic in 1844 seconds. That's an acceleration factor of over 1000x.
Find all posts by this user
Quote this message in a reply
08-23-2018, 11:30 AM
Post: #26
RE: What is a modern-day HP-16C?
(08-23-2018 11:24 AM)grsbanks Wrote:  
(08-23-2018 11:09 AM)Dave Britten Wrote:  You're going to have a tough time achieving 'blindingly fast' on a 12 MHz 68000. Smile

It's all relative, of course, but a benchmark written in C running on the Voyage 200 finishes in about 2 seconds what an equivalent HP-Prime program does in 10.3 seconds or a DM42 running off USB power does in 32.47 seconds. The only machine that I clocked running faster was a TI-84 Plus CE running the same thing compiled with CEdev.

By comparison, the same TI-84+CE ran an equivalent program written in TI-Basic in 1844 seconds. That's an acceleration factor of over 1000x.

Not too shabby. What's the benchmark? I'd be curious to see what a TI-86 assembly version clocks in at.
Visit this user's website Find all posts by this user
Quote this message in a reply
08-23-2018, 11:43 AM
Post: #27
RE: What is a modern-day HP-16C?
Finding all 92 solutions to the 8x8 N-Queens problem.

This is my C source for the 84+CE , although it might be an old version that I've since altered. It expects the size of the chess board (1 to 10) in the variable 'N' and returns a list of 2 integers in the list variable L1, the first of which is the number of solutions found and the second is the number of "nodes" tested. It doesn't update the display every time a solution is found, only once every 16 solutions, in order to avoid slowing things down too much.

Code:
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <tice.h>

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <fileioc.h>

char *bfr;

void nrow(unsigned int row, unsigned int *solution, unsigned int size, unsigned int *nbSolutions, unsigned int *nbNodes);
void printBfrAt(uint8_t line, uint8_t col);
void showProgress(int sol, int nodes, int skip);

void main(void) {

    real_t *realVariable;
    unsigned int boardSize;
    unsigned int nbSolutions = 0;
    unsigned int nbNodes = 0;
    unsigned int *solution;
    list_t *resultList;
    
    bfr = (char *)malloc(32);
    
    // Recall the value of 'N' (size of the chess board)
    if (!ti_RclVar(TI_REAL_TYPE, ti_N, &realVariable)) {
        boardSize = (unsigned int)abs(os_RealToInt24(realVariable));
        if ((boardSize <= 10) && boardSize) {
            os_ClrHome();
            solution = (unsigned int *)calloc(boardSize, sizeof(int));
            showProgress(0,0,0);
            nrow(0, solution, boardSize, &nbSolutions, &nbNodes);
            free(solution);
            showProgress(nbSolutions,nbNodes,0);
            // Store the results in the list L1
            resultList = ti_MallocList(2);
            resultList->items[0] = os_Int24ToReal(nbSolutions);
            resultList->items[1] = os_Int24ToReal(nbNodes);
            ti_SetVar(TI_REAL_LIST_TYPE, ti_L1, resultList);
            free(resultList);
        }
    }
    
    free(bfr);
}

void nrow(unsigned int row, unsigned int *solution, unsigned int size, unsigned int *nbSolutions, unsigned int *nbNodes) {
    
    unsigned int col;
    unsigned int testRow;
    unsigned int safe;
    
    for (col=0; col<size; col++)
    {
        (*nbNodes)++;
        safe = 1;
        for (testRow=0; testRow<row; testRow++)
        {
            if ((col == solution[testRow]) || (abs(col - solution[testRow])==(row-testRow)))
            {
                safe = 0;
                break;
            }
        }
        if (safe)
        {
            if (row==(size-1))
            {
              ++(*nbSolutions);
              showProgress(*nbSolutions, *nbNodes, 1);
            }
            else
            {
                solution[row] = col;
                nrow(row+1,solution,size,nbSolutions,nbNodes);
            }
        }
    }
}

void printBfrAt(uint8_t line, uint8_t col) {
    os_SetCursorPos(line, col);
    os_PutStrFull(bfr);
}

void showProgress(int sol, int nodes, int skip) {
    if (skip && (sol & 0x0F)) return;
    sprintf(bfr, "Solutions: %u", sol);
    printBfrAt(0,0);
    sprintf(bfr, "Nodes: %u", nodes);
    printBfrAt(1,0);
}
Find all posts by this user
Quote this message in a reply
09-02-2018, 04:19 AM (This post was last modified: 09-02-2018 04:28 AM by megarat.)
Post: #28
RE: What is a modern-day HP-16C?
This probably doesn’t count (especially with the “modern” requirement), but I haven’t seen it mentioned yet, so here goes: Jake Schwartz made a great 16c “emulator” (more of a simulator, really” for the HP48. I’m not sure if it’s still obtainable, and it requires an overlay for optimal use, but if you can get an HP 48 kitted up with it, it’s quite keen.

UPDATE: the emulator can sill be obtained here: http://www.pahhc.org/mul8r.htm
Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: 1 Guest(s)