HP Forums
MCODE: Card_Reader 1G ROM - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Calculators (and very old HP Computers) (/forum-3.html)
+--- Forum: General Forum (/forum-4.html)
+--- Thread: MCODE: Card_Reader 1G ROM (/thread-12952.html)



MCODE: Card_Reader 1G ROM - Ángel Martin - 05-11-2019 11:13 AM

Recently I've been looking into the Card_Reader 1G ROM to learn more about the section dealing with the HP-67 code conversion.

This ROM is a piece of work, fully packed and stuffed with tons of interesting tricks. Looking at the ROM contents it becomes clear that the Card_Reader was a difficult peripheral to control. I guess the breakthrough was the original models on with the HP-65 and 67, but the 41 implementation is a real masterpiece.

Anyway I was wondering if somebody had already disassembled the HP-67 code conversion part of the ROM, located at addresses E469 to E566 and E5A7 to E608. Those tables appear though to crack, I'd expect them to be some kind of mapping between HP-67 and HP-41 instruction codes but so far I haven't figured it out...

Best,
ÁM


RE: MCODE: Card_Reader 1G ROM - Monte Dalrymple - 05-12-2019 11:13 PM

(05-11-2019 11:13 AM)Ángel Martin Wrote:  Recently I've been looking into the Card_Reader 1G ROM to learn more about the section dealing with the HP-67 code conversion.

This ROM is a piece of work, fully packed and stuffed with tons of interesting tricks. Looking at the ROM contents it becomes clear that the Card_Reader was a difficult peripheral to control. I guess the breakthrough was the original models on with the HP-65 and 67, but the 41 implementation is a real masterpiece.

Anyway I was wondering if somebody had already disassembled the HP-67 code conversion part of the ROM, located at addresses E469 to E566 and E5A7 to E608. Those tables appear though to crack, I'd expect them to be some kind of mapping between HP-67 and HP-41 instruction codes but so far I haven't figured it out...

Best,
ÁM

I haven't looked at it in detail, but the fact that it's revision -1G implies that it was a challenge to get right.


RE: MCODE: Card_Reader 1G ROM - Ángel Martin - 05-13-2019 07:22 AM

(05-12-2019 11:13 PM)Monte Dalrymple Wrote:  I haven't looked at it in detail, but the fact that it's revision -1G implies that it was a challenge to get right.

Yep, so I'm now looking for the "HP-67 Byte Table"- if such a thing ever existed?
I seem to remember an article on PPC dealing with the HP-67 instruction codes, but again, it might be just a figment of my imagination...

My guess is that there must be a look-up table mapping 67-instruction codes to 41-byte_table values. Time for another wading session...


RE: MCODE: Card_Reader 1G ROM - Thomas Okken - 05-13-2019 10:07 AM

Here's one: http://www.panamatik.de/ProgramCodes.pdf


RE: MCODE: Card_Reader 1G ROM - Jake Schwartz - 05-13-2019 04:44 PM

(05-13-2019 07:22 AM)Ángel Martin Wrote:  Yep, so I'm now looking for the "HP-67 Byte Table"- if such a thing ever existed?
I seem to remember an article on PPC dealing with the HP-67 instruction codes, but again, it might be just a figment of my imagination...

My guess is that there must be a look-up table mapping 67-instruction codes to 41-byte_table values. Time for another wading session...

The initial HP-67 8-Bit Program Codes table appeared at the end of Louis Cargile's article, HP-67 Internal Codes and Quasi-Alphanumerics, from HP65 Notes Volume 4, Number 1, pages 5 - 8 (1977). Some of us remember Lou as the inventor of the HP-67 "Black Box", first described in 65 Notes V4N5 in his amazing article "Zen and the Art of HP-67 Maintenance", starting on page 4. Building that box was my very first soldering adventure :-)

Jake


RE: MCODE: Card_Reader 1G ROM - Ángel Martin - 05-14-2019 10:33 AM

(05-13-2019 10:07 AM)Thomas Okken Wrote:  Here's one: http://www.panamatik.de/ProgramCodes.pdf

Perfect!, thanks very much Thomas.


RE: MCODE: Card_Reader 1G ROM - Ángel Martin - 05-14-2019 10:34 AM

(05-13-2019 04:44 PM)Jake Schwartz Wrote:  The initial HP-67 8-Bit Program Codes table appeared at the end of Louis Cargile's article, HP-67 Internal Codes and Quasi-Alphanumerics, from HP65 Notes Volume 4, Number 1, pages 5 - 8 (1977). Some of us remember Lou as the inventor of the HP-67 "Black Box", first described in 65 Notes V4N5 in his amazing article "Zen and the Art of HP-67 Maintenance", starting on page 4. Building that box was my very first soldering adventure :-)

Jake

Yeah, those names do ring the bell...many thanks for the information, will follow up shortly.


RE: MCODE: Card_Reader 1G ROM - derekamos - 05-16-2019 01:29 AM

I can't believe its not GOT butter!
Is there really no commented source code for the Card Reader from HP ???

Angel, those spaces don't look like tables to me. To start with they only represent half the codes for the 67, also the codes that do fit are in higgledy-piggledy order - any responsible assembly table maker would have reduced the table order to 1,2,3,4... order. Next there doesn't seem to be any table addressing code in the whole of the card reader ROM, not even an offset address, by one or two bytes, i.e table 1 is at E469 so the search would be to look for an ld@ code having 9h as the last digit of a 4 digit address, but with an offset of a byte it would be 8h or if 16 bit offset it would be 7h, but none of these are apparent in the ROM. Its the same for the other table 2 at E5A7.
Its like the 1G updated version has some left over code that is not cleaned up from the previous version.
Just a few thoughts on the matter.
DA


RE: MCODE: Card_Reader 1G ROM - Ángel Martin - 05-16-2019 04:59 AM

(05-16-2019 01:29 AM)derekamos Wrote:  I can't believe its not GOT butter!
Is there really no commented source code for the Card Reader from HP ???

Angel, those spaces don't look like tables to me. To start with they only represent half the codes for the 67, also the codes that do fit are in higgledy-piggledy order - any responsible assembly table maker would have reduced the table order to 1,2,3,4... order. Next there doesn't seem to be any table addressing code in the whole of the card reader ROM, not even an offset address, by one or two bytes, i.e table 1 is at E469 so the search would be to look for an ld@ code having 9h as the last digit of a 4 digit address, but with an offset of a byte it would be 8h or if 16 bit offset it would be 7h, but none of these are apparent in the ROM. Its the same for the other table 2 at E5A7.
Its like the 1G updated version has some left over code that is not cleaned up from the previous version.
Just a few thoughts on the matter.
DA

Hi Derek, thanks for chiming in. I'm half-way through the decoding of the tables, which I'm pretty sure there are active tables, even if decoding their logic requires more information than usually. (HP would not leave all that dead code there, it's MCODE heresy!)

For starters the table is exactly 256 bytes long, which provides a pretty good hint of its contents. Obviously one needs to follow the order defined by the HP-67 "byte table". Thanks to Thomas (and Eberhard) this was revealed to be the proper sequence of the words on the table starting at E467 (not at E469 as I first thought - thanks to Mike for that pointer as well).

As to the index or starting location, it's implicitly built in the call to the subroutine at E465: the call loads E467 in the return stack, from where it's picked up by the subroutine. The table offset (i.e. position to read) is expected to be in A.M on entry.

The logic fetches the word, and depending on the value of the XS nibble it interprets the word as :

a. if XS=0, a direct translation into an HP-41 byte code
b. if XS=3, one of the XROM id#'s from the card reader itself
c. if XS=1, the address of the location where the actual combination of instruction codes are to be found
d. if XS=2 - not clear yet....

All this is of very limited use since the HP-67 code cannot be read by the HP-41 directly unless thru the utilization of the card reader obviously - and separating it into an independent function doesn't seem to be very useful; it's just the challenge of course.

To be continued, this is just the beginning.
See below the gory details ;-)

