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.
|