05-11-2022, 12:58 PM
Greetings fellow enthusiasts,
If you ever had questions about the hp-41 X-Mem design and implementation, perhaps wishing that HP had done something *different* (and this is not implying that the actual model is a bad one), then you may enjoy the chance to travel "the path not taken", playing around with this new module/
Meet the XMem-(e)TWIN module, where the "e" in this case stands for both electronic and evil - Why evil, you ask? Because those void memory segments in-between X-Mem modules certainly deserve such a moniker; a real struggle to manage in the MCODE and a waste of available space (what were they thinking?) -- but let's not digress...
The XMEM_TWIN module provides a complete set of functions targeted to the X-Registers that make the Extended memory area. Within X-Mem there are 606 X-Registers that can now be accessed individually using X-versions of (A)RCL, (A)STO, X<>, ISG, DSE, VIEW, etc., fully supporting direct and indirect addressing, for the three ranges of data sources: Stack Registers, "regular" Data registers, and X-Registers.
Obviously once you get into this path there's no use for any of the "official" X-Mem functions, so this is an either/or choice. But it's totally "reversible" (for the lack of a better word), simply use CLXM to start over from a clean slate using the orthodox way.
Remember: X-Mem files will not survive the use of the X-Regs functions!
The module also includes a large set of application routines all based on the PPC classic programs for sorting, matrices and block handling. Basically they are the same routines, only using X-Registers instead of the "regular" ones (sic.)
Reasonable amount of testing has been done but this is never enough (remember those memory voids, always lurking in the dark?) - so be careful and DO NOT use it if you don't have a backup. Use it at your own risk, as they say.
Hope you enjoy playing with this evil twin, and as usual feedback is always welcome.
Cheers,
ÁM
P.S.- The Library#4 is required, also included in the attached ZIP container.
PSS. New version attached, it corrects a minor bug in the ST/RG U/I.
PPSS.- Function list:
If you ever had questions about the hp-41 X-Mem design and implementation, perhaps wishing that HP had done something *different* (and this is not implying that the actual model is a bad one), then you may enjoy the chance to travel "the path not taken", playing around with this new module/
Meet the XMem-(e)TWIN module, where the "e" in this case stands for both electronic and evil - Why evil, you ask? Because those void memory segments in-between X-Mem modules certainly deserve such a moniker; a real struggle to manage in the MCODE and a waste of available space (what were they thinking?) -- but let's not digress...
The XMEM_TWIN module provides a complete set of functions targeted to the X-Registers that make the Extended memory area. Within X-Mem there are 606 X-Registers that can now be accessed individually using X-versions of (A)RCL, (A)STO, X<>, ISG, DSE, VIEW, etc., fully supporting direct and indirect addressing, for the three ranges of data sources: Stack Registers, "regular" Data registers, and X-Registers.
Obviously once you get into this path there's no use for any of the "official" X-Mem functions, so this is an either/or choice. But it's totally "reversible" (for the lack of a better word), simply use CLXM to start over from a clean slate using the orthodox way.
Remember: X-Mem files will not survive the use of the X-Regs functions!
The module also includes a large set of application routines all based on the PPC classic programs for sorting, matrices and block handling. Basically they are the same routines, only using X-Registers instead of the "regular" ones (sic.)
Reasonable amount of testing has been done but this is never enough (remember those memory voids, always lurking in the dark?) - so be careful and DO NOT use it if you don't have a backup. Use it at your own risk, as they say.
Hope you enjoy playing with this evil twin, and as usual feedback is always welcome.
Cheers,
ÁM
P.S.- The Library#4 is required, also included in the attached ZIP container.
PSS. New version attached, it corrects a minor bug in the ST/RG U/I.
PPSS.- Function list:
Code:
--XROM----ADDR--FUNCTION --------------
020.00 AF6F -XMEM_TWIN MCode XROM 20.00 "-XMEM TWIN"
020.01 A784 TF# MCode XROM 20.01 "TF#"
020.02 A7BB TF$ MCode XROM 20.02 "TF$"
020.03 A9EE A<>XRG MCode XROM 20.03 "A<>XRG"
020.04 A48B CLXRG MCode XROM 20.04 "CLXRG"
020.05 A9A5 CLXRGX MCode XROM 20.05 "CLXRGX"
020.06 A874 CPYBNK MCode XROM 20.06 "CPYBNK"
020.07 A852 STKSWP MCode XROM 20.07 "STKSWP"
020.08 A9F7 ST<>XRG MCode XROM 20.08 "ST<>XRG"
020.09 A08A XFINDX MCode XROM 20.09 "XFINDX"
020.10 A93D XRGMOV MCode XROM 20.10 "XRGMOV"
020.11 A945 XRGSWP MCode XROM 20.11 "XRGSWP"
020.12 AF64 -X-REGS_FNS MCode XROM 20.12 "-X-REGS FNS"
020.13 ABBA XARC MCode XROM 20.13 "XARC"
020.14 ABC2 XAST MCode XROM 20.14 "XAST"
020.15 ABEF XDSE MCode XROM 20.15 "XDSE"
020.16 ABF9 XISG MCode XROM 20.16 "XISG"
020.17 ABCA XRCL MCode XROM 20.17 "XRCL"
020.18 AB82 XRC+ MCode XROM 20.18 "XRC+"
020.19 AB89 XRC- MCode XROM 20.19 "XRC-"
020.20 AB90 XRC* MCode XROM 20.20 "XRC*"
020.21 AB97 XRC/ MCode XROM 20.21 "XRC/"
020.22 ABD3 XSTO MCode XROM 20.22 "XSTO"
020.23 AB9E XST+ MCode XROM 20.23 "XST+"
020.24 ABA5 XST- MCode XROM 20.24 "XST-"
020.25 ABAC XST* MCode XROM 20.25 "XST*"
020.26 ABB3 XST/ MCode XROM 20.26 "XST/"
020.27 ABE5 XVEW MCode XROM 20.27 "XVEW"
020.28 ABDC XX<> MCode XROM 20.28 "XX<>"
020.29 AEBC -XREGS_APPS MCode XROM 20.29 "-XREGS APPS"
020.30 A7D4 LSTF MCode XROM 20.30 "LSTF"
020.31 AE56 "XDUMP" UCode XROM 20.31 "XDUMP"
020.32 AE21 "XINP" UCode XROM 20.32 "XINP"
020.33 ADFF "XOUT" UCode XROM 20.33 "XOUT"
020.34 ADE0 "XRAN" UCode XROM 20.34 "XRAN"
020.35 AE66 "XSHFT" UCode XROM 20.35 "XSHFT"
020.36 ADA6 "XSORT" UCode XROM 20.36 "XSORT"
020.37 AEA4 -XPPC_MTRX MCode XROM 20.37 "-XPPC MTRX"
020.38 A696 "QR" UCode XROM 20.38 "QR"
020.39 AD17 "XMIO" UCode XROM 20.39 "XMIO"
020.40 A356 "XRRM" UCode XROM 20.40 "XRRM"
020.41 A11A "XM1" UCode XROM 20.41 "XM1"
020.42 A0D7 "XM2" UCode XROM 20.42 "XM2"
020.43 A0EE "XM3" UCode XROM 20.43 "XM3"
020.44 A15C "XM4" UCode XROM 20.44 "XM4"
020.45 A16F "XM5" UCode XROM 20.45 "XM5"
020.46 A4E2 "XS1" UCode XROM 20.46 "XS1"
020.47 A5C0 "XS2" UCode XROM 20.47 "XS2"
020.48 A50F "XS3" UCode XROM 20.48 "XS3"
020.49 AEAF -XPPC_BLCK MCode XROM 20.49 "-XPPC BLCK"
020.50 A28A "XBC" UCode XROM 20.50 "XBC"
020.51 A128 "XBE" UCode XROM 20.51 "XBE"
020.52 A2DA "XBI" UCode XROM 20.52 "XBI"
020.53 A1B6 "XBM" UCode XROM 20.53 "XBM"
020.54 A1E6 "XBR" UCode XROM 20.54 "XBR"
020.55 A659 "XBV" UCode XROM 20.55 "XBV"
020.56 A26A "XB?" UCode XROM 20.56 "XB?"
020.57 A223 "XBX" UCode XROM 20.57 "XBX"
020.58 A1A6 "XDR" UCode XROM 20.58 "XDR"
020.59 A194 "XIR" UCode XROM 20.59 "XIR"
020.60 A2F0 "XMS" UCode XROM 20.60 "XMS"
020.61 A2B9 "XPR" UCode XROM 20.61 "XPR"
020.62 A322 "XSM" UCode XROM 20.62 "XSM"
020.63 A29F "XUR" UCode XROM 20.63 "XUR"