Code:
E467    084    STOP    
E468    060    1/X    
E469    051    X^2    
E46A    052    SQRT    
E46B    04C    %    
E46C    1C7    -> S+   [TB_1C7]
E46D    053    Y^X    
E46E    050    LN    
E46F    055    E^X    
E470    04F    R-P    
E471    059    SIN    
E472    05A    COS    
E473    05B    TAN    
E474    04E    P-R    
E475    085    RTN    
E476    3A3    ???      A3:A3 - 7RCLN
E477    010    0    
E478    011    1    
E479    012    2    
E47A    013    3    
E47B    014    4    
E47C    015    5    
E47D    016    6    
E47E    017    7    
E47F    018    8    
E480    019    9    
E481    01A    ,    
E482    083    ENTER^    
E483    25F    -> CHS   ???
E484    01B    EEX    
E485    043    /    
E486    000    VOID    
E487    089    PSE    
E488    062    FACT    
E489    1C4    -> MEAN  [TB_1C4]
E48A    1CA    -> SDEV  [TB_1CA] 
E48B    04D    %CH    
E48C    1CD    -> S-    [TB_1CD]
E48D    061    ABS    
E48E    056    LOG    
E48F    057    10^X    
E490    068    INT    
E491    05C    ASIN    
E492    05D    ACOS    
E493    05E    ATAN    
E494    069    FRC    
E495    06E    RND    
E496    000    VOID    
E497    071    X<>Y    
E498    075    RDN    
E499    077    CLX    
E49A    399    ENG      A3:99 - 7ENG
E49B    39A    FIX      A3:9A - 7FIX
E49C    3A2    PRTX     A3:A2 - 7PRTX
E49D    3A4    SCI      A3:A4 - 7SCI
E49E    040    +    
E49F    041    -    
E4A0    042    *    
E4A1    06A    D-R    
E4A2    06B    R-D    
E4A3    06C    HMS    
E4A4    06D    HR    
E4A5    1F3    -> STO (i)    
E4A6    1F5    -> RCL (i)    
E4A7    049    HMS+    
E4A8    08F    ADV    
E4A9    3A1    STK    
E4AA    076    LASTX    
E4AB    387    W/DATA    
E4AC    381    MERGE   A3:81 - MRG
E4AD    1F7    X<> I    
E4AE    074    R^    
E4AF    072    PI    
E4B0    080    DEG    
E4B1    081    RAD    
E4B2    082    GRAD    
E4B3    39F    P<>S     A3:9F - 7P<>S
E4B4    38B    CLREG    A3:8B - 7CLRG
E4B5    3A0    REG      A3:A0 - 7PRREG
E4B6    000    NULL    
E4B7    079    X#Y?    
E4B8    078    X=Y?    
E4B9    045    X>Y?    
E4BA    063    X#0?    
E4BB    067    X=0?    
E4BC    064    X>0?    
E4BD    066    X<0?    
E4BE    046    X<=Y?    
E4BF    1C2    -> FS? 0 [TB_1C2]
E4C0    1C2    -> FS? 1    
E4C1    1FD    FS? 2    
E4C2    1FF    FS? 3    
E4C3    39D    ISZ      A3:9D - 7ISZ
E4C4    39E    ISZ(I)   A3:9E -  7ISZI
E4C5    397    DSZ      A4:97 - 7DSZ
E4C6    398    DSZ(i)    
E4C7    1A7    DSP 0    
E4C8    1A7    DSP 1    
E4C9    1A7    DSP 2    
E4CA    1A7    DSP3    
E4CB    1A7    DSP 4    
E4CC    1A7    DSP 5    
E4CD    1A7    DSP 6    
E4CE    1A7    DSP 7    
E4CF    1A7    DSP 8    
E4D0    1A7    DSP 9    
E4D1    1A9    CF 0    
E4D2    1A9    CF 1    
E4D3    1A9    CF 2    
E4D4    1F9    CF 3    
E4D5    000    VOID    
E4D6    396    DSP(i)    A3:96 - 7DSP
E4D7    020    RCL 00    
E4D8    021    RCL 01    
E4D9    022    RCL 02    
E4DA    023    RCL 03    
E4DB    024    RCL 04    
E4DC    025    RCL 05    
E4DD    026    RCL 06    
E4DE    027    RCL 07    
E4DF    028    RCL 08    
E4E0    029    RCL 09    
E4E1    1AB    RCL A    
E4E2    1AB    RCL B    
E4E3    1AB    RCL C    
E4E4    1AB    RCL D    
E4E5    1AB    RCL E    
E4E6    1AB    RC I    
E4E7    1AD    ST/ 0    
E4E8    1AD    ST/ 1    
E4E9    1AD    ST/ 2    
E4EA    1AD    ST/ 3    
E4EB    1AD    ST/ 4    
E4EC    1AD    ST/ 5    
E4ED    1AD    ST/ 6    
E4EE    1AD    ST/ 7    
E4EF    1AD    ST/ 8    
E4F0    1AD    ST/ 9    
E4F1    1AF    SF 0    
E4F2    1AF    SF 1    
E4F3    1AF    SF 2    
E4F4    1FB    SF 3    
E4F5    000    VOID    
E4F6    201    STO/ (i)    
E4F7    030    STO 00    
E4F8    031    STO 01    
E4F9    032    STO 02    
E4FA    033    STO 03    
E4FB    034    STO 04    
E4FC    035    STO 05    
E4FD    036    STO 06    
E4FE    037    STO 07    
E4FF    038    STO 08    
E500    039    STO 09    
E501    1B1    STO A    
E502    1B1    STO B    
E503    1B1    STO C    
E504    1B1    STO D    
E505    1B1    STO E    
E506    1B1    ST I    
E507    1B3    ST- 0    
E508    1B3    ST- 1    
E509    1B3    ST- 2    
E50A    1B3    ST- 3    
E50B    1B3    ST- 4    
E50C    1B3    ST- 5    
E50D    1B3    ST- 6    
E50E    1B3    ST- 7    
E50F    1B3    ST- 8    
E510    1B3    ST- 9    
E511    1B5    GSB A    
E512    1B5    GSB B    
E513    1B5    GSB C    
E514    1B5    GSB D    
E515    1B5    GSB E    
E516    203    GSB (i)    
E517    1B8    ST= 0    
E518    1B8    ST+ 1    
E519    1B8    ST+ 2    
E51A    1B8    ST+ 3    
E51B    1B8    ST+ 4    
E51C    1B8    ST+ 5    
E51D    1B8    ST+ 6    
E51E    1B8    ST+ 7    
E51F    1B8    ST+ 8    
E520    1B8    ST+ 9    
E521    1B8    GTO a    
E522    1B8    GTO b    
E523    1B8    GTO c    
E524    1B8    GTO d    
E525    1B8    GTO e    
E526    39B    ST+ (i)    
E527    1BB    GTO 0    
E528    1BB    GTO 1    
E529    1BB    GTO 2    
E52A    1BB    GTO 3    
E52B    1BB    GTO 4    
E52C    1BB    GTO 5    
E52D    1BB    GTO 6    
E52E    1BB    GTO 7    
E52F    1BB    GTO 8    
E530    1BB    GTO 9    
E531    1BD     GTO A    
E532    1BD     GTO B    
E533    1BD    GTO C    
E534    1BD    GTO D    
E535    1BD    GTO E    
E536    205    GTO (i)    
E537    276    STX 0    
E538    276    STX 1    
E539    276    STX 2    
E53A    276    STX 3    
E53B    276    STX 4    
E53C    276    STX 5    
E53D    276    STX 6    
E53E    276    STX 7    
E53F    276    STX 8    
E540    276    STX 9    
E541    276    LBL a    
E542    276    LBL b    
E543    276    LBL c    
E544    276    LBL d    
E545    276    LBL e    
E546    39C    STX (i)    
E547    1C0    LBL 0    
E548    1C0    LBL 1    
E549    1C0    LBL 2    
E54A    1C0    LBL 3    
E54B    1C0    LBL 4    
E54C    1C0    LBL 5    
E54D    1C0    LBL 6    
E54E    1C0    LBL 7    
E54F    1C0    LBL 8    
E550    1C0    LBL 9    
E551    1DF    LBL A    
E552    1E3    LBL B    
E553    1E7    LBL C    
E554    1EB    LBL D    
E555    1EF    LBL E    
E556    207    LBL (i)    
E557    001    LBL 00    
E558    002    LBL 01    
E559    003    LBL 02    
E55A    004    LBL 03    
E55B    005    LBL 04    
E55C    006    LBL 05    
E55D    007    LBL 06    
E55E    008    LBL 07    
E55F    009    LBL 08    
E560    00A    LBL 09    
E561    1D0        
E562    1D3        
E563    1D6        
E564    1D9        
E565    1DC        
E566    000    NOP



RE: MCODE: Card_Reader 1G ROM - derekamos - 05-16-2019 11:56 AM

Thats OK Angel, I figured you might like the assembly-code insights, & you were red-hot with spying out the 2-byte offset to the table address. Even if its not in line-code that is readily readable.

The table looks like an ugly SOB, not something I would want to decode!

That brings me to the 2nd table, it doesn't seem have an E5A7 or an offset-E5A5 address in the ROM, that I could see?

I'll just wish you good luck with that one. DA


RE: MCODE: Card_Reader 1G ROM - RobertM - 08-02-2019 05:05 AM

(05-16-2019 04:59 AM)Ángel Martin Wrote:  ... it's just the challenge of course.
So here is a "quick writeup" of what I've been working on with the commenting the card reader mcode - diverting my attention to the 67 translation table rabbit hole.

Starting partway through the process of translation. Assume the 67 program is already read in, and now we need to translate it a byte at a time (according to the card reader manual, this is how it works), starting from the end of the program and moving to the beginning.

I love how the 41C engineers played with addresses, having one translation table at address 0xE467 (get it? For 67?) and the main translation code starts at 0xE567 ... another 67 address. And this is some intricate code using highly coupled code, data, and addresses.

Note: Names of the tables, translations, and code labels are all mine (and may change in the future).

Overview
--------------------
There are two translation tables and 5 different kinds of translation.

The two translation tables:
TABLE 1 at 0xE467 contains single word translation codes (TC) that are used to specify how to translate a 67 byte code (67BC) into one or more 41 byte codes (41BC). TABLE 1 is indexed by the 67 byte code.

TABLE 2 at 0xE5A7 is used to translate one 67BC into one or more 41BC that may require some processing of the codes found within. It is index by mcode that takes the TC from Table 1 (values 0x100-0x3FF) and turns it into an address into TABLE 2.

There are 5 different kinds of translation used (my naming):
SINGLE: This is a direct, one to one translation of a single 67 byte code into a single 41 byte code. This uses only TABLE 1. Let look at the LOG function as an example (67BC = 0x27, 41BC=056). Using the 67BC as an index into the table (0xE467+0x27=0xE48E), we get the TC value of 0x56. The translation MCODE sees that the value is between 0x000 and 0x0FF, so it knows it is a SINGLE translation (actually knows not to do a "multi" translation).

XROM: This is a one to 2-byte translation that takes a 67BC and translates it into an XROM call to a card reader function. The card reader is XROM ID 30, which gives 0xA780 - 0xA7A4 as XROM codes for its 36 functions. For TC values that are > 0x380, the code interprets the TC as specifying an XROM code. It does a "magical calculation" (see below) that extracts the last byte (0x080) and outputs that and an 0xA7.

EXEC: This is special translation that uses the TC to generate (same "magical calculation") an address in the card reader rom and then jumps to that address (using a GOTOC). This EXEC translation is used twice. The first is for translating the 67BC for CHS, which requires special code because the 41 actually has two byte codes for this: CHS as a unary operator, and NEG for data entry (and exponent). The second time is for the 67BC GTO 0 thru GTO E, and here the code just translates from a 67BC 0xD0-0xDE to a 41BC 0xB1-0xBF, and then outputs a 0x00 (for the jump count).

MULTI-A, MULTI-B: These are a one to many translation that uses the TC to generate (same "magical calculation") an address into TABLE 2 where a list of one or more words is found. MULTI-A alters the first word in the list, and then acts like MULTI-B. The list can be thought of as 41BCs that are output one at a time, until the 41BC has a value greater than 0x0FF (has a non-zero value in the high 2 bits). These MULTI translations are used for three purposes.
(1)for single 41 bytes that require "extra stuff" from the 67 version. For example, the statistic functions (S+, S- MEAN, SDEV) all translate to three bytes on the 41, because they have a SREG 14 prepended (to ensure the sigma registers are at the 67 equivilent location). Also, the 67 LBL A-Ea-e include not only a 41C LBL A-Ea-e, but also a numeric LBL 10-19.
(2) for multi-byte 41BCs, such as STO, RCL, SF, CF, XEQ, LBL etc. where the single 67BC must translate into 2 (or more) 41BCs. (Also the special nature of 67 flag 3 - similar to 41 flag 22 - is handled here).
(3) there is one case where an XROM is handled this way - the DSP0-9 translating to XROM 7DSP0-9.

THE MCODE
--------------------
We start around 0xE465. We have a 67BC in A:M (mantissa field of CPU A reg), and we do a GOSUB 0xE567 (TRANS67) to translate it. 0xE567 is going to get the TC from the table (CXISA), and then test the TC for greater than 0x0FF (is this not a SINGLE). If it is not a SINGLE, it calls 0xE609 (TROTHER) ... see below. Then (either a SINGLE, or the last translation of a XROM/EXEC/MULTI-A/MULTI-B), it calls 0xE637 (TROUTONE) to output one 41BC. Then it checks if we are at the beginning of the 67 program (remember, we are going from end to beginning). If not, we loop and do the next byte. If at the end, we output a LBL 67 as the first instruction in the 41 code. (Note that before we started - at 0xE458 - we output a GTO 67 as the last instruction).

The code at 0xE609 (TROTHER) handles all the non-SINGLE translations. All of these start out with the "magical calculation" that takes a TC, and turns it into an address. So a TC of 0xpqr, turns into either 0xE5qr or 0xE6qr. This address is used for XROM ... the qr becomes A7qr. For EXEC, the address is 0xE6qr. For MULTI-A or MULTI-B, the address is into Table 2 and is 0xE5qr or 0xE6qr. At the end of this calculation, we then repeatedly test and branch ... first testing the TC >= 0x380 (for XROM), then for >= 0x25F (EXEC), then >= 0x1C4 (MULTI-B) or else MULTI-A. And MULTI-A alters the first TC2, and then falls into MULTI-B. For all of these, if they generate n 41BCs, then they will output n-1 of them, and then return with the last one in C:X, which will be output by the caller as a SINGLE.

That's the "simple" overview. For more details, feel free to look at my code (source and listing files attached below). Please remember that this source is a work in progress ... I'm a long way from my goal which is commenting the entire 4K card reader rom. Feel free to comment or send suggestions.

Table 1
--------------
Code:

                   1066 ;**************************************************************************​****
                   1067 ; * TRANS TABLE 1
                   1068 ; * Table of translation codes to convert from 67 byte codes into the 41 byte table.
                   1069 ; *     Translation codes (TC) are accessed by the 67 byte code (67BC) in A:X above (TR67LOOP)
                   1070 ; *     calling TRANS67, which gets the translation code from the table below,
                   1071 ; *     and then may call TROTHER to convert it to one or more 41 byte codes (41BC)
                   1072 ; *
                   1073 ; * Note 1: There is a second translation table (TRANS TABLE 2, see 0xE5A7 below) that
                   1074 ; *     is used for multibyte translation, and contains what I call TC2 values to distinguish
                   1075 ; *     them from the TC values in this table.
                   1076 ; *
                   1077 ; * Note 2: Multiple bytes (41BCs) are generated in REVERSE ORDER. This appears
                   1078 ; *     to be because the entire 67 program is read in, and then translated, so
                   1079 ; *     bytes are translated from end to beginning.  Because of this, mutliple 
                   1080 ; *     bytes in the TRANS TABLE 2, appear in reverse order, e.g. RCL 25 would
                   1081 ; *     appear as 0x19 followed by 0x290 (0x90 + 0x200 to end the sequence).
                   1082 ;*
                   1083 ; * Note 3: 67 Flag 3 is the data entry flag which on the 41C flag 22.
                   1084 ; *
                   1085 ; * There are 5 different kinds of translation, based on the TC itself:
                   1086 ; *
                   1087 ; * SINGLE      TC of 0x000 - 0x0FF
                   1088 ; *     Direct, one to one byte translation. E.G. 67 SQRT is 67BC 0x03 translates
                   1089 ; *     directly to 41BC 0x52. This is accomplished by having the actual 41BC
                   1090 ; *     located in the Translation table at 0xE467 + 67 code (0xE467+0x03=0xE46A).
                   1091 ; *     Since 41BCs are 0x00 to 0xFF, the code checks for TC's that have C:XS as zero.
                   1092 ; * MULTI-A     TC of 0x100 to 0x1C3
                   1093 ; *     This is a one 67BC to multiple 41BCs translation. The 41BCs are found in TRANS
                   1094 ; *     TABLE 2, and end with a 41BC that is greater than 0x0FF. Also, MULTI-A requires 
                   1095 ; *     manipulation of the first byte found in the table, but subsequent bytes are direct.
                   1096 ; *     This first byte manipulation is used (for example) to subtract out the 67BC so that
                   1097 ; *     a single TC2 value can be used to generate different 41BC values (example, 67BC )
                   1098 ; * MULTI-B     TC of 0x1C4 to 0x25E
                   1099 ; *     This is a one to multi byte translation that uses a table of multiple bytes
                   1100 ; *     that end with a +0x200 added to the last. No special extra manipulation.
                   1101 ; * EXEC        TC of 0x25F to 0x37F
                   1102 ; *     This translation requires microcode to execute to figure out what
                   1103 ; *     byte or bytes to translate into. Example is the 67 CHS, which on the 41
                   1104 ; *     can be a CHS (0x54) if standalone, or NEG (0x1C) if part of a number
                   1105 ; * XROM        TC of 0x380 to 0x3FF
                   1106 ; *     This translations inserts an XROM instruction from this ROM
                   1107 ; *
                   1108 ; * Note 4: MULTI-A, MULTI-B and EXEC do a "calculation" that changes the TC
                   1109 ; *     into an Exxx address, into either the TRANS 2 Table which will be accessed
                   1110 ; *     through a CXISA, or into an mcode address that occurs after the TRANS 2
                   1111 ; *     table that will be access by a GOTOC. That same "calculation" leaves the
                   1112 ; *     lease significant byte (nybbles 1 and 0) as is and basically prepends an E5
                   1113 ; *     or E6 in front. This is also used to get the second byte of the XROM
                   1114 ; *     translations (so a TC of 0x3A3 is "calculated" to E7A3, and then )
                   1115 ;**************************************************************************​****
                   1116 .FILLTO 0x467
                   1117             //----------------------------------------------------------------------------------------
                   1118             //      TC      67BC    67Fnc   TrxType 41BCs or Addr/41BCs             (41 Instr)
                   1119             //----------------------------------------------------------------------------------------
 E467 084          1120             .CON    0x084   ;0x00   STOP    SINGLE  0x84                            (STOP)
 E468 060          1121             .CON    0x060   ;0x01   1/X     SINGLE  0x60                            (1/X)
 E469 051          1122             .CON    0x051   ;0x02   X^2     SINGLE  0x51                            (X^2)
 E46A 052          1123             .CON    0x052   ;0x03   SQRT    SINGLE  0x52                            (SQRT)
 E46B 04C          1124             .CON    0x04C   ;0x04   %       SINGLE  0x4C                            (%)
 E46C 1C7          1125             .CON    0x1C7   ;0x05   Σ+      MULTI-B @E5C7->0x99, 0x0E, 0x47         (ΣREG 14, Σ+)
 E46D 053          1126             .CON    0x053   ;0x06   Y^X     SINGLE  0x53                            (Y^X)
 E46E 050          1127             .CON    0x050   ;0x07   LN      SINGLE  0x50                            (LN)
 E46F 055          1128             .CON    0x055   ;0x08   E^X     SINGLE  0x55                            (E^X)
 E470 04F          1129             .CON    0x04F   ;0x09   R-P     SINGLE  0x4F                            (R-P)
 E471 059          1130             .CON    0x059   ;0x0A   SIN     SINGLE  0x59                            (SIN)
 E472 05A          1131             .CON    0x05A   ;0x0B   COS     SINGLE  0x5A                            (COS)
 E473 05B          1132             .CON    0x05B   ;0x0C   TAN     SINGLE  0x5B                            (TAN)
 E474 04E          1133             .CON    0x04E   ;0x0D   P-R     SINGLE  0x4E                            (P-R)
 E475 085          1134             .CON    0x085   ;0x0E   RTN     SINGLE  0x85                            (RTN)
 E476 3A3          1135             .CON    0x3A3   ;0x0F   RCLΣ+   XROM    0xA7, 0xA3                      (XROM 30,35) 7RCLΣ
 E477 010          1136             .CON    0x010   ;0x10   0       SINGLE  0x10                            (0 number)
 E478 011          1137             .CON    0x011   ;0x11   1       SINGLE  0x11                            (1 number)
 E479 012          1138             .CON    0x012   ;0x12   2       SINGLE  0x12                            (2 number)
 E47A 013          1139             .CON    0x013   ;0x13   3       SINGLE  0x13                            (3 number)
 E47B 014          1140             .CON    0x014   ;0x14   4       SINGLE  0x14                            (4 number)
 E47C 015          1141             .CON    0x015   ;0x15   5       SINGLE  0x15                            (5 number)
 E47D 016          1142             .CON    0x016   ;0x16   6       SINGLE  0x16                            (6 number)
 E47E 017          1143             .CON    0x017   ;0x17   7       SINGLE  0x17                            (7 number)
 E47F 018          1144             .CON    0x018   ;0x18   8       SINGLE  0x18                            (8 number)
 E480 019          1145             .CON    0x019   ;0x19   9       SINGLE  0x19                            (9 number)
 E481 01A          1146             .CON    0x01A   ;0x1A   .       SINGLE  0x1A                            (. number)
 E482 083          1147             .CON    0x083   ;0x1B   ENTER^  SINGLE  0x83                            (ENTER^)
 E483 25F          1148             .CON    0x25F   ;0x1C   CHS     EXEC    @E65F                           (CHS or NEG)
 E484 01B          1149             .CON    0x01B   ;0x1D   EEX     SINGLE  0x1B                            (EEX)
 E485 043          1150             .CON    0x043   ;0x1E   /       SINGLE  0x43                            (/)
 E486 000          1151             .CON    0x000   ;0x1F   -----VOID----------------
 E487 089          1152             .CON    0x089   ;0x20   PAUSE   SINGLE  0x89                            (PSE)
 E488 062          1153             .CON    0x062   ;0x21   FACT    SINGLE  0x62                            (FACT)
 E489 1C4          1154             .CON    0x1C4   ;0x22   MEAN    MULTI-B @E5C4->0x99, 0x0E, 0x7C         (ΣREG 14, MEAN)
 E48A 1CA          1155             .CON    0x1CA   ;0x23   SDEV    MULTI-B @E5CA->0x99, 0x0E, 0x7D         (ΣREG 14, SDEV)
 E48B 04D          1156             .CON    0x04D   ;0x24   %CH     SINGLE  0x4D                            (%CH)
 E48C 1CD          1157             .CON    0x1CD   ;0x25   S-      MULTI-B @E5CD->0x99, 0x0E, 0x48         (ΣREG 14, Σ-)
 E48D 061          1158             .CON    0x061   ;0x26   ABS     SINGLE  0x61                            (ABS)
 E48E 056          1159             .CON    0x056   ;0x27   LOG     SINGLE  0x56                            (LOG)
 E48F 057          1160             .CON    0x057   ;0x28   10^X    SINGLE  0x57                            (10^X)
 E490 068          1161             .CON    0x068   ;0x29   INT     SINGLE  0x68                            (INT)
 E491 05C          1162             .CON    0x05C   ;0x2A   ASIN    SINGLE  0x5C                            (ASIN)
 E492 05D          1163             .CON    0x05D   ;0x2B   ACOS    SINGLE  0x5D                            (ACOS)
 E493 05E          1164             .CON    0x05E   ;0x2C   ATAN    SINGLE  0x5E                            (ATAN)
 E494 069          1165             .CON    0x069   ;0x2D   FRAC    SINGLE  0x69                            (FRC)
 E495 06E          1166             .CON    0x06E   ;0x2E   RND     SINGLE  0x6E                            (RND)
 E496 000          1167             .CON    0x000   ;0x2F   -----VOID----------------
 E497 071          1168             .CON    0x071   ;0x30   X<>Y    SINGLE  0x71                            (X<>Y)
 E498 075          1169             .CON    0x075   ;0x31   RDN     SINGLE  0x75                            (RDN)
 E499 077          1170             .CON    0x077   ;0x32   CLX     SINGLE  0x77                            (CLX)
 E49A 399          1171             .CON    0x399   ;0x33   ENG     XROM    0xA7, 0x99                      (XROM 30,25) 7ENG
 E49B 39A          1172             .CON    0x39A   ;0x34   FIX     XROM    0xA7, 0x9A                      (XROM 30,26) 7FIX
 E49C 3A2          1173             .CON    0x3A2   ;0x35   -x-     XROM    0xA7, 0xA2                      (XROM 30,34) 7FIX
 E49D 3A4          1174             .CON    0x3A4   ;0x36   SCI     XROM    0xA7, 0xA4                      (XROM 30,36) 7FIX
 E49E 040          1175             .CON    0x040   ;0x37   +       SINGLE  0x40                            (+)
 E49F 041          1176             .CON    0x041   ;0x38   -       SINGLE  0x41                            (-)
 E4A0 042          1177             .CON    0x042   ;0x39   *       SINGLE  0x42                            (*)
 E4A1 06A          1178             .CON    0x06A   ;0x3A   D-R     SINGLE  0x6A                            (D-R)
 E4A2 06B          1179             .CON    0x06B   ;0x3B   R-D     SINGLE  0x6B                            (R-D)
 E4A3 06C          1180             .CON    0x06C   ;0x3C   ->H.MS  SINGLE  0x6C                            (HMS)
 E4A4 06D          1181             .CON    0x06D   ;0x3D   H<-     SINGLE  0x6D                            (HR)
 E4A5 1F3          1182             .CON    0x1F3   ;0x3E   STO (i) MULTI-B @E5F3->0x91, 0x99               (STO IND 25)
 E4A6 1F5          1183             .CON    0x1F5   ;0x3F   RCL (i) MULTI-B @E5F5->0x90, 0x99               (RCL IND 25)
 E4A7 049          1184             .CON    0x049   ;0x40   H.MS+   SINGLE  0x49                            (HMS+)
 E4A8 08F          1185             .CON    0x08F   ;0x41   SPACE   SINGLE  0x8F                            (ADV)
 E4A9 3A1          1186             .CON    0x3A1   ;0x42   STK     XROM    0xA7, 0xA1                      (XROM 30,33) 7PRSTK
 E4AA 076          1187             .CON    0x076   ;0x43   LSTX    SINGLE  0x76                            (LASTX)
 E4AB 387          1188             .CON    0x387   ;0x44   W/DATA  XROM    0xA7, 0x87                      (XROM 30,07) WDTA
 E4AC 381          1189             .CON    0x381   ;0x45   MERGE   XROM    0xA7, 0x81                      (XROM 30,01) MRG
 E4AD 1F7          1190             .CON    0x1F7   ;0x46   X<> I   MULTI-B @E5F7->0xCE, 0x19               (X<> 25)
 E4AE 074          1191             .CON    0x074   ;0x47   R^      SINGLE  0x74                            (R^)
 E4AF 072          1192             .CON    0x072   ;0x48   PI      SINGLE  0x72                            (PI)
 E4B0 080          1193             .CON    0x080   ;0x49   DEG     SINGLE  0x80                            (DEG)
 E4B1 081          1194             .CON    0x081   ;0x4A   RAD     SINGLE  0x81                            (RAD)
 E4B2 082          1195             .CON    0x082   ;0x4B   GRAD    SINGLE  0x82                            (GRAD)
 E4B3 39F          1196             .CON    0x39F   ;0x4C   P<>S    XROM    0xA7, 0x9F                      (XROM 30,31) 7P<>S
 E4B4 38B          1197             .CON    0x38B   ;0x4D   CLREG   XROM    0xA7, 0x8B                      (XROM 30,11) 7CLRG
 E4B5 3A0          1198             .CON    0x3A0   ;0x4E   REG     XROM    0xA7, 0xA0                      (XROM 30,32) 7PRREG
 E4B6 000          1199             .CON    0x000   ;0x4F   -----VOID----------------
 E4B7 079          1200             .CON    0x079   ;0x50   X#Y?    SINGLE  0x79                            (X#Y?)
 E4B8 078          1201             .CON    0x078   ;0x51   X=Y?    SINGLE  0x78                            (X=Y?)
 E4B9 045          1202             .CON    0x045   ;0x52   X>Y?    SINGLE  0x45                            (X>Y?)
 E4BA 063          1203             .CON    0x063   ;0x53   X#0?    SINGLE  0x53                            (X#0?)
 E4BB 067          1204             .CON    0x067   ;0x54   X=0?    SINGLE  0x54                            (X=0?)
 E4BC 064          1205             .CON    0x064   ;0x55   X>0?    SINGLE  0x55                            (X>0?)
 E4BD 066          1206             .CON    0x066   ;0x56   X<0?    SINGLE  0x56                            (X<0?)
 E4BE 046          1207             .CON    0x046   ;0x57   X<=Y?   SINGLE  0x57                            (X<=Y?)
 E4BF 1C2          1208             .CON    0x1C2   ;0x58   FS? 0   MULTI-A @E5C2->0xAC, 0x58               (FS? 00)
 E4C0 1C2          1209             .CON    0x1C2   ;0x59   FS? 1   MULTI-A @E5C2->0xAC, 0x58               (FS? 01)
 E4C1 1FD          1210             .CON    0x1FD   ;0x5A   FS? 2   MULTI-B @E5FD->0XAA, 0x02               (FS?C 02)
 E4C2 1FF          1211             .CON    0x1FF   ;0x5B   FS? 3   MULTI-B @E5FF->0xAA, 0x16               (FS?C 22) *See Note 3 above
 E4C3 39D          1212             .CON    0x39D   ;0x5C   ISZ     XROM    0xA7, 0x9D                      (XROM 30,29) 7ISZ
 E4C4 39E          1213             .CON    0x39E   ;0x5D   ISZ(I)  XROM    0xA7, 0x9E                      (XROM 30,30) 7ISZI
 E4C5 397          1214             .CON    0x397   ;0x5E   DSZ     XROM    0xA7, 0x97                      (XROM 30,23) 7DSZ
 E4C6 398          1215             .CON    0x398   ;0x5F   DSZ(i)  XROM    0xA7, 0x98                      (XROM 30,24) 7DSZI
 E4C7 1A7          1216             .CON    0x1A7   ;0x60   DSP 0   MULTI-A @E5A7->0x3D4->0xA7, 0x8C        (XROM 30,12) 7DSP0
 E4C8 1A7          1217             .CON    0x1A7   ;0x61   DSP 1   MULTI-A @E5A7->0x3D4->0xA7, 0x8D        (XROM 30,13) 7DSP1
 E4C9 1A7          1218             .CON    0x1A7   ;0x62   DSP 2   MULTI-A @E5A7->0x3D4->0xA7, 0x8E        (XROM 30,14) 7DSP2
 E4CA 1A7          1219             .CON    0x1A7   ;0x63   DSP 3   MULTI-A @E5A7->0x3D4->0xA7, 0x8F        (XROM 30,15) 7DSP3
 E4CB 1A7          1220             .CON    0x1A7   ;0x64   DSP 4   MULTI-A @E5A7->0x3D4->0xA7, 0x90        (XROM 30,16) 7DSP4
 E4CC 1A7          1221             .CON    0x1A7   ;0x65   DSP 5   MULTI-A @E5A7->0x3D4->0xA7, 0x91        (XROM 30,17) 7DSP5
 E4CD 1A7          1222             .CON    0x1A7   ;0x66   DSP 6   MULTI-A @E5A7->0x3D4->0xA7, 0x92        (XROM 30,18) 7DSP6
 E4CE 1A7          1223             .CON    0x1A7   ;0x67   DSP 7   MULTI-A @E5A7->0x3D4->0xA7, 0x93        (XROM 30,19) 7DSP7
 E4CF 1A7          1224             .CON    0x1A7   ;0x68   DSP 8   MULTI-A @E5A7->0x3D4->0xA7, 0x94        (XROM 30,20) 7DSP8
 E4D0 1A7          1225             .CON    0x1A7   ;0x69   DSP 9   MULTI-A @E5A7->0x3D4->0xA7, 0x95        (XROM 30,21) 7DSP9
 E4D1 1A9          1226             .CON    0x1A9   ;0x6A   CF 0    MULTI-A @E5A9->0xA9, 0x6A               (CF 00)
 E4D2 1A9          1227             .CON    0x1A9   ;0x6B   CF 1    MULTI-A @E5A9->0xA9, 0x6A               (CF 01)
 E4D3 1A9          1228             .CON    0x1A9   ;0x6C   CF 2    MULTI-A @E5A9->0xA9, 0x6A               (CF 02)
 E4D4 1F9          1229             .CON    0x1F9   ;0x6D   CF 3    MULTI-B @E5F9->0xA9, 0x16               (CF 22) *See Note 3 above
 E4D5 000          1230             .CON    0x000   ;0x6E   -----VOID----------------
 E4D6 396          1231             .CON    0x396   ;0x6F   DSP(i)  XROM    0xA7, 0x96                      (XROM 30,22) 7DSPI
 E4D7 020          1232             .CON    0x020   ;0x70   RCL 0   SINGLE  0x20                            (RCL 00)
 E4D8 021          1233             .CON    0x021   ;0x71   RCL 1   SINGLE  0x21                            (RCL 01)
 E4D9 022          1234             .CON    0x022   ;0x72   RCL 2   SINGLE  0x22                            (RCL 02)
 E4DA 023          1235             .CON    0x023   ;0x73   RCL 3   SINGLE  0x23                            (RCL 03)
 E4DB 024          1236             .CON    0x024   ;0x74   RCL 4   SINGLE  0x24                            (RCL 04)
 E4DC 025          1237             .CON    0x025   ;0x75   RCL 5   SINGLE  0x25                            (RCL 05)
 E4DD 026          1238             .CON    0x026   ;0x76   RCL 6   SINGLE  0x26                            (RCL 06)
 E4DE 027          1239             .CON    0x027   ;0x77   RCL 7   SINGLE  0x27                            (RCL 07)
 E4DF 028          1240             .CON    0x028   ;0x78   RCL 8   SINGLE  0x28                            (RCL 08)
 E4E0 029          1241             .CON    0x029   ;0x79   RCL 9   SINGLE  0x29                            (RCL 09)
 E4E1 1AB          1242             .CON    0x1AB   ;0x7A   RCL A   MULTI-A @E5AB->0x90, 0x66               (RCL 20)
 E4E2 1AB          1243             .CON    0x1AB   ;0x7B   RCL B   MULTI-A @E5AB->0x90, 0x66               (RCL 21)
 E4E3 1AB          1244             .CON    0x1AB   ;0x7C   RCL C   MULTI-A @E5AB->0x90, 0x66               (RCL 22)
 E4E4 1AB          1245             .CON    0x1AB   ;0x7D   RCL D   MULTI-A @E5AB->0x90, 0x66               (RCL 23)
 E4E5 1AB          1246             .CON    0x1AB   ;0x7E   RCL E   MULTI-A @E5AB->0x90, 0x66               (RCL 24)
 E4E6 1AB          1247             .CON    0x1AB   ;0x7F   RC I    MULTI-A @E5AB->0x90, 0x66               (RCL 25)
 E4E7 1AD          1248             .CON    0x1AD   ;0x80   ST/ 0   MULTI-A @E5AD->0x95, 0x80               (ST/ 00) 
 E4E8 1AD          1249             .CON    0x1AD   ;0x81   ST/ 1   MULTI-A @E5AD->0x95, 0x80               (ST/ 01) 
 E4E9 1AD          1250             .CON    0x1AD   ;0x82   ST/ 2   MULTI-A @E5AD->0x95, 0x80               (ST/ 02) 
 E4EA 1AD          1251             .CON    0x1AD   ;0x83   ST/ 3   MULTI-A @E5AD->0x95, 0x80               (ST/ 03) 
 E4EB 1AD          1252             .CON    0x1AD   ;0x84   ST/ 4   MULTI-A @E5AD->0x95, 0x80               (ST/ 04) 
 E4EC 1AD          1253             .CON    0x1AD   ;0x85   ST/ 5   MULTI-A @E5AD->0x95, 0x80               (ST/ 05) 
 E4ED 1AD          1254             .CON    0x1AD   ;0x86   ST/ 6   MULTI-A @E5AD->0x95, 0x80               (ST/ 06) 
 E4EE 1AD          1255             .CON    0x1AD   ;0x87   ST/ 7   MULTI-A @E5AD->0x95, 0x80               (ST/ 07) 
 E4EF 1AD          1256             .CON    0x1AD   ;0x88   ST/ 8   MULTI-A @E5AD->0x95, 0x80               (ST/ 08) 
 E4F0 1AD          1257             .CON    0x1AD   ;0x89   ST/ 9   MULTI-A @E5AD->0x95, 0x80               (ST/ 09) 
 E4F1 1AF          1258             .CON    0x1AF   ;0x8A   SF 0    MULTI-A @E5AF->0xA8, 0x8A,              (SF 00)
 E4F2 1AF          1259             .CON    0x1AF   ;0x8B   SF 1    MULTI-A @E5AF->0xA8, 0x8A,              (SF 01)
 E4F3 1AF          1260             .CON    0x1AF   ;0x8C   SF 2    MULTI-A @E5AF->0xA8, 0x8A,              (SF 02)
 E4F4 1FB          1261             .CON    0x1FB   ;0x8D   SF 3    MULTI-B @E5FB->0xA8, 0x16,              (SF 22) *See Note 3 above
 E4F5 000          1262             .CON    0x000   ;0x8E   -----VOID----------------
 E4F6 201          1263             .CON    0x201   ;0x8F   ST/ (i) MULTI-B @E601->0x95, 0x99               (ST/ IND 25)
 E4F7 030          1264             .CON    0x030   ;0x90   STO 0   SINGLE  0x30                            (STO 00)
 E4F8 031          1265             .CON    0x031   ;0x91   STO 1   SINGLE  0x31                            (STO 01)
 E4F9 032          1266             .CON    0x032   ;0x92   STO 2   SINGLE  0x32                            (STO 02)
 E4FA 033          1267             .CON    0x033   ;0x93   STO 3   SINGLE  0x33                            (STO 03)
 E4FB 034          1268             .CON    0x034   ;0x94   STO 4   SINGLE  0x34                            (STO 04)
 E4FC 035          1269             .CON    0x035   ;0x95   STO 5   SINGLE  0x35                            (STO 05)
 E4FD 036          1270             .CON    0x036   ;0x96   STO 6   SINGLE  0x36                            (STO 06)
 E4FE 037          1271             .CON    0x037   ;0x97   STO 7   SINGLE  0x37                            (STO 07)
 E4FF 038          1272             .CON    0x038   ;0x98   STO 8   SINGLE  0x38                            (STO 08)
 E500 039          1273             .CON    0x039   ;0x99   STO 9   SINGLE  0x39                            (STO 09)
 E501 1B1          1274             .CON    0x1B1   ;0x9A   STO A   MULTI-A @E5B1->0x91, 0x86               (STO 20)
 E502 1B1          1275             .CON    0x1B1   ;0x9B   STO B   MULTI-A @E5B1->0x91, 0x86               (STO 21)
 E503 1B1          1276             .CON    0x1B1   ;0x9C   STO C   MULTI-A @E5B1->0x91, 0x86               (STO 22)
 E504 1B1          1277             .CON    0x1B1   ;0x9D   STO D   MULTI-A @E5B1->0x91, 0x86               (STO 23)
 E505 1B1          1278             .CON    0x1B1   ;0x9E   STO E   MULTI-A @E5B1->0x91, 0x86               (STO 24)
 E506 1B1          1279             .CON    0x1B1   ;0x9F   ST I    MULTI-A @E5B1->0x91, 0x86               (STO 25)
 E507 1B3          1280             .CON    0x1B3   ;0xA0   ST- 0   MULTI-A @E5B3->0x93, 0xA0               (ST- 00) 
 E508 1B3          1281             .CON    0x1B3   ;0xA1   ST- 1   MULTI-A @E5B3->0x93, 0xA0               (ST- 01) 
 E509 1B3          1282             .CON    0x1B3   ;0xA2   ST- 2   MULTI-A @E5B3->0x93, 0xA0               (ST- 02) 
 E50A 1B3          1283             .CON    0x1B3   ;0xA3   ST- 3   MULTI-A @E5B3->0x93, 0xA0               (ST- 03) 
 E50B 1B3          1284             .CON    0x1B3   ;0xA4   ST- 4   MULTI-A @E5B3->0x93, 0xA0               (ST- 04) 
 E50C 1B3          1285             .CON    0x1B3   ;0xA5   ST- 5   MULTI-A @E5B3->0x93, 0xA0               (ST- 05) 
 E50D 1B3          1286             .CON    0x1B3   ;0xA6   ST- 6   MULTI-A @E5B3->0x93, 0xA0               (ST- 06) 
 E50E 1B3          1287             .CON    0x1B3   ;0xA7   ST- 7   MULTI-A @E5B3->0x93, 0xA0               (ST- 07) 
 E50F 1B3          1288             .CON    0x1B3   ;0xA8   ST- 8   MULTI-A @E5B3->0x93, 0xA0               (ST- 08) 
 E510 1B3          1289             .CON    0x1B3   ;0xA9   ST- 9   MULTI-A @E5B3->0x93, 0xA0               (ST- 09) 
 E511 1B5          1290             .CON    0x1B5   ;0xAA   GSB a   MULTI-A @E5B5->0xE0, 0x00, 0x9B         (XEQ 15)
 E512 1B5          1291             .CON    0x1B5   ;0xAB   GSB b   MULTI-A @E5B5->0xE0, 0x00, 0x9B         (XEQ 16)
 E513 1B5          1292             .CON    0x1B5   ;0xAC   GSB c   MULTI-A @E5B5->0xE0, 0x00, 0x9B         (XEQ 17)
 E514 1B5          1293             .CON    0x1B5   ;0xAD   GSB d   MULTI-A @E5B5->0xE0, 0x00, 0x9B         (XEQ 18)
 E515 1B5          1294             .CON    0x1B5   ;0xAE   GSB e   MULTI-A @E5B5->0xE0, 0x00, 0x9B         (XEQ 19)
 E516 203          1295             .CON    0x203   ;0xAF   ST- (i) MULTI-B @E603->0x93, 0x99               (ST- IND 25)
 E517 1B8          1296             .CON    0x1B8   ;0xB0   GSB 0   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 00)
 E518 1B8          1297             .CON    0x1B8   ;0xB1   GSB 1   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 01)
 E519 1B8          1298             .CON    0x1B8   ;0xB2   GSB 2   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 02)
 E51A 1B8          1299             .CON    0x1B8   ;0xB3   GSB 3   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 03)
 E51B 1B8          1300             .CON    0x1B8   ;0xB4   GSB 4   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 04)
 E51C 1B8          1301             .CON    0x1B8   ;0xB5   GSB 5   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 05)
 E51D 1B8          1302             .CON    0x1B8   ;0xB6   GSB 6   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 06)
 E51E 1B8          1303             .CON    0x1B8   ;0xB7   GSB 7   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 07)
 E51F 1B8          1304             .CON    0x1B8   ;0xB8   GSB 8   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 08)
 E520 1B8          1305             .CON    0x1B8   ;0xB9   GSB 9   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 09)
 E521 1B8          1306             .CON    0x1B8   ;0xBA   GSB A   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 10)
 E522 1B8          1307             .CON    0x1B8   ;0xBB   GSB B   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 11)
 E523 1B8          1308             .CON    0x1B8   ;0xBC   GSB C   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 12)
 E524 1B8          1309             .CON    0x1B8   ;0xBD   GSB D   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 13)
 E525 1B8          1310             .CON    0x1B8   ;0xBE   GSB E   MULTI-A @E5B8->0xE0, 0x00, 0xB0         (XEQ 14)
 E526 39B          1311             .CON    0x39B   ;0xBF   GSB (i) XROM    0xA7, 0x9B                      (XROM 30,27) 7GSBI
 E527 1BB          1312             .CON    0x1BB   ;0xC0   ST+ 0   MULTI-A @E5BB->0x92, 0xC0               (ST+ 00) 
 E528 1BB          1313             .CON    0x1BB   ;0xC1   ST+ 1   MULTI-A @E5BB->0x92, 0xC0               (ST+ 01) 
 E529 1BB          1314             .CON    0x1BB   ;0xC2   ST+ 2   MULTI-A @E5BB->0x92, 0xC0               (ST+ 02) 
 E52A 1BB          1315             .CON    0x1BB   ;0xC3   ST+ 3   MULTI-A @E5BB->0x92, 0xC0               (ST+ 03) 
 E52B 1BB          1316             .CON    0x1BB   ;0xC4   ST+ 4   MULTI-A @E5BB->0x92, 0xC0               (ST+ 04) 
 E52C 1BB          1317             .CON    0x1BB   ;0xC5   ST+ 5   MULTI-A @E5BB->0x92, 0xC0               (ST+ 05) 
 E52D 1BB          1318             .CON    0x1BB   ;0xC6   ST+ 6   MULTI-A @E5BB->0x92, 0xC0               (ST+ 06) 
 E52E 1BB          1319             .CON    0x1BB   ;0xC7   ST+ 7   MULTI-A @E5BB->0x92, 0xC0               (ST+ 07) 
 E52F 1BB          1320             .CON    0x1BB   ;0xC8   ST+ 8   MULTI-A @E5BB->0x92, 0xC0               (ST+ 08) 
 E530 1BB          1321             .CON    0x1BB   ;0xC9   ST+ 9   MULTI-A @E5BB->0x92, 0xC0               (ST+ 09) 
 E531 1BD          1322             .CON    0x1BD   ;0xCA   GTO a   MULTI-A @E5BD->0xD0, 0x00, 0xBB         (GTO 15)
 E532 1BD          1323             .CON    0x1BD   ;0xCB   GTO b   MULTI-A @E5BD->0xD0, 0x00, 0xBB         (GTO 16)
 E533 1BD          1324             .CON    0x1BD   ;0xCC   GTO c   MULTI-A @E5BD->0xD0, 0x00, 0xBB         (GTO 17)
 E534 1BD          1325             .CON    0x1BD   ;0xCD   GTO d   MULTI-A @E5BD->0xD0, 0x00, 0xBB         (GTO 18)
 E535 1BD          1326             .CON    0x1BD   ;0xCE   GTO e   MULTI-A @E5BD->0xD0, 0x00, 0xBB         (GTO 19)
 E536 205          1327             .CON    0x205   ;0xCF   ST+ (i) MULTI-B @E605->0x92, 0x99               (ST+ IND 25)
 E537 276          1328             .CON    0x276   ;0xD0   GTO 0   EXEC    @E676->0xB1, 0x00               (GTO 00)
 E538 276          1329             .CON    0x276   ;0xD1   GTO 1   EXEC    @E676->0xB2, 0x00               (GTO 01)
 E539 276          1330             .CON    0x276   ;0xD2   GTO 2   EXEC    @E676->0xB3, 0x00               (GTO 02)
 E53A 276          1331             .CON    0x276   ;0xD3   GTO 3   EXEC    @E676->0xB4, 0x00               (GTO 03)
 E53B 276          1332             .CON    0x276   ;0xD4   GTO 4   EXEC    @E676->0xB5, 0x00               (GTO 04)
 E53C 276          1333             .CON    0x276   ;0xD5   GTO 5   EXEC    @E676->0xB6, 0x00               (GTO 05)
 E53D 276          1334             .CON    0x276   ;0xD6   GTO 6   EXEC    @E676->0xB7, 0x00               (GTO 06)
 E53E 276          1335             .CON    0x276   ;0xD7   GTO 7   EXEC    @E676->0xB8, 0x00               (GTO 07)
 E53F 276          1336             .CON    0x276   ;0xD8   GTO 8   EXEC    @E676->0xB9, 0x00               (GTO 08)
 E540 276          1337             .CON    0x276   ;0xD9   GTO 9   EXEC    @E676->0xBA, 0x00               (GTO 09)
 E541 276          1338             .CON    0x276   ;0xDA   GTO A   EXEC    @E676->0xBB, 0x00               (GTO 0A)
 E542 276          1339             .CON    0x276   ;0xDB   GTO B   EXEC    @E676->0xBC, 0x00               (GTO 0B)
 E543 276          1340             .CON    0x276   ;0xDC   GTO C   EXEC    @E676->0xBD, 0x00               (GTO 0C)
 E544 276          1341             .CON    0x276   ;0xDD   GTO D   EXEC    @E676->0xBE, 0x00               (GTO 0D)
 E545 276          1342             .CON    0x276   ;0xDE   GTO E   EXEC    @E676->0xBF, 0x00               (GTO 0E)
 E546 39C          1343             .CON    0x39C   ;0xDF   GTO (i) XROM    0xA7, 0x9C                      (XROM 30,28) 7GTOI
 E547 1C0          1344             .CON    0x1C0   ;0xE0   ST* 0   MULTI-A @E5C0->0x94, 0xE0               (ST* 00) 
 E548 1C0          1345             .CON    0x1C0   ;0xE1   ST* 1   MULTI-A @E5C0->0x94, 0xE0               (ST* 01) 
 E549 1C0          1346             .CON    0x1C0   ;0xE2   ST* 2   MULTI-A @E5C0->0x94, 0xE0               (ST* 02) 
 E54A 1C0          1347             .CON    0x1C0   ;0xE3   ST* 3   MULTI-A @E5C0->0x94, 0xE0               (ST* 03) 
 E54B 1C0          1348             .CON    0x1C0   ;0xE4   ST* 4   MULTI-A @E5C0->0x94, 0xE0               (ST* 04) 
 E54C 1C0          1349             .CON    0x1C0   ;0xE5   ST* 5   MULTI-A @E5C0->0x94, 0xE0               (ST* 05) 
 E54D 1C0          1350             .CON    0x1C0   ;0xE6   ST* 6   MULTI-A @E5C0->0x94, 0xE0               (ST* 06) 
 E54E 1C0          1351             .CON    0x1C0   ;0xE7   ST* 7   MULTI-A @E5C0->0x94, 0xE0               (ST* 07) 
 E54F 1C0          1352             .CON    0x1C0   ;0xE8   ST* 8   MULTI-A @E5C0->0x94, 0xE0               (ST* 08) 
 E550 1C0          1353             .CON    0x1C0   ;0xE9   ST* 9   MULTI-A @E5C0->0x94, 0xE0               (ST* 09) 
 E551 1DF          1354             .CON    0x1DF   ;0xEA   LBL a   MULTI-B @E5DF->0xCF, 0x0F, 0xCF, 0x7B   (LBL 15, LBL a)
 E552 1E3          1355             .CON    0x1E3   ;0xEB   LBL b   MULTI-B @E5E3->0xCF, 0x10, 0xCF, 0x7C   (LBL 16, LBL b)
 E553 1E7          1356             .CON    0x1E7   ;0xEC   LBL c   MULTI-B @E5E7->0xCF, 0x11, 0xCF, 0x7D   (LBL 17, LBL c)
 E554 1EB          1357             .CON    0x1EB   ;0xED   LBL d   MULTI-B @E5EB->0xCF, 0x12, 0xCF, 0x7E   (LBL 18, LBL d)
 E555 1EF          1358             .CON    0x1EF   ;0xEE   LBL e   MULTI-B @E5EF->0xCF, 0x13, 0xCF, 0x7F   (LBL 19, LBL e)
 E556 207          1359             .CON    0x207   ;0xEF   ST* (i) MULTI-B @6507->0x94, 0x99               (ST* IND 25)
 E557 001          1360             .CON    0x001   ;0xF0   LBL 0   SINGLE  0x01                            (LBL 00)
 E558 002          1361             .CON    0x002   ;0xF1   LBL 1   SINGLE  0x02                            (LBL 01)
 E559 003          1362             .CON    0x003   ;0xF2   LBL 2   SINGLE  0x03                            (LBL 02)
 E55A 004          1363             .CON    0x004   ;0xF3   LBL 3   SINGLE  0x04                            (LBL 03)
 E55B 005          1364             .CON    0x005   ;0xF4   LBL 4   SINGLE  0x05                            (LBL 04)
 E55C 006          1365             .CON    0x006   ;0xF5   LBL 5   SINGLE  0x06                            (LBL 05)
 E55D 007          1366             .CON    0x007   ;0xF6   LBL 6   SINGLE  0x07                            (LBL 06)
 E55E 008          1367             .CON    0x008   ;0xF7   LBL 7   SINGLE  0x08                            (LBL 07)
 E55F 009          1368             .CON    0x009   ;0xF8   LBL 8   SINGLE  0x09                            (LBL 08)
 E560 00A          1369             .CON    0x00A   ;0xF9   LBL 9   SINGLE  0x0A                            (LBL 09)
 E561 1D0          1370             .CON    0x1D0   ;0xFA   LBL A   MULTI-B @E5D0->0x0B, 0xCF, 0x66         (LBL 10, LBL A)
 E562 1D3          1371             .CON    0x1D3   ;0xFB   LBL B   MULTI-B @E5D3->0x0C, 0xCF, 0x67         (LBL 11, LBL B)
 E563 1D6          1372             .CON    0x1D6   ;0xFC   LBL C   MULTI-B @E5D6->0x0D, 0xCF, 0x68         (LBL 12, LBL C)
 E564 1D9          1373             .CON    0x1D9   ;0xFD   LBL D   MULTI-B @E5D9->0x0E, 0xCF, 0x69         (LBL 13, LBL D)
 E565 1DC          1374             .CON    0x1DC   ;0xFE   LBL E   MULTI-B @E5DC->0x0F, 0xCF, 0x6A         (LBL 14, LBL E)
 E566 000          1375             .CON    0x000   ;0xFF   -----VOID----------------

Table 2 (-- Edited by GW to Table 2 from Table 1 heading)
--------------
Code:

                   1447 ;**************************************************************************​****
                   1448 ; * TRANS TABLE 2
                   1449 ; * Second table of translation codes to convert from 67 byte codes into the 41
                   1450 ; * byte table. This table is used for translations that require one to many, or
                   1451 ; * special processing.
                   1452 ;**************************************************************************​****
                   1453 .FILLTO 0x5A7
                   1454             //----------------------------------------------------------------
                   1455             //      TC2                     translates              using
                   1456             //----------------------------------------------------------------
 E5A7 3D4          1457             .CON    0x3D4                   ; DSP0-9 (gives A7xx)   (MULTI-A)
 E5A8 2A7          1458             .CON    0x2A7
 E5A9 06A          1459             .CON    0x06A                   ; CF 0-2                (MULTI-A)
 E5AA 2A9          1460             .CON    0x2A9
 E5AB 066          1461             .CON    0x066                   ; RCL A-E, I            (MULTI-A)
 E5AC 290          1462             .CON    0x290
 E5AD 080          1463             .CON    0x080                   ; ST/ 0-9               (MULTI-A)
 E5AE 295          1464             .CON    0x295
 E5AF 08A          1465             .CON    0x08A                   ; SF 0-2                (MULTI-A)
 E5B0 2A8          1466             .CON    0x2A8
 E5B1 086          1467             .CON    0x086                   ; STO A-E, I            (MULTI-A)
 E5B2 291          1468             .CON    0x291
 E5B3 0A0          1469             .CON    0x0A0                   ; ST- 0-9               (MULTI-A)
 E5B4 293          1470             .CON    0x293
 E5B5 09B          1471             .CON    0x09B                   ; GSB a-e               (MULTI-A)
 E5B6 000          1472             .CON    0x000
 E5B7 2E0          1473             .CON    0x2E0
 E5B8 0B0          1474             .CON    0x0B0                   ; GSB 0-E               (MULTI-A)
 E5B9 000          1475             .CON    0x000
 E5BA 2E0          1476             .CON    0x2E0
 E5BB 0C0          1477             .CON    0x0C0                   ; ST+ 0-9               (MULTI-A)
 E5BC 292          1478             .CON    0x292
 E5BD 0BB          1479             .CON    0x0BB                   ; GTO a-e               (MULTI-A)
 E5BE 000          1480             .CON    0x000
 E5BF 2D0          1481             .CON    0x2D0
 E5C0 0E0          1482             .CON    0x0E0                   ; ST* 0-9               (MULTI-A)
 E5C1 294          1483             .CON    0x294
 E5C2 058          1484             .CON    0x058                   ; FS? 0 or FS? 1        (MULTI-A)
 E5C3 2AC          1485             .CON    0x2AC
 E5C4 07C          1486             .CON    0x07C                   ; MEAN                  (MULTI-B)
 E5C5 00E          1487             .CON    0x00E
 E5C6 299          1488             .CON    0x299
 E5C7 047          1489             .CON    0x047                   ; Σ+                    (MULTI-B)
 E5C8 00E          1490             .CON    0x00E
 E5C9 299          1491             .CON    0x299
 E5CA 07D          1492             .CON    0x07D                   ; SDEV                  (MULTI-B)
 E5CB 00E          1493             .CON    0x00E
 E5CC 299          1494             .CON    0x299
 E5CD 048          1495             .CON    0x048                   ; Σ-                    (MULTI-B)
 E5CE 00E          1496             .CON    0x00E
 E5CF 299          1497             .CON    0x299
 E5D0 066          1498             .CON    0x066                   ; LBL A                 (MULTI-B)
 E5D1 0CF          1499             .CON    0x0CF
 E5D2 20B          1500             .CON    0x20B
 E5D3 067          1501             .CON    0x067                   ; LBL B                 (MULTI-B)
 E5D4 0CF          1502             .CON    0x0CF
 E5D5 20C          1503             .CON    0x20C
 E5D6 068          1504             .CON    0x068                   ; LBL C                 (MULTI-B)
 E5D7 0CF          1505             .CON    0x0CF
 E5D8 20D          1506             .CON    0x20D
 E5D9 069          1507             .CON    0x069                   ; LBL D                 (MULTI-B)
 E5DA 0CF          1508             .CON    0x0CF
 E5DB 20E          1509             .CON    0x20E
 E5DC 06A          1510             .CON    0x06A                   ; LBL E                 (MULTI-B)
 E5DD 0CF          1511             .CON    0x0CF
 E5DE 20F          1512             .CON    0x20F
 E5DF 07B          1513             .CON    0x07B                   ; LBL a                 (MULTI-B)
 E5E0 0CF          1514             .CON    0x0CF
 E5E1 00F          1515             .CON    0x00F
 E5E2 2CF          1516             .CON    0x2CF
 E5E3 07C          1517             .CON    0x07C                   ; LBL b                 (MULTI-B)
 E5E4 0CF          1518             .CON    0x0CF
 E5E5 010          1519             .CON    0x010
 E5E6 2CF          1520             .CON    0x2CF
 E5E7 07D          1521             .CON    0x07D                   ; LBL c                 (MULTI-B)
 E5E8 0CF          1522             .CON    0x0CF
 E5E9 011          1523             .CON    0x011
 E5EA 2CF          1524             .CON    0x2CF
 E5EB 07E          1525             .CON    0x07E                   ; LBL d                 (MULTI-B)
 E5EC 0CF          1526             .CON    0x0CF
 E5ED 012          1527             .CON    0x012
 E5EE 2CF          1528             .CON    0x2CF
 E5EF 07F          1529             .CON    0x07F                   ; LBL e                 (MULTI-B)
 E5F0 0CF          1530             .CON    0x0CF
 E5F1 013          1531             .CON    0x013
 E5F2 2CF          1532             .CON    0x2CF
 E5F3 099          1533             .CON    0x099                   ; STO (i)               (MULTI-B)
 E5F4 291          1534             .CON    0x291
 E5F5 099          1535             .CON    0x099                   ; RCL (i)               (MULTI-B)
 E5F6 290          1536             .CON    0x290
 E5F7 019          1537             .CON    0x019                   ; X<> I                 (MULTI-B)
 E5F8 2CE          1538             .CON    0x2CE
 E5F9 016          1539             .CON    0x016                   ; CF 3                  (MULTI-B)
 E5FA 2A9          1540             .CON    0x2A9
 E5FB 016          1541             .CON    0x016                   ; SF 3                  (MULTI-B)
 E5FC 2A8          1542             .CON    0x2A8
 E5FD 002          1543             .CON    0x002                   ; FS? 2                 (MULTI-B)
 E5FE 2AA          1544             .CON    0x2AA
 E5FF 016          1545             .CON    0x016                   ; FS? 3                 (MULTI-B)
 E600 2AA          1546             .CON    0x2AA
 E601 099          1547             .CON    0x099                   ; ST/ (i)               (MULTI-B)
 E602 295          1548             .CON    0x295
 E603 099          1549             .CON    0x099                   ; ST- (i)               (MULTI-B)
 E604 293          1550             .CON    0x293
 E605 099          1551             .CON    0x099                   ; ST+ (i)               (MULTI-B)
 E606 292          1552             .CON    0x292
 E607 099          1553             .CON    0x099                   ; ST* (i)               (MULTI-B)
 E608 294          1554             .CON    0x294

Enjoy!
[attachment=7575]
[attachment=7574]


RE: MCODE: Card_Reader 1G ROM - Ángel Martin - 08-02-2019 07:49 AM

Great job Robert! many thanks for the detailed descriptions; time to delve in again but I think you pretty much covered all bases.

ÁM


RE: MCODE: Card_Reader 1G ROM - hth - 08-03-2019 03:07 AM

Fantastic!

LB_E781 is RSTKCA, 'rebuild the key reassignment bit maps' which also appears in the extended functions module.


RE: MCODE: Card_Reader 1G ROM - RobertM - 08-04-2019 04:56 PM

(08-03-2019 03:07 AM)hth Wrote:  Fantastic!

LB_E781 is RSTKCA, 'rebuild the key reassignment bit maps' which also appears in the extended functions module.

Excellent! Thanks Håkan!


RE: MCODE: Card_Reader 1G ROM - hth - 08-04-2019 09:13 PM

Can this go to Github (or similar site)? I am thinking that it would be good to have it one official location.


RE: MCODE: Card_Reader 1G ROM - rprosperi - 08-04-2019 10:16 PM

Suggest this be kept in the fan community; no need for excessive exposure, poking the bear.

I'd say TOS is the most logical and appropriate place to post it - that's probably where most folks would go looking for it as well.


RE: MCODE: Card_Reader 1G ROM - Ángel Martin - 08-05-2019 04:38 AM

(08-04-2019 10:16 PM)rprosperi Wrote:  Suggest this be kept in the fan community; no need for excessive exposure, poking the bear.

I'd say TOS is the most logical and appropriate place to post it - that's probably where most folks would go looking for it as well.

Definitely it should also be in the articles section, where it won't be buried by all the forum activity.

ÁM


RE: MCODE: Card_Reader 1G ROM - rprosperi - 08-05-2019 01:06 PM

(08-05-2019 04:38 AM)Ángel Martin Wrote:  
(08-04-2019 10:16 PM)rprosperi Wrote:  Suggest this be kept in the fan community; no need for excessive exposure, poking the bear.

I'd say TOS is the most logical and appropriate place to post it - that's probably where most folks would go looking for it as well.

Definitely it should also be in the articles section, where it won't be buried by all the forum activity.

ÁM

Yes, both places are best as Angel points out; submit it to Warren and ask to have it added to the Library at TOS, but also add it in the Articles Forum here at MoHPC.


RE: MCODE: Card_Reader 1G ROM - RobertM - 08-05-2019 09:14 PM

(08-05-2019 01:06 PM)rprosperi Wrote:  Yes, both places are best as Angel points out; submit it to Warren and ask to have it added to the Library at TOS, but also add it in the Articles Forum here at MoHPC.

Happy to take a second swing at the "quick overview" and submit it to the articles here ... maybe as a pdf, and even to TOS.

Were you guys (thinking of me submitting the src/lst files as well? Even though they are very incomplete?


RE: MCODE: Card_Reader 1G ROM - rprosperi - 08-06-2019 02:48 AM

(08-05-2019 09:14 PM)RobertM Wrote:  Happy to take a second swing at the "quick overview" and submit it to the articles here ... maybe as a pdf, and even to TOS.

Were you guys (thinking of me submitting the src/lst files as well? Even though they are very incomplete?

I'd say that if you're planning to work on it further, best to wait until you complete it, or get as far as you think you can, and then post it to both places; there's likely no urgent demand, just nice to have it in the places future fans are likely to look.

If it will be some time before completion, you might submit it now to TOS, the files (docs and src/lst files) can be easily updated with new versions when available. Articles here are more difficult to update, but you could always post an article now and later post another one, referencing the original.